clava 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/refine-warning.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["export interface RefineRunState {\n remaining: number;\n warned?: boolean;\n}\n\nexport interface CreationFrame {\n stack?: string;\n}\n\nexport interface VariantChange {\n from: unknown;\n to: unknown;\n}\n\n// Once a refine loop is within this many iterations of the cap, start tracking\n// the latest value transition for every variant key that changes between\n// iterations so the warning can report every key that contributed to the\n// oscillation, not just the keys that happened to flip on the final step.\n// Convergent loops (the common case) exit well before this threshold and pay no\n// per-iteration tracking cost.\nexport const REFINE_UNSTABLE_TRACKING_WINDOW = 10;\n\n// Captures the call site of the function passed in `skipFn` so refine-limit\n// warnings can point developers at the originating `cv()` call. Returns\n// `undefined` in production so bundlers that replace `process.env.NODE_ENV` at\n// build time can drop the entire warning machinery. The underlying `.stack`\n// string is formatted lazily on first access in every major engine (V8,\n// SpiderMonkey, JavaScriptCore), so holding the captured frame for the\n// lifetime of the component is cheap when no warning fires.\nexport function captureCreationFrame(\n skipFn: Function,\n): CreationFrame | undefined {\n if (process.env.NODE_ENV === \"production\") return undefined;\n if (typeof Error.captureStackTrace === \"function\") {\n const holder: CreationFrame = {};\n Error.captureStackTrace(holder, skipFn);\n return holder;\n }\n // Engines without `Error.captureStackTrace` (SpiderMonkey, JavaScriptCore)\n // can't strip internal frames, but their `Error.stack` getter is still\n // lazy, so returning the Error instance defers the format cost. The\n // resulting trace includes 1–2 extra frames at the top from this helper and\n // `cv` itself.\n return new Error();\n}\n\nexport function formatCreationStack(frame: CreationFrame): string | undefined {\n let stack = frame.stack;\n if (!stack) return undefined;\n // V8 prefixes the stack with a leading \"Error\" / \"Error: message\" line that\n // isn't meaningful for a captured location — drop it.\n const newlineIdx = stack.indexOf(\"\\n\");\n if (newlineIdx > 0) {\n const firstLine = stack.slice(0, newlineIdx);\n if (firstLine === \"Error\" || firstLine.startsWith(\"Error:\")) {\n stack = stack.slice(newlineIdx + 1);\n }\n }\n const frames = stack.split(\"\\n\");\n for (let i = 0; i < frames.length; i++) {\n const line = frames[i]?.trim();\n if (!line) continue;\n if (isInternalCreationFrame(line)) continue;\n if (line.includes(\"/node_modules/\")) continue;\n if (line.includes(\"\\\\node_modules\\\\\")) continue;\n if (line.includes(\"node:internal\")) continue;\n return ` ${line}`;\n }\n return undefined;\n}\n\nfunction isInternalCreationFrame(line: string): boolean {\n if (line.includes(\"captureCreationFrame\")) return true;\n if (line.startsWith(\"at cv \")) return true;\n if (line.startsWith(\"at cv(\")) return true;\n if (line.startsWith(\"cv@\")) return true;\n return false;\n}\n\nfunction formatVariantValue(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return \"NaN\";\n return String(value);\n }\n if (typeof value === \"bigint\") return `${value}n`;\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n if (typeof value === \"boolean\") return String(value);\n if (typeof value === \"symbol\") return String(value);\n if (typeof value === \"function\") return \"[function]\";\n return \"[object]\";\n}\n\nfunction setVariantChange(\n into: Map<string, VariantChange>,\n key: string,\n from: unknown,\n to: unknown,\n): void {\n into.set(key, { from, to });\n}\n\nexport function accumulateUnstableVariantChanges(\n into: Map<string, VariantChange>,\n prev: Record<string, unknown>,\n next: Record<string, unknown>,\n): void {\n for (const key in next) {\n if (!Object.hasOwn(next, key)) continue;\n if (!Object.is(prev[key], next[key])) {\n setVariantChange(into, key, prev[key], next[key]);\n }\n }\n for (const key in prev) {\n if (!Object.hasOwn(prev, key)) continue;\n if (Object.hasOwn(next, key)) continue;\n setVariantChange(into, key, prev[key], undefined);\n }\n}\n\nfunction formatVariantChanges(changes: Map<string, VariantChange>): string {\n return Array.from(changes)\n .map(([key, { from, to }]) => {\n return `${key}: ${formatVariantValue(from)} -> ${formatVariantValue(to)}`;\n })\n .join(\", \");\n}\n\ninterface WarnRefineLimitParams {\n runState: RefineRunState;\n creationFrame: CreationFrame | undefined;\n unstableChanges: Map<string, VariantChange> | null;\n}\n\nexport function warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n}: WarnRefineLimitParams): void {\n // Bundlers are expected to replace this branch with a production literal,\n // allowing warning-only code below to be removed from consumer bundles.\n if (process.env.NODE_ENV === \"production\") return;\n if (runState.warned) return;\n runState.warned = true;\n let message =\n \"Clava: Maximum refine iterations exceeded. This can happen when a \" +\n \"refine callback calls setVariants or setDefaultVariants, but one \" +\n \"of the variants changes on every run.\";\n if (unstableChanges && unstableChanges.size > 0) {\n message += `\\nVariant(s) that did not stabilize: ${Array.from(unstableChanges.keys()).join(\", \")}.`;\n message += `\\nLatest variant changes before warning: ${formatVariantChanges(unstableChanges)}.`;\n }\n if (creationFrame) {\n const creationStack = formatCreationStack(creationFrame);\n if (creationStack) {\n message += `\\nComponent created at:\\n${creationStack}`;\n }\n }\n console.warn(message);\n}\n","import type * as CSS from \"csstype\";\nimport type {\n HTMLCSSProperties,\n JSXCSSProperties,\n StyleValue,\n} from \"./types.ts\";\n\nexport const MODES = [\"jsx\", \"html\", \"htmlObj\"] as const;\nexport type Mode = (typeof MODES)[number];\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nfunction isAsciiLetter(code: number) {\n if (code >= 65 && code <= 90) return true;\n return code >= 97 && code <= 122;\n}\n\n/**\n * Returns the appropriate class property name based on the mode.\n * @example\n * getClassPropertyName(\"jsx\") // \"className\"\n * getClassPropertyName(\"html\") // \"class\"\n */\nexport function getClassPropertyName(mode: Mode) {\n return mode === \"jsx\" ? \"className\" : \"class\";\n}\n\n/**\n * Converts a hyphenated CSS property name to camelCase.\n * @example\n * hyphenToCamel(\"background-color\") // \"backgroundColor\"\n * hyphenToCamel(\"--custom-var\") // \"--custom-var\" (CSS variables are preserved)\n */\nexport function hyphenToCamel(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n // Fast path: no hyphen -> return as-is\n let hyphenIndex = str.indexOf(\"-\");\n if (hyphenIndex === -1) {\n return str;\n }\n\n let result = \"\";\n let lastIndex = 0;\n while (hyphenIndex !== -1) {\n result += str.slice(lastIndex, hyphenIndex);\n\n const nextIndex = hyphenIndex + 1;\n if (nextIndex >= str.length) {\n result += \"-\";\n lastIndex = nextIndex;\n break;\n }\n\n const code = str.charCodeAt(nextIndex);\n if (isAsciiLetter(code)) {\n result += str[nextIndex].toUpperCase();\n lastIndex = nextIndex + 1;\n } else {\n result += \"-\";\n lastIndex = nextIndex;\n }\n\n hyphenIndex = str.indexOf(\"-\", lastIndex);\n }\n\n return result + str.slice(lastIndex);\n}\n\n/**\n * Converts a camelCase CSS property name to hyphenated form.\n * @example\n * camelToHyphen(\"backgroundColor\") // \"background-color\"\n * camelToHyphen(\"--customVar\") // \"--customVar\" (CSS variables are preserved)\n */\nexport function camelToHyphen(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n\n let result = \"\";\n let lastIndex = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n if (code < 65 || code > 90) continue;\n result += str.slice(lastIndex, i);\n result += \"-\";\n result += str[i].toLowerCase();\n lastIndex = i + 1;\n }\n\n if (lastIndex === 0) {\n return str;\n }\n return result + str.slice(lastIndex);\n}\n\n/**\n * Parses a length value, adding \"px\" if it's a number.\n * @example\n * parseLengthValue(16); // \"16px\"\n * parseLengthValue(\"2em\"); // \"2em\"\n */\nexport function parseLengthValue(value: string | number) {\n if (typeof value === \"string\") {\n return value;\n }\n return `${value}px`;\n}\n\n/**\n * Parses a CSS style string into a StyleValue object.\n * @example\n * htmlStyleToStyleValue(\"background-color: red; font-size: 16px;\");\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlStyleToStyleValue(styleString: string) {\n if (!styleString) return {};\n\n const result: StyleValue = {};\n const len = styleString.length;\n let i = 0;\n while (i < len) {\n // Skip leading whitespace and stray semicolons\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13 && c !== 59) break;\n i++;\n }\n if (i >= len) break;\n // Read property name until ':' or ';'\n const propStart = i;\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c === 58 || c === 59) break;\n i++;\n }\n if (i >= len || styleString.charCodeAt(i) === 59) {\n // No colon found - skip this declaration\n if (i < len) {\n // Skip ';'.\n i++;\n }\n continue;\n }\n let propEnd = i;\n // Trim trailing whitespace from property name\n while (propEnd > propStart) {\n const c = styleString.charCodeAt(propEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n propEnd--;\n }\n if (propEnd === propStart) {\n // Empty property - skip\n while (i < len && styleString.charCodeAt(i) !== 59) {\n i++;\n }\n if (i < len) {\n i++;\n }\n continue;\n }\n const property = styleString.slice(propStart, propEnd);\n // Skip ':'.\n i++;\n // Skip whitespace before value\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n i++;\n }\n const valStart = i;\n while (i < len && styleString.charCodeAt(i) !== 59) {\n i++;\n }\n let valEnd = i;\n while (valEnd > valStart) {\n const c = styleString.charCodeAt(valEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n valEnd--;\n }\n if (i < len) {\n // Skip ';'.\n i++;\n }\n if (valEnd === valStart) continue;\n const value = styleString.slice(valStart, valEnd);\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(property)] = value;\n }\n\n return result;\n}\n\n/**\n * Converts a hyphenated style object to a camelCase StyleValue object.\n * @example\n * htmlObjStyleToStyleValue({ \"background-color\": \"red\", \"font-size\": \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlObjStyleToStyleValue(style: HTMLCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(key)] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a camelCase style object to a StyleValue object.\n * @example\n * jsxStyleToStyleValue({ backgroundColor: \"red\", fontSize: 16 });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function jsxStyleToStyleValue(style: JSXCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[key] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a CSS style string.\n * @example\n * styleValueToHTMLStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // \"background-color: red; font-size: 16px;\"\n */\nexport function styleValueToHTMLStyle(style: StyleValue): string {\n let result = \"\";\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n if (result) {\n result += \"; \";\n }\n result += camelToHyphen(key);\n result += \": \";\n result += value as string | number;\n }\n if (!result) return \"\";\n return `${result};`;\n}\n\n/**\n * Converts a StyleValue object to a hyphenated style object.\n * @example\n * styleValueToHTMLObjStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { \"background-color\": \"red\", \"font-size\": \"16px\" }\n */\nexport function styleValueToHTMLObjStyle(style: StyleValue) {\n const result: CSS.PropertiesHyphen = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n (result as Record<string, unknown>)[camelToHyphen(key)] = value;\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a camelCase style object.\n * @example\n * styleValueToJSXStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function styleValueToJSXStyle(style: StyleValue) {\n return style as JSXCSSProperties;\n}\n\n/**\n * Type guard to check if a style object has hyphenated keys.\n * @example\n * isHTMLObjStyle({ \"background-color\": \"red\" }); // true\n * isHTMLObjStyle({ backgroundColor: \"red\" }); // false\n */\nexport function isHTMLObjStyle(\n style: CSS.Properties<any> | CSS.PropertiesHyphen<any>,\n): style is CSS.PropertiesHyphen {\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n // Quick exclusion of CSS custom properties (--foo)\n if (\n key.length >= 2 &&\n key.charCodeAt(0) === 45 &&\n key.charCodeAt(1) === 45\n ) {\n continue;\n }\n if (key.indexOf(\"-\") !== -1) return true;\n }\n return false;\n}\n","import clsx, { type ClassValue as ClsxClassValue } from \"clsx\";\nimport {\n REFINE_UNSTABLE_TRACKING_WINDOW,\n type RefineRunState,\n type VariantChange,\n accumulateUnstableVariantChanges,\n captureCreationFrame,\n warnRefineLimit,\n} from \"./refine-warning.ts\";\nimport type {\n AnyComponent,\n CVComponent,\n ClassValue,\n ComponentProps,\n ComponentResult,\n ExtendableVariants,\n HTMLObjProps,\n HTMLProps,\n JSXProps,\n MergeVariants,\n ModalComponent,\n Refine,\n SplitPropsFunction,\n StyleClassProps,\n StyleClassValue,\n StyleValue,\n VariantValues,\n Variants,\n} from \"./types.ts\";\nimport {\n htmlObjStyleToStyleValue,\n htmlStyleToStyleValue,\n isHTMLObjStyle,\n jsxStyleToStyleValue,\n styleValueToHTMLObjStyle,\n styleValueToHTMLStyle,\n styleValueToJSXStyle,\n} from \"./utils.ts\";\n\n// Internal compute path: pushes the variant classes contributed by this\n// component (and its extends chain) into `classesOut` and merges any styles\n// into `styleOut`. Base class is handled by callers via ComponentMeta.baseClass\n// to avoid string-parsing round trips. Both outputs are mutated in place to\n// avoid intermediate allocations.\ntype ComputeFn = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n skipKeys: Set<string> | null,\n skipValues: Record<string, Set<string>> | null,\n classesOut: ClsxClassValue[],\n styleOut: StyleValue,\n runState?: RefineRunState,\n protectedVariants?: Record<string, unknown> | null,\n pendingProtectedVariants?: Record<string, unknown> | null,\n protectedVariantKeys?: Set<string> | null,\n) => Record<string, unknown>;\n\ntype ResolveRefineFn = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n filterOwnVariants?: boolean,\n runState?: RefineRunState,\n protectedVariants?: Record<string, unknown> | null,\n pendingProtectedVariants?: Record<string, unknown> | null,\n protectedVariantKeys?: Set<string> | null,\n) => Record<string, unknown>;\n\n// Internal metadata stored on components but hidden from public types.\ninterface ComponentMeta {\n baseClass: string;\n staticDefaults: Record<string, unknown>;\n // Returns variants set via setDefaultVariants in the refine function chain.\n // null when this component has no resolveDefaults work to do (no `refine`\n // and no extends with work).\n resolveDefaults:\n | ((\n childDefaults: Record<string, unknown>,\n userProps?: Record<string, unknown>,\n ) => Record<string, unknown>)\n | null;\n // Returns variant classes + style for this component, used by extending\n // components. Top-level rendering also routes through this.\n compute: ComputeFn;\n resolveRefine: ResolveRefineFn | null;\n // Reference identity is used to detect mixed-factory `extend`. When a\n // component is extended by a parent from a different `create()` call, the\n // parent applies this transform to the extend's contribution before joining,\n // preserving each factory's transform boundary.\n transformClass: (className: string) => string;\n // Variant keys whose effective definition in this component's chain is a\n // function. An extending component that supplies a non-function variant for\n // the same key uses this to tell us to skip that key (matching the\n // type-level \"function variant is replaced by anything in the child\" rule).\n // Empty when no key in this chain is a function variant.\n functionVariantKeys: Set<string>;\n}\n\nconst META_KEY = \"__meta\";\n\ninterface ComponentWithMeta {\n [META_KEY]?: ComponentMeta;\n}\n\nconst EMPTY_DEFAULTS: Record<string, unknown> = Object.freeze({}) as Record<\n string,\n unknown\n>;\n\nconst MAX_REFINE_RUNS = 50;\n\nfunction areVariantsEqual(\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): boolean {\n for (const key in a) {\n if (!Object.hasOwn(a, key)) continue;\n if (!Object.is(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!Object.hasOwn(b, key)) continue;\n if (!Object.hasOwn(a, key)) return false;\n }\n return true;\n}\n\nfunction getExtUserVariantProps(\n userVariantProps: Record<string, unknown>,\n protectedVariants: Record<string, unknown> | null,\n changedVariants: Record<string, unknown> | null,\n): Record<string, unknown> {\n const extUserVariantProps: Record<string, unknown> = {};\n Object.assign(extUserVariantProps, userVariantProps);\n if (protectedVariants) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n if (changedVariants) {\n Object.assign(extUserVariantProps, changedVariants);\n }\n return extUserVariantProps;\n}\n\nfunction mergeVariants(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n skipKeys?: Set<string> | null,\n): boolean {\n let changed = false;\n if (!skipKeys || skipKeys.size === 0) {\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue;\n const value = source[key];\n if (!Object.is(target[key], value)) {\n changed = true;\n }\n target[key] = value;\n }\n return changed;\n }\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue;\n if (skipKeys.has(key)) continue;\n const value = source[key];\n if (!Object.is(target[key], value)) {\n changed = true;\n }\n target[key] = value;\n }\n return changed;\n}\n\n// Components carry internal metadata on a non-public property so user-facing\n// component types stay clean.\nfunction getComponentMeta(component: AnyComponent): ComponentMeta | undefined {\n return (component as AnyComponent & ComponentWithMeta)[META_KEY];\n}\n\nfunction setComponentMeta(component: AnyComponent, meta: ComponentMeta): void {\n (component as AnyComponent & ComponentWithMeta)[META_KEY] = meta;\n}\n\nexport type {\n ClassValue,\n StyleValue,\n StyleClassProps,\n StyleClassValue,\n JSXProps,\n HTMLProps,\n HTMLObjProps,\n CVComponent,\n};\n\nexport type VariantProps<T extends Pick<AnyComponent, \"getVariants\">> =\n ReturnType<T[\"getVariants\"]>;\n\n// Variant props expose booleans, but variant object keys are always strings.\ntype VariantKey<T> = T extends boolean ? \"true\" | \"false\" : Extract<T, string>;\n\nexport type Variant<\n T extends Pick<AnyComponent, \"getVariants\">,\n K extends keyof VariantProps<T>,\n> = Record<\n VariantKey<NonNullable<VariantProps<T>[K]>>,\n ClassValue | StyleClassValue\n>;\n\nexport interface CVConfig<\n V extends Variants = {},\n E extends AnyComponent[] = [],\n> {\n extend?: E;\n class?: ClassValue;\n style?: StyleValue;\n variants?: ExtendableVariants<V, E>;\n defaultVariants?: VariantValues<MergeVariants<V, E>>;\n refine?: Refine<MergeVariants<V, E>>;\n}\n\ninterface CreateParams {\n transformClass?: (className: string) => string;\n}\n\nfunction isRecordObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\") return false;\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return true;\n}\n\n/**\n * Checks if a value is a style-class object (`{ style, class? }`).\n */\nfunction isStyleClassValue(value: unknown): value is StyleClassValue {\n if (!isRecordObject(value)) return false;\n return \"style\" in value || \"class\" in value;\n}\n\n/**\n * Converts any style input (string, JSX object, or HTML object) to a normalized\n * StyleValue.\n */\nfunction normalizeStyle(style: unknown): StyleValue {\n if (typeof style === \"string\") {\n return htmlStyleToStyleValue(style);\n }\n if (typeof style === \"object\" && style != null) {\n if (isHTMLObjStyle(style as Record<string, unknown>)) {\n return htmlObjStyleToStyleValue(style as Record<string, string | number>);\n }\n return jsxStyleToStyleValue(style as Record<string, string | number>);\n }\n return {};\n}\n\n/**\n * Pre-extracts the class and (normalized) style from a variant value once at\n * component creation time. Returns `null` if the value contributes nothing.\n */\ninterface PrebuiltValue {\n class: ClassValue;\n style: StyleValue | null;\n}\n\nfunction extractStyleClassPrebuilt(value: StyleClassValue): PrebuiltValue {\n const styleNorm = normalizeStyle(value.style);\n return {\n class: value.class ?? null,\n style: styleNorm && Object.keys(styleNorm).length > 0 ? styleNorm : null,\n };\n}\n\nfunction extractClassAndStylePrebuilt(value: unknown): PrebuiltValue {\n if (isStyleClassValue(value)) {\n return extractStyleClassPrebuilt(value);\n }\n if (isRecordObject(value)) {\n return { class: null, style: null };\n }\n return { class: value as ClassValue, style: null };\n}\n\n/**\n * Gets all variant keys from a component's config, including extended\n * components.\n */\nfunction collectVariantKeys(\n config: CVConfig<Variants, AnyComponent[]>,\n): string[] {\n const keys = new Set<string>();\n\n if (config.extend) {\n for (const ext of config.extend) {\n const extKeys = ext.variantKeys as readonly string[];\n for (let i = 0; i < extKeys.length; i++) {\n keys.add(extKeys[i]);\n }\n }\n }\n\n if (config.variants) {\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (variant === null) {\n keys.delete(key);\n continue;\n }\n keys.add(key);\n }\n }\n\n return Array.from(keys);\n}\n\nfunction isVariantDisabled(\n config: CVConfig<Variants, AnyComponent[]>,\n key: string,\n): boolean {\n return config.variants?.[key] === null;\n}\n\nfunction getVariantValueKey(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n}\n\nfunction isVariantValueDisabled(\n config: CVConfig<Variants, AnyComponent[]>,\n key: string,\n value: unknown,\n): boolean {\n const valueKey = getVariantValueKey(value);\n if (valueKey == null) return false;\n const variant = config.variants?.[key];\n if (!isRecordObject(variant)) return false;\n return variant[valueKey] === null;\n}\n\nfunction collectDisabledVariantKeys(\n config: CVConfig<Variants, AnyComponent[]>,\n): Set<string> {\n const keys = new Set<string>();\n if (!config.variants) {\n return keys;\n }\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n if ((config.variants as Record<string, unknown>)[key] === null) {\n keys.add(key);\n }\n }\n return keys;\n}\n\nfunction collectDisabledVariantValues(\n config: CVConfig<Variants, AnyComponent[]>,\n): Record<string, Set<string>> {\n const values: Record<string, Set<string>> = {};\n if (!config.variants) {\n return values;\n }\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n const variant = (config.variants as Record<string, unknown>)[key];\n if (!isRecordObject(variant)) continue;\n let bucket: Set<string> | undefined;\n for (const variantValue in variant) {\n if (!Object.hasOwn(variant, variantValue)) continue;\n if (variant[variantValue] !== null) continue;\n if (!bucket) {\n bucket = new Set<string>();\n values[key] = bucket;\n }\n bucket.add(variantValue);\n }\n }\n return values;\n}\n\ninterface NormalizedSource {\n propKeys: string[];\n variantKeys: string[];\n isComponent: boolean;\n}\n\nconst EMPTY_SOURCE: NormalizedSource = {\n propKeys: [],\n variantKeys: [],\n isComponent: false,\n};\n\nfunction normalizeKeySource(source: unknown): NormalizedSource {\n if (Array.isArray(source)) {\n return {\n propKeys: source as string[],\n variantKeys: source as string[],\n isComponent: false,\n };\n }\n\n if (!source) {\n return EMPTY_SOURCE;\n }\n if (typeof source !== \"object\" && typeof source !== \"function\") {\n return EMPTY_SOURCE;\n }\n const typed = source as Record<string, unknown>;\n if (typeof typed.getVariants !== \"function\") {\n return EMPTY_SOURCE;\n }\n if (!Array.isArray(typed.propKeys)) {\n return EMPTY_SOURCE;\n }\n if (!Array.isArray(typed.variantKeys)) {\n return EMPTY_SOURCE;\n }\n\n return {\n propKeys: typed.propKeys as string[],\n variantKeys: typed.variantKeys as string[],\n isComponent: true,\n };\n}\n\n/**\n * Splits props into multiple groups based on key sources. Only the first\n * component claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays always receive their listed keys but don't\n * claim styling props.\n */\nfunction splitPropsImpl(\n selfKeys: string[],\n selfIsComponent: boolean,\n props: Record<string, unknown>,\n sources: unknown[],\n): Record<string, unknown>[] {\n const sourcesLength = sources.length;\n const results: Record<string, unknown>[] = [];\n let stylingClaimed = selfIsComponent;\n\n const selfResult: Record<string, unknown> = {};\n const selfKeysLength = selfKeys.length;\n for (let i = 0; i < selfKeysLength; i++) {\n const key = selfKeys[i];\n if (key !== undefined && key in props) {\n selfResult[key] = props[key];\n }\n }\n results.push(selfResult);\n\n // Track effective key arrays for the rest computation — for typical inputs\n // a linear scan beats building a Set up-front.\n const effectiveKeyArrays: string[][] = [selfKeys];\n\n for (let s = 0; s < sourcesLength; s++) {\n const source = normalizeKeySource(sources[s]);\n const sourceResult: Record<string, unknown> = {};\n\n const effectiveKeys =\n source.isComponent && stylingClaimed\n ? source.variantKeys\n : source.propKeys;\n\n const effectiveKeysLength = effectiveKeys.length;\n for (let i = 0; i < effectiveKeysLength; i++) {\n const key = effectiveKeys[i];\n if (key !== undefined && key in props) {\n sourceResult[key] = props[key];\n }\n }\n results.push(sourceResult);\n effectiveKeyArrays.push(effectiveKeys);\n\n if (source.isComponent && !stylingClaimed) {\n stylingClaimed = true;\n }\n }\n\n const rest: Record<string, unknown> = {};\n const propKeys = Object.keys(props);\n const propKeysLength = propKeys.length;\n const groupCount = sourcesLength + 1;\n outer: for (let i = 0; i < propKeysLength; i++) {\n const key = propKeys[i];\n if (key === undefined) continue;\n for (let g = 0; g < groupCount; g++) {\n const arr = effectiveKeyArrays[g];\n if (arr === undefined) continue;\n const arrLength = arr.length;\n for (let j = 0; j < arrLength; j++) {\n if (arr[j] === key) continue outer;\n }\n }\n rest[key] = props[key];\n }\n results.push(rest);\n\n return results;\n}\n\n/**\n * Splits props into multiple groups based on key sources. Each source gets its\n * own result object containing all its matching keys. The first component\n * source claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays receive their listed keys but don't claim\n * styling props. The last element is always the \"rest\" containing keys not\n * claimed by any source.\n */\nexport const splitProps: SplitPropsFunction = ((\n props: Record<string, unknown>,\n source1: unknown,\n ...sources: unknown[]\n) => {\n const normalizedSource1 = normalizeKeySource(source1);\n return splitPropsImpl(\n normalizedSource1.propKeys,\n normalizedSource1.isComponent,\n props,\n sources,\n );\n}) as SplitPropsFunction;\n\n/**\n * A pre-built variant. Maps variant value keys (or the literal \"true\"/\"false\"\n * strings for boolean variants) to PrebuiltValue. Includes a \"shorthand\"\n * fallback when the variant is a single class value (treated as `{ true: ... }`).\n */\ninterface PrebuiltVariant {\n // For object variants: map of value -> prebuilt class/style\n values: Record<string, PrebuiltValue> | null;\n // For shorthand variants: the value to use when selectedValue is true\n shorthand: PrebuiltValue | null;\n // Set of value keys that are disabled (value === null in the original variant\n // definition)\n disabledValues: Set<string> | null;\n}\n\nfunction buildPrebuiltVariant(variantDef: unknown): PrebuiltVariant {\n if (!isRecordObject(variantDef)) {\n return {\n values: null,\n shorthand: extractClassAndStylePrebuilt(variantDef),\n disabledValues: null,\n };\n }\n const values: Record<string, PrebuiltValue> = {};\n let disabledValues: Set<string> | null = null;\n for (const key in variantDef) {\n if (!Object.hasOwn(variantDef, key)) continue;\n const value = variantDef[key];\n if (value === null) {\n if (!disabledValues) {\n disabledValues = new Set<string>();\n }\n disabledValues.add(key);\n continue;\n }\n values[key] = extractClassAndStylePrebuilt(value);\n }\n return {\n values,\n shorthand: null,\n disabledValues,\n };\n}\n\n/**\n * Creates the cv and cx functions.\n */\nexport function create({\n transformClass = (className) => className,\n}: CreateParams = {}) {\n const cx = (...classes: ClsxClassValue[]) => transformClass(clsx(...classes));\n\n const cv = <V extends Variants = {}, const E extends AnyComponent[] = []>(\n config: CVConfig<V, E> = {},\n ): CVComponent<V, E> => {\n type MergedVariants = MergeVariants<V, E>;\n\n // ----- Pre-computed at creation time -----\n const variantKeys = collectVariantKeys(config);\n const variantKeysLength = variantKeys.length;\n const disabledVariantKeys = collectDisabledVariantKeys(config);\n const disabledVariantValues = collectDisabledVariantValues(config);\n const hasDisabledVariantKeys = disabledVariantKeys.size > 0;\n const disabledVariantValueKeys = Object.keys(disabledVariantValues);\n const hasDisabledVariantValues = disabledVariantValueKeys.length > 0;\n const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;\n\n const inputPropsKeys = [\"class\", \"className\", \"style\", ...variantKeys];\n\n const extend = config.extend;\n const hasExtend = !!extend && extend.length > 0;\n const variants = config.variants;\n const refine = config.refine;\n const baseStyle = config.style;\n const hasBaseStyle = !!baseStyle;\n\n // Split `variants` entries into static entries (object/shorthand) and\n // function-variant entries. Static entries are pre-built into\n // PrebuiltVariant for fast iteration. Function-variant entries override\n // any same-key inherited variant (see `staticExtSkipKeys`).\n const variantEntryNames: string[] = [];\n const variantEntryDefs: PrebuiltVariant[] = [];\n const functionVariantNames: string[] = [];\n const functionVariantFns: Array<(value: unknown) => unknown> = [];\n if (variants) {\n for (const name in variants) {\n if (!Object.hasOwn(variants, name)) continue;\n const variant = (variants as Record<string, unknown>)[name];\n if (variant === null) continue;\n if (typeof variant === \"function\") {\n functionVariantNames.push(name);\n functionVariantFns.push(variant as (value: unknown) => unknown);\n continue;\n }\n variantEntryNames.push(name);\n variantEntryDefs.push(buildPrebuiltVariant(variant));\n }\n }\n const variantEntryCount = variantEntryNames.length;\n const functionVariantCount = functionVariantNames.length;\n\n // Pre-compute static defaults. Includes:\n // - extended components' static defaults\n // - implicit boolean defaults (variants with a `false` key default to false)\n // - this config's defaultVariants (overriding the above)\n // Then filtered through disabled-variants.\n const staticDefaults: Record<string, unknown> = {};\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (meta) {\n Object.assign(staticDefaults, meta.staticDefaults);\n }\n }\n }\n if (variants) {\n for (const name in variants) {\n if (!Object.hasOwn(variants, name)) continue;\n const variantDef = (variants as Record<string, unknown>)[name];\n if (!isRecordObject(variantDef)) continue;\n if (\n Object.hasOwn(variantDef, \"false\") &&\n staticDefaults[name] === undefined\n ) {\n staticDefaults[name] = false;\n }\n }\n }\n if (config.defaultVariants) {\n Object.assign(staticDefaults, config.defaultVariants);\n }\n if (hasAnyDisabled) {\n // Filter disabled variants in-place\n for (const key in staticDefaults) {\n if (!Object.hasOwn(staticDefaults, key)) continue;\n if (disabledVariantKeys.has(key)) {\n delete staticDefaults[key];\n continue;\n }\n if (hasDisabledVariantValues) {\n const value = staticDefaults[key];\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n delete staticDefaults[key];\n }\n }\n }\n }\n\n // Pre-build extended component info, so we don't have to call\n // `getComponentMeta` per render. Extends from a different `create()`\n // factory (different `transformClass` identity) need their contribution\n // transformed by their own `transformClass` before being joined into our\n // class string — otherwise our outer `transformClass(clsx(allClasses))`\n // would be the only transform that runs, and the extend's factory would\n // be silently bypassed for any base coming from `extend: [otherFactoryCv]`.\n const extMetas: ComponentMeta[] = [];\n const extBaseClassesArr: string[] = [];\n const extIsolated: boolean[] = [];\n let hasIsolatedExt = false;\n if (hasExtend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (!meta) continue;\n extMetas.push(meta);\n const isolated = meta.transformClass !== transformClass;\n extIsolated.push(isolated);\n if (isolated) {\n hasIsolatedExt = true;\n // Apply the extend's own transformClass to its base class so it\n // survives our outer transform (which still applies on top, matching\n // the original public-component round-trip behavior).\n extBaseClassesArr.push(meta.transformClass(meta.baseClass));\n } else {\n extBaseClassesArr.push(meta.baseClass);\n }\n }\n }\n const extCount = extMetas.length;\n\n // Filter to only extends with refine work in their chain. `resolveDefaults`\n // and `resolveRefine` are populated from the same transitive condition,\n // so one bucket is enough for both resolver paths.\n const extMetasWithRefine: ComponentMeta[] = [];\n for (let i = 0; i < extCount; i++) {\n const meta = extMetas[i];\n if (meta.resolveDefaults) {\n extMetasWithRefine.push(meta);\n }\n }\n const extMetasWithRefineCount = extMetasWithRefine.length;\n const shouldCollectChangedVariants = extMetasWithRefineCount > 0;\n\n // Call-site frame captured at the `cv()` call site so refine-limit warnings\n // can point developers at the component definition. Skipped entirely for\n // components that can never enter the refine loop, and stripped in\n // production via the NODE_ENV guard inside `captureCreationFrame`. The\n // frame is captured at creation time but the underlying `.stack` string is\n // formatted lazily on first access, so component creation stays cheap\n // unless the warning actually fires.\n const canTriggerRefineWarning = !!refine || extMetasWithRefineCount > 0;\n const creationFrame = canTriggerRefineWarning\n ? captureCreationFrame(cv)\n : undefined;\n\n // Function variant keys inherited from extends, filtered through this\n // component's own variants: a static (object/shorthand) variant in this\n // component replaces an inherited function variant for the same key.\n // The closure is exposed on `ComponentMeta` so any further extending\n // component can detect \"ancestor's effective variant for K is a function\"\n // and skip it when overriding K with a non-function.\n const functionVariantKeys = new Set<string>();\n for (let i = 0; i < extCount; i++) {\n const fnKeys = extMetas[i].functionVariantKeys;\n for (const k of fnKeys) {\n if (disabledVariantKeys.has(k)) continue;\n functionVariantKeys.add(k);\n }\n }\n for (let i = 0; i < functionVariantCount; i++) {\n functionVariantKeys.add(functionVariantNames[i]);\n }\n for (let i = 0; i < variantEntryCount; i++) {\n // A static variant in this component replaces an inherited function\n // variant for the same key; from this component onward, the key is no\n // longer a function variant.\n functionVariantKeys.delete(variantEntryNames[i]);\n }\n\n // Static-variant keys in this component that override an inherited\n // function variant. Type-level merge says child fully replaces, so the\n // ancestor's function must not run with the child's (object-typed) value.\n let staticVariantsOverridingExtFn: string[] | null = null;\n if (variantEntryCount > 0 && extCount > 0) {\n for (let i = 0; i < variantEntryCount; i++) {\n const name = variantEntryNames[i];\n for (let j = 0; j < extCount; j++) {\n if (extMetas[j].functionVariantKeys.has(name)) {\n if (!staticVariantsOverridingExtFn) {\n staticVariantsOverridingExtFn = [];\n }\n staticVariantsOverridingExtFn.push(name);\n break;\n }\n }\n }\n }\n\n // Pre-compute static skip key/value sets to pass to extends. These never\n // change across calls — when caller passes no skip sets, we reuse the same\n // object and avoid Set allocation.\n let staticExtSkipKeys: Set<string> | null = null;\n if (\n hasDisabledVariantKeys ||\n functionVariantCount > 0 ||\n staticVariantsOverridingExtFn !== null\n ) {\n staticExtSkipKeys = new Set<string>();\n for (const k of disabledVariantKeys) {\n staticExtSkipKeys.add(k);\n }\n for (let i = 0; i < functionVariantCount; i++) {\n staticExtSkipKeys.add(functionVariantNames[i]);\n }\n if (staticVariantsOverridingExtFn) {\n for (const k of staticVariantsOverridingExtFn) {\n staticExtSkipKeys.add(k);\n }\n }\n }\n // Skip values are passed directly to extends. We can reuse the same object\n // when no caller-provided values need merging.\n const staticExtSkipValues: Record<string, Set<string>> | null =\n hasDisabledVariantValues ? disabledVariantValues : null;\n\n // Branches on `hasAnyDisabled` so the no-disabled path skips the per-key\n // filter checks entirely — most components have no disabled variants and\n // hit only the plain copy.\n function filterDisabledInto(\n input: Record<string, unknown>,\n out: Record<string, unknown>,\n ): void {\n if (!hasAnyDisabled) {\n for (const key in input) {\n if (Object.hasOwn(input, key)) {\n out[key] = input[key];\n }\n }\n return;\n }\n for (const key in input) {\n if (!Object.hasOwn(input, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = input[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n continue;\n }\n }\n out[key] = value;\n }\n }\n\n // Pre-create resolveDefaults function — used by parents during their\n // `resolveVariantsHot`. Returns the variants set via setDefaultVariants in\n // the refine function chain.\n //\n // When this component has no `refine` and no `extend` with work, the\n // function is null — callers can skip iterating it entirely.\n const resolveDefaultsFn: ComponentMeta[\"resolveDefaults\"] =\n refine || extMetasWithRefineCount > 0\n ? (\n childDefaults: Record<string, unknown>,\n userProps: Record<string, unknown> = EMPTY_DEFAULTS,\n ) => {\n // userProps is contractually variant-only (callers pre-filter\n // when starting from a full props object).\n const resolvedVariants: Record<string, unknown> = {};\n Object.assign(resolvedVariants, staticDefaults);\n for (const key in childDefaults) {\n if (!Object.hasOwn(childDefaults, key)) continue;\n const v = childDefaults[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n for (const key in userProps) {\n if (!Object.hasOwn(userProps, key)) continue;\n const v = userProps[key];\n if (v === undefined) continue;\n resolvedVariants[key] = v;\n }\n\n const refineDefaults: Record<string, unknown> = {};\n\n for (let i = 0; i < extMetasWithRefineCount; i++) {\n const extDefaults = extMetasWithRefine[i].resolveDefaults!(\n childDefaults,\n userProps,\n );\n for (const k in extDefaults) {\n if (!Object.hasOwn(extDefaults, k)) continue;\n refineDefaults[k] = extDefaults[k];\n }\n }\n\n if (refine) {\n // Filter to own variant keys so `ctx.variants` matches\n // `VariantValues<V>` when this component is used as an extend by\n // a parent that adds extra variant keys (those keys would\n // otherwise leak through `userProps`).\n const ownVariants: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const k = variantKeys[i];\n if (Object.hasOwn(resolvedVariants, k)) {\n ownVariants[k] = resolvedVariants[k];\n }\n }\n refine({\n variants: ownVariants as VariantValues<Record<string, unknown>>,\n setVariants: noop,\n setDefaultVariants: (newDefaults) => {\n for (const key in newDefaults) {\n if (!Object.hasOwn(newDefaults, key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (userProps[key] !== undefined) continue;\n if (isVariantDisabled(config, key)) continue;\n if (isVariantValueDisabled(config, key, value)) continue;\n refineDefaults[key] = value;\n }\n },\n addClass: noop,\n addStyle: noop,\n });\n }\n\n return refineDefaults;\n }\n : null;\n\n // Hot path: resolve variants by merging static defaults + extends'\n // refine defaults + user-provided props.\n function resolveVariantsHot(\n propsVariants: Record<string, unknown>,\n ): Record<string, unknown> {\n // Start with static defaults\n const defaults: Record<string, unknown> = {};\n Object.assign(defaults, staticDefaults);\n\n // Apply refine defaults from extended components (only those that have\n // actual work to do).\n for (let i = 0; i < extMetasWithRefineCount; i++) {\n const meta = extMetasWithRefine[i];\n const extDefaults = meta.resolveDefaults!(defaults, propsVariants);\n for (const k in extDefaults) {\n if (!Object.hasOwn(extDefaults, k)) continue;\n defaults[k] = extDefaults[k];\n }\n }\n\n // Apply propsVariants on top (filter undefined). propsVariants is\n // contractually variant-only here — callers building from a full props\n // object filter to variant keys before calling.\n for (const k in propsVariants) {\n if (!Object.hasOwn(propsVariants, k)) continue;\n const v = propsVariants[k];\n if (v === undefined) continue;\n defaults[k] = v;\n }\n\n if (!hasAnyDisabled) {\n return defaults;\n }\n\n // Filter disabled\n const result: Record<string, unknown> = {};\n filterDisabledInto(defaults, result);\n return result;\n }\n\n const runRefineContext = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n filterOwnVariants: boolean,\n collectOutput: boolean,\n protectedVariants: Record<string, unknown> | null | undefined,\n pendingProtectedVariants: Record<string, unknown> | null | undefined,\n protectedVariantKeys: Set<string> | null | undefined,\n ): {\n workingResolved: Record<string, unknown>;\n changedVariants: Record<string, unknown> | null;\n classes: ClassValue[] | null;\n style: StyleValue | null;\n } => {\n let workingResolved = resolved;\n let cClasses: ClassValue[] | null = null;\n let cStyle: StyleValue | null = null;\n let changedVariants: Record<string, unknown> | null = null;\n\n if (refine) {\n let ownVariants = resolved;\n if (filterOwnVariants) {\n // When this component is being extended, `resolved` is the parent's\n // workingResolved (a superset of our variant keys). Filter to our own\n // keys for `ctx.variants` so the user's `refine` callback sees the\n // shape declared by `VariantValues<V>` and not foreign parent keys.\n const filteredVariants: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const k = variantKeys[i];\n if (Object.hasOwn(resolved, k)) {\n filteredVariants[k] = resolved[k];\n }\n }\n ownVariants = filteredVariants;\n }\n // Lazy-init updatedVariants — many refine callbacks only inspect\n // `variants` or call setDefaultVariants for keys the user already set,\n // so the copy is unnecessary in the common case.\n let updatedVariants: Record<string, unknown> | null = null;\n const localCClasses: ClassValue[] | null = collectOutput ? [] : null;\n let localCStyle: StyleValue | null = null;\n const ensureUpdated = (): Record<string, unknown> => {\n if (updatedVariants) {\n return updatedVariants;\n }\n const u: Record<string, unknown> = {};\n Object.assign(u, ownVariants);\n updatedVariants = u;\n return u;\n };\n const setChangedVariant = (\n key: string,\n value: unknown,\n protect = false,\n ) => {\n if (shouldCollectChangedVariants) {\n if (!changedVariants) {\n changedVariants = {};\n }\n changedVariants[key] = value;\n }\n if (protect && protectedVariants) {\n protectedVariants[key] = value;\n protectedVariantKeys?.add(key);\n }\n };\n const getCurrentVariantValue = (key: string) => {\n return updatedVariants ? updatedVariants[key] : ownVariants[key];\n };\n const ctx = {\n variants: ownVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n if (!hasAnyDisabled) {\n for (const key in newVariants) {\n if (!Object.hasOwn(newVariants, key)) continue;\n const value = (newVariants as Record<string, unknown>)[key];\n setChangedVariant(key, value, true);\n if (Object.is(getCurrentVariantValue(key), value)) continue;\n ensureUpdated()[key] = value;\n }\n return;\n }\n for (const key in newVariants) {\n if (!Object.hasOwn(newVariants, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = (newVariants as Record<string, unknown>)[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n }\n setChangedVariant(key, value, true);\n if (Object.is(getCurrentVariantValue(key), value)) continue;\n ensureUpdated()[key] = value;\n }\n },\n setDefaultVariants: (\n newDefaults: VariantValues<Record<string, unknown>>,\n ) => {\n for (const key in newDefaults) {\n if (!Object.hasOwn(newDefaults, key)) continue;\n if (userVariantProps[key] !== undefined) continue;\n if (protectedVariantKeys?.has(key)) continue;\n const value = (newDefaults as Record<string, unknown>)[key];\n if (hasAnyDisabled) {\n if (disabledVariantKeys.has(key)) continue;\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n }\n if (Object.is(getCurrentVariantValue(key), value)) continue;\n setChangedVariant(key, value);\n if (pendingProtectedVariants) {\n pendingProtectedVariants[key] = value;\n }\n ensureUpdated()[key] = value;\n }\n },\n addClass: (className: ClassValue) => {\n localCClasses?.push(className);\n },\n addStyle: (newStyle: StyleValue) => {\n if (!collectOutput) return;\n if (!localCStyle) {\n localCStyle = {};\n }\n Object.assign(localCStyle, newStyle);\n },\n };\n const result = refine(ctx);\n if (collectOutput && result != null) {\n const r = extractClassAndStylePrebuilt(result);\n if (r.class != null) {\n localCClasses?.push(r.class);\n }\n if (r.style) {\n if (!localCStyle) {\n localCStyle = {};\n }\n Object.assign(localCStyle, r.style);\n }\n }\n cClasses = localCClasses;\n cStyle = localCStyle;\n if (updatedVariants) {\n const nextResolved: Record<string, unknown> = {};\n Object.assign(nextResolved, workingResolved);\n if (hasAnyDisabled) {\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n Object.assign(nextResolved, filteredUpdated);\n } else {\n Object.assign(nextResolved, updatedVariants);\n }\n workingResolved = nextResolved;\n }\n }\n\n return {\n workingResolved,\n changedVariants,\n classes: cClasses,\n style: cStyle,\n };\n };\n\n // Core compute path. Called both for top-level rendering (via\n // `computeResult`) and recursively when this component is used as an\n // `extend` target by another component. Pushes variant classes (excluding\n // base class) into `classesOut` and merges styles into `styleOut`.\n const computeOnce: ComputeFn = (\n resolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n ) => {\n // Run `refine` (if any). May modify resolved variants and emit classes\n // and styles.\n let workingResolved = resolved;\n let cClasses: ClassValue[] | null = null;\n let cStyle: StyleValue | null = null;\n let changedVariants: Record<string, unknown> | null = null;\n if (refine) {\n const refineResult = runRefineContext(\n resolved,\n userVariantProps,\n true,\n true,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n workingResolved = refineResult.workingResolved;\n cClasses = refineResult.classes;\n cStyle = refineResult.style;\n changedVariants = refineResult.changedVariants;\n }\n\n // Run extends' contributions first (their full classes + styles) so our\n // own base style and variants apply on top, matching the original\n // ext1 → ext2 → … → current ordering.\n //\n // Pass explicit user values plus refine changes as the extends'\n // `userVariantProps`. This lets more-specific refine decisions stick\n // across re-runs while inherited static defaults can still be refined by\n // the extended component's own refine chain.\n if (hasExtend) {\n // Build skip sets to pass to extends. Reuse precomputed values when no\n // caller-provided sets need merging.\n let extSkipKeys: Set<string> | null;\n if (skipKeys === null) {\n extSkipKeys = staticExtSkipKeys;\n } else if (staticExtSkipKeys === null) {\n extSkipKeys = skipKeys;\n } else {\n extSkipKeys = new Set(skipKeys);\n for (const k of staticExtSkipKeys) {\n extSkipKeys.add(k);\n }\n }\n\n let extSkipVals: Record<string, Set<string>> | null;\n if (skipValues === null) {\n extSkipVals = staticExtSkipValues;\n } else if (staticExtSkipValues === null) {\n extSkipVals = skipValues;\n } else {\n extSkipVals = {};\n for (const k in skipValues) {\n extSkipVals[k] = skipValues[k];\n }\n for (const k in staticExtSkipValues) {\n const existing = extSkipVals[k];\n if (existing) {\n const merged = new Set<string>(existing);\n for (const v of staticExtSkipValues[k]) {\n merged.add(v);\n }\n extSkipVals[k] = merged;\n } else {\n extSkipVals[k] = staticExtSkipValues[k];\n }\n }\n }\n\n const extUserVariantProps =\n extMetasWithRefineCount > 0\n ? getExtUserVariantProps(\n userVariantProps,\n protectedVariants ?? null,\n changedVariants,\n )\n : userVariantProps;\n for (let i = 0; i < extCount; i++) {\n if (hasIsolatedExt && extIsolated[i]) {\n // Isolated extend (different factory): gather its variant classes\n // into a scratch array, then push the joined string after applying\n // its own transformClass. Our outer transform applies on top.\n const extClasses: ClsxClassValue[] = [];\n workingResolved = extMetas[i].compute(\n workingResolved,\n extUserVariantProps,\n extSkipKeys,\n extSkipVals,\n extClasses,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n if (extClasses.length > 0) {\n const joined = clsx(extClasses);\n if (joined.length > 0) {\n classesOut.push(\n extMetas[i].transformClass(joined) as ClsxClassValue,\n );\n }\n }\n } else {\n workingResolved = extMetas[i].compute(\n workingResolved,\n extUserVariantProps,\n extSkipKeys,\n extSkipVals,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n }\n // Only sync protected variants when a child refine resolver can\n // observe them. Otherwise extUserVariantProps may alias caller props.\n if (protectedVariants && extMetasWithRefineCount > 0) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n }\n }\n\n // Apply own base style (after extends' styles, matching original order).\n if (hasBaseStyle) {\n Object.assign(styleOut, baseStyle);\n }\n\n // Apply own variants. Skip keys/values come from caller (e.g., parent\n // wants its own function variant to override this variant).\n // `variantEntryNames` already excludes disabled keys (those with `null`\n // value in config) and function variants, so we don't re-check\n // `disabledVariantKeys` here.\n const ownSkipKeys = skipKeys;\n const ownSkipValues = skipValues;\n for (let i = 0; i < variantEntryCount; i++) {\n const variantName = variantEntryNames[i];\n if (ownSkipKeys && ownSkipKeys.has(variantName)) continue;\n const selectedValue = workingResolved[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n const variant = variantEntryDefs[i];\n if (\n variant.disabledValues &&\n selectedKey != null &&\n variant.disabledValues.has(selectedKey)\n ) {\n continue;\n }\n if (\n ownSkipValues &&\n selectedKey != null &&\n ownSkipValues[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n\n if (variant.values) {\n if (selectedKey == null) continue;\n const v = variant.values[selectedKey];\n if (!v) continue;\n if (v.class != null) {\n classesOut.push(v.class as ClsxClassValue);\n }\n if (v.style) {\n Object.assign(styleOut, v.style);\n }\n } else if (variant.shorthand && selectedValue === true) {\n const v = variant.shorthand;\n if (v.class != null) {\n classesOut.push(v.class as ClsxClassValue);\n }\n if (v.style) {\n Object.assign(styleOut, v.style);\n }\n }\n }\n\n // Apply function variants — entries in `variants` whose value is a\n // function. They run after static variants and override any same-key\n // inherited variant via `staticExtSkipKeys`.\n for (let i = 0; i < functionVariantCount; i++) {\n const variantName = functionVariantNames[i];\n if (ownSkipKeys && ownSkipKeys.has(variantName)) continue;\n const selectedValue = workingResolved[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n if (\n ownSkipValues &&\n selectedKey != null &&\n ownSkipValues[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n const fn = functionVariantFns[i];\n const computedResult = fn(selectedValue);\n if (computedResult == null) continue;\n const r = extractClassAndStylePrebuilt(computedResult);\n if (r.class != null) {\n classesOut.push(r.class as ClsxClassValue);\n }\n if (r.style) {\n Object.assign(styleOut, r.style);\n }\n }\n\n // Apply `refine` results — must come after own variants (static and\n // function).\n if (cClasses) {\n for (let i = 0; i < cClasses.length; i++) {\n classesOut.push(cClasses[i] as ClsxClassValue);\n }\n }\n if (cStyle) {\n Object.assign(styleOut, cStyle);\n }\n\n return workingResolved;\n };\n\n const compute: ComputeFn =\n !refine && extMetasWithRefineCount === 0\n ? computeOnce\n : (\n resolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n ) => {\n runState ??= { remaining: MAX_REFINE_RUNS };\n protectedVariants ??= {};\n protectedVariantKeys ??= new Set<string>();\n let workingResolved = resolved;\n // Latest variant changes from non-converging iterations inside the\n // tracking window. Lazy-init keeps convergent loops allocation-free.\n let unstableChanges: Map<string, VariantChange> | null = null;\n let lastClasses: ClsxClassValue[] = [];\n let lastStyle: StyleValue = {};\n let isFirstRun = true;\n\n while (runState.remaining > 0) {\n runState.remaining -= 1;\n let useDirectOutput = isFirstRun;\n if (useDirectOutput) {\n for (const key in styleOut) {\n if (Object.hasOwn(styleOut, key)) {\n useDirectOutput = false;\n break;\n }\n }\n }\n const classCount = classesOut.length;\n const nextPendingProtectedVariants: Record<string, unknown> = {};\n const nextClasses: ClsxClassValue[] = useDirectOutput\n ? classesOut\n : [];\n const nextStyle: StyleValue = useDirectOutput ? styleOut : {};\n const nextResolved = computeOnce(\n workingResolved,\n userVariantProps,\n skipKeys,\n skipValues,\n nextClasses,\n nextStyle,\n runState,\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n\n let protectedChanged: boolean;\n if (pendingProtectedVariants) {\n protectedChanged = mergeVariants(\n pendingProtectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n } else {\n protectedChanged = mergeVariants(\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n }\n\n if (\n !protectedChanged &&\n (nextResolved === workingResolved ||\n areVariantsEqual(workingResolved, nextResolved))\n ) {\n if (!useDirectOutput) {\n for (let i = 0; i < nextClasses.length; i++) {\n classesOut.push(nextClasses[i]);\n }\n Object.assign(styleOut, nextStyle);\n }\n return nextResolved;\n }\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n runState.remaining < REFINE_UNSTABLE_TRACKING_WINDOW\n ) {\n if (!unstableChanges) {\n unstableChanges = new Map<string, VariantChange>();\n }\n accumulateUnstableVariantChanges(\n unstableChanges,\n workingResolved,\n nextResolved,\n );\n }\n\n if (useDirectOutput && runState.remaining === 0) {\n // Keep the direct output from the last allowed run. Rolling\n // back here would drop it before the fallback copy below.\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n return nextResolved;\n }\n\n if (useDirectOutput) {\n classesOut.length = classCount;\n for (const key in styleOut) {\n if (Object.hasOwn(styleOut, key)) {\n Reflect.deleteProperty(styleOut, key);\n }\n }\n } else {\n lastClasses = nextClasses;\n lastStyle = nextStyle;\n }\n\n workingResolved = nextResolved;\n isFirstRun = false;\n }\n\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n\n for (let i = 0; i < lastClasses.length; i++) {\n classesOut.push(lastClasses[i]);\n }\n Object.assign(styleOut, lastStyle);\n return workingResolved;\n };\n\n const resolveRefineOnce: ResolveRefineFn = (\n resolved,\n userVariantProps,\n filterOwnVariants = true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n ) => {\n let workingResolved = resolved;\n let changedVariants: Record<string, unknown> | null = null;\n if (refine) {\n const refineResult = runRefineContext(\n resolved,\n userVariantProps,\n filterOwnVariants,\n false,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n workingResolved = refineResult.workingResolved;\n changedVariants = refineResult.changedVariants;\n }\n\n if (extMetasWithRefineCount > 0) {\n const extUserVariantProps = getExtUserVariantProps(\n userVariantProps,\n protectedVariants ?? null,\n changedVariants,\n );\n for (let i = 0; i < extMetasWithRefineCount; i++) {\n const meta = extMetasWithRefine[i];\n const resolveRefine = meta.resolveRefine;\n if (!resolveRefine) continue;\n workingResolved = resolveRefine(\n workingResolved,\n extUserVariantProps,\n true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n if (protectedVariants) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n }\n }\n\n return workingResolved;\n };\n\n const resolveRefine: ResolveRefineFn | null =\n refine || extMetasWithRefineCount > 0\n ? (\n resolved,\n userVariantProps,\n filterOwnVariants = true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n ) => {\n runState ??= { remaining: MAX_REFINE_RUNS };\n protectedVariants ??= {};\n protectedVariantKeys ??= new Set<string>();\n let workingResolved = resolved;\n // Latest variant changes from non-converging iterations inside the\n // tracking window. See the compute loop above for the shared\n // rationale.\n let unstableChanges: Map<string, VariantChange> | null = null;\n let reachedLimit = true;\n\n while (runState.remaining > 0) {\n runState.remaining -= 1;\n const nextPendingProtectedVariants: Record<string, unknown> = {};\n const nextResolved = resolveRefineOnce(\n workingResolved,\n userVariantProps,\n filterOwnVariants,\n runState,\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n let protectedChanged: boolean;\n if (pendingProtectedVariants) {\n protectedChanged = mergeVariants(\n pendingProtectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n } else {\n protectedChanged = mergeVariants(\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n }\n\n if (\n !protectedChanged &&\n (nextResolved === workingResolved ||\n areVariantsEqual(workingResolved, nextResolved))\n ) {\n workingResolved = nextResolved;\n reachedLimit = false;\n break;\n }\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n runState.remaining < REFINE_UNSTABLE_TRACKING_WINDOW\n ) {\n if (!unstableChanges) {\n unstableChanges = new Map<string, VariantChange>();\n }\n accumulateUnstableVariantChanges(\n unstableChanges,\n workingResolved,\n nextResolved,\n );\n }\n workingResolved = nextResolved;\n }\n\n if (reachedLimit) {\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n }\n\n return workingResolved;\n }\n : null;\n\n // Top-level: resolves variants from user props, calls compute, then\n // assembles className and style with user-provided class/style overrides.\n const computeResult = (\n props: ComponentProps<MergedVariants> = EMPTY_DEFAULTS as ComponentProps<MergedVariants>,\n ): { className: string; style: StyleValue } => {\n const propsRecord = props as Record<string, unknown>;\n\n // Inline resolve: avoids allocating a separate variantProps object for\n // the common case where no extends need a resolveDefaults pass.\n // resolveVariantsHot would also work here but assumes its input is\n // variant-only (it uses for-in for speed).\n let resolved: Record<string, unknown> = {};\n Object.assign(resolved, staticDefaults);\n\n let userVariantProps: Record<string, unknown>;\n if (extMetasWithRefineCount > 0) {\n // Some extends need a resolveDefaults pass. They expect a variant-only\n // object as `userProps`, so we extract one.\n const variantProps: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const key = variantKeys[i];\n if (Object.hasOwn(propsRecord, key)) {\n variantProps[key] = propsRecord[key];\n }\n }\n for (let i = 0; i < extMetasWithRefineCount; i++) {\n const meta = extMetasWithRefine[i];\n const extDefaults = meta.resolveDefaults!(resolved, variantProps);\n for (const k in extDefaults) {\n if (!Object.hasOwn(extDefaults, k)) continue;\n resolved[k] = extDefaults[k];\n }\n }\n for (const k in variantProps) {\n if (!Object.hasOwn(variantProps, k)) continue;\n const v = variantProps[k];\n if (v === undefined) continue;\n resolved[k] = v;\n }\n userVariantProps = variantProps;\n } else {\n // Fast path: walk variantKeys directly against propsRecord. Use\n // Object.hasOwn so a polluted Object.prototype can't introduce variant\n // values the user didn't pass.\n for (let i = 0; i < variantKeysLength; i++) {\n const key = variantKeys[i];\n if (!Object.hasOwn(propsRecord, key)) continue;\n const v = propsRecord[key];\n if (v === undefined) continue;\n resolved[key] = v;\n }\n userVariantProps = propsRecord;\n }\n\n if (hasAnyDisabled) {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(resolved, filtered);\n resolved = filtered;\n }\n\n // Build allClasses directly. computedBaseClass already has all extend\n // bases joined with config.class — `compute` only adds variant classes\n // on top.\n const allClasses: ClsxClassValue[] = [computedBaseClass];\n const style: StyleValue = {};\n compute(resolved, userVariantProps, null, null, allClasses, style);\n\n // Apply user-provided class / className.\n if (\"class\" in propsRecord) {\n allClasses.push(propsRecord.class as ClsxClassValue);\n }\n if (\"className\" in propsRecord) {\n allClasses.push(propsRecord.className as ClsxClassValue);\n }\n\n // Apply user-provided style.\n const psv = propsRecord.style;\n if (psv != null) {\n if (typeof psv === \"string\") {\n if (psv.length > 0) {\n Object.assign(style, htmlStyleToStyleValue(psv));\n }\n } else if (typeof psv === \"object\") {\n // Don't allocate when empty.\n let hasAnyKey = false;\n for (const _ in psv) {\n hasAnyKey = true;\n break;\n }\n if (hasAnyKey) {\n Object.assign(style, normalizeStyle(psv));\n }\n }\n }\n\n return {\n className: transformClass(clsx(allClasses)),\n style,\n };\n };\n\n const getVariants = (variants?: VariantValues<MergedVariants>) => {\n const variantProps = variants ?? EMPTY_DEFAULTS;\n let resolvedVariants = resolveVariantsHot(variantProps);\n if (resolveRefine) {\n resolvedVariants = resolveRefine(resolvedVariants, variantProps, false);\n }\n return resolvedVariants as VariantValues<MergedVariants>;\n };\n\n // Compute base class (without variants) — includes extended base classes.\n // Plain `clsx` (no `transformClass`): `meta.baseClass` flows back into\n // parent extends as `clsx` input and then through the single\n // `transformClass(clsx(allClasses))` at render time, so applying it here\n // would compound (double for own-render, triple+ for extend chains) and\n // misbehave for non-idempotent transforms.\n const computedBaseClass = hasExtend\n ? clsx(\n ...(extBaseClassesArr as ClsxClassValue[]),\n config.class as ClsxClassValue,\n )\n : clsx(config.class as ClsxClassValue);\n\n // Shared closures across the default and modal components.\n const classFn = (props: ComponentProps<MergedVariants> = {}) => {\n return computeResult(props).className;\n };\n const meta: ComponentMeta = {\n baseClass: computedBaseClass,\n staticDefaults,\n resolveDefaults: resolveDefaultsFn,\n compute,\n resolveRefine,\n transformClass,\n functionVariantKeys,\n };\n\n const initComponent = <\n R extends ComponentResult,\n T extends ModalComponent<MergedVariants, R>,\n >(\n c: T,\n propKeys: string[],\n style: T[\"style\"],\n ): T => {\n c.class = classFn;\n c.style = style;\n c.getVariants = getVariants;\n c.variantKeys = variantKeys;\n c.propKeys = propKeys;\n setComponentMeta(c, meta);\n return c;\n };\n\n // Default component\n const defaultComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style };\n }) as CVComponent<V, E>;\n initComponent(defaultComponent, inputPropsKeys, (props = {}) => {\n return computeResult(props).style;\n });\n\n // JSX component\n const jsxComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { className, style: styleValueToJSXStyle(style) };\n }) as ModalComponent<MergedVariants, JSXProps>;\n initComponent(\n jsxComponent,\n [\"className\", \"style\", ...variantKeys],\n (props = {}) => styleValueToJSXStyle(computeResult(props).style),\n );\n\n // HTML component\n const htmlComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLProps>;\n initComponent(\n htmlComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLStyle(computeResult(props).style),\n );\n\n // HTMLObj component\n const htmlObjComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLObjStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLObjProps>;\n initComponent(\n htmlObjComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLObjStyle(computeResult(props).style),\n );\n\n defaultComponent.jsx = jsxComponent;\n defaultComponent.html = htmlComponent;\n defaultComponent.htmlObj = htmlObjComponent;\n\n return defaultComponent;\n };\n\n return { cv, cx };\n}\n\nfunction noop() {}\n\nexport const { cv, cx } = create();\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/refine-warning.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["export interface RefineRunState {\n remaining: number;\n warned?: boolean;\n}\n\nexport interface CreationFrame {\n stack?: string;\n}\n\nexport interface VariantChange {\n from: unknown;\n to: unknown;\n}\n\n// Once a refine loop is within this many iterations of the cap, start tracking\n// the latest value transition for every variant key that changes between\n// iterations so the warning can report every key that contributed to the\n// oscillation, not just the keys that happened to flip on the final step.\n// Convergent loops (the common case) exit well before this threshold and pay no\n// per-iteration tracking cost.\nexport const REFINE_UNSTABLE_TRACKING_WINDOW = 10;\n\n// Captures the call site of the function passed in `skipFn` so refine-limit\n// warnings can point developers at the originating `cv()` call. Returns\n// `undefined` in production so bundlers that replace `process.env.NODE_ENV` at\n// build time can drop the entire warning machinery. The underlying `.stack`\n// string is formatted lazily on first access in every major engine (V8,\n// SpiderMonkey, JavaScriptCore), so holding the captured frame for the\n// lifetime of the component is cheap when no warning fires.\nexport function captureCreationFrame(\n skipFn: Function,\n): CreationFrame | undefined {\n if (process.env.NODE_ENV === \"production\") return undefined;\n if (typeof Error.captureStackTrace === \"function\") {\n const holder: CreationFrame = {};\n Error.captureStackTrace(holder, skipFn);\n return holder;\n }\n // Engines without `Error.captureStackTrace` (SpiderMonkey, JavaScriptCore)\n // can't strip internal frames, but their `Error.stack` getter is still\n // lazy, so returning the Error instance defers the format cost. The\n // resulting trace includes 1–2 extra frames at the top from this helper and\n // `cv` itself.\n return new Error();\n}\n\nexport function formatCreationStack(frame: CreationFrame): string | undefined {\n let stack = frame.stack;\n if (!stack) return undefined;\n // V8 prefixes the stack with a leading \"Error\" / \"Error: message\" line that\n // isn't meaningful for a captured location — drop it.\n const newlineIdx = stack.indexOf(\"\\n\");\n if (newlineIdx > 0) {\n const firstLine = stack.slice(0, newlineIdx);\n if (firstLine === \"Error\" || firstLine.startsWith(\"Error:\")) {\n stack = stack.slice(newlineIdx + 1);\n }\n }\n const frames = stack.split(\"\\n\");\n for (let i = 0; i < frames.length; i++) {\n const line = frames[i]?.trim();\n if (!line) continue;\n if (isInternalCreationFrame(line)) continue;\n if (line.includes(\"/node_modules/\")) continue;\n if (line.includes(\"\\\\node_modules\\\\\")) continue;\n if (line.includes(\"node:internal\")) continue;\n return ` ${line}`;\n }\n return undefined;\n}\n\nfunction isInternalCreationFrame(line: string): boolean {\n if (line.includes(\"captureCreationFrame\")) return true;\n if (line.startsWith(\"at cv \")) return true;\n if (line.startsWith(\"at cv(\")) return true;\n if (line.startsWith(\"cv@\")) return true;\n return false;\n}\n\nfunction formatVariantValue(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return \"NaN\";\n return String(value);\n }\n if (typeof value === \"bigint\") return `${value}n`;\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n if (typeof value === \"boolean\") return String(value);\n if (typeof value === \"symbol\") return String(value);\n if (typeof value === \"function\") return \"[function]\";\n return \"[object]\";\n}\n\nfunction setVariantChange(\n into: Map<string, VariantChange>,\n key: string,\n from: unknown,\n to: unknown,\n): void {\n into.set(key, { from, to });\n}\n\nexport function accumulateUnstableVariantChanges(\n into: Map<string, VariantChange>,\n prev: Record<string, unknown>,\n next: Record<string, unknown>,\n): void {\n for (const key in next) {\n if (!Object.hasOwn(next, key)) continue;\n if (!Object.is(prev[key], next[key])) {\n setVariantChange(into, key, prev[key], next[key]);\n }\n }\n for (const key in prev) {\n if (!Object.hasOwn(prev, key)) continue;\n if (Object.hasOwn(next, key)) continue;\n setVariantChange(into, key, prev[key], undefined);\n }\n}\n\nfunction formatVariantChanges(changes: Map<string, VariantChange>): string {\n return Array.from(changes)\n .map(([key, { from, to }]) => {\n return `${key}: ${formatVariantValue(from)} -> ${formatVariantValue(to)}`;\n })\n .join(\", \");\n}\n\ninterface WarnRefineLimitParams {\n runState: RefineRunState;\n creationFrame: CreationFrame | undefined;\n unstableChanges: Map<string, VariantChange> | null;\n}\n\nexport function warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n}: WarnRefineLimitParams): void {\n // Bundlers are expected to replace this branch with a production literal,\n // allowing warning-only code below to be removed from consumer bundles.\n if (process.env.NODE_ENV === \"production\") return;\n if (runState.warned) return;\n runState.warned = true;\n let message =\n \"Clava: Maximum refine iterations exceeded. This can happen when a \" +\n \"computed default variant or refine callback changes one of the \" +\n \"variants on every run.\";\n if (unstableChanges && unstableChanges.size > 0) {\n message += `\\nVariant(s) that did not stabilize: ${Array.from(unstableChanges.keys()).join(\", \")}.`;\n message += `\\nLatest variant changes before warning: ${formatVariantChanges(unstableChanges)}.`;\n }\n if (creationFrame) {\n const creationStack = formatCreationStack(creationFrame);\n if (creationStack) {\n message += `\\nComponent created at:\\n${creationStack}`;\n }\n }\n console.warn(message);\n}\n","import type * as CSS from \"csstype\";\nimport type {\n HTMLCSSProperties,\n JSXCSSProperties,\n StyleValue,\n} from \"./types.ts\";\n\nexport const MODES = [\"jsx\", \"html\", \"htmlObj\"] as const;\nexport type Mode = (typeof MODES)[number];\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nfunction isAsciiLetter(code: number) {\n if (code >= 65 && code <= 90) return true;\n return code >= 97 && code <= 122;\n}\n\n/**\n * Returns the appropriate class property name based on the mode.\n * @example\n * getClassPropertyName(\"jsx\") // \"className\"\n * getClassPropertyName(\"html\") // \"class\"\n */\nexport function getClassPropertyName(mode: Mode) {\n return mode === \"jsx\" ? \"className\" : \"class\";\n}\n\n/**\n * Converts a hyphenated CSS property name to camelCase.\n * @example\n * hyphenToCamel(\"background-color\") // \"backgroundColor\"\n * hyphenToCamel(\"--custom-var\") // \"--custom-var\" (CSS variables are preserved)\n */\nexport function hyphenToCamel(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n // Fast path: no hyphen -> return as-is\n let hyphenIndex = str.indexOf(\"-\");\n if (hyphenIndex === -1) {\n return str;\n }\n\n let result = \"\";\n let lastIndex = 0;\n while (hyphenIndex !== -1) {\n result += str.slice(lastIndex, hyphenIndex);\n\n const nextIndex = hyphenIndex + 1;\n if (nextIndex >= str.length) {\n result += \"-\";\n lastIndex = nextIndex;\n break;\n }\n\n const code = str.charCodeAt(nextIndex);\n if (isAsciiLetter(code)) {\n result += str[nextIndex].toUpperCase();\n lastIndex = nextIndex + 1;\n } else {\n result += \"-\";\n lastIndex = nextIndex;\n }\n\n hyphenIndex = str.indexOf(\"-\", lastIndex);\n }\n\n return result + str.slice(lastIndex);\n}\n\n/**\n * Converts a camelCase CSS property name to hyphenated form.\n * @example\n * camelToHyphen(\"backgroundColor\") // \"background-color\"\n * camelToHyphen(\"--customVar\") // \"--customVar\" (CSS variables are preserved)\n */\nexport function camelToHyphen(str: string) {\n // CSS custom properties (variables) should not be converted\n if (str.length >= 2 && str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n return str;\n }\n\n let result = \"\";\n let lastIndex = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n if (code < 65 || code > 90) continue;\n result += str.slice(lastIndex, i);\n result += \"-\";\n result += str[i].toLowerCase();\n lastIndex = i + 1;\n }\n\n if (lastIndex === 0) {\n return str;\n }\n return result + str.slice(lastIndex);\n}\n\n/**\n * Parses a length value, adding \"px\" if it's a number.\n * @example\n * parseLengthValue(16); // \"16px\"\n * parseLengthValue(\"2em\"); // \"2em\"\n */\nexport function parseLengthValue(value: string | number) {\n if (typeof value === \"string\") {\n return value;\n }\n return `${value}px`;\n}\n\n/**\n * Parses a CSS style string into a StyleValue object.\n * @example\n * htmlStyleToStyleValue(\"background-color: red; font-size: 16px;\");\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlStyleToStyleValue(styleString: string) {\n if (!styleString) return {};\n\n const result: StyleValue = {};\n const len = styleString.length;\n let i = 0;\n while (i < len) {\n // Skip leading whitespace and stray semicolons\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13 && c !== 59) break;\n i++;\n }\n if (i >= len) break;\n // Read property name until ':' or ';'\n const propStart = i;\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c === 58 || c === 59) break;\n i++;\n }\n if (i >= len || styleString.charCodeAt(i) === 59) {\n // No colon found - skip this declaration\n if (i < len) {\n // Skip ';'.\n i++;\n }\n continue;\n }\n let propEnd = i;\n // Trim trailing whitespace from property name\n while (propEnd > propStart) {\n const c = styleString.charCodeAt(propEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n propEnd--;\n }\n if (propEnd === propStart) {\n // Empty property - skip\n while (i < len && styleString.charCodeAt(i) !== 59) {\n i++;\n }\n if (i < len) {\n i++;\n }\n continue;\n }\n const property = styleString.slice(propStart, propEnd);\n // Skip ':'.\n i++;\n // Skip whitespace before value\n while (i < len) {\n const c = styleString.charCodeAt(i);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n i++;\n }\n const valStart = i;\n while (i < len && styleString.charCodeAt(i) !== 59) {\n i++;\n }\n let valEnd = i;\n while (valEnd > valStart) {\n const c = styleString.charCodeAt(valEnd - 1);\n if (c !== 32 && c !== 9 && c !== 10 && c !== 13) break;\n valEnd--;\n }\n if (i < len) {\n // Skip ';'.\n i++;\n }\n if (valEnd === valStart) continue;\n const value = styleString.slice(valStart, valEnd);\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(property)] = value;\n }\n\n return result;\n}\n\n/**\n * Converts a hyphenated style object to a camelCase StyleValue object.\n * @example\n * htmlObjStyleToStyleValue({ \"background-color\": \"red\", \"font-size\": \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function htmlObjStyleToStyleValue(style: HTMLCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[hyphenToCamel(key)] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a camelCase style object to a StyleValue object.\n * @example\n * jsxStyleToStyleValue({ backgroundColor: \"red\", fontSize: 16 });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function jsxStyleToStyleValue(style: JSXCSSProperties) {\n const result: StyleValue = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n // CSS property names and values are dynamic - cast required for index access\n (result as Record<string, string>)[key] = parseLengthValue(\n value as string | number,\n );\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a CSS style string.\n * @example\n * styleValueToHTMLStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // \"background-color: red; font-size: 16px;\"\n */\nexport function styleValueToHTMLStyle(style: StyleValue): string {\n let result = \"\";\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n if (result) {\n result += \"; \";\n }\n result += camelToHyphen(key);\n result += \": \";\n result += value as string | number;\n }\n if (!result) return \"\";\n return `${result};`;\n}\n\n/**\n * Converts a StyleValue object to a hyphenated style object.\n * @example\n * styleValueToHTMLObjStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { \"background-color\": \"red\", \"font-size\": \"16px\" }\n */\nexport function styleValueToHTMLObjStyle(style: StyleValue) {\n const result: CSS.PropertiesHyphen = {};\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n const value = (style as Record<string, unknown>)[key];\n if (value == null) continue;\n (result as Record<string, unknown>)[camelToHyphen(key)] = value;\n }\n return result;\n}\n\n/**\n * Converts a StyleValue object to a camelCase style object.\n * @example\n * styleValueToJSXStyle({ backgroundColor: \"red\", fontSize: \"16px\" });\n * // { backgroundColor: \"red\", fontSize: \"16px\" }\n */\nexport function styleValueToJSXStyle(style: StyleValue) {\n return style as JSXCSSProperties;\n}\n\n/**\n * Type guard to check if a style object has hyphenated keys.\n * @example\n * isHTMLObjStyle({ \"background-color\": \"red\" }); // true\n * isHTMLObjStyle({ backgroundColor: \"red\" }); // false\n */\nexport function isHTMLObjStyle(\n style: CSS.Properties<any> | CSS.PropertiesHyphen<any>,\n): style is CSS.PropertiesHyphen {\n for (const key in style) {\n if (!hasOwn.call(style, key)) continue;\n // Quick exclusion of CSS custom properties (--foo)\n if (\n key.length >= 2 &&\n key.charCodeAt(0) === 45 &&\n key.charCodeAt(1) === 45\n ) {\n continue;\n }\n if (key.indexOf(\"-\") !== -1) return true;\n }\n return false;\n}\n","import clsx, { type ClassValue as ClsxClassValue } from \"clsx\";\nimport {\n REFINE_UNSTABLE_TRACKING_WINDOW,\n type RefineRunState,\n type VariantChange,\n accumulateUnstableVariantChanges,\n captureCreationFrame,\n warnRefineLimit,\n} from \"./refine-warning.ts\";\nimport type {\n AnyComponent,\n CVComponent,\n ClassValue,\n ComponentProps,\n ComponentResult,\n DefaultVariants,\n ExtendableVariants,\n HTMLObjProps,\n HTMLProps,\n JSXProps,\n MergeVariants,\n ModalComponent,\n Refine,\n SplitPropsFunction,\n StyleClassProps,\n StyleClassValue,\n StyleValue,\n VariantValues,\n Variants,\n} from \"./types.ts\";\nimport {\n htmlObjStyleToStyleValue,\n htmlStyleToStyleValue,\n isHTMLObjStyle,\n jsxStyleToStyleValue,\n styleValueToHTMLObjStyle,\n styleValueToHTMLStyle,\n styleValueToJSXStyle,\n} from \"./utils.ts\";\n\n// Internal compute path: pushes the variant classes contributed by this\n// component (and its extends chain) into `classesOut` and merges any styles\n// into `styleOut`. Base class is handled by callers via ComponentMeta.baseClass\n// to avoid string-parsing round trips. Both outputs are mutated in place to\n// avoid intermediate allocations.\ntype ComputeFn = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n skipKeys: Set<string> | null,\n skipValues: Record<string, Set<string>> | null,\n classesOut: ClsxClassValue[],\n styleOut: StyleValue,\n runState?: RefineRunState,\n protectedVariants?: Record<string, unknown> | null,\n pendingProtectedVariants?: Record<string, unknown> | null,\n protectedVariantKeys?: Set<string> | null,\n defaultResolved?: Record<string, unknown>,\n renderOnly?: boolean,\n) => Record<string, unknown>;\n\ntype ResolveRefineFn = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n filterOwnVariants?: boolean,\n runState?: RefineRunState,\n protectedVariants?: Record<string, unknown> | null,\n pendingProtectedVariants?: Record<string, unknown> | null,\n protectedVariantKeys?: Set<string> | null,\n defaultResolved?: Record<string, unknown>,\n) => Record<string, unknown>;\n\ntype ComputedDefaultVariantFn = (\n defaultValue: unknown,\n variants: Readonly<Record<string, unknown>>,\n) => unknown;\n\n// Internal metadata stored on components but hidden from public types.\ninterface ComponentMeta {\n baseClass: string;\n staticDefaults: Record<string, unknown>;\n // Returns variant classes + style for this component, used by extending\n // components. Top-level rendering also routes through this.\n compute: ComputeFn;\n resolveRefine: ResolveRefineFn | null;\n // Reference identity is used to detect mixed-factory `extend`. When a\n // component is extended by a parent from a different `create()` call, the\n // parent applies this transform to the extend's contribution before joining,\n // preserving each factory's transform boundary.\n transformClass: (className: string) => string;\n // Variant keys whose effective definition in this component's chain is a\n // function. An extending component that supplies a non-function variant for\n // the same key uses this to tell us to skip that key (matching the\n // type-level \"function variant is replaced by anything in the child\" rule).\n // Empty when no key in this chain is a function variant.\n functionVariantKeys: Set<string>;\n // Variant keys with computed defaults anywhere in this component's chain.\n // Child components use this to preserve inherited computed defaults through\n // `defaultValue` without preserving their own prior computed result.\n computedDefaultKeys: Set<string>;\n}\n\nconst META_KEY = \"__meta\";\n\ninterface ComponentWithMeta {\n [META_KEY]?: ComponentMeta;\n}\n\nconst EMPTY_DEFAULTS: Record<string, unknown> = Object.freeze({}) as Record<\n string,\n unknown\n>;\n\nconst MAX_REFINE_RUNS = 50;\n\nfunction areVariantsEqual(\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): boolean {\n for (const key in a) {\n if (!Object.hasOwn(a, key)) continue;\n if (!Object.is(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!Object.hasOwn(b, key)) continue;\n if (!Object.hasOwn(a, key)) return false;\n }\n return true;\n}\n\nfunction getExtUserVariantProps(\n userVariantProps: Record<string, unknown>,\n protectedVariants: Record<string, unknown> | null,\n changedVariants: Record<string, unknown> | null,\n): Record<string, unknown> {\n const extUserVariantProps: Record<string, unknown> = {};\n Object.assign(extUserVariantProps, userVariantProps);\n if (protectedVariants) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n if (changedVariants) {\n Object.assign(extUserVariantProps, changedVariants);\n }\n return extUserVariantProps;\n}\n\nfunction mergeVariants(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n skipKeys?: Set<string> | null,\n): boolean {\n let changed = false;\n if (!skipKeys || skipKeys.size === 0) {\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue;\n const value = source[key];\n if (!Object.is(target[key], value)) {\n changed = true;\n }\n target[key] = value;\n }\n return changed;\n }\n for (const key in source) {\n if (!Object.hasOwn(source, key)) continue;\n if (skipKeys.has(key)) continue;\n const value = source[key];\n if (!Object.is(target[key], value)) {\n changed = true;\n }\n target[key] = value;\n }\n return changed;\n}\n\nfunction mergeProtectedIntoBase(\n baseResolved: Record<string, unknown>,\n protectedVariants: Record<string, unknown> | null | undefined,\n): Record<string, unknown> {\n if (!protectedVariants) {\n return baseResolved;\n }\n let hasProtected = false;\n for (const key in protectedVariants) {\n if (!Object.hasOwn(protectedVariants, key)) continue;\n hasProtected = true;\n break;\n }\n if (!hasProtected) {\n return baseResolved;\n }\n const resolved: Record<string, unknown> = {};\n Object.assign(resolved, baseResolved);\n for (const key in protectedVariants) {\n if (!Object.hasOwn(protectedVariants, key)) continue;\n resolved[key] = protectedVariants[key];\n }\n return resolved;\n}\n\n// Components carry internal metadata on a non-public property so user-facing\n// component types stay clean.\nfunction getComponentMeta(component: AnyComponent): ComponentMeta | undefined {\n return (component as AnyComponent & ComponentWithMeta)[META_KEY];\n}\n\nfunction setComponentMeta(component: AnyComponent, meta: ComponentMeta): void {\n (component as AnyComponent & ComponentWithMeta)[META_KEY] = meta;\n}\n\nexport type {\n ClassValue,\n StyleValue,\n StyleClassProps,\n StyleClassValue,\n JSXProps,\n HTMLProps,\n HTMLObjProps,\n CVComponent,\n};\n\n/**\n * Extracts the variant props inferred for a Clava component. Use it to add a\n * component's variant props to framework component props.\n *\n * @example\n * ```ts\n * import { type VariantProps, cv } from \"clava\";\n * import type { ComponentProps } from \"react\";\n *\n * const button = cv({\n * variants: {\n * size: { sm: \"button-sm\", lg: \"button-lg\" },\n * disabled: { true: \"button-disabled\", false: \"\" },\n * },\n * });\n *\n * interface ButtonProps\n * extends ComponentProps<\"button\">,\n * VariantProps<typeof button> {}\n *\n * const props: ButtonProps = {\n * size: \"lg\",\n * disabled: true,\n * };\n * ```\n */\nexport type VariantProps<T extends Pick<AnyComponent, \"getVariants\">> =\n ReturnType<T[\"getVariants\"]>;\n\n// Variant props expose booleans, but variant object keys are always strings.\ntype VariantKey<T> = T extends boolean ? \"true\" | \"false\" : Extract<T, string>;\n\n/**\n * Constrains a variant map to the same value keys as a variant on another\n * component. Boolean variants are represented with `\"true\"` and `\"false\"`\n * object keys.\n *\n * @example\n * ```ts\n * import { type Variant, cv } from \"clava\";\n *\n * const button = cv({\n * variants: {\n * size: { sm: \"button-sm\", lg: \"button-lg\" },\n * },\n * });\n *\n * const icon = cv({\n * extend: [button],\n * variants: {\n * size: {\n * sm: \"icon-sm\",\n * lg: \"icon-lg\",\n * } satisfies Variant<typeof button, \"size\">,\n * },\n * });\n * ```\n */\nexport type Variant<\n T extends Pick<AnyComponent, \"getVariants\">,\n K extends keyof VariantProps<T>,\n> = Record<\n VariantKey<NonNullable<VariantProps<T>[K]>>,\n ClassValue | StyleClassValue\n>;\n\n/**\n * The configuration object accepted by `cv()`. It defines base class/style\n * output, variants, default variants, component extensions, and refinement\n * logic.\n *\n * @example\n * ```ts\n * import { type CVConfig, cv } from \"clava\";\n *\n * const config: CVConfig<{\n * tone: { info: string; danger: string };\n * }> = {\n * variants: {\n * tone: {\n * info: \"alert-info\",\n * danger: \"alert-danger\",\n * },\n * },\n * defaultVariants: {\n * tone: \"info\",\n * },\n * };\n *\n * const alert = cv(config);\n * ```\n */\nexport interface CVConfig<\n V extends Variants = {},\n E extends AnyComponent[] = [],\n> {\n extend?: E;\n class?: ClassValue;\n style?: StyleValue;\n variants?: ExtendableVariants<V, E>;\n defaultVariants?: DefaultVariants<MergeVariants<V, E>>;\n refine?: Refine<MergeVariants<V, E>>;\n}\n\ninterface CreateParams {\n transformClass?: (className: string) => string;\n}\n\ninterface VariantConfigLike {\n extend?: AnyComponent[];\n variants?: Record<string, unknown>;\n}\n\nfunction isRecordObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\") return false;\n if (value == null) return false;\n if (Array.isArray(value)) return false;\n return true;\n}\n\n/**\n * Checks if a value is a style-class object (`{ style, class? }`).\n */\nfunction isStyleClassValue(value: unknown): value is StyleClassValue {\n if (!isRecordObject(value)) return false;\n return \"style\" in value || \"class\" in value;\n}\n\n/**\n * Converts any style input (string, JSX object, or HTML object) to a normalized\n * StyleValue.\n */\nfunction normalizeStyle(style: unknown): StyleValue {\n if (typeof style === \"string\") {\n return htmlStyleToStyleValue(style);\n }\n if (typeof style === \"object\" && style != null) {\n if (isHTMLObjStyle(style as Record<string, unknown>)) {\n return htmlObjStyleToStyleValue(style as Record<string, string | number>);\n }\n return jsxStyleToStyleValue(style as Record<string, string | number>);\n }\n return {};\n}\n\n/**\n * Pre-extracts the class and (normalized) style from a variant value once at\n * component creation time. Returns `null` if the value contributes nothing.\n */\ninterface PrebuiltValue {\n class: ClassValue;\n style: StyleValue | null;\n}\n\nfunction extractStyleClassPrebuilt(value: StyleClassValue): PrebuiltValue {\n const styleNorm = normalizeStyle(value.style);\n return {\n class: value.class ?? null,\n style: styleNorm && Object.keys(styleNorm).length > 0 ? styleNorm : null,\n };\n}\n\nfunction extractClassAndStylePrebuilt(value: unknown): PrebuiltValue {\n if (isStyleClassValue(value)) {\n return extractStyleClassPrebuilt(value);\n }\n if (isRecordObject(value)) {\n return { class: null, style: null };\n }\n return { class: value as ClassValue, style: null };\n}\n\n/**\n * Gets all variant keys from a component's config, including extended\n * components.\n */\nfunction collectVariantKeys(config: VariantConfigLike): string[] {\n const keys = new Set<string>();\n\n if (config.extend) {\n for (const ext of config.extend) {\n const extKeys = ext.variantKeys as readonly string[];\n for (let i = 0; i < extKeys.length; i++) {\n keys.add(extKeys[i]);\n }\n }\n }\n\n if (config.variants) {\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n const variant = config.variants[key];\n if (variant === null) {\n keys.delete(key);\n continue;\n }\n keys.add(key);\n }\n }\n\n return Array.from(keys);\n}\n\nfunction getVariantValueKey(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n}\n\nfunction collectDisabledVariantKeys(config: VariantConfigLike): Set<string> {\n const keys = new Set<string>();\n if (!config.variants) {\n return keys;\n }\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n if (config.variants[key] === null) {\n keys.add(key);\n }\n }\n return keys;\n}\n\nfunction collectDisabledVariantValues(\n config: VariantConfigLike,\n): Record<string, Set<string>> {\n const values: Record<string, Set<string>> = {};\n if (!config.variants) {\n return values;\n }\n for (const key in config.variants) {\n if (!Object.hasOwn(config.variants, key)) continue;\n const variant = config.variants[key];\n if (!isRecordObject(variant)) continue;\n let bucket: Set<string> | undefined;\n for (const variantValue in variant) {\n if (!Object.hasOwn(variant, variantValue)) continue;\n if (variant[variantValue] !== null) continue;\n if (!bucket) {\n bucket = new Set<string>();\n values[key] = bucket;\n }\n bucket.add(variantValue);\n }\n }\n return values;\n}\n\ninterface NormalizedSource {\n propKeys: string[];\n variantKeys: string[];\n isComponent: boolean;\n}\n\nconst EMPTY_SOURCE: NormalizedSource = {\n propKeys: [],\n variantKeys: [],\n isComponent: false,\n};\n\nfunction normalizeKeySource(source: unknown): NormalizedSource {\n if (Array.isArray(source)) {\n return {\n propKeys: source as string[],\n variantKeys: source as string[],\n isComponent: false,\n };\n }\n\n if (!source) {\n return EMPTY_SOURCE;\n }\n if (typeof source !== \"object\" && typeof source !== \"function\") {\n return EMPTY_SOURCE;\n }\n const typed = source as Record<string, unknown>;\n if (typeof typed.getVariants !== \"function\") {\n return EMPTY_SOURCE;\n }\n if (!Array.isArray(typed.propKeys)) {\n return EMPTY_SOURCE;\n }\n if (!Array.isArray(typed.variantKeys)) {\n return EMPTY_SOURCE;\n }\n\n return {\n propKeys: typed.propKeys as string[],\n variantKeys: typed.variantKeys as string[],\n isComponent: true,\n };\n}\n\n/**\n * Splits props into multiple groups based on key sources. Only the first\n * component claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays always receive their listed keys but don't\n * claim styling props.\n */\nfunction splitPropsImpl(\n selfKeys: string[],\n selfIsComponent: boolean,\n props: Record<string, unknown>,\n sources: unknown[],\n): Record<string, unknown>[] {\n const sourcesLength = sources.length;\n const results: Record<string, unknown>[] = [];\n let stylingClaimed = selfIsComponent;\n\n const selfResult: Record<string, unknown> = {};\n const selfKeysLength = selfKeys.length;\n for (let i = 0; i < selfKeysLength; i++) {\n const key = selfKeys[i];\n if (key !== undefined && key in props) {\n selfResult[key] = props[key];\n }\n }\n results.push(selfResult);\n\n // Track effective key arrays for the rest computation — for typical inputs\n // a linear scan beats building a Set up-front.\n const effectiveKeyArrays: string[][] = [selfKeys];\n\n for (let s = 0; s < sourcesLength; s++) {\n const source = normalizeKeySource(sources[s]);\n const sourceResult: Record<string, unknown> = {};\n\n const effectiveKeys =\n source.isComponent && stylingClaimed\n ? source.variantKeys\n : source.propKeys;\n\n const effectiveKeysLength = effectiveKeys.length;\n for (let i = 0; i < effectiveKeysLength; i++) {\n const key = effectiveKeys[i];\n if (key !== undefined && key in props) {\n sourceResult[key] = props[key];\n }\n }\n results.push(sourceResult);\n effectiveKeyArrays.push(effectiveKeys);\n\n if (source.isComponent && !stylingClaimed) {\n stylingClaimed = true;\n }\n }\n\n const rest: Record<string, unknown> = {};\n const propKeys = Object.keys(props);\n const propKeysLength = propKeys.length;\n const groupCount = sourcesLength + 1;\n outer: for (let i = 0; i < propKeysLength; i++) {\n const key = propKeys[i];\n if (key === undefined) continue;\n for (let g = 0; g < groupCount; g++) {\n const arr = effectiveKeyArrays[g];\n if (arr === undefined) continue;\n const arrLength = arr.length;\n for (let j = 0; j < arrLength; j++) {\n if (arr[j] === key) continue outer;\n }\n }\n rest[key] = props[key];\n }\n results.push(rest);\n\n return results;\n}\n\n/**\n * Splits props into multiple groups based on key sources. Each source gets its\n * own result object containing all its matching keys. The first component\n * source claims styling props (class/className/style). Subsequent components\n * only receive variant props. Arrays receive their listed keys but don't claim\n * styling props. The last element is always the \"rest\" containing keys not\n * claimed by any source.\n */\nexport const splitProps: SplitPropsFunction = ((\n props: Record<string, unknown>,\n source1: unknown,\n ...sources: unknown[]\n) => {\n const normalizedSource1 = normalizeKeySource(source1);\n return splitPropsImpl(\n normalizedSource1.propKeys,\n normalizedSource1.isComponent,\n props,\n sources,\n );\n}) as SplitPropsFunction;\n\n/**\n * A pre-built variant. Maps variant value keys (or the literal \"true\"/\"false\"\n * strings for boolean variants) to PrebuiltValue. Includes a \"shorthand\"\n * fallback when the variant is a single class value (treated as `{ true: ... }`).\n */\ninterface PrebuiltVariant {\n // For object variants: map of value -> prebuilt class/style\n values: Record<string, PrebuiltValue> | null;\n // For shorthand variants: the value to use when selectedValue is true\n shorthand: PrebuiltValue | null;\n // Set of value keys that are disabled (value === null in the original variant\n // definition)\n disabledValues: Set<string> | null;\n}\n\nfunction buildPrebuiltVariant(variantDef: unknown): PrebuiltVariant {\n if (!isRecordObject(variantDef)) {\n return {\n values: null,\n shorthand: extractClassAndStylePrebuilt(variantDef),\n disabledValues: null,\n };\n }\n const values: Record<string, PrebuiltValue> = {};\n let disabledValues: Set<string> | null = null;\n for (const key in variantDef) {\n if (!Object.hasOwn(variantDef, key)) continue;\n const value = variantDef[key];\n if (value === null) {\n if (!disabledValues) {\n disabledValues = new Set<string>();\n }\n disabledValues.add(key);\n continue;\n }\n values[key] = extractClassAndStylePrebuilt(value);\n }\n return {\n values,\n shorthand: null,\n disabledValues,\n };\n}\n\n/**\n * Creates the cv and cx functions.\n */\nexport function create({\n transformClass = (className) => className,\n}: CreateParams = {}) {\n const cx = (...classes: ClsxClassValue[]) => transformClass(clsx(...classes));\n\n const cv = <V extends Variants = {}, const E extends AnyComponent[] = []>(\n config: CVConfig<V, E> = {},\n ): CVComponent<V, E> => {\n type MergedVariants = MergeVariants<V, E>;\n\n // ----- Pre-computed at creation time -----\n const variantKeys = collectVariantKeys(config);\n const variantKeysLength = variantKeys.length;\n const disabledVariantKeys = collectDisabledVariantKeys(config);\n const disabledVariantValues = collectDisabledVariantValues(config);\n const hasDisabledVariantKeys = disabledVariantKeys.size > 0;\n const disabledVariantValueKeys = Object.keys(disabledVariantValues);\n const hasDisabledVariantValues = disabledVariantValueKeys.length > 0;\n const hasAnyDisabled = hasDisabledVariantKeys || hasDisabledVariantValues;\n\n const inputPropsKeys = [\"class\", \"className\", \"style\", ...variantKeys];\n\n const extend = config.extend;\n const hasExtend = !!extend && extend.length > 0;\n const variants = config.variants;\n const refine = config.refine;\n const baseStyle = config.style;\n const hasBaseStyle = !!baseStyle;\n\n // Split `variants` entries into static entries (object/shorthand) and\n // function-variant entries. Static entries are pre-built into\n // PrebuiltVariant for fast iteration. Function-variant entries override\n // any same-key inherited variant (see `staticExtSkipKeys`).\n const variantEntryNames: string[] = [];\n const variantEntryDefs: PrebuiltVariant[] = [];\n const functionVariantNames: string[] = [];\n const functionVariantFns: Array<(value: unknown) => unknown> = [];\n if (variants) {\n for (const name in variants) {\n if (!Object.hasOwn(variants, name)) continue;\n const variant = (variants as Record<string, unknown>)[name];\n if (variant === null) continue;\n if (typeof variant === \"function\") {\n functionVariantNames.push(name);\n functionVariantFns.push(variant as (value: unknown) => unknown);\n continue;\n }\n variantEntryNames.push(name);\n variantEntryDefs.push(buildPrebuiltVariant(variant));\n }\n }\n const variantEntryCount = variantEntryNames.length;\n const functionVariantCount = functionVariantNames.length;\n\n const computedDefaultNames: string[] = [];\n const computedDefaultFns: ComputedDefaultVariantFn[] = [];\n const defaultVariants = config.defaultVariants as\n | Record<string, unknown>\n | undefined;\n\n // Pre-compute static defaults. Includes:\n // - extended components' static defaults\n // - implicit boolean defaults (variants with a `false` key default to false)\n // - this config's literal defaultVariants (overriding the above)\n //\n // Function entries in defaultVariants are computed defaults. They run in\n // the refine loop so they can react to setVariants updates.\n // Then filtered through disabled-variants.\n const staticDefaults: Record<string, unknown> = {};\n if (extend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (meta) {\n Object.assign(staticDefaults, meta.staticDefaults);\n }\n }\n }\n if (variants) {\n for (const name in variants) {\n if (!Object.hasOwn(variants, name)) continue;\n const variantDef = (variants as Record<string, unknown>)[name];\n if (!isRecordObject(variantDef)) continue;\n if (\n Object.hasOwn(variantDef, \"false\") &&\n staticDefaults[name] === undefined\n ) {\n staticDefaults[name] = false;\n }\n }\n }\n if (defaultVariants) {\n for (const name in defaultVariants) {\n if (!Object.hasOwn(defaultVariants, name)) continue;\n const value = defaultVariants[name];\n if (typeof value === \"function\") {\n computedDefaultNames.push(name);\n computedDefaultFns.push(value as ComputedDefaultVariantFn);\n continue;\n }\n if (value === undefined) {\n Reflect.deleteProperty(staticDefaults, name);\n continue;\n }\n staticDefaults[name] = value;\n }\n }\n const computedDefaultCount = computedDefaultNames.length;\n if (hasAnyDisabled) {\n // Filter disabled variants in-place\n for (const key in staticDefaults) {\n if (!Object.hasOwn(staticDefaults, key)) continue;\n if (disabledVariantKeys.has(key)) {\n delete staticDefaults[key];\n continue;\n }\n if (hasDisabledVariantValues) {\n const value = staticDefaults[key];\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n delete staticDefaults[key];\n }\n }\n }\n }\n\n // Pre-build extended component info, so we don't have to call\n // `getComponentMeta` per render. Extends from a different `create()`\n // factory (different `transformClass` identity) need their contribution\n // transformed by their own `transformClass` before being joined into our\n // class string — otherwise our outer `transformClass(clsx(allClasses))`\n // would be the only transform that runs, and the extend's factory would\n // be silently bypassed for any base coming from `extend: [otherFactoryCv]`.\n const extMetas: ComponentMeta[] = [];\n const extBaseClassesArr: string[] = [];\n const extIsolated: boolean[] = [];\n let hasIsolatedExt = false;\n if (hasExtend) {\n for (const ext of extend) {\n const meta = getComponentMeta(ext);\n if (!meta) continue;\n extMetas.push(meta);\n const isolated = meta.transformClass !== transformClass;\n extIsolated.push(isolated);\n if (isolated) {\n hasIsolatedExt = true;\n // Apply the extend's own transformClass to its base class so it\n // survives our outer transform (which still applies on top, matching\n // the original public-component round-trip behavior).\n extBaseClassesArr.push(meta.transformClass(meta.baseClass));\n } else {\n extBaseClassesArr.push(meta.baseClass);\n }\n }\n }\n const extCount = extMetas.length;\n\n const inheritedComputedDefaultKeys = new Set<string>();\n for (let i = 0; i < extCount; i++) {\n const keys = extMetas[i].computedDefaultKeys;\n for (const key of keys) {\n inheritedComputedDefaultKeys.add(key);\n }\n }\n\n // Filter to only extends with computed default or refine work in their\n // chain. Those are the components that can change resolved variants across\n // fixed-point iterations.\n const extMetasWithRefine: ComponentMeta[] = [];\n for (let i = 0; i < extCount; i++) {\n const meta = extMetas[i];\n if (meta.resolveRefine) {\n extMetasWithRefine.push(meta);\n }\n }\n const extMetasWithRefineCount = extMetasWithRefine.length;\n const shouldCollectChangedVariants = extMetasWithRefineCount > 0;\n\n // Call-site frame captured at the `cv()` call site so refine-limit warnings\n // can point developers at the component definition. Skipped entirely for\n // components that can never enter the refine loop, and stripped in\n // production via the NODE_ENV guard inside `captureCreationFrame`. The\n // frame is captured at creation time but the underlying `.stack` string is\n // formatted lazily on first access, so component creation stays cheap\n // unless the warning actually fires.\n const canTriggerRefineWarning =\n !!refine || computedDefaultCount > 0 || extMetasWithRefineCount > 0;\n const creationFrame = canTriggerRefineWarning\n ? captureCreationFrame(cv)\n : undefined;\n\n // Function variant keys inherited from extends, filtered through this\n // component's own variants: a static (object/shorthand) variant in this\n // component replaces an inherited function variant for the same key.\n // The closure is exposed on `ComponentMeta` so any further extending\n // component can detect \"ancestor's effective variant for K is a function\"\n // and skip it when overriding K with a non-function.\n const functionVariantKeys = new Set<string>();\n for (let i = 0; i < extCount; i++) {\n const fnKeys = extMetas[i].functionVariantKeys;\n for (const k of fnKeys) {\n if (disabledVariantKeys.has(k)) continue;\n functionVariantKeys.add(k);\n }\n }\n for (let i = 0; i < functionVariantCount; i++) {\n functionVariantKeys.add(functionVariantNames[i]);\n }\n for (let i = 0; i < variantEntryCount; i++) {\n // A static variant in this component replaces an inherited function\n // variant for the same key; from this component onward, the key is no\n // longer a function variant.\n functionVariantKeys.delete(variantEntryNames[i]);\n }\n\n const computedDefaultKeys = new Set(inheritedComputedDefaultKeys);\n for (let i = 0; i < computedDefaultCount; i++) {\n computedDefaultKeys.add(computedDefaultNames[i]);\n }\n\n // Static-variant keys in this component that override an inherited\n // function variant. Type-level merge says child fully replaces, so the\n // ancestor's function must not run with the child's (object-typed) value.\n let staticVariantsOverridingExtFn: string[] | null = null;\n if (variantEntryCount > 0 && extCount > 0) {\n for (let i = 0; i < variantEntryCount; i++) {\n const name = variantEntryNames[i];\n for (let j = 0; j < extCount; j++) {\n if (extMetas[j].functionVariantKeys.has(name)) {\n if (!staticVariantsOverridingExtFn) {\n staticVariantsOverridingExtFn = [];\n }\n staticVariantsOverridingExtFn.push(name);\n break;\n }\n }\n }\n }\n\n // Pre-compute static skip key/value sets to pass to extends. These never\n // change across calls — when caller passes no skip sets, we reuse the same\n // object and avoid Set allocation.\n let staticExtSkipKeys: Set<string> | null = null;\n if (\n hasDisabledVariantKeys ||\n functionVariantCount > 0 ||\n staticVariantsOverridingExtFn !== null\n ) {\n staticExtSkipKeys = new Set<string>();\n for (const k of disabledVariantKeys) {\n staticExtSkipKeys.add(k);\n }\n for (let i = 0; i < functionVariantCount; i++) {\n staticExtSkipKeys.add(functionVariantNames[i]);\n }\n if (staticVariantsOverridingExtFn) {\n for (const k of staticVariantsOverridingExtFn) {\n staticExtSkipKeys.add(k);\n }\n }\n }\n // Skip values are passed directly to extends. We can reuse the same object\n // when no caller-provided values need merging.\n const staticExtSkipValues: Record<string, Set<string>> | null =\n hasDisabledVariantValues ? disabledVariantValues : null;\n\n // Branches on `hasAnyDisabled` so the no-disabled path skips the per-key\n // filter checks entirely — most components have no disabled variants and\n // hit only the plain copy.\n function filterDisabledInto(\n input: Record<string, unknown>,\n out: Record<string, unknown>,\n ): void {\n if (!hasAnyDisabled) {\n for (const key in input) {\n if (Object.hasOwn(input, key)) {\n out[key] = input[key];\n }\n }\n return;\n }\n for (const key in input) {\n if (!Object.hasOwn(input, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = input[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n continue;\n }\n }\n out[key] = value;\n }\n }\n\n const isOwnDisabledValue = (key: string, value: unknown): boolean => {\n if (disabledVariantKeys.has(key)) {\n return true;\n }\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n return true;\n }\n }\n return false;\n };\n\n const filterOwnDisabledVariants = (\n input: Record<string, unknown>,\n fallback: Record<string, unknown>,\n ): Record<string, unknown> => {\n if (!hasAnyDisabled) {\n return input;\n }\n\n let hasOwnDisabledValue = false;\n for (const key in input) {\n if (!Object.hasOwn(input, key)) continue;\n const value = input[key];\n if (isOwnDisabledValue(key, value)) {\n hasOwnDisabledValue = true;\n break;\n }\n }\n if (!hasOwnDisabledValue) {\n return input;\n }\n\n const filtered: Record<string, unknown> = {};\n for (const key in input) {\n if (!Object.hasOwn(input, key)) continue;\n const value = input[key];\n if (!isOwnDisabledValue(key, value)) {\n filtered[key] = value;\n continue;\n }\n const fallbackValue = fallback[key];\n if (\n fallbackValue !== undefined &&\n !isOwnDisabledValue(key, fallbackValue)\n ) {\n filtered[key] = fallbackValue;\n }\n }\n\n return filtered;\n };\n\n // Hot path: resolve variants by merging static defaults + extends'\n // static defaults + user-provided props.\n function resolveVariantsHot(\n propsVariants: Record<string, unknown>,\n ): Record<string, unknown> {\n // Start with static defaults\n const defaults: Record<string, unknown> = {};\n Object.assign(defaults, staticDefaults);\n\n // Apply propsVariants on top (filter undefined). propsVariants is\n // contractually variant-only here — callers building from a full props\n // object filter to variant keys before calling.\n for (const k in propsVariants) {\n if (!Object.hasOwn(propsVariants, k)) continue;\n const v = propsVariants[k];\n if (v === undefined) continue;\n defaults[k] = v;\n }\n\n if (!hasAnyDisabled) {\n return defaults;\n }\n\n // Filter disabled\n const result: Record<string, unknown> = {};\n filterDisabledInto(defaults, result);\n return result;\n }\n\n const runComputedDefaults = (\n resolved: Record<string, unknown>,\n defaultResolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n filterOwnVariants: boolean,\n protectedVariantKeys: Set<string> | null | undefined,\n ): {\n workingResolved: Record<string, unknown>;\n changedVariants: Record<string, unknown> | null;\n } => {\n if (computedDefaultCount === 0) {\n return { workingResolved: resolved, changedVariants: null };\n }\n\n let ownVariants = filterOwnVariants ? null : resolved;\n const getOwnVariants = (): Record<string, unknown> => {\n if (ownVariants) {\n return ownVariants;\n }\n const filteredVariants: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const key = variantKeys[i];\n if (Object.hasOwn(resolved, key)) {\n filteredVariants[key] = resolved[key];\n }\n }\n ownVariants = filteredVariants;\n return filteredVariants;\n };\n\n let updatedVariants: Record<string, unknown> | null = null;\n let changedVariants: Record<string, unknown> | null = null;\n const ensureUpdated = (): Record<string, unknown> => {\n if (updatedVariants) {\n return updatedVariants;\n }\n const updated: Record<string, unknown> = {};\n Object.assign(updated, resolved);\n updatedVariants = updated;\n return updated;\n };\n\n for (let i = 0; i < computedDefaultCount; i++) {\n const key = computedDefaultNames[i];\n if (Object.hasOwn(userVariantProps, key)) {\n if (userVariantProps[key] !== undefined) continue;\n }\n if (protectedVariantKeys?.has(key)) continue;\n\n const variantSnapshot = getOwnVariants();\n const defaultValue = inheritedComputedDefaultKeys.has(key)\n ? variantSnapshot[key]\n : defaultResolved[key];\n const value = computedDefaultFns[i](defaultValue, variantSnapshot);\n if (hasAnyDisabled) {\n if (disabledVariantKeys.has(key)) continue;\n const valueKey = getVariantValueKey(value);\n if (valueKey != null && disabledVariantValues[key]?.has(valueKey)) {\n continue;\n }\n }\n\n if (value === undefined) {\n if (!Object.hasOwn(variantSnapshot, key)) continue;\n if (shouldCollectChangedVariants) {\n changedVariants ??= {};\n changedVariants[key] = value;\n }\n Reflect.deleteProperty(ensureUpdated(), key);\n continue;\n }\n if (Object.is(variantSnapshot[key], value)) continue;\n if (shouldCollectChangedVariants) {\n changedVariants ??= {};\n changedVariants[key] = value;\n }\n ensureUpdated()[key] = value;\n }\n\n return {\n workingResolved: updatedVariants ?? resolved,\n changedVariants,\n };\n };\n\n const runRefineContext = (\n resolved: Record<string, unknown>,\n userVariantProps: Record<string, unknown>,\n filterOwnVariants: boolean,\n collectOutput: boolean,\n applyVariantUpdates: boolean,\n protectedVariants: Record<string, unknown> | null | undefined,\n pendingProtectedVariants: Record<string, unknown> | null | undefined,\n protectedVariantKeys: Set<string> | null | undefined,\n ): {\n workingResolved: Record<string, unknown>;\n changedVariants: Record<string, unknown> | null;\n classes: ClassValue[] | null;\n style: StyleValue | null;\n } => {\n let workingResolved = resolved;\n let cClasses: ClassValue[] | null = null;\n let cStyle: StyleValue | null = null;\n let changedVariants: Record<string, unknown> | null = null;\n\n if (refine) {\n let ownVariants = resolved;\n if (filterOwnVariants) {\n // When this component is being extended, `resolved` is the parent's\n // workingResolved (a superset of our variant keys). Filter to our own\n // keys for `ctx.variants` so the user's `refine` callback sees the\n // shape declared by `VariantValues<V>` and not foreign parent keys.\n const filteredVariants: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const k = variantKeys[i];\n if (Object.hasOwn(resolved, k)) {\n filteredVariants[k] = resolved[k];\n }\n }\n ownVariants = filteredVariants;\n }\n // Lazy-init updatedVariants — many refine callbacks only inspect\n // `variants`, so the copy is unnecessary in the common case.\n let updatedVariants: Record<string, unknown> | null = null;\n const localCClasses: ClassValue[] | null = collectOutput ? [] : null;\n let localCStyle: StyleValue | null = null;\n const ensureUpdated = (): Record<string, unknown> => {\n if (updatedVariants) {\n return updatedVariants;\n }\n const u: Record<string, unknown> = {};\n Object.assign(u, ownVariants);\n updatedVariants = u;\n return u;\n };\n const setChangedVariant = (\n key: string,\n value: unknown,\n protect = false,\n ) => {\n if (shouldCollectChangedVariants) {\n if (!changedVariants) {\n changedVariants = {};\n }\n changedVariants[key] = value;\n }\n if (protect && protectedVariants) {\n protectedVariants[key] = value;\n protectedVariantKeys?.add(key);\n }\n };\n const getCurrentVariantValue = (key: string) => {\n return updatedVariants ? updatedVariants[key] : ownVariants[key];\n };\n const ctx = {\n variants: ownVariants as VariantValues<Record<string, unknown>>,\n setVariants: (\n newVariants: VariantValues<Record<string, unknown>>,\n ) => {\n if (!applyVariantUpdates) {\n return;\n }\n if (!hasAnyDisabled) {\n for (const key in newVariants) {\n if (!Object.hasOwn(newVariants, key)) continue;\n const value = (newVariants as Record<string, unknown>)[key];\n setChangedVariant(key, value, true);\n if (Object.is(getCurrentVariantValue(key), value)) continue;\n ensureUpdated()[key] = value;\n }\n return;\n }\n for (const key in newVariants) {\n if (!Object.hasOwn(newVariants, key)) continue;\n if (disabledVariantKeys.has(key)) continue;\n const value = (newVariants as Record<string, unknown>)[key];\n if (hasDisabledVariantValues) {\n const valueKey = getVariantValueKey(value);\n if (\n valueKey != null &&\n disabledVariantValues[key]?.has(valueKey)\n ) {\n continue;\n }\n }\n setChangedVariant(key, value, true);\n if (Object.is(getCurrentVariantValue(key), value)) continue;\n ensureUpdated()[key] = value;\n }\n },\n addClass: (className: ClassValue) => {\n localCClasses?.push(className);\n },\n addStyle: (newStyle: StyleValue) => {\n if (!collectOutput) return;\n if (!localCStyle) {\n localCStyle = {};\n }\n Object.assign(localCStyle, newStyle);\n },\n };\n const result = refine(ctx);\n if (collectOutput && result != null) {\n const r = extractClassAndStylePrebuilt(result);\n if (r.class != null) {\n localCClasses?.push(r.class);\n }\n if (r.style) {\n if (!localCStyle) {\n localCStyle = {};\n }\n Object.assign(localCStyle, r.style);\n }\n }\n cClasses = localCClasses;\n cStyle = localCStyle;\n if (updatedVariants) {\n const nextResolved: Record<string, unknown> = {};\n Object.assign(nextResolved, workingResolved);\n if (hasAnyDisabled) {\n const filteredUpdated: Record<string, unknown> = {};\n filterDisabledInto(updatedVariants, filteredUpdated);\n Object.assign(nextResolved, filteredUpdated);\n } else {\n Object.assign(nextResolved, updatedVariants);\n }\n workingResolved = nextResolved;\n }\n }\n\n return {\n workingResolved,\n changedVariants,\n classes: cClasses,\n style: cStyle,\n };\n };\n\n // Core compute path. Called both for top-level rendering (via\n // `computeResult`) and recursively when this component is used as an\n // `extend` target by another component. Pushes variant classes (excluding\n // base class) into `classesOut` and merges styles into `styleOut`.\n const computeOnce: ComputeFn = (\n resolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved = resolved,\n renderOnly = false,\n ) => {\n let workingResolved = resolved;\n let cClasses: ClassValue[] | null = null;\n let cStyle: StyleValue | null = null;\n let changedVariants: Record<string, unknown> | null = null;\n\n // Run extends' contributions first (their full classes + styles) so our\n // own base style and variants apply on top, matching the original\n // ext1 → ext2 → … → current ordering.\n if (hasExtend) {\n // Build skip sets to pass to extends. Reuse precomputed values when no\n // caller-provided sets need merging.\n let extSkipKeys: Set<string> | null;\n if (skipKeys === null) {\n extSkipKeys = staticExtSkipKeys;\n } else if (staticExtSkipKeys === null) {\n extSkipKeys = skipKeys;\n } else {\n extSkipKeys = new Set(skipKeys);\n for (const k of staticExtSkipKeys) {\n extSkipKeys.add(k);\n }\n }\n\n let extSkipVals: Record<string, Set<string>> | null;\n if (skipValues === null) {\n extSkipVals = staticExtSkipValues;\n } else if (staticExtSkipValues === null) {\n extSkipVals = skipValues;\n } else {\n extSkipVals = {};\n for (const k in skipValues) {\n extSkipVals[k] = skipValues[k];\n }\n for (const k in staticExtSkipValues) {\n const existing = extSkipVals[k];\n if (existing) {\n const merged = new Set<string>(existing);\n for (const v of staticExtSkipValues[k]) {\n merged.add(v);\n }\n extSkipVals[k] = merged;\n } else {\n extSkipVals[k] = staticExtSkipValues[k];\n }\n }\n }\n\n const extUserVariantProps =\n extMetasWithRefineCount > 0\n ? getExtUserVariantProps(\n userVariantProps,\n protectedVariants ?? null,\n changedVariants,\n )\n : userVariantProps;\n for (let i = 0; i < extCount; i++) {\n if (hasIsolatedExt && extIsolated[i]) {\n // Isolated extend (different factory): gather its variant classes\n // into a scratch array, then push the joined string after applying\n // its own transformClass. Our outer transform applies on top.\n const extClasses: ClsxClassValue[] = [];\n workingResolved = extMetas[i].compute(\n workingResolved,\n extUserVariantProps,\n extSkipKeys,\n extSkipVals,\n extClasses,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved,\n renderOnly,\n );\n if (extClasses.length > 0) {\n const joined = clsx(extClasses);\n if (joined.length > 0) {\n classesOut.push(\n extMetas[i].transformClass(joined) as ClsxClassValue,\n );\n }\n }\n } else {\n workingResolved = extMetas[i].compute(\n workingResolved,\n extUserVariantProps,\n extSkipKeys,\n extSkipVals,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved,\n renderOnly,\n );\n }\n workingResolved = filterOwnDisabledVariants(\n workingResolved,\n defaultResolved,\n );\n // Only sync protected variants when a child refine resolver can\n // observe them. Otherwise extUserVariantProps may alias caller props.\n if (protectedVariants && extMetasWithRefineCount > 0) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n }\n }\n\n // Run own computed defaults after extended components so defaults resolve\n // from base to child. They still run before this component's `refine`.\n if (!renderOnly && computedDefaultCount > 0) {\n const computedResult = runComputedDefaults(\n workingResolved,\n defaultResolved,\n userVariantProps,\n true,\n protectedVariantKeys,\n );\n workingResolved = computedResult.workingResolved;\n changedVariants = computedResult.changedVariants;\n }\n\n // Run own `refine` (if any). May modify resolved variants and emit\n // classes and styles that are applied after this component's variants.\n if (refine) {\n const refineResult = runRefineContext(\n workingResolved,\n userVariantProps,\n true,\n true,\n !renderOnly,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n workingResolved = refineResult.workingResolved;\n cClasses = refineResult.classes;\n cStyle = refineResult.style;\n if (refineResult.changedVariants) {\n changedVariants ??= {};\n Object.assign(changedVariants, refineResult.changedVariants);\n }\n }\n\n // Apply own base style (after extends' styles, matching original order).\n if (hasBaseStyle) {\n Object.assign(styleOut, baseStyle);\n }\n\n // Apply own variants. Skip keys/values come from caller (e.g., parent\n // wants its own function variant to override this variant).\n // `variantEntryNames` already excludes disabled keys (those with `null`\n // value in config) and function variants, so we don't re-check\n // `disabledVariantKeys` here.\n const ownSkipKeys = skipKeys;\n const ownSkipValues = skipValues;\n for (let i = 0; i < variantEntryCount; i++) {\n const variantName = variantEntryNames[i];\n if (ownSkipKeys && ownSkipKeys.has(variantName)) continue;\n const selectedValue = workingResolved[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n const variant = variantEntryDefs[i];\n if (\n variant.disabledValues &&\n selectedKey != null &&\n variant.disabledValues.has(selectedKey)\n ) {\n continue;\n }\n if (\n ownSkipValues &&\n selectedKey != null &&\n ownSkipValues[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n\n if (variant.values) {\n if (selectedKey == null) continue;\n const v = variant.values[selectedKey];\n if (!v) continue;\n if (v.class != null) {\n classesOut.push(v.class as ClsxClassValue);\n }\n if (v.style) {\n Object.assign(styleOut, v.style);\n }\n } else if (variant.shorthand && selectedValue === true) {\n const v = variant.shorthand;\n if (v.class != null) {\n classesOut.push(v.class as ClsxClassValue);\n }\n if (v.style) {\n Object.assign(styleOut, v.style);\n }\n }\n }\n\n // Apply function variants — entries in `variants` whose value is a\n // function. They run after static variants and override any same-key\n // inherited variant via `staticExtSkipKeys`.\n for (let i = 0; i < functionVariantCount; i++) {\n const variantName = functionVariantNames[i];\n if (ownSkipKeys && ownSkipKeys.has(variantName)) continue;\n const selectedValue = workingResolved[variantName];\n if (selectedValue === undefined) continue;\n const selectedKey = getVariantValueKey(selectedValue);\n if (\n ownSkipValues &&\n selectedKey != null &&\n ownSkipValues[variantName]?.has(selectedKey)\n ) {\n continue;\n }\n const fn = functionVariantFns[i];\n const computedResult = fn(selectedValue);\n if (computedResult == null) continue;\n const r = extractClassAndStylePrebuilt(computedResult);\n if (r.class != null) {\n classesOut.push(r.class as ClsxClassValue);\n }\n if (r.style) {\n Object.assign(styleOut, r.style);\n }\n }\n\n // Apply `refine` results — must come after own variants (static and\n // function).\n if (cClasses) {\n for (let i = 0; i < cClasses.length; i++) {\n classesOut.push(cClasses[i] as ClsxClassValue);\n }\n }\n if (cStyle) {\n Object.assign(styleOut, cStyle);\n }\n\n return workingResolved;\n };\n\n const compute: ComputeFn =\n !refine && computedDefaultCount === 0 && extMetasWithRefineCount === 0\n ? computeOnce\n : (\n resolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n incomingDefaultResolved = resolved,\n renderOnly = false,\n ) => {\n if (renderOnly) {\n return computeOnce(\n resolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n incomingDefaultResolved,\n true,\n );\n }\n runState ??= { remaining: MAX_REFINE_RUNS };\n protectedVariants ??= {};\n protectedVariantKeys ??= new Set<string>();\n let workingResolved = resolved;\n // Latest variant changes from non-converging iterations inside the\n // tracking window. Lazy-init keeps convergent loops allocation-free.\n let unstableChanges: Map<string, VariantChange> | null = null;\n let lastClasses: ClsxClassValue[] = [];\n let lastStyle: StyleValue = {};\n let isFirstRun = true;\n\n while (runState.remaining > 0) {\n runState.remaining -= 1;\n let useDirectOutput = isFirstRun;\n if (useDirectOutput) {\n for (const key in styleOut) {\n if (Object.hasOwn(styleOut, key)) {\n useDirectOutput = false;\n break;\n }\n }\n }\n const classCount = classesOut.length;\n const nextPendingProtectedVariants: Record<string, unknown> = {};\n const nextClasses: ClsxClassValue[] = useDirectOutput\n ? classesOut\n : [];\n const nextStyle: StyleValue = useDirectOutput ? styleOut : {};\n const defaultResolved = mergeProtectedIntoBase(\n incomingDefaultResolved,\n protectedVariants,\n );\n const nextResolved = computeOnce(\n workingResolved,\n userVariantProps,\n skipKeys,\n skipValues,\n nextClasses,\n nextStyle,\n runState,\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved,\n );\n\n let protectedChanged: boolean;\n if (pendingProtectedVariants) {\n protectedChanged = mergeVariants(\n pendingProtectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n } else {\n protectedChanged = mergeVariants(\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n }\n\n if (\n !protectedChanged &&\n (nextResolved === workingResolved ||\n areVariantsEqual(workingResolved, nextResolved))\n ) {\n if (nextResolved !== workingResolved) {\n if (useDirectOutput) {\n classesOut.length = classCount;\n for (const key in styleOut) {\n if (Object.hasOwn(styleOut, key)) {\n Reflect.deleteProperty(styleOut, key);\n }\n }\n }\n computeOnce(\n nextResolved,\n userVariantProps,\n skipKeys,\n skipValues,\n classesOut,\n styleOut,\n runState,\n protectedVariants,\n null,\n protectedVariantKeys,\n defaultResolved,\n true,\n );\n } else if (!useDirectOutput) {\n for (let i = 0; i < nextClasses.length; i++) {\n classesOut.push(nextClasses[i]);\n }\n Object.assign(styleOut, nextStyle);\n }\n return nextResolved;\n }\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n runState.remaining < REFINE_UNSTABLE_TRACKING_WINDOW\n ) {\n if (!unstableChanges) {\n unstableChanges = new Map<string, VariantChange>();\n }\n accumulateUnstableVariantChanges(\n unstableChanges,\n workingResolved,\n nextResolved,\n );\n }\n\n if (useDirectOutput && runState.remaining === 0) {\n // Keep the direct output from the last allowed run. Rolling\n // back here would drop it before the fallback copy below.\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n return nextResolved;\n }\n\n if (useDirectOutput) {\n classesOut.length = classCount;\n for (const key in styleOut) {\n if (Object.hasOwn(styleOut, key)) {\n Reflect.deleteProperty(styleOut, key);\n }\n }\n } else {\n lastClasses = nextClasses;\n lastStyle = nextStyle;\n }\n\n workingResolved = nextResolved;\n isFirstRun = false;\n }\n\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n\n for (let i = 0; i < lastClasses.length; i++) {\n classesOut.push(lastClasses[i]);\n }\n Object.assign(styleOut, lastStyle);\n return workingResolved;\n };\n\n const resolveRefineOnce: ResolveRefineFn = (\n resolved,\n userVariantProps,\n filterOwnVariants = true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved = resolved,\n ) => {\n let workingResolved = resolved;\n let changedVariants: Record<string, unknown> | null = null;\n\n if (extMetasWithRefineCount > 0) {\n const extUserVariantProps = getExtUserVariantProps(\n userVariantProps,\n protectedVariants ?? null,\n changedVariants,\n );\n for (let i = 0; i < extMetasWithRefineCount; i++) {\n const meta = extMetasWithRefine[i];\n const resolveRefine = meta.resolveRefine;\n if (!resolveRefine) continue;\n workingResolved = resolveRefine(\n workingResolved,\n extUserVariantProps,\n true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved,\n );\n workingResolved = filterOwnDisabledVariants(\n workingResolved,\n defaultResolved,\n );\n if (protectedVariants) {\n Object.assign(extUserVariantProps, protectedVariants);\n }\n }\n }\n\n if (computedDefaultCount > 0) {\n const computedResult = runComputedDefaults(\n workingResolved,\n defaultResolved,\n userVariantProps,\n filterOwnVariants,\n protectedVariantKeys,\n );\n workingResolved = computedResult.workingResolved;\n changedVariants = computedResult.changedVariants;\n }\n if (refine) {\n const refineResult = runRefineContext(\n workingResolved,\n userVariantProps,\n filterOwnVariants,\n false,\n true,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n );\n workingResolved = refineResult.workingResolved;\n if (refineResult.changedVariants) {\n changedVariants ??= {};\n Object.assign(changedVariants, refineResult.changedVariants);\n }\n }\n\n return workingResolved;\n };\n\n const resolveRefine: ResolveRefineFn | null =\n refine || computedDefaultCount > 0 || extMetasWithRefineCount > 0\n ? (\n resolved,\n userVariantProps,\n filterOwnVariants = true,\n runState,\n protectedVariants,\n pendingProtectedVariants,\n protectedVariantKeys,\n incomingDefaultResolved = resolved,\n ) => {\n runState ??= { remaining: MAX_REFINE_RUNS };\n protectedVariants ??= {};\n protectedVariantKeys ??= new Set<string>();\n let workingResolved = resolved;\n // Latest variant changes from non-converging iterations inside the\n // tracking window. See the compute loop above for the shared\n // rationale.\n let unstableChanges: Map<string, VariantChange> | null = null;\n let reachedLimit = true;\n\n while (runState.remaining > 0) {\n runState.remaining -= 1;\n const nextPendingProtectedVariants: Record<string, unknown> = {};\n const defaultResolved = mergeProtectedIntoBase(\n incomingDefaultResolved,\n protectedVariants,\n );\n const nextResolved = resolveRefineOnce(\n workingResolved,\n userVariantProps,\n filterOwnVariants,\n runState,\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n defaultResolved,\n );\n let protectedChanged: boolean;\n if (pendingProtectedVariants) {\n protectedChanged = mergeVariants(\n pendingProtectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n } else {\n protectedChanged = mergeVariants(\n protectedVariants,\n nextPendingProtectedVariants,\n protectedVariantKeys,\n );\n }\n\n if (\n !protectedChanged &&\n (nextResolved === workingResolved ||\n areVariantsEqual(workingResolved, nextResolved))\n ) {\n workingResolved = nextResolved;\n reachedLimit = false;\n break;\n }\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n runState.remaining < REFINE_UNSTABLE_TRACKING_WINDOW\n ) {\n if (!unstableChanges) {\n unstableChanges = new Map<string, VariantChange>();\n }\n accumulateUnstableVariantChanges(\n unstableChanges,\n workingResolved,\n nextResolved,\n );\n }\n workingResolved = nextResolved;\n }\n\n if (reachedLimit) {\n warnRefineLimit({\n runState,\n creationFrame,\n unstableChanges,\n });\n }\n\n return workingResolved;\n }\n : null;\n\n // Top-level: resolves variants from user props, calls compute, then\n // assembles className and style with user-provided class/style overrides.\n const computeResult = (\n props: ComponentProps<MergedVariants> = EMPTY_DEFAULTS as ComponentProps<MergedVariants>,\n ): { className: string; style: StyleValue } => {\n const propsRecord = props as Record<string, unknown>;\n\n let resolved: Record<string, unknown> = {};\n Object.assign(resolved, staticDefaults);\n\n let userVariantProps: Record<string, unknown>;\n if (refine || computedDefaultCount > 0 || extMetasWithRefineCount > 0) {\n const variantProps: Record<string, unknown> = {};\n for (let i = 0; i < variantKeysLength; i++) {\n const key = variantKeys[i];\n if (Object.hasOwn(propsRecord, key)) {\n variantProps[key] = propsRecord[key];\n }\n }\n for (const k in variantProps) {\n if (!Object.hasOwn(variantProps, k)) continue;\n const v = variantProps[k];\n if (v === undefined) continue;\n resolved[k] = v;\n }\n userVariantProps = variantProps;\n } else {\n // Fast path: walk variantKeys directly against propsRecord. Use\n // Object.hasOwn so a polluted Object.prototype can't introduce variant\n // values the user didn't pass.\n for (let i = 0; i < variantKeysLength; i++) {\n const key = variantKeys[i];\n if (!Object.hasOwn(propsRecord, key)) continue;\n const v = propsRecord[key];\n if (v === undefined) continue;\n resolved[key] = v;\n }\n userVariantProps = propsRecord;\n }\n\n if (hasAnyDisabled) {\n const filtered: Record<string, unknown> = {};\n filterDisabledInto(resolved, filtered);\n resolved = filtered;\n }\n\n // Build allClasses directly. computedBaseClass already has all extend\n // bases joined with config.class — `compute` only adds variant classes\n // on top.\n const allClasses: ClsxClassValue[] = [computedBaseClass];\n const style: StyleValue = {};\n compute(resolved, userVariantProps, null, null, allClasses, style);\n\n // Apply user-provided class / className.\n if (\"class\" in propsRecord) {\n allClasses.push(propsRecord.class as ClsxClassValue);\n }\n if (\"className\" in propsRecord) {\n allClasses.push(propsRecord.className as ClsxClassValue);\n }\n\n // Apply user-provided style.\n const psv = propsRecord.style;\n if (psv != null) {\n if (typeof psv === \"string\") {\n if (psv.length > 0) {\n Object.assign(style, htmlStyleToStyleValue(psv));\n }\n } else if (typeof psv === \"object\") {\n // Don't allocate when empty.\n let hasAnyKey = false;\n for (const _ in psv) {\n hasAnyKey = true;\n break;\n }\n if (hasAnyKey) {\n Object.assign(style, normalizeStyle(psv));\n }\n }\n }\n\n return {\n className: transformClass(clsx(allClasses)),\n style,\n };\n };\n\n const getVariants = (variants?: VariantValues<MergedVariants>) => {\n const variantProps = variants ?? EMPTY_DEFAULTS;\n let resolvedVariants = resolveVariantsHot(variantProps);\n if (resolveRefine) {\n resolvedVariants = resolveRefine(resolvedVariants, variantProps, false);\n }\n return resolvedVariants as VariantValues<MergedVariants>;\n };\n\n // Compute base class (without variants) — includes extended base classes.\n // Plain `clsx` (no `transformClass`): `meta.baseClass` flows back into\n // parent extends as `clsx` input and then through the single\n // `transformClass(clsx(allClasses))` at render time, so applying it here\n // would compound (double for own-render, triple+ for extend chains) and\n // misbehave for non-idempotent transforms.\n const computedBaseClass = hasExtend\n ? clsx(\n ...(extBaseClassesArr as ClsxClassValue[]),\n config.class as ClsxClassValue,\n )\n : clsx(config.class as ClsxClassValue);\n\n // Shared closures across the default and modal components.\n const classFn = (props: ComponentProps<MergedVariants> = {}) => {\n return computeResult(props).className;\n };\n const meta: ComponentMeta = {\n baseClass: computedBaseClass,\n staticDefaults,\n compute,\n resolveRefine,\n transformClass,\n functionVariantKeys,\n computedDefaultKeys,\n };\n\n const initComponent = <\n R extends ComponentResult,\n T extends ModalComponent<MergedVariants, R>,\n >(\n c: T,\n propKeys: string[],\n style: T[\"style\"],\n ): T => {\n c.class = classFn;\n c.style = style;\n c.getVariants = getVariants;\n c.variantKeys = variantKeys;\n c.propKeys = propKeys;\n setComponentMeta(c, meta);\n return c;\n };\n\n // Default component\n const defaultComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style };\n }) as CVComponent<V, E>;\n initComponent(defaultComponent, inputPropsKeys, (props = {}) => {\n return computeResult(props).style;\n });\n\n // JSX component\n const jsxComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { className, style: styleValueToJSXStyle(style) };\n }) as ModalComponent<MergedVariants, JSXProps>;\n initComponent(\n jsxComponent,\n [\"className\", \"style\", ...variantKeys],\n (props = {}) => styleValueToJSXStyle(computeResult(props).style),\n );\n\n // HTML component\n const htmlComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLProps>;\n initComponent(\n htmlComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLStyle(computeResult(props).style),\n );\n\n // HTMLObj component\n const htmlObjComponent = ((props: ComponentProps<MergedVariants> = {}) => {\n const { className, style } = computeResult(props);\n return { class: className, style: styleValueToHTMLObjStyle(style) };\n }) as ModalComponent<MergedVariants, HTMLObjProps>;\n initComponent(\n htmlObjComponent,\n [\"class\", \"style\", ...variantKeys],\n (props = {}) => styleValueToHTMLObjStyle(computeResult(props).style),\n );\n\n defaultComponent.jsx = jsxComponent;\n defaultComponent.html = htmlComponent;\n defaultComponent.htmlObj = htmlObjComponent;\n\n return defaultComponent;\n };\n\n return { cv, cx };\n}\n\nexport const { cv, cx } = create();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clava",
3
- "version": "0.4.2",
3
+ "version": "0.6.0",
4
4
  "description": "Clava library",
5
5
  "keywords": [
6
6
  "class variance",
@@ -40,7 +40,7 @@
40
40
  "csstype": "^3.0.0"
41
41
  },
42
42
  "devDependencies": {
43
- "vite": "8.0.12",
43
+ "vite": "8.0.14",
44
44
  "test-utils": "0.0.0"
45
45
  },
46
46
  "scripts": {