import { LoadConfigResult } from 'unconfig'; import MagicString from 'magic-string'; declare type EventsMap = Record; interface DefaultEvents extends EventsMap { [event: string]: (...args: any) => void; } interface Unsubscribe { (): void; } declare class Emitter { /** * Event names in keys and arrays with listeners in values. * * ```js * emitter1.events = emitter2.events * emitter2.events = { } * ``` */ events: Partial<{ [E in keyof Events]: Events[E][]; }>; /** * Add a listener for a given event. * * ```js * const unbind = ee.on('tick', (tickType, tickDuration) => { * count += 1 * }) * * disable () { * unbind() * } * ``` * * @param event The event name. * @param cb The listener function. * @returns Unbind listener from event. */ on(this: this, event: K, cb: Events[K]): Unsubscribe; /** * Calls each of the listeners registered for a given event. * * ```js * ee.emit('tick', tickType, tickDuration) * ``` * * @param event The event name. * @param args The arguments for listeners. */ emit(this: this, event: K, ...args: Parameters): void; } declare class UnoGenerator { userConfig: UserConfig; defaults: UserConfigDefaults; version: string; private _cache; config: ResolvedConfig; blocked: Set; parentOrders: Map; events: Emitter<{ config: (config: ResolvedConfig) => void; }>; constructor(userConfig?: UserConfig, defaults?: UserConfigDefaults); setConfig(userConfig?: UserConfig, defaults?: UserConfigDefaults): void; applyExtractors(code: string, id?: string, set?: Set): Promise>; makeContext(raw: string, applied: VariantMatchedResult): RuleContext<{}>; parseToken(raw: string, alias?: string): Promise; generate(input: string | Set | string[], options?: GenerateOptions): Promise; matchVariants(raw: string, current?: string): VariantMatchedResult; private applyVariants; constructCustomCSS(context: Readonly, body: CSSObject | CSSEntries, overrideSelector?: string): string; parseUtil(input: string | VariantMatchedResult, context: RuleContext, internal?: boolean): Promise<(ParsedUtil | RawUtil)[] | undefined>; stringifyUtil(parsed?: ParsedUtil | RawUtil, context?: RuleContext): StringifiedUtil | undefined; expandShortcut(input: string, context: RuleContext, depth?: number): [ShortcutValue[], RuleMeta | undefined] | undefined; stringifyShortcuts(parent: VariantMatchedResult, context: RuleContext, expanded: ShortcutValue[], meta?: RuleMeta): Promise; isBlocked(raw: string): boolean; } declare function createGenerator(config?: UserConfig, defaults?: UserConfigDefaults): UnoGenerator; declare const regexScopePlaceholder: RegExp; declare const hasScopePlaceholder: (css: string) => RegExpMatchArray | null; declare function movePseudoElementsEnd(selector: string): string; declare function toEscapedSelector(raw: string): string; declare function escapeRegExp(string: string): string; /** * CSS Selector Escape */ declare function escapeSelector(str: string): string; declare const e: typeof escapeSelector; declare function normalizeCSSEntries(obj: string | CSSEntries | CSSObject): string | CSSEntries; declare function normalizeCSSValues(obj: CSSValue | string | (CSSValue | string)[]): (string | CSSEntries)[]; declare function clearIdenticalEntries(entry: CSSEntries): CSSEntries; declare function entriesToCss(arr?: CSSEntries): string; declare function isObject(item: any): item is Record; declare function mergeDeep(original: T, patch: DeepPartial): T; declare function clone(val: T): T; declare function isStaticRule(rule: Rule): rule is StaticRule; declare function isStaticShortcut(sc: Shortcut): sc is StaticShortcut; declare function toArray(value?: T | T[]): T[]; declare function uniq(value: T[]): T[]; declare function mergeSet(target: Set, append: Set): Set; declare function isString(s: any): s is string; declare const attributifyRE: RegExp; declare const cssIdRE: RegExp; declare const validateFilterRE: RegExp; declare const CONTROL_SHORTCUT_NO_MERGE = "$$shortcut-no-merge"; declare function isAttributifySelector(selector: string): RegExpMatchArray | null; declare function isValidSelector(selector?: string): selector is string; declare function normalizeVariant(variant: Variant): VariantObject; declare function isRawUtil(util: ParsedUtil | RawUtil | StringifiedUtil): util is RawUtil; declare function notNull(value: T | null | undefined): value is T; declare function noop(): void; declare class TwoKeyMap { _map: Map>; get(key1: K1, key2: K2): V | undefined; getFallback(key1: K1, key2: K2, fallback: V): V; set(key1: K1, key2: K2, value: V): this; has(key1: K1, key2: K2): boolean | undefined; delete(key1: K1, key2: K2): boolean; deleteTop(key1: K1): boolean; map(fn: (v: V, k1: K1, k2: K2) => T): T[]; } declare class BetterMap extends Map { map(mapFn: (value: V, key: K) => R): R[]; } declare function withLayer(layer: string, rules: Rule[]): Rule[]; declare const regexClassGroup: RegExp; declare function expandVariantGroup(str: string, seperators?: ('-' | ':')[]): string; declare function expandVariantGroup(str: MagicString, seperators?: ('-' | ':')[]): MagicString; declare function warnOnce(msg: string): void; declare type ValueHandlerCallback = (str: string) => string | number | undefined; declare type ValueHandler = { [S in K]: ValueHandler; } & { (str: string): string | undefined; __options: { sequence: K[]; }; }; declare function createValueHandler(handlers: Record): ValueHandler; declare type Awaitable = T | Promise; declare type Arrayable = T | T[]; declare type ArgumentType = T extends ((...args: infer A) => any) ? A : never; declare type Shift = T extends [_: any, ...args: infer A] ? A : never; declare type RestArgs = Shift>; declare type DeepPartial = { [P in keyof T]?: DeepPartial; }; declare type FlatObjectTuple = { [K in keyof T]: T[K]; }; declare type PartialByKeys = FlatObjectTuple>> & Omit>; declare type RequiredByKey = FlatObjectTuple>> & Omit>; declare type CSSObject = Record; declare type CSSEntries = [string, string | number | undefined][]; interface CSSColorValue { type: string; components: (string | number)[]; alpha: string | number | undefined; } declare type RGBAColorValue = [number, number, number, number] | [number, number, number]; interface ParsedColorValue { /** * Parsed color value. */ color?: string; /** * Parsed opacity value. */ opacity: string; /** * Color name. */ name: string; /** * Color scale, preferrably 000 - 999. */ no: string; /** * {@link CSSColorValue} */ cssColor: CSSColorValue | undefined; /** * Parsed alpha value from opacity */ alpha: string | number | undefined; } declare type PresetOptions = Record; interface RuleContext { /** * Unprocessed selector from user input. * Useful for generating CSS rule. */ rawSelector: string; /** * Current selector for rule matching */ currentSelector: string; /** * UnoCSS generator instance */ generator: UnoGenerator; /** * The theme object */ theme: Theme; /** * Matched variants handlers for this rule. */ variantHandlers: VariantHandler[]; /** * The result of variant matching. */ variantMatch: VariantMatchedResult; /** * Constrcut a custom CSS rule. * Variants and selector escaping will be handled automatically. */ constructCSS: (body: CSSEntries | CSSObject, overrideSelector?: string) => string; /** * Available only when `details` option is enabled. */ rules?: Rule[]; /** * Available only when `details` option is enabled. */ shortcuts?: Shortcut[]; /** * Available only when `details` option is enabled. */ variants?: Variant[]; } interface VariantContext { /** * Unprocessed selector from user input. */ rawSelector: string; /** * UnoCSS generator instance */ generator: UnoGenerator; /** * The theme object */ theme: Theme; } interface ExtractorContext { readonly original: string; code: string; id?: string; } interface PreflightContext { /** * UnoCSS generator instance */ generator: UnoGenerator; /** * The theme object */ theme: Theme; } interface Extractor { name: string; extract(ctx: ExtractorContext): Awaitable | undefined>; order?: number; } interface RuleMeta { /** * The layer name of this rule. * @default 'default' */ layer?: string; /** * Option to not merge this selector even if the body are the same. * @default false */ noMerge?: boolean; /** * Fine tune sort */ sort?: number; /** * Templates to provide autocomplete suggestions */ autocomplete?: Arrayable; /** * Matching prefix before this util */ prefix?: string; /** * Internal rules will only be matched for shortcuts but not the user code. * @default false */ internal?: boolean; } declare type CSSValue = CSSObject | CSSEntries; declare type CSSValues = CSSValue | CSSValue[]; declare type DynamicMatcher = ((match: RegExpMatchArray, context: Readonly>) => Awaitable); declare type DynamicRule = [RegExp, DynamicMatcher] | [RegExp, DynamicMatcher, RuleMeta]; declare type StaticRule = [string, CSSObject | CSSEntries] | [string, CSSObject | CSSEntries, RuleMeta]; declare type Rule = DynamicRule | StaticRule; declare type DynamicShortcutMatcher = ((match: RegExpMatchArray, context: Readonly>) => (string | ShortcutValue[] | undefined)); declare type StaticShortcut = [string, string | ShortcutValue[]] | [string, string | ShortcutValue[], RuleMeta]; declare type StaticShortcutMap = Record; declare type DynamicShortcut = [RegExp, DynamicShortcutMatcher] | [RegExp, DynamicShortcutMatcher, RuleMeta]; declare type UserShortcuts = StaticShortcutMap | (StaticShortcut | DynamicShortcut | StaticShortcutMap)[]; declare type Shortcut = StaticShortcut | DynamicShortcut; declare type ShortcutValue = string | CSSValue; declare type FilterPattern = ReadonlyArray | string | RegExp | null; interface Preflight { getCSS: (context: PreflightContext) => Promise | string | undefined; layer?: string; } declare type BlocklistRule = string | RegExp; interface VariantHandlerContext { /** * Rewrite the output selector. Often be used to append parents. */ prefix: string; /** * Rewrite the output selector. Often be used to append pesudo classes. */ selector: string; /** * Rewrite the output selector. Often be used to append pesudo elements. */ pseudo: string; /** * Rewrite the output css body. The input come in [key,value][] pairs. */ entries: CSSEntries; /** * Provide a parent selector(e.g. media query) to the output css. */ parent?: string; /** * Provide order to the `parent` parent selector within layer. */ parentOrder?: number; /** * Override layer to the output css. */ layer?: string; /** * Order in which the variant is sorted within single rule. */ sort?: number; } interface VariantHandler { /** * Callback to process the handler. */ handle?: (input: VariantHandlerContext, next: (input: VariantHandlerContext) => VariantHandlerContext) => VariantHandlerContext; /** * The result rewritten selector for the next round of matching */ matcher: string; /** * Order in which the variant is applied to selector. */ order?: number; /** * Rewrite the output selector. Often be used to append pesudo classes or parents. */ selector?: (input: string, body: CSSEntries) => string | undefined; /** * Rewrite the output css body. The input come in [key,value][] pairs. */ body?: (body: CSSEntries) => CSSEntries | undefined; /** * Provide a parent selector(e.g. media query) to the output css. */ parent?: string | [string, number] | undefined; /** * Order in which the variant is sorted within single rule. */ sort?: number; /** * Override layer to the output css. */ layer?: string | undefined; } declare type VariantFunction = (matcher: string, context: Readonly>) => string | VariantHandler | undefined; interface VariantObject { /** * The name of the variant. */ name?: string; /** * The entry function to match and rewrite the selector for futher processing. */ match: VariantFunction; /** * Allows this variant to be used more than once in matching a single rule * * @default false */ multiPass?: boolean; /** * Custom function for auto complete */ autocomplete?: Arrayable; } declare type Variant = VariantFunction | VariantObject; declare type Preprocessor = (matcher: string) => string | undefined; declare type Postprocessor = (util: UtilObject) => void; declare type ThemeExtender = (theme: T) => void; interface ConfigBase { /** * Rules to generate CSS utilities */ rules?: Rule[]; /** * Variants that preprocess the selectors, * having the ability to rewrite the CSS object. */ variants?: Variant[]; /** * Similar to Windi CSS's shortcuts, * allows you have create new utilities by combining existing ones. */ shortcuts?: UserShortcuts; /** * Rules to exclude the selectors for your design system (to narrow down the possibilities). * Combining `warnExcluded` options it can also helps you identify wrong usages. */ blocklist?: BlocklistRule[]; /** * Utilities that always been included */ safelist?: string[]; /** * Extractors to handle the source file and outputs possible classes/selectors * Can be language-aware. */ extractors?: Extractor[]; /** * Raw CSS injections. */ preflights?: Preflight[]; /** * Theme object for shared configuration between rules */ theme?: Theme; /** * Layer orders. Default to 0. */ layers?: Record; /** * Custom function to sort layers. */ sortLayers?: (layers: string[]) => string[]; /** * Preprocess the incoming utilities, return falsy value to exclude */ preprocess?: Arrayable; /** * Process the generate utils object */ postprocess?: Arrayable; /** * Custom functions to extend the theme object */ extendTheme?: Arrayable>; /** * Additional options for auto complete */ autocomplete?: { /** * Custom functions / templates to provide autocomplete suggestions */ templates?: Arrayable; /** * Custom extractors to pickup possible classes and * transform class-name style suggestions to the correct format */ extractors?: Arrayable; }; /** * Expose internal details for debugging / inspecting * * Added `rules`, `shortcuts`, `variants` to the context and expose the context object in `StringifiedUtil` * * You don't usually need to set this. * * @default false */ details?: boolean; } declare type AutoCompleteTemplate = string; declare type AutoCompleteFunction = (input: string) => Awaitable; interface AutoCompleteExtractorContext { content: string; cursor: number; } interface Replacement { /** * The range of the original text */ start: number; end: number; /** * The text used to replace */ replacement: string; } interface SuggestResult { /** * The generated suggestions * * `[original, formatted]` */ suggestions: [string, string][]; /** * The function to convert the selected suggestion back. * Needs to pass in the original one. */ resolveReplacement: (suggestion: string) => Replacement; } interface AutoCompleteExtractorResult { /** * The extracted string */ extracted: string; /** * The function to convert the selected suggestion back */ resolveReplacement: (suggestion: string) => Replacement; /** * The function to format suggestions */ transformSuggestions?: (suggestions: string[]) => string[]; } interface AutoCompleteExtractor { name: string; extract: (context: AutoCompleteExtractorContext) => Awaitable; order?: number; } interface Preset extends ConfigBase { name: string; enforce?: 'pre' | 'post'; /** * Preset options for other tools like IDE to consume */ options?: PresetOptions; /** * Apply prefix to all utilities and shortcuts */ prefix?: string; /** * Apply layer to all utilities and shortcuts */ layer?: string; } interface GeneratorOptions { /** * Merge utilities with the exact same body to save the file size * * @default true */ mergeSelectors?: boolean; /** * Emit warning when matched selectors are presented in blocklist * * @default true */ warn?: boolean; } interface UserOnlyOptions { /** * The theme object, will be merged with the theme provides by presets */ theme?: Theme; /** * Layout name of shortcuts * * @default 'shortcuts' */ shortcutsLayer?: string; /** * Presets */ presets?: (Preset | Preset[])[]; /** * Environment mode * * @default 'build' */ envMode?: 'dev' | 'build'; } interface UnocssPluginContext { ready: Promise>; uno: UnoGenerator; /** All tokens scanned */ tokens: Set; /** Map for all module's raw content */ modules: BetterMap; /** Module IDs that been affected by UnoCSS */ affectedModules: Set; filter: (code: string, id: string) => boolean; extract: (code: string, id?: string) => Promise; reloadConfig: () => Promise>; getConfig: () => Promise; onReload: (fn: () => void) => void; invalidate: () => void; onInvalidate: (fn: () => void) => void; root: string; updateRoot: (root: string) => Promise>; } interface SourceMap { file?: string; mappings?: string; names?: string[]; sources?: string[]; sourcesContent?: string[]; version?: number; } interface TransformResult { code: string; map?: SourceMap | null; etag?: string; deps?: string[]; dynamicDeps?: string[]; } declare type SourceCodeTransformerEnforce = 'pre' | 'post' | 'default'; interface SourceCodeTransformer { name: string; /** * The order of transformer */ enforce?: SourceCodeTransformerEnforce; /** * Custom id filter, if not provided, the extraction filter will be applied */ idFilter?: (id: string) => boolean; /** * The transform function */ transform: (code: MagicString, id: string, ctx: UnocssPluginContext) => Awaitable; } /** * For other modules to aggregate the options */ interface PluginOptions { /** * Load from configs files * * set `false` to disable */ configFile?: string | false; /** * List of files that will also triggers config reloads */ configDeps?: string[]; /** * Patterns that filter the files being extracted. */ include?: FilterPattern; /** * Patterns that filter the files NOT being extracted. */ exclude?: FilterPattern; /** * Custom transformers to the source code */ transformers?: SourceCodeTransformer[]; } interface UserConfig extends ConfigBase, UserOnlyOptions, GeneratorOptions, PluginOptions { } interface UserConfigDefaults extends ConfigBase, UserOnlyOptions { } interface ResolvedConfig extends Omit, 'rules' | 'shortcuts' | 'autocomplete'> { presets: Preset[]; shortcuts: Shortcut[]; variants: VariantObject[]; preprocess: Preprocessor[]; postprocess: Postprocessor[]; rulesSize: number; rulesDynamic: (DynamicRule | undefined)[]; rulesStaticMap: Record; autocomplete: { templates: (AutoCompleteFunction | AutoCompleteTemplate)[]; extractors: AutoCompleteExtractor[]; }; } interface GenerateResult { css: string; layers: string[]; getLayer(name?: string): string | undefined; getLayers(includes?: string[], excludes?: string[]): string; matched: Set; } declare type VariantMatchedResult = readonly [ raw: string, current: string, variantHandlers: VariantHandler[], variants: Set ]; declare type ParsedUtil = readonly [ index: number, raw: string, entries: CSSEntries, meta: RuleMeta | undefined, variantHandlers: VariantHandler[] ]; declare type RawUtil = readonly [ index: number, rawCSS: string, meta: RuleMeta | undefined ]; declare type StringifiedUtil = readonly [ index: number, selector: string | undefined, body: string, parent: string | undefined, meta: RuleMeta | undefined, context: RuleContext | undefined ]; declare type PreparedRule = readonly [ selector: [string, number][], body: string, noMerge: boolean ]; interface UtilObject { selector: string; entries: CSSEntries; parent: string | undefined; layer: string | undefined; sort: number | undefined; } interface GenerateOptions { /** * Filepath of the file being processed. */ id?: string; /** * Generate preflights (if defined) * * @default true */ preflights?: boolean; /** * Includes safelist */ safelist?: boolean; /** * Genreate minified CSS * @default false */ minify?: boolean; /** * @expiremental */ scope?: string; } declare const extractorSplit: Extractor; declare const extractorSvelte: Extractor; export { ArgumentType, Arrayable, AutoCompleteExtractor, AutoCompleteExtractorContext, AutoCompleteExtractorResult, AutoCompleteFunction, AutoCompleteTemplate, Awaitable, BetterMap, BlocklistRule, CONTROL_SHORTCUT_NO_MERGE, CSSColorValue, CSSEntries, CSSObject, CSSValue, CSSValues, ConfigBase, DeepPartial, DynamicMatcher, DynamicRule, DynamicShortcut, DynamicShortcutMatcher, Extractor, ExtractorContext, FilterPattern, FlatObjectTuple, GenerateOptions, GenerateResult, GeneratorOptions, ParsedColorValue, ParsedUtil, PartialByKeys, PluginOptions, Postprocessor, Preflight, PreflightContext, PreparedRule, Preprocessor, Preset, PresetOptions, RGBAColorValue, RawUtil, Replacement, RequiredByKey, ResolvedConfig, RestArgs, Rule, RuleContext, RuleMeta, Shift, Shortcut, ShortcutValue, SourceCodeTransformer, SourceCodeTransformerEnforce, SourceMap, StaticRule, StaticShortcut, StaticShortcutMap, StringifiedUtil, SuggestResult, ThemeExtender, TransformResult, TwoKeyMap, UnoGenerator, UnocssPluginContext, UserConfig, UserConfigDefaults, UserOnlyOptions, UserShortcuts, UtilObject, ValueHandler, ValueHandlerCallback, Variant, VariantContext, VariantFunction, VariantHandler, VariantHandlerContext, VariantMatchedResult, VariantObject, attributifyRE, clearIdenticalEntries, clone, createGenerator, createValueHandler, cssIdRE, e, entriesToCss, escapeRegExp, escapeSelector, expandVariantGroup, extractorSplit, extractorSvelte, hasScopePlaceholder, isAttributifySelector, isObject, isRawUtil, isStaticRule, isStaticShortcut, isString, isValidSelector, mergeDeep, mergeSet, movePseudoElementsEnd, noop, normalizeCSSEntries, normalizeCSSValues, normalizeVariant, notNull, regexClassGroup, regexScopePlaceholder, toArray, toEscapedSelector, uniq, validateFilterRE, warnOnce, withLayer };