import { App, ComputedRef } from "vue"; //#region src/types.d.ts type LocaleMessageValue = LocaleMessageDictionary | string; declare type LocaleMessageType = T extends string ? string : T extends Record ? LocaleMessageDictionary : T extends readonly unknown[] ? { [K in keyof T]: T[K] } : T; type LocaleMessageDictionary = { [K in keyof T]: LocaleMessageType }; type LocaleMessage = Record>; type LocaleMessages = LocaleMessage> = Record; type MessageParameterValue = string | number | null | undefined; type MessageParameters = Record | MessageParameterValue[]; interface I18nConfig { defaultLocale?: Locale; locales?: Locale[]; messages?: LocaleMessages; /** @default 'warn' */ logLevel?: "warn" | "silent"; } interface I18nInstance = Record> { defaultLocale: Locale; locale: ComputedRef; locales: readonly Locale[]; messages: LocaleMessages; t: (key: T, params?: MessageParameters) => string; setLocale: (locale: Locale) => void; getLocale: () => string; } //#endregion //#region src/composables.d.ts declare function useI18n = Record>(): I18nInstance; //#endregion //#region src/i18n.d.ts declare function createI18n(config: I18nConfig): I18nInstance & { install: (app: App) => void; }; //#endregion //#region src/index.d.ts declare module "vue" { interface ComponentCustomProperties { $i18n: I18nInstance; $t: I18nInstance["t"]; } } //#endregion export { I18nConfig, I18nInstance, LocaleMessage, LocaleMessageDictionary, LocaleMessageType, LocaleMessageValue, LocaleMessages, MessageParameterValue, MessageParameters, createI18n, useI18n };