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