tailwind-styled-v4 5.0.9 → 5.0.10
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/CHANGELOG.md +15 -1
- package/dist/{analyzeWorkspace-DuJKh7Ty.d.mts → analyzeWorkspace-BS5O4rhC.d.mts} +47 -2
- package/dist/{analyzeWorkspace-Ct_NTAWt.d.ts → analyzeWorkspace-DDOQdzzI.d.ts} +47 -2
- package/dist/analyzer.d.mts +5 -3
- package/dist/analyzer.d.ts +5 -3
- package/dist/analyzer.js +563 -468
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +562 -467
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.d.mts +4 -7
- package/dist/animate.d.ts +4 -7
- package/dist/animate.js +171 -265
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +165 -264
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.d.mts +22 -1
- package/dist/atomic.d.ts +22 -1
- package/dist/atomic.js +221 -165
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +200 -165
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.d.mts +60 -1
- package/dist/cli.d.ts +60 -1
- package/dist/cli.js +1261 -1517
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +1238 -1513
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +38 -7
- package/dist/compiler.d.ts +38 -7
- package/dist/compiler.js +174 -197
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +151 -194
- package/dist/compiler.mjs.map +1 -1
- package/dist/devtools.js +7 -31
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +7 -31
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.d.mts +134 -63
- package/dist/engine.d.ts +134 -63
- package/dist/engine.js +2863 -2482
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +2852 -2485
- package/dist/engine.mjs.map +1 -1
- package/dist/{index-eWAocnD2.d.mts → index-NDINUhLN.d.mts} +3 -1
- package/dist/{index-eWAocnD2.d.ts → index-NDINUhLN.d.ts} +3 -1
- package/dist/index.d.mts +45 -32
- package/dist/index.d.ts +45 -32
- package/dist/index.js +271 -158
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +251 -158
- package/dist/index.mjs.map +1 -1
- package/dist/{liveTokenEngine-DSUk88P6.d.ts → liveTokenEngine-CN9ian1R.d.ts} +1 -1
- package/dist/{liveTokenEngine-CX5_0c4q.d.mts → liveTokenEngine-DKoWRtqH.d.mts} +1 -1
- package/dist/next.js +20 -39
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +18 -37
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.d.mts +8 -2
- package/dist/plugin-api.d.ts +8 -2
- package/dist/plugin-api.js +14 -2
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs +14 -3
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +51 -11
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +51 -11
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.d.mts +5 -7
- package/dist/plugin.d.ts +5 -7
- package/dist/plugin.js +16 -15
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +16 -16
- package/dist/plugin.mjs.map +1 -1
- package/dist/rspack.js +17 -38
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +15 -36
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/scanner.d.mts +10 -1
- package/dist/scanner.d.ts +10 -1
- package/dist/scanner.js +298 -124
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +296 -124
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.d.mts +1 -1
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +104 -176
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +85 -176
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.d.mts +1 -1
- package/dist/storybook-addon.d.ts +1 -1
- package/dist/svelte.d.mts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/svelte.js +166 -3
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +143 -1
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +21 -21
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +21 -21
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +9 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +9 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.d.mts +2 -2
- package/dist/theme.d.ts +2 -2
- package/dist/theme.js +40 -112
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +37 -110
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +79 -124
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +63 -122
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +1256 -1517
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +1236 -1513
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +1783 -823
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +1767 -821
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +1 -1
- package/dist/vue.d.ts +1 -1
- package/dist/vue.js +165 -4
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +141 -1
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +65 -108
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +45 -104
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +22 -24
package/dist/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/shared/src/index.ts","../packages/domain/theme/src/native-bridge.ts","../packages/domain/theme/src/schemas.ts","../packages/domain/theme/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React","path","fileURLToPath","z","flatVars"],"mappings":"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","file":"theme.js","sourcesContent":["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","const isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require detection\r\nlet nodeModuleRef: any = null\r\nfunction getNodeModuleRef() {\r\n if (isBrowser) return null\r\n if (nodeModuleRef !== null) return nodeModuleRef\r\n try {\r\n const test = typeof require === 'function' ? require('node:module') : null\r\n nodeModuleRef = test\r\n return test\r\n } catch {\r\n nodeModuleRef = null\r\n return null\r\n }\r\n}\r\n\r\nlet _nodeCrypto: any = null\r\nlet _nodeFs: any = null\r\nlet _nodeModule: any = null\r\nlet _nodePath: any = null\r\nlet _nodeUrl: any = null\r\n\r\nfunction getNodeCrypto() {\r\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeCrypto) _nodeCrypto = nodeRequire.createRequire(import.meta.url)(\"node:crypto\")\r\n return _nodeCrypto!\r\n}\r\nfunction getNodeFs() {\r\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeFs) _nodeFs = nodeRequire.createRequire(import.meta.url)(\"node:fs\")\r\n return _nodeFs!\r\n}\r\nfunction getNodeModule() {\r\n if (isBrowser) throw new Error(\"node:module not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeModule) _nodeModule = nodeRequire\r\n return _nodeModule!\r\n}\r\nfunction getNodePath() {\r\n if (isBrowser) throw new Error(\"node:path not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodePath) _nodePath = nodeRequire.createRequire(import.meta.url)(\"node:path\")\r\n return _nodePath!\r\n}\r\nfunction getNodeUrl() {\r\n if (isBrowser) throw new Error(\"node:url not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeUrl) _nodeUrl = nodeRequire.createRequire(import.meta.url)(\"node:url\")\r\n return _nodeUrl!\r\n}\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 if (isBrowser) {\r\n return { binding: null, loadErrors: [{ path: \"\", message: \"Native bindings not available in browser\" }] }\r\n }\r\n \r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n const path = getNodePath()\r\n const fs = getNodeFs()\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\nfunction getRequire(): NodeRequire {\r\n if (isBrowser) return (() => { throw new Error(\"require not available in browser\") }) as unknown as NodeRequire\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) return (() => { throw new Error(\"require not available\") }) as unknown as NodeRequire\r\n return nodeRequire.createRequire(import.meta.url)\r\n}\r\n\r\nconst _require = getRequire()\r\n\r\nfunction requireNativeModule(path: string): unknown {\r\n return _require(path)\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}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n if (isBrowser) return []\r\n \r\n const { runtimeDir, envVarNames = [], includeDefaultCandidates = true, enforceNodeExtensionForEnvPath = false } = options\r\n const candidates: string[] = []\r\n const path = getNodePath()\r\n const fs = getNodeFs()\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n if (enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\")) {\r\n candidates.push(envPath + \".node\")\r\n } else {\r\n candidates.push(envPath)\r\n }\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 const entries = fs.readdirSync(runtimeDir)\r\n for (const entry of entries) {\r\n if (entry.endsWith(\".node\")) {\r\n candidates.push(entry)\r\n }\r\n }\r\n } catch {\r\n // ignore read errors\r\n }\r\n }\r\n\r\n const platform = typeof process !== \"undefined\" ? process.platform : \"\"\r\n const ext = platform === \"win32\" ? \".dll\" : platform === \"darwin\" ? \".dylib\" : \".so\"\r\n const defaultBindingName = `tailwind_styled_parser${ext}`\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", defaultBindingName))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", defaultBindingName))\r\n candidates.push(path.resolve(process.cwd(), \"native\", defaultBindingName))\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 (isBrowser) return \"\"\r\n \r\n if (dir) return getNodePath().resolve(dir)\r\n try {\r\n return getNodeUrl().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 if (isBrowser) {\r\n // Simple hash fallback for browser\r\n let hash = 0\r\n for (let i = 0; i < content.length; i++) {\r\n const char = content.charCodeAt(i)\r\n hash = ((hash << 5) - hash) + char\r\n hash = hash & hash\r\n }\r\n return Math.abs(hash).toString(16).slice(0, length ?? 8)\r\n }\r\n const hash = getNodeCrypto().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","/**\r\n * Theme — Rust native bridge\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport {\r\n createDebugLogger,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"theme:native\")\r\n\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") return __dirname\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeThemeBinding {\r\n compileTheme?: (\r\n tokensJson: string,\r\n themeName: string,\r\n prefix: string\r\n ) => {\r\n name: string\r\n selector: string\r\n css: string\r\n tokens: Array<{ key: string; cssVar: string; value: string }>\r\n } | null\r\n extractCssVars?: (source: string) => string[] | null\r\n}\r\n\r\nconst isValidThemeBinding = (module: unknown): module is NativeThemeBinding => {\r\n const candidate = module as Partial<NativeThemeBinding> | null | undefined\r\n return !!(candidate && typeof candidate.compileTheme === \"function\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Theme Binding - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createThemeBindingLoader = () => {\r\n const _state = { binding: undefined as NativeThemeBinding | null | undefined }\r\n\r\n const getBinding = (): NativeThemeBinding | null => {\r\n if (_state.binding !== undefined) return _state.binding\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n const { binding } = loadNativeBinding<NativeThemeBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidThemeBinding,\r\n invalidExportMessage: \"Module loaded but missing expected theme binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`theme native binding loaded successfully`)\r\n return (_state.binding = binding)\r\n }\r\n\r\n return (_state.binding = null)\r\n }\r\n\r\n return {\r\n get: getBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n },\r\n }\r\n}\r\n\r\nconst themeBindingLoader = createThemeBindingLoader()\r\n\r\nexport function getNativeThemeBinding(): NativeThemeBinding | null {\r\n return themeBindingLoader.get()\r\n}\r\n","import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const TokenConfigSchema = z.object({\r\n name: z.string().min(1),\r\n values: z.record(z.string(), z.record(z.string(), z.string())),\r\n asRoot: z.boolean().optional(),\r\n})\r\n\r\nexport type TokenConfigInput = z.infer<typeof TokenConfigSchema>\r\n\r\nexport const LiveTokenUpdateSchema = z.object({\r\n tokens: z.record(z.string(), z.string()),\r\n source: z.string().optional(),\r\n})\r\n\r\nexport type LiveTokenUpdateInput = z.infer<typeof LiveTokenUpdateSchema>\r\n\r\nexport const ThemeRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n tokens: z.record(z.string(), z.record(z.string(), z.string())),\r\n isDefault: z.boolean().optional(),\r\n})\r\n\r\nexport type ThemeRegistrationInput = z.infer<typeof ThemeRegistrationSchema>\r\n\r\nexport const parseTokenConfig = (data: unknown) =>\r\n parseWithSchema(TokenConfigSchema, data, \"token config is invalid\")\r\n\r\nexport const parseLiveTokenUpdate = (data: unknown) =>\r\n parseWithSchema(LiveTokenUpdateSchema, data, \"live token update is invalid\")\r\n","/**\r\n * tailwind-styled-v5 — Multi-Theme Engine + Live Token Engine\r\n *\r\n * Enterprise-grade theming. Support light/dark/brand themes dengan\r\n * CSS variables. Zero runtime overhead — themes di-resolve via CSS.\r\n *\r\n * Live token engine provides runtime token state management with\r\n * CSS variable sync to document root.\r\n *\r\n * Fitur:\r\n * - Multiple named themes (light, dark, brand, high-contrast)\r\n * - CSS variable output (Tailwind v4 compatible)\r\n * - Theme contract (TypeScript-safe — missing tokens = TS error)\r\n * - Per-component theme override\r\n * - White-label ready\r\n * - Live token engine (runtime token state + CSS sync)\r\n *\r\n * @example\r\n * // 1. Define contract\r\n * const contract = defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\", muted: \"\" },\r\n * font: { sans: \"\", mono: \"\" },\r\n * })\r\n *\r\n * // 2. Create themes\r\n * const lightTheme = createTheme(contract, \"light\", {\r\n * colors: { bg: \"#ffffff\", fg: \"#09090b\", primary: \"#3b82f6\", muted: \"#71717a\" },\r\n * font: { sans: \"InterVariable, sans-serif\", mono: \"JetBrains Mono, monospace\" },\r\n * })\r\n *\r\n * const darkTheme = createTheme(contract, \"dark\", {\r\n * colors: { bg: \"#09090b\", fg: \"#fafafa\", primary: \"#60a5fa\", muted: \"#a1a1aa\" },\r\n * font: { sans: \"InterVariable, sans-serif\", mono: \"JetBrains Mono, monospace\" },\r\n * })\r\n *\r\n * // 3. Use tokens in components\r\n * const Card = tw.div`bg-[var(--colors-bg)] text-[var(--colors-fg)] p-6`\r\n *\r\n * // 4. Apply in layout\r\n * // <html data-theme=\"dark\"> or inject CSS\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Live Token Engine exports\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type {\r\n LiveTokenEngineBridge,\r\n LiveTokenSet,\r\n TokenMap,\r\n TokenSubscriber,\r\n} from \"./liveTokenEngine\"\r\nexport {\r\n applyTokenSet,\r\n createUseTokens,\r\n generateTokenCssString,\r\n getToken,\r\n getTokens,\r\n liveToken,\r\n liveTokenEngine,\r\n setToken,\r\n setTokens,\r\n subscribeTokens,\r\n tokenRef,\r\n tokenVar,\r\n} from \"./liveTokenEngine\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Theme types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nimport { getNativeThemeBinding } from \"./native-bridge\"\r\n\r\n// ThemeTokenMap untuk theming (grouped tokens seperti { colors: { bg: \"#fff\" } })\r\nexport type ThemeTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface ThemeContract<T extends ThemeTokenMap> {\r\n _contract: T\r\n _vars: ThemeVars<T>\r\n}\r\n\r\nexport type ThemeVars<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: {\r\n [Token in keyof T[Group]]: string // \"var(--group-token)\"\r\n }\r\n}\r\n\r\nexport interface Theme<T extends ThemeTokenMap> {\r\n name: string\r\n contract: ThemeContract<T>\r\n values: T\r\n /** CSS string to inject (`:root` or `[data-theme=\"name\"]`) */\r\n css: string\r\n /** CSS variables as a flat record */\r\n vars: Record<string, string>\r\n /** Apply this theme to an element via data attribute */\r\n selector: string\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// defineThemeContract\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Define the shape of your theme. All themes must satisfy this contract.\r\n * Returns typed CSS variable references for use in tw components.\r\n *\r\n * @example\r\n * const contract = defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\" },\r\n * font: { sans: \"\" },\r\n * })\r\n *\r\n * // Use in components:\r\n * const Card = tw.div`bg-[${contract._vars.colors.bg}]`\r\n * // → tw.div`bg-[var(--colors-bg)]`\r\n */\r\nexport function defineThemeContract<T extends ThemeTokenMap>(shape: T): ThemeContract<T> {\r\n const buildVars = (): ThemeVars<T> => {\r\n const result: Record<string, Record<string, string>> = {}\r\n for (const group in shape) {\r\n result[group] = {}\r\n for (const token in shape[group]) {\r\n result[group][token] = `var(--${group}-${token})`\r\n }\r\n }\r\n return result as ThemeVars<T>\r\n }\r\n\r\n return { _contract: shape, _vars: buildVars() }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Create a typed theme that satisfies a contract.\r\n *\r\n * @param contract - Theme contract from defineThemeContract()\r\n * @param name - Theme name (\"light\", \"dark\", \"brand\", etc.)\r\n * @param values - Token values (TypeScript enforces completeness)\r\n * @param asRoot - If true, use :root selector. Default: false (uses [data-theme])\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(\r\n contract: ThemeContract<T>,\r\n name: string,\r\n values: T,\r\n asRoot = false\r\n): Theme<T> {\r\n // ── Rust fast-path ─────────────────────────────────────────────────────────\r\n const native = getNativeThemeBinding()\r\n if (native?.compileTheme) {\r\n const result = native.compileTheme(JSON.stringify(values), asRoot ? \"light\" : name, \"\")\r\n if (result) {\r\n const flatVars: Record<string, string> = {}\r\n for (const token of result.tokens) {\r\n flatVars[token.cssVar] = token.value\r\n }\r\n return { name, contract, values, css: result.css, vars: flatVars, selector: result.selector }\r\n }\r\n }\r\n\r\n // ── JS fallback ────────────────────────────────────────────────────────────\r\n const flatVars: Record<string, string> = {}\r\n const cssLines: string[] = []\r\n\r\n for (const group in values) {\r\n for (const token in values[group]) {\r\n const varName = `--${group}-${token}`\r\n const value = values[group][token]\r\n flatVars[varName] = value\r\n cssLines.push(` ${varName}: ${value};`)\r\n }\r\n }\r\n\r\n const selector = asRoot ? \":root\" : `[data-theme=\"${name}\"]`\r\n const css = `${selector} {\\n${cssLines.join(\"\\n\")}\\n}`\r\n\r\n return { name, contract, values, css, vars: flatVars, selector }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ThemeRegistry — manage multiple themes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class ThemeRegistry {\r\n private themes = new Map<string, Theme<ThemeTokenMap>>()\r\n private defaultTheme: string | null = null\r\n\r\n /** Register a theme */\r\n register<T extends ThemeTokenMap>(theme: Theme<T>, isDefault = false): this {\r\n this.themes.set(theme.name, theme)\r\n if (isDefault || !this.defaultTheme) {\r\n this.defaultTheme = theme.name\r\n }\r\n return this\r\n }\r\n\r\n /** Get a theme by name */\r\n get(name: string): Theme<ThemeTokenMap> | undefined {\r\n return this.themes.get(name)\r\n }\r\n\r\n /** Get all theme names */\r\n names(): string[] {\r\n return Array.from(this.themes.keys())\r\n }\r\n\r\n /**\r\n * Generate combined CSS for all themes.\r\n * Inject into <head> or a .css file.\r\n *\r\n * @example\r\n * // In globals.css or layout.tsx\r\n * const css = registry.generateCss()\r\n */\r\n generateCss(): string {\r\n return Array.from(this.themes.values())\r\n .map((t) => t.css)\r\n .join(\"\\n\\n\")\r\n }\r\n\r\n /**\r\n * Get the CSS for a specific theme only.\r\n */\r\n getThemeCss(name: string): string | null {\r\n return this.themes.get(name)?.css ?? null\r\n }\r\n\r\n /**\r\n * Inject all theme CSS into document <head> (browser only).\r\n * Call once on app init.\r\n */\r\n inject(styleId = \"__tw_themes\"): void {\r\n if (typeof document === \"undefined\") return\r\n\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 style.textContent = this.generateCss()\r\n }\r\n\r\n /**\r\n * Switch active theme by setting data-theme on <html>.\r\n */\r\n apply(name: string, target: HTMLElement = document.documentElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (!this.themes.has(name)) {\r\n console.warn(`[tailwind-styled-v4] Theme \"${name}\" not registered.`)\r\n return\r\n }\r\n target.dataset.theme = name\r\n }\r\n\r\n /**\r\n * Get current active theme name from data-theme attribute.\r\n */\r\n current(target: HTMLElement = document.documentElement): string | null {\r\n if (typeof document === \"undefined\") return this.defaultTheme\r\n return target.dataset.theme ?? this.defaultTheme\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience: createMultiTheme — shorthand for common light/dark setup\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface MultiThemeConfig<T extends ThemeTokenMap> {\r\n contract: ThemeContract<T>\r\n light: T\r\n dark: T\r\n /** Additional named themes (brand, high-contrast, etc.) */\r\n extras?: Record<string, T>\r\n}\r\n\r\n/**\r\n * Create a ThemeRegistry with light/dark + optional extras in one call.\r\n *\r\n * @example\r\n * const { registry, vars } = createMultiTheme({\r\n * contract: defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\", border: \"\" }\r\n * }),\r\n * light: {\r\n * colors: { bg: \"#fff\", fg: \"#09090b\", primary: \"#3b82f6\", border: \"#e5e7eb\" }\r\n * },\r\n * dark: {\r\n * colors: { bg: \"#09090b\", fg: \"#fafafa\", primary: \"#60a5fa\", border: \"#27272a\" }\r\n * },\r\n * })\r\n *\r\n * // Inject CSS:\r\n * registry.inject()\r\n *\r\n * // Use tokens in components:\r\n * const Card = tw.div`bg-[${vars.colors.bg}] text-[${vars.colors.fg}]`\r\n */\r\nexport function createMultiTheme<T extends ThemeTokenMap>(\r\n config: MultiThemeConfig<T>\r\n): {\r\n registry: ThemeRegistry\r\n vars: ThemeVars<T>\r\n light: Theme<T>\r\n dark: Theme<T>\r\n} {\r\n const registry = new ThemeRegistry()\r\n\r\n const light = createTheme(config.contract, \"light\", config.light, true) // :root\r\n const dark = createTheme(config.contract, \"dark\", config.dark, false)\r\n\r\n registry.register(light, true)\r\n registry.register(dark)\r\n\r\n for (const [name, values] of Object.entries(config.extras ?? {})) {\r\n registry.register(createTheme(config.contract, name, values as T))\r\n }\r\n\r\n return {\r\n registry,\r\n vars: config.contract._vars,\r\n light,\r\n dark,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Design Token Compiler — generate CSS vars from token object\r\n// (Enterprise feature: sync with Figma variables)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface DesignTokens {\r\n [path: string]: string | DesignTokens\r\n}\r\n\r\n/**\r\n * Flatten nested design token object into CSS variables.\r\n * Supports Figma-style nested tokens.\r\n *\r\n * @example\r\n * compileDesignTokens({\r\n * color: {\r\n * brand: { primary: \"#3b82f6\", secondary: \"#6366f1\" },\r\n * neutral: { 50: \"#fafafa\", 900: \"#09090b\" }\r\n * },\r\n * spacing: { base: \"4px\", lg: \"16px\" }\r\n * })\r\n * →\r\n * :root {\r\n * --color-brand-primary: #3b82f6;\r\n * --color-brand-secondary: #6366f1;\r\n * --color-neutral-50: #fafafa;\r\n * --color-neutral-900: #09090b;\r\n * --spacing-base: 4px;\r\n * --spacing-lg: 16px;\r\n * }\r\n */\r\nexport function compileDesignTokens(tokens: DesignTokens, prefix = \"\"): string {\r\n // ── Rust fast-path ─────────────────────────────────────────────────────────\r\n const native = getNativeThemeBinding()\r\n if (native?.compileTheme) {\r\n const result = native.compileTheme(JSON.stringify(tokens), \"default\", prefix)\r\n if (result) return result.css\r\n }\r\n\r\n // ── JS fallback ────────────────────────────────────────────────────────────\r\n const vars: string[] = []\r\n\r\n function flatten(obj: DesignTokens, path: string) {\r\n for (const [key, value] of Object.entries(obj)) {\r\n const varPath = path ? `${path}-${key}` : key\r\n if (typeof value === \"string\") {\r\n vars.push(` --${varPath}: ${value};`)\r\n } else {\r\n flatten(value as DesignTokens, varPath)\r\n }\r\n }\r\n }\r\n\r\n flatten(tokens, prefix)\r\n return `:root {\\n${vars.join(\"\\n\")}\\n}`\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type LiveTokenUpdateInput,\r\n LiveTokenUpdateSchema,\r\n parseLiveTokenUpdate,\r\n parseTokenConfig,\r\n type ThemeRegistrationInput,\r\n ThemeRegistrationSchema,\r\n type TokenConfigInput,\r\n TokenConfigSchema,\r\n} from \"./schemas\"\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/shared/src/index.ts","../packages/domain/theme/src/native-bridge.ts","../packages/domain/theme/src/schemas.ts","../packages/domain/theme/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React","path","fs","createRequire","fileURLToPath","z"],"mappings":";;;;;;;;;;;;;;;;;;;AAoCA,IAAM,gBAAA,GAAmB,qBAAA;AAElB,SAAS,SAAS,IAAA,EAAsB;AAC7C,EAAA,MAAM,aAAa,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,GAAG,EAAE,WAAA,EAAY;AACnE,EAAA,OAAO,cAAc,UAAU,CAAA,CAAA;AACjC;AAEO,SAAS,SAAS,IAAA,EAAsB;AAC7C,EAAA,OAAO,CAAA,IAAA,EAAO,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,IAAM,YAAA,GAAe,CAAC,MAAA,KAA6B;AACjD,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,CAAQ,MAAM,EAC/B,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA,CACvD,KAAK,IAAI,CAAA;AACZ,EAAA,OAAO,CAAA;AAAA,EAAY,IAAI;AAAA,CAAA,CAAA;AACzB,CAAA;AAEA,IAAM,wBAAwB,MAA8B;AAC1D,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,eAAe,EAAC;AAAA,IAChB,OAAA,EAAS;AAAA,GACX;AACA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAqB;AAE7C,EAAA,MAAM,cAAc,MAAY;AAC9B,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC9C,MAAA,OAAA,CAAQ,EAAA,GAAK,gBAAA;AACb,MAAA,OAAA,CAAQ,YAAA,CAAa,kBAAkB,MAAM,CAAA;AAC7C,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AACjC,MAAA,KAAA,CAAM,OAAA,GAAU,OAAA;AAAA,IAClB;AAEA,IAAA,KAAA,CAAM,OAAA,CAAQ,WAAA,GAAc,YAAA,CAAa,KAAA,CAAM,aAAa,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAY;AACpC,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,KAAA,CAAM,aAAA,EAAc;AAC1C,IAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,MAAA,IAAI;AACF,QAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAMA,SAAAA,GAAW,CAAC,IAAA,EAAc,KAAA,KAAwB;AACtD,IAAA,KAAA,CAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,CAAM,eAAe,CAAC,IAAI,GAAG,KAAA,EAAM;AAC9D,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,QAAA,CAAS,gBAAgB,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,IAAI,GAAG,KAAK,CAAA;AAAA,IAClE;AACA,IAAA,WAAA,EAAY;AACZ,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA;AAEA,EAAA,MAAMC,UAAAA,GAAY,CAAC,MAAA,KAA2B;AAC5C,IAAA,KAAA,CAAM,gBAAgB,EAAE,GAAG,KAAA,CAAM,aAAA,EAAe,GAAG,MAAA,EAAO;AAC1D,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClD,QAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,IAAI,GAAG,KAAK,CAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,WAAA,EAAY;AACZ,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA;AAEA,EAAA,MAAMC,cAAAA,GAAgB,CAAC,MAAA,KAA2B;AAChD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA,EAAG;AACnD,QAAA,IAAI,EAAE,QAAQ,MAAA,CAAA,EAAS;AACrB,UAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,QAC1C;AAAA,MACF;AACA,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClD,QAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,IAAI,GAAG,KAAK,CAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,aAAA,GAAgB,EAAE,GAAG,MAAA,EAAO;AAClC,IAAA,WAAA,EAAY;AACZ,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,EAAgC;AACxC,MAAAD,WAAU,MAAM,CAAA;AAEhB,MAAA,MAAM,OAA+B,EAAC;AACtC,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACtC,QAAA,IAAA,CAAK,IAAI,CAAA,GAAI,QAAA,CAAS,IAAI,CAAA;AAAA,MAC5B;AAEA,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,IAAI,IAAA,EAAc;AAChB,UAAA,OAAO,KAAA,CAAM,cAAc,IAAI,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,GAAA,CAAI,MAAc,KAAA,EAAe;AAC/B,UAAAD,SAAAA,CAAS,MAAM,KAAK,CAAA;AAAA,QACtB,CAAA;AAAA,QACA,OAAO,UAAA,EAAsB;AAC3B,UAAAC,WAAU,UAAU,CAAA;AAAA,QACtB,CAAA;AAAA,QACA,QAAA,GAAW;AACT,UAAA,OAAO,EAAE,GAAG,KAAA,CAAM,aAAA,EAAc;AAAA,QAClC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,SAAS,IAAA,EAAkC;AACzC,MAAA,OAAO,KAAA,CAAM,cAAc,IAAI,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,SAAA,GAAsB;AACpB,MAAA,OAAO,EAAE,GAAG,KAAA,CAAM,aAAA,EAAc;AAAA,IAClC,CAAA;AAAA,IACA,QAAA,EAAAD,SAAAA;AAAA,IACA,SAAA,EAAAC,UAAAA;AAAA,IACA,aAAA,EAAAC,cAAAA;AAAA,IACA,sBAAA,GAAiC;AAC/B,MAAA,OAAO,YAAA,CAAa,MAAM,aAAa,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,UAAU,EAAA,EAAiC;AACzC,MAAA,WAAA,CAAY,IAAI,EAAE,CAAA;AAClB,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,OAAO,EAAE,CAAA;AAAA,MACvB,CAAA;AAAA,IACF;AAAA,GACF;AACF,CAAA;AAEA,IAAM,SAAS,qBAAA,EAAsB;AAE9B,SAAS,UAAU,MAAA,EAAgC;AACxD,EAAA,OAAO,MAAA,CAAO,UAAU,MAAM,CAAA;AAChC;AAEO,SAAS,QAAA,CAAS,MAAc,KAAA,EAAqB;AAC1D,EAAA,MAAA,CAAO,QAAA,CAAS,MAAM,KAAK,CAAA;AAC7B;AAEO,SAAS,UAAU,MAAA,EAAwB;AAChD,EAAA,MAAA,CAAO,UAAU,MAAM,CAAA;AACzB;AAEO,SAAS,cAAc,MAAA,EAAwB;AACpD,EAAA,MAAA,CAAO,cAAc,MAAM,CAAA;AAC7B;AAEO,SAAS,SAAS,IAAA,EAAkC;AACzD,EAAA,OAAO,MAAA,CAAO,SAAS,IAAI,CAAA;AAC7B;AAEO,SAAS,SAAA,GAAsB;AACpC,EAAA,OAAO,OAAO,SAAA,EAAU;AAC1B;AAEO,SAAS,gBAAgB,EAAA,EAAiC;AAC/D,EAAA,OAAO,MAAA,CAAO,UAAU,EAAE,CAAA;AAC5B;AAEO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,OAAO,OAAO,sBAAA,EAAuB;AACvC;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,OAAO,SAAS,SAAA,GAAsB;AACpC,IAAA,MAAM,CAAC,QAAQ,cAAc,CAAA,GAAIC,uBAAM,QAAA,CAAmB,MAAA,CAAO,WAAW,CAAA;AAE5E,IAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,MAAA,cAAA,CAAe,MAAA,CAAO,WAAW,CAAA;AACjC,MAAA,OAAO,OAAO,SAAA,CAAU,CAAC,UAAA,KAAe,cAAA,CAAe,UAAU,CAAC,CAAA;AAAA,IACpE,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,IAAM,eAAA,GAAyC;AAAA,EACpD,UAAU,MAAA,CAAO,QAAA;AAAA,EACjB,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB,UAAU,MAAA,CAAO,QAAA;AAAA,EACjB,WAAW,MAAA,CAAO,SAAA;AAAA,EAClB,eAAe,MAAA,CAAO,aAAA;AAAA,EACtB,iBAAiB,MAAA,CAAO,SAAA;AAAA,EACxB,WAAW,MAAA,CAAO;AACpB;AAQA,IAAM,iBAAA,GAAoB,UAAA;AAI1B,iBAAA,CAAkB,gBAAgB,CAAA,GAAI,eAAA;AACtC,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,EAAA,MAAA,CAAO,mBAAA,GAAsB,eAAA;AAC/B;AC5LO,SAAS,iBAAA,CAAkB,WAAmB,KAAA,EAAuC;AAC1F,EAAA,MAAM,MAAA,GAA6C,IAAI,SAAS,CAAA,CAAA,CAAA;AAChE,EAAA,OAAO,CAAC,GAAA,KAAgB;AACtB,IAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,EAAO,QAAA,CAAS,SAAS,CAAA,IAAK,OAAA,CAAQ,IAAI,QAAA,EAAU;AAClE,MAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,GAAG,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AACF;AA6GO,SAAS,kBAAqB,OAAA,EAAkE;AACrG,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAY,OAAA,EAAQ,GAAI,OAAA;AAC5C,EAAA,MAAM,aAAuD,EAAC;AAE9D,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,aAAA,GAAgBC,qBAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,SAAS,CAAA;AACxD,IAAA,IAAI;AACF,MAAA,IAAI,CAACC,mBAAA,CAAG,UAAA,CAAW,aAAa,CAAA,IAAK,CAACA,mBAAA,CAAG,UAAA,CAAW,aAAA,GAAgB,OAAO,CAAA,EAAG;AAC5E,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,oBAAoB,aAAa,CAAA;AAC7C,MAAA,IAAI,GAAA,IAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,UAAA,EAAY,YAAY,aAAA,EAAc;AAAA,MAC/D;AACA,MAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,eAAe,OAAA,EAAS,OAAA,CAAQ,sBAAsB,CAAA;AAAA,IAChF,SAAS,CAAA,EAAG;AACV,MAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA;AAAA,IAC9F;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,UAAA,EAAW;AACrC;AAEA,IAAM,QAAA,GAAWC,sBAAA,CAAc,0PAAe,CAAA;AAE9C,SAAS,oBAAoB,CAAA,EAAoB;AAC/C,EAAA,OAAO,SAAS,CAAC,CAAA;AACnB;AAWO,SAAS,+BAA+B,OAAA,EAA6C;AAC1F,EAAA,MAAM;AAAA,IACJ,WAAA,GAAc,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAClD,wBAAA,GAA2B,IAAA;AAAA,IAC3B,8BAAA,GAAiC;AAAA,GACnC,GAAI,OAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,GAAA,EAAI;AACrD,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAClC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,UAAA,CAAW,IAAA,CAAK,kCAAkC,CAAC,OAAA,CAAQ,SAAS,OAAO,CAAA,GAAI,OAAA,GAAU,OAAA,GAAU,OAAO,CAAA;AAAA,IAC5G;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,0BAA0B,OAAO,UAAA;AAEtC,EAAA,IAAID,mBAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,KAAA,IAASA,mBAAA,CAAG,WAAA,CAAY,UAAU,CAAA,EAAG;AAC9C,QAAA,IAAI,MAAM,QAAA,CAAS,OAAO,CAAA,EAAG,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,MACpD;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAA2B;AAAA,EACrC;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,wBAAA,EAA0B,wBAAwB,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,QAAQ,QAAA,KAAa,OAAA,IAAW,QAAQ,IAAA,KAAS,KAAA,GAAQ,kBAC1E,OAAA,CAAQ,QAAA,KAAa,WAAW,OAAA,CAAQ,IAAA,KAAS,UAAU,iBAAA,GAC3D,CAAA,EAAG,QAAQ,QAAQ,CAAA,CAAA,EAAI,QAAQ,IAAI,CAAA,CAAA;AAEvC,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,UAAA,CAAW,KAAKD,qBAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,EAAG,GAAG,OAAO,CAAC,CAAA;AACvD,IAAA,UAAA,CAAW,IAAA,CAAKA,sBAAK,OAAA,CAAQ,UAAA,EAAY,GAAG,GAAG,CAAA,CAAA,EAAI,YAAY,CAAA,KAAA,CAAO,CAAC,CAAA;AAEvE,IAAA,UAAA,CAAW,IAAA,CAAKA,qBAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAC,CAAA;AACzF,IAAA,UAAA,CAAW,IAAA,CAAKA,qBAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,YAAY,OAAO,CAAC,CAAA;AAEzG,IAAA,UAAA,CAAW,IAAA,CAAKA,qBAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAC,CAAA;AACnF,IAAA,UAAA,CAAW,IAAA,CAAKA,qBAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,QAAA,EAAU,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAC,CAAA;AACpE,IAAA,UAAA,CAAW,IAAA,CAAKA,qBAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,QAAA,EAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,YAAY,CAAA,KAAA,CAAO,CAAC,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;AACvC;;;AC/OA,IAAM,GAAA,GAAM,kBAAkB,cAAc,CAAA;AAE5C,SAAS,UAAA,GAAqB;AAC5B,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,EAAa,OAAO,SAAA;AAC7C,EAAA,IAAI,OAAO,qQAAA,KAAgB,WAAA,IAAe,0PAAY,EAAK;AACzD,IAAA,OAAOA,qBAAAA,CAAK,OAAA,CAAQG,iBAAAA,CAAc,0PAAe,CAAC,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,QAAQ,GAAA,EAAI;AACrB;AAgBA,IAAM,mBAAA,GAAsB,CAAC,MAAA,KAAkD;AAC7E,EAAA,MAAM,SAAA,GAAY,MAAA;AAClB,EAAA,OAAO,CAAC,EAAE,SAAA,IAAa,OAAO,UAAU,YAAA,KAAiB,UAAA,CAAA;AAC3D,CAAA;AAMA,IAAM,2BAA2B,MAAM;AACrC,EAAA,MAAM,MAAA,GAAS,EAAE,OAAA,EAAS,MAAA,EAAmD;AAE7E,EAAA,MAAM,aAAa,MAAiC;AAClD,IAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,EAAW,OAAO,MAAA,CAAO,OAAA;AAEhD,IAAA,MAAM,aAAa,UAAA,EAAW;AAC9B,IAAA,MAAM,aAAa,8BAAA,CAA+B;AAAA,MAChD,UAAA;AAAA,MACA,wBAAA,EAA0B;AAAA,KAC3B,CAAA;AAED,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,iBAAA,CAAsC;AAAA,MACxD,UAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,EAAS,mBAAA;AAAA,MACT,oBAAA,EAAsB;AAAA,KACvB,CAAA;AAED,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,CAAA,wCAAA,CAA0C,CAAA;AAC9C,MAAA,OAAQ,OAAO,OAAA,GAAU,OAAA;AAAA,IAC3B;AAEA,IAAA,OAAQ,OAAO,OAAA,GAAU,IAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,UAAA;AAAA,IACL,OAAO,MAAY;AACjB,MAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AAAA,IACnB;AAAA,GACF;AACF,CAAA;AAEA,IAAM,qBAAqB,wBAAA,EAAyB;AAE7C,SAAS,qBAAA,GAAmD;AACjE,EAAA,OAAO,mBAAmB,GAAA,EAAI;AAChC;ACnFA,IAAM,eAAe,CAAC,KAAA,KACpB,MAAM,MAAA,CACH,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,MAAA,GAAS,IAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,QAAA;AACzD,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA;AAC/B,CAAC,CAAA,CACA,KAAK,IAAI,CAAA;AAEd,IAAM,eAAA,GAAkB,CAAI,MAAA,EAAsB,IAAA,EAAe,KAAA,KAAqB;AACpF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA;AACpC,EAAA,IAAI,MAAA,CAAO,OAAA,EAAS,OAAO,MAAA,CAAO,IAAA;AAClC,EAAA,MAAM,IAAI,UAAU,CAAA,EAAG,KAAK,KAAK,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAC/D,CAAA;AAEO,IAAM,iBAAA,GAAoBC,MAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,MAAA,EAAQA,KAAA,CAAE,MAAA,CAAOA,KAAA,CAAE,QAAO,EAAGA,KAAA,CAAE,MAAA,CAAOA,KAAA,CAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC7D,MAAA,EAAQA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtB,CAAC;AAIM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,MAAA,EAAQA,MAAE,MAAA,CAAOA,KAAA,CAAE,QAAO,EAAGA,KAAA,CAAE,QAAQ,CAAA;AAAA,EACvC,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrB,CAAC;AAIM,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,MAAA,EAAQA,KAAA,CAAE,MAAA,CAAOA,KAAA,CAAE,QAAO,EAAGA,KAAA,CAAE,MAAA,CAAOA,KAAA,CAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC7D,SAAA,EAAWA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACzB,CAAC;AAIM,IAAM,mBAAmB,CAAC,IAAA,KAC/B,eAAA,CAAgB,iBAAA,EAAmB,MAAM,yBAAyB;AAE7D,IAAM,uBAAuB,CAAC,IAAA,KACnC,eAAA,CAAgB,qBAAA,EAAuB,MAAM,8BAA8B;;;AC0EtE,SAAS,oBAA6C,KAAA,EAA4B;AACvF,EAAA,MAAM,YAAY,MAAoB;AACpC,IAAA,MAAM,SAAiD,EAAC;AACxD,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,KAAK,IAAI,EAAC;AACjB,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,KAAK,CAAA,EAAG;AAChC,QAAA,MAAA,CAAO,KAAK,CAAA,CAAE,KAAK,IAAI,CAAA,MAAA,EAAS,KAAK,IAAI,KAAK,CAAA,CAAA,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,WAAU,EAAE;AAChD;AAcO,SAAS,WAAA,CACd,QAAA,EACA,IAAA,EACA,MAAA,EACA,SAAS,KAAA,EACC;AAEV,EAAA,MAAM,SAAS,qBAAA,EAAsB;AACrC,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAG,MAAA,GAAS,OAAA,GAAU,IAAA,EAAM,EAAE,CAAA;AACtF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,WAAmC,EAAC;AAC1C,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA;AAAA,MACjC;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS;AAAA,IAC9F;AAAA,EACF;AAGA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GAEF;AACF;AAMO,IAAM,gBAAN,MAAoB;AAAA,EACjB,MAAA,uBAAa,GAAA,EAAkC;AAAA,EAC/C,YAAA,GAA8B,IAAA;AAAA;AAAA,EAGtC,QAAA,CAAkC,KAAA,EAAiB,SAAA,GAAY,KAAA,EAAa;AAC1E,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AACjC,IAAA,IAAI,SAAA,IAAa,CAAC,IAAA,CAAK,YAAA,EAAc;AACnC,MAAA,IAAA,CAAK,eAAe,KAAA,CAAM,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,IAAA,EAAgD;AAClD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,KAAA,GAAkB;AAChB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAA,GAAsB;AACpB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAA,CAChB,KAAK,MAAM,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,IAAA,EAA6B;AACvC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,GAAG,GAAA,IAAO,IAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CAAO,UAAU,aAAA,EAAqB;AACpC,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,KAAA,GACH,QAAA,CAAS,cAAA,CAAe,OAAO,MAC/B,MAAM;AACL,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACzC,MAAA,EAAA,CAAG,EAAA,GAAK,OAAA;AACR,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC5B,MAAA,OAAO,EAAA;AAAA,IACT,CAAA,GAAG;AACL,IAAA,KAAA,CAAM,WAAA,GAAc,KAAK,WAAA,EAAY;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,CAAM,IAAA,EAAc,MAAA,GAAsB,QAAA,CAAS,eAAA,EAAuB;AACxE,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,IAAI,CAAA,iBAAA,CAAmB,CAAA;AACnE,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,QAAQ,KAAA,GAAQ,IAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,CAAQ,MAAA,GAAsB,QAAA,CAAS,eAAA,EAAgC;AACrE,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA,CAAK,YAAA;AACjD,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,EACtC;AACF;AAoCO,SAAS,iBACd,MAAA,EAMA;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AAEnC,EAAA,MAAM,QAAQ,WAAA,CAAY,MAAA,CAAO,UAAU,OAAA,EAAS,MAAA,CAAO,OAAO,IAAI,CAAA;AACtE,EAAA,MAAM,OAAO,WAAA,CAAY,MAAA,CAAO,UAAU,MAAA,EAAQ,MAAA,CAAO,MAAM,KAAK,CAAA;AAEpE,EAAA,QAAA,CAAS,QAAA,CAAS,OAAO,IAAI,CAAA;AAC7B,EAAA,QAAA,CAAS,SAAS,IAAI,CAAA;AAEtB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA,EAAG;AAChE,IAAA,QAAA,CAAS,SAAS,WAAA,CAAY,MAAA,CAAO,QAAA,EAAU,IAAA,EAAM,MAAW,CAAC,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,IAAA,EAAM,OAAO,QAAA,CAAS,KAAA;AAAA,IACtB,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAiCO,SAAS,mBAAA,CAAoB,MAAA,EAAsB,MAAA,GAAS,EAAA,EAAY;AAE7E,EAAA,MAAM,SAAS,qBAAA,EAAsB;AACrC,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,MAAM,MAAA,GAAS,OAAO,YAAA,CAAa,IAAA,CAAK,UAAU,MAAM,CAAA,EAAG,WAAW,MAAM,CAAA;AAC5E,IAAA,IAAI,MAAA,SAAe,MAAA,CAAO,GAAA;AAAA,EAC5B;AAGA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GAEF;AACF","file":"theme.js","sourcesContent":["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 { 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 * Theme — Rust native bridge\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport {\r\n createDebugLogger,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"theme:native\")\r\n\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") return __dirname\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeThemeBinding {\r\n compileTheme?: (\r\n tokensJson: string,\r\n themeName: string,\r\n prefix: string\r\n ) => {\r\n name: string\r\n selector: string\r\n css: string\r\n tokens: Array<{ key: string; cssVar: string; value: string }>\r\n } | null\r\n extractCssVars?: (source: string) => string[] | null\r\n}\r\n\r\nconst isValidThemeBinding = (module: unknown): module is NativeThemeBinding => {\r\n const candidate = module as Partial<NativeThemeBinding> | null | undefined\r\n return !!(candidate && typeof candidate.compileTheme === \"function\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Theme Binding - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createThemeBindingLoader = () => {\r\n const _state = { binding: undefined as NativeThemeBinding | null | undefined }\r\n\r\n const getBinding = (): NativeThemeBinding | null => {\r\n if (_state.binding !== undefined) return _state.binding\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n const { binding } = loadNativeBinding<NativeThemeBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidThemeBinding,\r\n invalidExportMessage: \"Module loaded but missing expected theme binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`theme native binding loaded successfully`)\r\n return (_state.binding = binding)\r\n }\r\n\r\n return (_state.binding = null)\r\n }\r\n\r\n return {\r\n get: getBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n },\r\n }\r\n}\r\n\r\nconst themeBindingLoader = createThemeBindingLoader()\r\n\r\nexport function getNativeThemeBinding(): NativeThemeBinding | null {\r\n return themeBindingLoader.get()\r\n}\r\n","import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const TokenConfigSchema = z.object({\r\n name: z.string().min(1),\r\n values: z.record(z.string(), z.record(z.string(), z.string())),\r\n asRoot: z.boolean().optional(),\r\n})\r\n\r\nexport type TokenConfigInput = z.infer<typeof TokenConfigSchema>\r\n\r\nexport const LiveTokenUpdateSchema = z.object({\r\n tokens: z.record(z.string(), z.string()),\r\n source: z.string().optional(),\r\n})\r\n\r\nexport type LiveTokenUpdateInput = z.infer<typeof LiveTokenUpdateSchema>\r\n\r\nexport const ThemeRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n tokens: z.record(z.string(), z.record(z.string(), z.string())),\r\n isDefault: z.boolean().optional(),\r\n})\r\n\r\nexport type ThemeRegistrationInput = z.infer<typeof ThemeRegistrationSchema>\r\n\r\nexport const parseTokenConfig = (data: unknown) =>\r\n parseWithSchema(TokenConfigSchema, data, \"token config is invalid\")\r\n\r\nexport const parseLiveTokenUpdate = (data: unknown) =>\r\n parseWithSchema(LiveTokenUpdateSchema, data, \"live token update is invalid\")\r\n","/**\r\n * tailwind-styled-v5 — Multi-Theme Engine + Live Token Engine\r\n *\r\n * Enterprise-grade theming. Support light/dark/brand themes dengan\r\n * CSS variables. Zero runtime overhead — themes di-resolve via CSS.\r\n *\r\n * Live token engine provides runtime token state management with\r\n * CSS variable sync to document root.\r\n *\r\n * Fitur:\r\n * - Multiple named themes (light, dark, brand, high-contrast)\r\n * - CSS variable output (Tailwind v4 compatible)\r\n * - Theme contract (TypeScript-safe — missing tokens = TS error)\r\n * - Per-component theme override\r\n * - White-label ready\r\n * - Live token engine (runtime token state + CSS sync)\r\n *\r\n * @example\r\n * // 1. Define contract\r\n * const contract = defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\", muted: \"\" },\r\n * font: { sans: \"\", mono: \"\" },\r\n * })\r\n *\r\n * // 2. Create themes\r\n * const lightTheme = createTheme(contract, \"light\", {\r\n * colors: { bg: \"#ffffff\", fg: \"#09090b\", primary: \"#3b82f6\", muted: \"#71717a\" },\r\n * font: { sans: \"InterVariable, sans-serif\", mono: \"JetBrains Mono, monospace\" },\r\n * })\r\n *\r\n * const darkTheme = createTheme(contract, \"dark\", {\r\n * colors: { bg: \"#09090b\", fg: \"#fafafa\", primary: \"#60a5fa\", muted: \"#a1a1aa\" },\r\n * font: { sans: \"InterVariable, sans-serif\", mono: \"JetBrains Mono, monospace\" },\r\n * })\r\n *\r\n * // 3. Use tokens in components\r\n * const Card = tw.div`bg-[var(--colors-bg)] text-[var(--colors-fg)] p-6`\r\n *\r\n * // 4. Apply in layout\r\n * // <html data-theme=\"dark\"> or inject CSS\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Live Token Engine exports\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type {\r\n LiveTokenEngineBridge,\r\n LiveTokenSet,\r\n TokenMap,\r\n TokenSubscriber,\r\n} from \"./liveTokenEngine\"\r\nexport {\r\n applyTokenSet,\r\n createUseTokens,\r\n generateTokenCssString,\r\n getToken,\r\n getTokens,\r\n liveToken,\r\n liveTokenEngine,\r\n setToken,\r\n setTokens,\r\n subscribeTokens,\r\n tokenRef,\r\n tokenVar,\r\n} from \"./liveTokenEngine\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Theme types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nimport { getNativeThemeBinding } from \"./native-bridge\"\r\n\r\n// ThemeTokenMap untuk theming (grouped tokens seperti { colors: { bg: \"#fff\" } })\r\nexport type ThemeTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface ThemeContract<T extends ThemeTokenMap> {\r\n _contract: T\r\n _vars: ThemeVars<T>\r\n}\r\n\r\nexport type ThemeVars<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: {\r\n [Token in keyof T[Group]]: string // \"var(--group-token)\"\r\n }\r\n}\r\n\r\nexport interface Theme<T extends ThemeTokenMap> {\r\n name: string\r\n contract: ThemeContract<T>\r\n values: T\r\n /** CSS string to inject (`:root` or `[data-theme=\"name\"]`) */\r\n css: string\r\n /** CSS variables as a flat record */\r\n vars: Record<string, string>\r\n /** Apply this theme to an element via data attribute */\r\n selector: string\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// defineThemeContract\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Define the shape of your theme. All themes must satisfy this contract.\r\n * Returns typed CSS variable references for use in tw components.\r\n *\r\n * @example\r\n * const contract = defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\" },\r\n * font: { sans: \"\" },\r\n * })\r\n *\r\n * // Use in components:\r\n * const Card = tw.div`bg-[${contract._vars.colors.bg}]`\r\n * // → tw.div`bg-[var(--colors-bg)]`\r\n */\r\nexport function defineThemeContract<T extends ThemeTokenMap>(shape: T): ThemeContract<T> {\r\n const buildVars = (): ThemeVars<T> => {\r\n const result: Record<string, Record<string, string>> = {}\r\n for (const group in shape) {\r\n result[group] = {}\r\n for (const token in shape[group]) {\r\n result[group][token] = `var(--${group}-${token})`\r\n }\r\n }\r\n return result as ThemeVars<T>\r\n }\r\n\r\n return { _contract: shape, _vars: buildVars() }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Create a typed theme that satisfies a contract.\r\n *\r\n * @param contract - Theme contract from defineThemeContract()\r\n * @param name - Theme name (\"light\", \"dark\", \"brand\", etc.)\r\n * @param values - Token values (TypeScript enforces completeness)\r\n * @param asRoot - If true, use :root selector. Default: false (uses [data-theme])\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(\r\n contract: ThemeContract<T>,\r\n name: string,\r\n values: T,\r\n asRoot = false\r\n): Theme<T> {\r\n // ── Rust fast-path ─────────────────────────────────────────────────────────\r\n const native = getNativeThemeBinding()\r\n if (native?.compileTheme) {\r\n const result = native.compileTheme(JSON.stringify(values), asRoot ? \"light\" : name, \"\")\r\n if (result) {\r\n const flatVars: Record<string, string> = {}\r\n for (const token of result.tokens) {\r\n flatVars[token.cssVar] = token.value\r\n }\r\n return { name, contract, values, css: result.css, vars: flatVars, selector: result.selector }\r\n }\r\n }\r\n\r\n // Native binding is required — no JS fallback\r\n throw new Error(\r\n \"FATAL: Native binding 'compileTheme' is required but not available. \" +\r\n \"Run 'npm run build:rust' to build the native module.\"\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ThemeRegistry — manage multiple themes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class ThemeRegistry {\r\n private themes = new Map<string, Theme<ThemeTokenMap>>()\r\n private defaultTheme: string | null = null\r\n\r\n /** Register a theme */\r\n register<T extends ThemeTokenMap>(theme: Theme<T>, isDefault = false): this {\r\n this.themes.set(theme.name, theme)\r\n if (isDefault || !this.defaultTheme) {\r\n this.defaultTheme = theme.name\r\n }\r\n return this\r\n }\r\n\r\n /** Get a theme by name */\r\n get(name: string): Theme<ThemeTokenMap> | undefined {\r\n return this.themes.get(name)\r\n }\r\n\r\n /** Get all theme names */\r\n names(): string[] {\r\n return Array.from(this.themes.keys())\r\n }\r\n\r\n /**\r\n * Generate combined CSS for all themes.\r\n * Inject into <head> or a .css file.\r\n *\r\n * @example\r\n * // In globals.css or layout.tsx\r\n * const css = registry.generateCss()\r\n */\r\n generateCss(): string {\r\n return Array.from(this.themes.values())\r\n .map((t) => t.css)\r\n .join(\"\\n\\n\")\r\n }\r\n\r\n /**\r\n * Get the CSS for a specific theme only.\r\n */\r\n getThemeCss(name: string): string | null {\r\n return this.themes.get(name)?.css ?? null\r\n }\r\n\r\n /**\r\n * Inject all theme CSS into document <head> (browser only).\r\n * Call once on app init.\r\n */\r\n inject(styleId = \"__tw_themes\"): void {\r\n if (typeof document === \"undefined\") return\r\n\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 style.textContent = this.generateCss()\r\n }\r\n\r\n /**\r\n * Switch active theme by setting data-theme on <html>.\r\n */\r\n apply(name: string, target: HTMLElement = document.documentElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (!this.themes.has(name)) {\r\n console.warn(`[tailwind-styled-v4] Theme \"${name}\" not registered.`)\r\n return\r\n }\r\n target.dataset.theme = name\r\n }\r\n\r\n /**\r\n * Get current active theme name from data-theme attribute.\r\n */\r\n current(target: HTMLElement = document.documentElement): string | null {\r\n if (typeof document === \"undefined\") return this.defaultTheme\r\n return target.dataset.theme ?? this.defaultTheme\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience: createMultiTheme — shorthand for common light/dark setup\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface MultiThemeConfig<T extends ThemeTokenMap> {\r\n contract: ThemeContract<T>\r\n light: T\r\n dark: T\r\n /** Additional named themes (brand, high-contrast, etc.) */\r\n extras?: Record<string, T>\r\n}\r\n\r\n/**\r\n * Create a ThemeRegistry with light/dark + optional extras in one call.\r\n *\r\n * @example\r\n * const { registry, vars } = createMultiTheme({\r\n * contract: defineThemeContract({\r\n * colors: { bg: \"\", fg: \"\", primary: \"\", border: \"\" }\r\n * }),\r\n * light: {\r\n * colors: { bg: \"#fff\", fg: \"#09090b\", primary: \"#3b82f6\", border: \"#e5e7eb\" }\r\n * },\r\n * dark: {\r\n * colors: { bg: \"#09090b\", fg: \"#fafafa\", primary: \"#60a5fa\", border: \"#27272a\" }\r\n * },\r\n * })\r\n *\r\n * // Inject CSS:\r\n * registry.inject()\r\n *\r\n * // Use tokens in components:\r\n * const Card = tw.div`bg-[${vars.colors.bg}] text-[${vars.colors.fg}]`\r\n */\r\nexport function createMultiTheme<T extends ThemeTokenMap>(\r\n config: MultiThemeConfig<T>\r\n): {\r\n registry: ThemeRegistry\r\n vars: ThemeVars<T>\r\n light: Theme<T>\r\n dark: Theme<T>\r\n} {\r\n const registry = new ThemeRegistry()\r\n\r\n const light = createTheme(config.contract, \"light\", config.light, true) // :root\r\n const dark = createTheme(config.contract, \"dark\", config.dark, false)\r\n\r\n registry.register(light, true)\r\n registry.register(dark)\r\n\r\n for (const [name, values] of Object.entries(config.extras ?? {})) {\r\n registry.register(createTheme(config.contract, name, values as T))\r\n }\r\n\r\n return {\r\n registry,\r\n vars: config.contract._vars,\r\n light,\r\n dark,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Design Token Compiler — generate CSS vars from token object\r\n// (Enterprise feature: sync with Figma variables)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface DesignTokens {\r\n [path: string]: string | DesignTokens\r\n}\r\n\r\n/**\r\n * Flatten nested design token object into CSS variables.\r\n * Supports Figma-style nested tokens.\r\n *\r\n * @example\r\n * compileDesignTokens({\r\n * color: {\r\n * brand: { primary: \"#3b82f6\", secondary: \"#6366f1\" },\r\n * neutral: { 50: \"#fafafa\", 900: \"#09090b\" }\r\n * },\r\n * spacing: { base: \"4px\", lg: \"16px\" }\r\n * })\r\n * →\r\n * :root {\r\n * --color-brand-primary: #3b82f6;\r\n * --color-brand-secondary: #6366f1;\r\n * --color-neutral-50: #fafafa;\r\n * --color-neutral-900: #09090b;\r\n * --spacing-base: 4px;\r\n * --spacing-lg: 16px;\r\n * }\r\n */\r\nexport function compileDesignTokens(tokens: DesignTokens, prefix = \"\"): string {\r\n // ── Rust fast-path ─────────────────────────────────────────────────────────\r\n const native = getNativeThemeBinding()\r\n if (native?.compileTheme) {\r\n const result = native.compileTheme(JSON.stringify(tokens), \"default\", prefix)\r\n if (result) return result.css\r\n }\r\n\r\n // Native binding is required — no JS fallback\r\n throw new Error(\r\n \"FATAL: Native binding 'compileTheme' is required but not available. \" +\r\n \"Run 'npm run build:rust' to build the native module.\"\r\n )\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type LiveTokenUpdateInput,\r\n LiveTokenUpdateSchema,\r\n parseLiveTokenUpdate,\r\n parseTokenConfig,\r\n type ThemeRegistrationInput,\r\n ThemeRegistrationSchema,\r\n type TokenConfigInput,\r\n TokenConfigSchema,\r\n} from \"./schemas\""]}
|
package/dist/theme.mjs
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
|
+
import 'crypto';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { createRequire } from 'module';
|
|
4
7
|
import { z } from 'zod';
|
|
5
8
|
|
|
6
9
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
7
|
-
|
|
8
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
-
}) : x)(function(x) {
|
|
10
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
-
});
|
|
10
|
+
|
|
13
11
|
var TOKEN_ENGINE_KEY = "__TW_TOKEN_ENGINE__";
|
|
14
12
|
function tokenVar(name) {
|
|
15
13
|
const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
@@ -177,38 +175,6 @@ globalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine;
|
|
|
177
175
|
if (typeof window !== "undefined") {
|
|
178
176
|
window.__TW_TOKEN_ENGINE__ = liveTokenEngine;
|
|
179
177
|
}
|
|
180
|
-
|
|
181
|
-
// packages/domain/shared/src/index.ts
|
|
182
|
-
var isBrowser = typeof window !== "undefined" || typeof document !== "undefined";
|
|
183
|
-
var nodeModuleRef = null;
|
|
184
|
-
function getNodeModuleRef() {
|
|
185
|
-
if (isBrowser) return null;
|
|
186
|
-
if (nodeModuleRef !== null) return nodeModuleRef;
|
|
187
|
-
try {
|
|
188
|
-
const test = typeof __require === "function" ? __require("module") : null;
|
|
189
|
-
nodeModuleRef = test;
|
|
190
|
-
return test;
|
|
191
|
-
} catch {
|
|
192
|
-
nodeModuleRef = null;
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
var _nodeFs = null;
|
|
197
|
-
var _nodePath = null;
|
|
198
|
-
function getNodeFs() {
|
|
199
|
-
if (isBrowser) throw new Error("node:fs not available in browser");
|
|
200
|
-
const nodeRequire = getNodeModuleRef();
|
|
201
|
-
if (!nodeRequire) throw new Error("require not available");
|
|
202
|
-
if (!_nodeFs) _nodeFs = nodeRequire.createRequire(import.meta.url)("node:fs");
|
|
203
|
-
return _nodeFs;
|
|
204
|
-
}
|
|
205
|
-
function getNodePath() {
|
|
206
|
-
if (isBrowser) throw new Error("node:path not available in browser");
|
|
207
|
-
const nodeRequire = getNodeModuleRef();
|
|
208
|
-
if (!nodeRequire) throw new Error("require not available");
|
|
209
|
-
if (!_nodePath) _nodePath = nodeRequire.createRequire(import.meta.url)("node:path");
|
|
210
|
-
return _nodePath;
|
|
211
|
-
}
|
|
212
178
|
function createDebugLogger(namespace, label) {
|
|
213
179
|
const prefix = `[${namespace}]`;
|
|
214
180
|
return (msg) => {
|
|
@@ -218,15 +184,10 @@ function createDebugLogger(namespace, label) {
|
|
|
218
184
|
};
|
|
219
185
|
}
|
|
220
186
|
function loadNativeBinding(options) {
|
|
221
|
-
if (isBrowser) {
|
|
222
|
-
return { binding: null, loadErrors: [{ path: "", message: "Native bindings not available in browser" }] };
|
|
223
|
-
}
|
|
224
187
|
const { runtimeDir, candidates, isValid } = options;
|
|
225
188
|
const loadErrors = [];
|
|
226
|
-
const path2 = getNodePath();
|
|
227
|
-
const fs = getNodeFs();
|
|
228
189
|
for (const candidate of candidates) {
|
|
229
|
-
const candidatePath =
|
|
190
|
+
const candidatePath = path.resolve(runtimeDir, candidate);
|
|
230
191
|
try {
|
|
231
192
|
if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + ".node")) {
|
|
232
193
|
continue;
|
|
@@ -242,54 +203,44 @@ function loadNativeBinding(options) {
|
|
|
242
203
|
}
|
|
243
204
|
return { binding: null, loadErrors };
|
|
244
205
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
});
|
|
249
|
-
const nodeRequire = getNodeModuleRef();
|
|
250
|
-
if (!nodeRequire) return (() => {
|
|
251
|
-
throw new Error("require not available");
|
|
252
|
-
});
|
|
253
|
-
return nodeRequire.createRequire(import.meta.url);
|
|
254
|
-
}
|
|
255
|
-
var _require = getRequire();
|
|
256
|
-
function requireNativeModule(path2) {
|
|
257
|
-
return _require(path2);
|
|
206
|
+
var _require = createRequire(import.meta.url);
|
|
207
|
+
function requireNativeModule(p) {
|
|
208
|
+
return _require(p);
|
|
258
209
|
}
|
|
259
210
|
function resolveNativeBindingCandidates(options) {
|
|
260
|
-
|
|
261
|
-
|
|
211
|
+
const {
|
|
212
|
+
envVarNames = ["TW_NATIVE_PATH", "TWS_NATIVE_PATH"],
|
|
213
|
+
includeDefaultCandidates = true,
|
|
214
|
+
enforceNodeExtensionForEnvPath = false
|
|
215
|
+
} = options;
|
|
216
|
+
const runtimeDir = options.runtimeDir || process.cwd();
|
|
262
217
|
const candidates = [];
|
|
263
|
-
const path2 = getNodePath();
|
|
264
|
-
const fs = getNodeFs();
|
|
265
218
|
for (const envVar of envVarNames) {
|
|
266
219
|
const envPath = process.env[envVar];
|
|
267
220
|
if (envPath) {
|
|
268
|
-
|
|
269
|
-
candidates.push(envPath + ".node");
|
|
270
|
-
} else {
|
|
271
|
-
candidates.push(envPath);
|
|
272
|
-
}
|
|
221
|
+
candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(".node") ? envPath + ".node" : envPath);
|
|
273
222
|
}
|
|
274
223
|
}
|
|
275
224
|
if (!includeDefaultCandidates) return candidates;
|
|
276
225
|
if (fs.existsSync(runtimeDir)) {
|
|
277
226
|
try {
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
if (entry.endsWith(".node")) {
|
|
281
|
-
candidates.push(entry);
|
|
282
|
-
}
|
|
227
|
+
for (const entry of fs.readdirSync(runtimeDir)) {
|
|
228
|
+
if (entry.endsWith(".node")) candidates.push(entry);
|
|
283
229
|
}
|
|
284
230
|
} catch {
|
|
285
231
|
}
|
|
286
232
|
}
|
|
287
|
-
const
|
|
288
|
-
const
|
|
289
|
-
const
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
233
|
+
const BINARY_NAMES = ["tailwind-styled-native", "tailwind_styled_parser"];
|
|
234
|
+
const napiPlatform = process.platform === "linux" && process.arch === "x64" ? "linux-x64-gnu" : process.platform === "linux" && process.arch === "arm64" ? "linux-arm64-gnu" : `${process.platform}-${process.arch}`;
|
|
235
|
+
for (const bin of BINARY_NAMES) {
|
|
236
|
+
candidates.push(path.resolve(runtimeDir, `${bin}.node`));
|
|
237
|
+
candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`));
|
|
238
|
+
candidates.push(path.resolve(runtimeDir, "..", "..", "..", "..", "native", `${bin}.node`));
|
|
239
|
+
candidates.push(path.resolve(runtimeDir, "..", "..", "..", "..", "native", `${bin}.${napiPlatform}.node`));
|
|
240
|
+
candidates.push(path.resolve(runtimeDir, "..", "..", "..", "native", `${bin}.node`));
|
|
241
|
+
candidates.push(path.resolve(process.cwd(), "native", `${bin}.node`));
|
|
242
|
+
candidates.push(path.resolve(process.cwd(), "native", `${bin}.${napiPlatform}.node`));
|
|
243
|
+
}
|
|
293
244
|
return Array.from(new Set(candidates));
|
|
294
245
|
}
|
|
295
246
|
|
|
@@ -383,28 +334,16 @@ function createTheme(contract, name, values, asRoot = false) {
|
|
|
383
334
|
if (native?.compileTheme) {
|
|
384
335
|
const result = native.compileTheme(JSON.stringify(values), asRoot ? "light" : name, "");
|
|
385
336
|
if (result) {
|
|
386
|
-
const
|
|
337
|
+
const flatVars = {};
|
|
387
338
|
for (const token of result.tokens) {
|
|
388
|
-
|
|
339
|
+
flatVars[token.cssVar] = token.value;
|
|
389
340
|
}
|
|
390
|
-
return { name, contract, values, css: result.css, vars:
|
|
341
|
+
return { name, contract, values, css: result.css, vars: flatVars, selector: result.selector };
|
|
391
342
|
}
|
|
392
343
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
for (const token in values[group]) {
|
|
397
|
-
const varName = `--${group}-${token}`;
|
|
398
|
-
const value = values[group][token];
|
|
399
|
-
flatVars[varName] = value;
|
|
400
|
-
cssLines.push(` ${varName}: ${value};`);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
const selector = asRoot ? ":root" : `[data-theme="${name}"]`;
|
|
404
|
-
const css = `${selector} {
|
|
405
|
-
${cssLines.join("\n")}
|
|
406
|
-
}`;
|
|
407
|
-
return { name, contract, values, css, vars: flatVars, selector };
|
|
344
|
+
throw new Error(
|
|
345
|
+
"FATAL: Native binding 'compileTheme' is required but not available. Run 'npm run build:rust' to build the native module."
|
|
346
|
+
);
|
|
408
347
|
}
|
|
409
348
|
var ThemeRegistry = class {
|
|
410
349
|
themes = /* @__PURE__ */ new Map();
|
|
@@ -497,21 +436,9 @@ function compileDesignTokens(tokens, prefix = "") {
|
|
|
497
436
|
const result = native.compileTheme(JSON.stringify(tokens), "default", prefix);
|
|
498
437
|
if (result) return result.css;
|
|
499
438
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
const varPath = path2 ? `${path2}-${key}` : key;
|
|
504
|
-
if (typeof value === "string") {
|
|
505
|
-
vars.push(` --${varPath}: ${value};`);
|
|
506
|
-
} else {
|
|
507
|
-
flatten(value, varPath);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
flatten(tokens, prefix);
|
|
512
|
-
return `:root {
|
|
513
|
-
${vars.join("\n")}
|
|
514
|
-
}`;
|
|
439
|
+
throw new Error(
|
|
440
|
+
"FATAL: Native binding 'compileTheme' is required but not available. Run 'npm run build:rust' to build the native module."
|
|
441
|
+
);
|
|
515
442
|
}
|
|
516
443
|
|
|
517
444
|
export { LiveTokenUpdateSchema, ThemeRegistrationSchema, ThemeRegistry, TokenConfigSchema, applyTokenSet, compileDesignTokens, createMultiTheme, createTheme, createUseTokens, defineThemeContract, generateTokenCssString, getToken, getTokens, liveToken, liveTokenEngine, parseLiveTokenUpdate, parseTokenConfig, setToken, setTokens, subscribeTokens, tokenRef, tokenVar };
|