You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					106 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					106 lines
				
				3.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import React from 'react';
							 | 
						||
| 
								 | 
							
								import { Namespace, DefaultNamespace, TFuncKey, Trans } from '.';
							 | 
						||
| 
								 | 
							
								import { i18n } from 'i18next';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export { Trans };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare module 'react-i18next/icu.macro' {
							 | 
						||
| 
								 | 
							
								  export interface PluralSubProps<
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  > {
							 | 
						||
| 
								 | 
							
								    children?: never;
							 | 
						||
| 
								 | 
							
								    i18nKey?: K;
							 | 
						||
| 
								 | 
							
								    i18n?: i18n;
							 | 
						||
| 
								 | 
							
								    ns?: N;
							 | 
						||
| 
								 | 
							
								    count: number;
							 | 
						||
| 
								 | 
							
								    values?: {};
							 | 
						||
| 
								 | 
							
								    zero?: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								    one?: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								    two?: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								    few?: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								    many?: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								    other: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type PluralProps<
							 | 
						||
| 
								 | 
							
								    T,
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  > = {
							 | 
						||
| 
								 | 
							
								    [P in keyof T]: P extends keyof PluralSubProps<K, N>
							 | 
						||
| 
								 | 
							
								      ? // support the standard properties of Plural
							 | 
						||
| 
								 | 
							
								        PluralSubProps<K, N>[P]
							 | 
						||
| 
								 | 
							
								      : // this supports infinite $0={..} or $123={..}
							 | 
						||
| 
								 | 
							
								      // technically it also supports $-1={..} and $2.3={..} but we don't need to
							 | 
						||
| 
								 | 
							
								      // worry since that's invalid syntax.
							 | 
						||
| 
								 | 
							
								      P extends `$${number}`
							 | 
						||
| 
								 | 
							
								      ? string | React.ReactElement
							 | 
						||
| 
								 | 
							
								      : never;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface SelectSubProps {
							 | 
						||
| 
								 | 
							
								    [key: string]: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface NoChildren {
							 | 
						||
| 
								 | 
							
								    children?: never;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface SelectRequiredProps<
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  > extends NoChildren {
							 | 
						||
| 
								 | 
							
								    i18nKey?: K;
							 | 
						||
| 
								 | 
							
								    i18n?: i18n;
							 | 
						||
| 
								 | 
							
								    ns?: N;
							 | 
						||
| 
								 | 
							
								    other: string | React.ReactElement;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // defining it this way ensures that `other` is always defined, but allows
							 | 
						||
| 
								 | 
							
								  // unlimited other select types.
							 | 
						||
| 
								 | 
							
								  type SelectProps<
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  > = SelectSubProps & SelectRequiredProps<K, N>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function Plural<
							 | 
						||
| 
								 | 
							
								    T,
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  >(props: PluralProps<T, K, N> & NoChildren): React.ReactElement;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function SelectOrdinal<
							 | 
						||
| 
								 | 
							
								    T,
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  >(props: PluralProps<T, K, N> & NoChildren): React.ReactElement;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function Select<
							 | 
						||
| 
								 | 
							
								    K extends TFuncKey<N> extends infer A ? A : never,
							 | 
						||
| 
								 | 
							
								    N extends Namespace = DefaultNamespace
							 | 
						||
| 
								 | 
							
								  >(props: SelectProps<K, N>): React.ReactElement;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function date(strings: TemplateStringsArray, variable: Date): string;
							 | 
						||
| 
								 | 
							
								  function time(strings: TemplateStringsArray, variable: Date): string;
							 | 
						||
| 
								 | 
							
								  function number(strings: TemplateStringsArray, variable: number): string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type ValidInterpolations = React.ReactElement | string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function plural(
							 | 
						||
| 
								 | 
							
								    strings: TemplateStringsArray,
							 | 
						||
| 
								 | 
							
								    variable: number,
							 | 
						||
| 
								 | 
							
								    ...args: ValidInterpolations[]
							 | 
						||
| 
								 | 
							
								  ): string;
							 | 
						||
| 
								 | 
							
								  function selectOrdinal(
							 | 
						||
| 
								 | 
							
								    strings: TemplateStringsArray,
							 | 
						||
| 
								 | 
							
								    variable: number,
							 | 
						||
| 
								 | 
							
								    ...args: ValidInterpolations[]
							 | 
						||
| 
								 | 
							
								  ): string;
							 | 
						||
| 
								 | 
							
								  function select(
							 | 
						||
| 
								 | 
							
								    strings: TemplateStringsArray,
							 | 
						||
| 
								 | 
							
								    variable: string,
							 | 
						||
| 
								 | 
							
								    ...args: ValidInterpolations[]
							 | 
						||
| 
								 | 
							
								  ): string;
							 | 
						||
| 
								 | 
							
								}
							 |