tailwind-styled-v4 5.0.10 → 5.0.11

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 (93) hide show
  1. package/README.md +245 -373
  2. package/dist/analyzer.js +75 -22
  3. package/dist/analyzer.js.map +1 -1
  4. package/dist/analyzer.mjs +74 -21
  5. package/dist/analyzer.mjs.map +1 -1
  6. package/dist/animate.js +4 -2
  7. package/dist/animate.js.map +1 -1
  8. package/dist/animate.mjs +4 -2
  9. package/dist/animate.mjs.map +1 -1
  10. package/dist/atomic.js +20 -5
  11. package/dist/atomic.js.map +1 -1
  12. package/dist/atomic.mjs +20 -5
  13. package/dist/atomic.mjs.map +1 -1
  14. package/dist/cli.js +174 -67
  15. package/dist/cli.js.map +1 -1
  16. package/dist/cli.mjs +171 -64
  17. package/dist/cli.mjs.map +1 -1
  18. package/dist/compiler.d.mts +7 -1
  19. package/dist/compiler.d.ts +7 -1
  20. package/dist/compiler.js +53 -27
  21. package/dist/compiler.js.map +1 -1
  22. package/dist/compiler.mjs +53 -27
  23. package/dist/compiler.mjs.map +1 -1
  24. package/dist/devtools.js.map +1 -1
  25. package/dist/devtools.mjs.map +1 -1
  26. package/dist/engine.js +159 -61
  27. package/dist/engine.js.map +1 -1
  28. package/dist/engine.mjs +159 -61
  29. package/dist/engine.mjs.map +1 -1
  30. package/dist/index.browser.mjs +1512 -0
  31. package/dist/index.browser.mjs.map +1 -0
  32. package/dist/index.d.mts +94 -12
  33. package/dist/index.d.ts +94 -12
  34. package/dist/index.js +436 -106
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.mjs +436 -106
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/next.js +1946 -47
  39. package/dist/next.js.map +1 -1
  40. package/dist/next.mjs +1929 -44
  41. package/dist/next.mjs.map +1 -1
  42. package/dist/plugin-api.js.map +1 -1
  43. package/dist/plugin-api.mjs.map +1 -1
  44. package/dist/plugin-registry.js +23 -10
  45. package/dist/plugin-registry.js.map +1 -1
  46. package/dist/plugin-registry.mjs +23 -11
  47. package/dist/plugin-registry.mjs.map +1 -1
  48. package/dist/plugin.js.map +1 -1
  49. package/dist/plugin.mjs.map +1 -1
  50. package/dist/rspack.js.map +1 -1
  51. package/dist/rspack.mjs.map +1 -1
  52. package/dist/scanner.js +72 -19
  53. package/dist/scanner.js.map +1 -1
  54. package/dist/scanner.mjs +71 -18
  55. package/dist/scanner.mjs.map +1 -1
  56. package/dist/shared.js +32 -15
  57. package/dist/shared.js.map +1 -1
  58. package/dist/shared.mjs +32 -15
  59. package/dist/shared.mjs.map +1 -1
  60. package/dist/svelte.js +38 -12
  61. package/dist/svelte.js.map +1 -1
  62. package/dist/svelte.mjs +38 -12
  63. package/dist/svelte.mjs.map +1 -1
  64. package/dist/syntax.js +17 -5
  65. package/dist/syntax.js.map +1 -1
  66. package/dist/syntax.mjs +17 -5
  67. package/dist/syntax.mjs.map +1 -1
  68. package/dist/theme.js +4 -2
  69. package/dist/theme.js.map +1 -1
  70. package/dist/theme.mjs +4 -2
  71. package/dist/theme.mjs.map +1 -1
  72. package/dist/turbopackLoader.js +87 -33
  73. package/dist/turbopackLoader.js.map +1 -1
  74. package/dist/turbopackLoader.mjs +87 -33
  75. package/dist/turbopackLoader.mjs.map +1 -1
  76. package/dist/tw.js +174 -67
  77. package/dist/tw.js.map +1 -1
  78. package/dist/tw.mjs +171 -64
  79. package/dist/tw.mjs.map +1 -1
  80. package/dist/vite.js +145 -63
  81. package/dist/vite.js.map +1 -1
  82. package/dist/vite.mjs +145 -63
  83. package/dist/vite.mjs.map +1 -1
  84. package/dist/vue.js +38 -12
  85. package/dist/vue.js.map +1 -1
  86. package/dist/vue.mjs +38 -12
  87. package/dist/vue.mjs.map +1 -1
  88. package/dist/webpackLoader.js +20 -5
  89. package/dist/webpackLoader.js.map +1 -1
  90. package/dist/webpackLoader.mjs +20 -5
  91. package/dist/webpackLoader.mjs.map +1 -1
  92. package/native/tailwind-styled-native.node +0 -0
  93. package/package.json +29 -24
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/shared/src/trace.ts","../packages/domain/shared/src/index.ts","../packages/infrastructure/devtools/src/classInspector.ts","../packages/infrastructure/devtools/src/index.tsx"],"names":[],"mappings":"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","file":"devtools.mjs","sourcesContent":["/**\r\n * Shared trace utilities for CLI, devtools, and dashboard\r\n * \r\n * Provides reusable trace snapshot handling, formatting, and analysis\r\n * across the tailwind-styled-v4 ecosystem without introducing coupling.\r\n */\r\n\r\nexport interface TraceSnapshot {\r\n generatedAt: string\r\n buildMs: number | null\r\n scanMs: number | null\r\n analyzeMs: number | null\r\n compileMs: number | null\r\n memoryMb: { rss: number; heapUsed: number; heapTotal: number } | null\r\n classCount: number | null\r\n fileCount: number | null\r\n cssBytes: number | null\r\n mode: string | null\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n}\r\n\r\nexport interface TraceSummary {\r\n workspace: {\r\n totalPackages: number\r\n totalFiles: number\r\n totalClasses: number\r\n lastScanDurationMs: number\r\n lastBuildDurationMs: number\r\n }\r\n cache: {\r\n hitRate: number\r\n totalEntries: number\r\n memoryUsageMb: number\r\n }\r\n pipeline: {\r\n scanDurationMs: number\r\n analyzeDurationMs: number\r\n compileDurationMs: number\r\n totalDurationMs: number\r\n }\r\n health: {\r\n status: \"healthy\" | \"degraded\" | \"unhealthy\"\r\n issues: Array<{ severity: string; message: string }>\r\n }\r\n}\r\n\r\n/**\r\n * Get health status color for UI rendering\r\n */\r\nexport function getHealthColor(status?: string): string {\r\n switch (status) {\r\n case \"healthy\":\r\n return \"#34d399\"\r\n case \"degraded\":\r\n return \"#fbbf24\"\r\n case \"unhealthy\":\r\n return \"#f87171\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Get mode color for UI rendering\r\n */\r\nexport function getModeColor(mode?: string | null): string {\r\n switch (mode) {\r\n case \"build\":\r\n return \"#fbbf24\"\r\n case \"watch\":\r\n return \"#34d399\"\r\n case \"jit\":\r\n return \"#60a5fa\"\r\n case \"error\":\r\n return \"#f87171\"\r\n case \"idle\":\r\n return \"#71717a\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Format memory in human-readable format\r\n */\r\nexport function formatMemory(bytes: number): string {\r\n if (bytes < 1024) return `${Math.round(bytes)}B`\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\r\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\r\n}\r\n\r\n/**\r\n * Format duration in human-readable format\r\n */\r\nexport function formatDuration(ms: number | null): string {\r\n if (ms === null) return \"—\"\r\n if (ms < 1000) return `${ms}ms`\r\n return `${(ms / 1000).toFixed(1)}s`\r\n}\r\n\r\n/**\r\n * Calculate health status from metrics\r\n */\r\nexport function calculateHealth(\r\n metrics: TraceSnapshot,\r\n summary?: TraceSummary\r\n): \"healthy\" | \"degraded\" | \"unhealthy\" {\r\n if (summary?.health?.status) return summary.health.status\r\n\r\n // Fallback to simple heuristics\r\n if (metrics.mode === \"error\") return \"unhealthy\"\r\n if ((metrics.buildMs ?? 0) > 5000) return \"degraded\"\r\n if (metrics.memoryMb && metrics.memoryMb.heapUsed > 500) return \"degraded\"\r\n return \"healthy\"\r\n}\r\n\r\n/**\r\n * Get color for build time indicator\r\n */\r\nexport function getBuildTimeColor(ms: number | null): string {\r\n if (ms === null) return \"#52525b\"\r\n if (ms > 1000) return \"#f87171\" // red - very slow\r\n if (ms > 500) return \"#fbbf24\" // amber - acceptable\r\n return \"#34d399\" // green - fast\r\n}\r\n\r\n/**\r\n * Get color for memory usage indicator\r\n */\r\nexport function getMemoryColor(mb: number): string {\r\n if (mb > 500) return \"#f87171\" // red - high\r\n if (mb > 250) return \"#fbbf24\" // amber - moderate\r\n return \"#34d399\" // green - low\r\n}\r\n\r\n/**\r\n * Create trace snapshot from dashboard data\r\n */\r\nexport function createTraceSnapshot(data: Record<string, unknown>): TraceSnapshot {\r\n return {\r\n generatedAt: (data.generatedAt as string) || new Date().toISOString(),\r\n buildMs: (data.buildMs as number) ?? null,\r\n scanMs: (data.scanMs as number) ?? null,\r\n analyzeMs: (data.analyzeMs as number) ?? null,\r\n compileMs: (data.compileMs as number) ?? null,\r\n memoryMb: (data.memoryMb as { rss: number; heapUsed: number; heapTotal: number } | null) ?? null,\r\n classCount: (data.classCount as number) ?? null,\r\n fileCount: (data.fileCount as number) ?? null,\r\n cssBytes: (data.cssBytes as number) ?? null,\r\n mode: (data.mode as string) ?? null,\r\n eventsReceived: (data.eventsReceived as number | undefined) ?? undefined,\r\n eventsProcessed: (data.eventsProcessed as number | undefined) ?? undefined,\r\n batchesProcessed: (data.batchesProcessed as number | undefined) ?? undefined,\r\n incrementalUpdates: (data.incrementalUpdates as number | undefined) ?? undefined,\r\n fullRescans: (data.fullRescans as number | undefined) ?? undefined,\r\n }\r\n}\r\n\r\n/**\r\n * Calculate pipeline time distribution\r\n */\r\nexport function getPipelinePercentages(metrics: TraceSnapshot): {\r\n scanPct: number\r\n analyzePct: number\r\n compilePct: number\r\n} {\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n const total = scan + analyze + compile\r\n\r\n if (total === 0) {\r\n return { scanPct: 0, analyzePct: 0, compilePct: 0 }\r\n }\r\n\r\n return {\r\n scanPct: (scan / total) * 100,\r\n analyzePct: (analyze / total) * 100,\r\n compilePct: (compile / total) * 100,\r\n }\r\n}\r\n","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * Class Inspector — reusable surface inspection untuk DevTools.\r\n * Menggunakan inspectClass() dari @tailwind-styled/engine.\r\n *\r\n * Dipakai oleh:\r\n * - DevTools TracePanel → class detail panel\r\n * - CLI `tw why <class>` → terminal output\r\n * - Dashboard `/inspect?class=` endpoint\r\n *\r\n * Surface ini reusable sesuai requirement dari execution-log.\r\n */\r\n\r\nexport interface ClassInspectResult {\r\n className: string\r\n css: string\r\n properties: Array<{ property: string; value: string }>\r\n conflicts: string[]\r\n usedIn: string[]\r\n risk: \"low\" | \"medium\" | \"high\"\r\n bundleBytes: number\r\n fetchedAt: number\r\n}\r\n\r\nexport interface InspectorFetchOptions {\r\n /** Dashboard base URL (default: http://localhost:7421) */\r\n baseUrl?: string\r\n /** Timeout ms (default: 3000) */\r\n timeoutMs?: number\r\n}\r\n\r\n/**\r\n * Fetch inspection data untuk sebuah class dari dashboard server.\r\n * Dashboard server pakai inspectClass() dari engine secara internal.\r\n *\r\n * @example\r\n * // Di DevTools panel:\r\n * const result = await fetchClassInspection(\"flex\")\r\n * console.log(result.properties) // [{ property: \"display\", value: \"flex\" }]\r\n * console.log(result.usedIn) // [\"src/Button.tsx\"]\r\n */\r\nexport async function fetchClassInspection(\r\n className: string,\r\n opts: InspectorFetchOptions = {}\r\n): Promise<ClassInspectResult | null> {\r\n const { baseUrl = \"http://localhost:7421\", timeoutMs = 3000 } = opts\r\n\r\n const url = `${baseUrl}/inspect?class=${encodeURIComponent(className)}`\r\n\r\n try {\r\n const res = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) })\r\n if (!res.ok) return null\r\n const data = await res.json()\r\n return {\r\n className,\r\n css: data.css ?? \"\",\r\n properties: data.properties ?? [],\r\n conflicts: data.conflicts ?? [],\r\n usedIn: data.usedIn ?? [],\r\n risk: data.risk ?? \"low\",\r\n bundleBytes: data.bundleBytes ?? 0,\r\n fetchedAt: Date.now(),\r\n }\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/** Format inspection result untuk CLI terminal output */\r\nexport function formatClassInspectionCli(result: ClassInspectResult): string {\r\n const lines: string[] = [\r\n `\\n Class: .${result.className}`,\r\n ` Risk: ${result.risk}`,\r\n ``,\r\n ]\r\n\r\n if (result.properties.length > 0) {\r\n lines.push(` CSS Properties:`)\r\n for (const p of result.properties) {\r\n lines.push(` ${p.property}: ${p.value}`)\r\n }\r\n lines.push(``)\r\n }\r\n\r\n if (result.usedIn.length > 0) {\r\n lines.push(` Used in ${result.usedIn.length} file(s):`)\r\n for (const f of result.usedIn.slice(0, 5)) {\r\n lines.push(` ${f}`)\r\n }\r\n if (result.usedIn.length > 5) {\r\n lines.push(` ... and ${result.usedIn.length - 5} more`)\r\n }\r\n lines.push(``)\r\n } else {\r\n lines.push(` ⚠️ Not found in workspace scan (dead code?)`)\r\n lines.push(``)\r\n }\r\n\r\n if (result.bundleBytes > 0) {\r\n lines.push(` Bundle contribution: ~${result.bundleBytes}B`)\r\n }\r\n\r\n if (result.conflicts.length > 0) {\r\n lines.push(` Conflicts: ${result.conflicts.join(\", \")}`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/** Format for JSON output (CLI --json flag) */\r\nexport function formatClassInspectionJson(result: ClassInspectResult): string {\r\n return JSON.stringify(result, null, 2)\r\n}\r\n","/**\r\n * tailwind-styled-v4 — DevTools v4\r\n *\r\n * Panels:\r\n * 🔍 Inspector — hover element, see classes + variants\r\n * ⚡ State — list all reactive state components + active states\r\n * 📦 Container — list container query components + active breakpoints\r\n * 🎨 Tokens — live token editor with instant preview\r\n * 📊 Analyzer — duplicate patterns + unused variants (runtime scan)\r\n * 🔬 Trace — build timeline, pipeline events, memory profile\r\n *\r\n * Keyboard shortcuts:\r\n * Ctrl+Shift+D → toggle devtools\r\n * Escape → close\r\n * 1-6 → switch panels\r\n */\r\n\r\n\"use client\"\r\n\r\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\r\nimport {\r\n formatMemory,\r\n formatDuration,\r\n getBuildTimeColor,\r\n getModeColor,\r\n getHealthColor,\r\n getMemoryColor,\r\n getPipelinePercentages,\r\n type TraceSnapshot,\r\n type TraceSummary,\r\n} from \"@tailwind-styled/shared\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface InspectedElement {\r\n componentName: string\r\n element: HTMLElement\r\n rect: DOMRect\r\n twClasses: string[]\r\n variantProps: Record<string, string>\r\n atomicMap: Record<string, string>\r\n rawClassName: string\r\n stateNames: string[]\r\n activeStates: Record<string, string>\r\n containerBps: string[]\r\n}\r\n\r\ntype Panel = \"inspector\" | \"state\" | \"container\" | \"tokens\" | \"analyzer\" | \"trace\"\r\n\r\ninterface DevToolsState {\r\n open: boolean\r\n panel: Panel\r\n pinned: boolean\r\n inspected: InspectedElement | null\r\n position: { x: number; y: number }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction parseDataTw(dataTw: string | null): { name: string; classes: string[] } {\r\n if (!dataTw) return { name: \"Unknown\", classes: [] }\r\n const colonIdx = dataTw.indexOf(\":\")\r\n if (colonIdx === -1) return { name: dataTw, classes: [] }\r\n const name = dataTw.slice(0, colonIdx)\r\n const classes = dataTw\r\n .slice(colonIdx + 1)\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n return { name, classes }\r\n}\r\n\r\nfunction parseVariantAttr(v: string | null): Record<string, string> {\r\n if (!v) return {}\r\n try {\r\n return JSON.parse(v)\r\n } catch {\r\n return {}\r\n }\r\n}\r\n\r\nfunction findNearestTwElement(el: HTMLElement): HTMLElement | null {\r\n const cur = { el: el as HTMLElement | null }\r\n while (cur.el) {\r\n if (cur.el.dataset?.tw) return cur.el\r\n cur.el = cur.el.parentElement\r\n }\r\n return null\r\n}\r\n\r\nfunction getAtomicMap(classes: string[]): Record<string, string> {\r\n const registry = window.__TW_REGISTRY__\r\n if (!registry) return {}\r\n const map: Record<string, string> = {}\r\n for (const cls of classes) {\r\n if (registry[cls]) map[cls] = registry[cls]\r\n }\r\n return map\r\n}\r\n\r\nfunction getActiveStates(el: HTMLElement): Record<string, string> {\r\n const states: Record<string, string> = {}\r\n for (const attr of el.attributes) {\r\n if (attr.name.startsWith(\"data-\")) {\r\n states[attr.name.replace(\"data-\", \"\")] = attr.value\r\n }\r\n }\r\n return states\r\n}\r\n\r\nfunction getStateNames(el: HTMLElement): string[] {\r\n const registry = window.__TW_STATE_REGISTRY__ as Map<string, { states: string[] }> | undefined\r\n if (!registry) return []\r\n for (const [id, entry] of registry) {\r\n if (el.classList.contains(id)) return entry.states\r\n }\r\n return []\r\n}\r\n\r\nfunction getContainerBps(el: HTMLElement): string[] {\r\n const registry = window.__TW_CONTAINER_REGISTRY__ as Map<string, { breakpoints: Array<{ minWidth: string }> }> | undefined\r\n if (!registry) return []\r\n for (const [id, entry] of registry) {\r\n if (el.classList.contains(id)) {\r\n return entry.breakpoints.map((bp) => bp.minWidth)\r\n }\r\n }\r\n return []\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Inspector\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction InspectorPanel({\r\n inspected,\r\n position: _position,\r\n pinned: _pinned,\r\n}: {\r\n inspected: InspectedElement | null\r\n position: { x: number; y: number }\r\n pinned: boolean\r\n}) {\r\n if (!inspected) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"Hover an element to inspect\")\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n // Variant props\r\n Object.keys(inspected.variantProps).length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Variants\"),\r\n Object.entries(inspected.variantProps).map(([k, v]) =>\r\n React.createElement(\r\n \"div\",\r\n { key: k, style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, k),\r\n React.createElement(\"span\", { style: S.varValue }, `\"${v}\"`)\r\n )\r\n )\r\n ),\r\n\r\n // Active states\r\n Object.keys(inspected.activeStates).length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Active Data Attrs\"),\r\n Object.entries(inspected.activeStates).map(([k, v]) =>\r\n React.createElement(\r\n \"div\",\r\n { key: k, style: S.row },\r\n React.createElement(\"code\", { style: { ...S.varKey, color: \"#f59e0b\" } }, `data-${k}`),\r\n React.createElement(\"span\", { style: { ...S.varValue, color: \"#34d399\" } }, `\"${v}\"`)\r\n )\r\n )\r\n ),\r\n\r\n // State names\r\n inspected.stateNames.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Reactive States\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.stateNames.map((s) =>\r\n React.createElement(\r\n \"code\",\r\n {\r\n key: s,\r\n style: {\r\n ...S.classChip,\r\n background: inspected.activeStates[s] === \"true\" ? \"#065f46\" : \"#18181b\",\r\n borderColor: inspected.activeStates[s] === \"true\" ? \"#34d399\" : \"#27272a\",\r\n },\r\n },\r\n s\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Container breakpoints\r\n inspected.containerBps.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Container Breakpoints\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.containerBps.map((bp) =>\r\n React.createElement(\r\n \"code\",\r\n { key: bp, style: { ...S.classChip, color: \"#818cf8\" } },\r\n bp\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Tailwind classes\r\n inspected.twClasses.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Classes\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.twClasses.map((cls) =>\r\n React.createElement(\r\n \"code\",\r\n { key: cls, style: S.classChip, title: inspected.atomicMap[cls] },\r\n cls\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Copy\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: S.copyBtn,\r\n onClick: () => {\r\n navigator.clipboard?.writeText(\r\n JSON.stringify(\r\n {\r\n component: inspected.componentName,\r\n variants: inspected.variantProps,\r\n states: inspected.activeStates,\r\n classes: inspected.twClasses,\r\n },\r\n null,\r\n 2\r\n )\r\n )\r\n },\r\n },\r\n \"Copy to clipboard\"\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: State Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction StatePanel() {\r\n const [entries, setEntries] = useState<any[]>([])\r\n\r\n useEffect(() => {\r\n const refresh = () => {\r\n const reg = window.__TW_STATE_REGISTRY__\r\n setEntries(reg ? Array.from(reg.values()) : [])\r\n }\r\n refresh()\r\n const interval = setInterval(refresh, 1000)\r\n return () => clearInterval(interval)\r\n }, [])\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.4 } },\r\n \"No state-enabled components found.\"\r\n ),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use tw.button({ state: { active: \"...\" } }) to register.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n entries.map((entry) =>\r\n React.createElement(\r\n \"div\",\r\n { key: entry.id, style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: S.sectionTitle },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\r\n entry.id\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n entry.states.map((s: string) =>\r\n React.createElement(\r\n \"code\",\r\n { key: s, style: { ...S.classChip, color: \"#f59e0b\" } },\r\n `data-${s}`\r\n )\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.row, marginTop: \"4px\" } },\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n ...S.sectionTitle,\r\n marginBottom: 0,\r\n color: entry.cssInjected ? \"#34d399\" : \"#ef4444\",\r\n },\r\n },\r\n entry.cssInjected ? \"● CSS injected\" : \"○ CSS pending\"\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Container Query Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction ContainerPanel() {\r\n const [entries, setEntries] = useState<any[]>([])\r\n\r\n useEffect(() => {\r\n const refresh = () => {\r\n const reg = window.__TW_CONTAINER_REGISTRY__\r\n setEntries(reg ? Array.from(reg.values()) : [])\r\n }\r\n refresh()\r\n const interval = setInterval(refresh, 1000)\r\n return () => clearInterval(interval)\r\n }, [])\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.4 } },\r\n \"No container query components found.\"\r\n ),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use tw.div({ container: { md: \"flex-row\" } }) to register.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n entries.map((entry) =>\r\n React.createElement(\r\n \"div\",\r\n { key: entry.id, style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: S.sectionTitle },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\r\n entry.containerName &&\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"6px\", color: \"#818cf8\" } },\r\n `[${entry.containerName}]`\r\n ),\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\r\n entry.id\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n null,\r\n entry.breakpoints.map(\r\n (bp: { minWidth: string; classes: string; label?: string }, i: number) =>\r\n React.createElement(\r\n \"div\",\r\n { key: i, style: { ...S.row, marginBottom: \"2px\" } },\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#818cf8\", fontSize: \"11px\" } },\r\n `≥ ${bp.minWidth}`\r\n ),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#6b7280\", fontSize: \"11px\" } },\r\n bp.classes\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Live Token Editor\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction TokensPanel() {\r\n const [tokens, setTokens_] = useState<Record<string, string>>({})\r\n\r\n useEffect(() => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (!engine) return\r\n\r\n setTokens_(engine.getTokens())\r\n if (!engine.subscribe) return\r\n const unsub = engine.subscribe((t: Record<string, string>) => setTokens_({ ...t }))\r\n return unsub\r\n }, [])\r\n\r\n const entries = Object.entries(tokens)\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"No live tokens registered.\"),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use liveToken({ primary: \"#3b82f6\" }) to register tokens.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, padding: \"8px 12px 4px\", color: \"#52525b\" } },\r\n \"Click color to edit · Changes apply instantly\"\r\n ),\r\n entries.map(([name, value]) => {\r\n const isColor = value.startsWith(\"#\") || value.startsWith(\"rgb\") || value.startsWith(\"hsl\")\r\n return React.createElement(\r\n \"div\",\r\n { key: name, style: { ...S.row, padding: \"6px 12px\", borderBottom: \"1px solid #18181b\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\r\n isColor &&\r\n React.createElement(\"div\", {\r\n style: {\r\n width: \"16px\",\r\n height: \"16px\",\r\n borderRadius: \"3px\",\r\n background: value,\r\n border: \"1px solid #27272a\",\r\n flexShrink: 0,\r\n },\r\n }),\r\n React.createElement(\"span\", { style: { color: \"#a1a1aa\", fontSize: \"12px\" } }, name)\r\n ),\r\n isColor\r\n ? React.createElement(\"input\", {\r\n type: \"color\",\r\n defaultValue: value.startsWith(\"#\") ? value : \"#000000\",\r\n style: {\r\n width: \"52px\",\r\n height: \"22px\",\r\n border: \"none\",\r\n background: \"none\",\r\n cursor: \"pointer\",\r\n },\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (engine) engine.setToken(name, e.target.value)\r\n },\r\n })\r\n : React.createElement(\"input\", {\r\n type: \"text\",\r\n defaultValue: value,\r\n style: {\r\n background: \"#18181b\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"3px\",\r\n color: \"#e4e4e7\",\r\n fontSize: \"11px\",\r\n padding: \"2px 6px\",\r\n width: \"100px\",\r\n fontFamily: \"monospace\",\r\n },\r\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (engine) engine.setToken(name, e.target.value)\r\n },\r\n })\r\n )\r\n })\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Runtime Analyzer\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction AnalyzerPanel() {\r\n const [scanning, setScanning] = useState(false)\r\n const [results, setResults] = useState<{\r\n duplicates: Array<{ pattern: string; count: number; names: string[] }>\r\n stateCount: number\r\n containerCount: number\r\n tokenCount: number\r\n } | null>(null)\r\n // Engine metrics — fetched dari dashboard server (http://localhost:3000/metrics)\r\n const [engineMetrics, setEngineMetrics] = useState<Record<string, unknown> | null>(null)\r\n const [metricsFetching, setMetricsFetching] = useState(false)\r\n const [metricsError, setMetricsError] = useState<string | null>(null)\r\n\r\n const loadEngineMetrics = useCallback(async () => {\r\n setMetricsFetching(true)\r\n setMetricsError(null)\r\n try {\r\n const res = await fetch(\"http://localhost:3000/metrics\", {\r\n signal: AbortSignal.timeout(2000),\r\n })\r\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\r\n const data = await res.json()\r\n setEngineMetrics(data)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : String(e)\r\n setMetricsError(\r\n msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\r\n ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\r\n : msg\r\n )\r\n setEngineMetrics(null)\r\n } finally {\r\n setMetricsFetching(false)\r\n }\r\n }, [])\r\n\r\n const runScan = useCallback(() => {\r\n setScanning(true)\r\n\r\n setTimeout(() => {\r\n const twEls = document.querySelectorAll(\"[data-tw]\")\r\n const classMap = new Map<string, string[]>()\r\n\r\n for (const el of twEls) {\r\n const { name, classes } = (() => {\r\n const dTw = (el as HTMLElement).dataset.tw ?? null\r\n if (!dTw) return { name: \"?\", classes: [] }\r\n const ci = dTw.indexOf(\":\")\r\n return {\r\n name: ci >= 0 ? dTw.slice(0, ci) : dTw,\r\n classes:\r\n ci >= 0\r\n ? dTw\r\n .slice(ci + 1)\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n : [],\r\n }\r\n })()\r\n\r\n const key = classes.sort().join(\" \")\r\n if (!classMap.has(key)) classMap.set(key, [])\r\n classMap.get(key)!.push(name)\r\n }\r\n\r\n const duplicates = Array.from(classMap.entries())\r\n .filter(([, names]) => names.length > 1)\r\n .map(([pattern, names]) => ({ pattern, count: names.length, names }))\r\n .sort((a, b) => b.count - a.count)\r\n .slice(0, 10)\r\n\r\n const stateReg = window.__TW_STATE_REGISTRY__\r\n const containerReg = window.__TW_CONTAINER_REGISTRY__\r\n const tokenEngine = window.__TW_TOKEN_ENGINE__\r\n\r\n setResults({\r\n duplicates,\r\n stateCount: stateReg?.size ?? 0,\r\n containerCount: containerReg?.size ?? 0,\r\n tokenCount: Object.keys(tokenEngine?.getTokens?.() ?? {}).length,\r\n })\r\n setScanning(false)\r\n }, 100)\r\n }, [])\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"10px 12px\" } },\r\n\r\n // ── DOM Scan ──────────────────────────────────────────────────────────\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#60a5fa\", fontWeight: \"600\" },\r\n onClick: runScan,\r\n disabled: scanning,\r\n },\r\n scanning ? \"Scanning DOM...\" : \"▶ Run DOM Scan\"\r\n ),\r\n\r\n // ── Engine Metrics (dari dashboard) ───────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.section, marginTop: \"8px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"⚡ Engine Metrics\"\r\n ),\r\n engineMetrics\r\n ? React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Build\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n engineMetrics.buildMs !== null ? `${engineMetrics.buildMs}ms` : \"—\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n String(engineMetrics.classCount ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n String(engineMetrics.fileCount ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Mode\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(engineMetrics.mode ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n ...S.copyBtn,\r\n borderTop: \"none\",\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n padding: \"4px 0\",\r\n },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n \"↻ Refresh\"\r\n )\r\n )\r\n : metricsError\r\n ? React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"6px\" } },\r\n metricsError\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n metricsFetching ? \"Connecting...\" : \"↻ Retry\"\r\n )\r\n )\r\n : React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#71717a\",\r\n fontSize: \"11px\",\r\n lineHeight: 1.6,\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n \"Rust analyzer hanya tersedia via CLI atau dashboard.\",\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#52525b\", fontSize: \"10px\" } },\r\n \"tw analyze . | tw dashboard\"\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n metricsFetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n ),\r\n\r\n // ── DOM Scan Results ──────────────────────────────────────────────────\r\n results &&\r\n React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Summary\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"State components\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.stateCount))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Container components\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.containerCount))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Live tokens\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.tokenCount))\r\n )\r\n ),\r\n\r\n results.duplicates.length > 0\r\n ? React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Duplicate Class Sets\"),\r\n results.duplicates.map((d, i) =>\r\n React.createElement(\r\n \"div\",\r\n { key: i, style: { marginBottom: \"8px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f59e0b\", fontSize: \"11px\", marginBottom: \"2px\" } },\r\n d.names.join(\", \")\r\n ),\r\n React.createElement(\r\n \"code\",\r\n {\r\n style: {\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n wordBreak: \"break-all\" as const,\r\n },\r\n },\r\n d.pattern.split(\" \").slice(0, 8).join(\" \") +\r\n (d.pattern.split(\" \").length > 8 ? \"...\" : \"\")\r\n )\r\n )\r\n )\r\n )\r\n : React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#34d399\", fontSize: \"12px\" } },\r\n \"✓ No duplicate class sets in current DOM\"\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Trace — build timeline, pipeline events, memory profile\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst DASHBOARD_BASE = \"http://localhost:3000\"\r\n\r\nfunction TracePanel() {\r\n const [metrics, setMetrics] = useState<TraceSnapshot | null>(null)\r\n const [history, setHistory] = useState<TraceSnapshot[]>([])\r\n const [summary, setSummary] = useState<TraceSummary | null>(null)\r\n const [error, setError] = useState<string | null>(null)\r\n const [fetching, setFetching] = useState(false)\r\n const [autoRefresh, setAutoRefresh] = useState(false)\r\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\r\n\r\n const fetchAll = useCallback(async () => {\r\n setFetching(true)\r\n setError(null)\r\n try {\r\n const [mRes, hRes, sRes] = await Promise.all([\r\n fetch(`${DASHBOARD_BASE}/metrics`, { signal: AbortSignal.timeout(2000) }),\r\n fetch(`${DASHBOARD_BASE}/history`, { signal: AbortSignal.timeout(2000) }),\r\n fetch(`${DASHBOARD_BASE}/summary`, { signal: AbortSignal.timeout(2000) }),\r\n ])\r\n if (!mRes.ok) throw new Error(`metrics: HTTP ${mRes.status}`)\r\n if (!hRes.ok) throw new Error(`history: HTTP ${hRes.status}`)\r\n if (!sRes.ok) throw new Error(`summary: HTTP ${sRes.status}`)\r\n\r\n const m = await mRes.json()\r\n const h = await hRes.json()\r\n const s = await sRes.json()\r\n\r\n setMetrics(m)\r\n setHistory(Array.isArray(h) ? h : [])\r\n setSummary(s)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : String(e)\r\n setError(\r\n msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\r\n ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\r\n : msg\r\n )\r\n } finally {\r\n setFetching(false)\r\n }\r\n }, [])\r\n\r\n // Auto-refresh effect\r\n useEffect(() => {\r\n if (autoRefresh) {\r\n fetchAll()\r\n intervalRef.current = setInterval(fetchAll, 3000)\r\n } else if (intervalRef.current) {\r\n clearInterval(intervalRef.current)\r\n intervalRef.current = null\r\n }\r\n return () => {\r\n if (intervalRef.current) clearInterval(intervalRef.current)\r\n }\r\n }, [autoRefresh, fetchAll])\r\n\r\n // Render bar chart for build time history\r\n const renderHistoryChart = () => {\r\n const vals = history.map((h) => h.buildMs ?? 0).filter((v) => v > 0)\r\n if (vals.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#52525b\",\r\n fontSize: \"11px\",\r\n textAlign: \"center\" as const,\r\n padding: \"12px\",\r\n },\r\n },\r\n \"No build history available\"\r\n )\r\n }\r\n const max = Math.max(...vals)\r\n const chartWidth = 296\r\n const barWidth = Math.max(3, Math.floor(chartWidth / vals.length) - 1)\r\n\r\n return React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"flex-end\" as const,\r\n gap: \"1px\",\r\n height: \"60px\",\r\n padding: \"0 2px\",\r\n },\r\n },\r\n vals.map((v, i) => {\r\n const h = max > 0 ? Math.max(3, Math.round((v / max) * 56)) : 3\r\n return React.createElement(\"div\", {\r\n key: i,\r\n style: {\r\n width: `${barWidth}px`,\r\n height: `${h}px`,\r\n background: getBuildTimeColor(v),\r\n borderRadius: \"2px 2px 0 0\",\r\n opacity: i === vals.length - 1 ? 1 : 0.5,\r\n flexShrink: 0,\r\n },\r\n title: `${v}ms`,\r\n })\r\n })\r\n )\r\n }\r\n\r\n // Render pipeline breakdown bar\r\n const renderPipelineBar = () => {\r\n if (!metrics) return null\r\n const { scanPct, analyzePct, compilePct } = getPipelinePercentages(metrics)\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n\r\n if (scanPct === 0 && analyzePct === 0 && compilePct === 0) return null\r\n\r\n return React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Pipeline Breakdown\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n height: \"12px\",\r\n borderRadius: \"4px\",\r\n overflow: \"hidden\",\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n scanPct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${scanPct}%`, background: \"#60a5fa\", minWidth: \"2px\" },\r\n title: `Scan: ${scan}ms`,\r\n }),\r\n analyzePct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${analyzePct}%`, background: \"#818cf8\", minWidth: \"2px\" },\r\n title: `Analyze: ${analyze}ms`,\r\n }),\r\n compilePct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${compilePct}%`, background: \"#34d399\", minWidth: \"2px\" },\r\n title: `Compile: ${compile}ms`,\r\n })\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", gap: \"12px\", fontSize: \"10px\" } },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, `Scan ${scan}ms`),\r\n React.createElement(\"span\", { style: { color: \"#818cf8\" } }, `Analyze ${analyze}ms`),\r\n React.createElement(\"span\", { style: { color: \"#34d399\" } }, `Compile ${compile}ms`)\r\n )\r\n )\r\n }\r\n\r\n // Error state\r\n if (error && !metrics) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"12px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"8px\" } },\r\n error\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n },\r\n fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n )\r\n }\r\n\r\n // Initial load state\r\n if (!metrics) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"12px\" } },\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#71717a\",\r\n fontSize: \"11px\",\r\n lineHeight: 1.6,\r\n marginBottom: \"8px\",\r\n },\r\n },\r\n \"Build timeline dan pipeline events dari engine.\",\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#52525b\", fontSize: \"10px\" } },\r\n \"tw dashboard\"\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n },\r\n fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n\r\n // ── Mode & Health ────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"10px 12px 6px\" } },\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n marginBottom: \"8px\",\r\n },\r\n },\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\r\n React.createElement(\"div\", {\r\n style: {\r\n width: \"8px\",\r\n height: \"8px\",\r\n borderRadius: \"50%\",\r\n background: getModeColor(metrics.mode),\r\n boxShadow: `0 0 6px ${getModeColor(metrics.mode)}`,\r\n },\r\n }),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: getModeColor(metrics.mode),\r\n fontWeight: \"600\",\r\n fontSize: \"12px\",\r\n textTransform: \"uppercase\" as const,\r\n },\r\n },\r\n metrics.mode ?? \"unknown\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", gap: \"4px\" } },\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n background: autoRefresh ? \"#1e3a5f\" : \"none\",\r\n border: `1px solid ${autoRefresh ? \"#3b82f6\" : \"#27272a\"}`,\r\n borderRadius: \"4px\",\r\n color: autoRefresh ? \"#60a5fa\" : \"#52525b\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"2px 6px\",\r\n fontFamily: \"inherit\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n onClick: () => setAutoRefresh(!autoRefresh),\r\n title: autoRefresh ? \"Stop auto-refresh\" : \"Auto-refresh every 3s\",\r\n },\r\n autoRefresh ? \"● Live\" : \"○ Live\"\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n background: \"none\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"4px\",\r\n color: \"#52525b\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"2px 6px\",\r\n fontFamily: \"inherit\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n title: \"Refresh now\",\r\n },\r\n \"↻\"\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // ── Health Status ────────────────────────────────────────────────────\r\n summary &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Health\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Status\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: getHealthColor(summary.health?.status), fontWeight: \"600\" } },\r\n summary.health?.status ?? \"unknown\"\r\n )\r\n ),\r\n summary.health?.issues &&\r\n summary.health.issues.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: { marginTop: \"4px\" } },\r\n summary.health.issues.map((issue, i) =>\r\n React.createElement(\r\n \"div\",\r\n {\r\n key: i,\r\n style: {\r\n fontSize: \"10px\",\r\n color:\r\n issue.severity === \"high\"\r\n ? \"#f87171\"\r\n : issue.severity === \"medium\"\r\n ? \"#fbbf24\"\r\n : \"#71717a\",\r\n marginBottom: \"2px\",\r\n },\r\n },\r\n `• ${issue.message}`\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // ── Build Metrics ────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Build Metrics\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Build\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n ...S.varValue,\r\n color: getBuildTimeColor(metrics.buildMs),\r\n },\r\n },\r\n metrics.buildMs !== null ? `${metrics.buildMs}ms` : \"—\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(metrics.classCount ?? \"—\"))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(metrics.fileCount ?? \"—\"))\r\n ),\r\n metrics.cssBytes !== null &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"CSS\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#818cf8\" } },\r\n formatMemory(metrics.cssBytes)\r\n )\r\n )\r\n ),\r\n\r\n // ── Pipeline Breakdown ───────────────────────────────────────────────\r\n React.createElement(\"div\", { style: S.section }, renderPipelineBar()),\r\n\r\n // ── Pipeline Events ──────────────────────────────────────────────────\r\n (metrics.eventsReceived !== undefined || metrics.batchesProcessed !== undefined) &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Pipeline Events\"\r\n ),\r\n metrics.eventsReceived !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Events received\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.eventsReceived)\r\n )\r\n ),\r\n metrics.eventsProcessed !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Events processed\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.eventsProcessed)\r\n )\r\n ),\r\n metrics.batchesProcessed !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Batches\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.batchesProcessed)\r\n )\r\n ),\r\n metrics.incrementalUpdates !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Incremental\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#34d399\", fontSize: \"11px\" } },\r\n String(metrics.incrementalUpdates)\r\n )\r\n ),\r\n metrics.fullRescans !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Full rescans\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#fbbf24\", fontSize: \"11px\" } },\r\n String(metrics.fullRescans)\r\n )\r\n )\r\n ),\r\n\r\n // ── Memory ───────────────────────────────────────────────────────────\r\n metrics.memoryMb &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Memory\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Heap used\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: getMemoryColor(metrics.memoryMb.heapUsed),\r\n fontWeight: \"600\",\r\n },\r\n },\r\n `${metrics.memoryMb.heapUsed.toFixed(1)}MB`\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Heap total\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n `${metrics.memoryMb.heapTotal.toFixed(1)}MB`\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"RSS\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n `${metrics.memoryMb.rss.toFixed(1)}MB`\r\n )\r\n )\r\n ),\r\n\r\n // ── Workspace Summary ────────────────────────────────────────────────\r\n summary &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Workspace\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Packages\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalPackages ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalFiles ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalClasses ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Cache hit rate\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: (summary.cache?.hitRate ?? 0) > 0.8 ? \"#34d399\" : \"#fbbf24\",\r\n fontSize: \"11px\",\r\n },\r\n },\r\n summary.cache ? `${(summary.cache.hitRate * 100).toFixed(0)}%` : \"—\"\r\n )\r\n )\r\n ),\r\n\r\n // ── Build Time History ───────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n `Build History (${history.length} snapshots)`\r\n ),\r\n renderHistoryChart()\r\n ),\r\n\r\n // ── Timestamp ────────────────────────────────────────────────────────\r\n metrics.generatedAt &&\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n padding: \"6px 12px\",\r\n color: \"#3f3f46\",\r\n fontSize: \"10px\",\r\n textAlign: \"center\" as const,\r\n },\r\n },\r\n `Last update: ${new Date(metrics.generatedAt).toLocaleTimeString()}`\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Main DevTools component\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function TwDevTools(): React.ReactElement | null {\r\n if (process.env.NODE_ENV === \"production\") return null\r\n\r\n const [state, setState] = useState<DevToolsState>({\r\n open: false,\r\n panel: \"inspector\",\r\n pinned: false,\r\n inspected: null,\r\n position: { x: 0, y: 0 },\r\n })\r\n\r\n const overlayRef = useRef<HTMLDivElement>(null)\r\n const isInspecting = state.open && state.panel === \"inspector\"\r\n\r\n // Keyboard shortcuts\r\n useEffect(() => {\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.ctrlKey && e.shiftKey && e.key === \"D\") {\r\n e.preventDefault()\r\n setState((s) => ({ ...s, open: !s.open, inspected: null }))\r\n }\r\n if (e.key === \"Escape\")\r\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null }))\r\n if (e.key === \"1\") setState((s) => (s.open ? { ...s, panel: \"inspector\" } : s))\r\n if (e.key === \"2\") setState((s) => (s.open ? { ...s, panel: \"state\" } : s))\r\n if (e.key === \"3\") setState((s) => (s.open ? { ...s, panel: \"container\" } : s))\r\n if (e.key === \"4\") setState((s) => (s.open ? { ...s, panel: \"tokens\" } : s))\r\n if (e.key === \"5\") setState((s) => (s.open ? { ...s, panel: \"analyzer\" } : s))\r\n if (e.key === \"6\") setState((s) => (s.open ? { ...s, panel: \"trace\" } : s))\r\n }\r\n window.addEventListener(\"keydown\", onKey)\r\n return () => window.removeEventListener(\"keydown\", onKey)\r\n }, [])\r\n\r\n // Mouse move — only active on inspector panel\r\n const onMouseMove = useCallback(\r\n (e: MouseEvent) => {\r\n if (!isInspecting || state.pinned) return\r\n const twEl = findNearestTwElement(e.target as HTMLElement)\r\n if (!twEl) {\r\n setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }))\r\n return\r\n }\r\n const { name, classes } = parseDataTw(twEl.dataset.tw ?? null)\r\n setState((s) => ({\r\n ...s,\r\n position: { x: e.clientX, y: e.clientY },\r\n inspected: {\r\n componentName: name,\r\n element: twEl,\r\n rect: twEl.getBoundingClientRect(),\r\n twClasses: classes,\r\n variantProps: parseVariantAttr(twEl.dataset.twVariants ?? null),\r\n atomicMap: getAtomicMap(classes),\r\n rawClassName: twEl.className,\r\n stateNames: getStateNames(twEl),\r\n activeStates: getActiveStates(twEl),\r\n containerBps: getContainerBps(twEl),\r\n },\r\n }))\r\n },\r\n [isInspecting, state.pinned]\r\n )\r\n\r\n const onClick = useCallback(\r\n (e: MouseEvent) => {\r\n if (!isInspecting) return\r\n if (overlayRef.current?.contains(e.target as HTMLElement)) return\r\n setState((s) => ({ ...s, pinned: !s.pinned && !!s.inspected }))\r\n },\r\n [isInspecting]\r\n )\r\n\r\n useEffect(() => {\r\n if (!isInspecting) return\r\n window.addEventListener(\"mousemove\", onMouseMove)\r\n window.addEventListener(\"click\", onClick)\r\n return () => {\r\n window.removeEventListener(\"mousemove\", onMouseMove)\r\n window.removeEventListener(\"click\", onClick)\r\n }\r\n }, [isInspecting, onMouseMove, onClick])\r\n\r\n // Toggle button\r\n if (!state.open) {\r\n return React.createElement(\r\n \"button\",\r\n {\r\n onClick: () => setState((s) => ({ ...s, open: true })),\r\n style: S.toggleBtn,\r\n title: \"tailwind-styled-v4 DevTools (Ctrl+Shift+D)\",\r\n },\r\n \"🎨\"\r\n )\r\n }\r\n\r\n const PANELS: Array<{ id: Panel; label: string; icon: string }> = [\r\n { id: \"inspector\", label: \"Inspector\", icon: \"🔍\" },\r\n { id: \"state\", label: \"State\", icon: \"⚡\" },\r\n { id: \"container\", label: \"Container\", icon: \"📦\" },\r\n { id: \"tokens\", label: \"Tokens\", icon: \"🎨\" },\r\n { id: \"analyzer\", label: \"Analyzer\", icon: \"📊\" },\r\n { id: \"trace\", label: \"Trace\", icon: \"🔬\" },\r\n ]\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.root },\r\n\r\n // ── Element highlight (inspector only) ──────────────────────────────\r\n isInspecting &&\r\n state.inspected &&\r\n React.createElement(\"div\", {\r\n style: {\r\n ...S.highlight,\r\n top: state.inspected.rect.top + window.scrollY,\r\n left: state.inspected.rect.left + window.scrollX,\r\n width: state.inspected.rect.width,\r\n height: state.inspected.rect.height,\r\n },\r\n }),\r\n\r\n // ── Component name label ────────────────────────────────────────────\r\n isInspecting &&\r\n state.inspected &&\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n position: \"absolute\" as const,\r\n top: state.inspected.rect.top + window.scrollY - 22,\r\n left: state.inspected.rect.left + window.scrollX,\r\n background: \"#1e3a5f\",\r\n color: \"#93c5fd\",\r\n fontSize: \"11px\",\r\n padding: \"2px 6px\",\r\n borderRadius: \"3px 3px 0 0\",\r\n pointerEvents: \"none\" as const,\r\n zIndex: 2147483646,\r\n fontFamily: \"monospace\",\r\n },\r\n },\r\n state.inspected.componentName\r\n ),\r\n\r\n // ── Main DevTools panel ─────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n {\r\n ref: overlayRef,\r\n style:\r\n state.panel === \"inspector\" && state.inspected\r\n ? {\r\n ...S.panel,\r\n top: Math.min(state.position.y + 16, window.innerHeight - 460),\r\n left: Math.min(state.position.x + 16, window.innerWidth - 320),\r\n }\r\n : {\r\n ...S.panel,\r\n top: \"auto\",\r\n bottom: \"40px\",\r\n right: \"12px\",\r\n left: \"auto\",\r\n },\r\n },\r\n\r\n // Header\r\n React.createElement(\r\n \"div\",\r\n { style: S.header },\r\n React.createElement(\r\n \"span\",\r\n { style: S.componentName },\r\n state.inspected && state.panel === \"inspector\"\r\n ? state.inspected.componentName\r\n : \"tailwind-styled-v4\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.headerActions },\r\n state.pinned && React.createElement(\"span\", { style: S.pinBadge }, \"📌\"),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: S.closeBtn,\r\n onClick: () =>\r\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null })),\r\n },\r\n \"✕\"\r\n )\r\n )\r\n ),\r\n\r\n // Tab bar\r\n React.createElement(\r\n \"div\",\r\n { style: S.tabBar },\r\n PANELS.map((p) =>\r\n React.createElement(\r\n \"button\",\r\n {\r\n key: p.id,\r\n style: {\r\n ...S.tab,\r\n background: state.panel === p.id ? \"#18181b\" : \"none\",\r\n color: state.panel === p.id ? \"#e4e4e7\" : \"#52525b\",\r\n borderBottom: state.panel === p.id ? \"2px solid #3b82f6\" : \"2px solid transparent\",\r\n },\r\n onClick: () => setState((s) => ({ ...s, panel: p.id })),\r\n title: `${p.label} (${PANELS.findIndex((x) => x.id === p.id) + 1})`,\r\n },\r\n `${p.icon} ${p.label}`\r\n )\r\n )\r\n ),\r\n\r\n // Panel content\r\n state.panel === \"inspector\" &&\r\n React.createElement(InspectorPanel, {\r\n inspected: state.inspected,\r\n position: state.position,\r\n pinned: state.pinned,\r\n }),\r\n state.panel === \"state\" && React.createElement(StatePanel, null),\r\n state.panel === \"container\" && React.createElement(ContainerPanel, null),\r\n state.panel === \"tokens\" && React.createElement(TokensPanel, null),\r\n state.panel === \"analyzer\" && React.createElement(AnalyzerPanel, null),\r\n state.panel === \"trace\" && React.createElement(TracePanel, null)\r\n ),\r\n\r\n // ── Status bar ──────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.statusBar },\r\n React.createElement(\"span\", null, \"🎨 tailwind-styled-v4 DevTools\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.6, fontSize: \"10px\" } },\r\n state.pinned\r\n ? \"Click to unpin\"\r\n : isInspecting\r\n ? \"Hover to inspect · Click to pin · 1-6 switch panel · Esc close\"\r\n : \"Ctrl+Shift+D close · 1-6 switch panel\"\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Styles\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst S = {\r\n root: {\r\n position: \"fixed\" as const,\r\n inset: 0,\r\n zIndex: 2147483647,\r\n pointerEvents: \"none\" as const,\r\n fontFamily: \"ui-monospace, 'JetBrains Mono', monospace\",\r\n fontSize: \"12px\",\r\n },\r\n highlight: {\r\n position: \"absolute\" as const,\r\n borderRadius: \"3px\",\r\n outline: \"2px solid #3b82f6\",\r\n outlineOffset: \"1px\",\r\n background: \"rgba(59,130,246,0.08)\",\r\n pointerEvents: \"none\" as const,\r\n transition: \"all 0.1s ease\",\r\n zIndex: 2147483646,\r\n },\r\n panel: {\r\n position: \"fixed\" as const,\r\n width: 320,\r\n maxHeight: 480,\r\n background: \"#0f0f0f\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"10px\",\r\n boxShadow: \"0 8px 32px rgba(0,0,0,0.8)\",\r\n pointerEvents: \"all\" as const,\r\n zIndex: 2147483647,\r\n userSelect: \"text\" as const,\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n },\r\n header: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n padding: \"8px 12px 6px\",\r\n borderBottom: \"1px solid #1f1f1f\",\r\n flexShrink: 0,\r\n },\r\n tabBar: {\r\n display: \"flex\",\r\n borderBottom: \"1px solid #18181b\",\r\n flexShrink: 0,\r\n overflowX: \"auto\" as const,\r\n },\r\n tab: {\r\n background: \"none\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"5px 8px\",\r\n whiteSpace: \"nowrap\" as const,\r\n fontFamily: \"inherit\",\r\n transition: \"color 0.1s\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n scrollArea: {\r\n overflowY: \"auto\" as const,\r\n flex: 1,\r\n },\r\n emptyPanel: {\r\n padding: \"24px 12px\",\r\n color: \"#71717a\",\r\n fontSize: \"12px\",\r\n textAlign: \"center\" as const,\r\n lineHeight: 1.6,\r\n },\r\n componentName: {\r\n color: \"#60a5fa\",\r\n fontWeight: \"bold\" as const,\r\n fontSize: \"13px\",\r\n },\r\n headerActions: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n },\r\n pinBadge: { color: \"#fbbf24\", fontSize: \"10px\" },\r\n closeBtn: {\r\n background: \"none\",\r\n border: \"none\",\r\n color: \"#71717a\",\r\n cursor: \"pointer\",\r\n fontSize: \"14px\",\r\n lineHeight: 1,\r\n padding: \"2px 4px\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n section: {\r\n padding: \"8px 12px\",\r\n borderBottom: \"1px solid #18181b\",\r\n },\r\n sectionTitle: {\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n textTransform: \"uppercase\" as const,\r\n letterSpacing: \"0.08em\",\r\n marginBottom: \"6px\",\r\n },\r\n row: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n marginBottom: \"3px\",\r\n },\r\n varKey: { color: \"#a1a1aa\" },\r\n varValue: { color: \"#34d399\", fontWeight: \"bold\" as const },\r\n classGrid: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\" as const,\r\n gap: \"4px\",\r\n },\r\n classChip: {\r\n background: \"#18181b\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"4px\",\r\n padding: \"2px 6px\",\r\n color: \"#e4e4e7\",\r\n cursor: \"default\",\r\n fontSize: \"11px\",\r\n },\r\n copyBtn: {\r\n display: \"block\",\r\n width: \"100%\",\r\n background: \"none\",\r\n border: \"none\",\r\n borderTop: \"1px solid #18181b\",\r\n color: \"#52525b\",\r\n cursor: \"pointer\",\r\n padding: \"8px 12px\",\r\n textAlign: \"left\" as const,\r\n fontSize: \"11px\",\r\n pointerEvents: \"all\" as const,\r\n fontFamily: \"inherit\",\r\n },\r\n statusBar: {\r\n position: \"fixed\" as const,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n background: \"#1e3a5f\",\r\n color: \"#93c5fd\",\r\n fontSize: \"11px\",\r\n padding: \"4px 12px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n pointerEvents: \"all\" as const,\r\n zIndex: 2147483647,\r\n },\r\n toggleBtn: {\r\n position: \"fixed\" as const,\r\n bottom: 12,\r\n right: 12,\r\n width: 36,\r\n height: 36,\r\n borderRadius: \"50%\",\r\n background: \"#1e3a5f\",\r\n border: \"1px solid #3b82f6\",\r\n color: \"white\",\r\n cursor: \"pointer\",\r\n fontSize: \"16px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n zIndex: 2147483647,\r\n boxShadow: \"0 2px 8px rgba(0,0,0,0.4)\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Provider\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function DevToolsProvider(): React.ReactElement | null {\r\n if (process.env.NODE_ENV === \"production\") return null\r\n return React.createElement(TwDevTools)\r\n}\r\n\r\n// Export shared trace utilities for reuse across CLI, dashboard, and devtools\r\nexport type { TraceSnapshot, TraceSummary } from \"@tailwind-styled/shared\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n getPipelinePercentages,\r\n}\r\n\r\n// ── Class Inspector — reusable surface (execution-log requirement) ──────────\r\nexport {\r\n fetchClassInspection,\r\n formatClassInspectionCli,\r\n formatClassInspectionJson,\r\n type ClassInspectResult,\r\n type InspectorFetchOptions,\r\n} from \"./classInspector\"\r\n"]}
1
+ {"version":3,"sources":["../packages/domain/shared/src/trace.ts","../packages/domain/shared/src/index.ts","../packages/infrastructure/devtools/src/classInspector.ts","../packages/infrastructure/devtools/src/index.tsx"],"names":[],"mappings":"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","file":"devtools.mjs","sourcesContent":["/**\r\n * Shared trace utilities for CLI, devtools, and dashboard\r\n * \r\n * Provides reusable trace snapshot handling, formatting, and analysis\r\n * across the tailwind-styled-v4 ecosystem without introducing coupling.\r\n */\r\n\r\nexport interface TraceSnapshot {\r\n generatedAt: string\r\n buildMs: number | null\r\n scanMs: number | null\r\n analyzeMs: number | null\r\n compileMs: number | null\r\n memoryMb: { rss: number; heapUsed: number; heapTotal: number } | null\r\n classCount: number | null\r\n fileCount: number | null\r\n cssBytes: number | null\r\n mode: string | null\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n}\r\n\r\nexport interface TraceSummary {\r\n workspace: {\r\n totalPackages: number\r\n totalFiles: number\r\n totalClasses: number\r\n lastScanDurationMs: number\r\n lastBuildDurationMs: number\r\n }\r\n cache: {\r\n hitRate: number\r\n totalEntries: number\r\n memoryUsageMb: number\r\n }\r\n pipeline: {\r\n scanDurationMs: number\r\n analyzeDurationMs: number\r\n compileDurationMs: number\r\n totalDurationMs: number\r\n }\r\n health: {\r\n status: \"healthy\" | \"degraded\" | \"unhealthy\"\r\n issues: Array<{ severity: string; message: string }>\r\n }\r\n}\r\n\r\n/**\r\n * Get health status color for UI rendering\r\n */\r\nexport function getHealthColor(status?: string): string {\r\n switch (status) {\r\n case \"healthy\":\r\n return \"#34d399\"\r\n case \"degraded\":\r\n return \"#fbbf24\"\r\n case \"unhealthy\":\r\n return \"#f87171\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Get mode color for UI rendering\r\n */\r\nexport function getModeColor(mode?: string | null): string {\r\n switch (mode) {\r\n case \"build\":\r\n return \"#fbbf24\"\r\n case \"watch\":\r\n return \"#34d399\"\r\n case \"jit\":\r\n return \"#60a5fa\"\r\n case \"error\":\r\n return \"#f87171\"\r\n case \"idle\":\r\n return \"#71717a\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Format memory in human-readable format\r\n */\r\nexport function formatMemory(bytes: number): string {\r\n if (bytes < 1024) return `${Math.round(bytes)}B`\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\r\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\r\n}\r\n\r\n/**\r\n * Format duration in human-readable format\r\n */\r\nexport function formatDuration(ms: number | null): string {\r\n if (ms === null) return \"—\"\r\n if (ms < 1000) return `${ms}ms`\r\n return `${(ms / 1000).toFixed(1)}s`\r\n}\r\n\r\n/**\r\n * Calculate health status from metrics\r\n */\r\nexport function calculateHealth(\r\n metrics: TraceSnapshot,\r\n summary?: TraceSummary\r\n): \"healthy\" | \"degraded\" | \"unhealthy\" {\r\n if (summary?.health?.status) return summary.health.status\r\n\r\n // Fallback to simple heuristics\r\n if (metrics.mode === \"error\") return \"unhealthy\"\r\n if ((metrics.buildMs ?? 0) > 5000) return \"degraded\"\r\n if (metrics.memoryMb && metrics.memoryMb.heapUsed > 500) return \"degraded\"\r\n return \"healthy\"\r\n}\r\n\r\n/**\r\n * Get color for build time indicator\r\n */\r\nexport function getBuildTimeColor(ms: number | null): string {\r\n if (ms === null) return \"#52525b\"\r\n if (ms > 1000) return \"#f87171\" // red - very slow\r\n if (ms > 500) return \"#fbbf24\" // amber - acceptable\r\n return \"#34d399\" // green - fast\r\n}\r\n\r\n/**\r\n * Get color for memory usage indicator\r\n */\r\nexport function getMemoryColor(mb: number): string {\r\n if (mb > 500) return \"#f87171\" // red - high\r\n if (mb > 250) return \"#fbbf24\" // amber - moderate\r\n return \"#34d399\" // green - low\r\n}\r\n\r\n/**\r\n * Create trace snapshot from dashboard data\r\n */\r\nexport function createTraceSnapshot(data: Record<string, unknown>): TraceSnapshot {\r\n return {\r\n generatedAt: (data.generatedAt as string) || new Date().toISOString(),\r\n buildMs: (data.buildMs as number) ?? null,\r\n scanMs: (data.scanMs as number) ?? null,\r\n analyzeMs: (data.analyzeMs as number) ?? null,\r\n compileMs: (data.compileMs as number) ?? null,\r\n memoryMb: (data.memoryMb as { rss: number; heapUsed: number; heapTotal: number } | null) ?? null,\r\n classCount: (data.classCount as number) ?? null,\r\n fileCount: (data.fileCount as number) ?? null,\r\n cssBytes: (data.cssBytes as number) ?? null,\r\n mode: (data.mode as string) ?? null,\r\n eventsReceived: (data.eventsReceived as number | undefined) ?? undefined,\r\n eventsProcessed: (data.eventsProcessed as number | undefined) ?? undefined,\r\n batchesProcessed: (data.batchesProcessed as number | undefined) ?? undefined,\r\n incrementalUpdates: (data.incrementalUpdates as number | undefined) ?? undefined,\r\n fullRescans: (data.fullRescans as number | undefined) ?? undefined,\r\n }\r\n}\r\n\r\n/**\r\n * Calculate pipeline time distribution\r\n */\r\nexport function getPipelinePercentages(metrics: TraceSnapshot): {\r\n scanPct: number\r\n analyzePct: number\r\n compilePct: number\r\n} {\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n const total = scan + analyze + compile\r\n\r\n if (total === 0) {\r\n return { scanPct: 0, analyzePct: 0, compilePct: 0 }\r\n }\r\n\r\n return {\r\n scanPct: (scan / total) * 100,\r\n analyzePct: (analyze / total) * 100,\r\n compilePct: (compile / total) * 100,\r\n }\r\n}\r\n","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 1 level: dist/ → package-root/native/ (published npm package)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // cwd fallback (user project root)\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * Class Inspector — reusable surface inspection untuk DevTools.\r\n * Menggunakan inspectClass() dari @tailwind-styled/engine.\r\n *\r\n * Dipakai oleh:\r\n * - DevTools TracePanel → class detail panel\r\n * - CLI `tw why <class>` → terminal output\r\n * - Dashboard `/inspect?class=` endpoint\r\n *\r\n * Surface ini reusable sesuai requirement dari execution-log.\r\n */\r\n\r\nexport interface ClassInspectResult {\r\n className: string\r\n css: string\r\n properties: Array<{ property: string; value: string }>\r\n conflicts: string[]\r\n usedIn: string[]\r\n risk: \"low\" | \"medium\" | \"high\"\r\n bundleBytes: number\r\n fetchedAt: number\r\n}\r\n\r\nexport interface InspectorFetchOptions {\r\n /** Dashboard base URL (default: http://localhost:7421) */\r\n baseUrl?: string\r\n /** Timeout ms (default: 3000) */\r\n timeoutMs?: number\r\n}\r\n\r\n/**\r\n * Fetch inspection data untuk sebuah class dari dashboard server.\r\n * Dashboard server pakai inspectClass() dari engine secara internal.\r\n *\r\n * @example\r\n * // Di DevTools panel:\r\n * const result = await fetchClassInspection(\"flex\")\r\n * console.log(result.properties) // [{ property: \"display\", value: \"flex\" }]\r\n * console.log(result.usedIn) // [\"src/Button.tsx\"]\r\n */\r\nexport async function fetchClassInspection(\r\n className: string,\r\n opts: InspectorFetchOptions = {}\r\n): Promise<ClassInspectResult | null> {\r\n const { baseUrl = \"http://localhost:7421\", timeoutMs = 3000 } = opts\r\n\r\n const url = `${baseUrl}/inspect?class=${encodeURIComponent(className)}`\r\n\r\n try {\r\n const res = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) })\r\n if (!res.ok) return null\r\n const data = await res.json()\r\n return {\r\n className,\r\n css: data.css ?? \"\",\r\n properties: data.properties ?? [],\r\n conflicts: data.conflicts ?? [],\r\n usedIn: data.usedIn ?? [],\r\n risk: data.risk ?? \"low\",\r\n bundleBytes: data.bundleBytes ?? 0,\r\n fetchedAt: Date.now(),\r\n }\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/** Format inspection result untuk CLI terminal output */\r\nexport function formatClassInspectionCli(result: ClassInspectResult): string {\r\n const lines: string[] = [\r\n `\\n Class: .${result.className}`,\r\n ` Risk: ${result.risk}`,\r\n ``,\r\n ]\r\n\r\n if (result.properties.length > 0) {\r\n lines.push(` CSS Properties:`)\r\n for (const p of result.properties) {\r\n lines.push(` ${p.property}: ${p.value}`)\r\n }\r\n lines.push(``)\r\n }\r\n\r\n if (result.usedIn.length > 0) {\r\n lines.push(` Used in ${result.usedIn.length} file(s):`)\r\n for (const f of result.usedIn.slice(0, 5)) {\r\n lines.push(` ${f}`)\r\n }\r\n if (result.usedIn.length > 5) {\r\n lines.push(` ... and ${result.usedIn.length - 5} more`)\r\n }\r\n lines.push(``)\r\n } else {\r\n lines.push(` ⚠️ Not found in workspace scan (dead code?)`)\r\n lines.push(``)\r\n }\r\n\r\n if (result.bundleBytes > 0) {\r\n lines.push(` Bundle contribution: ~${result.bundleBytes}B`)\r\n }\r\n\r\n if (result.conflicts.length > 0) {\r\n lines.push(` Conflicts: ${result.conflicts.join(\", \")}`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/** Format for JSON output (CLI --json flag) */\r\nexport function formatClassInspectionJson(result: ClassInspectResult): string {\r\n return JSON.stringify(result, null, 2)\r\n}\r\n","/**\r\n * tailwind-styled-v4 — DevTools v4\r\n *\r\n * Panels:\r\n * 🔍 Inspector — hover element, see classes + variants\r\n * ⚡ State — list all reactive state components + active states\r\n * 📦 Container — list container query components + active breakpoints\r\n * 🎨 Tokens — live token editor with instant preview\r\n * 📊 Analyzer — duplicate patterns + unused variants (runtime scan)\r\n * 🔬 Trace — build timeline, pipeline events, memory profile\r\n *\r\n * Keyboard shortcuts:\r\n * Ctrl+Shift+D → toggle devtools\r\n * Escape → close\r\n * 1-6 → switch panels\r\n */\r\n\r\n\"use client\"\r\n\r\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\r\nimport {\r\n formatMemory,\r\n formatDuration,\r\n getBuildTimeColor,\r\n getModeColor,\r\n getHealthColor,\r\n getMemoryColor,\r\n getPipelinePercentages,\r\n type TraceSnapshot,\r\n type TraceSummary,\r\n} from \"@tailwind-styled/shared\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface InspectedElement {\r\n componentName: string\r\n element: HTMLElement\r\n rect: DOMRect\r\n twClasses: string[]\r\n variantProps: Record<string, string>\r\n atomicMap: Record<string, string>\r\n rawClassName: string\r\n stateNames: string[]\r\n activeStates: Record<string, string>\r\n containerBps: string[]\r\n}\r\n\r\ntype Panel = \"inspector\" | \"state\" | \"container\" | \"tokens\" | \"analyzer\" | \"trace\"\r\n\r\ninterface DevToolsState {\r\n open: boolean\r\n panel: Panel\r\n pinned: boolean\r\n inspected: InspectedElement | null\r\n position: { x: number; y: number }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction parseDataTw(dataTw: string | null): { name: string; classes: string[] } {\r\n if (!dataTw) return { name: \"Unknown\", classes: [] }\r\n const colonIdx = dataTw.indexOf(\":\")\r\n if (colonIdx === -1) return { name: dataTw, classes: [] }\r\n const name = dataTw.slice(0, colonIdx)\r\n const classes = dataTw\r\n .slice(colonIdx + 1)\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n return { name, classes }\r\n}\r\n\r\nfunction parseVariantAttr(v: string | null): Record<string, string> {\r\n if (!v) return {}\r\n try {\r\n return JSON.parse(v)\r\n } catch {\r\n return {}\r\n }\r\n}\r\n\r\nfunction findNearestTwElement(el: HTMLElement): HTMLElement | null {\r\n const cur = { el: el as HTMLElement | null }\r\n while (cur.el) {\r\n if (cur.el.dataset?.tw) return cur.el\r\n cur.el = cur.el.parentElement\r\n }\r\n return null\r\n}\r\n\r\nfunction getAtomicMap(classes: string[]): Record<string, string> {\r\n const registry = window.__TW_REGISTRY__\r\n if (!registry) return {}\r\n const map: Record<string, string> = {}\r\n for (const cls of classes) {\r\n if (registry[cls]) map[cls] = registry[cls]\r\n }\r\n return map\r\n}\r\n\r\nfunction getActiveStates(el: HTMLElement): Record<string, string> {\r\n const states: Record<string, string> = {}\r\n for (const attr of el.attributes) {\r\n if (attr.name.startsWith(\"data-\")) {\r\n states[attr.name.replace(\"data-\", \"\")] = attr.value\r\n }\r\n }\r\n return states\r\n}\r\n\r\nfunction getStateNames(el: HTMLElement): string[] {\r\n const registry = window.__TW_STATE_REGISTRY__ as Map<string, { states: string[] }> | undefined\r\n if (!registry) return []\r\n for (const [id, entry] of registry) {\r\n if (el.classList.contains(id)) return entry.states\r\n }\r\n return []\r\n}\r\n\r\nfunction getContainerBps(el: HTMLElement): string[] {\r\n const registry = window.__TW_CONTAINER_REGISTRY__ as Map<string, { breakpoints: Array<{ minWidth: string }> }> | undefined\r\n if (!registry) return []\r\n for (const [id, entry] of registry) {\r\n if (el.classList.contains(id)) {\r\n return entry.breakpoints.map((bp) => bp.minWidth)\r\n }\r\n }\r\n return []\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Inspector\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction InspectorPanel({\r\n inspected,\r\n position: _position,\r\n pinned: _pinned,\r\n}: {\r\n inspected: InspectedElement | null\r\n position: { x: number; y: number }\r\n pinned: boolean\r\n}) {\r\n if (!inspected) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"Hover an element to inspect\")\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n // Variant props\r\n Object.keys(inspected.variantProps).length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Variants\"),\r\n Object.entries(inspected.variantProps).map(([k, v]) =>\r\n React.createElement(\r\n \"div\",\r\n { key: k, style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, k),\r\n React.createElement(\"span\", { style: S.varValue }, `\"${v}\"`)\r\n )\r\n )\r\n ),\r\n\r\n // Active states\r\n Object.keys(inspected.activeStates).length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Active Data Attrs\"),\r\n Object.entries(inspected.activeStates).map(([k, v]) =>\r\n React.createElement(\r\n \"div\",\r\n { key: k, style: S.row },\r\n React.createElement(\"code\", { style: { ...S.varKey, color: \"#f59e0b\" } }, `data-${k}`),\r\n React.createElement(\"span\", { style: { ...S.varValue, color: \"#34d399\" } }, `\"${v}\"`)\r\n )\r\n )\r\n ),\r\n\r\n // State names\r\n inspected.stateNames.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Reactive States\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.stateNames.map((s) =>\r\n React.createElement(\r\n \"code\",\r\n {\r\n key: s,\r\n style: {\r\n ...S.classChip,\r\n background: inspected.activeStates[s] === \"true\" ? \"#065f46\" : \"#18181b\",\r\n borderColor: inspected.activeStates[s] === \"true\" ? \"#34d399\" : \"#27272a\",\r\n },\r\n },\r\n s\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Container breakpoints\r\n inspected.containerBps.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Container Breakpoints\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.containerBps.map((bp) =>\r\n React.createElement(\r\n \"code\",\r\n { key: bp, style: { ...S.classChip, color: \"#818cf8\" } },\r\n bp\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Tailwind classes\r\n inspected.twClasses.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Classes\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n inspected.twClasses.map((cls) =>\r\n React.createElement(\r\n \"code\",\r\n { key: cls, style: S.classChip, title: inspected.atomicMap[cls] },\r\n cls\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // Copy\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: S.copyBtn,\r\n onClick: () => {\r\n navigator.clipboard?.writeText(\r\n JSON.stringify(\r\n {\r\n component: inspected.componentName,\r\n variants: inspected.variantProps,\r\n states: inspected.activeStates,\r\n classes: inspected.twClasses,\r\n },\r\n null,\r\n 2\r\n )\r\n )\r\n },\r\n },\r\n \"Copy to clipboard\"\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: State Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction StatePanel() {\r\n const [entries, setEntries] = useState<any[]>([])\r\n\r\n useEffect(() => {\r\n const refresh = () => {\r\n const reg = window.__TW_STATE_REGISTRY__\r\n setEntries(reg ? Array.from(reg.values()) : [])\r\n }\r\n refresh()\r\n const interval = setInterval(refresh, 1000)\r\n return () => clearInterval(interval)\r\n }, [])\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.4 } },\r\n \"No state-enabled components found.\"\r\n ),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use tw.button({ state: { active: \"...\" } }) to register.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n entries.map((entry) =>\r\n React.createElement(\r\n \"div\",\r\n { key: entry.id, style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: S.sectionTitle },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\r\n entry.id\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.classGrid },\r\n entry.states.map((s: string) =>\r\n React.createElement(\r\n \"code\",\r\n { key: s, style: { ...S.classChip, color: \"#f59e0b\" } },\r\n `data-${s}`\r\n )\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.row, marginTop: \"4px\" } },\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n ...S.sectionTitle,\r\n marginBottom: 0,\r\n color: entry.cssInjected ? \"#34d399\" : \"#ef4444\",\r\n },\r\n },\r\n entry.cssInjected ? \"● CSS injected\" : \"○ CSS pending\"\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Container Query Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction ContainerPanel() {\r\n const [entries, setEntries] = useState<any[]>([])\r\n\r\n useEffect(() => {\r\n const refresh = () => {\r\n const reg = window.__TW_CONTAINER_REGISTRY__\r\n setEntries(reg ? Array.from(reg.values()) : [])\r\n }\r\n refresh()\r\n const interval = setInterval(refresh, 1000)\r\n return () => clearInterval(interval)\r\n }, [])\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.4 } },\r\n \"No container query components found.\"\r\n ),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use tw.div({ container: { md: \"flex-row\" } }) to register.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n entries.map((entry) =>\r\n React.createElement(\r\n \"div\",\r\n { key: entry.id, style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: S.sectionTitle },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\r\n entry.containerName &&\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"6px\", color: \"#818cf8\" } },\r\n `[${entry.containerName}]`\r\n ),\r\n React.createElement(\r\n \"span\",\r\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\r\n entry.id\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n null,\r\n entry.breakpoints.map(\r\n (bp: { minWidth: string; classes: string; label?: string }, i: number) =>\r\n React.createElement(\r\n \"div\",\r\n { key: i, style: { ...S.row, marginBottom: \"2px\" } },\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#818cf8\", fontSize: \"11px\" } },\r\n `≥ ${bp.minWidth}`\r\n ),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#6b7280\", fontSize: \"11px\" } },\r\n bp.classes\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Live Token Editor\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction TokensPanel() {\r\n const [tokens, setTokens_] = useState<Record<string, string>>({})\r\n\r\n useEffect(() => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (!engine) return\r\n\r\n setTokens_(engine.getTokens())\r\n if (!engine.subscribe) return\r\n const unsub = engine.subscribe((t: Record<string, string>) => setTokens_({ ...t }))\r\n return unsub\r\n }, [])\r\n\r\n const entries = Object.entries(tokens)\r\n\r\n if (entries.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.emptyPanel },\r\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"No live tokens registered.\"),\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.3, fontSize: \"11px\" } },\r\n 'Use liveToken({ primary: \"#3b82f6\" }) to register tokens.'\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, padding: \"8px 12px 4px\", color: \"#52525b\" } },\r\n \"Click color to edit · Changes apply instantly\"\r\n ),\r\n entries.map(([name, value]) => {\r\n const isColor = value.startsWith(\"#\") || value.startsWith(\"rgb\") || value.startsWith(\"hsl\")\r\n return React.createElement(\r\n \"div\",\r\n { key: name, style: { ...S.row, padding: \"6px 12px\", borderBottom: \"1px solid #18181b\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\r\n isColor &&\r\n React.createElement(\"div\", {\r\n style: {\r\n width: \"16px\",\r\n height: \"16px\",\r\n borderRadius: \"3px\",\r\n background: value,\r\n border: \"1px solid #27272a\",\r\n flexShrink: 0,\r\n },\r\n }),\r\n React.createElement(\"span\", { style: { color: \"#a1a1aa\", fontSize: \"12px\" } }, name)\r\n ),\r\n isColor\r\n ? React.createElement(\"input\", {\r\n type: \"color\",\r\n defaultValue: value.startsWith(\"#\") ? value : \"#000000\",\r\n style: {\r\n width: \"52px\",\r\n height: \"22px\",\r\n border: \"none\",\r\n background: \"none\",\r\n cursor: \"pointer\",\r\n },\r\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (engine) engine.setToken(name, e.target.value)\r\n },\r\n })\r\n : React.createElement(\"input\", {\r\n type: \"text\",\r\n defaultValue: value,\r\n style: {\r\n background: \"#18181b\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"3px\",\r\n color: \"#e4e4e7\",\r\n fontSize: \"11px\",\r\n padding: \"2px 6px\",\r\n width: \"100px\",\r\n fontFamily: \"monospace\",\r\n },\r\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => {\r\n const engine = window.__TW_TOKEN_ENGINE__\r\n if (engine) engine.setToken(name, e.target.value)\r\n },\r\n })\r\n )\r\n })\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Runtime Analyzer\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction AnalyzerPanel() {\r\n const [scanning, setScanning] = useState(false)\r\n const [results, setResults] = useState<{\r\n duplicates: Array<{ pattern: string; count: number; names: string[] }>\r\n stateCount: number\r\n containerCount: number\r\n tokenCount: number\r\n } | null>(null)\r\n // Engine metrics — fetched dari dashboard server (http://localhost:3000/metrics)\r\n const [engineMetrics, setEngineMetrics] = useState<Record<string, unknown> | null>(null)\r\n const [metricsFetching, setMetricsFetching] = useState(false)\r\n const [metricsError, setMetricsError] = useState<string | null>(null)\r\n\r\n const loadEngineMetrics = useCallback(async () => {\r\n setMetricsFetching(true)\r\n setMetricsError(null)\r\n try {\r\n const res = await fetch(\"http://localhost:3000/metrics\", {\r\n signal: AbortSignal.timeout(2000),\r\n })\r\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\r\n const data = await res.json()\r\n setEngineMetrics(data)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : String(e)\r\n setMetricsError(\r\n msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\r\n ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\r\n : msg\r\n )\r\n setEngineMetrics(null)\r\n } finally {\r\n setMetricsFetching(false)\r\n }\r\n }, [])\r\n\r\n const runScan = useCallback(() => {\r\n setScanning(true)\r\n\r\n setTimeout(() => {\r\n const twEls = document.querySelectorAll(\"[data-tw]\")\r\n const classMap = new Map<string, string[]>()\r\n\r\n for (const el of twEls) {\r\n const { name, classes } = (() => {\r\n const dTw = (el as HTMLElement).dataset.tw ?? null\r\n if (!dTw) return { name: \"?\", classes: [] }\r\n const ci = dTw.indexOf(\":\")\r\n return {\r\n name: ci >= 0 ? dTw.slice(0, ci) : dTw,\r\n classes:\r\n ci >= 0\r\n ? dTw\r\n .slice(ci + 1)\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n : [],\r\n }\r\n })()\r\n\r\n const key = classes.sort().join(\" \")\r\n if (!classMap.has(key)) classMap.set(key, [])\r\n classMap.get(key)!.push(name)\r\n }\r\n\r\n const duplicates = Array.from(classMap.entries())\r\n .filter(([, names]) => names.length > 1)\r\n .map(([pattern, names]) => ({ pattern, count: names.length, names }))\r\n .sort((a, b) => b.count - a.count)\r\n .slice(0, 10)\r\n\r\n const stateReg = window.__TW_STATE_REGISTRY__\r\n const containerReg = window.__TW_CONTAINER_REGISTRY__\r\n const tokenEngine = window.__TW_TOKEN_ENGINE__\r\n\r\n setResults({\r\n duplicates,\r\n stateCount: stateReg?.size ?? 0,\r\n containerCount: containerReg?.size ?? 0,\r\n tokenCount: Object.keys(tokenEngine?.getTokens?.() ?? {}).length,\r\n })\r\n setScanning(false)\r\n }, 100)\r\n }, [])\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"10px 12px\" } },\r\n\r\n // ── DOM Scan ──────────────────────────────────────────────────────────\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#60a5fa\", fontWeight: \"600\" },\r\n onClick: runScan,\r\n disabled: scanning,\r\n },\r\n scanning ? \"Scanning DOM...\" : \"▶ Run DOM Scan\"\r\n ),\r\n\r\n // ── Engine Metrics (dari dashboard) ───────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.section, marginTop: \"8px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"⚡ Engine Metrics\"\r\n ),\r\n engineMetrics\r\n ? React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Build\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n engineMetrics.buildMs !== null ? `${engineMetrics.buildMs}ms` : \"—\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n String(engineMetrics.classCount ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#34d399\" } },\r\n String(engineMetrics.fileCount ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Mode\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(engineMetrics.mode ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n ...S.copyBtn,\r\n borderTop: \"none\",\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n padding: \"4px 0\",\r\n },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n \"↻ Refresh\"\r\n )\r\n )\r\n : metricsError\r\n ? React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"6px\" } },\r\n metricsError\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n metricsFetching ? \"Connecting...\" : \"↻ Retry\"\r\n )\r\n )\r\n : React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#71717a\",\r\n fontSize: \"11px\",\r\n lineHeight: 1.6,\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n \"Rust analyzer hanya tersedia via CLI atau dashboard.\",\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#52525b\", fontSize: \"10px\" } },\r\n \"tw analyze . | tw dashboard\"\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: loadEngineMetrics,\r\n disabled: metricsFetching,\r\n },\r\n metricsFetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n ),\r\n\r\n // ── DOM Scan Results ──────────────────────────────────────────────────\r\n results &&\r\n React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Summary\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"State components\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.stateCount))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Container components\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.containerCount))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Live tokens\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(results.tokenCount))\r\n )\r\n ),\r\n\r\n results.duplicates.length > 0\r\n ? React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: S.sectionTitle }, \"Duplicate Class Sets\"),\r\n results.duplicates.map((d, i) =>\r\n React.createElement(\r\n \"div\",\r\n { key: i, style: { marginBottom: \"8px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f59e0b\", fontSize: \"11px\", marginBottom: \"2px\" } },\r\n d.names.join(\", \")\r\n ),\r\n React.createElement(\r\n \"code\",\r\n {\r\n style: {\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n wordBreak: \"break-all\" as const,\r\n },\r\n },\r\n d.pattern.split(\" \").slice(0, 8).join(\" \") +\r\n (d.pattern.split(\" \").length > 8 ? \"...\" : \"\")\r\n )\r\n )\r\n )\r\n )\r\n : React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#34d399\", fontSize: \"12px\" } },\r\n \"✓ No duplicate class sets in current DOM\"\r\n )\r\n )\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Panel: Trace — build timeline, pipeline events, memory profile\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst DASHBOARD_BASE = \"http://localhost:3000\"\r\n\r\nfunction TracePanel() {\r\n const [metrics, setMetrics] = useState<TraceSnapshot | null>(null)\r\n const [history, setHistory] = useState<TraceSnapshot[]>([])\r\n const [summary, setSummary] = useState<TraceSummary | null>(null)\r\n const [error, setError] = useState<string | null>(null)\r\n const [fetching, setFetching] = useState(false)\r\n const [autoRefresh, setAutoRefresh] = useState(false)\r\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\r\n\r\n const fetchAll = useCallback(async () => {\r\n setFetching(true)\r\n setError(null)\r\n try {\r\n const [mRes, hRes, sRes] = await Promise.all([\r\n fetch(`${DASHBOARD_BASE}/metrics`, { signal: AbortSignal.timeout(2000) }),\r\n fetch(`${DASHBOARD_BASE}/history`, { signal: AbortSignal.timeout(2000) }),\r\n fetch(`${DASHBOARD_BASE}/summary`, { signal: AbortSignal.timeout(2000) }),\r\n ])\r\n if (!mRes.ok) throw new Error(`metrics: HTTP ${mRes.status}`)\r\n if (!hRes.ok) throw new Error(`history: HTTP ${hRes.status}`)\r\n if (!sRes.ok) throw new Error(`summary: HTTP ${sRes.status}`)\r\n\r\n const m = await mRes.json()\r\n const h = await hRes.json()\r\n const s = await sRes.json()\r\n\r\n setMetrics(m)\r\n setHistory(Array.isArray(h) ? h : [])\r\n setSummary(s)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : String(e)\r\n setError(\r\n msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\r\n ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\r\n : msg\r\n )\r\n } finally {\r\n setFetching(false)\r\n }\r\n }, [])\r\n\r\n // Auto-refresh effect\r\n useEffect(() => {\r\n if (autoRefresh) {\r\n fetchAll()\r\n intervalRef.current = setInterval(fetchAll, 3000)\r\n } else if (intervalRef.current) {\r\n clearInterval(intervalRef.current)\r\n intervalRef.current = null\r\n }\r\n return () => {\r\n if (intervalRef.current) clearInterval(intervalRef.current)\r\n }\r\n }, [autoRefresh, fetchAll])\r\n\r\n // Render bar chart for build time history\r\n const renderHistoryChart = () => {\r\n const vals = history.map((h) => h.buildMs ?? 0).filter((v) => v > 0)\r\n if (vals.length === 0) {\r\n return React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#52525b\",\r\n fontSize: \"11px\",\r\n textAlign: \"center\" as const,\r\n padding: \"12px\",\r\n },\r\n },\r\n \"No build history available\"\r\n )\r\n }\r\n const max = Math.max(...vals)\r\n const chartWidth = 296\r\n const barWidth = Math.max(3, Math.floor(chartWidth / vals.length) - 1)\r\n\r\n return React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"flex-end\" as const,\r\n gap: \"1px\",\r\n height: \"60px\",\r\n padding: \"0 2px\",\r\n },\r\n },\r\n vals.map((v, i) => {\r\n const h = max > 0 ? Math.max(3, Math.round((v / max) * 56)) : 3\r\n return React.createElement(\"div\", {\r\n key: i,\r\n style: {\r\n width: `${barWidth}px`,\r\n height: `${h}px`,\r\n background: getBuildTimeColor(v),\r\n borderRadius: \"2px 2px 0 0\",\r\n opacity: i === vals.length - 1 ? 1 : 0.5,\r\n flexShrink: 0,\r\n },\r\n title: `${v}ms`,\r\n })\r\n })\r\n )\r\n }\r\n\r\n // Render pipeline breakdown bar\r\n const renderPipelineBar = () => {\r\n if (!metrics) return null\r\n const { scanPct, analyzePct, compilePct } = getPipelinePercentages(metrics)\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n\r\n if (scanPct === 0 && analyzePct === 0 && compilePct === 0) return null\r\n\r\n return React.createElement(\r\n \"div\",\r\n null,\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Pipeline Breakdown\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n height: \"12px\",\r\n borderRadius: \"4px\",\r\n overflow: \"hidden\",\r\n marginBottom: \"6px\",\r\n },\r\n },\r\n scanPct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${scanPct}%`, background: \"#60a5fa\", minWidth: \"2px\" },\r\n title: `Scan: ${scan}ms`,\r\n }),\r\n analyzePct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${analyzePct}%`, background: \"#818cf8\", minWidth: \"2px\" },\r\n title: `Analyze: ${analyze}ms`,\r\n }),\r\n compilePct > 0 &&\r\n React.createElement(\"div\", {\r\n style: { width: `${compilePct}%`, background: \"#34d399\", minWidth: \"2px\" },\r\n title: `Compile: ${compile}ms`,\r\n })\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", gap: \"12px\", fontSize: \"10px\" } },\r\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, `Scan ${scan}ms`),\r\n React.createElement(\"span\", { style: { color: \"#818cf8\" } }, `Analyze ${analyze}ms`),\r\n React.createElement(\"span\", { style: { color: \"#34d399\" } }, `Compile ${compile}ms`)\r\n )\r\n )\r\n }\r\n\r\n // Error state\r\n if (error && !metrics) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"12px\" } },\r\n React.createElement(\r\n \"div\",\r\n { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"8px\" } },\r\n error\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n },\r\n fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n )\r\n }\r\n\r\n // Initial load state\r\n if (!metrics) {\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"12px\" } },\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n color: \"#71717a\",\r\n fontSize: \"11px\",\r\n lineHeight: 1.6,\r\n marginBottom: \"8px\",\r\n },\r\n },\r\n \"Build timeline dan pipeline events dari engine.\",\r\n React.createElement(\"br\", null),\r\n React.createElement(\r\n \"code\",\r\n { style: { color: \"#52525b\", fontSize: \"10px\" } },\r\n \"tw dashboard\"\r\n )\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n },\r\n fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\r\n )\r\n )\r\n )\r\n }\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.scrollArea },\r\n\r\n // ── Mode & Health ────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: { padding: \"10px 12px 6px\" } },\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n marginBottom: \"8px\",\r\n },\r\n },\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\r\n React.createElement(\"div\", {\r\n style: {\r\n width: \"8px\",\r\n height: \"8px\",\r\n borderRadius: \"50%\",\r\n background: getModeColor(metrics.mode),\r\n boxShadow: `0 0 6px ${getModeColor(metrics.mode)}`,\r\n },\r\n }),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: getModeColor(metrics.mode),\r\n fontWeight: \"600\",\r\n fontSize: \"12px\",\r\n textTransform: \"uppercase\" as const,\r\n },\r\n },\r\n metrics.mode ?? \"unknown\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: { display: \"flex\", gap: \"4px\" } },\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n background: autoRefresh ? \"#1e3a5f\" : \"none\",\r\n border: `1px solid ${autoRefresh ? \"#3b82f6\" : \"#27272a\"}`,\r\n borderRadius: \"4px\",\r\n color: autoRefresh ? \"#60a5fa\" : \"#52525b\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"2px 6px\",\r\n fontFamily: \"inherit\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n onClick: () => setAutoRefresh(!autoRefresh),\r\n title: autoRefresh ? \"Stop auto-refresh\" : \"Auto-refresh every 3s\",\r\n },\r\n autoRefresh ? \"● Live\" : \"○ Live\"\r\n ),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: {\r\n background: \"none\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"4px\",\r\n color: \"#52525b\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"2px 6px\",\r\n fontFamily: \"inherit\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n onClick: fetchAll,\r\n disabled: fetching,\r\n title: \"Refresh now\",\r\n },\r\n \"↻\"\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // ── Health Status ────────────────────────────────────────────────────\r\n summary &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Health\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Status\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: getHealthColor(summary.health?.status), fontWeight: \"600\" } },\r\n summary.health?.status ?? \"unknown\"\r\n )\r\n ),\r\n summary.health?.issues &&\r\n summary.health.issues.length > 0 &&\r\n React.createElement(\r\n \"div\",\r\n { style: { marginTop: \"4px\" } },\r\n summary.health.issues.map((issue, i) =>\r\n React.createElement(\r\n \"div\",\r\n {\r\n key: i,\r\n style: {\r\n fontSize: \"10px\",\r\n color:\r\n issue.severity === \"high\"\r\n ? \"#f87171\"\r\n : issue.severity === \"medium\"\r\n ? \"#fbbf24\"\r\n : \"#71717a\",\r\n marginBottom: \"2px\",\r\n },\r\n },\r\n `• ${issue.message}`\r\n )\r\n )\r\n )\r\n ),\r\n\r\n // ── Build Metrics ────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Build Metrics\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Build\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n ...S.varValue,\r\n color: getBuildTimeColor(metrics.buildMs),\r\n },\r\n },\r\n metrics.buildMs !== null ? `${metrics.buildMs}ms` : \"—\"\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(metrics.classCount ?? \"—\"))\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\"span\", { style: S.varValue }, String(metrics.fileCount ?? \"—\"))\r\n ),\r\n metrics.cssBytes !== null &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"CSS\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { ...S.varValue, color: \"#818cf8\" } },\r\n formatMemory(metrics.cssBytes)\r\n )\r\n )\r\n ),\r\n\r\n // ── Pipeline Breakdown ───────────────────────────────────────────────\r\n React.createElement(\"div\", { style: S.section }, renderPipelineBar()),\r\n\r\n // ── Pipeline Events ──────────────────────────────────────────────────\r\n (metrics.eventsReceived !== undefined || metrics.batchesProcessed !== undefined) &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Pipeline Events\"\r\n ),\r\n metrics.eventsReceived !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Events received\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.eventsReceived)\r\n )\r\n ),\r\n metrics.eventsProcessed !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Events processed\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.eventsProcessed)\r\n )\r\n ),\r\n metrics.batchesProcessed !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Batches\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(metrics.batchesProcessed)\r\n )\r\n ),\r\n metrics.incrementalUpdates !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Incremental\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#34d399\", fontSize: \"11px\" } },\r\n String(metrics.incrementalUpdates)\r\n )\r\n ),\r\n metrics.fullRescans !== undefined &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Full rescans\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#fbbf24\", fontSize: \"11px\" } },\r\n String(metrics.fullRescans)\r\n )\r\n )\r\n ),\r\n\r\n // ── Memory ───────────────────────────────────────────────────────────\r\n metrics.memoryMb &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Memory\"),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Heap used\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: getMemoryColor(metrics.memoryMb.heapUsed),\r\n fontWeight: \"600\",\r\n },\r\n },\r\n `${metrics.memoryMb.heapUsed.toFixed(1)}MB`\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Heap total\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n `${metrics.memoryMb.heapTotal.toFixed(1)}MB`\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"RSS\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n `${metrics.memoryMb.rss.toFixed(1)}MB`\r\n )\r\n )\r\n ),\r\n\r\n // ── Workspace Summary ────────────────────────────────────────────────\r\n summary &&\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n \"Workspace\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Packages\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalPackages ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Files\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalFiles ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\r\n String(summary.workspace?.totalClasses ?? \"—\")\r\n )\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.row },\r\n React.createElement(\"span\", { style: S.varKey }, \"Cache hit rate\"),\r\n React.createElement(\r\n \"span\",\r\n {\r\n style: {\r\n color: (summary.cache?.hitRate ?? 0) > 0.8 ? \"#34d399\" : \"#fbbf24\",\r\n fontSize: \"11px\",\r\n },\r\n },\r\n summary.cache ? `${(summary.cache.hitRate * 100).toFixed(0)}%` : \"—\"\r\n )\r\n )\r\n ),\r\n\r\n // ── Build Time History ───────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.section },\r\n React.createElement(\r\n \"div\",\r\n { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\r\n `Build History (${history.length} snapshots)`\r\n ),\r\n renderHistoryChart()\r\n ),\r\n\r\n // ── Timestamp ────────────────────────────────────────────────────────\r\n metrics.generatedAt &&\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n padding: \"6px 12px\",\r\n color: \"#3f3f46\",\r\n fontSize: \"10px\",\r\n textAlign: \"center\" as const,\r\n },\r\n },\r\n `Last update: ${new Date(metrics.generatedAt).toLocaleTimeString()}`\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Main DevTools component\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function TwDevTools(): React.ReactElement | null {\r\n if (process.env.NODE_ENV === \"production\") return null\r\n\r\n const [state, setState] = useState<DevToolsState>({\r\n open: false,\r\n panel: \"inspector\",\r\n pinned: false,\r\n inspected: null,\r\n position: { x: 0, y: 0 },\r\n })\r\n\r\n const overlayRef = useRef<HTMLDivElement>(null)\r\n const isInspecting = state.open && state.panel === \"inspector\"\r\n\r\n // Keyboard shortcuts\r\n useEffect(() => {\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.ctrlKey && e.shiftKey && e.key === \"D\") {\r\n e.preventDefault()\r\n setState((s) => ({ ...s, open: !s.open, inspected: null }))\r\n }\r\n if (e.key === \"Escape\")\r\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null }))\r\n if (e.key === \"1\") setState((s) => (s.open ? { ...s, panel: \"inspector\" } : s))\r\n if (e.key === \"2\") setState((s) => (s.open ? { ...s, panel: \"state\" } : s))\r\n if (e.key === \"3\") setState((s) => (s.open ? { ...s, panel: \"container\" } : s))\r\n if (e.key === \"4\") setState((s) => (s.open ? { ...s, panel: \"tokens\" } : s))\r\n if (e.key === \"5\") setState((s) => (s.open ? { ...s, panel: \"analyzer\" } : s))\r\n if (e.key === \"6\") setState((s) => (s.open ? { ...s, panel: \"trace\" } : s))\r\n }\r\n window.addEventListener(\"keydown\", onKey)\r\n return () => window.removeEventListener(\"keydown\", onKey)\r\n }, [])\r\n\r\n // Mouse move — only active on inspector panel\r\n const onMouseMove = useCallback(\r\n (e: MouseEvent) => {\r\n if (!isInspecting || state.pinned) return\r\n const twEl = findNearestTwElement(e.target as HTMLElement)\r\n if (!twEl) {\r\n setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }))\r\n return\r\n }\r\n const { name, classes } = parseDataTw(twEl.dataset.tw ?? null)\r\n setState((s) => ({\r\n ...s,\r\n position: { x: e.clientX, y: e.clientY },\r\n inspected: {\r\n componentName: name,\r\n element: twEl,\r\n rect: twEl.getBoundingClientRect(),\r\n twClasses: classes,\r\n variantProps: parseVariantAttr(twEl.dataset.twVariants ?? null),\r\n atomicMap: getAtomicMap(classes),\r\n rawClassName: twEl.className,\r\n stateNames: getStateNames(twEl),\r\n activeStates: getActiveStates(twEl),\r\n containerBps: getContainerBps(twEl),\r\n },\r\n }))\r\n },\r\n [isInspecting, state.pinned]\r\n )\r\n\r\n const onClick = useCallback(\r\n (e: MouseEvent) => {\r\n if (!isInspecting) return\r\n if (overlayRef.current?.contains(e.target as HTMLElement)) return\r\n setState((s) => ({ ...s, pinned: !s.pinned && !!s.inspected }))\r\n },\r\n [isInspecting]\r\n )\r\n\r\n useEffect(() => {\r\n if (!isInspecting) return\r\n window.addEventListener(\"mousemove\", onMouseMove)\r\n window.addEventListener(\"click\", onClick)\r\n return () => {\r\n window.removeEventListener(\"mousemove\", onMouseMove)\r\n window.removeEventListener(\"click\", onClick)\r\n }\r\n }, [isInspecting, onMouseMove, onClick])\r\n\r\n // Toggle button\r\n if (!state.open) {\r\n return React.createElement(\r\n \"button\",\r\n {\r\n onClick: () => setState((s) => ({ ...s, open: true })),\r\n style: S.toggleBtn,\r\n title: \"tailwind-styled-v4 DevTools (Ctrl+Shift+D)\",\r\n },\r\n \"🎨\"\r\n )\r\n }\r\n\r\n const PANELS: Array<{ id: Panel; label: string; icon: string }> = [\r\n { id: \"inspector\", label: \"Inspector\", icon: \"🔍\" },\r\n { id: \"state\", label: \"State\", icon: \"⚡\" },\r\n { id: \"container\", label: \"Container\", icon: \"📦\" },\r\n { id: \"tokens\", label: \"Tokens\", icon: \"🎨\" },\r\n { id: \"analyzer\", label: \"Analyzer\", icon: \"📊\" },\r\n { id: \"trace\", label: \"Trace\", icon: \"🔬\" },\r\n ]\r\n\r\n return React.createElement(\r\n \"div\",\r\n { style: S.root },\r\n\r\n // ── Element highlight (inspector only) ──────────────────────────────\r\n isInspecting &&\r\n state.inspected &&\r\n React.createElement(\"div\", {\r\n style: {\r\n ...S.highlight,\r\n top: state.inspected.rect.top + window.scrollY,\r\n left: state.inspected.rect.left + window.scrollX,\r\n width: state.inspected.rect.width,\r\n height: state.inspected.rect.height,\r\n },\r\n }),\r\n\r\n // ── Component name label ────────────────────────────────────────────\r\n isInspecting &&\r\n state.inspected &&\r\n React.createElement(\r\n \"div\",\r\n {\r\n style: {\r\n position: \"absolute\" as const,\r\n top: state.inspected.rect.top + window.scrollY - 22,\r\n left: state.inspected.rect.left + window.scrollX,\r\n background: \"#1e3a5f\",\r\n color: \"#93c5fd\",\r\n fontSize: \"11px\",\r\n padding: \"2px 6px\",\r\n borderRadius: \"3px 3px 0 0\",\r\n pointerEvents: \"none\" as const,\r\n zIndex: 2147483646,\r\n fontFamily: \"monospace\",\r\n },\r\n },\r\n state.inspected.componentName\r\n ),\r\n\r\n // ── Main DevTools panel ─────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n {\r\n ref: overlayRef,\r\n style:\r\n state.panel === \"inspector\" && state.inspected\r\n ? {\r\n ...S.panel,\r\n top: Math.min(state.position.y + 16, window.innerHeight - 460),\r\n left: Math.min(state.position.x + 16, window.innerWidth - 320),\r\n }\r\n : {\r\n ...S.panel,\r\n top: \"auto\",\r\n bottom: \"40px\",\r\n right: \"12px\",\r\n left: \"auto\",\r\n },\r\n },\r\n\r\n // Header\r\n React.createElement(\r\n \"div\",\r\n { style: S.header },\r\n React.createElement(\r\n \"span\",\r\n { style: S.componentName },\r\n state.inspected && state.panel === \"inspector\"\r\n ? state.inspected.componentName\r\n : \"tailwind-styled-v4\"\r\n ),\r\n React.createElement(\r\n \"div\",\r\n { style: S.headerActions },\r\n state.pinned && React.createElement(\"span\", { style: S.pinBadge }, \"📌\"),\r\n React.createElement(\r\n \"button\",\r\n {\r\n style: S.closeBtn,\r\n onClick: () =>\r\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null })),\r\n },\r\n \"✕\"\r\n )\r\n )\r\n ),\r\n\r\n // Tab bar\r\n React.createElement(\r\n \"div\",\r\n { style: S.tabBar },\r\n PANELS.map((p) =>\r\n React.createElement(\r\n \"button\",\r\n {\r\n key: p.id,\r\n style: {\r\n ...S.tab,\r\n background: state.panel === p.id ? \"#18181b\" : \"none\",\r\n color: state.panel === p.id ? \"#e4e4e7\" : \"#52525b\",\r\n borderBottom: state.panel === p.id ? \"2px solid #3b82f6\" : \"2px solid transparent\",\r\n },\r\n onClick: () => setState((s) => ({ ...s, panel: p.id })),\r\n title: `${p.label} (${PANELS.findIndex((x) => x.id === p.id) + 1})`,\r\n },\r\n `${p.icon} ${p.label}`\r\n )\r\n )\r\n ),\r\n\r\n // Panel content\r\n state.panel === \"inspector\" &&\r\n React.createElement(InspectorPanel, {\r\n inspected: state.inspected,\r\n position: state.position,\r\n pinned: state.pinned,\r\n }),\r\n state.panel === \"state\" && React.createElement(StatePanel, null),\r\n state.panel === \"container\" && React.createElement(ContainerPanel, null),\r\n state.panel === \"tokens\" && React.createElement(TokensPanel, null),\r\n state.panel === \"analyzer\" && React.createElement(AnalyzerPanel, null),\r\n state.panel === \"trace\" && React.createElement(TracePanel, null)\r\n ),\r\n\r\n // ── Status bar ──────────────────────────────────────────────────────\r\n React.createElement(\r\n \"div\",\r\n { style: S.statusBar },\r\n React.createElement(\"span\", null, \"🎨 tailwind-styled-v4 DevTools\"),\r\n React.createElement(\r\n \"span\",\r\n { style: { opacity: 0.6, fontSize: \"10px\" } },\r\n state.pinned\r\n ? \"Click to unpin\"\r\n : isInspecting\r\n ? \"Hover to inspect · Click to pin · 1-6 switch panel · Esc close\"\r\n : \"Ctrl+Shift+D close · 1-6 switch panel\"\r\n )\r\n )\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Styles\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst S = {\r\n root: {\r\n position: \"fixed\" as const,\r\n inset: 0,\r\n zIndex: 2147483647,\r\n pointerEvents: \"none\" as const,\r\n fontFamily: \"ui-monospace, 'JetBrains Mono', monospace\",\r\n fontSize: \"12px\",\r\n },\r\n highlight: {\r\n position: \"absolute\" as const,\r\n borderRadius: \"3px\",\r\n outline: \"2px solid #3b82f6\",\r\n outlineOffset: \"1px\",\r\n background: \"rgba(59,130,246,0.08)\",\r\n pointerEvents: \"none\" as const,\r\n transition: \"all 0.1s ease\",\r\n zIndex: 2147483646,\r\n },\r\n panel: {\r\n position: \"fixed\" as const,\r\n width: 320,\r\n maxHeight: 480,\r\n background: \"#0f0f0f\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"10px\",\r\n boxShadow: \"0 8px 32px rgba(0,0,0,0.8)\",\r\n pointerEvents: \"all\" as const,\r\n zIndex: 2147483647,\r\n userSelect: \"text\" as const,\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n },\r\n header: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n padding: \"8px 12px 6px\",\r\n borderBottom: \"1px solid #1f1f1f\",\r\n flexShrink: 0,\r\n },\r\n tabBar: {\r\n display: \"flex\",\r\n borderBottom: \"1px solid #18181b\",\r\n flexShrink: 0,\r\n overflowX: \"auto\" as const,\r\n },\r\n tab: {\r\n background: \"none\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: \"10px\",\r\n padding: \"5px 8px\",\r\n whiteSpace: \"nowrap\" as const,\r\n fontFamily: \"inherit\",\r\n transition: \"color 0.1s\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n scrollArea: {\r\n overflowY: \"auto\" as const,\r\n flex: 1,\r\n },\r\n emptyPanel: {\r\n padding: \"24px 12px\",\r\n color: \"#71717a\",\r\n fontSize: \"12px\",\r\n textAlign: \"center\" as const,\r\n lineHeight: 1.6,\r\n },\r\n componentName: {\r\n color: \"#60a5fa\",\r\n fontWeight: \"bold\" as const,\r\n fontSize: \"13px\",\r\n },\r\n headerActions: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n },\r\n pinBadge: { color: \"#fbbf24\", fontSize: \"10px\" },\r\n closeBtn: {\r\n background: \"none\",\r\n border: \"none\",\r\n color: \"#71717a\",\r\n cursor: \"pointer\",\r\n fontSize: \"14px\",\r\n lineHeight: 1,\r\n padding: \"2px 4px\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n section: {\r\n padding: \"8px 12px\",\r\n borderBottom: \"1px solid #18181b\",\r\n },\r\n sectionTitle: {\r\n color: \"#52525b\",\r\n fontSize: \"10px\",\r\n textTransform: \"uppercase\" as const,\r\n letterSpacing: \"0.08em\",\r\n marginBottom: \"6px\",\r\n },\r\n row: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n marginBottom: \"3px\",\r\n },\r\n varKey: { color: \"#a1a1aa\" },\r\n varValue: { color: \"#34d399\", fontWeight: \"bold\" as const },\r\n classGrid: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\" as const,\r\n gap: \"4px\",\r\n },\r\n classChip: {\r\n background: \"#18181b\",\r\n border: \"1px solid #27272a\",\r\n borderRadius: \"4px\",\r\n padding: \"2px 6px\",\r\n color: \"#e4e4e7\",\r\n cursor: \"default\",\r\n fontSize: \"11px\",\r\n },\r\n copyBtn: {\r\n display: \"block\",\r\n width: \"100%\",\r\n background: \"none\",\r\n border: \"none\",\r\n borderTop: \"1px solid #18181b\",\r\n color: \"#52525b\",\r\n cursor: \"pointer\",\r\n padding: \"8px 12px\",\r\n textAlign: \"left\" as const,\r\n fontSize: \"11px\",\r\n pointerEvents: \"all\" as const,\r\n fontFamily: \"inherit\",\r\n },\r\n statusBar: {\r\n position: \"fixed\" as const,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n background: \"#1e3a5f\",\r\n color: \"#93c5fd\",\r\n fontSize: \"11px\",\r\n padding: \"4px 12px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n pointerEvents: \"all\" as const,\r\n zIndex: 2147483647,\r\n },\r\n toggleBtn: {\r\n position: \"fixed\" as const,\r\n bottom: 12,\r\n right: 12,\r\n width: 36,\r\n height: 36,\r\n borderRadius: \"50%\",\r\n background: \"#1e3a5f\",\r\n border: \"1px solid #3b82f6\",\r\n color: \"white\",\r\n cursor: \"pointer\",\r\n fontSize: \"16px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n zIndex: 2147483647,\r\n boxShadow: \"0 2px 8px rgba(0,0,0,0.4)\",\r\n pointerEvents: \"all\" as const,\r\n },\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Provider\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function DevToolsProvider(): React.ReactElement | null {\r\n if (process.env.NODE_ENV === \"production\") return null\r\n return React.createElement(TwDevTools)\r\n}\r\n\r\n// Export shared trace utilities for reuse across CLI, dashboard, and devtools\r\nexport type { TraceSnapshot, TraceSummary } from \"@tailwind-styled/shared\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n getPipelinePercentages,\r\n}\r\n\r\n// ── Class Inspector — reusable surface (execution-log requirement) ──────────\r\nexport {\r\n fetchClassInspection,\r\n formatClassInspectionCli,\r\n formatClassInspectionJson,\r\n type ClassInspectResult,\r\n type InspectorFetchOptions,\r\n} from \"./classInspector\"\r\n"]}