tailwind-styled-v4 5.0.39 → 5.0.411

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/analyzer.js +38 -13
  2. package/dist/analyzer.js.map +1 -1
  3. package/dist/analyzer.mjs +104 -72
  4. package/dist/analyzer.mjs.map +1 -1
  5. package/dist/animate.js +33 -7
  6. package/dist/animate.js.map +1 -1
  7. package/dist/animate.mjs +55 -22
  8. package/dist/animate.mjs.map +1 -1
  9. package/dist/atomic.js +39 -10
  10. package/dist/atomic.js.map +1 -1
  11. package/dist/atomic.mjs +56 -23
  12. package/dist/atomic.mjs.map +1 -1
  13. package/dist/cli.js +151 -39
  14. package/dist/cli.js.map +1 -1
  15. package/dist/cli.mjs +321 -203
  16. package/dist/cli.mjs.map +1 -1
  17. package/dist/compiler.js +57 -16
  18. package/dist/compiler.js.map +1 -1
  19. package/dist/compiler.mjs +71 -28
  20. package/dist/compiler.mjs.map +1 -1
  21. package/dist/dashboard.js +0 -1
  22. package/dist/dashboard.js.map +1 -1
  23. package/dist/devtools.js +16 -2
  24. package/dist/devtools.js.map +1 -1
  25. package/dist/devtools.mjs +21 -2
  26. package/dist/devtools.mjs.map +1 -1
  27. package/dist/engine.js +140 -56
  28. package/dist/engine.js.map +1 -1
  29. package/dist/engine.mjs +238 -148
  30. package/dist/engine.mjs.map +1 -1
  31. package/dist/index.js +50 -9
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +74 -29
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/next.js +97 -41
  36. package/dist/next.js.map +1 -1
  37. package/dist/next.mjs +177 -115
  38. package/dist/next.mjs.map +1 -1
  39. package/dist/plugin-api.js +0 -1
  40. package/dist/plugin-api.js.map +1 -1
  41. package/dist/plugin-registry.js +5 -2
  42. package/dist/plugin-registry.js.map +1 -1
  43. package/dist/plugin-registry.mjs +9 -2
  44. package/dist/plugin-registry.mjs.map +1 -1
  45. package/dist/plugin.js +0 -1
  46. package/dist/plugin.js.map +1 -1
  47. package/dist/preset.js +0 -1
  48. package/dist/preset.js.map +1 -1
  49. package/dist/rspack.js +22 -8
  50. package/dist/rspack.js.map +1 -1
  51. package/dist/rspack.mjs +39 -18
  52. package/dist/rspack.mjs.map +1 -1
  53. package/dist/runtime-css.js +0 -1
  54. package/dist/runtime-css.js.map +1 -1
  55. package/dist/runtime.js +0 -1
  56. package/dist/runtime.js.map +1 -1
  57. package/dist/scanner.js +25 -9
  58. package/dist/scanner.js.map +1 -1
  59. package/dist/scanner.mjs +84 -61
  60. package/dist/scanner.mjs.map +1 -1
  61. package/dist/shared.js +91 -37
  62. package/dist/shared.js.map +1 -1
  63. package/dist/shared.mjs +122 -64
  64. package/dist/shared.mjs.map +1 -1
  65. package/dist/storybook-addon.js +0 -1
  66. package/dist/storybook-addon.js.map +1 -1
  67. package/dist/svelte.js +40 -9
  68. package/dist/svelte.js.map +1 -1
  69. package/dist/svelte.mjs +57 -28
  70. package/dist/svelte.mjs.map +1 -1
  71. package/dist/syntax.js +6 -3
  72. package/dist/syntax.js.map +1 -1
  73. package/dist/syntax.mjs +30 -23
  74. package/dist/syntax.mjs.map +1 -1
  75. package/dist/testing.js +0 -1
  76. package/dist/testing.js.map +1 -1
  77. package/dist/theme.js +21 -4
  78. package/dist/theme.js.map +1 -1
  79. package/dist/theme.mjs +41 -17
  80. package/dist/theme.mjs.map +1 -1
  81. package/dist/turbopackLoader.js +58 -16
  82. package/dist/turbopackLoader.js.map +1 -1
  83. package/dist/turbopackLoader.mjs +89 -45
  84. package/dist/turbopackLoader.mjs.map +1 -1
  85. package/dist/tw.js +153 -39
  86. package/dist/tw.js.map +1 -1
  87. package/dist/tw.mjs +321 -203
  88. package/dist/tw.mjs.map +1 -1
  89. package/dist/vite.js +131 -54
  90. package/dist/vite.js.map +1 -1
  91. package/dist/vite.mjs +226 -143
  92. package/dist/vite.mjs.map +1 -1
  93. package/dist/vue.js +40 -9
  94. package/dist/vue.js.map +1 -1
  95. package/dist/vue.mjs +57 -28
  96. package/dist/vue.mjs.map +1 -1
  97. package/dist/webpackLoader.js +40 -10
  98. package/dist/webpackLoader.js.map +1 -1
  99. package/dist/webpackLoader.mjs +59 -27
  100. package/dist/webpackLoader.mjs.map +1 -1
  101. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/index.ts","../packages/presentation/rspack/src/index.ts","../packages/presentation/rspack/src/schemas.ts"],"sourcesContent":["/**\n * ESM-safe runtime helpers untuk monorepo.\n *\n * Menggantikan pola fragile seperti:\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\n * - `__filename` → gunakan `getFilename(import.meta.url)`\n *\n * Semua helper ini bekerja di ESM dan CJS.\n *\n * @module @tailwind-styled/shared/esmHelpers\n */\n\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\n\n// Safe check for require availability - works in both CJS and ESM\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\n if (isBrowser) return null\n if (nodeModuleRef !== null) return nodeModuleRef\n try {\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\n nodeModuleRef = test\n return test\n } catch {\n nodeModuleRef = null\n return null\n }\n}\n\nlet _nodePath: typeof import(\"node:path\") | null = null\nlet _nodeUrl: typeof import(\"node:url\") | null = null\nlet _nodeFs: typeof import(\"node:fs\") | null = null\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\nlet _nodeOs: typeof import(\"node:os\") | null = null\n\n/**\n * Get current file URL in a way that works in both ESM and CJS.\n * In ESM: uses import.meta.url\n * In CJS: uses __filename converted to file URL\n */\nfunction getCurrentFileUrl(): string {\n // In CJS builds, import.meta.url is replaced by esbuild with __importMetaUrl\n // which is set via the banner polyfill. In ESM it's the real URL.\n if (import.meta.url) {\n return import.meta.url\n }\n // Fallback: __filename is available in bare CJS (not bundled)\n if (typeof __filename !== \"undefined\") {\n return `file://${__filename.replace(/\\\\/g, \"/\")}`\n }\n return \"file://unknown\"\n}\n\nfunction getNodePath(): typeof import(\"node:path\") {\n if (isBrowser) throw new Error(\"node:path not available in browser\")\n if (!_nodePath) {\n if (typeof require === \"function\") {\n _nodePath = require(\"node:path\") as typeof import(\"node:path\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodePath = nodeRequire.createRequire(getCurrentFileUrl())(\"node:path\") as typeof import(\"node:path\")\n }\n }\n return _nodePath!\n}\nfunction getNodeUrl(): typeof import(\"node:url\") {\n if (isBrowser) throw new Error(\"node:url not available in browser\")\n if (!_nodeUrl) {\n if (typeof require === \"function\") {\n _nodeUrl = require(\"node:url\") as typeof import(\"node:url\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeUrl = nodeRequire.createRequire(getCurrentFileUrl())(\"node:url\") as typeof import(\"node:url\")\n }\n }\n return _nodeUrl!\n}\nfunction getNodeFs(): typeof import(\"node:fs\") {\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\n if (!_nodeFs) {\n if (typeof require === \"function\") {\n _nodeFs = require(\"node:fs\") as typeof import(\"node:fs\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeFs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:fs\") as typeof import(\"node:fs\")\n }\n }\n return _nodeFs!\n}\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\n if (!_nodeCrypto) {\n if (typeof require === \"function\") {\n _nodeCrypto = require(\"node:crypto\") as typeof import(\"node:crypto\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeCrypto = nodeRequire.createRequire(getCurrentFileUrl())(\"node:crypto\") as typeof import(\"node:crypto\")\n }\n }\n return _nodeCrypto!\n}\nfunction getNodeOs(): typeof import(\"node:os\") {\n if (isBrowser) throw new Error(\"node:os not available in browser\")\n if (!_nodeOs) {\n if (typeof require === \"function\") {\n _nodeOs = require(\"node:os\") as typeof import(\"node:os\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeOs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:os\") as typeof import(\"node:os\")\n }\n }\n return _nodeOs!\n}\n\n/**\n * Buat `require()` function yang relative terhadap sebuah ESM module.\n *\n * @example\n * const req = createEsmRequire(import.meta.url)\n * const mod = req(\"some-pkg\")\n */\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\n if (isBrowser) throw new Error(\"require not available in browser\")\n // CJS: require is already available globally\n if (typeof require === \"function\") return require\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n return nodeRequire.createRequire(importMetaUrl)\n}\n\n/**\n * Dapat `__dirname` dari `import.meta.url`.\n *\n * @example\n * const dir = getDirname(import.meta.url)\n */\nexport function getDirname(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __dirname is directly available\n if (typeof __dirname !== \"undefined\") return __dirname\n const nodePath = getNodePath()\n const nodeUrl = getNodeUrl()\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\n}\n\n/**\n * Dapat `__filename` dari `import.meta.url`.\n */\nexport function getFilename(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __filename is directly available\n if (typeof __filename !== \"undefined\") return __filename\n return getNodeUrl().fileURLToPath(importMetaUrl)\n}\n\n/**\n * Resolve path dari root monorepo (bukan CWD).\n */\nexport function resolveFromRoot(...segments: string[]): string {\n if (isBrowser) return segments.join(\"/\")\n\n const nodePath = getNodePath()\n const nodeFs = getNodeFs()\n\n // Use __dirname in CJS, or getDirname with current file URL in ESM\n let dir = typeof __dirname !== \"undefined\"\n ? __dirname\n : getDirname(getCurrentFileUrl())\n\n for (let i = 0; i < 10; i++) {\n const pkgPath = nodePath.join(dir, \"package.json\")\n try {\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\n if (pkg.workspaces) {\n return nodePath.resolve(dir, ...segments)\n }\n } catch { /* intentionally silent */ }\n dir = nodePath.dirname(dir)\n }\n return nodePath.resolve(process.cwd(), ...segments)\n}\n\n/**\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\n */\nexport function tryRequire<T = unknown>(\n moduleName: string,\n importMetaUrl: string\n): T | null {\n if (isBrowser) return null\n try {\n return createEsmRequire(importMetaUrl)(moduleName) as T\n } catch { /* intentionally silent — optional dep */ }\n return null\n}\n\n/**\n * Resolve .node binary path yang cross-platform dan ESM-safe.\n */\nexport function resolveNativeNodePath(\n importMetaUrl: string,\n ...relativeSegments: string[]\n): string {\n if (isBrowser) return relativeSegments.join(\"/\")\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\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\"","/**\n * tailwind-styled-v4 - Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { getDirname as getEsmDirname } from \"@tailwind-styled/shared\"\n\nimport { parseRspackPluginOptions } from \"./schemas\"\n\nfunction getDirname(): string {\n if (typeof __dirname !== \"undefined\") {\n return __dirname\n }\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return getEsmDirname(import.meta.url)\n }\n return process.cwd()\n}\n\nfunction resolveLoaderPath(basename: string): string {\n const runtimeDir = getDirname()\n const preferredExtensions =\n typeof __dirname !== \"undefined\" && __dirname.length > 0 ? [\".cjs\", \".js\"] : [\".js\", \".cjs\"]\n\n for (const ext of preferredExtensions) {\n const candidate = path.resolve(runtimeDir, `${basename}${ext}`)\n if (fs.existsSync(candidate)) return candidate\n }\n\n return path.resolve(runtimeDir, `${basename}.js`)\n}\n\ninterface RspackRule {\n _tailwindStyledRspackMarker?: boolean\n test?: RegExp\n exclude?: RegExp\n use?: Array<{\n loader: string\n options: {\n mode: \"zero-runtime\"\n addDataAttr: boolean\n preserveImports: boolean\n safelistPath?: string\n }\n }>\n}\n\ninterface RspackCompiler {\n options: {\n mode?: string\n module?: {\n rules?: RspackRule[]\n }\n }\n}\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n /**\n * Path ke safelist CSS file.\n * `_tw-state-static.css` ditulis di direktori yang sama.\n * Default: `<cwd>/__tw_safelist.css`\n */\n safelistPath?: string\n}\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = parseRspackPluginOptions(opts)\n }\n\n apply(compiler: RspackCompiler): void {\n const isDev = compiler.options.mode !== \"production\"\n const loaderPath = resolveLoaderPath(\"loader\")\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some(\n (rule) =>\n typeof rule === \"object\" && rule !== null && rule._tailwindStyledRspackMarker === true\n )\n\n if (alreadyRegistered) return\n\n const safelistPath =\n this.opts.safelistPath ?? path.join(process.cwd(), \"__tw_safelist.css\")\n\n // Tulis placeholder agar @import di CSS entry tidak error saat cold start\n const stateStaticPath = path.join(path.dirname(safelistPath), \"_tw-state-static.css\")\n if (!fs.existsSync(stateStaticPath)) {\n try {\n fs.mkdirSync(path.dirname(stateStaticPath), { recursive: true })\n fs.writeFileSync(\n stateStaticPath,\n `/* _tw-state-static.css — Auto-generated by tailwind-styled-v4. DO NOT EDIT.\\n` +\n ` * Import di CSS entry: @import \"./_tw-state-static.css\";\\n` +\n ` */\\n`,\n \"utf-8\"\n )\n } catch { /* non-fatal */ }\n }\n\n const rule: RspackRule = {\n _tailwindStyledRspackMarker: true,\n test: this.opts.include ?? /\\.[jt]sx?$/,\n exclude: this.opts.exclude ?? /node_modules/,\n use: [\n {\n loader: loaderPath,\n options: {\n mode: \"zero-runtime\",\n addDataAttr: this.opts.addDataAttr ?? isDev,\n preserveImports: true,\n safelistPath,\n },\n },\n ],\n }\n\n compiler.options.module = {\n ...(compiler.options.module ?? {}),\n rules: [rule, ...existing],\n }\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n\nexport {\n parseRspackPluginOptions,\n type RspackPluginOptionsInput,\n RspackPluginOptionsSchema,\n} from \"./schemas\"\n","import { z } from \"zod\"\nimport { TwError } from \"@tailwind-styled/shared\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n path.length > 0\n ? path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n : \"<root>\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = formatIssuePath(issue.path)\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n const details = formatIssues(parsed.error)\n throw new TwError(\n \"validation\",\n \"SCHEMA_VALIDATION_FAILED\",\n details ? `${label}: ${details}` : label,\n parsed.error\n )\n}\n\nexport const RspackPluginOptionsSchema = z.object({\n include: z.instanceof(RegExp).optional(),\n exclude: z.instanceof(RegExp).optional(),\n addDataAttr: z.boolean().optional(),\n analyze: z.boolean().optional(),\n cssEntry: z.string().optional(),\n /** Path ke safelist CSS file. Default: <cwd>/__tw_safelist.css */\n safelistPath: z.string().optional(),\n})\n\nexport type RspackPluginOptionsInput = z.infer<typeof RspackPluginOptionsSchema>\n\nexport const parseRspackPluginOptions = (options: unknown) =>\n parseWithSchema(RspackPluginOptionsSchema, options ?? {}, \"rspack plugin options are invalid\")\n"],"mappings":"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","names":["path","fs","path","formatIssuePath","path","getDirname","path","fs","rule"]}
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/index.ts","../src/umbrella/rspack.ts","../packages/presentation/rspack/src/index.ts","../packages/presentation/rspack/src/schemas.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 * ESM-safe runtime helpers untuk monorepo.\n *\n * Menggantikan pola fragile seperti:\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\n * - `__filename` → gunakan `getFilename(import.meta.url)`\n *\n * Semua helper ini bekerja di ESM dan CJS.\n *\n * @module @tailwind-styled/shared/esmHelpers\n */\n\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\n\n// Safe check for require availability - works in both CJS and ESM\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\n if (isBrowser) return null\n if (nodeModuleRef !== null) return nodeModuleRef\n try {\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\n nodeModuleRef = test\n return test\n } catch {\n nodeModuleRef = null\n return null\n }\n}\n\nlet _nodePath: typeof import(\"node:path\") | null = null\nlet _nodeUrl: typeof import(\"node:url\") | null = null\nlet _nodeFs: typeof import(\"node:fs\") | null = null\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\nlet _nodeOs: typeof import(\"node:os\") | null = null\n\n/**\n * Get current file URL in a way that works in both ESM and CJS.\n * In ESM: uses import.meta.url\n * In CJS: uses __filename converted to file URL\n */\nfunction getCurrentFileUrl(): string {\n // In CJS builds, import.meta.url is replaced by esbuild with __importMetaUrl\n // which is set via the banner polyfill. In ESM it's the real URL.\n if (import.meta.url) {\n return import.meta.url\n }\n // Fallback: __filename is available in bare CJS (not bundled)\n if (typeof __filename !== \"undefined\") {\n return `file://${__filename.replace(/\\\\/g, \"/\")}`\n }\n return \"file://unknown\"\n}\n\nfunction getNodePath(): typeof import(\"node:path\") {\n if (isBrowser) throw new Error(\"node:path not available in browser\")\n if (!_nodePath) {\n if (typeof require === \"function\") {\n _nodePath = require(\"node:path\") as typeof import(\"node:path\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodePath = nodeRequire.createRequire(getCurrentFileUrl())(\"node:path\") as typeof import(\"node:path\")\n }\n }\n return _nodePath!\n}\nfunction getNodeUrl(): typeof import(\"node:url\") {\n if (isBrowser) throw new Error(\"node:url not available in browser\")\n if (!_nodeUrl) {\n if (typeof require === \"function\") {\n _nodeUrl = require(\"node:url\") as typeof import(\"node:url\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeUrl = nodeRequire.createRequire(getCurrentFileUrl())(\"node:url\") as typeof import(\"node:url\")\n }\n }\n return _nodeUrl!\n}\nfunction getNodeFs(): typeof import(\"node:fs\") {\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\n if (!_nodeFs) {\n if (typeof require === \"function\") {\n _nodeFs = require(\"node:fs\") as typeof import(\"node:fs\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeFs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:fs\") as typeof import(\"node:fs\")\n }\n }\n return _nodeFs!\n}\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\n if (!_nodeCrypto) {\n if (typeof require === \"function\") {\n _nodeCrypto = require(\"node:crypto\") as typeof import(\"node:crypto\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeCrypto = nodeRequire.createRequire(getCurrentFileUrl())(\"node:crypto\") as typeof import(\"node:crypto\")\n }\n }\n return _nodeCrypto!\n}\nfunction getNodeOs(): typeof import(\"node:os\") {\n if (isBrowser) throw new Error(\"node:os not available in browser\")\n if (!_nodeOs) {\n if (typeof require === \"function\") {\n _nodeOs = require(\"node:os\") as typeof import(\"node:os\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeOs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:os\") as typeof import(\"node:os\")\n }\n }\n return _nodeOs!\n}\n\n/**\n * Buat `require()` function yang relative terhadap sebuah ESM module.\n *\n * @example\n * const req = createEsmRequire(import.meta.url)\n * const mod = req(\"some-pkg\")\n */\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\n if (isBrowser) throw new Error(\"require not available in browser\")\n // CJS: require is already available globally\n if (typeof require === \"function\") return require\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n return nodeRequire.createRequire(importMetaUrl)\n}\n\n/**\n * Dapat `__dirname` dari `import.meta.url`.\n *\n * @example\n * const dir = getDirname(import.meta.url)\n */\nexport function getDirname(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __dirname is directly available\n if (typeof __dirname !== \"undefined\") return __dirname\n const nodePath = getNodePath()\n const nodeUrl = getNodeUrl()\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\n}\n\n/**\n * Dapat `__filename` dari `import.meta.url`.\n */\nexport function getFilename(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __filename is directly available\n if (typeof __filename !== \"undefined\") return __filename\n return getNodeUrl().fileURLToPath(importMetaUrl)\n}\n\n/**\n * Resolve path dari root monorepo (bukan CWD).\n */\nexport function resolveFromRoot(...segments: string[]): string {\n if (isBrowser) return segments.join(\"/\")\n\n const nodePath = getNodePath()\n const nodeFs = getNodeFs()\n\n // Use __dirname in CJS, or getDirname with current file URL in ESM\n let dir = typeof __dirname !== \"undefined\"\n ? __dirname\n : getDirname(getCurrentFileUrl())\n\n for (let i = 0; i < 10; i++) {\n const pkgPath = nodePath.join(dir, \"package.json\")\n try {\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\n if (pkg.workspaces) {\n return nodePath.resolve(dir, ...segments)\n }\n } catch { /* intentionally silent */ }\n dir = nodePath.dirname(dir)\n }\n return nodePath.resolve(process.cwd(), ...segments)\n}\n\n/**\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\n */\nexport function tryRequire<T = unknown>(\n moduleName: string,\n importMetaUrl: string\n): T | null {\n if (isBrowser) return null\n try {\n return createEsmRequire(importMetaUrl)(moduleName) as T\n } catch { /* intentionally silent — optional dep */ }\n return null\n}\n\n/**\n * Resolve .node binary path yang cross-platform dan ESM-safe.\n */\nexport function resolveNativeNodePath(\n importMetaUrl: string,\n ...relativeSegments: string[]\n): string {\n if (isBrowser) return relativeSegments.join(\"/\")\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\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/rspack\"\n","/**\n * tailwind-styled-v4 - Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { getDirname as getEsmDirname } from \"@tailwind-styled/shared\"\n\nimport { parseRspackPluginOptions } from \"./schemas\"\n\nfunction getDirname(): string {\n if (typeof __dirname !== \"undefined\") {\n return __dirname\n }\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return getEsmDirname(import.meta.url)\n }\n return process.cwd()\n}\n\nfunction resolveLoaderPath(basename: string): string {\n const runtimeDir = getDirname()\n const preferredExtensions =\n typeof __dirname !== \"undefined\" && __dirname.length > 0 ? [\".cjs\", \".js\"] : [\".js\", \".cjs\"]\n\n for (const ext of preferredExtensions) {\n const candidate = path.resolve(runtimeDir, `${basename}${ext}`)\n if (fs.existsSync(candidate)) return candidate\n }\n\n return path.resolve(runtimeDir, `${basename}.js`)\n}\n\ninterface RspackRule {\n _tailwindStyledRspackMarker?: boolean\n test?: RegExp\n exclude?: RegExp\n use?: Array<{\n loader: string\n options: {\n mode: \"zero-runtime\"\n addDataAttr: boolean\n preserveImports: boolean\n safelistPath?: string\n }\n }>\n}\n\ninterface RspackCompiler {\n options: {\n mode?: string\n module?: {\n rules?: RspackRule[]\n }\n }\n}\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n /**\n * Path ke safelist CSS file.\n * `_tw-state-static.css` ditulis di direktori yang sama.\n * Default: `<cwd>/__tw_safelist.css`\n */\n safelistPath?: string\n}\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = parseRspackPluginOptions(opts)\n }\n\n apply(compiler: RspackCompiler): void {\n const isDev = compiler.options.mode !== \"production\"\n const loaderPath = resolveLoaderPath(\"loader\")\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some(\n (rule) =>\n typeof rule === \"object\" && rule !== null && rule._tailwindStyledRspackMarker === true\n )\n\n if (alreadyRegistered) return\n\n const safelistPath =\n this.opts.safelistPath ?? path.join(process.cwd(), \"__tw_safelist.css\")\n\n // Tulis placeholder agar @import di CSS entry tidak error saat cold start\n const stateStaticPath = path.join(path.dirname(safelistPath), \"_tw-state-static.css\")\n if (!fs.existsSync(stateStaticPath)) {\n try {\n fs.mkdirSync(path.dirname(stateStaticPath), { recursive: true })\n fs.writeFileSync(\n stateStaticPath,\n `/* _tw-state-static.css — Auto-generated by tailwind-styled-v4. DO NOT EDIT.\\n` +\n ` * Import di CSS entry: @import \"./_tw-state-static.css\";\\n` +\n ` */\\n`,\n \"utf-8\"\n )\n } catch { /* non-fatal */ }\n }\n\n const rule: RspackRule = {\n _tailwindStyledRspackMarker: true,\n test: this.opts.include ?? /\\.[jt]sx?$/,\n exclude: this.opts.exclude ?? /node_modules/,\n use: [\n {\n loader: loaderPath,\n options: {\n mode: \"zero-runtime\",\n addDataAttr: this.opts.addDataAttr ?? isDev,\n preserveImports: true,\n safelistPath,\n },\n },\n ],\n }\n\n compiler.options.module = {\n ...(compiler.options.module ?? {}),\n rules: [rule, ...existing],\n }\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n\nexport {\n parseRspackPluginOptions,\n type RspackPluginOptionsInput,\n RspackPluginOptionsSchema,\n} from \"./schemas\"\n","import { z } from \"zod\"\nimport { TwError } from \"@tailwind-styled/shared\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n path.length > 0\n ? path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n : \"<root>\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = formatIssuePath(issue.path)\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n const details = formatIssues(parsed.error)\n throw new TwError(\n \"validation\",\n \"SCHEMA_VALIDATION_FAILED\",\n details ? `${label}: ${details}` : label,\n parsed.error\n )\n}\n\nexport const RspackPluginOptionsSchema = z.object({\n include: z.instanceof(RegExp).optional(),\n exclude: z.instanceof(RegExp).optional(),\n addDataAttr: z.boolean().optional(),\n analyze: z.boolean().optional(),\n cssEntry: z.string().optional(),\n /** Path ke safelist CSS file. Default: <cwd>/__tw_safelist.css */\n safelistPath: z.string().optional(),\n})\n\nexport type RspackPluginOptionsInput = z.infer<typeof RspackPluginOptionsSchema>\n\nexport const parseRspackPluginOptions = (options: unknown) =>\n parseWithSchema(RspackPluginOptionsSchema, options ?? {}, \"rspack plugin options are invalid\")\n"],"mappings":"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","names":["getDirname","path","fileURLToPath","fs","path","formatIssuePath","path","getDirname","path","fs","rule"]}
@@ -1,4 +1,3 @@
1
- const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
2
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
3
2
  "use strict";
4
3
  var __create = Object.create;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/umbrella/runtime-css.ts","../packages/domain/runtime-css/src/batchedInjector.ts","../packages/domain/runtime-css/src/CssInjector.tsx"],"sourcesContent":["export * from \"@tailwind-styled/runtime-css\"\n","\"use client\"\n\n/**\n * tailwind-styled-v5 — Batched CSS Injector (Client Runtime)\n *\n * Menggantikan pattern inject-per-komponen yang menyebabkan banyak\n * style recalculation saat banyak komponen mount bersamaan.\n *\n * Cara kerja:\n * - Semua CSS rules dari render cycle yang sama dikumpulkan\n * - Satu requestAnimationFrame = satu DOM style update\n * - Deduplication via Set<string> — rule yang sama tidak diinjeksi dua kali\n * - Injection via CSSStyleSheet.insertRule() — TIDAK menghapus rules yang ada\n * - Fallback ke textContent += jika CSSOM API tidak tersedia\n *\n * PENTING — Kenapa insertRule() bukan textContent +=:\n * `el.textContent += css` terlihat additive tapi sebenarnya:\n * 1. Browser baca semua textContent yang ada\n * 2. HAPUS semua rules dari stylesheet\n * 3. Concat string baru\n * 4. Parse ulang dan re-add semua rules\n * Di step 2-3, ada window singkat dimana SEMUA styles hilang → FLICKER.\n *\n * `sheet.insertRule()` benar-benar additive — hanya menambah rule baru\n * tanpa menyentuh rules yang sudah ada. Zero flicker.\n *\n * Usage (internal, dipakai oleh stateEngine dan containerQuery):\n * import { batchedInject, flushBatchedCss } from \"./batchedInjector\"\n *\n * // Queue a rule\n * batchedInject(\".tw-s-abc123[data-active=\\\"true\\\"]{opacity:0.5}\")\n *\n * // Force flush (biasanya tidak perlu — RAF melakukan ini otomatis)\n * flushBatchedCss()\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Singleton state\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** All injected rules (deduplication registry) */\nconst injected = new Set<string>()\n\n/** Pending rules for current RAF batch */\nconst pending: string[] = []\n\n/** RAF handle and style element state */\nconst _state = {\n rafHandle: null as ReturnType<typeof requestAnimationFrame> | null,\n styleEl: null as HTMLStyleElement | null,\n}\n\nfunction getStyleElement(): HTMLStyleElement {\n if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl\n\n _state.styleEl = document.createElement(\"style\")\n _state.styleEl.id = \"__tw-runtime-css\"\n _state.styleEl.setAttribute(\"data-tw-batched\", \"true\")\n // Harus diappend ke DOM sebelum .sheet bisa diakses\n document.head.appendChild(_state.styleEl)\n return _state.styleEl\n}\n\n/**\n * Inject satu CSS rule via CSSStyleSheet.insertRule().\n *\n * Ini benar-benar additive — tidak menyentuh rules yang sudah ada.\n * Fallback ke textContent append jika sheet belum siap (edge case).\n *\n * @internal\n */\nfunction insertRuleToSheet(cssRule: string): void {\n const trimmed = cssRule.trim()\n if (!trimmed) return\n\n const el = getStyleElement()\n const sheet = el.sheet\n\n if (sheet) {\n try {\n // insertRule() di akhir — urutan tidak kritis untuk utility CSS\n sheet.insertRule(trimmed, sheet.cssRules.length)\n return\n } catch {\n // insertRule() bisa throw jika:\n // 1. Rule syntax tidak valid\n // 2. Multi-rule string (insertRule() hanya terima satu rule)\n // Fallback ke textContent append untuk kasus ini.\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[tw] insertRule failed, falling back to textContent append for rule:\", trimmed.slice(0, 80))\n }\n }\n }\n\n // Fallback: textContent append.\n // Lebih jarang terjadi sekarang karena stateEngine sudah loop per-rule,\n // tapi tetap perlu sebagai safety net.\n el.textContent = (el.textContent ?? \"\") + `\\n${trimmed}`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Queue a CSS rule for batched injection.\n * Multiple rules accumulated during one event loop tick are flushed together\n * in one requestAnimationFrame → one style recalculation.\n *\n * Rules diinjeksi via insertRule() — zero flicker, truly additive.\n */\nexport function batchedInject(cssRule: string): void {\n if (typeof window === \"undefined\") return // SSR — no-op\n if (!cssRule || injected.has(cssRule)) return\n\n injected.add(cssRule)\n pending.push(cssRule)\n\n if (_state.rafHandle === null) {\n _state.rafHandle = requestAnimationFrame(flushBatchedCss)\n }\n}\n\n/**\n * Immediately flush all pending CSS rules to the DOM.\n * Called automatically by RAF each frame. Can also be called manually\n * after synchronous component setup where RAF timing is too late.\n *\n * Setiap rule diinjeksi secara individual via insertRule() — tidak ada\n * window dimana existing rules hilang.\n */\nexport function flushBatchedCss(): void {\n _state.rafHandle = null\n\n if (pending.length === 0 || typeof document === \"undefined\") return\n\n // Flush semua rules sekaligus — satu per satu via insertRule()\n // insertRule() atomic per-rule: rule lama tidak pernah dihapus\n const rules = pending.splice(0)\n for (const rule of rules) {\n insertRuleToSheet(rule)\n }\n}\n\n/**\n * Synchronous inject — skips batching.\n * Use for SSR / critical path where RAF is not available.\n *\n * Menggunakan insertRule() — tidak ada flicker meskipun dipanggil\n * di tengah render cycle.\n */\nexport function syncInject(cssRule: string): void {\n if (typeof document === \"undefined\") return\n if (!cssRule || injected.has(cssRule)) return\n\n injected.add(cssRule)\n insertRuleToSheet(cssRule)\n}\n\n/**\n * Check if a rule has already been injected (deduplication check).\n */\nexport function isInjected(cssRule: string): boolean {\n return injected.has(cssRule)\n}\n\n/**\n * Clear all injected rules and remove the style element.\n * Useful for testing / SSR resets. Not for production use.\n */\nexport function resetBatchedCss(): void {\n injected.clear()\n pending.length = 0\n\n if (_state.rafHandle !== null) {\n cancelAnimationFrame(_state.rafHandle)\n _state.rafHandle = null\n }\n\n // Guard: document tidak tersedia di SSR / Node test environment\n if (typeof document !== \"undefined\" && _state.styleEl && document.head.contains(_state.styleEl)) {\n document.head.removeChild(_state.styleEl)\n _state.styleEl = null\n } else {\n _state.styleEl = null\n }\n}\n\n/**\n * Get stats about the current injection state (for devtools).\n */\nexport function getBatchedCssStats(): {\n totalInjected: number\n pendingCount: number\n hasBatchScheduled: boolean\n} {\n return {\n totalInjected: injected.size,\n pendingCount: pending.length,\n hasBatchScheduled: _state.rafHandle !== null,\n }\n}","/**\n * tailwind-styled-v4 — TwCssInjector\n *\n * React Server Component — inject route-specific CSS ke <head>.\n * Zero client JS, no hydration overhead, streaming-friendly.\n *\n * Pipeline:\n * 1. withTailwindStyled webpack plugin emit CSS manifest ke .next/static/css/tw/\n * 2. TwCssInjector baca manifest → inject <style> inline per route\n *\n * Usage:\n * // app/layout.tsx\n * import { TwCssInjector } from \"tailwind-styled-v4/runtime-css\"\n *\n * export default function Layout({ children }) {\n * return (\n * <html>\n * <head><TwCssInjector /></head>\n * <body>{children}</body>\n * </html>\n * )\n * }\n */\n\nimport React from \"react\"\n\ninterface CssInjectorProps {\n /** Route spesifik. Default: auto-detect */\n route?: string\n /** Inject global CSS juga. Default: true */\n includeGlobal?: boolean\n /** Minify inline CSS. Default: true */\n minify?: boolean\n /** CSS directory. Default: .next/static/css/tw */\n cssDir?: string\n}\n\n/**\n * Server Component — inject CSS per route ke <head>.\n * Baca dari manifest yang di-emit oleh TwCssManifestPlugin.\n */\nexport async function TwCssInjector(props: CssInjectorProps = {}): Promise<React.ReactElement> {\n const { route, includeGlobal = true, minify = true, cssDir } = props\n\n // Dynamic import fs — hanya jalan di server\n let fs: typeof import(\"node:fs\") | null = null\n let path: typeof import(\"node:path\") | null = null\n try {\n fs = await import(\"node:fs\")\n path = await import(\"node:path\")\n } catch {\n return React.createElement(React.Fragment, null)\n }\n\n const resolvedDir = cssDir\n ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\")\n\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\")\n\n // Baca manifest\n let manifest: { routes?: Record<string, string> } = {}\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"))\n }\n } catch {\n // Manifest tidak ada — mungkin belum build atau native binding belum ready\n return React.createElement(React.Fragment, null)\n }\n\n const cssChunks: string[] = []\n\n // Global CSS (_global.css)\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"])\n const css = readFile(fs, globalPath)\n if (css) cssChunks.push(css)\n }\n\n // Route-specific CSS\n const targetRoute = route ?? \"/\"\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute])\n const css = readFile(fs, routePath)\n if (css) cssChunks.push(css)\n }\n\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null)\n\n const combined = cssChunks.join(\"\\n\")\n const final = minify ? minifyCss(combined) : combined\n\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\",\n })\n}\n\n/**\n * Hook untuk client components — CSS sudah di-handle TwCssInjector di server.\n */\nexport function useTwClasses(classes: string): string {\n return classes\n}\n\n// Helpers\nfunction readFile(fs: typeof import(\"node:fs\"), filepath: string): string | null {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\")\n } catch {}\n return null\n}\n\nfunction minifyCss(css: string): string {\n return css\n .replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*{\\s*/g, \"{\")\n .replace(/\\s*}\\s*/g, \"}\")\n .replace(/\\s*;\\s*/g, \";\")\n .trim()\n}"],"mappings":"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","names":["React"]}
1
+ {"version":3,"sources":["../src/umbrella/runtime-css.ts","../packages/domain/runtime-css/src/batchedInjector.ts","../packages/domain/runtime-css/src/CssInjector.tsx"],"sourcesContent":["export * from \"@tailwind-styled/runtime-css\"\n","\"use client\"\n\n/**\n * tailwind-styled-v5 — Batched CSS Injector (Client Runtime)\n *\n * Menggantikan pattern inject-per-komponen yang menyebabkan banyak\n * style recalculation saat banyak komponen mount bersamaan.\n *\n * Cara kerja:\n * - Semua CSS rules dari render cycle yang sama dikumpulkan\n * - Satu requestAnimationFrame = satu DOM style update\n * - Deduplication via Set<string> — rule yang sama tidak diinjeksi dua kali\n * - Injection via CSSStyleSheet.insertRule() — TIDAK menghapus rules yang ada\n * - Fallback ke textContent += jika CSSOM API tidak tersedia\n *\n * PENTING — Kenapa insertRule() bukan textContent +=:\n * `el.textContent += css` terlihat additive tapi sebenarnya:\n * 1. Browser baca semua textContent yang ada\n * 2. HAPUS semua rules dari stylesheet\n * 3. Concat string baru\n * 4. Parse ulang dan re-add semua rules\n * Di step 2-3, ada window singkat dimana SEMUA styles hilang → FLICKER.\n *\n * `sheet.insertRule()` benar-benar additive — hanya menambah rule baru\n * tanpa menyentuh rules yang sudah ada. Zero flicker.\n *\n * Usage (internal, dipakai oleh stateEngine dan containerQuery):\n * import { batchedInject, flushBatchedCss } from \"./batchedInjector\"\n *\n * // Queue a rule\n * batchedInject(\".tw-s-abc123[data-active=\\\"true\\\"]{opacity:0.5}\")\n *\n * // Force flush (biasanya tidak perlu — RAF melakukan ini otomatis)\n * flushBatchedCss()\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Singleton state\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** All injected rules (deduplication registry) */\nconst injected = new Set<string>()\n\n/** Pending rules for current RAF batch */\nconst pending: string[] = []\n\n/** RAF handle and style element state */\nconst _state = {\n rafHandle: null as ReturnType<typeof requestAnimationFrame> | null,\n styleEl: null as HTMLStyleElement | null,\n}\n\nfunction getStyleElement(): HTMLStyleElement {\n if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl\n\n _state.styleEl = document.createElement(\"style\")\n _state.styleEl.id = \"__tw-runtime-css\"\n _state.styleEl.setAttribute(\"data-tw-batched\", \"true\")\n // Harus diappend ke DOM sebelum .sheet bisa diakses\n document.head.appendChild(_state.styleEl)\n return _state.styleEl\n}\n\n/**\n * Inject satu CSS rule via CSSStyleSheet.insertRule().\n *\n * Ini benar-benar additive — tidak menyentuh rules yang sudah ada.\n * Fallback ke textContent append jika sheet belum siap (edge case).\n *\n * @internal\n */\nfunction insertRuleToSheet(cssRule: string): void {\n const trimmed = cssRule.trim()\n if (!trimmed) return\n\n const el = getStyleElement()\n const sheet = el.sheet\n\n if (sheet) {\n try {\n // insertRule() di akhir — urutan tidak kritis untuk utility CSS\n sheet.insertRule(trimmed, sheet.cssRules.length)\n return\n } catch {\n // insertRule() bisa throw jika:\n // 1. Rule syntax tidak valid\n // 2. Multi-rule string (insertRule() hanya terima satu rule)\n // Fallback ke textContent append untuk kasus ini.\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[tw] insertRule failed, falling back to textContent append for rule:\", trimmed.slice(0, 80))\n }\n }\n }\n\n // Fallback: textContent append.\n // Lebih jarang terjadi sekarang karena stateEngine sudah loop per-rule,\n // tapi tetap perlu sebagai safety net.\n el.textContent = (el.textContent ?? \"\") + `\\n${trimmed}`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Queue a CSS rule for batched injection.\n * Multiple rules accumulated during one event loop tick are flushed together\n * in one requestAnimationFrame → one style recalculation.\n *\n * Rules diinjeksi via insertRule() — zero flicker, truly additive.\n */\nexport function batchedInject(cssRule: string): void {\n if (typeof window === \"undefined\") return // SSR — no-op\n if (!cssRule || injected.has(cssRule)) return\n\n injected.add(cssRule)\n pending.push(cssRule)\n\n if (_state.rafHandle === null) {\n _state.rafHandle = requestAnimationFrame(flushBatchedCss)\n }\n}\n\n/**\n * Immediately flush all pending CSS rules to the DOM.\n * Called automatically by RAF each frame. Can also be called manually\n * after synchronous component setup where RAF timing is too late.\n *\n * Setiap rule diinjeksi secara individual via insertRule() — tidak ada\n * window dimana existing rules hilang.\n */\nexport function flushBatchedCss(): void {\n _state.rafHandle = null\n\n if (pending.length === 0 || typeof document === \"undefined\") return\n\n // Flush semua rules sekaligus — satu per satu via insertRule()\n // insertRule() atomic per-rule: rule lama tidak pernah dihapus\n const rules = pending.splice(0)\n for (const rule of rules) {\n insertRuleToSheet(rule)\n }\n}\n\n/**\n * Synchronous inject — skips batching.\n * Use for SSR / critical path where RAF is not available.\n *\n * Menggunakan insertRule() — tidak ada flicker meskipun dipanggil\n * di tengah render cycle.\n */\nexport function syncInject(cssRule: string): void {\n if (typeof document === \"undefined\") return\n if (!cssRule || injected.has(cssRule)) return\n\n injected.add(cssRule)\n insertRuleToSheet(cssRule)\n}\n\n/**\n * Check if a rule has already been injected (deduplication check).\n */\nexport function isInjected(cssRule: string): boolean {\n return injected.has(cssRule)\n}\n\n/**\n * Clear all injected rules and remove the style element.\n * Useful for testing / SSR resets. Not for production use.\n */\nexport function resetBatchedCss(): void {\n injected.clear()\n pending.length = 0\n\n if (_state.rafHandle !== null) {\n cancelAnimationFrame(_state.rafHandle)\n _state.rafHandle = null\n }\n\n // Guard: document tidak tersedia di SSR / Node test environment\n if (typeof document !== \"undefined\" && _state.styleEl && document.head.contains(_state.styleEl)) {\n document.head.removeChild(_state.styleEl)\n _state.styleEl = null\n } else {\n _state.styleEl = null\n }\n}\n\n/**\n * Get stats about the current injection state (for devtools).\n */\nexport function getBatchedCssStats(): {\n totalInjected: number\n pendingCount: number\n hasBatchScheduled: boolean\n} {\n return {\n totalInjected: injected.size,\n pendingCount: pending.length,\n hasBatchScheduled: _state.rafHandle !== null,\n }\n}","/**\n * tailwind-styled-v4 — TwCssInjector\n *\n * React Server Component — inject route-specific CSS ke <head>.\n * Zero client JS, no hydration overhead, streaming-friendly.\n *\n * Pipeline:\n * 1. withTailwindStyled webpack plugin emit CSS manifest ke .next/static/css/tw/\n * 2. TwCssInjector baca manifest → inject <style> inline per route\n *\n * Usage:\n * // app/layout.tsx\n * import { TwCssInjector } from \"tailwind-styled-v4/runtime-css\"\n *\n * export default function Layout({ children }) {\n * return (\n * <html>\n * <head><TwCssInjector /></head>\n * <body>{children}</body>\n * </html>\n * )\n * }\n */\n\nimport React from \"react\"\n\ninterface CssInjectorProps {\n /** Route spesifik. Default: auto-detect */\n route?: string\n /** Inject global CSS juga. Default: true */\n includeGlobal?: boolean\n /** Minify inline CSS. Default: true */\n minify?: boolean\n /** CSS directory. Default: .next/static/css/tw */\n cssDir?: string\n}\n\n/**\n * Server Component — inject CSS per route ke <head>.\n * Baca dari manifest yang di-emit oleh TwCssManifestPlugin.\n */\nexport async function TwCssInjector(props: CssInjectorProps = {}): Promise<React.ReactElement> {\n const { route, includeGlobal = true, minify = true, cssDir } = props\n\n // Dynamic import fs — hanya jalan di server\n let fs: typeof import(\"node:fs\") | null = null\n let path: typeof import(\"node:path\") | null = null\n try {\n fs = await import(\"node:fs\")\n path = await import(\"node:path\")\n } catch {\n return React.createElement(React.Fragment, null)\n }\n\n const resolvedDir = cssDir\n ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\")\n\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\")\n\n // Baca manifest\n let manifest: { routes?: Record<string, string> } = {}\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"))\n }\n } catch {\n // Manifest tidak ada — mungkin belum build atau native binding belum ready\n return React.createElement(React.Fragment, null)\n }\n\n const cssChunks: string[] = []\n\n // Global CSS (_global.css)\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"])\n const css = readFile(fs, globalPath)\n if (css) cssChunks.push(css)\n }\n\n // Route-specific CSS\n const targetRoute = route ?? \"/\"\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute])\n const css = readFile(fs, routePath)\n if (css) cssChunks.push(css)\n }\n\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null)\n\n const combined = cssChunks.join(\"\\n\")\n const final = minify ? minifyCss(combined) : combined\n\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\",\n })\n}\n\n/**\n * Hook untuk client components — CSS sudah di-handle TwCssInjector di server.\n */\nexport function useTwClasses(classes: string): string {\n return classes\n}\n\n// Helpers\nfunction readFile(fs: typeof import(\"node:fs\"), filepath: string): string | null {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\")\n } catch {}\n return null\n}\n\nfunction minifyCss(css: string): string {\n return css\n .replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*{\\s*/g, \"{\")\n .replace(/\\s*}\\s*/g, \"}\")\n .replace(/\\s*;\\s*/g, \";\")\n .trim()\n}"],"mappings":"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","names":["React"]}
package/dist/runtime.js CHANGED
@@ -1,4 +1,3 @@
1
- const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
2
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
3
2
  "use strict";
4
3
  var __create = Object.create;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/umbrella/runtime.ts","../packages/domain/runtime/src/index.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts"],"sourcesContent":["export * from \"@tailwind-styled/runtime\"\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n","import React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\n\n React.useEffect(() => {\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n"],"mappings":"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","names":["import_react","setToken","setTokens","applyTokenSet","React","React"]}
1
+ {"version":3,"sources":["../src/umbrella/runtime.ts","../packages/domain/runtime/src/index.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts"],"sourcesContent":["export * from \"@tailwind-styled/runtime\"\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n","import React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\n\n React.useEffect(() => {\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOA,IAAAA,gBAAkB;;;ACPlB,mBAAkB;AAoClB,IAAM,mBAAmB;AAElB,SAAS,SAAS,MAAsB;AAC7C,QAAM,aAAa,KAAK,QAAQ,kBAAkB,GAAG,EAAE,YAAY;AACnE,SAAO,cAAc,UAAU;AACjC;AAEO,SAAS,SAAS,MAAsB;AAC7C,SAAO,OAAO,SAAS,IAAI,CAAC;AAC9B;AAEA,IAAM,eAAe,CAAC,WAA6B;AACjD,QAAM,OAAO,OAAO,QAAQ,MAAM,EAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,GAAG,EACvD,KAAK,IAAI;AACZ,SAAO;AAAA,EAAY,IAAI;AAAA;AACzB;AAEA,IAAM,wBAAwB,MAA8B;AAC1D,QAAM,QAAQ;AAAA,IACZ,eAAe,CAAC;AAAA,IAChB,SAAS;AAAA,EACX;AACA,QAAM,cAAc,oBAAI,IAAqB;AAE7C,QAAM,cAAc,MAAY;AAC9B,QAAI,OAAO,aAAa,YAAa;AAErC,QAAI,CAAC,MAAM,SAAS;AAClB,YAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,cAAQ,KAAK;AACb,cAAQ,aAAa,kBAAkB,MAAM;AAC7C,eAAS,KAAK,YAAY,OAAO;AACjC,YAAM,UAAU;AAAA,IAClB;AAEA,UAAM,QAAQ,cAAc,aAAa,MAAM,aAAa;AAAA,EAC9D;AAEA,QAAM,oBAAoB,MAAY;AACpC,UAAM,WAAW,EAAE,GAAG,MAAM,cAAc;AAC1C,eAAW,cAAc,aAAa;AACpC,UAAI;AACF,mBAAW,QAAQ;AAAA,MACrB,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,QAAMC,YAAW,CAAC,MAAc,UAAwB;AACtD,UAAM,gBAAgB,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,GAAG,MAAM;AAC9D,QAAI,OAAO,aAAa,aAAa;AACnC,eAAS,gBAAgB,MAAM,YAAY,SAAS,IAAI,GAAG,KAAK;AAAA,IAClE;AACA,gBAAY;AACZ,sBAAkB;AAAA,EACpB;AAEA,QAAMC,aAAY,CAAC,WAA2B;AAC5C,UAAM,gBAAgB,EAAE,GAAG,MAAM,eAAe,GAAG,OAAO;AAC1D,QAAI,OAAO,aAAa,aAAa;AACnC,YAAM,OAAO,SAAS;AACtB,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,aAAK,MAAM,YAAY,SAAS,IAAI,GAAG,KAAK;AAAA,MAC9C;AAAA,IACF;AACA,gBAAY;AACZ,sBAAkB;AAAA,EACpB;AAEA,QAAMC,iBAAgB,CAAC,WAA2B;AAChD,QAAI,OAAO,aAAa,aAAa;AACnC,YAAM,OAAO,SAAS;AACtB,iBAAW,QAAQ,OAAO,KAAK,MAAM,aAAa,GAAG;AACnD,YAAI,EAAE,QAAQ,SAAS;AACrB,eAAK,MAAM,eAAe,SAAS,IAAI,CAAC;AAAA,QAC1C;AAAA,MACF;AACA,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,aAAK,MAAM,YAAY,SAAS,IAAI,GAAG,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,gBAAgB,EAAE,GAAG,OAAO;AAClC,gBAAY;AACZ,sBAAkB;AAAA,EACpB;AAEA,SAAO;AAAA,IACL,UAAU,QAAgC;AACxC,MAAAD,WAAU,MAAM;AAEhB,YAAM,OAA+B,CAAC;AACtC,iBAAW,QAAQ,OAAO,KAAK,MAAM,GAAG;AACtC,aAAK,IAAI,IAAI,SAAS,IAAI;AAAA,MAC5B;AAEA,aAAO;AAAA,QACL;AAAA,QACA,IAAI,MAAc;AAChB,iBAAO,MAAM,cAAc,IAAI;AAAA,QACjC;AAAA,QACA,IAAI,MAAc,OAAe;AAC/B,UAAAD,UAAS,MAAM,KAAK;AAAA,QACtB;AAAA,QACA,OAAO,YAAsB;AAC3B,UAAAC,WAAU,UAAU;AAAA,QACtB;AAAA,QACA,WAAW;AACT,iBAAO,EAAE,GAAG,MAAM,cAAc;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,MAAkC;AACzC,aAAO,MAAM,cAAc,IAAI;AAAA,IACjC;AAAA,IACA,YAAsB;AACpB,aAAO,EAAE,GAAG,MAAM,cAAc;AAAA,IAClC;AAAA,IACA,UAAAD;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,yBAAiC;AAC/B,aAAO,aAAa,MAAM,aAAa;AAAA,IACzC;AAAA,IACA,UAAU,IAAiC;AACzC,kBAAY,IAAI,EAAE;AAClB,aAAO,MAAM;AACX,oBAAY,OAAO,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,SAAS,sBAAsB;AAE9B,SAAS,UAAU,QAAgC;AACxD,SAAO,OAAO,UAAU,MAAM;AAChC;AAEO,SAAS,SAAS,MAAc,OAAqB;AAC1D,SAAO,SAAS,MAAM,KAAK;AAC7B;AAEO,SAAS,UAAU,QAAwB;AAChD,SAAO,UAAU,MAAM;AACzB;AAEO,SAAS,cAAc,QAAwB;AACpD,SAAO,cAAc,MAAM;AAC7B;AAEO,SAAS,SAAS,MAAkC;AACzD,SAAO,OAAO,SAAS,IAAI;AAC7B;AAEO,SAAS,YAAsB;AACpC,SAAO,OAAO,UAAU;AAC1B;AAEO,SAAS,gBAAgB,IAAiC;AAC/D,SAAO,OAAO,UAAU,EAAE;AAC5B;AAEO,SAAS,yBAAiC;AAC/C,SAAO,OAAO,uBAAuB;AACvC;AAEO,SAAS,kBAAkB;AAChC,SAAO,SAAS,YAAsB;AACpC,UAAM,CAAC,QAAQ,cAAc,IAAI,aAAAC,QAAM,SAAmB,OAAO,UAAU,CAAC;AAE5E,iBAAAA,QAAM,UAAU,MAAM;AACpB,qBAAe,OAAO,UAAU,CAAC;AACjC,aAAO,OAAO,UAAU,CAAC,eAAe,eAAe,UAAU,CAAC;AAAA,IACpE,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,kBAAyC;AAAA,EACpD,UAAU,OAAO;AAAA,EACjB,WAAW,OAAO;AAAA,EAClB,UAAU,OAAO;AAAA,EACjB,WAAW,OAAO;AAAA,EAClB,eAAe,OAAO;AAAA,EACtB,iBAAiB,OAAO;AAAA,EACxB,WAAW,OAAO;AACpB;AAQA,IAAM,oBAAoB;AAI1B,kBAAkB,gBAAgB,IAAI;AACtC,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,sBAAsB;AAC/B;;;ACjPA,iBAAkB;AAElB,IAAM,eAAe,CAAC,UACpB,MAAM,OACH,IAAI,CAAC,UAAU;AACd,QAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AACzD,SAAO,GAAG,CAAC,KAAK,MAAM,OAAO;AAC/B,CAAC,EACA,KAAK,IAAI;AAEd,IAAM,kBAAkB,CAAI,QAAsB,MAAe,UAAqB;AACpF,QAAM,SAAS,OAAO,UAAU,IAAI;AACpC,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,QAAM,IAAI,UAAU,GAAG,KAAK,KAAK,aAAa,OAAO,KAAK,CAAC,EAAE;AAC/D;AAEO,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC5C,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,EACzB,OAAO,aAAE,OAAO;AAClB,CAAC;AAIM,IAAM,0BAA0B,aAAE,OAAO;AAAA,EAC9C,WAAW,aAAE,OAAO;AAAA,EACpB,KAAK,aAAE,OAAO;AAAA,EACd,WAAW,aAAE,OAAO;AAAA,EACpB,eAAe,aAAE,OAAO,aAAE,OAAO,GAAG,qBAAqB;AAC3D,CAAC;AAIM,IAAM,yBAAyB,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC;AAI9D,IAAM,uBAAuB,CAAC,SACnC,gBAAgB,uBAAuB,MAAM,qCAAqC;AAE7E,IAAM,yBAAyB,CAAC,SACrC,gBAAgB,yBAAyB,MAAM,+BAA+B;;;AFqCzE,SAAS,MAAM,QAA8B;AAClD,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,MAAO;AACZ,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,KAAK,KAAK;AAAA,IAChB,WAAW,OAAO,UAAU,UAAU;AACpC,UAAI,KAAK,OAAO,KAAK,CAAC;AAAA,IACxB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,YAAM,SAAS,GAAG,GAAG,KAAK;AAC1B,UAAI,OAAQ,KAAI,KAAK,MAAM;AAAA,IAC7B;AAAA,EACF;AACA,SAAO,IAAI,KAAK,GAAG;AACrB;AA2BO,SAAS,gBACd,KACA,WACA,eACA,cACoB;AAMpB,QAAM,OAAO,cAAAC,QAAM,WAA+B,SAAS,OAAO,OAAO,KAAK;AAC5E,UAAM,QAAkB,CAAC;AAGzB,QAAI,cAAc;AAChB,iBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,YAAY,GAAG;AACtD,YAAI,MAAM,IAAI,EAAG,OAAM,KAAK,GAAG;AAAA,MACjC;AAAA,IACF;AAGA,UAAM,QAAiC,CAAC;AACxC,UAAM,YAAY,oBAAI,IAAI;AAAA,MACxB;AAAA,MACA,GAAI,eAAe,OAAO,KAAK,YAAY,IAAI,CAAC;AAAA,MAChD,GAAI,gBAAgB,OAAO,KAAK,aAAa,IAAI,CAAC;AAAA,IACpD,CAAC;AACD,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAI,CAAC,UAAU,IAAI,CAAC,EAAG,OAAM,CAAC,IAAI;AAAA,IACpC;AAEA,UAAM,YAAY,GAAG,WAAW,GAAG,OAAQ,MAAM,aAAwB,EAAE;AAE3E,WAAO,cAAAA,QAAM,cAAc,KAAK,EAAE,GAAG,OAAO,KAAK,WAAW,aAAa,OAAU,CAAC;AAAA,EACtF,CAAC;AAEA,EAAC,KAAkC,cAAc,MAAM,OAAO,GAAG,CAAC;AAGnE,MAAI,eAAe;AACjB,eAAW,CAAC,SAAS,GAAG,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC1D,YAAM,SAAS,IAAI,OAAO;AAC1B,YAAM,WAAW,IAAI;AAErB,YAAM,UAAU,cAAAA,QAAM,WAA+B,SAAS,MAAM,OAAO,KAAK;AAC9E,cAAM,YAAY,GAAG,UAAW,MAAM,aAAwB,EAAE;AAChE,cAAM,QAAiC,EAAE,GAAG,MAAM;AAClD,eAAO,MAAM;AACb,eAAO,cAAAA,QAAM,cAAc,QAAQ,EAAE,GAAG,OAAO,KAAK,WAAW,aAAa,OAAU,CAAC;AAAA,MACzF,CAAC;AAEA,MAAC,QAAqC,cAAc,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,OAAO,CAAC;AAExF,MAAC,KAA4C,OAAO,IAAI;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AACT;","names":["import_react","setToken","setTokens","applyTokenSet","React","React"]}
package/dist/scanner.js CHANGED
@@ -1,4 +1,3 @@
1
- const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
2
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
3
2
  "use strict";
4
3
  var __create = Object.create;
@@ -32,6 +31,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
32
31
  ));
33
32
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
33
 
34
+ // node_modules/tsup/assets/cjs_shims.js
35
+ var getImportMetaUrl, importMetaUrl;
36
+ var init_cjs_shims = __esm({
37
+ "node_modules/tsup/assets/cjs_shims.js"() {
38
+ "use strict";
39
+ getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
40
+ importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
41
+ }
42
+ });
43
+
35
44
  // packages/domain/shared/src/index.ts
36
45
  function createLogger(namespace) {
37
46
  const prefix = `[${namespace}]`;
@@ -133,6 +142,7 @@ var import_node_crypto, import_node_fs, import_node_path, import_node_url, impor
133
142
  var init_src = __esm({
134
143
  "packages/domain/shared/src/index.ts"() {
135
144
  "use strict";
145
+ init_cjs_shims();
136
146
  import_node_crypto = require("crypto");
137
147
  import_node_fs = __toESM(require("fs"));
138
148
  import_node_path = __toESM(require("path"));
@@ -191,7 +201,7 @@ var init_src = __esm({
191
201
  }
192
202
  };
193
203
  _require = (0, import_node_module.createRequire)(
194
- typeof __filename !== "undefined" ? `file://${__filename}` : __importMetaUrl ?? "file://unknown"
204
+ typeof __filename !== "undefined" ? `file://${__filename}` : importMetaUrl ?? "file://unknown"
195
205
  );
196
206
  }
197
207
  });
@@ -229,8 +239,8 @@ function getDirname() {
229
239
  if (typeof __dirname !== "undefined") {
230
240
  return __dirname;
231
241
  }
232
- if (typeof import_meta !== "undefined" && __importMetaUrl) {
233
- return import_node_path2.default.dirname((0, import_node_url2.fileURLToPath)(__importMetaUrl));
242
+ if (typeof import_meta !== "undefined" && importMetaUrl) {
243
+ return import_node_path2.default.dirname((0, import_node_url2.fileURLToPath)(importMetaUrl));
234
244
  }
235
245
  return process.cwd();
236
246
  }
@@ -439,6 +449,7 @@ var import_node_path2, import_node_url2, import_meta, log, isValidScannerBinding
439
449
  var init_native_bridge = __esm({
440
450
  "packages/domain/scanner/src/native-bridge.ts"() {
441
451
  "use strict";
452
+ init_cjs_shims();
442
453
  import_node_path2 = __toESM(require("path"), 1);
443
454
  import_node_url2 = require("url");
444
455
  init_src();
@@ -540,8 +551,10 @@ __export(scanner_exports, {
540
551
  scanWorkspaceAsync: () => scanWorkspaceAsync
541
552
  });
542
553
  module.exports = __toCommonJS(scanner_exports);
554
+ init_cjs_shims();
543
555
 
544
556
  // packages/domain/scanner/src/index.ts
557
+ init_cjs_shims();
545
558
  var import_node_fs3 = __toESM(require("fs"), 1);
546
559
  var import_node_module2 = require("module");
547
560
  var import_node_path5 = __toESM(require("path"), 1);
@@ -550,6 +563,7 @@ var import_node_worker_threads2 = require("worker_threads");
550
563
  init_src();
551
564
 
552
565
  // packages/domain/scanner/src/cache-native.ts
566
+ init_cjs_shims();
553
567
  var import_node_fs2 = __toESM(require("fs"), 1);
554
568
  var import_node_path3 = __toESM(require("path"), 1);
555
569
  init_native_bridge();
@@ -599,6 +613,7 @@ function filePriority(mtimeMs, size, cached, nowMs = Date.now()) {
599
613
  init_native_bridge();
600
614
 
601
615
  // packages/domain/scanner/src/parallel-scanner.ts
616
+ init_cjs_shims();
602
617
  var import_node_worker_threads = require("worker_threads");
603
618
  var import_node_path4 = __toESM(require("path"), 1);
604
619
  var import_node_os = require("os");
@@ -635,7 +650,7 @@ if (!import_node_worker_threads.isMainThread && import_node_worker_threads.paren
635
650
  import_node_worker_threads.parentPort.postMessage(msg);
636
651
  }
637
652
  }
638
- var _workerFilename = typeof __filename !== "undefined" ? __filename : (0, import_node_url3.fileURLToPath)(__importMetaUrl);
653
+ var _workerFilename = typeof __filename !== "undefined" ? __filename : (0, import_node_url3.fileURLToPath)(importMetaUrl);
639
654
  function runChunkInWorker(filePaths) {
640
655
  return new Promise((resolve, reject) => {
641
656
  const worker = new import_node_worker_threads.Worker(_workerFilename, {
@@ -679,6 +694,7 @@ async function scanWorkspaceParallel(rootDir, options = {}) {
679
694
  }
680
695
 
681
696
  // packages/domain/scanner/src/schemas.ts
697
+ init_cjs_shims();
682
698
  var import_zod = require("zod");
683
699
  init_src();
684
700
  var formatIssuePath2 = (path6) => path6.length > 0 ? path6.map(
@@ -749,8 +765,8 @@ function getRuntimeDir() {
749
765
  if (typeof __dirname !== "undefined" && __dirname.length > 0) {
750
766
  return __dirname;
751
767
  }
752
- if (typeof import_meta2 !== "undefined" && __importMetaUrl) {
753
- return import_node_path5.default.dirname((0, import_node_url4.fileURLToPath)(__importMetaUrl));
768
+ if (typeof import_meta2 !== "undefined" && importMetaUrl) {
769
+ return import_node_path5.default.dirname((0, import_node_url4.fileURLToPath)(importMetaUrl));
754
770
  }
755
771
  return process.cwd();
756
772
  }
@@ -840,8 +856,8 @@ function resolveScannerWorkerModulePath() {
840
856
  if (typeof __dirname !== "undefined" && __dirname.length > 0) {
841
857
  return __dirname;
842
858
  }
843
- if (typeof import_meta2 !== "undefined" && __importMetaUrl) {
844
- return import_node_path5.default.dirname((0, import_node_url4.fileURLToPath)(__importMetaUrl));
859
+ if (typeof import_meta2 !== "undefined" && importMetaUrl) {
860
+ return import_node_path5.default.dirname((0, import_node_url4.fileURLToPath)(importMetaUrl));
845
861
  }
846
862
  return process.cwd();
847
863
  })();