{"version":3,"file":"types.mjs","sources":["../../../../packages/utils/types.ts"],"sourcesContent":["import type { CSSProperties, Plugin } from 'vue'\r\n\r\ntype OptionalKeys<T extends Record<string, unknown>> = {\r\n  [K in keyof T]: T extends Record<K, T[K]> ? never : K\r\n}[keyof T]\r\n\r\ntype RequiredKeys<T extends Record<string, unknown>> = Exclude<\r\n  keyof T,\r\n  OptionalKeys<T>\r\n>\r\n\r\ntype MonoArgEmitter<T, Keys extends keyof T> = <K extends Keys>(\r\n  evt: K,\r\n  arg?: T[K]\r\n) => void\r\n\r\ntype BiArgEmitter<T, Keys extends keyof T> = <K extends Keys>(\r\n  evt: K,\r\n  arg: T[K]\r\n) => void\r\n\r\nexport type EventEmitter<T extends Record<string, unknown>> = MonoArgEmitter<\r\n  T,\r\n  OptionalKeys<T>\r\n> &\r\n  BiArgEmitter<T, RequiredKeys<T>>\r\n\r\nexport type AnyFunction<T> = (...args: any[]) => T\r\n\r\nexport type PartialReturnType<T extends (...args: any[]) => unknown> =\r\n  Partial<ReturnType<T>>\r\n\r\nexport type SFCWithInstall<T> = T & Plugin\r\n\r\nexport type Nullable<T> = T | null\r\n\r\nexport type RefElement = Nullable<HTMLElement>\r\n\r\nexport type CustomizedHTMLElement<T> = HTMLElement & T\r\n\r\nexport type HTMLElementCustomized<T> = HTMLElement & T\r\n\r\nexport type Indexable<T> = {\r\n  [key: string]: T\r\n}\r\n\r\nexport type Hash<T> = Indexable<T>\r\n\r\nexport type TimeoutHandle = number\r\n\r\nexport type StyleValue = string | CSSProperties | Array<StyleValue>\r\n\r\nexport const mutable = <T extends readonly any[] | Record<string, unknown>>(\r\n  val: T\r\n) => val as Mutable<typeof val\r\n>\r\n\r\nexport type Mutable<T> = { -readonly [P in keyof T]: T[P] }\r\n\r\nexport type Arrayable<T> = T | T[]\r\n\r\nexport type Awaitable<T> = Promise<T> | T\r\n"],"names":[],"mappings":"AAAY,MAAC,OAAO,GAAG,CAAC,GAAG,KAAK;;;;"}