import { type ClassValue } from "clsx";
import { type ComponentProps, type ElementType } from "react";
/**
 * Combines multiple class names into a single string
 *
 * @example cn('px-2 py-1 bg-red hover:bg-dark-red', 'p-3 bg-[#B91C1C]') → 'hover:bg-dark-red p-3 bg-[#B91C1C]'
 *
 * @param inputs - The class names to be combined.
 * @returns The combined class names as a string.
 */
export declare const cn: (...inputs: ClassValue[]) => string;
type AnyFunction = (...args: any[]) => any;
interface DebouncedFunction<F extends AnyFunction> {
    (...args: Parameters<F>): void;
    cancel: () => void;
}
export declare function debounce<F extends AnyFunction>(func: F, delay: number): DebouncedFunction<F>;
export declare const formatDuration: (elapsedTime: number) => string;
export declare function formatCountdown(seconds: number): string;
export declare const formatTime: (timestampSeconds: number) => string;
export declare const formatRelativeTime: (timestamp: number) => string;
export declare const formatRelativeDate: (timestampSeconds: number) => string;
export declare function capitalize(text: string): string;
type Falsy = false | null | undefined | 0 | "";
export declare function truthy<T>(value: T): value is Exclude<T, Falsy>;
export declare const styled: <Tag extends keyof JSX.IntrinsicElements>(tag: Tag, className: string) => import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<ComponentProps<Tag>> & import("react").RefAttributes<ElementType<Tag>>>;
export declare const mergeProps: <Tag extends keyof JSX.IntrinsicElements = any>(a: ComponentProps<Tag>, b: ComponentProps<Tag>) => ComponentProps<Tag>;
export declare const calcLerp: (a: string, b: string, t: string | number) => string;
/**
 * Returns an array including the first `count` unique values of the array
 * If not enough unique values are found, the array is returned as is, up to `count` items
 * @param arr - The array to filter
 * @param key - The key to use for uniqueness
 * @param count - The number of unique values to return
 * @returns The filtered array
 */
export declare const getFirstUniques: <T>(array: T[], key: keyof T, count: number) => T[];
interface FlattenOptions {
    prefix?: string;
}
/**
 * Flattens an object into a record of kebab-cased keys and values.
 * @example
 * { a: { b: { c: 1 } } } -> { 'a-b-c': 1 }
 * @param obj - The object to flatten
 * @param options.prefix - The prefix to add to the keys
 * @returns The flattened object
 */
export declare function flatten<T extends Record<string, any>>(obj: T, options?: FlattenOptions): Record<string, string>;
interface ReplaceKeysOptions {
    keysToReplace: Array<[string, string]>;
}
/**
 * Replaces keys in an object with new keys.
 * @example
 * replaceKeys({ oldKey: "oldValue" }, { keysToReplace: [["oldKey", "newKey"]] }) -> { newKey: "oldValue" }
 * @param obj - The object to replace keys in
 * @param options - The options for replacing keys
 * @returns The replaced object
 */
export declare function replaceKeys(obj: Record<string, any>, options: ReplaceKeysOptions): Record<string, any>;
/**
 * Maps theme keys to css variables
 * @example
 * mapToCssVariables({ "accent-gold": { cssVariable: "--accent-gold" } }) -> { "accent-gold": "var(--accent-gold)" }
 */
export declare function mapToCssVariables<T extends Record<string, any>>(obj: T): Record<keyof T & string, string>;
/**
 * Simple hash function to create a deterministic index from a given string.
 * @param {string} str - The input string to hash.
 * @param {number} max - The maximum value for the hash.
 * @returns {number} - The index within the array.
 */
export declare function hashStringToIndex(str: string, max: number): number;
/**
 * Formats a value for CSS properties by adding 'px' if no unit is present.
 * @param {string | number} value - The value to format (can be a number or string)
 * @returns {string} - The formatted CSS value with appropriate units
 *
 * @example
 * // Returns "20px"
 * formatCSSValue(20)
 *
 * @example
 * // Returns "5rem"
 * formatCSSValue("5rem")
 */
export declare function formatCSSValue(value: string | number): string;
export declare const remToPx: (rem: string | number, baseFontSize?: number) => number;
export declare const pxToRem: (px: string | number, baseFontSize?: number) => number;
export declare const formatHash: (hash: string) => string;
export {};
