tailwind-styled-v4 5.0.27 → 5.0.29
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/LICENSE +21 -21
- package/README.md +575 -575
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.js +2 -1
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +2 -1
- package/dist/compiler.mjs.map +1 -1
- package/dist/dashboard.d.mts +69 -69
- package/dist/dashboard.d.ts +69 -69
- package/dist/dashboard.js.map +1 -1
- package/dist/dashboard.mjs.map +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.js +2 -1
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +2 -1
- package/dist/engine.mjs.map +1 -1
- package/dist/index.browser.mjs +16 -16
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +27 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +27 -24
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +2 -1
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +2 -1
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs.map +1 -1
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs.map +1 -1
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime-css.js.map +1 -1
- package/dist/runtime-css.mjs.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/runtime.mjs.map +1 -1
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.js +2 -1
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +2 -1
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.js.map +1 -1
- package/dist/storybook-addon.mjs.map +1 -1
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +2 -1
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +2 -1
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +0 -0
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +0 -0
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +2 -1
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +2 -1
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +2 -1
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +2 -1
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.linux-x64-gnu.node +0 -0
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +296 -289
- package/native/tailwind-styled-native.win32-x64-msvc.node +0 -0
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts","../packages/domain/runtime/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React","z"],"mappings":"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","file":"runtime.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 { 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 SubComponentDefSchema = z.object({\r\n tag: z.string().optional(),\r\n class: z.string(),\r\n})\r\n\r\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\r\n\r\nexport const ComponentMetadataSchema = z.object({\r\n component: z.string(),\r\n tag: z.string(),\r\n baseClass: z.string(),\r\n subComponents: z.record(z.string(), SubComponentDefSchema),\r\n})\r\n\r\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\r\n\r\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\r\n\r\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\r\n\r\nexport const parseSubComponentDef = (data: unknown) =>\r\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\r\n\r\nexport const parseComponentMetadata = (data: unknown) =>\r\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\r\n","/**\r\n * @tailwind-styled/runtime v5\r\n *\r\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\r\n * Live token engine has been moved to @tailwind-styled/theme package.\r\n */\r\n\r\nimport React from \"react\"\r\n\r\n// Re-export live token engine from @tailwind-styled/theme\r\nexport type {\r\n LiveTokenEngineBridge,\r\n LiveTokenSet,\r\n TokenMap,\r\n TokenSubscriber,\r\n} from \"@tailwind-styled/theme\"\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 \"@tailwind-styled/theme/live-tokens\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface SubComponentDef {\r\n /** HTML tag to render (default: \"span\") */\r\n tag?: string\r\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\r\n class: string\r\n}\r\n\r\nexport type SubComponentMap = Record<string, SubComponentDef>\r\n\r\n/**\r\n * Map of prop name → CSS class appended when the prop is truthy.\r\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\r\n */\r\nexport type ConditionalProps = Record<string, string>\r\n\r\n/**\r\n * A compound styled component: base ForwardRef + attached .SubName properties.\r\n * The generic params are intentionally loose so callers don't need to repeat them.\r\n */\r\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\r\n React.ForwardRefExoticComponent<\r\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\r\n > & {\r\n [K in keyof S]: React.ForwardRefExoticComponent<\r\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\r\n >\r\n }\r\n\r\n/** Metadata for one compound component produced by Rust. */\r\nexport interface ComponentMetadata {\r\n component: string\r\n tag: string\r\n baseClass: string\r\n subComponents: SubComponentMap\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// cx — tiny className utility (no external dependency)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\r\n\r\nexport function cx(...inputs: ClassInput[]): string {\r\n const out: string[] = []\r\n for (const input of inputs) {\r\n if (!input) continue // filters 0, false, null, undefined, \"\"\r\n if (typeof input === \"string\") {\r\n out.push(input)\r\n } else if (typeof input === \"number\") {\r\n out.push(String(input))\r\n } else if (Array.isArray(input)) {\r\n const nested = cx(...input)\r\n if (nested) out.push(nested)\r\n }\r\n }\r\n return out.join(\" \")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createComponent\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Build a compound styled React component from Rust-generated metadata.\r\n *\r\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\r\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\r\n * @param subComponents Map of subcomponent definitions (optional)\r\n * @param conditionals Map of prop name → CSS class (optional)\r\n *\r\n * @example\r\n * // Injected automatically by the compiler — do not call manually\r\n * const Button = createComponent(\"button\", \"Button_abc123\", {\r\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\r\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\r\n * }, { fullWidth: \"w-full\" })\r\n *\r\n * // Usage in JSX:\r\n * <Button fullWidth>\r\n * <Button.icon>🔍</Button.icon>\r\n * <Button.text>Search</Button.text>\r\n * </Button>\r\n */\r\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\r\n tag: string,\r\n baseClass: string,\r\n subComponents?: S,\r\n conditionals?: ConditionalProps\r\n): StyledComponent<S> {\r\n type Props = React.HTMLAttributes<HTMLElement> &\r\n React.RefAttributes<HTMLElement> &\r\n Record<string, unknown>\r\n\r\n // ── Base component ─────────────────────────────────────────────────────────\r\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\r\n const extra: string[] = []\r\n\r\n // Collect conditional classes\r\n if (conditionals) {\r\n for (const [prop, cls] of Object.entries(conditionals)) {\r\n if (props[prop]) extra.push(cls)\r\n }\r\n }\r\n\r\n // Build clean props — strip conditional + subcomponent boolean props\r\n const clean: Record<string, unknown> = {}\r\n const stripKeys = new Set([\r\n \"className\",\r\n ...(conditionals ? Object.keys(conditionals) : []),\r\n ...(subComponents ? Object.keys(subComponents) : []),\r\n ])\r\n for (const [k, v] of Object.entries(props)) {\r\n if (!stripKeys.has(k)) clean[k] = v\r\n }\r\n\r\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\r\n\r\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\r\n })\r\n\r\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\r\n\r\n // ── Attach subcomponent properties ────────────────────────────────────────\r\n if (subComponents) {\r\n for (const [subName, def] of Object.entries(subComponents)) {\r\n const subTag = def.tag ?? \"span\"\r\n const subClass = def.class\r\n\r\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\r\n const className = cx(subClass, (props.className as string) ?? \"\")\r\n const clean: Record<string, unknown> = { ...props }\r\n delete clean.className\r\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\r\n })\r\n\r\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\r\n\r\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\r\n }\r\n }\r\n\r\n return Base as StyledComponent<S>\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type ComponentMetadataInput,\r\n ComponentMetadataSchema,\r\n type ConditionalPropsInput,\r\n ConditionalPropsSchema,\r\n parseComponentMetadata,\r\n parseSubComponentDef,\r\n type SubComponentDefInput,\r\n SubComponentDefSchema,\r\n} from \"./schemas\"\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts","../packages/domain/runtime/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React","z"],"mappings":"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","file":"runtime.js","sourcesContent":["import React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\n\n React.useEffect(() => {\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n"]}
|
package/dist/runtime.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts","../packages/domain/runtime/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React"],"mappings":"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","file":"runtime.mjs","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 { 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 SubComponentDefSchema = z.object({\r\n tag: z.string().optional(),\r\n class: z.string(),\r\n})\r\n\r\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\r\n\r\nexport const ComponentMetadataSchema = z.object({\r\n component: z.string(),\r\n tag: z.string(),\r\n baseClass: z.string(),\r\n subComponents: z.record(z.string(), SubComponentDefSchema),\r\n})\r\n\r\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\r\n\r\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\r\n\r\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\r\n\r\nexport const parseSubComponentDef = (data: unknown) =>\r\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\r\n\r\nexport const parseComponentMetadata = (data: unknown) =>\r\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\r\n","/**\r\n * @tailwind-styled/runtime v5\r\n *\r\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\r\n * Live token engine has been moved to @tailwind-styled/theme package.\r\n */\r\n\r\nimport React from \"react\"\r\n\r\n// Re-export live token engine from @tailwind-styled/theme\r\nexport type {\r\n LiveTokenEngineBridge,\r\n LiveTokenSet,\r\n TokenMap,\r\n TokenSubscriber,\r\n} from \"@tailwind-styled/theme\"\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 \"@tailwind-styled/theme/live-tokens\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface SubComponentDef {\r\n /** HTML tag to render (default: \"span\") */\r\n tag?: string\r\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\r\n class: string\r\n}\r\n\r\nexport type SubComponentMap = Record<string, SubComponentDef>\r\n\r\n/**\r\n * Map of prop name → CSS class appended when the prop is truthy.\r\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\r\n */\r\nexport type ConditionalProps = Record<string, string>\r\n\r\n/**\r\n * A compound styled component: base ForwardRef + attached .SubName properties.\r\n * The generic params are intentionally loose so callers don't need to repeat them.\r\n */\r\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\r\n React.ForwardRefExoticComponent<\r\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\r\n > & {\r\n [K in keyof S]: React.ForwardRefExoticComponent<\r\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\r\n >\r\n }\r\n\r\n/** Metadata for one compound component produced by Rust. */\r\nexport interface ComponentMetadata {\r\n component: string\r\n tag: string\r\n baseClass: string\r\n subComponents: SubComponentMap\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// cx — tiny className utility (no external dependency)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\r\n\r\nexport function cx(...inputs: ClassInput[]): string {\r\n const out: string[] = []\r\n for (const input of inputs) {\r\n if (!input) continue // filters 0, false, null, undefined, \"\"\r\n if (typeof input === \"string\") {\r\n out.push(input)\r\n } else if (typeof input === \"number\") {\r\n out.push(String(input))\r\n } else if (Array.isArray(input)) {\r\n const nested = cx(...input)\r\n if (nested) out.push(nested)\r\n }\r\n }\r\n return out.join(\" \")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createComponent\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Build a compound styled React component from Rust-generated metadata.\r\n *\r\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\r\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\r\n * @param subComponents Map of subcomponent definitions (optional)\r\n * @param conditionals Map of prop name → CSS class (optional)\r\n *\r\n * @example\r\n * // Injected automatically by the compiler — do not call manually\r\n * const Button = createComponent(\"button\", \"Button_abc123\", {\r\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\r\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\r\n * }, { fullWidth: \"w-full\" })\r\n *\r\n * // Usage in JSX:\r\n * <Button fullWidth>\r\n * <Button.icon>🔍</Button.icon>\r\n * <Button.text>Search</Button.text>\r\n * </Button>\r\n */\r\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\r\n tag: string,\r\n baseClass: string,\r\n subComponents?: S,\r\n conditionals?: ConditionalProps\r\n): StyledComponent<S> {\r\n type Props = React.HTMLAttributes<HTMLElement> &\r\n React.RefAttributes<HTMLElement> &\r\n Record<string, unknown>\r\n\r\n // ── Base component ─────────────────────────────────────────────────────────\r\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\r\n const extra: string[] = []\r\n\r\n // Collect conditional classes\r\n if (conditionals) {\r\n for (const [prop, cls] of Object.entries(conditionals)) {\r\n if (props[prop]) extra.push(cls)\r\n }\r\n }\r\n\r\n // Build clean props — strip conditional + subcomponent boolean props\r\n const clean: Record<string, unknown> = {}\r\n const stripKeys = new Set([\r\n \"className\",\r\n ...(conditionals ? Object.keys(conditionals) : []),\r\n ...(subComponents ? Object.keys(subComponents) : []),\r\n ])\r\n for (const [k, v] of Object.entries(props)) {\r\n if (!stripKeys.has(k)) clean[k] = v\r\n }\r\n\r\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\r\n\r\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\r\n })\r\n\r\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\r\n\r\n // ── Attach subcomponent properties ────────────────────────────────────────\r\n if (subComponents) {\r\n for (const [subName, def] of Object.entries(subComponents)) {\r\n const subTag = def.tag ?? \"span\"\r\n const subClass = def.class\r\n\r\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\r\n const className = cx(subClass, (props.className as string) ?? \"\")\r\n const clean: Record<string, unknown> = { ...props }\r\n delete clean.className\r\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\r\n })\r\n\r\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\r\n\r\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\r\n }\r\n }\r\n\r\n return Base as StyledComponent<S>\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type ComponentMetadataInput,\r\n ComponentMetadataSchema,\r\n type ConditionalPropsInput,\r\n ConditionalPropsSchema,\r\n parseComponentMetadata,\r\n parseSubComponentDef,\r\n type SubComponentDefInput,\r\n SubComponentDefSchema,\r\n} from \"./schemas\"\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts","../packages/domain/runtime/src/index.ts"],"names":["setToken","setTokens","applyTokenSet","React"],"mappings":"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","file":"runtime.mjs","sourcesContent":["import React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\n\n React.useEffect(() => {\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n"]}
|