import * as _unocss_core from '@unocss/core';
import { StaticShortcut, CSSObject, UserConfig } from '@unocss/core';
import { AttributifyOptions } from '@unocss/preset-attributify';
import { IconsOptions } from '@unocss/preset-icons';
import { Theme, ThemeAnimation } from '@unocss/preset-mini';
import { RemToPxOptions } from '@unocss/preset-rem-to-px';
import { TagifyOptions } from '@unocss/preset-tagify';
import { TypographyOptions } from '@unocss/preset-typography';
import { PresetUnoOptions } from '@unocss/preset-uno';
import { WebFontsOptions } from '@unocss/preset-web-fonts';
import { CompileClassOptions } from '@unocss/transformer-compile-class';
import { TransformerDirectivesOptions } from '@unocss/transformer-directives';
import { TransformerVariantGroupOptions } from '@unocss/transformer-variant-group';
import { PresetScrollbarDefaultOption } from 'unocss-preset-scrollbar';

type CustomStaticShortcut = [string | string[], StaticShortcut[1]] | [string | string[], StaticShortcut[1], StaticShortcut[2]];
type CustomStaticShortcuts = CustomStaticShortcut[];
type Objectiable<T> = Record<string, T>;
type CSSKeyframesRule = Objectiable<CSSObject>;
interface UsefulExtends extends Exclude<UsefulTheme, 'extend'> {
    keyframes?: Record<string, CSSKeyframesRule>;
    /**
     * Different from the original, you can use the following formats:
     *
     * ```ts
     * { name : 'name duration timing-function iteration-count' }
     * ```
     */
    animation?: Objectiable<string>;
}
interface UsefulTheme extends Theme {
    extend?: UsefulExtends;
}
interface PreflightOptions {
    /**
     * Enable reset styles
     *
     * @default true
     */
    reset?: boolean;
}
type FilterPattern = Array<string | RegExp> | string | RegExp | null;
interface ImportantOptions {
    /**
     * Make all unitilities important.
     *
     */
    includes?: FilterPattern;
    /**
     * Make all unitilities important.
     *
     */
    excludes?: FilterPattern;
}
interface UsefulOptions {
    /**
     * Make all unitilities important.
     *
     * @default false
     */
    important?: boolean | ImportantOptions;
    /**
     * Enable default shortcuts
     *
     * @default true
     */
    enableDefaultShortcuts?: boolean;
    /**
     * Enable magic animations
     *
     * @default false
     * @deprecated Use `magicss` option instead
     */
    enableMagicAnimations?: boolean;
    /**
     * Enable reset styles
     *
     * @default true
     *
     * @deprecated Use `preflights.reset` instead
     */
    enableResetStyles?: boolean;
    /**
     * Enable preflights
     *
     * @default true
     */
    preflights?: boolean | PreflightOptions;
    /**
     * Extract rgba color in css variable
     *
     * @default false
     */
    unColor?: boolean | string;
    /**
     * Improve theme to be more useful, and align with Tailwind theme configuration
     *
     * - Add `animation` to theme, Expand theme animation name usage
     *
     * [ name, duration, timing-function, iteration-count ]
     *
     * @example
     *
     * ```ts
     * theme: {
     *   extend: {
     *     animation: {
     *      shape: 'shape 5s linear infinite'
     *     },
     *     // ...
     *   }
     * }
     * ```
     * You can choose to use special symbols as placeholders, to indicate whether to inject this property into the uno theme
     *
     * - `*` Abandon injection
     * - `+` Injection, but the value is empty
     *
     * @example
     *
     * ```ts
     * theme: {
     *   extend: {
     *     animation: {
     *      foo: 'foo 1s * 3',
     *      bar: 'bar 1s +',
     *     },
     *     // ...
     *   }
     * }
     * ```
     *
     */
    theme?: UsefulTheme;
    /**
     * Enable the default preset
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-uno](https://unocss.dev/presets/uno)
     * @default true
     */
    uno?: boolean | PresetUnoOptions;
    /**
     * Enable attributify mode and the options of it
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-attributify](https://unocss.dev/presets/attributify)
     * @default false
     */
    attributify?: boolean | AttributifyOptions;
    /**
     * Enable icons preset and the options of it
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-icons](https://unocss.dev/presets/icons)
     * @default false
     */
    icons?: boolean | IconsOptions;
    /**
     * Enable webFonts preset and the options of it
     * Only works when `presets` is not specified
     *
     * **Note:** Default by [`fontsource`](https://fontsource.org/) provider
     *
     * @about [@unocss/preset-web-fonts](https://unocss.dev/presets/web-fonts)
     * @default false
     */
    webFonts?: boolean | WebFontsOptions;
    /**
     * Enable typography preset and the options of it
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-typography](https://unocss.dev/presets/typography)
     * @default false
     */
    typography?: boolean | TypographyOptions;
    /**
     * Enable tagify preset and the options of it
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-tagify](https://unocss.dev/presets/tagify)
     * @default false
     */
    tagify?: boolean | TagifyOptions;
    /**
     * Enable remToPx preset and the options of it
     * Only works when `presets` is not specified
     *
     * @about [@unocss/preset-rem-to-px](https://unocss.dev/presets/rem-to-px)
     * @default false
     */
    remToPx?: boolean | RemToPxOptions;
    /**
     * Enable scrollbar preset and the options of it
     * Only works when `presets` is not specified
     *
     * @about [unocss-preset-scrollbar](https://github.com/action-hong/unocss-preset-scrollbar)
     * @default false
     */
    scrollbar?: boolean | PresetScrollbarDefaultOption;
    /**
     * Enable magicss preset
     *
     * @about [unocss-preset-magicss](https://github.com/unpreset/unocss-preset-magicss)
     * @default false
     */
    magicss?: boolean;
    /**
     * Enable directives transformer and the options of it
     *
     * @about [@unocss/transformer-directives](https://unocss.dev/transformers/directives)
     * @default true
     */
    directives?: boolean | TransformerDirectivesOptions;
    /**
     * Enables the variant group feature of Windi CSS for UnoCSS.
     *
     * @about [@unocss/transformer-variant-group](https://unocss.dev/transformers/variant-group)
     * @default true
     */
    variantGroup?: boolean | TransformerVariantGroupOptions;
    /**
     * Compile group of classes into one class
     *
     * @about [@unocss/transformer-class-group](https://unocss.dev/transformers/compile-class)
     * @default false
     */
    compileClass?: boolean | CompileClassOptions;
}
type DeepPartial<T> = {
    [P in keyof T]?: DeepPartial<T[P]>;
};

declare const animationRegExp: RegExp;
/**
 * Normalize custom animate usage to UnoCSS animations theme.
 *
 * ⚠️ You must strictly follow the following format. ⚠️
 *
 * [ name, duration, timing-function, iteration-count ]
 *
 * If you use * as placeholder, it will be ignored.
 *
 * [name, duration, *, iteration-count]
 *
 * If you use + as placeholder, it will be replaced with empty string.
 *
 * [name, duration, +, iteration-count]
 *
 * @example
 *
 * { animate: ['spin 1s linear infinite'] }
 *
 * Will be transformd:
 *
 * {
 *   animate: ['spin 1s linear infinite'],
 *   durations: {
 *     spin: '1s',
 *   },
 *   timingFns: {
 *     spin: 'linear',
 *   },
 *   counts: {
 *     spin: 'infinite',
 *   },
 * }
 */
declare function resolveAnimation(extend_animation: Objectiable<string>): {
    animation: ThemeAnimation;
    shortcuts: CustomStaticShortcuts;
};
/**
 * Deep merge two objects.
 * @param original Original object
 * @param patch Patch object
 * @returns Merged object
 */
declare function deepMerge<T>(original: T, patch: DeepPartial<T>): T;
declare function isObject(val: unknown): val is Record<any, any>;
declare function getKeyframes(css: string): Record<string, Record<string, CSSObject>>;
declare function cssObj2StrSync(style: Record<string, CSSObject>): string;
declare function stringifyObj(obj: CSSObject): string;
declare function cssObj2StrAsync(style: Record<string, CSSObject>): Promise<string>;
declare function toArray<T>(val: T | T[]): T[];
declare function camelToHyphen(str: string): string;

declare const presetUseful: _unocss_core.PresetFactoryAwaitable<UsefulTheme, UsefulOptions>;

declare function defineConfig<T extends object = UsefulTheme>(config: UserConfig<T>): UserConfig<T>;
declare function defineUsefulConfig<T extends object = UsefulTheme>(options?: UsefulOptions, config?: UserConfig<T>): UserConfig<T>;

export { type UsefulOptions, type UsefulTheme, animationRegExp, camelToHyphen, cssObj2StrAsync, cssObj2StrSync, deepMerge, presetUseful as default, defineConfig, defineUsefulConfig, getKeyframes, isObject, presetUseful, resolveAnimation, stringifyObj, toArray };
