import { type ReactElement } from "react"; import type { LocalizedString } from "./LocalizedString"; import type { ComponentKeyToRecord, WithOptionalKeys, TranslationFunction } from "./typeUtils"; import type { Dispatch, SetStateAction } from "react"; import type { StatefulObservable, StatefulReadonlyObservable } from "powerhooks/tools/StatefulObservable"; declare namespace JSX { interface Element extends ReactElement { } } type UseTranslation = { (wrappedComponentName: Record): { t: TranslationFunction; }; (componentName: ComponentName): { t: TranslationFunction; }; }; type I18nApi = { useLang: () => { lang: Language; setLang: Dispatch>; }; $lang: StatefulObservable; useTranslation: UseTranslation; useResolveLocalizedString(params?: { /** default: false */ labelWhenMismatchingLanguage?: false; }): { resolveLocalizedString: (localizedString: LocalizedString) => string; }; useResolveLocalizedString(params?: { /** default: false */ labelWhenMismatchingLanguage: true | { ifStringAssumeLanguage: Language; }; }): { resolveLocalizedString: (localizedString: LocalizedString) => JSX.Element; resolveLocalizedStringDetailed: (localizedString: LocalizedString) => { langAttrValue: Language | undefined; str: string; }; }; resolveLocalizedString(localizedString: LocalizedString, options?: { /** default: false */ labelWhenMismatchingLanguage?: false; }): string; resolveLocalizedString(localizedString: LocalizedString, options?: { /** default: false */ labelWhenMismatchingLanguage: true | { ifStringAssumeLanguage: Language; }; }): JSX.Element; getTranslation: (componentName: ComponentName) => { t: TranslationFunction; }; $readyLang: StatefulReadonlyObservable; }; export type GenericTranslations = L extends FallbackLanguage ? ComponentKeyToRecord : WithOptionalKeys>; type ValueOrAsyncGetter = T | (() => Promise); /** @see */ export declare function createI18nApi(): (params: { languages: readonly Language[]; fallbackLanguage: FallbackLanguage; }, translations: { [L in Language]: ValueOrAsyncGetter>; }) => I18nApi; export {};