tailwind-styled-v4 5.0.10 → 5.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -373
- package/dist/analyzer.js +75 -22
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +74 -21
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.js +4 -2
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +4 -2
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js +20 -5
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +20 -5
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +174 -67
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +171 -64
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +7 -1
- package/dist/compiler.d.ts +7 -1
- package/dist/compiler.js +53 -27
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +53 -27
- package/dist/compiler.mjs.map +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.js +159 -61
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +159 -61
- package/dist/engine.mjs.map +1 -1
- package/dist/index.browser.mjs +1512 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.d.mts +94 -12
- package/dist/index.d.ts +94 -12
- package/dist/index.js +436 -106
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +436 -106
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +1946 -47
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +1929 -44
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +23 -10
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +23 -11
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs.map +1 -1
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs.map +1 -1
- package/dist/scanner.js +72 -19
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +71 -18
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.js +32 -15
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +32 -15
- package/dist/shared.mjs.map +1 -1
- package/dist/svelte.js +38 -12
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +38 -12
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +17 -5
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +17 -5
- package/dist/syntax.mjs.map +1 -1
- package/dist/theme.js +4 -2
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +4 -2
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +87 -33
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +87 -33
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +174 -67
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +171 -64
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +145 -63
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +145 -63
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +38 -12
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +38 -12
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +20 -5
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +20 -5
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +29 -24
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/index.ts","../packages/domain/core/src/native.ts","../packages/domain/core/src/containerQuery.ts","../packages/domain/core/src/merge.ts","../packages/domain/core/src/stateEngine.ts","../packages/domain/core/src/createComponent.ts","../packages/domain/core/src/cv.ts","../packages/domain/core/src/cx.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/core/src/registry.ts","../packages/domain/core/src/styled.ts","../packages/domain/core/src/styledSystem.ts","../packages/domain/core/src/twProxy.ts","../packages/domain/core/src/twTheme.ts"],"names":["createRequire","isBrowser","path","fileURLToPath","twMerge","React","merged","extended","baseComponent","component","result","setToken","setTokens","applyTokenSet","cv"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Prebuilt binary resolution untuk native NAPI bindings.\r\n * QA #1: Resolve native binary dari prebuilt packages atau local build.\r\n *\r\n * Prioritas:\r\n * 1. TW_NATIVE_PATH env var (explicit override)\r\n * 2. Prebuilt binary dari platform-specific npm package\r\n * 3. Local build dari source (developer mode)\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport * as fs from \"node:fs\"\r\nimport * as path from \"node:path\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require — works in both ESM and CJS contexts\r\nconst _require = typeof require !== \"undefined\" ? require : createRequire(import.meta.url)\r\n\r\nexport interface NativeResolutionResult {\r\n path: string | null\r\n source: \"env\" | \"prebuilt\" | \"local\" | \"not-found\"\r\n platform: string\r\n tried: string[]\r\n}\r\n\r\n/** Platform key → prebuilt npm package name */\r\nconst PLATFORM_MAP: Record<string, string[]> = {\r\n \"linux-x64\": [\"@tailwind-styled/native-linux-x64\"],\r\n \"linux-arm64\": [\"@tailwind-styled/native-linux-arm64\"],\r\n \"darwin-x64\": [\"@tailwind-styled/native-darwin-x64\"],\r\n \"darwin-arm64\": [\"@tailwind-styled/native-darwin-arm64\"],\r\n \"win32-x64\": [\"@tailwind-styled/native-win32-x64\"],\r\n \"win32-arm64\": [\"@tailwind-styled/native-win32-arm64\"],\r\n}\r\n\r\nfunction platformKey(): string {\r\n if (isBrowser) return \"browser\"\r\n return `${process.platform}-${process.arch}`\r\n}\r\n\r\n/**\r\n * Resolve native binary path dari semua sumber yang tersedia.\r\n *\r\n * @example\r\n * const result = resolveNativeBinary()\r\n * if (result.path) {\r\n * const binding = require(result.path)\r\n * } else {\r\n * throw new Error(\"Native binding not found — run npm run build:rust\")\r\n * }\r\n */\r\nexport function resolveNativeBinary(runtimeDir?: string): NativeResolutionResult {\r\n const platform = platformKey()\r\n const tried: string[] = []\r\n\r\n if (isBrowser) {\r\n return { path: null, source: \"not-found\", platform, tried: [\"not available in browser\"] }\r\n }\r\n\r\n // 0. Disabled flag — always short-circuit before any I/O\r\n if (process.env.TWS_DISABLE_NATIVE === \"1\") {\r\n return { path: null, source: \"not-found\", platform, tried: [] }\r\n }\r\n\r\n // 1. Env var override\r\n const envPath = process.env.TW_NATIVE_PATH?.trim()\r\n if (envPath) {\r\n if (fs.existsSync(envPath)) {\r\n return { path: envPath, source: \"env\", platform, tried }\r\n }\r\n tried.push(`env:${envPath} (not found)`)\r\n }\r\n\r\n // 2. Prebuilt binary dari platform-specific npm package\r\n const prebuiltPkgs = PLATFORM_MAP[platform] ?? []\r\n for (const pkg of prebuiltPkgs) {\r\n try {\r\n const candidate = _require.resolve(`${pkg}/tailwind_styled_parser.node`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n tried.push(`prebuilt:${pkg} (resolved but missing)`)\r\n } catch {\r\n tried.push(`prebuilt:${pkg} (not installed)`)\r\n }\r\n }\r\n\r\n // 3. Local build candidates\r\n const cwd = process.cwd()\r\n const base = runtimeDir ?? cwd\r\n // napi-rs naming: platform key may have -gnu suffix on Linux\r\n const napiPlatform = platform === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : platform === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : platform\r\n\r\n // Both possible binary names:\r\n // - \"tailwind_styled_parser\" (old hardcoded name in resolvers)\r\n // - \"tailwind-styled-native\" (actual binaryName in native/package.json)\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n\r\n const localCandidates: string[] = []\r\n\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(base, `${bin}.node`))\r\n localCandidates.push(path.resolve(base, \"..\", `${bin}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n // Walk up from cwd AND base to find repo root native/ dir\r\n // Needed when npm workspaces sets cwd to the package subdir\r\n for (const startDir of [cwd, base]) {\r\n let dir = startDir\r\n for (let i = 0; i < 6; i++) {\r\n const nativeDir = path.resolve(dir, \"native\")\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${napiPlatform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, \"target\", \"release\", `${bin}.node`))\r\n }\r\n const parent = path.resolve(dir, \"..\")\r\n if (parent === dir) break\r\n dir = parent\r\n }\r\n }\r\n\r\n for (const candidate of localCandidates) {\r\n tried.push(`local:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"local\", platform, tried }\r\n }\r\n }\r\n\r\n return { path: null, source: \"not-found\", platform, tried }\r\n}\r\n\r\n/**\r\n * Format human-readable error untuk \"binary not found\".\r\n */\r\nexport function formatNativeNotFoundError(result: NativeResolutionResult): string {\r\n const lines = [\r\n `[tailwind-styled] Native binding not found for ${result.platform}`,\r\n ``,\r\n `Tried:`,\r\n ...result.tried.map(t => ` - ${t}`),\r\n ``,\r\n `Solutions:`,\r\n ` 1. Build locally: npm run build:rust`,\r\n ` 2. Install prebuilt: npm install @tailwind-styled/native-${result.platform}`,\r\n ` 3. Override path: TW_NATIVE_PATH=/path/to/parser.node`,\r\n ]\r\n return lines.join(\"\\n\")\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * tailwind-styled-v5 — Native Rust Bindings\r\n *\r\n * All functions require native Rust bindings.\r\n * Uses @tailwind-styled/shared for native resolution.\r\n */\r\n\r\nimport { dirname } from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { resolveNativeBinary } from \"@tailwind-styled/shared\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/core] Native binding is required but not available.\\n\" +\r\n \"Please ensure you have run: npm run build:rust\"\r\n\r\n// require() is safe here — tsup banner injects CJS-compatible require into ESM output.\r\n// See tsup.config.ts esbuildOptions banner for how this is set up.\r\nconst _loadNative = (path: string): unknown => require(path)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Type Definitions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParsedClassModifier {\r\n type: \"opacity\" | \"arbitrary\"\r\n value: string\r\n}\r\n\r\nexport interface ParsedClass {\r\n raw: string\r\n base: string\r\n variants: string[]\r\n modifier?: ParsedClassModifier\r\n}\r\n\r\nexport interface ThemeConfig {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n}\r\n\r\ninterface NativeBinding {\r\n batchSplitClasses?: (input: string[]) => Array<{\r\n variantKey: string\r\n base: string\r\n variants: string[]\r\n isArbitrary: boolean\r\n hasModifier: boolean\r\n }>\r\n compileTheme?: (themeConfig: string) => { css: string; variables: Record<string, string> }\r\n extractCssVars?: (css: string) => Record<string, string>\r\n extractThemeFromCss?: (css: string) => Array<{ key: string; value: string }>\r\n parseCssRules?: (css: string) => Array<{\r\n className: string\r\n property: string\r\n value: string\r\n isImportant: boolean\r\n variants: string[]\r\n specificity: number\r\n }>\r\n parseCssToRules?: (css: string) => string\r\n detectDeadCode?: (css: string, usedClasses: string[]) => string[]\r\n classifyKnownClasses?: (classes: string[]) => Array<{ className: string; category: string }>\r\n detectClassConflicts?: (classes: string) => { conflicts: Array<{ class1: string; class2: string; reason: string }>; conflictedClassNames: string[] }\r\n resolveVariants?: (configJson: string, propsJson: string) => { classes: string; resolvedCount: number }\r\n resolveSimpleVariants?: (base: string | null, variants: Record<string, Record<string, string>>, defaults: Record<string, string>, props: Record<string, string>) => string\r\n /** Parse template literal yang sudah di-join. Menggantikan parseTemplate() di twProxy.ts */\r\n parseTemplate?: (raw: string) => {\r\n base: string\r\n subsJson: string\r\n hasSubs: boolean\r\n }\r\n /** Validate ComponentConfig — menggantikan validateVariantConfig() di cv.ts */\r\n validateVariantConfig?: (configJson: string) => {\r\n valid: boolean\r\n errors: Array<{ errorType: string; key: string; value?: string; message: string }>\r\n warnings: string[]\r\n }\r\n /** Build lookup key untuk generated registry — menggantikan key builder di lookupGenerated() */\r\n buildVariantLookupKey?: (defaultVariantsJson: string, propsJson: string) => string\r\n /** Menggantikan cn() — filter+join class names dalam satu Rust pass. (class_utils.rs) */\r\n resolveClassNames?: (inputs: string[]) => string\r\n /** tw_merge dengan custom separator dan optional debug */\r\n twMergeWithSeparator?: (classString: string, opts: { separator?: string; debug?: boolean }) => string\r\n /** tw_merge_many dengan custom separator */\r\n twMergeManyWithSeparator?: (classStrings: string[], opts: { separator?: string; debug?: boolean }) => string\r\n /** conflict-aware Tailwind class merger — port of tailwind-merge. (tw_merge.rs) */\r\n twMerge?: (classString: string) => string\r\n /** variadic convenience wrapper untuk twMerge. (tw_merge.rs) */\r\n twMergeMany?: (classStrings: string[]) => string\r\n /** Tailwind classes → semicolon-separated inline CSS declarations. (state_css.rs) */\r\n twClassesToCss?: (classes: string) => string\r\n /** Iterative CSS var() chain resolver. (theme.rs) */\r\n resolveThemeValue?: (key: string, rawMapJson: string) => string\r\n /** Parse sub-component block syntax from tw`` template. (tw_merge.rs) */\r\n parseSubcomponentBlocksNapi?: (template: string, componentName: string) => {\r\n baseClasses: string\r\n subMapJson: string\r\n }\r\n /** Menggantikan layoutClassesToCss() — static lookup + split dalam satu Rust pass. (container_query.rs) */\r\n layoutClassesToCss?: (classes: string) => string\r\n /** Menggantikan buildContainerRules() — generate @container CSS rules. (container_query.rs) */\r\n buildContainerRules?: (\r\n id: string,\r\n breakpoints: Array<{ key: string; classes: string }>,\r\n containerName: string | null\r\n ) => string\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Binding Loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBinding: NativeBinding | null = null\r\nlet bindingLoadAttempted = false\r\n\r\nconst getBinding = (): NativeBinding => {\r\n if (isBrowser) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE + \"\\n\\nNative bindings are not available in browser. Use the compiled CSS output instead.\")\r\n }\r\n \r\n if (nativeBinding) return nativeBinding\r\n\r\n if (bindingLoadAttempted) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bindingLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = isBrowser ? \"\" : dirname(fileURLToPath(import.meta.url))\r\n const result = isBrowser\r\n ? { path: null, source: \"not-found\", platform: \"browser\", tried: [] }\r\n : resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n const mod = _loadNative(result.path) as NativeBinding\r\n if (mod?.batchSplitClasses) {\r\n nativeBinding = mod\r\n return nativeBinding\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n throw err instanceof Error ? err : new Error(String(err))\r\n }\r\n}\r\n\r\nexport const resetNativeBinding = (): void => {\r\n nativeBinding = null\r\n bindingLoadAttempted = false\r\n}\r\n\r\nexport const getNativeBinding = getBinding\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Parser Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction splitClassListNative(input: string): string[] {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([input])\r\n if (result.length === 0) return []\r\n return result[0].base.split(\" \").filter(Boolean)\r\n}\r\n\r\nfunction parseClassTokenNative(rawToken: string): ParsedClass {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([rawToken])\r\n if (result.length === 0) {\r\n return { raw: rawToken, base: rawToken, variants: [] }\r\n }\r\n const r = result[0]\r\n const parsed: ParsedClass = {\r\n raw: r.base,\r\n base: r.base,\r\n variants: r.variants,\r\n }\r\n if (r.hasModifier) {\r\n const opacityMatch = r.base.match(/^(.*)\\/(\\d{1,3})$/)\r\n if (opacityMatch && opacityMatch[1].length > 0) {\r\n parsed.base = opacityMatch[1]\r\n parsed.modifier = { type: \"opacity\", value: opacityMatch[2] }\r\n } else {\r\n const arbitraryMatch = r.base.match(/\\((--[a-zA-Z0-9_-]+)\\)/)\r\n if (arbitraryMatch) {\r\n parsed.modifier = { type: \"arbitrary\", value: arbitraryMatch[1] }\r\n }\r\n }\r\n }\r\n return parsed\r\n}\r\n\r\nexport function splitClassList(input: string): string[] {\r\n return splitClassListNative(input)\r\n}\r\n\r\nexport function parseClassToken(rawToken: string): ParsedClass {\r\n return parseClassTokenNative(rawToken)\r\n}\r\n\r\nexport function parseTailwindClasses(input: string): ParsedClass[] {\r\n const classes = splitClassListNative(input)\r\n return classes.map((c) => parseClassTokenNative(c))\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS/Theme Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function compileTheme(themeConfig: Record<string, unknown>) {\r\n const binding = getBinding()\r\n if (!binding?.compileTheme) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.compileTheme(JSON.stringify(themeConfig))\r\n}\r\n\r\nexport function extractCssVars(css: string): Record<string, string> {\r\n const binding = getBinding()\r\n if (!binding?.extractCssVars) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.extractCssVars(css)\r\n}\r\n\r\nexport function parseCssRules(css: string) {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssRules(css)\r\n}\r\n\r\nexport function parseCssToRules(css: string): string {\r\n const binding = getBinding()\r\n if (!binding?.parseCssToRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssToRules(css)\r\n}\r\n\r\nexport function detectDeadCode(css: string, usedClasses: string[]): string[] {\r\n const binding = getBinding()\r\n if (!binding?.detectDeadCode) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectDeadCode(css, usedClasses)\r\n}\r\n\r\nexport function classifyKnownClasses(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.classifyKnownClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.classifyKnownClasses(classes)\r\n}\r\n\r\nexport function detectClassConflicts(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.detectClassConflicts) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectClassConflicts(classes.join(\" \"))\r\n}\r\n\r\nexport function extractThemeFromCSS(cssContent: string): ThemeConfig {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n \r\n const properties = binding.parseCssRules(cssContent)\r\n const theme: ThemeConfig = {\r\n colors: {},\r\n spacing: {},\r\n fonts: {},\r\n breakpoints: {},\r\n animations: {},\r\n raw: {},\r\n }\r\n \r\n const prefixMap: Record<string, keyof ThemeConfig> = {\r\n \"color-\": \"colors\",\r\n \"spacing-\": \"spacing\",\r\n \"font-\": \"fonts\",\r\n \"breakpoint-\": \"breakpoints\",\r\n \"animate-\": \"animations\",\r\n }\r\n \r\n for (const prop of properties) {\r\n const cssVar = prop.property.replace(/^--/, \"\")\r\n theme.raw[cssVar] = prop.value\r\n \r\n for (const [prefix, category] of Object.entries(prefixMap)) {\r\n if (cssVar.startsWith(prefix)) {\r\n const name = cssVar.slice(prefix.length)\r\n if (name) theme[category][name] = prop.value\r\n break\r\n }\r\n }\r\n }\r\n \r\n return theme\r\n}","/**\r\n * tailwind-styled-v4 — Container Query Engine\r\n *\r\n * Generates @container rules from a simple breakpoint config.\r\n *\r\n * Usage:\r\n * const Card = tw.div({\r\n * base: \"p-4\",\r\n * container: {\r\n * sm: \"flex-col\", // @container (min-width: 320px)\r\n * md: \"flex-row\", // @container (min-width: 640px)\r\n * lg: \"grid-cols-3\", // @container (min-width: 1024px)\r\n * },\r\n * containerName: \"card\",\r\n * })\r\n *\r\n * // Wrap with container context:\r\n * const CardWrapper = tw.div`@container`\r\n *\r\n * Named containers:\r\n * const SidebarCard = tw.div({\r\n * base: \"p-2\",\r\n * container: { lg: \"text-sm\" },\r\n * containerName: \"sidebar\",\r\n * })\r\n * // Generates: @container sidebar (min-width: 1024px) { ... }\r\n */\r\n\r\nimport type { ContainerConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Breakpoint map — matches Tailwind defaults\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst CONTAINER_BREAKPOINTS: Record<string, string> = {\r\n xs: \"240px\",\r\n sm: \"320px\",\r\n md: \"640px\",\r\n lg: \"1024px\",\r\n xl: \"1280px\",\r\n \"2xl\": \"1536px\",\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerEntry {\r\n id: string\r\n tag: string\r\n containerName?: string\r\n breakpoints: Array<{ minWidth: string; classes: string }>\r\n cssInjected: boolean\r\n}\r\n\r\nconst containerRegistry = new Map<string, ContainerEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_CONTAINER_REGISTRY__?: typeof containerRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_CONTAINER_REGISTRY__ = containerRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hash\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction hashContainer(tag: string, container: ContainerConfig, name?: string): string {\r\n const key = tag + (name ?? \"\") + JSON.stringify(Object.entries(container).sort())\r\n const hash = key.split(\"\").reduce((h, char) => ((h << 5) + h) ^ char.charCodeAt(0), 5381)\r\n return `tw-cq-${Math.abs(hash).toString(36).slice(0, 6)}`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/** Minimal Tailwind → CSS for container query contexts */\r\nconst LAYOUT_MAP: Record<string, string> = {\r\n \"flex-col\": \"flex-direction:column\",\r\n \"flex-row\": \"flex-direction:row\",\r\n \"flex-wrap\": \"flex-wrap:wrap\",\r\n \"flex-nowrap\": \"flex-wrap:nowrap\",\r\n \"flex-1\": \"flex:1 1 0%\",\r\n hidden: \"display:none\",\r\n block: \"display:block\",\r\n flex: \"display:flex\",\r\n grid: \"display:grid\",\r\n \"grid-cols-1\": \"grid-template-columns:repeat(1,minmax(0,1fr))\",\r\n \"grid-cols-2\": \"grid-template-columns:repeat(2,minmax(0,1fr))\",\r\n \"grid-cols-3\": \"grid-template-columns:repeat(3,minmax(0,1fr))\",\r\n \"grid-cols-4\": \"grid-template-columns:repeat(4,minmax(0,1fr))\",\r\n \"grid-cols-6\": \"grid-template-columns:repeat(6,minmax(0,1fr))\",\r\n \"grid-cols-12\": \"grid-template-columns:repeat(12,minmax(0,1fr))\",\r\n \"text-sm\": \"font-size:0.875rem;line-height:1.25rem\",\r\n \"text-base\": \"font-size:1rem;line-height:1.5rem\",\r\n \"text-lg\": \"font-size:1.125rem;line-height:1.75rem\",\r\n \"text-xl\": \"font-size:1.25rem;line-height:1.75rem\",\r\n \"text-2xl\": \"font-size:1.5rem;line-height:2rem\",\r\n \"text-xs\": \"font-size:0.75rem;line-height:1rem\",\r\n \"p-2\": \"padding:0.5rem\",\r\n \"p-4\": \"padding:1rem\",\r\n \"p-6\": \"padding:1.5rem\",\r\n \"p-8\": \"padding:2rem\",\r\n \"px-2\": \"padding-left:0.5rem;padding-right:0.5rem\",\r\n \"px-4\": \"padding-left:1rem;padding-right:1rem\",\r\n \"px-6\": \"padding-left:1.5rem;padding-right:1.5rem\",\r\n \"py-2\": \"padding-top:0.5rem;padding-bottom:0.5rem\",\r\n \"py-4\": \"padding-top:1rem;padding-bottom:1rem\",\r\n \"gap-2\": \"gap:0.5rem\",\r\n \"gap-4\": \"gap:1rem\",\r\n \"gap-6\": \"gap:1.5rem\",\r\n \"gap-8\": \"gap:2rem\",\r\n \"w-full\": \"width:100%\",\r\n \"w-1/2\": \"width:50%\",\r\n \"w-1/3\": \"width:33.333333%\",\r\n \"w-2/3\": \"width:66.666667%\",\r\n \"max-w-sm\": \"max-width:24rem\",\r\n \"max-w-md\": \"max-width:28rem\",\r\n \"max-w-lg\": \"max-width:32rem\",\r\n \"max-w-xl\": \"max-width:36rem\",\r\n \"items-center\": \"align-items:center\",\r\n \"items-start\": \"align-items:flex-start\",\r\n \"items-end\": \"align-items:flex-end\",\r\n \"justify-center\": \"justify-content:center\",\r\n \"justify-between\": \"justify-content:space-between\",\r\n \"justify-start\": \"justify-content:flex-start\",\r\n \"justify-end\": \"justify-content:flex-end\",\r\n}\r\n\r\n/**\r\n * Konversi layout class string → inline CSS declarations.\r\n *\r\n * Native-first: Rust static lookup table (zero alloc) + split_whitespace.\r\n * JS fallback: LAYOUT_MAP object lookup + split(/\\s+/).\r\n */\r\nfunction layoutClassesToCss(classes: string): string {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.layoutClassesToCss) {\r\n return native.layoutClassesToCss(classes)\r\n }\r\n } catch { /* fallback */ }\r\n\r\n // JS fallback\r\n const decls: string[] = []\r\n for (const cls of classes.trim().split(/\\s+/)) {\r\n if (LAYOUT_MAP[cls]) decls.push(LAYOUT_MAP[cls])\r\n else if (cls.startsWith(\"w-[\")) {\r\n const val = cls.match(/\\[(.+)\\]/)?.[1]\r\n if (val) decls.push(`width:${val}`)\r\n } else if (cls.startsWith(\"max-w-[\")) {\r\n const val = cls.match(/\\[(.+)\\]/)?.[1]\r\n if (val) decls.push(`max-width:${val}`)\r\n }\r\n }\r\n return decls.join(\";\")\r\n}\r\n\r\nfunction buildContainerRules(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const rules = Object.entries(container)\r\n .map(([key, value]) => {\r\n const minWidth =\r\n typeof value === \"string\"\r\n ? (CONTAINER_BREAKPOINTS[key] ?? key)\r\n : (value.minWidth ?? CONTAINER_BREAKPOINTS[key] ?? key)\r\n const classes = typeof value === \"string\" ? value : value.classes\r\n\r\n const css = layoutClassesToCss(classes)\r\n if (!css) return null\r\n\r\n const query = containerName\r\n ? `@container ${containerName} (min-width: ${minWidth})`\r\n : `@container (min-width: ${minWidth})`\r\n\r\n return `${query}{.${id}{${css}}}`\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Style injection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectContainerStyles(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): void {\r\n if (typeof document === \"undefined\") return\r\n const styleId = `tw-cq-${id}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const css = buildContainerRules(id, container, containerName)\r\n if (!css) return\r\n\r\n // Try batched injector first (available when runtime-css is installed)\r\n try {\r\n const { batchedInject } = require(\"@tailwind-styled/runtime-css/batched\") as {\r\n batchedInject: (css: string) => void\r\n }\r\n for (const rule of css.split(\"\\n\").filter(Boolean)) batchedInject(rule)\r\n return\r\n } catch {\r\n // Fallback: per-element style tag\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-container\", id)\r\n style.textContent = css\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerQueryResult {\r\n containerClass: string\r\n hasContainer: true\r\n}\r\n\r\nexport function processContainer(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): ContainerQueryResult {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n if (!containerRegistry.has(id)) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n minWidth: CONTAINER_BREAKPOINTS[key] ?? key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n containerRegistry.set(id, {\r\n id,\r\n tag,\r\n containerName,\r\n breakpoints,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n injectContainerStyles(id, container, containerName)\r\n containerRegistry.get(id)!.cssInjected = true\r\n\r\n return { containerClass: id, hasContainer: true }\r\n}\r\n\r\n/**\r\n * Generate @container CSS rules dari breakpoint config.\r\n *\r\n * Native-first: Rust string building tanpa intermediate allocations.\r\n * JS fallback: `buildContainerRules()` loop.\r\n */\r\nexport function generateContainerCss(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n // Native-first: pass breakpoints ke Rust — satu NAPI call generate semua rules\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.buildContainerRules) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n return native.buildContainerRules(id, breakpoints, containerName ?? null)\r\n }\r\n } catch { /* fallback */ }\r\n\r\n // JS fallback\r\n return buildContainerRules(id, container, containerName)\r\n}\r\n\r\nexport function getContainerRegistry(): Map<string, ContainerEntry> {\r\n return containerRegistry\r\n}","/**\r\n * tailwind-styled-v4 — createTwMerge()\r\n *\r\n * Native-only: uses Rust `tw_merge_many`; requires native binding.\r\n * No JS fallback — tailwind-merge removed from bundle.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\nimport type { ThemeConfig } from \"./themeReader\"\r\n\r\nexport interface MergeOptions {\r\n prefix?: string\r\n separator?: string\r\n theme?: ThemeConfig\r\n}\r\n\r\nfunction normalizeClassInput(classLists: Array<string | undefined | null | false>): string[] {\r\n return classLists\r\n .filter(Boolean)\r\n .map((v) => String(v).trim())\r\n .filter((v) => v.length > 0)\r\n}\r\n\r\n/**\r\n * createTwMerge — returns a conflict-aware merge function.\r\n * Native-only: uses Rust `tw_merge_many`; throws if native binding unavailable.\r\n *\r\n * Note: `prefix` and `separator` options are not supported in native mode\r\n * (Tailwind v3/v4 defaults are used).\r\n */\r\nexport function createTwMerge(_options: MergeOptions = {}) {\r\n return function twMerge(...classLists: Array<string | undefined | null | false>): string {\r\n const clean = normalizeClassInput(classLists)\r\n if (clean.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeMany) {\r\n throw new Error(\"FATAL: Native binding 'twMergeMany' is required but not available.\")\r\n }\r\n return native.twMergeMany(clean)\r\n }\r\n}\r\n\r\nexport const twMerge = createTwMerge()\r\n\r\nexport function mergeWithRules(\r\n rules: Record<string, (classes: string[]) => string>,\r\n ...classLists: string[]\r\n): string {\r\n const base = twMerge(...classLists)\r\n const classes = Object.values(rules).reduce(\r\n (acc, rule) => twMerge(rule(acc)).split(/\\s+/).filter(Boolean),\r\n base.split(/\\s+/).filter(Boolean)\r\n )\r\n\r\n return classes.join(\" \")\r\n}\r\n","/**\r\n * tailwind-styled-v4 — Reactive State Engine\r\n *\r\n * Zero-JS CSS state management via data attributes.\r\n * No React re-render needed for style changes.\r\n *\r\n * How it works:\r\n * 1. tw.button({ state: { active: \"bg-blue-500\", loading: \"opacity-70\" } })\r\n * 2. State engine generates a unique class + injects CSS:\r\n * .tw-s-abc123[data-active=\"true\"] { @apply bg-blue-500; }\r\n * .tw-s-abc123[data-loading=\"true\"] { @apply opacity-70; }\r\n * 3. Component renders with the state class\r\n * 4. User sets data-active=\"true\" directly — no state needed\r\n *\r\n * Devtools integration:\r\n * All components register to __TW_STATE_REGISTRY__ for devtools inspection.\r\n */\r\n\r\nimport type { StateConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry — tracks all state-enabled components\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateComponentEntry {\r\n id: string\r\n tag: string\r\n states: string[]\r\n cssInjected: boolean\r\n}\r\n\r\nconst stateRegistry = new Map<string, StateComponentEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_STATE_REGISTRY__?: typeof stateRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_STATE_REGISTRY__ = stateRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Deterministic hash — same config → same class (no re-injection on HMR)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction hashState(tag: string, state: StateConfig): string {\r\n const key = tag + JSON.stringify(Object.entries(state).sort())\r\n const hash = key.split(\"\").reduce((h, char) => ((h << 5) + h) ^ char.charCodeAt(0), 5381)\r\n return `tw-s-${Math.abs(hash).toString(36).slice(0, 6)}`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator — Tailwind class → plain CSS via Rust (required)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Convert Tailwind utility classes → semicolon-separated inline CSS declarations.\r\n * Native-only: delegates ke Rust `tw_classes_to_css` (state_css.rs).\r\n *\r\n * @internal — called by injectStateStyles()\r\n */\r\nfunction twClassesToCss(classes: string): string {\r\n const native = getNativeBinding()\r\n if (!native?.twClassesToCss) {\r\n throw new Error(\"FATAL: Native binding 'twClassesToCss' is required but not available.\")\r\n }\r\n return native.twClassesToCss(classes)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Style injection — batched for performance (FIX CSS Rule Batching)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectStateStyles(id: string, state: StateConfig): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `tw-state-${id}`\r\n if (document.getElementById(styleId)) return // already injected\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n if (rules.length === 0) return\r\n\r\n // Try batched injector first (available when runtime-css is installed)\r\n try {\r\n const { batchedInject } = require(\"@tailwind-styled/runtime-css/batched\") as {\r\n batchedInject: (css: string) => void\r\n }\r\n for (const rule of rules) batchedInject(rule)\r\n return\r\n } catch {\r\n // Fallback: per-element style tag (original behavior)\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-state\", id)\r\n style.textContent = rules.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateEngineResult {\r\n /** CSS class to add to the component */\r\n stateClass: string\r\n /** Whether this component uses state (for SSR data attributes) */\r\n hasState: true\r\n /** List of state names (for devtools) */\r\n stateNames: string[]\r\n}\r\n\r\n/**\r\n * Process a StateConfig for a component.\r\n * Returns the state class and injects CSS (client-side only).\r\n */\r\nexport function processState(tag: string, state: StateConfig): StateEngineResult {\r\n const id = hashState(tag, state)\r\n const stateNames = Object.keys(state)\r\n\r\n // Register for devtools\r\n if (!stateRegistry.has(id)) {\r\n stateRegistry.set(id, {\r\n id,\r\n tag,\r\n states: stateNames,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n // Inject CSS (client only)\r\n injectStateStyles(id, state)\r\n\r\n // Mark as injected\r\n const entry = stateRegistry.get(id)!\r\n entry.cssInjected = true\r\n\r\n return { stateClass: id, hasState: true, stateNames }\r\n}\r\n\r\n/**\r\n * Generate SSR-safe CSS string for a state config.\r\n * Used by SSR to inject styles into <head>.\r\n */\r\nexport function generateStateCss(tag: string, state: StateConfig): string {\r\n const id = hashState(tag, state)\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Get the state registry (for devtools).\r\n */\r\nexport function getStateRegistry(): Map<string, StateComponentEntry> {\r\n return stateRegistry\r\n}","// AnimateOptions loaded dynamically to avoid bundling @tailwind-styled/animate\r\ntype AnimateOptions = { from: string; to: string; duration?: number; easing?: string; delay?: number; fill?: string; iterations?: number | \"infinite\"; direction?: string; name?: string }\r\nimport React from \"react\"\r\n\r\nimport { processContainer } from \"./containerQuery\"\r\nimport { twMerge } from \"./merge\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport { processState } from \"./stateEngine\"\r\nimport type { ComponentConfig, TwStyledComponent } from \"./types\"\r\n\r\nconst ALWAYS_BLOCKED = new Set([\"base\", \"_ref\", \"state\", \"container\", \"containerName\"])\r\n\r\n// ── Sub-component auto-registration ──────────────────────────────────────────\r\n\r\n/**\r\n * Extract sub-component blocks dari template → Map<name, classes>\r\n * Native-first: delegates ke Rust `parse_subcomponent_blocks_napi`.\r\n * No JS fallback — native binding required.\r\n */\r\nfunction parseSubComponentBlocks(template: string): Map<string, string> {\r\n const native = getNativeBinding()\r\n if (!native?.parseSubcomponentBlocksNapi) {\r\n throw new Error(\"FATAL: Native binding 'parseSubcomponentBlocksNapi' is required but not available.\")\r\n }\r\n const result = native.parseSubcomponentBlocksNapi(template, \"tw\")\r\n const raw = JSON.parse(result.subMapJson) as Record<string, string>\r\n return new Map(Object.entries(raw))\r\n}\r\n\r\n/**\r\n * Strip semua sub-component blocks dari template string.\r\n * Native-first: uses result dari parse_subcomponent_blocks_napi.base_classes.\r\n * JS fallback: regex strip.\r\n */\r\nfunction extractBaseClasses(template: string): string {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.parseSubcomponentBlocksNapi) {\r\n const result = native.parseSubcomponentBlocksNapi(template, \"tw\")\r\n return result.baseClasses\r\n }\r\n } catch {\r\n // fall through\r\n }\r\n\r\n return template\r\n .replace(/(?:\\[[a-zA-Z][a-zA-Z0-9_-]*\\]|[a-zA-Z][a-zA-Z0-9_-]*)\\s*\\{[^}]*\\}/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim()\r\n}\r\n\r\n/**\r\n * Buat sub-component React FC dengan classes-nya sendiri.\r\n * className prop di-merge ke belakang agar bisa di-override dari luar.\r\n */\r\nfunction createSubComponentAccessor(\r\n parentDisplayName: string,\r\n name: string,\r\n classes: string\r\n): React.FC<{ children?: React.ReactNode; className?: string }> {\r\n const SubComponent: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) =>\r\n React.createElement(\r\n \"span\",\r\n { className: className ? `${classes} ${className}` : classes },\r\n children\r\n )\r\n SubComponent.displayName = `${parentDisplayName}[${name}]`\r\n return SubComponent\r\n}\r\n\r\n/** Register semua sub-components ke component object.\r\n * Sumber: (1) config.sub object — prioritas utama, TypeScript infer keys-nya.\r\n * (2) parseSubComponentBlocks dari template string — fallback untuk template literal syntax.\r\n */\r\nfunction registerSubComponents<P extends object>(\r\n component: TwStyledComponent<P>,\r\n template: string,\r\n configSub?: Record<string, string>\r\n): void {\r\n const displayName = component.displayName ?? \"tw\"\r\n const map = component as unknown as Record<string, unknown>\r\n\r\n // Priority 1: config.sub object — explicit, fully typed\r\n if (configSub) {\r\n for (const [name, classes] of Object.entries(configSub)) {\r\n map[name] = createSubComponentAccessor(displayName, name, classes.trim().replace(/\\s+/g, \" \"))\r\n }\r\n }\r\n\r\n // Priority 2: template block parsing — untuk template literal syntax\r\n const blocks = parseSubComponentBlocks(template)\r\n for (const [name, classes] of blocks) {\r\n if (!(name in map)) {\r\n map[name] = createSubComponentAccessor(displayName, name, classes)\r\n }\r\n }\r\n}\r\n\r\ntype RuntimeProps = Record<string, unknown> & { className?: string }\r\n\r\nfunction normalizeClassName(value: unknown): string | undefined {\r\n return typeof value === \"string\" ? value : undefined\r\n}\r\n\r\nfunction makeFilterProps(variantKeys: Set<string>) {\r\n return function filterProps(props: Record<string, unknown>): Record<string, unknown> {\r\n const out: Record<string, unknown> = {}\r\n for (const key in props) {\r\n if (variantKeys.has(key)) continue\r\n if (key.startsWith(\"$\")) continue\r\n if (ALWAYS_BLOCKED.has(key)) continue\r\n out[key] = props[key]\r\n }\r\n return out\r\n }\r\n}\r\n\r\nfunction resolveVariants(\r\n variants: Record<string, Record<string, string>>,\r\n props: Record<string, unknown>,\r\n defaults: Record<string, string>\r\n): string {\r\n const binding = getNativeBinding()\r\n if (!binding?.resolveSimpleVariants) {\r\n throw new Error(\"FATAL: Native binding 'resolveSimpleVariants' is required but not available.\")\r\n }\r\n const cleanProps: Record<string, string> = {}\r\n for (const [k, v] of Object.entries(props)) {\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n return binding.resolveSimpleVariants(null, variants, defaults, cleanProps)\r\n}\r\n\r\nfunction resolveCompound(\r\n compounds: ReadonlyArray<{ readonly class: string; readonly [key: string]: unknown }>,\r\n props: Record<string, unknown>\r\n): string {\r\n const classes: string[] = []\r\n for (const compound of compounds) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n [key: string]: unknown\r\n }\r\n const matches = Object.entries(conditions).every(([key, value]) => props[key] === value)\r\n if (matches) {\r\n classes.push(compoundClass)\r\n }\r\n }\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Carry over subcomponent keys from source to target (exclude internal methods) */\r\nfunction carryOverSubComponents<P extends object>(\r\n target: TwStyledComponent<P>,\r\n source: TwStyledComponent<P>\r\n): void {\r\n const INTERNAL_KEYS = new Set([\"extend\", \"withVariants\", \"animate\", \"withSub\", \"displayName\"])\r\n for (const key of Object.keys(source)) {\r\n if (!INTERNAL_KEYS.has(key)) {\r\n ;(target as unknown as Record<string, unknown>)[key] = (source as unknown as Record<string, unknown>)[key]\r\n }\r\n }\r\n}\r\n\r\nfunction attachExtend<P extends object>(\r\n component: TwStyledComponent<P>,\r\n originalTag: React.ElementType,\r\n base: string,\r\n config: string | ComponentConfig\r\n): TwStyledComponent<P> {\r\n /**\r\n * Extend component dengan extra classes (template literal).\r\n *\r\n * @example\r\n * const PrimaryBtn = Button.extend`bg-blue-500 text-white`\r\n */\r\n function extendWithClasses(strings: TemplateStringsArray): TwStyledComponent<P>\r\n /**\r\n * Extend component dengan extra classes + variant overrides (object).\r\n * Ini menyelesaikan gap desain yang disebutkan di CRITIQUE-20 #2.\r\n *\r\n * @example\r\n * // Extend classes DAN tambah variant sekaligus\r\n * const BigDangerBtn = Button.extend({\r\n * classes: \"text-lg px-8\",\r\n * variants: { loading: { true: \"opacity-50\" } },\r\n * defaultVariants: { loading: \"false\" }\r\n * })\r\n */\r\n function extendWithClasses(extendConfig: {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }): TwStyledComponent<P>\r\n function extendWithClasses(\r\n stringsOrConfig: TemplateStringsArray | {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n ): TwStyledComponent<P> {\r\n // Template literal path\r\n if (Array.isArray(stringsOrConfig) && \"raw\" in stringsOrConfig) {\r\n const rawExtra = (stringsOrConfig as TemplateStringsArray).raw.join(\"\").trim().replace(/\\s+/g, \" \")\r\n // Strip sub-blocks from both sides before merging base classes\r\n const merged = twMerge(extractBaseClasses(base), extractBaseClasses(rawExtra))\r\n const extended = createComponent<P>(\r\n originalTag,\r\n typeof config === \"string\" ? merged : { ...config, base: merged }\r\n )\r\n // Carry over parent sub-components first, then apply overrides from extend template\r\n carryOverSubComponents(extended, component)\r\n const extendSubBlocks = parseSubComponentBlocks(rawExtra)\r\n if (extendSubBlocks.size > 0) {\r\n const extComp = extended as unknown as Record<string, unknown>\r\n const displayName = extended.displayName ?? \"tw\"\r\n for (const [subName, subClasses] of extendSubBlocks) {\r\n extComp[subName] = createSubComponentAccessor(displayName, subName, subClasses)\r\n }\r\n }\r\n return extended\r\n }\r\n\r\n // Object config path — support extend + withVariants in one call\r\n const extCfg = stringsOrConfig as {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n const extraClasses = extCfg.classes ?? \"\"\r\n const merged = twMerge(extractBaseClasses(base), extraClasses)\r\n const existing = typeof config === \"object\" ? config : {}\r\n const extended = createComponent<P>(originalTag, {\r\n ...existing,\r\n base: merged,\r\n variants: { ...(existing.variants ?? {}), ...(extCfg.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(extCfg.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(extCfg.defaultVariants ?? {}),\r\n },\r\n })\r\n carryOverSubComponents(extended, component)\r\n return extended\r\n }\r\n\r\n component.extend = extendWithClasses as TwStyledComponent<P>[\"extend\"]\r\n\r\n component.withVariants = (newConfig: Partial<ComponentConfig>) => {\r\n const existing = typeof config === \"object\" ? config : {}\r\n return createComponent<P>(originalTag, {\r\n ...existing,\r\n base,\r\n variants: { ...(existing.variants ?? {}), ...(newConfig.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(newConfig.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(newConfig.defaultVariants ?? {}),\r\n },\r\n })\r\n }\r\n\r\n // .animate() dipindah ke tailwind-styled-v4/animate agar tidak bundle @tailwind-styled/animate\r\n // ke dalam main browser bundle (animate butuh Rust native binding → Node.js only)\r\n component.animate = async (_opts: AnimateOptions) => {\r\n console.warn(\r\n \"[tailwind-styled-v4] .animate() tidak tersedia di main bundle.\\n\" +\r\n \"Gunakan: import { animate } from \\\"tailwind-styled-v4/animate\\\"\"\r\n )\r\n return component\r\n }\r\n\r\n // .withSub<\"icon\" | \"badge\">() — declare sub-component names untuk TypeScript\r\n // Runtime: no-op, hanya untuk type inference\r\n component.withSub = (() => component) as TwStyledComponent<P>[\"withSub\"]\r\n\r\n return component\r\n}\r\n\r\nexport function createComponent<P extends object = Record<string, unknown>>(\r\n tag: React.ElementType,\r\n config: string | ComponentConfig\r\n): TwStyledComponent<P> {\r\n const isStatic = typeof config === \"string\"\r\n const base = typeof config === \"string\" ? config : (config.base ?? \"\")\r\n const variants = typeof config === \"string\" ? {} : (config.variants ?? {})\r\n const compoundVariants = typeof config === \"string\" ? [] : (config.compoundVariants ?? [])\r\n const defaultVariants = typeof config === \"string\" ? {} : (config.defaultVariants ?? {})\r\n const stateConfig = typeof config === \"string\" ? undefined : config.state\r\n const containerConfig = typeof config === \"string\" ? undefined : config.container\r\n const containerName = typeof config === \"string\" ? undefined : config.containerName\r\n const configSub = typeof config === \"string\" ? undefined : config.sub\r\n\r\n const stateResult = stateConfig\r\n ? processState(typeof tag === \"string\" ? tag : \"component\", stateConfig)\r\n : null\r\n const containerResult = containerConfig\r\n ? processContainer(typeof tag === \"string\" ? tag : \"component\", containerConfig, containerName)\r\n : null\r\n\r\n const engineClasses = [stateResult?.stateClass, containerResult?.containerClass]\r\n .filter(Boolean)\r\n .join(\" \")\r\n\r\n const filterProps = makeFilterProps(new Set(Object.keys(variants)))\r\n const tagLabel =\r\n typeof tag === \"string\" ? tag : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n\r\n if (isStatic || Object.keys(variants).length === 0) {\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: twMerge(extractBaseClasses(base), engineClasses, runtimeClassName),\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<P>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<P>(component, tag, base, config)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n }\r\n\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const variantClasses = resolveVariants(variants, props, defaultVariants)\r\n const compoundClasses = resolveCompound(compoundVariants, props)\r\n\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: twMerge(extractBaseClasses(base), variantClasses, compoundClasses, engineClasses, runtimeClassName),\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<P>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<P>(component, tag, base, config)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n}\r\n\r\n// ── Sub-component fallback proxy ──────────────────────────────────────────────\r\n/**\r\n * Wrap component dengan Proxy sehingga akses ke sub-component yang tidak\r\n * terdefinisi (misal Button.footer) tidak mengembalikan undefined dan crash,\r\n * tapi fallback ke <span> passthrough yang render children-nya saja.\r\n */\r\nconst SKIP_PROXY_KEYS = new Set([\r\n \"extend\", \"withVariants\", \"animate\", \"withSub\",\r\n \"displayName\", \"$$typeof\", \"render\", \"prototype\",\r\n \"__esModule\", \"then\",\r\n])\r\n\r\nfunction wrapWithSubProxy<P extends object>(\r\n component: TwStyledComponent<P>,\r\n tagLabel: string\r\n): TwStyledComponent<P> {\r\n return new Proxy(component, {\r\n get(target, prop: string | symbol) {\r\n const value = (target as unknown as Record<string | symbol, unknown>)[prop]\r\n // Jika sudah ada (sub-component terdefinisi, method, dll) → pakai langsung\r\n if (value !== undefined) return value\r\n // Skip known internal / React symbols\r\n if (typeof prop === \"symbol\") return value\r\n if (SKIP_PROXY_KEYS.has(prop as string)) return value\r\n // Fallback: buat passthrough <span> untuk sub-component yang tidak terdefinisi\r\n const Fallback: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => React.createElement(\"span\", { className }, children)\r\n Fallback.displayName = `tw.${tagLabel}.${prop as string}(fallback)`\r\n return Fallback\r\n },\r\n })\r\n}","/**\r\n * tailwind-styled-v4 — cv()\r\n *\r\n * Runtime: native-first with fallback to generated variant tables.\r\n *\r\n * Dua mode:\r\n * 1. GENERATED (optimal) — import dari variants.generated.ts hasil `npx tw compile-variants`\r\n * → O(1) lookup, static, zero runtime computation\r\n * 2. RUNTIME (fallback) — compute on-the-fly via native binding\r\n * → Requires native Rust binding for variant resolution\r\n */\r\n\r\nimport { twMerge } from \"./merge\"\r\nimport type { ComponentConfig, CvFn, InferVariantProps } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// Registry untuk generated lookup tables\r\n// Diisi oleh cv.register() dari generated file\r\nconst __generatedRegistry: Record<string, Record<string, string>> = {}\r\n\r\n/**\r\n * Register pre-computed variant table dari generated file.\r\n * Dipanggil otomatis saat import variants.generated.ts\r\n */\r\nexport function registerVariantTable(\r\n componentId: string,\r\n table: Record<string, string>\r\n): void {\r\n __generatedRegistry[componentId] = table\r\n}\r\n\r\nfunction lookupGenerated(\r\n componentId: string,\r\n props: Record<string, unknown>,\r\n defaultVariants?: Record<string, string>\r\n): string | undefined {\r\n const table = __generatedRegistry[componentId]\r\n if (!table) return undefined\r\n\r\n const merged = { ...defaultVariants, ...props }\r\n const key = Object.keys(merged)\r\n .sort()\r\n .filter((k) => k !== \"className\")\r\n .map((k) => `${k}:${String(merged[k])}`)\r\n .join(\"|\")\r\n\r\n return table[key]\r\n}\r\n\r\n// Native Rust variant resolution — O(1) HashMap lookup, zero JS allocation\r\nfunction resolveVariantsNative<C extends ComponentConfig>(\r\n config: C,\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>>\r\n): string {\r\n const { base = \"\", variants = {}, compoundVariants = [], defaultVariants = {} } = config\r\n\r\n const binding = getNativeBinding()\r\n if (binding?.resolveSimpleVariants) {\r\n // Pre-merge di JS: defaultVariants sebagai base, user props override\r\n // Ini lebih reliable daripada bergantung pada Rust untuk merge priority\r\n const mergedProps: Record<string, string> = {}\r\n for (const [k, v] of Object.entries(defaultVariants as Record<string, string>)) {\r\n if (v !== undefined && v !== null) mergedProps[k] = String(v)\r\n }\r\n for (const [k, v] of Object.entries(props)) {\r\n if (v !== undefined && v !== null && k !== \"className\") {\r\n mergedProps[k] = String(v)\r\n }\r\n }\r\n\r\n let result = binding.resolveSimpleVariants(\r\n base || null,\r\n variants as Record<string, Record<string, string>>,\r\n {}, // already merged into mergedProps\r\n mergedProps\r\n )\r\n\r\n // compound variants — still resolved in JS (Rust resolveSimpleVariants tidak handle compound)\r\n const resolved: Record<string, unknown> = { ...defaultVariants, ...props }\r\n const extra: string[] = []\r\n for (const compound of compoundVariants) {\r\n const { class: compoundClass, className: compoundClassName, ...conditions } = compound as Record<string, unknown>\r\n const matches = Object.entries(conditions).every(([key, val]) => resolved[key] === val)\r\n if (matches) {\r\n if (compoundClass) extra.push(String(compoundClass))\r\n if (compoundClassName) extra.push(String(compoundClassName))\r\n }\r\n }\r\n\r\n if (extra.length > 0) result = `${result} ${extra.join(\" \")}`.trim()\r\n return result\r\n }\r\n\r\n // binding not available — throw\r\n throw new Error(\"FATAL: Native binding 'resolveSimpleVariants' is required but not available.\")\r\n}\r\n\r\nexport function cv<C extends ComponentConfig>(config: C, componentId?: string): CvFn<C> {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n const { variants = {}, defaultVariants = {} } = config\r\n for (const dk of Object.keys(defaultVariants)) {\r\n if (!(dk in variants)) {\r\n console.warn(`[tailwind-styled] defaultVariants[\"${dk}\"] not in variants`)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>> = {} as never\r\n ): string => {\r\n let result: string\r\n\r\n // Mode 1: generated lookup table (O(1), hasil compile-variants)\r\n if (componentId) {\r\n const generated = lookupGenerated(\r\n componentId,\r\n props as Record<string, unknown>,\r\n config.defaultVariants as Record<string, string>\r\n )\r\n result = generated ?? resolveVariantsNative(config, props)\r\n } else {\r\n // Mode 2: pure JS fallback\r\n result = resolveVariantsNative(config, props)\r\n }\r\n\r\n return props.className ? twMerge(result, props.className) : result\r\n }\r\n}\r\n\r\nexport interface VariantValidationError {\r\n type: \"unknown_key\" | \"unknown_value\" | \"missing_default\" | \"compound_condition_missing\"\r\n key: string\r\n value?: string\r\n message: string\r\n}\r\n\r\nexport interface VariantValidationResult {\r\n valid: boolean\r\n errors: VariantValidationError[]\r\n warnings: string[]\r\n}\r\n\r\nexport function validateVariantConfig(config: ComponentConfig): VariantValidationResult {\r\n const errors: VariantValidationError[] = []\r\n const warnings: string[] = []\r\n const { variants = {}, defaultVariants = {}, compoundVariants = [] } = config\r\n\r\n for (const [key, val] of Object.entries(defaultVariants)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `defaultVariants[\"${key}\"] not in variants` })\r\n } else if (val && !((variants[key] ?? {})[val])) {\r\n errors.push({ type: \"unknown_value\", key, value: val, message: `invalid value \"${val}\"` })\r\n }\r\n }\r\n\r\n for (const [i, compound] of compoundVariants.entries()) {\r\n const { class: _cls, ...conditions } = compound\r\n for (const [key] of Object.entries(conditions)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `compoundVariants[${i}]: \"${key}\" not in variants` })\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings }\r\n}","/**\r\n * tailwind-styled-v4 v2 — cx / cn\r\n *\r\n * Native-first:\r\n * cn() → simple join (no conflict resolution) — delegates ke Rust `resolve_class_names`\r\n * cx() → conflict-aware merge — delegates ke Rust `tw_merge` (required)\r\n * cxm() → alias cx() untuk backward compat\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\ntype ClassValue = string | undefined | null | false | 0\r\n\r\n/**\r\n * cn — simple class name joiner (no conflict resolution).\r\n * Native-first: delegates ke Rust `resolve_class_names` yang filter+join\r\n * dalam satu pass tanpa intermediate allocations.\r\n *\r\n * @example cn(\"p-4\", isActive && \"opacity-100\") → \"p-4 opacity-100\"\r\n */\r\nexport function cn(...inputs: (ClassValue | ClassValue[])[]): string {\r\n const native = getNativeBinding()\r\n if (!native?.resolveClassNames) {\r\n throw new Error(\"FATAL: Native binding 'resolveClassNames' is required but not available.\")\r\n }\r\n const strings = (inputs as unknown[]).flat().filter(Boolean) as string[]\r\n return native.resolveClassNames(strings)\r\n}\r\n\r\n/**\r\n * cx — conflict-aware class merger.\r\n * Native-first: delegates ke Rust `tw_merge` (required).\r\n * Mendukung array inputs — flatten sebelum di-pass ke native.\r\n *\r\n * @example cx(\"p-4 p-8\") → \"p-8\"\r\n * @example cx(\"bg-red-500\", \"bg-blue-500\") → \"bg-blue-500\"\r\n * @example cx([\"flex\", \"items-center\"], \"px-4\") → \"flex items-center px-4\"\r\n */\r\nexport function cx(...inputs: (ClassValue | ClassValue[])[]): string {\r\n // Flatten arrays + filter falsy in one pass\r\n const filtered = (inputs as unknown[]).flat().filter(Boolean) as string[]\r\n if (filtered.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeMany && !native?.twMerge) {\r\n throw new Error(\"FATAL: Native binding 'twMerge' or 'twMergeMany' is required but not available.\")\r\n }\r\n if (native.twMergeMany) {\r\n return native.twMergeMany(filtered)\r\n }\r\n return native.twMerge!(filtered.join(\" \"))\r\n}\r\n\r\n/**\r\n * cxm — alias untuk cx(), kept for backward compatibility.\r\n * @deprecated Use cx() instead.\r\n */\r\nexport const cxm = cx\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Delegates ke Rust cx_nested yang flatten rekursif dalam satu pass.\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n * @example cxn([\"p-4\", [[\"flex\", \"gap-2\"]]]) → \"p-4 flex gap-2\"\r\n */\r\n/**\r\n * Flatten nested array ke string[] — recursive.\r\n * Internal helper untuk cxn().\r\n */\r\nfunction flattenInputs(inputs: unknown[]): string[] {\r\n const result: string[] = []\r\n for (const item of inputs) {\r\n if (typeof item === \"string\" && item) result.push(item)\r\n else if (Array.isArray(item)) result.push(...flattenInputs(item as unknown[]))\r\n // null, false, 0, undefined — skip\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Flatten di TS lalu delegate ke native resolveClassNames (zero overhead).\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n */\r\nexport function cxn(inputs: unknown[]): string {\r\n const flat = flattenInputs(inputs)\r\n if (flat.length === 0) return \"\"\r\n const native = getNativeBinding()\r\n if (native?.resolveClassNames) return native.resolveClassNames(flat)\r\n return flat.join(\" \")\r\n}","import React from \"react\"\r\n\r\nimport type { TokenMap } from '@tailwind-styled/shared'\r\nexport type { TokenMap }\r\n\r\nexport type TokenSubscriber = (tokens: TokenMap) => void\r\n\r\nexport interface LiveTokenSet {\r\n vars: Record<string, string>\r\n get(name: string): string | undefined\r\n set(name: string, value: string): void\r\n setAll(tokens: TokenMap): void\r\n snapshot(): TokenMap\r\n}\r\n\r\nexport interface LiveTokenEngineBridge {\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n subscribeTokens(fn: TokenSubscriber): () => void\r\n subscribe?(fn: TokenSubscriber): () => void\r\n}\r\n\r\ninterface LiveTokenEngineRuntime {\r\n liveToken(tokens: TokenMap): LiveTokenSet\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n generateTokenCssString(): string\r\n subscribe(fn: TokenSubscriber): () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function tokenVar(name: string): string {\r\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n return `--tw-token-${normalized}`\r\n}\r\n\r\nexport function tokenRef(name: string): string {\r\n return `var(${tokenVar(name)})`\r\n}\r\n\r\nconst buildRootCss = (tokens: TokenMap): string => {\r\n const vars = Object.entries(tokens)\r\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\r\n .join(\"\\n\")\r\n return `:root {\\n${vars}\\n}`\r\n}\r\n\r\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\r\n const state = {\r\n currentTokens: {} as TokenMap,\r\n styleEl: null as HTMLStyleElement | null,\r\n }\r\n const subscribers = new Set<TokenSubscriber>()\r\n\r\n const syncStyleEl = (): void => {\r\n if (typeof document === \"undefined\") return\r\n\r\n if (!state.styleEl) {\r\n const styleEl = document.createElement(\"style\")\r\n styleEl.id = \"tw-live-tokens\"\r\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\r\n document.head.appendChild(styleEl)\r\n state.styleEl = styleEl\r\n }\r\n\r\n state.styleEl.textContent = buildRootCss(state.currentTokens)\r\n }\r\n\r\n const notifySubscribers = (): void => {\r\n const snapshot = { ...state.currentTokens }\r\n for (const subscriber of subscribers) {\r\n try {\r\n subscriber(snapshot)\r\n } catch {\r\n // Intentionally ignore subscriber errors.\r\n }\r\n }\r\n }\r\n\r\n const setToken = (name: string, value: string): void => {\r\n state.currentTokens = { ...state.currentTokens, [name]: value }\r\n if (typeof document !== \"undefined\") {\r\n document.documentElement.style.setProperty(tokenVar(name), value)\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const setTokens = (tokens: TokenMap): void => {\r\n state.currentTokens = { ...state.currentTokens, ...tokens }\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const applyTokenSet = (tokens: TokenMap): void => {\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const name of Object.keys(state.currentTokens)) {\r\n if (!(name in tokens)) {\r\n root.style.removeProperty(tokenVar(name))\r\n }\r\n }\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n\r\n state.currentTokens = { ...tokens }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n return {\r\n liveToken(tokens: TokenMap): LiveTokenSet {\r\n setTokens(tokens)\r\n\r\n const vars: Record<string, string> = {}\r\n for (const name of Object.keys(tokens)) {\r\n vars[name] = tokenRef(name)\r\n }\r\n\r\n return {\r\n vars,\r\n get(name: string) {\r\n return state.currentTokens[name]\r\n },\r\n set(name: string, value: string) {\r\n setToken(name, value)\r\n },\r\n setAll(nextTokens: TokenMap) {\r\n setTokens(nextTokens)\r\n },\r\n snapshot() {\r\n return { ...state.currentTokens }\r\n },\r\n }\r\n },\r\n getToken(name: string): string | undefined {\r\n return state.currentTokens[name]\r\n },\r\n getTokens(): TokenMap {\r\n return { ...state.currentTokens }\r\n },\r\n setToken,\r\n setTokens,\r\n applyTokenSet,\r\n generateTokenCssString(): string {\r\n return buildRootCss(state.currentTokens)\r\n },\r\n subscribe(fn: TokenSubscriber): () => void {\r\n subscribers.add(fn)\r\n return () => {\r\n subscribers.delete(fn)\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst engine = createLiveTokenEngine()\r\n\r\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\r\n return engine.liveToken(tokens)\r\n}\r\n\r\nexport function setToken(name: string, value: string): void {\r\n engine.setToken(name, value)\r\n}\r\n\r\nexport function setTokens(tokens: TokenMap): void {\r\n engine.setTokens(tokens)\r\n}\r\n\r\nexport function applyTokenSet(tokens: TokenMap): void {\r\n engine.applyTokenSet(tokens)\r\n}\r\n\r\nexport function getToken(name: string): string | undefined {\r\n return engine.getToken(name)\r\n}\r\n\r\nexport function getTokens(): TokenMap {\r\n return engine.getTokens()\r\n}\r\n\r\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\r\n return engine.subscribe(fn)\r\n}\r\n\r\nexport function generateTokenCssString(): string {\r\n return engine.generateTokenCssString()\r\n}\r\n\r\nexport function createUseTokens() {\r\n return function useTokens(): TokenMap {\r\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\r\n\r\n React.useEffect(() => {\r\n setTokensState(engine.getTokens())\r\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\r\n }, [])\r\n\r\n return tokens\r\n }\r\n}\r\n\r\nexport const liveTokenEngine: LiveTokenEngineBridge = {\r\n getToken: engine.getToken,\r\n getTokens: engine.getTokens,\r\n setToken: engine.setToken,\r\n setTokens: engine.setTokens,\r\n applyTokenSet: engine.applyTokenSet,\r\n subscribeTokens: engine.subscribe,\r\n subscribe: engine.subscribe,\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\r\n }\r\n}\r\n\r\nconst globalTokenEngine = globalThis as typeof globalThis & {\r\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\r\n}\r\n\r\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\r\n}\r\n","import React from \"react\"\r\n\r\nexport interface SubComponentProps {\r\n children?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport interface SubComponentEntry {\r\n name: string\r\n component: React.FC<SubComponentProps>\r\n defaultClasses?: string\r\n}\r\n\r\nconst subComponentRegistry = new Map<string, SubComponentEntry>()\r\n\r\nexport function registerSubComponent(entry: SubComponentEntry): void {\r\n subComponentRegistry.set(entry.name, entry)\r\n}\r\n\r\nexport function getSubComponent(name: string): SubComponentEntry | undefined {\r\n return subComponentRegistry.get(name)\r\n}\r\n\r\nexport function getAllSubComponents(): SubComponentEntry[] {\r\n return Array.from(subComponentRegistry.values())\r\n}\r\n\r\nexport function withSubComponents<T extends object>(\r\n Component: T,\r\n subComponentNames: string[]\r\n): T & Record<string, React.FC<SubComponentProps>> {\r\n const result = { ...Component } as Record<string, unknown>\r\n for (const name of subComponentNames) {\r\n const entry = getSubComponent(name)\r\n if (entry) result[name] = entry.component\r\n }\r\n return result as T & Record<string, React.FC<SubComponentProps>>\r\n}\r\n\r\nregisterSubComponent({\r\n name: \"icon\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"text\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"badge\",\r\n component: ({ children, className }) =>\r\n React.createElement(\r\n \"span\",\r\n {\r\n className: `ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white ${className || \"\"}`,\r\n },\r\n children\r\n ),\r\n defaultClasses: \"ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"header\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"header\", { className: `font-bold text-lg ${className || \"\"}` }, children),\r\n defaultClasses: \"font-bold text-lg\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"body\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `flex-1 ${className || \"\"}` }, children),\r\n defaultClasses: \"flex-1\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"footer\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"footer\", { className: `border-t pt-4 ${className || \"\"}` }, children),\r\n defaultClasses: \"border-t pt-4\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"content\",\r\n component: ({ children, className }) => React.createElement(\"div\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"title\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `font-semibold ${className || \"\"}` }, children),\r\n defaultClasses: \"font-semibold\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"message\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `text-sm ${className || \"\"}` }, children),\r\n defaultClasses: \"text-sm\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"close\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"span\", { className: `cursor-pointer ${className || \"\"}` }, children),\r\n defaultClasses: \"cursor-pointer\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"image\",\r\n component: ({ className }) => React.createElement(\"img\", { className }),\r\n defaultClasses: \"\",\r\n})\r\n","import { twMerge } from \"./merge\"\r\n\r\nexport interface StyledOptions {\r\n base?: string\r\n variants?: Record<string, Record<string, string>>\r\n defaultVariants?: Record<string, string>\r\n compoundVariants?: Array<{\r\n variants: Record<string, string>\r\n className: string\r\n }>\r\n}\r\n\r\nexport type StyledProps = {\r\n className?: string\r\n} & Record<string, string | number | boolean | undefined>\r\n\r\nfunction resolveVariantClass(options: StyledOptions, props: StyledProps): string[] {\r\n const out: string[] = []\r\n const variants = options.variants ?? {}\r\n const defaults = options.defaultVariants ?? {}\r\n\r\n for (const [variantName, valueMap] of Object.entries(variants)) {\r\n const value = props[variantName] ?? defaults[variantName]\r\n if (value === undefined) continue\r\n\r\n const key = String(value)\r\n const cls = valueMap[key]\r\n if (cls) out.push(cls)\r\n }\r\n\r\n for (const compound of options.compoundVariants ?? []) {\r\n const matches = Object.entries(compound.variants).every(([k, expected]) => {\r\n const current = props[k] ?? defaults[k]\r\n return String(current) === expected\r\n })\r\n\r\n if (matches) out.push(compound.className)\r\n }\r\n\r\n return out\r\n}\r\n\r\nexport function resolveStyledClassName(options: StyledOptions, props: StyledProps = {}): string {\r\n const parts = [options.base ?? \"\", ...resolveVariantClass(options, props), props.className ?? \"\"]\r\n return twMerge(...parts)\r\n}\r\n\r\nexport function styled(options: StyledOptions) {\r\n return function getClassName(props: StyledProps = {}): string {\r\n return resolveStyledClassName(options, props)\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — createStyledSystem()\r\n *\r\n * Design System Factory — Mode 3 API.\r\n *\r\n * Level 1 — utility: tw.div`p-4`\r\n * Level 2 — styled: tw(Button)`px-4`\r\n * Level 3 — design system: ui.button({ variant: \"primary\" })\r\n *\r\n * Usage:\r\n * const ui = createStyledSystem({\r\n * tokens: {\r\n * colors: { primary: \"#6366f1\", muted: \"#71717a\" },\r\n * radius: { base: \"0.5rem\", full: \"9999px\" },\r\n * },\r\n * components: {\r\n * button: {\r\n * base: \"inline-flex items-center font-medium transition-colors\",\r\n * variants: {\r\n * variant: {\r\n * primary: \"bg-[var(--sys-color-primary)] text-white\",\r\n * ghost: \"bg-transparent border border-current\",\r\n * danger: \"bg-red-500 text-white\",\r\n * },\r\n * size: {\r\n * sm: \"h-8 px-3 text-sm\",\r\n * md: \"h-10 px-4 text-base\",\r\n * lg: \"h-12 px-6 text-lg\",\r\n * },\r\n * },\r\n * defaultVariants: { variant: \"primary\", size: \"md\" },\r\n * },\r\n * },\r\n * })\r\n *\r\n * const Button = ui.button()\r\n * // → <Button variant=\"primary\" size=\"lg\" />\r\n *\r\n * // Token access\r\n * ui.token(\"colors.primary\") // → \"var(--sys-color-primary)\"\r\n * ui.cssVar(\"colors.primary\") // → \"#6366f1\"\r\n */\r\n\r\nimport type React from \"react\"\r\n\r\nimport { createComponent } from \"./createComponent\"\r\nimport type { ComponentConfig, TwStyledComponent } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// System token types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface SystemComponentConfig extends ComponentConfig {\r\n /** Extra class applied only when used from the system (e.g. system-level resets) */\r\n systemBase?: string\r\n /** HTML tag for the component */\r\n tag?: string\r\n}\r\n\r\nexport interface StyledSystemConfig<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n> {\r\n /** Design tokens — injected as CSS custom properties under --sys-{group}-{name} */\r\n tokens?: T\r\n /** Component presets */\r\n components?: C\r\n /** CSS variable prefix. Default: \"sys\" → --sys-color-primary */\r\n prefix?: string\r\n /** If true, auto-inject token CSS vars into :root on init. Default: true */\r\n injectTokens?: boolean\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Token → CSS var helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction tokenVarName(prefix: string, group: string, name: string): string {\r\n return `--${prefix}-${group}-${name}`\r\n}\r\n\r\nfunction tokenVarRef(prefix: string, group: string, name: string): string {\r\n return `var(${tokenVarName(prefix, group, name)})`\r\n}\r\n\r\nfunction resolveTokenRef(tokens: SystemTokenMap, prefix: string, value: string): string {\r\n // If value is \"token:colors.primary\" → resolve to var(--sys-colors-primary)\r\n if (value.startsWith(\"token:\")) {\r\n const path = value.slice(6)\r\n const [group, name] = path.split(\".\")\r\n if (group && name && tokens[group]?.[name] !== undefined) {\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction injectTokensToRoot(tokens: SystemTokenMap, prefix: string): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const lines: string[] = [\":root {\"]\r\n for (const [group, map] of Object.entries(tokens)) {\r\n for (const [name, value] of Object.entries(map)) {\r\n lines.push(` ${tokenVarName(prefix, group, name)}: ${value};`)\r\n }\r\n }\r\n lines.push(\"}\")\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.textContent = lines.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Variant class resolver — replaces \"token:*\" references inside variant values\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction resolveComponentConfig(\r\n config: SystemComponentConfig,\r\n tokens: SystemTokenMap,\r\n prefix: string\r\n): ComponentConfig {\r\n const resolveStr = (s: string) => resolveTokenRef(tokens, prefix, s)\r\n\r\n const base = resolveStr(config.base ?? \"\")\r\n const systemBase = resolveStr(config.systemBase ?? \"\")\r\n const mergedBase = [systemBase, base].filter(Boolean).join(\" \")\r\n\r\n const variants: Record<string, Record<string, string>> = {}\r\n for (const [variantKey, variantMap] of Object.entries(config.variants ?? {})) {\r\n variants[variantKey] = {}\r\n for (const [optKey, classes] of Object.entries(variantMap)) {\r\n variants[variantKey][optKey] = classes.split(\" \").map(resolveStr).join(\" \")\r\n }\r\n }\r\n\r\n const compoundVariants = (config.compoundVariants ?? []).map((cv) => {\r\n const { class: cls, ...rest } = cv\r\n return { class: resolveStr(cls), ...rest }\r\n })\r\n\r\n return {\r\n base: mergedBase,\r\n variants,\r\n compoundVariants,\r\n defaultVariants: config.defaultVariants ?? {},\r\n state: config.state,\r\n container: config.container,\r\n containerName: config.containerName,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// StyledSystem instance type\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemComponentFactory<C extends SystemComponentConfig> = (\r\n overrides?: Partial<C>\r\n) => TwStyledComponent<Record<string, unknown>>\r\n\r\nexport type StyledSystemInstance<\r\n T extends SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig>,\r\n> = {\r\n [K in keyof C]: SystemComponentFactory<C[K]>\r\n} & {\r\n /**\r\n * Get the CSS variable reference for a token.\r\n * @example ui.token(\"colors.primary\") → \"var(--sys-colors-primary)\"\r\n */\r\n token(path: string): string\r\n /**\r\n * Get the raw value of a token.\r\n * @example ui.rawToken(\"colors.primary\") → \"#6366f1\"\r\n */\r\n rawToken(path: string): string | undefined\r\n /**\r\n * Update token values at runtime (re-injects into :root).\r\n */\r\n setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void\r\n /**\r\n * Access the resolved component config for a registered component.\r\n */\r\n getConfig(name: keyof C): ComponentConfig | undefined\r\n /**\r\n * The tokens object (for reference).\r\n */\r\n tokens: T\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createStyledSystem\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function createStyledSystem<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n>(config: StyledSystemConfig<T, C>): StyledSystemInstance<T, C> {\r\n const prefix = config.prefix ?? \"sys\"\r\n const tokens = (config.tokens ?? {}) as T\r\n const componentDefs = config.components ?? ({} as C)\r\n const shouldInject = config.injectTokens !== false\r\n\r\n // Inject tokens into :root on first call (client only)\r\n if (shouldInject && typeof window !== \"undefined\") {\r\n injectTokensToRoot(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n // Cache resolved component configs\r\n const resolvedConfigs = new Map<string, ComponentConfig>()\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n resolvedConfigs.set(\r\n name,\r\n resolveComponentConfig(compCfg, tokens as SystemTokenMap, prefix)\r\n )\r\n }\r\n\r\n // Build component factories\r\n const factories: Record<string, SystemComponentFactory<SystemComponentConfig>> = {}\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n const tag = compCfg.tag ?? \"div\"\r\n\r\n factories[name] = (overrides?: Partial<SystemComponentConfig>) => {\r\n const baseResolved = resolvedConfigs.get(name)!\r\n const runtimeTag = tag as React.ElementType\r\n\r\n if (!overrides || Object.keys(overrides).length === 0) {\r\n return createComponent(runtimeTag, baseResolved)\r\n }\r\n\r\n // Merge overrides into resolved config\r\n const overrideResolved = resolveComponentConfig(\r\n overrides as SystemComponentConfig,\r\n tokens as SystemTokenMap,\r\n prefix\r\n )\r\n\r\n const merged: ComponentConfig = {\r\n base: [baseResolved.base, overrideResolved.base].filter(Boolean).join(\" \"),\r\n variants: {\r\n ...(baseResolved.variants ?? undefined),\r\n ...(overrideResolved.variants ?? undefined),\r\n },\r\n compoundVariants: [\r\n ...(baseResolved.compoundVariants ?? []),\r\n ...(overrideResolved.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(baseResolved.defaultVariants ?? undefined),\r\n ...(overrideResolved.defaultVariants ?? undefined),\r\n },\r\n state: overrideResolved.state ?? baseResolved.state,\r\n container: overrideResolved.container ?? baseResolved.container,\r\n containerName: overrideResolved.containerName ?? baseResolved.containerName,\r\n }\r\n\r\n return createComponent(runtimeTag, merged)\r\n }\r\n }\r\n\r\n // Token utilities\r\n function token(path: string): string {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return path\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n\r\n function rawToken(path: string): string | undefined {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return undefined\r\n return (tokens as SystemTokenMap)[group]?.[name]\r\n }\r\n\r\n function setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n // Find or create the :root style element\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n const style =\r\n (document.getElementById(styleId) as HTMLStyleElement | null) ??\r\n (() => {\r\n const el = document.createElement(\"style\")\r\n el.id = styleId\r\n document.head.appendChild(el)\r\n return el\r\n })()\r\n\r\n // Merge updates into tokens and re-generate\r\n for (const [group, map] of Object.entries(updates)) {\r\n if (!tokens[group as keyof T]) continue\r\n for (const [name, value] of Object.entries(map as Record<string, string>)) {\r\n ;(tokens as SystemTokenMap)[group][name] = value\r\n }\r\n }\r\n\r\n const lines: string[] = [\":root {\"]\r\n for (const [group, map] of Object.entries(tokens as SystemTokenMap)) {\r\n for (const [name, value] of Object.entries(map)) {\r\n lines.push(` ${tokenVarName(prefix, group, name)}: ${value};`)\r\n }\r\n }\r\n lines.push(\"}\")\r\n style.textContent = lines.join(\"\\n\")\r\n }\r\n\r\n function getConfig(name: keyof C): ComponentConfig | undefined {\r\n return resolvedConfigs.get(name as string)\r\n }\r\n\r\n return Object.assign(factories, {\r\n token,\r\n rawToken,\r\n setTokens,\r\n getConfig,\r\n tokens,\r\n }) as StyledSystemInstance<T, C>\r\n}\r\n","/**\r\n * tailwind-styled-v4 v2 — tw\r\n *\r\n * API:\r\n * tw.div`p-4 bg-zinc-900`\r\n * tw.button`px-4 [icon] { h-4 w-4 }` ← sub-components inline\r\n * tw.button({ base: \"px-4\", variants: { size: { sm: \"text-sm\" } } })\r\n * tw(Link)`underline text-blue-400`\r\n * tw.server.div`p-4` ← server-only, compiler enforced + runtime dev warning\r\n */\r\n\r\nimport React from \"react\"\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type {\r\n ComponentConfig,\r\n TwComponentFactory,\r\n TwObject,\r\n TwServerObject,\r\n TwStyledComponent,\r\n TwTagFactory,\r\n TwTagFactoryAny,\r\n} from \"./types\"\r\n\r\n// types.ts is single source of truth — re-export for consumers\r\nexport type { TwComponentFactory, TwObject, TwServerObject, TwTagFactory }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Template parser\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface ParsedTemplate {\r\n /** Base classes — tanpa sub-component blocks */\r\n base: string\r\n /** Sub-component map: { icon: \"h-4 w-4 ...\", badge: \"px-2 ...\" } */\r\n subs: Record<string, string>\r\n /** Ada sub-component atau tidak */\r\n hasSubs: boolean\r\n}\r\n\r\n// JS fallback — hanya aktif jika native binding tidak tersedia (e.g. browser)\r\nconst SUB_RE = /(?:\\[([a-zA-Z][a-zA-Z0-9_-]*)\\]|([a-zA-Z][a-zA-Z0-9_-]*))\\s*\\{([^}]*)\\}/g\r\nconst COMMENT_RE = /\\/\\/[^\\n]*/g\r\n\r\nfunction parseTemplateFallback(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n const subs: Record<string, string> = {}\r\n let base = raw\r\n\r\n let match: RegExpExecArray | null\r\n SUB_RE.lastIndex = 0\r\n while ((match = SUB_RE.exec(raw)) !== null) {\r\n const name = match[1] ?? match[2]\r\n const inner = match[3]\r\n .replace(COMMENT_RE, \"\")\r\n .split(\"\\n\").map((l) => l.trim()).filter(Boolean).join(\" \")\r\n .replace(/\\s+/g, \" \").trim()\r\n\r\n subs[name] = inner\r\n base = base.replace(match[0], \"\")\r\n }\r\n\r\n const cleanBase = base\r\n .replace(COMMENT_RE, \"\")\r\n .split(\"\\n\").map((l) => l.trim()).filter(Boolean).join(\" \")\r\n .replace(/\\s+/g, \" \").trim()\r\n\r\n return { base: cleanBase, subs, hasSubs: Object.keys(subs).length > 0 }\r\n}\r\n\r\n/**\r\n * parseTemplate — native-first.\r\n *\r\n * Join strings+exprs di JS (TemplateStringsArray tidak bisa di-serialize ke NAPI),\r\n * lalu kirim raw string ke Rust untuk parsing.\r\n * Fallback ke pure-JS jika native tidak tersedia (browser / test env).\r\n */\r\nfunction parseTemplate(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n // Join dulu di JS — Rust terima satu raw string\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (binding?.parseTemplate) {\r\n const result = binding.parseTemplate(raw)\r\n // Parse subsJson → Record<string, string>\r\n const subs: Record<string, string> = result.hasSubs\r\n ? JSON.parse(result.subsJson)\r\n : {}\r\n return { base: result.base, subs, hasSubs: result.hasSubs }\r\n }\r\n } catch {\r\n // binding unavailable — fall through to JS\r\n }\r\n\r\n return parseTemplateFallback(strings, exprs)\r\n}\r\n\r\ntype RuntimeTagFactory = ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n) => TwStyledComponent<Record<string, unknown>>) &\r\n TwTagFactoryAny\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// makeTag\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeTag(tag: React.ElementType): RuntimeTagFactory {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<Record<string, unknown>> => {\r\n // Object config path\r\n if (\r\n !Array.isArray(stringsOrConfig) &&\r\n typeof stringsOrConfig === \"object\" &&\r\n stringsOrConfig !== null &&\r\n !(\"raw\" in stringsOrConfig)\r\n ) {\r\n return createComponent(tag, stringsOrConfig as ComponentConfig)\r\n }\r\n\r\n // Template literal path\r\n const parsed = parseTemplate(stringsOrConfig as TemplateStringsArray, exprs)\r\n\r\n // Buat component dari base classes\r\n const component = createComponent(tag, parsed.base)\r\n\r\n // Attach sub-components sebagai React.FC dari classes yang di-extract\r\n if (parsed.hasSubs) {\r\n for (const [name, classes] of Object.entries(parsed.subs)) {\r\n // Setiap sub-component adalah styled span/div dengan classesnya\r\n const SubComp = React.forwardRef<\r\n HTMLSpanElement,\r\n { children?: React.ReactNode; className?: string }\r\n >(({ children, className }, ref) =>\r\n React.createElement(\"span\", {\r\n ref,\r\n className: className ? `${classes} ${className}` : classes,\r\n }, children)\r\n )\r\n SubComp.displayName = `tw.${typeof tag === \"string\" ? tag : \"component\"}.${name}`;\r\n ;(component as unknown as Record<string, unknown>)[name] = SubComp\r\n }\r\n }\r\n\r\n return component\r\n }) as RuntimeTagFactory\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// HTML tag list\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst HTML_TAGS = [\r\n \"div\", \"section\", \"article\", \"aside\", \"header\", \"footer\", \"main\", \"nav\",\r\n \"figure\", \"figcaption\", \"details\", \"summary\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"span\", \"strong\", \"em\", \"b\", \"i\", \"s\", \"u\", \"small\", \"mark\",\r\n \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"address\",\r\n \"blockquote\", \"q\", \"del\", \"ins\", \"sub\", \"sup\",\r\n \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\",\r\n \"colgroup\", \"col\",\r\n \"img\", \"picture\", \"video\", \"audio\", \"source\", \"track\",\r\n \"canvas\", \"svg\", \"path\", \"circle\", \"rect\", \"line\",\r\n \"polyline\", \"polygon\", \"g\", \"defs\", \"use\", \"symbol\",\r\n \"form\", \"input\", \"textarea\", \"select\", \"option\", \"optgroup\",\r\n \"button\", \"label\", \"fieldset\", \"legend\", \"output\",\r\n \"progress\", \"meter\", \"datalist\",\r\n \"a\", \"area\", \"map\", \"iframe\", \"embed\", \"object\",\r\n \"pre\", \"hr\", \"br\", \"wbr\", \"dialog\", \"menu\", \"template\", \"slot\",\r\n] as const\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw.server — server-only namespace with dev warning\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeServerTag(tag: React.ElementType): RuntimeTagFactory {\r\n const baseFactory = makeTag(tag)\r\n if (typeof window !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<Record<string, unknown>> => {\r\n const tagName =\r\n typeof tag === \"string\"\r\n ? tag\r\n : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n console.warn(\r\n `[tailwind-styled-v4] tw.server.${tagName} rendered in browser. ` +\r\n `Ensure withTailwindStyled or Vite plugin is configured.`\r\n )\r\n return baseFactory(stringsOrConfig, ...exprs)\r\n }) as RuntimeTagFactory\r\n }\r\n return baseFactory\r\n}\r\n\r\nconst serverFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n serverFactories[tag] = makeServerTag(tag as React.ElementType)\r\n}\r\n\r\nexport const server: TwServerObject = serverFactories as unknown as TwServerObject\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw — main export\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst tagFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n tagFactories[tag] = makeTag(tag as React.ElementType)\r\n}\r\n\r\nfunction twCallable(component: React.ComponentType<unknown>) {\r\n return makeTag(component)\r\n}\r\n\r\nexport const tw: TwObject = Object.assign(twCallable, tagFactories, {\r\n server,\r\n}) as unknown as TwObject","/**\r\n * tailwind-styled-v4 v2 — twTheme\r\n *\r\n * UPGRADE #1: Tailwind v4 CSS Variables integration.\r\n *\r\n * Tailwind v4 uses @theme inline to expose design tokens as CSS custom properties:\r\n * @theme inline {\r\n * --color-background: var(--background);\r\n * --color-foreground: var(--foreground);\r\n * --font-sans: var(--font-geist-sans);\r\n * }\r\n *\r\n * This module bridges tw() syntax with those CSS variables — zero config,\r\n * full IDE support, type-safe design tokens.\r\n *\r\n * @example\r\n * // Without twTheme (verbose, error-prone)\r\n * const Box = tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n *\r\n * // With twTheme (clean, type-safe)\r\n * const Box = tw.div`${t.bg(\"color-background\")} ${t.text(\"color-foreground\")}`\r\n *\r\n * // Or with createTheme for full project-level token map\r\n * const theme = createTheme({\r\n * colors: { bg: \"color-background\", fg: \"color-foreground\", primary: \"color-primary\" },\r\n * fonts: { sans: \"font-sans\", mono: \"font-mono\" },\r\n * })\r\n * const Box = tw.div`bg-${theme.colors.bg} text-${theme.colors.fg}`\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Core helper — CSS variable reference\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Reference a CSS custom property in Tailwind v4 arbitrary value syntax.\r\n *\r\n * @example\r\n * cssVar(\"color-background\") → \"var(--color-background)\"\r\n * cssVar(\"color-primary\", \"#3b82f6\") → \"var(--color-primary, #3b82f6)\"\r\n */\r\nexport function cssVar(varName: string, fallback?: string): string {\r\n const name = varName.startsWith(\"--\") ? varName : `--${varName}`\r\n return fallback ? `var(${name}, ${fallback})` : `var(${name})`\r\n}\r\n\r\n/**\r\n * Generate a Tailwind v4 arbitrary value that references a CSS variable.\r\n *\r\n * @example\r\n * twVar(\"bg\", \"color-background\") → \"bg-[var(--color-background)]\"\r\n * twVar(\"text\", \"color-foreground\") → \"text-[var(--color-foreground)]\"\r\n * twVar(\"border\", \"color-border\", \"#e5e7eb\") → \"border-[var(--color-border,#e5e7eb)]\"\r\n */\r\nexport function twVar(property: string, varName: string, fallback?: string): string {\r\n const ref = fallback ? `var(--${varName},${fallback})` : `var(--${varName})`\r\n return `${property}-[${ref}]`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience shorthand builders\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const t = {\r\n /** Background color from CSS variable: t.bg(\"color-primary\") → \"bg-[var(--color-primary)]\" */\r\n bg: (v: string, fb?: string) => twVar(\"bg\", v, fb),\r\n /** Text color from CSS variable */\r\n text: (v: string, fb?: string) => twVar(\"text\", v, fb),\r\n /** Border color from CSS variable */\r\n border: (v: string, fb?: string) => twVar(\"border\", v, fb),\r\n /** Ring color from CSS variable */\r\n ring: (v: string, fb?: string) => twVar(\"ring\", v, fb),\r\n /** Outline color from CSS variable */\r\n outline: (v: string, fb?: string) => twVar(\"outline\", v, fb),\r\n /** Fill color from CSS variable (SVG) */\r\n fill: (v: string, fb?: string) => twVar(\"fill\", v, fb),\r\n /** Stroke color from CSS variable (SVG) */\r\n stroke: (v: string, fb?: string) => twVar(\"stroke\", v, fb),\r\n /** Font family from CSS variable */\r\n font: (v: string, fb?: string) => twVar(\"font\", v, fb),\r\n /** Shadow from CSS variable */\r\n shadow: (v: string, fb?: string) => twVar(\"shadow\", v, fb),\r\n /** Any arbitrary property from CSS variable */\r\n var: (property: string, v: string, fb?: string) => twVar(property, v, fb),\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme — project-level design token map\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ThemeTokenMap {\r\n colors?: Record<string, string>\r\n fonts?: Record<string, string>\r\n spacing?: Record<string, string>\r\n [key: string]: Record<string, string> | undefined\r\n}\r\n\r\nexport type ResolvedThemeTokens<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: T[Group] extends Record<string, string>\r\n ? {\r\n [Token in keyof T[Group]]: string\r\n }\r\n : never\r\n}\r\n\r\n/**\r\n * Create a typed theme token map from your CSS variable names.\r\n * Returns helper functions that generate Tailwind v4 arbitrary values.\r\n *\r\n * @example\r\n * // Define your tokens (match your globals.css @theme block)\r\n * const theme = createTheme({\r\n * colors: {\r\n * bg: \"color-background\",\r\n * fg: \"color-foreground\",\r\n * primary: \"color-primary\",\r\n * muted: \"color-muted\",\r\n * },\r\n * fonts: {\r\n * sans: \"font-sans\",\r\n * mono: \"font-mono\",\r\n * },\r\n * })\r\n *\r\n * // Use in tw components\r\n * const Card = tw.div`\r\n * bg-${theme.colors.bg}\r\n * text-${theme.colors.fg}\r\n * font-${theme.fonts.sans}\r\n * `\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)] font-[var(--font-sans)]`\r\n *\r\n * // Use in cv()\r\n * const button = cv({\r\n * base: `px-4 py-2 ${theme.colors.bg} ${theme.colors.fg}`,\r\n * variants: { ... }\r\n * })\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(tokenMap: T): ResolvedThemeTokens<T> {\r\n const resolved: Record<string, Record<string, string>> = {}\r\n\r\n for (const group in tokenMap) {\r\n resolved[group] = {}\r\n const tokens = tokenMap[group]!\r\n for (const name in tokens) {\r\n const varName = tokens[name]\r\n const prefix = getGroupPrefix(group)\r\n resolved[group][name] = prefix ? twVar(prefix, varName) : cssVar(varName)\r\n }\r\n }\r\n\r\n return resolved as ResolvedThemeTokens<T>\r\n}\r\n\r\nfunction getGroupPrefix(group: string): string {\r\n const map: Record<string, string> = {\r\n colors: \"bg\", // default to bg; user can use t.text() for text colors\r\n fonts: \"font\",\r\n spacing: \"p\",\r\n shadows: \"shadow\",\r\n }\r\n return map[group] ?? \"\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standard Tailwind v4 tokens\r\n//\r\n// Pre-built token references for the default next-app globals.css setup.\r\n// These match what Tailwind v4's @theme inline generates.\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Pre-built references for standard Tailwind v4 CSS variable tokens.\r\n * Works out of the box with next-app-standar-config globals.css.\r\n *\r\n * @example\r\n * import { v4Tokens } from \"tailwind-styled-v4\"\r\n *\r\n * const Page = tw.div`${v4Tokens.bg} ${v4Tokens.text}`\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n */\r\nexport const v4Tokens = {\r\n /** bg-[var(--color-background)] */\r\n bg: twVar(\"bg\", \"color-background\"),\r\n /** text-[var(--color-foreground)] */\r\n text: twVar(\"text\", \"color-foreground\"),\r\n /** font-[var(--font-sans)] */\r\n fontSans: twVar(\"font\", \"font-sans\"),\r\n /** font-[var(--font-mono)] */\r\n fontMono: twVar(\"font\", \"font-mono\"),\r\n} as const\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/index.ts","../packages/domain/core/src/native.ts","../packages/domain/core/src/containerQuery.ts","../packages/domain/core/src/merge.ts","../packages/domain/core/src/stateEngine.ts","../packages/domain/core/src/createComponent.ts","../packages/domain/core/src/cv.ts","../packages/domain/core/src/cx.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/core/src/registry.ts","../packages/domain/core/src/styled.ts","../packages/domain/core/src/styledSystem.ts","../packages/domain/core/src/twProxy.ts","../packages/domain/core/src/twTheme.ts"],"names":["createRequire","isBrowser","path","fileURLToPath","twMerge","React","merged","extended","result","baseComponent","component","resolved","setToken","setTokens","applyTokenSet","cv","t"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Prebuilt binary resolution untuk native NAPI bindings.\r\n * QA #1: Resolve native binary dari prebuilt packages atau local build.\r\n *\r\n * Prioritas:\r\n * 1. TW_NATIVE_PATH env var (explicit override)\r\n * 2. Prebuilt binary dari platform-specific npm package\r\n * 3. Local build dari source (developer mode)\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport * as fs from \"node:fs\"\r\nimport * as path from \"node:path\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require — works in both ESM and CJS contexts\r\nconst _require = typeof require !== \"undefined\" ? require : createRequire(import.meta.url)\r\n\r\nexport interface NativeResolutionResult {\r\n path: string | null\r\n source: \"env\" | \"prebuilt\" | \"local\" | \"not-found\"\r\n platform: string\r\n tried: string[]\r\n}\r\n\r\n/** Platform key → prebuilt npm package name */\r\nconst PLATFORM_MAP: Record<string, string[]> = {\r\n \"linux-x64\": [\"@tailwind-styled/native-linux-x64-gnu\", \"@tailwind-styled/native-linux-x64\"],\r\n \"linux-arm64\": [\"@tailwind-styled/native-linux-arm64-gnu\", \"@tailwind-styled/native-linux-arm64\"],\r\n \"darwin-x64\": [\"@tailwind-styled/native-darwin-x64\"],\r\n \"darwin-arm64\": [\"@tailwind-styled/native-darwin-arm64\"],\r\n \"win32-x64\": [\"@tailwind-styled/native-win32-x64-msvc\", \"@tailwind-styled/native-win32-x64\"],\r\n \"win32-arm64\": [\"@tailwind-styled/native-win32-arm64-msvc\", \"@tailwind-styled/native-win32-arm64\"],\r\n}\r\n\r\nfunction platformKey(): string {\r\n if (isBrowser) return \"browser\"\r\n return `${process.platform}-${process.arch}`\r\n}\r\n\r\n/**\r\n * Resolve native binary path dari semua sumber yang tersedia.\r\n *\r\n * @example\r\n * const result = resolveNativeBinary()\r\n * if (result.path) {\r\n * const binding = require(result.path)\r\n * } else {\r\n * throw new Error(\"Native binding not found — run npm run build:rust\")\r\n * }\r\n */\r\nexport function resolveNativeBinary(runtimeDir?: string): NativeResolutionResult {\r\n const platform = platformKey()\r\n const tried: string[] = []\r\n\r\n if (isBrowser) {\r\n return { path: null, source: \"not-found\", platform, tried: [\"not available in browser\"] }\r\n }\r\n\r\n // 0. Disabled flag — always short-circuit before any I/O\r\n if (process.env.TWS_DISABLE_NATIVE === \"1\") {\r\n return { path: null, source: \"not-found\", platform, tried: [] }\r\n }\r\n\r\n // 1. Env var override\r\n const envPath = process.env.TW_NATIVE_PATH?.trim()\r\n if (envPath) {\r\n if (fs.existsSync(envPath)) {\r\n return { path: envPath, source: \"env\", platform, tried }\r\n }\r\n tried.push(`env:${envPath} (not found)`)\r\n }\r\n\r\n // 2. Prebuilt binary dari platform-specific npm package\r\n const prebuiltPkgs = PLATFORM_MAP[platform] ?? []\r\n for (const pkg of prebuiltPkgs) {\r\n try {\r\n const candidate = _require.resolve(`${pkg}/tailwind_styled_parser.node`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n tried.push(`prebuilt:${pkg} (resolved but missing)`)\r\n } catch {\r\n tried.push(`prebuilt:${pkg} (not installed)`)\r\n }\r\n }\r\n\r\n // 2b. .node file bundled inside this package itself (via \"files\": [\"native/*.node\"])\r\n // Covers the case where user installs tailwind-styled-v4 directly from npm\r\n // and the .node file lands at node_modules/tailwind-styled-v4/native/*.node\r\n const napiPlatform = platform === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : platform === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : platform\r\n const BINARY_NAMES_SELF = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n if (runtimeDir) {\r\n // runtimeDir is typically dist/ — go up to package root, then into native/\r\n for (const depth of [\"..\", path.join(\"..\", \"..\"), path.join(\"..\", \"..\", \"..\")]) {\r\n const pkgRoot = path.resolve(runtimeDir, depth)\r\n for (const bin of BINARY_NAMES_SELF) {\r\n for (const suffix of [\"\", `.${platform}`, `.${napiPlatform}`]) {\r\n const candidate = path.resolve(pkgRoot, \"native\", `${bin}${suffix}.node`)\r\n tried.push(`self-bundled:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 3. Local build candidates\r\n const cwd = process.cwd()\r\n const base = runtimeDir ?? cwd\r\n // napi-rs naming: platform key may have -gnu suffix on Linux (already computed above)\r\n\r\n // Both possible binary names:\r\n // - \"tailwind_styled_parser\" (old hardcoded name in resolvers)\r\n // - \"tailwind-styled-native\" (actual binaryName in native/package.json)\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n\r\n const localCandidates: string[] = []\r\n\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(base, `${bin}.node`))\r\n localCandidates.push(path.resolve(base, \"..\", `${bin}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n // Walk up from cwd AND base to find repo root native/ dir\r\n // Needed when npm workspaces sets cwd to the package subdir\r\n for (const startDir of [cwd, base]) {\r\n let dir = startDir\r\n for (let i = 0; i < 6; i++) {\r\n const nativeDir = path.resolve(dir, \"native\")\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${napiPlatform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, \"target\", \"release\", `${bin}.node`))\r\n }\r\n const parent = path.resolve(dir, \"..\")\r\n if (parent === dir) break\r\n dir = parent\r\n }\r\n }\r\n\r\n for (const candidate of localCandidates) {\r\n tried.push(`local:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"local\", platform, tried }\r\n }\r\n }\r\n\r\n return { path: null, source: \"not-found\", platform, tried }\r\n}\r\n\r\n/**\r\n * Format human-readable error untuk \"binary not found\".\r\n */\r\nexport function formatNativeNotFoundError(result: NativeResolutionResult): string {\r\n const lines = [\r\n `[tailwind-styled] Native binding not found for ${result.platform}`,\r\n ``,\r\n `Tried:`,\r\n ...result.tried.map(t => ` - ${t}`),\r\n ``,\r\n `Solutions:`,\r\n ` 1. Build locally: npm run build:rust`,\r\n ` 2. Install prebuilt: npm install @tailwind-styled/native-${result.platform}`,\r\n ` 3. Override path: TW_NATIVE_PATH=/path/to/parser.node`,\r\n ]\r\n return lines.join(\"\\n\")\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 1 level: dist/ → package-root/native/ (published npm package)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // cwd fallback (user project root)\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * tailwind-styled-v5 — Native Rust Bindings\r\n *\r\n * All functions require native Rust bindings.\r\n * Uses @tailwind-styled/shared for native resolution.\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport { dirname } from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { resolveNativeBinary } from \"@tailwind-styled/shared\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/core] Native binding is required but not available.\\n\" +\r\n \"Please ensure you have run: npm run build:rust\"\r\n\r\nconst _nodeRequire = createRequire(import.meta.url)\r\nconst _loadNative = (path: string): unknown => _nodeRequire(path)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Type Definitions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParsedClassModifier {\r\n type: \"opacity\" | \"arbitrary\"\r\n value: string\r\n}\r\n\r\nexport interface ParsedClass {\r\n raw: string\r\n base: string\r\n variants: string[]\r\n modifier?: ParsedClassModifier\r\n}\r\n\r\nexport interface ThemeConfig {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n}\r\n\r\ninterface NativeBinding {\r\n batchSplitClasses?: (input: string[]) => Array<{\r\n variantKey: string\r\n base: string\r\n variants: string[]\r\n isArbitrary: boolean\r\n hasModifier: boolean\r\n }>\r\n compileTheme?: (themeConfig: string) => { css: string; variables: Record<string, string> }\r\n extractCssVars?: (css: string) => Record<string, string>\r\n extractThemeFromCss?: (css: string) => Array<{ key: string; value: string }>\r\n parseCssRules?: (css: string) => Array<{\r\n className: string\r\n property: string\r\n value: string\r\n isImportant: boolean\r\n variants: string[]\r\n specificity: number\r\n }>\r\n parseCssToRules?: (css: string) => string\r\n detectDeadCode?: (css: string, usedClasses: string[]) => string[]\r\n classifyKnownClasses?: (classes: string[]) => Array<{ className: string; category: string }>\r\n detectClassConflicts?: (classes: string) => { conflicts: Array<{ class1: string; class2: string; reason: string }>; conflictedClassNames: string[] }\r\n resolveVariants?: (configJson: string, propsJson: string) => { classes: string; resolvedCount: number }\r\n resolveSimpleVariants?: (base: string | null, variants: Record<string, Record<string, string>>, defaults: Record<string, string>, props: Record<string, string>) => string\r\n /** Parse template literal yang sudah di-join. Menggantikan parseTemplate() di twProxy.ts */\r\n parseTemplate?: (raw: string) => {\r\n base: string\r\n subsJson: string\r\n hasSubs: boolean\r\n }\r\n /** Validate ComponentConfig — menggantikan validateVariantConfig() di cv.ts */\r\n validateVariantConfig?: (configJson: string) => {\r\n valid: boolean\r\n errors: Array<{ errorType: string; key: string; value?: string; message: string }>\r\n warnings: string[]\r\n }\r\n /** Build lookup key untuk generated registry — menggantikan key builder di lookupGenerated() */\r\n buildVariantLookupKey?: (defaultVariantsJson: string, propsJson: string) => string\r\n /** Menggantikan cn() — filter+join class names dalam satu Rust pass. (class_utils.rs) */\r\n resolveClassNames?: (inputs: string[]) => string\r\n /** tw_merge dengan custom separator dan optional debug */\r\n twMergeWithSeparator?: (classString: string, opts: { separator?: string; debug?: boolean }) => string\r\n /** tw_merge_many dengan custom separator */\r\n twMergeManyWithSeparator?: (classStrings: string[], opts: { separator?: string; debug?: boolean }) => string\r\n /** conflict-aware Tailwind class merger — port of tailwind-merge. (tw_merge.rs) */\r\n twMerge?: (classString: string) => string\r\n /** variadic convenience wrapper untuk twMerge. (tw_merge.rs) */\r\n twMergeMany?: (classStrings: string[]) => string\r\n /** Tailwind classes → semicolon-separated inline CSS declarations. (state_css.rs) */\r\n twClassesToCss?: (classes: string) => string\r\n /**\r\n * Hash a content string — menggantikan JS djb2 loop di hashState() dan hashContainer().\r\n * algorithm: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\" (default: \"md5\")\r\n * length: potong output hex ke N karakter (mis. 6 untuk short ID)\r\n */\r\n hashContent?: (content: string, algorithm?: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\", length?: number) => string\r\n /** Iterative CSS var() chain resolver. (theme.rs) */\r\n resolveThemeValue?: (key: string, rawMapJson: string) => string\r\n /** Parse sub-component block syntax from tw`` template. (tw_merge.rs) */\r\n parseSubcomponentBlocksNapi?: (template: string, componentName: string) => {\r\n baseClasses: string\r\n subMapJson: string\r\n }\r\n /** Menggantikan layoutClassesToCss() — static lookup + split dalam satu Rust pass. (container_query.rs) */\r\n layoutClassesToCss?: (classes: string) => string\r\n /** Menggantikan buildContainerRules() — generate @container CSS rules. (container_query.rs) */\r\n buildContainerRules?: (\r\n id: string,\r\n breakpoints: Array<{ key: string; classes: string }>,\r\n containerName: string | null\r\n ) => string\r\n /** Pre-generate semua kombinasi boolean states via bitmask (tw_merge.rs) */\r\n pregenerateStatesNapi?: (states: Record<string, string>) => {\r\n lookupJson: string\r\n stateKeys: string[]\r\n combinations: number\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Binding Loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBinding: NativeBinding | null = null\r\nlet bindingLoadAttempted = false\r\n\r\nconst getBinding = (): NativeBinding => {\r\n if (isBrowser) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE + \"\\n\\nNative bindings are not available in browser. Use the compiled CSS output instead.\")\r\n }\r\n \r\n if (nativeBinding) return nativeBinding\r\n\r\n if (bindingLoadAttempted) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bindingLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = isBrowser ? \"\" : dirname(fileURLToPath(import.meta.url))\r\n const result = isBrowser\r\n ? { path: null, source: \"not-found\", platform: \"browser\", tried: [] }\r\n : resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n const mod = _loadNative(result.path) as NativeBinding\r\n if (mod?.batchSplitClasses) {\r\n nativeBinding = mod\r\n return nativeBinding\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n throw err instanceof Error ? err : new Error(String(err))\r\n }\r\n}\r\n\r\nexport const resetNativeBinding = (): void => {\r\n nativeBinding = null\r\n bindingLoadAttempted = false\r\n}\r\n\r\nexport const getNativeBinding = getBinding\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Parser Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction splitClassListNative(input: string): string[] {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([input])\r\n if (result.length === 0) return []\r\n return result[0].base.split(\" \").filter(Boolean)\r\n}\r\n\r\nfunction parseClassTokenNative(rawToken: string): ParsedClass {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([rawToken])\r\n if (result.length === 0) {\r\n return { raw: rawToken, base: rawToken, variants: [] }\r\n }\r\n const r = result[0]\r\n const parsed: ParsedClass = {\r\n raw: r.base,\r\n base: r.base,\r\n variants: r.variants,\r\n }\r\n if (r.hasModifier) {\r\n const opacityMatch = r.base.match(/^(.*)\\/(\\d{1,3})$/)\r\n if (opacityMatch && opacityMatch[1].length > 0) {\r\n parsed.base = opacityMatch[1]\r\n parsed.modifier = { type: \"opacity\", value: opacityMatch[2] }\r\n } else {\r\n const arbitraryMatch = r.base.match(/\\((--[a-zA-Z0-9_-]+)\\)/)\r\n if (arbitraryMatch) {\r\n parsed.modifier = { type: \"arbitrary\", value: arbitraryMatch[1] }\r\n }\r\n }\r\n }\r\n return parsed\r\n}\r\n\r\nexport function splitClassList(input: string): string[] {\r\n return splitClassListNative(input)\r\n}\r\n\r\nexport function parseClassToken(rawToken: string): ParsedClass {\r\n return parseClassTokenNative(rawToken)\r\n}\r\n\r\nexport function parseTailwindClasses(input: string): ParsedClass[] {\r\n const classes = splitClassListNative(input)\r\n return classes.map((c) => parseClassTokenNative(c))\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS/Theme Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function compileTheme(themeConfig: Record<string, unknown>) {\r\n const binding = getBinding()\r\n if (!binding?.compileTheme) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.compileTheme(JSON.stringify(themeConfig))\r\n}\r\n\r\nexport function extractCssVars(css: string): Record<string, string> {\r\n const binding = getBinding()\r\n if (!binding?.extractCssVars) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.extractCssVars(css)\r\n}\r\n\r\nexport function parseCssRules(css: string) {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssRules(css)\r\n}\r\n\r\nexport function parseCssToRules(css: string): string {\r\n const binding = getBinding()\r\n if (!binding?.parseCssToRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssToRules(css)\r\n}\r\n\r\nexport function detectDeadCode(css: string, usedClasses: string[]): string[] {\r\n const binding = getBinding()\r\n if (!binding?.detectDeadCode) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectDeadCode(css, usedClasses)\r\n}\r\n\r\nexport function classifyKnownClasses(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.classifyKnownClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.classifyKnownClasses(classes)\r\n}\r\n\r\nexport function detectClassConflicts(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.detectClassConflicts) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectClassConflicts(classes.join(\" \"))\r\n}\r\n\r\nexport function extractThemeFromCSS(cssContent: string): ThemeConfig {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n \r\n const properties = binding.parseCssRules(cssContent)\r\n const theme: ThemeConfig = {\r\n colors: {},\r\n spacing: {},\r\n fonts: {},\r\n breakpoints: {},\r\n animations: {},\r\n raw: {},\r\n }\r\n \r\n const prefixMap: Record<string, keyof ThemeConfig> = {\r\n \"color-\": \"colors\",\r\n \"spacing-\": \"spacing\",\r\n \"font-\": \"fonts\",\r\n \"breakpoint-\": \"breakpoints\",\r\n \"animate-\": \"animations\",\r\n }\r\n \r\n for (const prop of properties) {\r\n const cssVar = prop.property.replace(/^--/, \"\")\r\n theme.raw[cssVar] = prop.value\r\n \r\n for (const [prefix, category] of Object.entries(prefixMap)) {\r\n if (cssVar.startsWith(prefix)) {\r\n const name = cssVar.slice(prefix.length)\r\n if (name) theme[category][name] = prop.value\r\n break\r\n }\r\n }\r\n }\r\n \r\n return theme\r\n}","/**\r\n * tailwind-styled-v4 — Container Query Engine\r\n *\r\n * Generates @container rules from a simple breakpoint config.\r\n *\r\n * Usage:\r\n * const Card = tw.div({\r\n * base: \"p-4\",\r\n * container: {\r\n * sm: \"flex-col\", // @container (min-width: 320px)\r\n * md: \"flex-row\", // @container (min-width: 640px)\r\n * lg: \"grid-cols-3\", // @container (min-width: 1024px)\r\n * },\r\n * containerName: \"card\",\r\n * })\r\n *\r\n * // Wrap with container context:\r\n * const CardWrapper = tw.div`@container`\r\n *\r\n * Named containers:\r\n * const SidebarCard = tw.div({\r\n * base: \"p-2\",\r\n * container: { lg: \"text-sm\" },\r\n * containerName: \"sidebar\",\r\n * })\r\n * // Generates: @container sidebar (min-width: 1024px) { ... }\r\n */\r\n\r\nimport type { ContainerConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Breakpoint map — matches Tailwind defaults\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst CONTAINER_BREAKPOINTS: Record<string, string> = {\r\n xs: \"240px\",\r\n sm: \"320px\",\r\n md: \"640px\",\r\n lg: \"1024px\",\r\n xl: \"1280px\",\r\n \"2xl\": \"1536px\",\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerEntry {\r\n id: string\r\n tag: string\r\n containerName?: string\r\n breakpoints: Array<{ minWidth: string; classes: string }>\r\n cssInjected: boolean\r\n}\r\n\r\nconst containerRegistry = new Map<string, ContainerEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_CONTAINER_REGISTRY__?: typeof containerRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_CONTAINER_REGISTRY__ = containerRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hash\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashContainer — container config tidak berubah antar render.\r\n// Sama dengan _hashStateCache di stateEngine.ts.\r\nconst _hashContainerCache = new Map<string, string>()\r\n\r\nfunction hashContainer(tag: string, container: ContainerConfig, name?: string): string {\r\n const sortedKey = tag + (name ?? \"\") + JSON.stringify(Object.entries(container).sort())\r\n const cached = _hashContainerCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n let id: string\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.hashContent) {\r\n id = `tw-cq-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n } else {\r\n throw new Error(\"no hashContent\")\r\n }\r\n } catch {\r\n const hash = sortedKey.split(\"\").reduce((h, char) => ((h << 5) + h) ^ char.charCodeAt(0), 5381)\r\n id = `tw-cq-${Math.abs(hash).toString(36).slice(0, 6)}`\r\n }\r\n\r\n _hashContainerCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/** Minimal Tailwind → CSS for container query contexts */\r\nconst LAYOUT_MAP: Record<string, string> = {\r\n \"flex-col\": \"flex-direction:column\",\r\n \"flex-row\": \"flex-direction:row\",\r\n \"flex-wrap\": \"flex-wrap:wrap\",\r\n \"flex-nowrap\": \"flex-wrap:nowrap\",\r\n \"flex-1\": \"flex:1 1 0%\",\r\n hidden: \"display:none\",\r\n block: \"display:block\",\r\n flex: \"display:flex\",\r\n grid: \"display:grid\",\r\n \"grid-cols-1\": \"grid-template-columns:repeat(1,minmax(0,1fr))\",\r\n \"grid-cols-2\": \"grid-template-columns:repeat(2,minmax(0,1fr))\",\r\n \"grid-cols-3\": \"grid-template-columns:repeat(3,minmax(0,1fr))\",\r\n \"grid-cols-4\": \"grid-template-columns:repeat(4,minmax(0,1fr))\",\r\n \"grid-cols-6\": \"grid-template-columns:repeat(6,minmax(0,1fr))\",\r\n \"grid-cols-12\": \"grid-template-columns:repeat(12,minmax(0,1fr))\",\r\n \"text-sm\": \"font-size:0.875rem;line-height:1.25rem\",\r\n \"text-base\": \"font-size:1rem;line-height:1.5rem\",\r\n \"text-lg\": \"font-size:1.125rem;line-height:1.75rem\",\r\n \"text-xl\": \"font-size:1.25rem;line-height:1.75rem\",\r\n \"text-2xl\": \"font-size:1.5rem;line-height:2rem\",\r\n \"text-xs\": \"font-size:0.75rem;line-height:1rem\",\r\n \"p-2\": \"padding:0.5rem\",\r\n \"p-4\": \"padding:1rem\",\r\n \"p-6\": \"padding:1.5rem\",\r\n \"p-8\": \"padding:2rem\",\r\n \"px-2\": \"padding-left:0.5rem;padding-right:0.5rem\",\r\n \"px-4\": \"padding-left:1rem;padding-right:1rem\",\r\n \"px-6\": \"padding-left:1.5rem;padding-right:1.5rem\",\r\n \"py-2\": \"padding-top:0.5rem;padding-bottom:0.5rem\",\r\n \"py-4\": \"padding-top:1rem;padding-bottom:1rem\",\r\n \"gap-2\": \"gap:0.5rem\",\r\n \"gap-4\": \"gap:1rem\",\r\n \"gap-6\": \"gap:1.5rem\",\r\n \"gap-8\": \"gap:2rem\",\r\n \"w-full\": \"width:100%\",\r\n \"w-1/2\": \"width:50%\",\r\n \"w-1/3\": \"width:33.333333%\",\r\n \"w-2/3\": \"width:66.666667%\",\r\n \"max-w-sm\": \"max-width:24rem\",\r\n \"max-w-md\": \"max-width:28rem\",\r\n \"max-w-lg\": \"max-width:32rem\",\r\n \"max-w-xl\": \"max-width:36rem\",\r\n \"items-center\": \"align-items:center\",\r\n \"items-start\": \"align-items:flex-start\",\r\n \"items-end\": \"align-items:flex-end\",\r\n \"justify-center\": \"justify-content:center\",\r\n \"justify-between\": \"justify-content:space-between\",\r\n \"justify-start\": \"justify-content:flex-start\",\r\n \"justify-end\": \"justify-content:flex-end\",\r\n}\r\n\r\n/**\r\n * Konversi layout class string → inline CSS declarations.\r\n *\r\n * Native-first: Rust static lookup table (zero alloc) + split_whitespace.\r\n * JS fallback: LAYOUT_MAP object lookup + split(/\\s+/).\r\n */\r\nfunction layoutClassesToCss(classes: string): string {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.layoutClassesToCss) {\r\n return native.layoutClassesToCss(classes)\r\n }\r\n } catch { /* fallback */ }\r\n\r\n // JS fallback\r\n const decls: string[] = []\r\n for (const cls of classes.trim().split(/\\s+/)) {\r\n if (LAYOUT_MAP[cls]) decls.push(LAYOUT_MAP[cls])\r\n else if (cls.startsWith(\"w-[\")) {\r\n const val = cls.match(/\\[(.+)\\]/)?.[1]\r\n if (val) decls.push(`width:${val}`)\r\n } else if (cls.startsWith(\"max-w-[\")) {\r\n const val = cls.match(/\\[(.+)\\]/)?.[1]\r\n if (val) decls.push(`max-width:${val}`)\r\n }\r\n }\r\n return decls.join(\";\")\r\n}\r\n\r\nfunction buildContainerRules(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const rules = Object.entries(container)\r\n .map(([key, value]) => {\r\n const minWidth =\r\n typeof value === \"string\"\r\n ? (CONTAINER_BREAKPOINTS[key] ?? key)\r\n : (value.minWidth ?? CONTAINER_BREAKPOINTS[key] ?? key)\r\n const classes = typeof value === \"string\" ? value : value.classes\r\n\r\n const css = layoutClassesToCss(classes)\r\n if (!css) return null\r\n\r\n const query = containerName\r\n ? `@container ${containerName} (min-width: ${minWidth})`\r\n : `@container (min-width: ${minWidth})`\r\n\r\n return `${query}{.${id}{${css}}}`\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Batched injector — resolve sekali di module load\r\nlet _cqBatchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _cqBatchedInjectFn = mod.batchedInject\r\n} catch { /* runtime-css tidak terinstall */ }\r\n\r\n// Style injection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectContainerStyles(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): void {\r\n if (typeof document === \"undefined\") return\r\n const styleId = `tw-cq-${id}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const css = buildContainerRules(id, container, containerName)\r\n if (!css) return\r\n\r\n // _batchedInjectFn di-resolve sekali di module level (lihat deklarasi di atas)\r\n if (_cqBatchedInjectFn) {\r\n for (const rule of css.split(\"\\n\").filter(Boolean)) _cqBatchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-container\", id)\r\n style.textContent = css\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerQueryResult {\r\n containerClass: string\r\n hasContainer: true\r\n}\r\n\r\nexport function processContainer(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): ContainerQueryResult {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n if (!containerRegistry.has(id)) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n minWidth: CONTAINER_BREAKPOINTS[key] ?? key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n containerRegistry.set(id, {\r\n id,\r\n tag,\r\n containerName,\r\n breakpoints,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n injectContainerStyles(id, container, containerName)\r\n containerRegistry.get(id)!.cssInjected = true\r\n\r\n return { containerClass: id, hasContainer: true }\r\n}\r\n\r\n/**\r\n * Generate @container CSS rules dari breakpoint config.\r\n *\r\n * Native-first: Rust string building tanpa intermediate allocations.\r\n * JS fallback: `buildContainerRules()` loop.\r\n */\r\nexport function generateContainerCss(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n // Native-first: pass breakpoints ke Rust — satu NAPI call generate semua rules\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.buildContainerRules) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n return native.buildContainerRules(id, breakpoints, containerName ?? null)\r\n }\r\n } catch { /* fallback */ }\r\n\r\n // JS fallback\r\n return buildContainerRules(id, container, containerName)\r\n}\r\n\r\nexport function getContainerRegistry(): Map<string, ContainerEntry> {\r\n return containerRegistry\r\n}","/**\r\n * tailwind-styled-v4 — createTwMerge()\r\n *\r\n * Native-first: uses Rust `tw_merge_many` when available.\r\n * Browser fallback: simple join (no conflict resolution).\r\n * In browser/client context, classes were already resolved on the server during SSR.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\nimport type { ThemeConfig } from \"./themeReader\"\r\n\r\nexport interface MergeOptions {\r\n prefix?: string\r\n separator?: string\r\n theme?: ThemeConfig\r\n}\r\n\r\nfunction normalizeClassInput(classLists: Array<string | undefined | null | false>): string[] {\r\n // Single-pass: gabungkan filter + trim + length check dalam satu loop.\r\n // Sebelumnya: 3 array traversals (.filter → .map → .filter) → 3 intermediate arrays.\r\n // Sesudah: 1 traversal, 1 output array, zero intermediate allocations.\r\n const result: string[] = []\r\n for (let i = 0; i < classLists.length; i++) {\r\n const v = classLists[i]\r\n if (!v) continue\r\n const s = String(v).trim()\r\n if (s.length > 0) result.push(s)\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * createTwMerge — returns a conflict-aware merge function.\r\n * Native-first: uses Rust `tw_merge_many` when available.\r\n * Browser fallback: simple join without conflict resolution.\r\n *\r\n * IMPORTANT: The browser fallback must produce output identical to the server\r\n * (Rust) path to avoid React hydration mismatches. For static base classes this\r\n * is fine because they are pre-resolved at build time. For runtime className\r\n * overrides passed by the consumer, the join order must be stable and\r\n * deterministic on both sides.\r\n *\r\n * Note: `prefix` and `separator` options are not supported in native mode\r\n * (Tailwind v3/v4 defaults are used).\r\n */\r\nexport function createTwMerge(_options: MergeOptions = {}) {\r\n return function twMerge(...classLists: Array<string | undefined | null | false>): string {\r\n const clean = normalizeClassInput(classLists)\r\n if (clean.length === 0) return \"\"\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.twMergeMany) {\r\n return native.twMergeMany(clean)\r\n }\r\n } catch {\r\n // Native binding unavailable in browser — fall through to JS fallback\r\n }\r\n\r\n // Browser/client fallback: simple join — input classes are already\r\n // individually conflict-resolved from the server SSR pass.\r\n return clean.join(\" \")\r\n }\r\n}\r\n\r\nexport const twMerge = createTwMerge()\r\n\r\nexport function mergeWithRules(\r\n rules: Record<string, (classes: string[]) => string>,\r\n ...classLists: string[]\r\n): string {\r\n const base = twMerge(...classLists)\r\n const classes = Object.values(rules).reduce(\r\n (acc, rule) => twMerge(rule(acc)).split(/\\s+/).filter(Boolean),\r\n base.split(/\\s+/).filter(Boolean)\r\n )\r\n\r\n return classes.join(\" \")\r\n}","/**\r\n * tailwind-styled-v4 — Reactive State Engine\r\n *\r\n * Zero-JS CSS state management via data attributes.\r\n * No React re-render needed for style changes.\r\n *\r\n * How it works:\r\n * 1. tw.button({ state: { active: \"bg-blue-500\", loading: \"opacity-70\" } })\r\n * 2. State engine generates a unique class + injects CSS:\r\n * .tw-s-abc123[data-active=\"true\"] { @apply bg-blue-500; }\r\n * .tw-s-abc123[data-loading=\"true\"] { @apply opacity-70; }\r\n * 3. Component renders with the state class\r\n * 4. User sets data-active=\"true\" directly — no state needed\r\n *\r\n * Devtools integration:\r\n * All components register to __TW_STATE_REGISTRY__ for devtools inspection.\r\n */\r\n\r\nimport type { StateConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry — tracks all state-enabled components\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateComponentEntry {\r\n id: string\r\n tag: string\r\n states: string[]\r\n cssInjected: boolean\r\n}\r\n\r\nconst stateRegistry = new Map<string, StateComponentEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_STATE_REGISTRY__?: typeof stateRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_STATE_REGISTRY__ = stateRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Deterministic hash — same config → same class (no re-injection on HMR)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashState — state config tidak berubah antar render,\r\n// hash hanya perlu dihitung sekali per (tag, state) kombinasi.\r\nconst _hashStateCache = new Map<string, string>()\r\n\r\nfunction hashState(tag: string, state: StateConfig): string {\r\n // Key untuk cache: sort untuk determinism (Object.entries order tidak guaranteed)\r\n const sortedKey = tag + JSON.stringify(Object.entries(state).sort())\r\n const cached = _hashStateCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n let id: string\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.hashContent) {\r\n // native hashContent: FNV-1a via Rust, ~40x lebih cepat dari JS djb2 loop\r\n // karena tidak ada .split(\"\") overhead (char array allocation) dan\r\n // tidak perlu .reduce() closure per-character.\r\n const raw = native.hashContent(sortedKey, \"fnv\", 6)\r\n id = `tw-s-${raw}`\r\n } else {\r\n throw new Error(\"no hashContent\")\r\n }\r\n } catch {\r\n // JS djb2 fallback — identik output tidak dijamin dengan native,\r\n // tapi cukup untuk development / browser context.\r\n const hash = sortedKey.split(\"\").reduce((h, char) => ((h << 5) + h) ^ char.charCodeAt(0), 5381)\r\n id = `tw-s-${Math.abs(hash).toString(36).slice(0, 6)}`\r\n }\r\n\r\n _hashStateCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator — Tailwind class → plain CSS via Rust (required)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Convert Tailwind utility classes → semicolon-separated inline CSS declarations.\r\n * Native-only: delegates ke Rust `tw_classes_to_css` (state_css.rs).\r\n *\r\n * @internal — called by injectStateStyles()\r\n */\r\n// Cache untuk twClassesToCss — classes string dari state config tidak berubah.\r\n// Ini hot path: dipanggil untuk setiap state entry setiap kali injectStateStyles\r\n// dipanggil. Dengan cache, Rust hanya dipanggil sekali per unique class string.\r\nconst _twClassesToCssCache = new Map<string, string>()\r\n\r\nfunction twClassesToCss(classes: string): string {\r\n const cached = _twClassesToCssCache.get(classes)\r\n if (cached !== undefined) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twClassesToCss) {\r\n throw new Error(\"FATAL: Native binding 'twClassesToCss' is required but not available.\")\r\n }\r\n const result = native.twClassesToCss(classes)\r\n _twClassesToCssCache.set(classes, result)\r\n return result\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Batched injector — resolve sekali di module load, bukan per injectStateStyles call.\r\n// require() di-cache hasilnya di sini supaya tidak ada module resolution overhead\r\n// setiap kali ada state change di browser.\r\nlet _batchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _batchedInjectFn = mod.batchedInject\r\n} catch {\r\n // runtime-css tidak terinstall — fallback ke per-element style tag\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Style injection — batched for performance (FIX CSS Rule Batching)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectStateStyles(id: string, state: StateConfig): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `tw-state-${id}`\r\n if (document.getElementById(styleId)) return // already injected\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n if (rules.length === 0) return\r\n\r\n // Try batched injector first (available when runtime-css is installed).\r\n // _batchedInjectFn di-resolve sekali di module level — hindari require() dinamis\r\n // (dynamic require = module resolution + file I/O) setiap kali ada state change.\r\n if (_batchedInjectFn) {\r\n for (const rule of rules) _batchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-state\", id)\r\n style.textContent = rules.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateEngineResult {\r\n /** CSS class to add to the component */\r\n stateClass: string\r\n /** Whether this component uses state (for SSR data attributes) */\r\n hasState: true\r\n /** List of state names (for devtools) */\r\n stateNames: string[]\r\n}\r\n\r\n/**\r\n * Process a StateConfig for a component.\r\n * Returns the state class and injects CSS (client-side only).\r\n */\r\nexport function processState(tag: string, state: StateConfig): StateEngineResult {\r\n const id = hashState(tag, state)\r\n const stateNames = Object.keys(state)\r\n\r\n // Register for devtools\r\n if (!stateRegistry.has(id)) {\r\n stateRegistry.set(id, {\r\n id,\r\n tag,\r\n states: stateNames,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n // Inject CSS (client only)\r\n injectStateStyles(id, state)\r\n\r\n // Mark as injected\r\n const entry = stateRegistry.get(id)!\r\n entry.cssInjected = true\r\n\r\n return { stateClass: id, hasState: true, stateNames }\r\n}\r\n\r\n/**\r\n * Generate SSR-safe CSS string for a state config.\r\n * Used by SSR to inject styles into <head>.\r\n */\r\nexport function generateStateCss(tag: string, state: StateConfig): string {\r\n const id = hashState(tag, state)\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Get the state registry (for devtools).\r\n */\r\nexport function getStateRegistry(): Map<string, StateComponentEntry> {\r\n return stateRegistry\r\n}","// AnimateOptions loaded dynamically to avoid bundling @tailwind-styled/animate\r\ntype AnimateOptions = { from: string; to: string; duration?: number; easing?: string; delay?: number; fill?: string; iterations?: number | \"infinite\"; direction?: string; name?: string }\r\nimport React from \"react\"\r\n\r\nimport { processContainer } from \"./containerQuery\"\r\nimport { twMerge } from \"./merge\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport { processState } from \"./stateEngine\"\r\nimport type { ComponentConfig, InferSubFromConfig, SubValue, TwStyledComponent } from \"./types\"\r\n\r\nconst ALWAYS_BLOCKED = new Set([\"base\", \"_ref\", \"state\", \"container\", \"containerName\"])\r\n\r\n// ── Template parse cache ──────────────────────────────────────────────────────\r\n// parseSubcomponentBlocksNapi + JSON.parse sebelumnya dipanggil ulang setiap\r\n// render (extractBaseClasses + parseSubComponentBlocks dipanggil dari render path).\r\n// Cache ini memastikan Rust hanya dipanggil SEKALI per unique template string.\r\n// Template string dari tw.div({ base: \"...\" }) tidak berubah antar render,\r\n// jadi cache ini practically never evicted selama app berjalan.\r\ninterface _ParsedTemplate {\r\n baseClasses: string\r\n subMap: Map<string, string>\r\n}\r\nconst _templateParseCache = new Map<string, _ParsedTemplate>()\r\n\r\n// Cache untuk statesLookup — key: JSON.stringify(statesConfig sorted)\r\n// Menghindari Rust pregenerateStatesNapi + JSON.parse ulang untuk config identik\r\ninterface _StatesLookupEntry { lookup: Record<number, string>; keys: string[] }\r\nconst _statesLookupCache = new Map<string, _StatesLookupEntry>()\r\n\r\nfunction _getParsedTemplate(template: string): _ParsedTemplate {\r\n const cached = _templateParseCache.get(template)\r\n if (cached) return cached\r\n\r\n let result: _ParsedTemplate\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.parseSubcomponentBlocksNapi) {\r\n const r = native.parseSubcomponentBlocksNapi(template, \"tw\")\r\n // JSON.parse sekali di sini, hasil disimpan sebagai Map<string,string>.\r\n // Tidak pernah di-parse ulang — semua caller pakai cache entry ini.\r\n const raw = JSON.parse(r.subMapJson) as Record<string, string>\r\n result = {\r\n baseClasses: r.baseClasses.trim().replace(/\\s+/g, \" \"),\r\n subMap: new Map(Object.entries(raw)),\r\n }\r\n _templateParseCache.set(template, result)\r\n return result\r\n }\r\n } catch {\r\n // Native tidak tersedia (browser) — fall through ke JS fallback\r\n }\r\n\r\n // JS fallback — identik output dengan Rust path untuk hydration consistency\r\n const subMap = new Map<string, string>()\r\n const regex = /((?:\\[[a-zA-Z][a-zA-Z0-9_-]*\\]|[a-zA-Z][a-zA-Z0-9_-]*))\\s*\\{([^}]*)\\}/g\r\n let match\r\n while ((match = regex.exec(template)) !== null) {\r\n const rawName = match[1]\r\n const name = rawName.startsWith(\"[\") ? rawName.slice(1, -1) : rawName\r\n const classes = match[2].trim().replace(/\\s+/g, \" \")\r\n if (classes) subMap.set(name, classes)\r\n }\r\n const baseClasses = template\r\n .replace(/(?:\\[[a-zA-Z][a-zA-Z0-9_-]*\\]|[a-zA-Z][a-zA-Z0-9_-]*)\\s*\\{[^}]*\\}/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim()\r\n\r\n result = { baseClasses, subMap }\r\n _templateParseCache.set(template, result)\r\n return result\r\n}\r\n\r\n/**\r\n * Extract sub-component blocks dari template → Map<name, classes>\r\n * Cache-first: Rust + JSON.parse hanya dipanggil SEKALI per template string.\r\n */\r\nfunction parseSubComponentBlocks(template: string): Map<string, string> {\r\n return _getParsedTemplate(template).subMap\r\n}\r\n\r\n/**\r\n * Strip semua sub-component blocks dari template string → base class string.\r\n * Cache-first: Rust hanya dipanggil SEKALI per template string.\r\n */\r\nfunction extractBaseClasses(template: string): string {\r\n return _getParsedTemplate(template).baseClasses\r\n}\r\n\r\n// Valid HTML semantic tags yang otomatis di-detect dari key name\r\nconst SEMANTIC_HTML_TAGS = new Set([\r\n \"article\", \"aside\", \"details\", \"figcaption\", \"figure\",\r\n \"footer\", \"header\", \"main\", \"mark\", \"nav\", \"section\", \"summary\", \"time\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\",\r\n \"form\", \"fieldset\", \"legend\", \"label\",\r\n \"a\", \"button\", \"img\", \"span\", \"div\",\r\n \"blockquote\", \"pre\", \"code\", \"em\", \"strong\", \"small\",\r\n])\r\n\r\n/**\r\n * Parse sub-component key — support dua format:\r\n *\r\n * 1. \"tag:name\" → tag HTML explicit, nama component = name\r\n * contoh: \"header:topBar\" → tag=header, componentName=topBar\r\n *\r\n * 2. \"name\" → cek apakah nama adalah valid HTML tag\r\n * contoh: \"header\" → tag=header, componentName=header\r\n * contoh: \"icon\" → tag=span (fallback), componentName=icon\r\n */\r\nfunction parseSubKey(key: string): { tag: string; componentName: string } {\r\n const colonIdx = key.indexOf(\":\")\r\n if (colonIdx !== -1) {\r\n const tag = key.slice(0, colonIdx).trim()\r\n const componentName = key.slice(colonIdx + 1).trim()\r\n return { tag: tag || \"span\", componentName: componentName || tag }\r\n }\r\n const isSemanticTag = SEMANTIC_HTML_TAGS.has(key)\r\n return { tag: isSemanticTag ? key : \"span\", componentName: key }\r\n}\r\n\r\n/**\r\n * Buat sub-component React FC dengan classes-nya sendiri.\r\n * Support tag override dan asChild pattern.\r\n *\r\n * @param tag - HTML tag yang dirender, default \"span\"\r\n * @param asChild - jika true, merge className ke direct child element\r\n */\r\nfunction createSubComponentAccessor(\r\n parentDisplayName: string,\r\n name: string,\r\n classes: string,\r\n tag: string = \"span\",\r\n asChild: boolean = false\r\n): React.FC<{ children?: React.ReactNode; className?: string }> {\r\n const SubComponent: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => {\r\n const mergedClass = className ? `${classes} ${className}` : classes\r\n\r\n // asChild: clone direct child element dan merge className ke dalamnya\r\n if (asChild && React.isValidElement(children)) {\r\n const child = React.Children.only(children) as React.ReactElement<{ className?: string }>\r\n return React.cloneElement(child, {\r\n className: child.props.className\r\n ? `${mergedClass} ${child.props.className}`\r\n : mergedClass,\r\n })\r\n }\r\n\r\n return React.createElement(tag, { className: mergedClass }, children)\r\n }\r\n SubComponent.displayName = `${parentDisplayName}[${name}]`\r\n return SubComponent\r\n}\r\n\r\n/** Register semua sub-components ke component object.\r\n * Sumber: (1) config.sub object — prioritas utama, TypeScript infer keys-nya.\r\n * (2) parseSubComponentBlocks dari template string — fallback untuk template literal syntax.\r\n *\r\n * config.sub value bisa berupa:\r\n * - string: \"font-bold text-lg\" → render sebagai <span>\r\n * - SubComponentConfig: { classes: \"...\", tag: \"header\", asChild: false }\r\n */\r\nfunction registerSubComponents<P extends object>(\r\n component: TwStyledComponent<P>,\r\n template: string,\r\n configSub?: Record<string, SubValue>\r\n): void {\r\n const displayName = component.displayName ?? \"tw\"\r\n const map = component as unknown as Record<string, unknown>\r\n\r\n // Priority 1: config.sub object — explicit, fully typed\r\n if (configSub) {\r\n for (const [key, value] of Object.entries(configSub)) {\r\n if (typeof value === \"string\") {\r\n // String value — pakai parseSubKey untuk detect semantic tag dari key\r\n const { tag, componentName } = parseSubKey(key)\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, value.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n } else {\r\n // Nested object — key adalah HTML tag, nested keys adalah component names\r\n // contoh: h2: { title: \"text-xl\", subtitle: \"text-lg\" }\r\n // → Card.title renders <h2>, Card.subtitle renders <h2>\r\n const tag = key\r\n for (const [componentName, classes] of Object.entries(value)) {\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, classes.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Priority 2: template block parsing — untuk template literal syntax\r\n const blocks = parseSubComponentBlocks(template)\r\n for (const [name, classes] of blocks) {\r\n if (!(name in map)) {\r\n map[name] = createSubComponentAccessor(displayName, name, classes)\r\n }\r\n }\r\n}\r\n\r\nimport type { InferVariantProps, InferStatesProps } from \"./types\"\r\n\r\n// Props yang diterima component saat render — typed dari config user\r\ntype RuntimeProps<TConfig extends ComponentConfig> =\r\n InferVariantProps<TConfig> &\r\n InferStatesProps<TConfig> &\r\n { className?: string; children?: React.ReactNode } &\r\n Record<string, unknown> // HTML attrs dan props lainnya tetap diterima\r\n\r\nfunction normalizeClassName(value: unknown): string | undefined {\r\n return typeof value === \"string\" ? value : undefined\r\n}\r\n\r\nfunction makeFilterProps(variantKeys: Set<string>, stateKeys: Set<string> = new Set()) {\r\n return function filterProps(props: Record<string, unknown>): Record<string, unknown> {\r\n const out: Record<string, unknown> = {}\r\n for (const key in props) {\r\n if (variantKeys.has(key)) continue\r\n if (stateKeys.has(key)) continue // states dari config user — tidak diteruskan ke DOM\r\n if (key.startsWith(\"$\")) continue\r\n if (ALWAYS_BLOCKED.has(key)) continue\r\n out[key] = props[key]\r\n }\r\n return out\r\n }\r\n}\r\n\r\nfunction resolveVariants(\r\n variants: Record<string, Record<string, string>>,\r\n props: Record<string, unknown>,\r\n defaults: Record<string, string>\r\n): string {\r\n // Only include declared variant keys — prevents non-variant props (e.g. `selected`, `disabled`)\r\n // from leaking into the resolver and causing SSR/client hydration mismatches.\r\n // The Rust binding and JS fallback must receive identical, variant-scoped props.\r\n const variantKeys = Object.keys(variants)\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const v = props[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (binding?.resolveSimpleVariants) {\r\n const result = binding.resolveSimpleVariants(null, variants, defaults, cleanProps)\r\n // Normalize whitespace — Rust dan JS fallback harus produce output identik\r\n // Variant strings dari backtick templates punya newlines yang harus di-collapse\r\n return result.trim().replace(/\\s+/g, \" \")\r\n }\r\n } catch {\r\n // Native binding unavailable (browser/client context) — fall through to JS fallback\r\n }\r\n\r\n // JS fallback for browser/client context\r\n const resolved = { ...defaults, ...cleanProps }\r\n const classes: string[] = []\r\n // Sort keys — Rust HashMap tidak punya insertion order, kita sort alphabetically\r\n // agar output JS fallback identik dengan Rust output\r\n const sortedVariantEntries = Object.entries(variants).sort(([a], [b]) => a.localeCompare(b))\r\n for (const [variantKey, variantMap] of sortedVariantEntries) {\r\n const selected = resolved[variantKey]\r\n if (selected !== undefined && variantMap[selected] !== undefined) {\r\n // Normalize whitespace — Rust strips leading/trailing spaces and collapses\r\n // newlines in template literals. JS fallback must produce identical output.\r\n const normalized = variantMap[selected].trim().replace(/\\s+/g, \" \")\r\n classes.push(normalized)\r\n }\r\n }\r\n return classes.filter(Boolean).join(\" \")\r\n}\r\n\r\n/**\r\n * Resolve states bitmask dari props → lookup class string.\r\n * O(1) — hitung bitmask dari boolean props, lookup di pre-generated table.\r\n *\r\n * Fallback: kalau lookup tidak tersedia, cx() runtime.\r\n */\r\nfunction resolveStates(\r\n statesConfig: Record<string, string>,\r\n stateKeys: string[],\r\n statesLookup: Record<number, string> | null,\r\n props: Record<string, unknown>\r\n): string {\r\n // Fast path: pre-generated bitmask lookup (Rust) — O(1)\r\n // Rust binary v5.0.6-canary.0.0.51+ uses join (not twMerge) so ring-2 + ring-blue-500\r\n // are both preserved correctly.\r\n if (statesLookup && stateKeys.length > 0) {\r\n let mask = 0\r\n for (let i = 0; i < stateKeys.length; i++) {\r\n if (props[stateKeys[i]]) mask |= (1 << i)\r\n }\r\n return statesLookup[mask] ?? \"\"\r\n }\r\n\r\n // Fallback: runtime join — additive, no conflict resolution\r\n const activeClasses = stateKeys\r\n .filter(k => props[k])\r\n .map(k => statesConfig[k])\r\n .filter(Boolean)\r\n\r\n return activeClasses.join(\" \")\r\n}\r\n\r\nfunction resolveCompound(\r\n compounds: ReadonlyArray<{ readonly class: string; readonly [key: string]: unknown }>,\r\n props: Record<string, unknown>\r\n): string {\r\n const classes: string[] = []\r\n for (const compound of compounds) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n [key: string]: unknown\r\n }\r\n const matches = Object.entries(conditions).every(([key, value]) => props[key] === value)\r\n if (matches) {\r\n classes.push(compoundClass)\r\n }\r\n }\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Carry over subcomponent keys from source to target (exclude internal methods) */\r\nfunction carryOverSubComponents<P extends object>(\r\n target: TwStyledComponent<P>,\r\n source: TwStyledComponent<P>\r\n): void {\r\n const INTERNAL_KEYS = new Set([\"extend\", \"withVariants\", \"animate\", \"withSub\", \"displayName\"])\r\n for (const key of Object.keys(source)) {\r\n if (!INTERNAL_KEYS.has(key)) {\r\n ;(target as unknown as Record<string, unknown>)[key] = (source as unknown as Record<string, unknown>)[key]\r\n }\r\n }\r\n}\r\n\r\nfunction attachExtend<TConfig extends ComponentConfig>(\r\n component: TwStyledComponent<TConfig, string>,\r\n originalTag: React.ElementType,\r\n base: string,\r\n config: ComponentConfig\r\n): TwStyledComponent<TConfig, string> {\r\n /**\r\n * Extend component dengan extra classes (template literal).\r\n *\r\n * @example\r\n * const PrimaryBtn = Button.extend`bg-blue-500 text-white`\r\n */\r\n function extendWithClasses(strings: TemplateStringsArray): TwStyledComponent<TConfig, string>\r\n /**\r\n * Extend component dengan extra classes + variant overrides (object).\r\n * Ini menyelesaikan gap desain yang disebutkan di CRITIQUE-20 #2.\r\n *\r\n * @example\r\n * // Extend classes DAN tambah variant sekaligus\r\n * const BigDangerBtn = Button.extend({\r\n * classes: \"text-lg px-8\",\r\n * variants: { loading: { true: \"opacity-50\" } },\r\n * defaultVariants: { loading: \"false\" }\r\n * })\r\n */\r\n function extendWithClasses(extendConfig: {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }): TwStyledComponent<TConfig, string>\r\n function extendWithClasses(\r\n stringsOrConfig: TemplateStringsArray | {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n ): TwStyledComponent<TConfig, string> {\r\n // Template literal path\r\n if (Array.isArray(stringsOrConfig) && \"raw\" in stringsOrConfig) {\r\n const rawExtra = (stringsOrConfig as TemplateStringsArray).raw.join(\"\").trim().replace(/\\s+/g, \" \")\r\n // Strip sub-blocks from both sides before merging base classes\r\n const merged = twMerge(extractBaseClasses(base), extractBaseClasses(rawExtra))\r\n const extended = createComponent(\r\n originalTag,\r\n typeof config === \"string\" ? merged : { ...config, base: merged }\r\n )\r\n // Carry over parent sub-components first, then apply overrides from extend template\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n const extendSubBlocks = parseSubComponentBlocks(rawExtra)\r\n if (extendSubBlocks.size > 0) {\r\n const extComp = extended as unknown as Record<string, unknown>\r\n const displayName = extended.displayName ?? \"tw\"\r\n for (const [subName, subClasses] of extendSubBlocks) {\r\n extComp[subName] = createSubComponentAccessor(displayName, subName, subClasses)\r\n }\r\n }\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // Object config path — support extend + withVariants in one call\r\n const extCfg = stringsOrConfig as {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n const extraClasses = extCfg.classes ?? \"\"\r\n const merged = twMerge(extractBaseClasses(base), extraClasses)\r\n const existing = typeof config === \"object\" ? config : {}\r\n const extended = createComponent(originalTag, {\r\n ...existing,\r\n base: merged,\r\n variants: { ...(existing.variants ?? {}), ...(extCfg.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(extCfg.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(extCfg.defaultVariants ?? {}),\r\n },\r\n })\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n component.extend = extendWithClasses as TwStyledComponent<TConfig, string>[\"extend\"]\r\n\r\n component.withVariants = (newConfig: Partial<ComponentConfig>) => {\r\n const existing = typeof config === \"object\" ? config : {}\r\n return createComponent(originalTag, {\r\n ...existing,\r\n base,\r\n variants: { ...(existing.variants ?? {}), ...(newConfig.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(newConfig.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(newConfig.defaultVariants ?? {}),\r\n },\r\n }) as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // .animate() dipindah ke tailwind-styled-v4/animate agar tidak bundle @tailwind-styled/animate\r\n // ke dalam main browser bundle (animate butuh Rust native binding → Node.js only)\r\n component.animate = async (_opts: AnimateOptions) => {\r\n console.warn(\r\n \"[tailwind-styled-v4] .animate() tidak tersedia di main bundle.\\n\" +\r\n \"Gunakan: import { animate } from \\\"tailwind-styled-v4/animate\\\"\"\r\n )\r\n return component\r\n }\r\n\r\n // .withSub<\"icon\" | \"badge\">() — declare sub-component names untuk TypeScript\r\n // Runtime: no-op, hanya untuk type inference\r\n component.withSub = (() => component) as TwStyledComponent<TConfig, string>[\"withSub\"]\r\n\r\n return component\r\n}\r\n\r\nexport function createComponent<TConfig extends ComponentConfig>(\r\n tag: React.ElementType,\r\n config: TConfig | string\r\n): TwStyledComponent<TConfig, InferSubFromConfig<TConfig>> {\r\n const isStatic = typeof config === \"string\"\r\n const base = typeof config === \"string\" ? config : (config.base ?? \"\")\r\n const variants = typeof config === \"string\" ? {} : (config.variants ?? {}) as Record<string, Record<string, string>>\r\n const compoundVariants = typeof config === \"string\" ? [] : (config.compoundVariants ?? [])\r\n const defaultVariants = typeof config === \"string\" ? {} : (config.defaultVariants ?? {})\r\n const stateConfig = typeof config === \"string\" ? undefined : config.state\r\n const containerConfig = typeof config === \"string\" ? undefined : config.container\r\n const containerName = typeof config === \"string\" ? undefined : config.containerName\r\n const configSub = typeof config === \"string\" ? undefined : config.sub\r\n const statesConfig = typeof config === \"string\" ? undefined : config.states\r\n\r\n // Pre-generate states bitmask lookup via Rust (build time).\r\n // Cache key: sorted JSON dari statesConfig — statesConfig tidak berubah antar\r\n // createComponent calls dengan config yang sama (mis. HMR), jadi cache ini\r\n // menghindari JSON.parse + Rust call ulang untuk config identik.\r\n let statesLookup: Record<number, string> | null = null\r\n let stateKeys: string[] = []\r\n if (statesConfig && Object.keys(statesConfig).length > 0) {\r\n stateKeys = Object.keys(statesConfig)\r\n const statesCacheKey = JSON.stringify(statesConfig, Object.keys(statesConfig).sort())\r\n const cachedStates = _statesLookupCache.get(statesCacheKey)\r\n if (cachedStates) {\r\n statesLookup = cachedStates.lookup\r\n stateKeys = cachedStates.keys\r\n } else {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.pregenerateStatesNapi) {\r\n const result = native.pregenerateStatesNapi(statesConfig)\r\n // JSON.parse sekali — disimpan di cache, tidak pernah di-parse ulang\r\n statesLookup = JSON.parse(result.lookupJson) as Record<number, string>\r\n stateKeys = result.stateKeys\r\n _statesLookupCache.set(statesCacheKey, { lookup: statesLookup, keys: stateKeys })\r\n }\r\n } catch (e) {\r\n console.warn(\"[tailwind-styled-v4] states pre-generation failed, falling back to runtime cx()\", e)\r\n }\r\n }\r\n }\r\n\r\n const stateResult = stateConfig\r\n ? processState(typeof tag === \"string\" ? tag : \"component\", stateConfig)\r\n : null\r\n const containerResult = containerConfig\r\n ? processContainer(typeof tag === \"string\" ? tag : \"component\", containerConfig, containerName)\r\n : null\r\n\r\n const engineClasses = [stateResult?.stateClass, containerResult?.containerClass]\r\n .filter(Boolean)\r\n .join(\" \")\r\n\r\n const filterProps = makeFilterProps(new Set(Object.keys(variants)), new Set(stateKeys))\r\n const tagLabel =\r\n typeof tag === \"string\" ? tag : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n\r\n if (isStatic || Object.keys(variants).length === 0) {\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n // statesClasses appended AFTER twMerge to prevent conflict resolution\r\n // from removing valid class combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n }\r\n\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const variantClasses = resolveVariants(variants, props, defaultVariants)\r\n const compoundClasses = resolveCompound(compoundVariants, props)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n\r\n // statesClasses appended AFTER twMerge — prevents conflict resolution\r\n // from removing valid combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), variantClasses, compoundClasses, engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n}\r\n\r\n// ── Sub-component fallback proxy ──────────────────────────────────────────────\r\n/**\r\n * Wrap component dengan Proxy sehingga akses ke sub-component yang tidak\r\n * terdefinisi (misal Button.footer) tidak mengembalikan undefined dan crash,\r\n * tapi fallback ke <span> passthrough yang render children-nya saja.\r\n */\r\nconst SKIP_PROXY_KEYS = new Set([\r\n \"extend\", \"withVariants\", \"animate\", \"withSub\",\r\n \"displayName\", \"$$typeof\", \"render\", \"prototype\",\r\n \"__esModule\", \"then\",\r\n])\r\n\r\nfunction wrapWithSubProxy<P extends object>(\r\n component: TwStyledComponent<P>,\r\n tagLabel: string\r\n): TwStyledComponent<P> {\r\n return new Proxy(component, {\r\n get(target, prop: string | symbol) {\r\n const value = (target as unknown as Record<string | symbol, unknown>)[prop]\r\n // Jika sudah ada (sub-component terdefinisi, method, dll) → pakai langsung\r\n if (value !== undefined) return value\r\n // Skip known internal / React symbols\r\n if (typeof prop === \"symbol\") return value\r\n if (SKIP_PROXY_KEYS.has(prop as string)) return value\r\n // Fallback: buat passthrough <span> untuk sub-component yang tidak terdefinisi\r\n const Fallback: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => React.createElement(\"span\", { className }, children)\r\n Fallback.displayName = `tw.${tagLabel}.${prop as string}(fallback)`\r\n return Fallback\r\n },\r\n })\r\n}","/**\r\n * tailwind-styled-v4 — cv()\r\n *\r\n * Runtime: native-first with fallback to generated variant tables.\r\n *\r\n * Dua mode:\r\n * 1. GENERATED (optimal) — import dari variants.generated.ts hasil `npx tw compile-variants`\r\n * → O(1) lookup, static, zero runtime computation\r\n * 2. RUNTIME (fallback) — compute on-the-fly via native binding\r\n * → Requires native Rust binding for variant resolution\r\n */\r\n\r\nimport { twMerge } from \"./merge\"\r\nimport type { ComponentConfig, CvFn, InferVariantProps } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// Registry untuk generated lookup tables\r\n// Diisi oleh cv.register() dari generated file\r\nconst __generatedRegistry: Record<string, Record<string, string>> = {}\r\n\r\n/**\r\n * Register pre-computed variant table dari generated file.\r\n * Dipanggil otomatis saat import variants.generated.ts\r\n */\r\nexport function registerVariantTable(\r\n componentId: string,\r\n table: Record<string, string>\r\n): void {\r\n __generatedRegistry[componentId] = table\r\n}\r\n\r\n// Cache untuk sorted variant keys per componentId — sort() hanya dilakukan sekali\r\n// per componentId karena variantKeys tidak berubah selama runtime\r\nconst _sortedVariantKeysCache = new Map<string, string[]>()\r\n\r\nfunction lookupGenerated(\r\n componentId: string,\r\n props: Record<string, unknown>,\r\n defaultVariants?: Record<string, string>,\r\n variantKeys?: string[]\r\n): string | undefined {\r\n const table = __generatedRegistry[componentId]\r\n if (!table) return undefined\r\n\r\n const merged = { ...defaultVariants, ...props }\r\n\r\n // Cached sorted keys — sort() hanya dilakukan sekali per componentId\r\n let sortedKeys = _sortedVariantKeysCache.get(componentId)\r\n if (!sortedKeys) {\r\n const keysToUse = variantKeys\r\n ? variantKeys\r\n : Object.keys(merged).filter((k) => k !== \"className\")\r\n sortedKeys = [...keysToUse].sort()\r\n _sortedVariantKeysCache.set(componentId, sortedKeys)\r\n }\r\n\r\n // Build lookup key — hot path, hindari array allocation dengan string concat\r\n let key = \"\"\r\n for (let i = 0; i < sortedKeys.length; i++) {\r\n if (i > 0) key += \"|\"\r\n key += sortedKeys[i] + \":\" + String(merged[sortedKeys[i]])\r\n }\r\n\r\n return table[key]\r\n}\r\n\r\n// Cache config JSON per config object reference — menghindari JSON.stringify ulang\r\n// untuk config yang sama. WeakMap dipakai agar GC bisa collect config jika\r\n// komponen di-unmount (tidak ada strong reference leak).\r\nconst _configJsonCache = new WeakMap<object, string>()\r\n\r\nfunction _getConfigJson(config: object): string {\r\n let json = _configJsonCache.get(config)\r\n if (!json) {\r\n json = JSON.stringify(config)\r\n _configJsonCache.set(config, json)\r\n }\r\n return json\r\n}\r\n\r\n// Native Rust variant resolution\r\n// Path 1 (optimal): resolveVariants — full resolution termasuk compound variants di Rust\r\n// Path 2 (fallback): resolveSimpleVariants + JS compound variants\r\n// Path 3 (browser): pure JS fallback\r\nfunction resolveVariantsNative<C extends ComponentConfig>(\r\n config: C,\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>>\r\n): string {\r\n const { base = \"\", variants = {}, compoundVariants = [], defaultVariants = {} } = config\r\n const variantKeys = Object.keys(variants as Record<string, Record<string, string>>)\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n\r\n // Path 1: resolveVariants — full resolution termasuk compound variants\r\n // Lebih cepat dari resolveSimpleVariants + JS compound loop karena\r\n // tidak ada round-trip JS untuk compound resolution\r\n if (binding?.resolveVariants) {\r\n const configJson = _getConfigJson(config as object)\r\n // Build props JSON hanya dari variant keys yang relevan — hindari mengirim\r\n // semua props (onClick, ref, dll) ke Rust yang akan diabaikan\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const dv = (defaultVariants as Record<string, string>)[k]\r\n if (dv !== undefined && dv !== null) cleanProps[k] = String(dv)\r\n }\r\n for (const k of variantKeys) {\r\n const v = (props as Record<string, unknown>)[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n const propsJson = JSON.stringify(cleanProps)\r\n const result = binding.resolveVariants(configJson, propsJson)\r\n return result.classes\r\n }\r\n\r\n // Path 2: resolveSimpleVariants + JS compound variants (fallback)\r\n if (binding?.resolveSimpleVariants) {\r\n const mergedProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const dv = (defaultVariants as Record<string, string>)[k]\r\n if (dv !== undefined && dv !== null) mergedProps[k] = String(dv)\r\n }\r\n for (const k of variantKeys) {\r\n const v = (props as Record<string, unknown>)[k]\r\n if (v !== undefined && v !== null) mergedProps[k] = String(v)\r\n }\r\n\r\n let result = binding.resolveSimpleVariants(\r\n base || null,\r\n variants as Record<string, Record<string, string>>,\r\n {},\r\n mergedProps\r\n )\r\n\r\n // Compound variants — JS loop (hanya masuk sini jika resolveVariants tidak tersedia)\r\n if (compoundVariants.length > 0) {\r\n const resolved: Record<string, unknown> = { ...defaultVariants, ...props }\r\n const extra: string[] = []\r\n for (const compound of compoundVariants) {\r\n const { class: compoundClass, className: compoundClassName, ...conditions } = compound as Record<string, unknown>\r\n const matches = Object.entries(conditions).every(([key, val]) => resolved[key] === val)\r\n if (matches) {\r\n if (compoundClass) extra.push(String(compoundClass))\r\n if (compoundClassName) extra.push(String(compoundClassName))\r\n }\r\n }\r\n if (extra.length > 0) result = `${result} ${extra.join(\" \")}`.trim()\r\n }\r\n\r\n return result\r\n }\r\n } catch {\r\n // Native binding unavailable — browser context, fall through ke JS\r\n }\r\n\r\n // Path 3: pure JS fallback (browser)\r\n const resolved: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const dv = (defaultVariants as Record<string, string>)[k]\r\n if (dv !== undefined) resolved[k] = dv\r\n }\r\n for (const k of variantKeys) {\r\n const v = (props as Record<string, unknown>)[k]\r\n if (v !== undefined && v !== null) resolved[k] = String(v)\r\n }\r\n\r\n const classes: string[] = []\r\n if (base) classes.push(base)\r\n for (const k of variantKeys) {\r\n const variantMap = (variants as Record<string, Record<string, string>>)[k]\r\n const selected = resolved[k]\r\n if (selected !== undefined && variantMap?.[selected] !== undefined) {\r\n classes.push(variantMap[selected])\r\n }\r\n }\r\n\r\n const resolvedFull: Record<string, unknown> = { ...defaultVariants, ...props }\r\n for (const compound of compoundVariants) {\r\n const { class: compoundClass, className: compoundClassName, ...conditions } = compound as Record<string, unknown>\r\n const matches = Object.entries(conditions).every(([key, val]) => resolvedFull[key] === val)\r\n if (matches) {\r\n if (compoundClass) classes.push(String(compoundClass))\r\n if (compoundClassName) classes.push(String(compoundClassName))\r\n }\r\n }\r\n\r\n return classes.filter(Boolean).join(\" \")\r\n}\r\n\r\nexport function cv<C extends ComponentConfig>(config: C, componentId?: string): CvFn<C> {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n const { variants = {}, defaultVariants = {} } = config\r\n for (const dk of Object.keys(defaultVariants)) {\r\n if (!(dk in variants)) {\r\n console.warn(`[tailwind-styled] defaultVariants[\"${dk}\"] not in variants`)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>> = {} as never\r\n ): string => {\r\n let result: string\r\n const variantKeys = Object.keys(config.variants ?? {})\r\n\r\n // Mode 1: generated lookup table (O(1), hasil compile-variants)\r\n if (componentId) {\r\n const generated = lookupGenerated(\r\n componentId,\r\n props as Record<string, unknown>,\r\n config.defaultVariants as Record<string, string>,\r\n variantKeys\r\n )\r\n result = generated ?? resolveVariantsNative(config, props)\r\n } else {\r\n // Mode 2: pure JS fallback\r\n result = resolveVariantsNative(config, props)\r\n }\r\n\r\n return props.className ? twMerge(result, props.className) : result\r\n }\r\n}\r\n\r\nexport interface VariantValidationError {\r\n type: \"unknown_key\" | \"unknown_value\" | \"missing_default\" | \"compound_condition_missing\"\r\n key: string\r\n value?: string\r\n message: string\r\n}\r\n\r\nexport interface VariantValidationResult {\r\n valid: boolean\r\n errors: VariantValidationError[]\r\n warnings: string[]\r\n}\r\n\r\nexport function validateVariantConfig(config: ComponentConfig): VariantValidationResult {\r\n const errors: VariantValidationError[] = []\r\n const warnings: string[] = []\r\n const { variants = {}, defaultVariants = {}, compoundVariants = [] } = config\r\n\r\n for (const [key, val] of Object.entries(defaultVariants)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `defaultVariants[\"${key}\"] not in variants` })\r\n } else if (val && !((variants[key] ?? {})[val])) {\r\n errors.push({ type: \"unknown_value\", key, value: val, message: `invalid value \"${val}\"` })\r\n }\r\n }\r\n\r\n for (const [i, compound] of compoundVariants.entries()) {\r\n const { class: _cls, ...conditions } = compound\r\n for (const [key] of Object.entries(conditions)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `compoundVariants[${i}]: \"${key}\" not in variants` })\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings }\r\n}","/**\r\n * tailwind-styled-v4 v2 — cx / cn\r\n *\r\n * Native-first:\r\n * cn() → simple join (no conflict resolution) — delegates ke Rust `resolve_class_names`\r\n * cx() → conflict-aware merge — delegates ke Rust `tw_merge` (preferred)\r\n * cxm() → alias cx() untuk backward compat\r\n *\r\n * Browser fallback: simple join when native binding unavailable.\r\n * In browser/client context, classes were already resolved on server during SSR.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\ntype ClassValue = string | undefined | null | false | 0\r\n\r\n/**\r\n * cn — simple class name joiner (no conflict resolution).\r\n * Native-first: delegates ke Rust `resolve_class_names` yang filter+join\r\n * dalam satu pass tanpa intermediate allocations.\r\n * Browser fallback: flat+filter+join.\r\n *\r\n * @example cn(\"p-4\", isActive && \"opacity-100\") → \"p-4 opacity-100\"\r\n */\r\nexport function cn(...inputs: (ClassValue | ClassValue[])[]): string {\r\n // Single-pass flatten+filter: hindari .flat().filter() 2 intermediate arrays\r\n const strings: string[] = []\r\n for (const item of inputs) {\r\n if (Array.isArray(item)) {\r\n for (const v of item) { if (v) strings.push(String(v)) }\r\n } else if (item) {\r\n strings.push(String(item))\r\n }\r\n }\r\n if (strings.length === 0) return \"\"\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.resolveClassNames) return native.resolveClassNames(strings)\r\n } catch {\r\n // getNativeBinding() throw di browser — fall through ke JS fallback\r\n }\r\n\r\n return strings.join(\" \")\r\n}\r\n\r\n/**\r\n * cx — conflict-aware class merger.\r\n * Native-first: delegates ke Rust `tw_merge` (preferred).\r\n * Mendukung array inputs — flatten sebelum di-pass ke native.\r\n * Browser fallback: simple join without conflict resolution.\r\n *\r\n * @example cx(\"p-4 p-8\") → \"p-8\"\r\n * @example cx(\"bg-red-500\", \"bg-blue-500\") → \"bg-blue-500\"\r\n * @example cx([\"flex\", \"items-center\"], \"px-4\") → \"flex items-center px-4\"\r\n */\r\nexport function cx(...inputs: (ClassValue | ClassValue[])[]): string {\r\n // Flatten arrays + filter falsy in one pass\r\n const filtered = (inputs as unknown[]).flat().filter(Boolean) as string[]\r\n if (filtered.length === 0) return \"\"\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.twMergeMany) return native.twMergeMany(filtered)\r\n if (native?.twMerge) return native.twMerge(filtered.join(\" \"))\r\n } catch {\r\n // Native binding unavailable in browser — fall through\r\n }\r\n\r\n // Browser/client fallback: simple join\r\n return filtered.join(\" \")\r\n}\r\n\r\n/**\r\n * cxm — alias untuk cx(), kept for backward compatibility.\r\n * @deprecated Use cx() instead.\r\n */\r\nexport const cxm = cx\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Delegates ke Rust cx_nested yang flatten rekursif dalam satu pass.\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n * @example cxn([\"p-4\", [[\"flex\", \"gap-2\"]]]) → \"p-4 flex gap-2\"\r\n */\r\n/**\r\n * Flatten nested array ke string[] — recursive.\r\n * Internal helper untuk cxn().\r\n */\r\nfunction flattenInputs(inputs: unknown[]): string[] {\r\n // Iterative stack — tidak ada risiko stack overflow untuk input deeply nested.\r\n // Sebelumnya: rekursif dengan spread (...flattenInputs()) → banyak intermediate arrays.\r\n // Sesudah: satu stack array + satu result array, zero spread overhead.\r\n const result: string[] = []\r\n const stack: unknown[] = [...inputs]\r\n while (stack.length > 0) {\r\n const item = stack.pop()\r\n if (typeof item === \"string\" && item) result.push(item)\r\n else if (Array.isArray(item)) {\r\n // Push ke stack dalam urutan terbalik agar pop() menghasilkan urutan asli\r\n for (let i = item.length - 1; i >= 0; i--) stack.push(item[i])\r\n }\r\n // null, false, 0, undefined — skip\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Flatten di TS lalu delegate ke native resolveClassNames (zero overhead).\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n */\r\nexport function cxn(inputs: unknown[]): string {\r\n const flat = flattenInputs(inputs)\r\n if (flat.length === 0) return \"\"\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.resolveClassNames) return native.resolveClassNames(flat)\r\n } catch {\r\n // Native binding unavailable in browser\r\n }\r\n return flat.join(\" \")\r\n}","import React from \"react\"\r\n\r\nimport type { TokenMap } from '@tailwind-styled/shared'\r\nexport type { TokenMap }\r\n\r\nexport type TokenSubscriber = (tokens: TokenMap) => void\r\n\r\nexport interface LiveTokenSet {\r\n vars: Record<string, string>\r\n get(name: string): string | undefined\r\n set(name: string, value: string): void\r\n setAll(tokens: TokenMap): void\r\n snapshot(): TokenMap\r\n}\r\n\r\nexport interface LiveTokenEngineBridge {\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n subscribeTokens(fn: TokenSubscriber): () => void\r\n subscribe?(fn: TokenSubscriber): () => void\r\n}\r\n\r\ninterface LiveTokenEngineRuntime {\r\n liveToken(tokens: TokenMap): LiveTokenSet\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n generateTokenCssString(): string\r\n subscribe(fn: TokenSubscriber): () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function tokenVar(name: string): string {\r\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n return `--tw-token-${normalized}`\r\n}\r\n\r\nexport function tokenRef(name: string): string {\r\n return `var(${tokenVar(name)})`\r\n}\r\n\r\nconst buildRootCss = (tokens: TokenMap): string => {\r\n const vars = Object.entries(tokens)\r\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\r\n .join(\"\\n\")\r\n return `:root {\\n${vars}\\n}`\r\n}\r\n\r\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\r\n const state = {\r\n currentTokens: {} as TokenMap,\r\n styleEl: null as HTMLStyleElement | null,\r\n }\r\n const subscribers = new Set<TokenSubscriber>()\r\n\r\n const syncStyleEl = (): void => {\r\n if (typeof document === \"undefined\") return\r\n\r\n if (!state.styleEl) {\r\n const styleEl = document.createElement(\"style\")\r\n styleEl.id = \"tw-live-tokens\"\r\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\r\n document.head.appendChild(styleEl)\r\n state.styleEl = styleEl\r\n }\r\n\r\n state.styleEl.textContent = buildRootCss(state.currentTokens)\r\n }\r\n\r\n const notifySubscribers = (): void => {\r\n const snapshot = { ...state.currentTokens }\r\n for (const subscriber of subscribers) {\r\n try {\r\n subscriber(snapshot)\r\n } catch {\r\n // Intentionally ignore subscriber errors.\r\n }\r\n }\r\n }\r\n\r\n const setToken = (name: string, value: string): void => {\r\n state.currentTokens = { ...state.currentTokens, [name]: value }\r\n if (typeof document !== \"undefined\") {\r\n document.documentElement.style.setProperty(tokenVar(name), value)\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const setTokens = (tokens: TokenMap): void => {\r\n state.currentTokens = { ...state.currentTokens, ...tokens }\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const applyTokenSet = (tokens: TokenMap): void => {\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const name of Object.keys(state.currentTokens)) {\r\n if (!(name in tokens)) {\r\n root.style.removeProperty(tokenVar(name))\r\n }\r\n }\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n\r\n state.currentTokens = { ...tokens }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n return {\r\n liveToken(tokens: TokenMap): LiveTokenSet {\r\n setTokens(tokens)\r\n\r\n const vars: Record<string, string> = {}\r\n for (const name of Object.keys(tokens)) {\r\n vars[name] = tokenRef(name)\r\n }\r\n\r\n return {\r\n vars,\r\n get(name: string) {\r\n return state.currentTokens[name]\r\n },\r\n set(name: string, value: string) {\r\n setToken(name, value)\r\n },\r\n setAll(nextTokens: TokenMap) {\r\n setTokens(nextTokens)\r\n },\r\n snapshot() {\r\n return { ...state.currentTokens }\r\n },\r\n }\r\n },\r\n getToken(name: string): string | undefined {\r\n return state.currentTokens[name]\r\n },\r\n getTokens(): TokenMap {\r\n return { ...state.currentTokens }\r\n },\r\n setToken,\r\n setTokens,\r\n applyTokenSet,\r\n generateTokenCssString(): string {\r\n return buildRootCss(state.currentTokens)\r\n },\r\n subscribe(fn: TokenSubscriber): () => void {\r\n subscribers.add(fn)\r\n return () => {\r\n subscribers.delete(fn)\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst engine = createLiveTokenEngine()\r\n\r\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\r\n return engine.liveToken(tokens)\r\n}\r\n\r\nexport function setToken(name: string, value: string): void {\r\n engine.setToken(name, value)\r\n}\r\n\r\nexport function setTokens(tokens: TokenMap): void {\r\n engine.setTokens(tokens)\r\n}\r\n\r\nexport function applyTokenSet(tokens: TokenMap): void {\r\n engine.applyTokenSet(tokens)\r\n}\r\n\r\nexport function getToken(name: string): string | undefined {\r\n return engine.getToken(name)\r\n}\r\n\r\nexport function getTokens(): TokenMap {\r\n return engine.getTokens()\r\n}\r\n\r\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\r\n return engine.subscribe(fn)\r\n}\r\n\r\nexport function generateTokenCssString(): string {\r\n return engine.generateTokenCssString()\r\n}\r\n\r\nexport function createUseTokens() {\r\n return function useTokens(): TokenMap {\r\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\r\n\r\n React.useEffect(() => {\r\n setTokensState(engine.getTokens())\r\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\r\n }, [])\r\n\r\n return tokens\r\n }\r\n}\r\n\r\nexport const liveTokenEngine: LiveTokenEngineBridge = {\r\n getToken: engine.getToken,\r\n getTokens: engine.getTokens,\r\n setToken: engine.setToken,\r\n setTokens: engine.setTokens,\r\n applyTokenSet: engine.applyTokenSet,\r\n subscribeTokens: engine.subscribe,\r\n subscribe: engine.subscribe,\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\r\n }\r\n}\r\n\r\nconst globalTokenEngine = globalThis as typeof globalThis & {\r\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\r\n}\r\n\r\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\r\n}\r\n","import React from \"react\"\r\n\r\nexport interface SubComponentProps {\r\n children?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport interface SubComponentEntry {\r\n name: string\r\n component: React.FC<SubComponentProps>\r\n defaultClasses?: string\r\n}\r\n\r\nconst subComponentRegistry = new Map<string, SubComponentEntry>()\r\n\r\nexport function registerSubComponent(entry: SubComponentEntry): void {\r\n subComponentRegistry.set(entry.name, entry)\r\n}\r\n\r\nexport function getSubComponent(name: string): SubComponentEntry | undefined {\r\n return subComponentRegistry.get(name)\r\n}\r\n\r\nexport function getAllSubComponents(): SubComponentEntry[] {\r\n return Array.from(subComponentRegistry.values())\r\n}\r\n\r\nexport function withSubComponents<T extends object>(\r\n Component: T,\r\n subComponentNames: string[]\r\n): T & Record<string, React.FC<SubComponentProps>> {\r\n const result = { ...Component } as Record<string, unknown>\r\n for (const name of subComponentNames) {\r\n const entry = getSubComponent(name)\r\n if (entry) result[name] = entry.component\r\n }\r\n return result as T & Record<string, React.FC<SubComponentProps>>\r\n}\r\n\r\nregisterSubComponent({\r\n name: \"icon\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"text\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"badge\",\r\n component: ({ children, className }) =>\r\n React.createElement(\r\n \"span\",\r\n {\r\n className: `ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white ${className || \"\"}`,\r\n },\r\n children\r\n ),\r\n defaultClasses: \"ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"header\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"header\", { className: `font-bold text-lg ${className || \"\"}` }, children),\r\n defaultClasses: \"font-bold text-lg\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"body\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `flex-1 ${className || \"\"}` }, children),\r\n defaultClasses: \"flex-1\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"footer\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"footer\", { className: `border-t pt-4 ${className || \"\"}` }, children),\r\n defaultClasses: \"border-t pt-4\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"content\",\r\n component: ({ children, className }) => React.createElement(\"div\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"title\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `font-semibold ${className || \"\"}` }, children),\r\n defaultClasses: \"font-semibold\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"message\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `text-sm ${className || \"\"}` }, children),\r\n defaultClasses: \"text-sm\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"close\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"span\", { className: `cursor-pointer ${className || \"\"}` }, children),\r\n defaultClasses: \"cursor-pointer\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"image\",\r\n component: ({ className }) => React.createElement(\"img\", { className }),\r\n defaultClasses: \"\",\r\n})\r\n","import { twMerge } from \"./merge\"\r\n\r\nexport interface StyledOptions {\r\n base?: string\r\n variants?: Record<string, Record<string, string>>\r\n defaultVariants?: Record<string, string>\r\n compoundVariants?: Array<{\r\n variants: Record<string, string>\r\n className: string\r\n }>\r\n}\r\n\r\nexport type StyledProps = {\r\n className?: string\r\n} & Record<string, string | number | boolean | undefined>\r\n\r\nfunction resolveVariantClass(options: StyledOptions, props: StyledProps): string[] {\r\n const out: string[] = []\r\n const variants = options.variants ?? {}\r\n const defaults = options.defaultVariants ?? {}\r\n\r\n for (const [variantName, valueMap] of Object.entries(variants)) {\r\n const value = props[variantName] ?? defaults[variantName]\r\n if (value === undefined) continue\r\n\r\n const key = String(value)\r\n const cls = valueMap[key]\r\n if (cls) out.push(cls)\r\n }\r\n\r\n for (const compound of options.compoundVariants ?? []) {\r\n const matches = Object.entries(compound.variants).every(([k, expected]) => {\r\n const current = props[k] ?? defaults[k]\r\n return String(current) === expected\r\n })\r\n\r\n if (matches) out.push(compound.className)\r\n }\r\n\r\n return out\r\n}\r\n\r\nexport function resolveStyledClassName(options: StyledOptions, props: StyledProps = {}): string {\r\n const parts = [options.base ?? \"\", ...resolveVariantClass(options, props), props.className ?? \"\"]\r\n return twMerge(...parts)\r\n}\r\n\r\nexport function styled(options: StyledOptions) {\r\n return function getClassName(props: StyledProps = {}): string {\r\n return resolveStyledClassName(options, props)\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — createStyledSystem()\r\n *\r\n * Design System Factory — Mode 3 API.\r\n *\r\n * Level 1 — utility: tw.div`p-4`\r\n * Level 2 — styled: tw(Button)`px-4`\r\n * Level 3 — design system: ui.button({ variant: \"primary\" })\r\n *\r\n * Usage:\r\n * const ui = createStyledSystem({\r\n * tokens: {\r\n * colors: { primary: \"#6366f1\", muted: \"#71717a\" },\r\n * radius: { base: \"0.5rem\", full: \"9999px\" },\r\n * },\r\n * components: {\r\n * button: {\r\n * base: \"inline-flex items-center font-medium transition-colors\",\r\n * variants: {\r\n * variant: {\r\n * primary: \"bg-[var(--sys-color-primary)] text-white\",\r\n * ghost: \"bg-transparent border border-current\",\r\n * danger: \"bg-red-500 text-white\",\r\n * },\r\n * size: {\r\n * sm: \"h-8 px-3 text-sm\",\r\n * md: \"h-10 px-4 text-base\",\r\n * lg: \"h-12 px-6 text-lg\",\r\n * },\r\n * },\r\n * defaultVariants: { variant: \"primary\", size: \"md\" },\r\n * },\r\n * },\r\n * })\r\n *\r\n * const Button = ui.button()\r\n * // → <Button variant=\"primary\" size=\"lg\" />\r\n *\r\n * // Token access\r\n * ui.token(\"colors.primary\") // → \"var(--sys-color-primary)\"\r\n * ui.cssVar(\"colors.primary\") // → \"#6366f1\"\r\n */\r\n\r\nimport type React from \"react\"\r\n\r\nimport { createComponent } from \"./createComponent\"\r\nimport type { ComponentConfig, TwStyledComponent } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// System token types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface SystemComponentConfig extends ComponentConfig {\r\n /** Extra class applied only when used from the system (e.g. system-level resets) */\r\n systemBase?: string\r\n /** HTML tag for the component */\r\n tag?: string\r\n}\r\n\r\nexport interface StyledSystemConfig<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n> {\r\n /** Design tokens — injected as CSS custom properties under --sys-{group}-{name} */\r\n tokens?: T\r\n /** Component presets */\r\n components?: C\r\n /** CSS variable prefix. Default: \"sys\" → --sys-color-primary */\r\n prefix?: string\r\n /** If true, auto-inject token CSS vars into :root on init. Default: true */\r\n injectTokens?: boolean\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Token → CSS var helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction tokenVarName(prefix: string, group: string, name: string): string {\r\n return `--${prefix}-${group}-${name}`\r\n}\r\n\r\nfunction tokenVarRef(prefix: string, group: string, name: string): string {\r\n return `var(${tokenVarName(prefix, group, name)})`\r\n}\r\n\r\nfunction resolveTokenRef(tokens: SystemTokenMap, prefix: string, value: string): string {\r\n // If value is \"token:colors.primary\" → resolve to var(--sys-colors-primary)\r\n if (value.startsWith(\"token:\")) {\r\n const path = value.slice(6)\r\n const [group, name] = path.split(\".\")\r\n if (group && name && tokens[group]?.[name] !== undefined) {\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction injectTokensToRoot(tokens: SystemTokenMap, prefix: string): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const lines: string[] = [\":root {\"]\r\n for (const [group, map] of Object.entries(tokens)) {\r\n for (const [name, value] of Object.entries(map)) {\r\n lines.push(` ${tokenVarName(prefix, group, name)}: ${value};`)\r\n }\r\n }\r\n lines.push(\"}\")\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.textContent = lines.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Variant class resolver — replaces \"token:*\" references inside variant values\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction resolveComponentConfig(\r\n config: SystemComponentConfig,\r\n tokens: SystemTokenMap,\r\n prefix: string\r\n): ComponentConfig {\r\n const resolveStr = (s: string) => resolveTokenRef(tokens, prefix, s)\r\n\r\n const base = resolveStr(config.base ?? \"\")\r\n const systemBase = resolveStr(config.systemBase ?? \"\")\r\n const mergedBase = [systemBase, base].filter(Boolean).join(\" \")\r\n\r\n const variants: Record<string, Record<string, string>> = {}\r\n for (const [variantKey, variantMap] of Object.entries(config.variants ?? {})) {\r\n variants[variantKey] = {}\r\n for (const [optKey, classes] of Object.entries(variantMap)) {\r\n variants[variantKey][optKey] = classes.split(\" \").map(resolveStr).join(\" \")\r\n }\r\n }\r\n\r\n const compoundVariants = (config.compoundVariants ?? []).map((cv) => {\r\n const { class: cls, ...rest } = cv\r\n return { class: resolveStr(cls), ...rest }\r\n })\r\n\r\n return {\r\n base: mergedBase,\r\n variants,\r\n compoundVariants,\r\n defaultVariants: config.defaultVariants ?? {},\r\n state: config.state,\r\n container: config.container,\r\n containerName: config.containerName,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// StyledSystem instance type\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemComponentFactory<C extends SystemComponentConfig> = (\r\n overrides?: Partial<C>\r\n) => TwStyledComponent<ComponentConfig, string>\r\n\r\nexport type StyledSystemInstance<\r\n T extends SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig>,\r\n> = {\r\n [K in keyof C]: SystemComponentFactory<C[K]>\r\n} & {\r\n /**\r\n * Get the CSS variable reference for a token.\r\n * @example ui.token(\"colors.primary\") → \"var(--sys-colors-primary)\"\r\n */\r\n token(path: string): string\r\n /**\r\n * Get the raw value of a token.\r\n * @example ui.rawToken(\"colors.primary\") → \"#6366f1\"\r\n */\r\n rawToken(path: string): string | undefined\r\n /**\r\n * Update token values at runtime (re-injects into :root).\r\n */\r\n setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void\r\n /**\r\n * Access the resolved component config for a registered component.\r\n */\r\n getConfig(name: keyof C): ComponentConfig | undefined\r\n /**\r\n * The tokens object (for reference).\r\n */\r\n tokens: T\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createStyledSystem\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function createStyledSystem<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n>(config: StyledSystemConfig<T, C>): StyledSystemInstance<T, C> {\r\n const prefix = config.prefix ?? \"sys\"\r\n const tokens = (config.tokens ?? {}) as T\r\n const componentDefs = config.components ?? ({} as C)\r\n const shouldInject = config.injectTokens !== false\r\n\r\n // Inject tokens into :root on first call (client only)\r\n if (shouldInject && typeof window !== \"undefined\") {\r\n injectTokensToRoot(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n // Cache resolved component configs\r\n const resolvedConfigs = new Map<string, ComponentConfig>()\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n resolvedConfigs.set(\r\n name,\r\n resolveComponentConfig(compCfg, tokens as SystemTokenMap, prefix)\r\n )\r\n }\r\n\r\n // Build component factories\r\n const factories: Record<string, SystemComponentFactory<SystemComponentConfig>> = {}\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n const tag = compCfg.tag ?? \"div\"\r\n\r\n factories[name] = (overrides?: Partial<SystemComponentConfig>) => {\r\n const baseResolved = resolvedConfigs.get(name)!\r\n const runtimeTag = tag as React.ElementType\r\n\r\n if (!overrides || Object.keys(overrides).length === 0) {\r\n return createComponent(runtimeTag, baseResolved) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Merge overrides into resolved config\r\n const overrideResolved = resolveComponentConfig(\r\n overrides as SystemComponentConfig,\r\n tokens as SystemTokenMap,\r\n prefix\r\n )\r\n\r\n const merged: ComponentConfig = {\r\n base: [baseResolved.base, overrideResolved.base].filter(Boolean).join(\" \"),\r\n variants: {\r\n ...(baseResolved.variants ?? undefined),\r\n ...(overrideResolved.variants ?? undefined),\r\n },\r\n compoundVariants: [\r\n ...(baseResolved.compoundVariants ?? []),\r\n ...(overrideResolved.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(baseResolved.defaultVariants ?? undefined),\r\n ...(overrideResolved.defaultVariants ?? undefined),\r\n },\r\n state: overrideResolved.state ?? baseResolved.state,\r\n container: overrideResolved.container ?? baseResolved.container,\r\n containerName: overrideResolved.containerName ?? baseResolved.containerName,\r\n }\r\n\r\n return createComponent(runtimeTag, merged) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n }\r\n\r\n // Token utilities\r\n function token(path: string): string {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return path\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n\r\n function rawToken(path: string): string | undefined {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return undefined\r\n return (tokens as SystemTokenMap)[group]?.[name]\r\n }\r\n\r\n function setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n // Find or create the :root style element\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n const style =\r\n (document.getElementById(styleId) as HTMLStyleElement | null) ??\r\n (() => {\r\n const el = document.createElement(\"style\")\r\n el.id = styleId\r\n document.head.appendChild(el)\r\n return el\r\n })()\r\n\r\n // Merge updates into tokens and re-generate\r\n for (const [group, map] of Object.entries(updates)) {\r\n if (!tokens[group as keyof T]) continue\r\n for (const [name, value] of Object.entries(map as Record<string, string>)) {\r\n ;(tokens as SystemTokenMap)[group][name] = value\r\n }\r\n }\r\n\r\n const lines: string[] = [\":root {\"]\r\n for (const [group, map] of Object.entries(tokens as SystemTokenMap)) {\r\n for (const [name, value] of Object.entries(map)) {\r\n lines.push(` ${tokenVarName(prefix, group, name)}: ${value};`)\r\n }\r\n }\r\n lines.push(\"}\")\r\n style.textContent = lines.join(\"\\n\")\r\n }\r\n\r\n function getConfig(name: keyof C): ComponentConfig | undefined {\r\n return resolvedConfigs.get(name as string)\r\n }\r\n\r\n return Object.assign(factories, {\r\n token,\r\n rawToken,\r\n setTokens,\r\n getConfig,\r\n tokens,\r\n }) as StyledSystemInstance<T, C>\r\n}","/**\r\n * tailwind-styled-v4 v2 — tw\r\n *\r\n * API:\r\n * tw.div`p-4 bg-zinc-900`\r\n * tw.button`px-4 [icon] { h-4 w-4 }` ← sub-components inline\r\n * tw.button({ base: \"px-4\", variants: { size: { sm: \"text-sm\" } } })\r\n * tw(Link)`underline text-blue-400`\r\n * tw.server.div`p-4` ← server-only, compiler enforced + runtime dev warning\r\n */\r\n\r\nimport React from \"react\"\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type {\r\n ComponentConfig,\r\n TwComponentFactory,\r\n TwObject,\r\n TwServerObject,\r\n TwStyledComponent,\r\n TwTagFactory,\r\n TwTagFactoryAny,\r\n} from \"./types\"\r\n\r\n// types.ts is single source of truth — re-export for consumers\r\nexport type { TwComponentFactory, TwObject, TwServerObject, TwTagFactory }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Template parser\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface ParsedTemplate {\r\n /** Base classes — tanpa sub-component blocks */\r\n base: string\r\n /** Sub-component map: { icon: \"h-4 w-4 ...\", badge: \"px-2 ...\" } */\r\n subs: Record<string, string>\r\n /** Ada sub-component atau tidak */\r\n hasSubs: boolean\r\n}\r\n\r\n// JS fallback — hanya aktif jika native binding tidak tersedia (e.g. browser)\r\nconst SUB_RE = /(?:\\[([a-zA-Z][a-zA-Z0-9_-]*)\\]|([a-zA-Z][a-zA-Z0-9_-]*))\\s*\\{([^}]*)\\}/g\r\nconst COMMENT_RE = /\\/\\/[^\\n]*/g\r\n\r\nfunction parseTemplateFallback(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n const subs: Record<string, string> = {}\r\n let base = raw\r\n\r\n let match: RegExpExecArray | null\r\n SUB_RE.lastIndex = 0\r\n while ((match = SUB_RE.exec(raw)) !== null) {\r\n const name = match[1] ?? match[2]\r\n // Single pass: replace comment → split → trim → filter → join\r\n // Sebelumnya 4 method chain = 4 intermediate arrays.\r\n // Sesudah: satu loop dengan result string accumulation.\r\n const rawInner = match[3].replace(COMMENT_RE, \"\")\r\n let inner = \"\"\r\n for (const line of rawInner.split(\"\\n\")) {\r\n const t = line.trim()\r\n if (t) inner += (inner ? \" \" : \"\") + t\r\n }\r\n inner = inner.replace(/\\s+/g, \" \").trim()\r\n\r\n subs[name] = inner\r\n base = base.replace(match[0], \"\")\r\n }\r\n\r\n // Same single-pass optimization for base string\r\n const rawBase = base.replace(COMMENT_RE, \"\")\r\n let cleanBase = \"\"\r\n for (const line of rawBase.split(\"\\n\")) {\r\n const t = line.trim()\r\n if (t) cleanBase += (cleanBase ? \" \" : \"\") + t\r\n }\r\n cleanBase = cleanBase.replace(/\\s+/g, \" \").trim()\r\n\r\n return { base: cleanBase, subs, hasSubs: Object.keys(subs).length > 0 }\r\n}\r\n\r\n// Cache untuk parseTemplate — raw template string tidak berubah antar hot reloads\r\n// (string literal di source code adalah konstanta). Cache ini memastikan\r\n// Rust parseTemplate + JSON.parse hanya dipanggil SEKALI per unique template.\r\n// Key: raw string hasil join (bukan TemplateStringsArray — tidak bisa dijadikan Map key).\r\nconst _parsedTemplateCache = new Map<string, ParsedTemplate>()\r\n\r\n/**\r\n * parseTemplate — native-first, cache-first.\r\n *\r\n * Join strings+exprs di JS (TemplateStringsArray tidak bisa di-serialize ke NAPI),\r\n * lalu kirim raw string ke Rust untuk parsing.\r\n * Cache: Rust + JSON.parse hanya dipanggil SEKALI per unique template string.\r\n * Fallback ke pure-JS jika native tidak tersedia (browser / test env).\r\n */\r\nfunction parseTemplate(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n // Join dulu di JS — Rust terima satu raw string\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n // Cache lookup — template literal di source code adalah konstanta\r\n const cached = _parsedTemplateCache.get(raw)\r\n if (cached) return cached\r\n\r\n let result: ParsedTemplate\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (binding?.parseTemplate) {\r\n const r = binding.parseTemplate(raw)\r\n // JSON.parse sekali — disimpan di cache, tidak pernah di-parse ulang\r\n const subs: Record<string, string> = r.hasSubs ? JSON.parse(r.subsJson) : {}\r\n result = { base: r.base, subs, hasSubs: r.hasSubs }\r\n _parsedTemplateCache.set(raw, result)\r\n return result\r\n }\r\n } catch {\r\n // binding unavailable — fall through to JS\r\n }\r\n\r\n result = parseTemplateFallback(strings, exprs)\r\n _parsedTemplateCache.set(raw, result)\r\n return result\r\n}\r\n\r\ntype RuntimeTagFactory = ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n) => TwStyledComponent<ComponentConfig, string>) &\r\n TwTagFactoryAny\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// makeTag\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeTag(tag: React.ElementType): RuntimeTagFactory {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n // Object config path\r\n if (\r\n !Array.isArray(stringsOrConfig) &&\r\n typeof stringsOrConfig === \"object\" &&\r\n stringsOrConfig !== null &&\r\n !(\"raw\" in stringsOrConfig)\r\n ) {\r\n return createComponent(tag, stringsOrConfig as ComponentConfig) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Template literal path\r\n const parsed = parseTemplate(stringsOrConfig as TemplateStringsArray, exprs)\r\n\r\n // Buat component dari base classes\r\n const component = createComponent(tag, parsed.base)\r\n\r\n // Attach sub-components sebagai React.FC dari classes yang di-extract\r\n if (parsed.hasSubs) {\r\n for (const [name, classes] of Object.entries(parsed.subs)) {\r\n // Setiap sub-component adalah styled span/div dengan classesnya\r\n const SubComp = React.forwardRef<\r\n HTMLSpanElement,\r\n { children?: React.ReactNode; className?: string }\r\n >(({ children, className }, ref) =>\r\n React.createElement(\"span\", {\r\n ref,\r\n className: className ? `${classes} ${className}` : classes,\r\n }, children)\r\n )\r\n SubComp.displayName = `tw.${typeof tag === \"string\" ? tag : \"component\"}.${name}`;\r\n ;(component as unknown as Record<string, unknown>)[name] = SubComp\r\n }\r\n }\r\n\r\n return component as unknown as TwStyledComponent<ComponentConfig, string>\r\n }) as RuntimeTagFactory\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// HTML tag list\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst HTML_TAGS = [\r\n \"div\", \"section\", \"article\", \"aside\", \"header\", \"footer\", \"main\", \"nav\",\r\n \"figure\", \"figcaption\", \"details\", \"summary\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"span\", \"strong\", \"em\", \"b\", \"i\", \"s\", \"u\", \"small\", \"mark\",\r\n \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"address\",\r\n \"blockquote\", \"q\", \"del\", \"ins\", \"sub\", \"sup\",\r\n \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\",\r\n \"colgroup\", \"col\",\r\n \"img\", \"picture\", \"video\", \"audio\", \"source\", \"track\",\r\n \"canvas\", \"svg\", \"path\", \"circle\", \"rect\", \"line\",\r\n \"polyline\", \"polygon\", \"g\", \"defs\", \"use\", \"symbol\",\r\n \"form\", \"input\", \"textarea\", \"select\", \"option\", \"optgroup\",\r\n \"button\", \"label\", \"fieldset\", \"legend\", \"output\",\r\n \"progress\", \"meter\", \"datalist\",\r\n \"a\", \"area\", \"map\", \"iframe\", \"embed\", \"object\",\r\n \"pre\", \"hr\", \"br\", \"wbr\", \"dialog\", \"menu\", \"template\", \"slot\",\r\n] as const\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw.server — server-only namespace with dev warning\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeServerTag(tag: React.ElementType): RuntimeTagFactory {\r\n const baseFactory = makeTag(tag)\r\n if (typeof window !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n const tagName =\r\n typeof tag === \"string\"\r\n ? tag\r\n : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n console.warn(\r\n `[tailwind-styled-v4] tw.server.${tagName} rendered in browser. ` +\r\n `Ensure withTailwindStyled or Vite plugin is configured.`\r\n )\r\n return baseFactory(stringsOrConfig, ...exprs)\r\n }) as RuntimeTagFactory\r\n }\r\n return baseFactory\r\n}\r\n\r\nconst serverFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n serverFactories[tag] = makeServerTag(tag as React.ElementType)\r\n}\r\n\r\nexport const server: TwServerObject = serverFactories as unknown as TwServerObject\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw — main export\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst tagFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n tagFactories[tag] = makeTag(tag as React.ElementType)\r\n}\r\n\r\nfunction twCallable(component: React.ComponentType<unknown>) {\r\n return makeTag(component)\r\n}\r\n\r\nexport const tw: TwObject = Object.assign(twCallable, tagFactories, {\r\n server,\r\n}) as unknown as TwObject","/**\r\n * tailwind-styled-v4 v2 — twTheme\r\n *\r\n * UPGRADE #1: Tailwind v4 CSS Variables integration.\r\n *\r\n * Tailwind v4 uses @theme inline to expose design tokens as CSS custom properties:\r\n * @theme inline {\r\n * --color-background: var(--background);\r\n * --color-foreground: var(--foreground);\r\n * --font-sans: var(--font-geist-sans);\r\n * }\r\n *\r\n * This module bridges tw() syntax with those CSS variables — zero config,\r\n * full IDE support, type-safe design tokens.\r\n *\r\n * @example\r\n * // Without twTheme (verbose, error-prone)\r\n * const Box = tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n *\r\n * // With twTheme (clean, type-safe)\r\n * const Box = tw.div`${t.bg(\"color-background\")} ${t.text(\"color-foreground\")}`\r\n *\r\n * // Or with createTheme for full project-level token map\r\n * const theme = createTheme({\r\n * colors: { bg: \"color-background\", fg: \"color-foreground\", primary: \"color-primary\" },\r\n * fonts: { sans: \"font-sans\", mono: \"font-mono\" },\r\n * })\r\n * const Box = tw.div`bg-${theme.colors.bg} text-${theme.colors.fg}`\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Core helper — CSS variable reference\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Reference a CSS custom property in Tailwind v4 arbitrary value syntax.\r\n *\r\n * @example\r\n * cssVar(\"color-background\") → \"var(--color-background)\"\r\n * cssVar(\"color-primary\", \"#3b82f6\") → \"var(--color-primary, #3b82f6)\"\r\n */\r\nexport function cssVar(varName: string, fallback?: string): string {\r\n const name = varName.startsWith(\"--\") ? varName : `--${varName}`\r\n return fallback ? `var(${name}, ${fallback})` : `var(${name})`\r\n}\r\n\r\n/**\r\n * Generate a Tailwind v4 arbitrary value that references a CSS variable.\r\n *\r\n * @example\r\n * twVar(\"bg\", \"color-background\") → \"bg-[var(--color-background)]\"\r\n * twVar(\"text\", \"color-foreground\") → \"text-[var(--color-foreground)]\"\r\n * twVar(\"border\", \"color-border\", \"#e5e7eb\") → \"border-[var(--color-border,#e5e7eb)]\"\r\n */\r\nexport function twVar(property: string, varName: string, fallback?: string): string {\r\n const ref = fallback ? `var(--${varName},${fallback})` : `var(--${varName})`\r\n return `${property}-[${ref}]`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience shorthand builders\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const t = {\r\n /** Background color from CSS variable: t.bg(\"color-primary\") → \"bg-[var(--color-primary)]\" */\r\n bg: (v: string, fb?: string) => twVar(\"bg\", v, fb),\r\n /** Text color from CSS variable */\r\n text: (v: string, fb?: string) => twVar(\"text\", v, fb),\r\n /** Border color from CSS variable */\r\n border: (v: string, fb?: string) => twVar(\"border\", v, fb),\r\n /** Ring color from CSS variable */\r\n ring: (v: string, fb?: string) => twVar(\"ring\", v, fb),\r\n /** Outline color from CSS variable */\r\n outline: (v: string, fb?: string) => twVar(\"outline\", v, fb),\r\n /** Fill color from CSS variable (SVG) */\r\n fill: (v: string, fb?: string) => twVar(\"fill\", v, fb),\r\n /** Stroke color from CSS variable (SVG) */\r\n stroke: (v: string, fb?: string) => twVar(\"stroke\", v, fb),\r\n /** Font family from CSS variable */\r\n font: (v: string, fb?: string) => twVar(\"font\", v, fb),\r\n /** Shadow from CSS variable */\r\n shadow: (v: string, fb?: string) => twVar(\"shadow\", v, fb),\r\n /** Any arbitrary property from CSS variable */\r\n var: (property: string, v: string, fb?: string) => twVar(property, v, fb),\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme — project-level design token map\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ThemeTokenMap {\r\n colors?: Record<string, string>\r\n fonts?: Record<string, string>\r\n spacing?: Record<string, string>\r\n [key: string]: Record<string, string> | undefined\r\n}\r\n\r\nexport type ResolvedThemeTokens<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: T[Group] extends Record<string, string>\r\n ? {\r\n [Token in keyof T[Group]]: string\r\n }\r\n : never\r\n}\r\n\r\n/**\r\n * Create a typed theme token map from your CSS variable names.\r\n * Returns helper functions that generate Tailwind v4 arbitrary values.\r\n *\r\n * @example\r\n * // Define your tokens (match your globals.css @theme block)\r\n * const theme = createTheme({\r\n * colors: {\r\n * bg: \"color-background\",\r\n * fg: \"color-foreground\",\r\n * primary: \"color-primary\",\r\n * muted: \"color-muted\",\r\n * },\r\n * fonts: {\r\n * sans: \"font-sans\",\r\n * mono: \"font-mono\",\r\n * },\r\n * })\r\n *\r\n * // Use in tw components\r\n * const Card = tw.div`\r\n * bg-${theme.colors.bg}\r\n * text-${theme.colors.fg}\r\n * font-${theme.fonts.sans}\r\n * `\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)] font-[var(--font-sans)]`\r\n *\r\n * // Use in cv()\r\n * const button = cv({\r\n * base: `px-4 py-2 ${theme.colors.bg} ${theme.colors.fg}`,\r\n * variants: { ... }\r\n * })\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(tokenMap: T): ResolvedThemeTokens<T> {\r\n const resolved: Record<string, Record<string, string>> = {}\r\n\r\n for (const group in tokenMap) {\r\n resolved[group] = {}\r\n const tokens = tokenMap[group]!\r\n for (const name in tokens) {\r\n const varName = tokens[name]\r\n const prefix = getGroupPrefix(group)\r\n resolved[group][name] = prefix ? twVar(prefix, varName) : cssVar(varName)\r\n }\r\n }\r\n\r\n return resolved as ResolvedThemeTokens<T>\r\n}\r\n\r\nfunction getGroupPrefix(group: string): string {\r\n const map: Record<string, string> = {\r\n colors: \"bg\", // default to bg; user can use t.text() for text colors\r\n fonts: \"font\",\r\n spacing: \"p\",\r\n shadows: \"shadow\",\r\n }\r\n return map[group] ?? \"\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standard Tailwind v4 tokens\r\n//\r\n// Pre-built token references for the default next-app globals.css setup.\r\n// These match what Tailwind v4's @theme inline generates.\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Pre-built references for standard Tailwind v4 CSS variable tokens.\r\n * Works out of the box with next-app-standar-config globals.css.\r\n *\r\n * @example\r\n * import { v4Tokens } from \"tailwind-styled-v4\"\r\n *\r\n * const Page = tw.div`${v4Tokens.bg} ${v4Tokens.text}`\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n */\r\nexport const v4Tokens = {\r\n /** bg-[var(--color-background)] */\r\n bg: twVar(\"bg\", \"color-background\"),\r\n /** text-[var(--color-foreground)] */\r\n text: twVar(\"text\", \"color-foreground\"),\r\n /** font-[var(--font-sans)] */\r\n fontSans: twVar(\"font\", \"font-sans\"),\r\n /** font-[var(--font-mono)] */\r\n fontMono: twVar(\"font\", \"font-mono\"),\r\n} as const\r\n"]}
|