import type { UnionToIntersection } from '@vue/shared'; import type { EmitsOptions, ObjectEmitsOptions } from 'vue'; import type { AlpineInstance, Data } from './types'; export type EmitsToEmitFns = T extends string[] ? { [K in T[number]]?: (...args: any[]) => any; } : T extends ObjectEmitsOptions ? { [K in string & keyof T]?: (...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any; } : {}; export type EmitsToProps = T extends string[] ? { [K in `on${Capitalize}`]?: (...args: any[]) => any; } : T extends ObjectEmitsOptions ? { [K in `on${Capitalize}`]?: K extends `on${infer C}` ? (...args: T[Uncapitalize] extends (...args: infer P) => any ? P : T[Uncapitalize] extends null ? any[] : never) => any : never; } : {}; export type EmitKeys = T extends string[] ? T[number] : keyof T; export type ShortEmitsToObject = E extends Record ? { [K in keyof E]: (...args: E[K]) => any; } : E; export type EmitFn = Options extends Array ? (event: V, ...args: any[]) => void : {} extends Options ? (event: string, ...args: any[]) => void : UnionToIntersection<{ [key in Event]: Options[key] extends (...args: infer Args) => any ? (event: key, ...args: Args) => void : Options[key] extends any[] ? (event: key, ...args: Options[key]) => void : (event: key, ...args: any[]) => void; }[Event]>; export declare function emit(instance: AlpineInstance, event: EmitKeys, ...rawArgs: any[]): void; export declare function normalizeEmitsOptions(emits: EmitsOptions | null): ObjectEmitsOptions; export declare function handlerKeys(name: string): string[]; export declare function hasEvent(props: Record, name: string): boolean;