import type { ClassValue, TVVariants, TVCompoundVariants, TVDefaultVariants, TVReturnType, defaultConfig } from 'tailwind-variants'; type TVSlots = Record | undefined; /** * Widen the slot functions of a `tailwind-variants` return type so `class` / * `className` also accept the `(defaults) => classes` replacer — `:b24ui` and the * `class` prop flow straight into them. The concrete slot keys (and the * extend-readable `slots` / `variants` / … properties) are preserved, so * components keep type-checking under `noUncheckedIndexedAccess`. */ type WideSlotFn = (slotProps?: Record) => string; type Widen = R extends (props?: infer P) => infer Slots ? { (props?: P): Slots extends string ? string : { [K in keyof Slots]: WideSlotFn; }; } & Omit : R; /** * Mirrors `tailwind-variants`' `TV` call signature (so config inference is * unchanged) but returns the {@link Widen}-ed result. Component prop types are * derived from `typeof theme` via `ComponentConfig`, not from this type, so the * widening only affects the internal `b24ui.slot(...)` calls. */ type WideTV = { , CV extends TVCompoundVariants, DV extends TVDefaultVariants, B extends ClassValue = undefined, S extends TVSlots = undefined, E extends TVReturnType = TVReturnType, EV extends TVVariants = E['variants'], ES extends TVSlots = E['slots'] extends TVSlots ? E['slots'] : undefined>(options: { extend?: E; base?: B; slots?: S; variants?: V; compoundVariants?: CV; compoundSlots?: any; defaultVariants?: DV; }, config?: typeof defaultConfig): Widen>; }; /** * Wraps `tailwind-variants`' `tv` so slot classes can be **replaced** (not just * merged) through a function form — `(defaults) => classes` — in `:b24ui`, the * `class` prop and `app.config.b24ui`. The wrapper is transparent for every other * usage: it preserves the `TVReturnType` (so `extend: theme` keeps working * via property reads) and only intercepts the slot functions on invocation. */ export declare const tv: WideTV; export {};