lib.es2020.intl.d.ts 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. /*! *****************************************************************************
  2. Copyright (c) Microsoft Corporation. All rights reserved.
  3. Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  4. this file except in compliance with the License. You may obtain a copy of the
  5. License at http://www.apache.org/licenses/LICENSE-2.0
  6. THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  7. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  8. WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  9. MERCHANTABLITY OR NON-INFRINGEMENT.
  10. See the Apache Version 2.0 License for specific language governing permissions
  11. and limitations under the License.
  12. ***************************************************************************** */
  13. /// <reference no-default-lib="true"/>
  14. /// <reference lib="es2018.intl" />
  15. declare namespace Intl {
  16. /**
  17. * A string that is a valid [Unicode BCP 47 Locale Identifier](https://unicode.org/reports/tr35/#Unicode_locale_identifier).
  18. *
  19. * For example: "fa", "es-MX", "zh-Hant-TW".
  20. *
  21. * See [MDN - Intl - locales argument](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).
  22. */
  23. type UnicodeBCP47LocaleIdentifier = string;
  24. /**
  25. * Unit to use in the relative time internationalized message.
  26. *
  27. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format#Parameters).
  28. */
  29. type RelativeTimeFormatUnit =
  30. | "year"
  31. | "years"
  32. | "quarter"
  33. | "quarters"
  34. | "month"
  35. | "months"
  36. | "week"
  37. | "weeks"
  38. | "day"
  39. | "days"
  40. | "hour"
  41. | "hours"
  42. | "minute"
  43. | "minutes"
  44. | "second"
  45. | "seconds";
  46. /**
  47. * Value of the `unit` property in objects returned by
  48. * `Intl.RelativeTimeFormat.prototype.formatToParts()`. `formatToParts` and
  49. * `format` methods accept either singular or plural unit names as input,
  50. * but `formatToParts` only outputs singular (e.g. "day") not plural (e.g.
  51. * "days").
  52. *
  53. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts#Using_formatToParts).
  54. */
  55. type RelativeTimeFormatUnitSingular =
  56. | "year"
  57. | "quarter"
  58. | "month"
  59. | "week"
  60. | "day"
  61. | "hour"
  62. | "minute"
  63. | "second";
  64. /**
  65. * The locale matching algorithm to use.
  66. *
  67. * [MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation).
  68. */
  69. type RelativeTimeFormatLocaleMatcher = "lookup" | "best fit";
  70. /**
  71. * The format of output message.
  72. *
  73. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).
  74. */
  75. type RelativeTimeFormatNumeric = "always" | "auto";
  76. /**
  77. * The length of the internationalized message.
  78. *
  79. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).
  80. */
  81. type RelativeTimeFormatStyle = "long" | "short" | "narrow";
  82. /**
  83. * The locale or locales to use
  84. *
  85. * See [MDN - Intl - locales argument](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).
  86. */
  87. type LocalesArgument = UnicodeBCP47LocaleIdentifier | Locale | readonly (UnicodeBCP47LocaleIdentifier | Locale)[] | undefined;
  88. /**
  89. * An object with some or all of properties of `options` parameter
  90. * of `Intl.RelativeTimeFormat` constructor.
  91. *
  92. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).
  93. */
  94. interface RelativeTimeFormatOptions {
  95. /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */
  96. localeMatcher?: RelativeTimeFormatLocaleMatcher;
  97. /** The format of output message. */
  98. numeric?: RelativeTimeFormatNumeric;
  99. /** The length of the internationalized message. */
  100. style?: RelativeTimeFormatStyle;
  101. }
  102. /**
  103. * An object with properties reflecting the locale
  104. * and formatting options computed during initialization
  105. * of the `Intl.RelativeTimeFormat` object
  106. *
  107. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions#Description).
  108. */
  109. interface ResolvedRelativeTimeFormatOptions {
  110. locale: UnicodeBCP47LocaleIdentifier;
  111. style: RelativeTimeFormatStyle;
  112. numeric: RelativeTimeFormatNumeric;
  113. numberingSystem: string;
  114. }
  115. /**
  116. * An object representing the relative time format in parts
  117. * that can be used for custom locale-aware formatting.
  118. *
  119. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts#Using_formatToParts).
  120. */
  121. type RelativeTimeFormatPart =
  122. | {
  123. type: "literal";
  124. value: string;
  125. }
  126. | {
  127. type: Exclude<NumberFormatPartTypes, "literal">;
  128. value: string;
  129. unit: RelativeTimeFormatUnitSingular;
  130. };
  131. interface RelativeTimeFormat {
  132. /**
  133. * Formats a value and a unit according to the locale
  134. * and formatting options of the given
  135. * [`Intl.RelativeTimeFormat`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat)
  136. * object.
  137. *
  138. * While this method automatically provides the correct plural forms,
  139. * the grammatical form is otherwise as neutral as possible.
  140. *
  141. * It is the caller's responsibility to handle cut-off logic
  142. * such as deciding between displaying "in 7 days" or "in 1 week".
  143. * This API does not support relative dates involving compound units.
  144. * e.g "in 5 days and 4 hours".
  145. *
  146. * @param value - Numeric value to use in the internationalized relative time message
  147. *
  148. * @param unit - [Unit](https://tc39.es/ecma402/#sec-singularrelativetimeunit) to use in the relative time internationalized message.
  149. *
  150. * @throws `RangeError` if `unit` was given something other than `unit` possible values
  151. *
  152. * @returns {string} Internationalized relative time message as string
  153. *
  154. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format).
  155. */
  156. format(value: number, unit: RelativeTimeFormatUnit): string;
  157. /**
  158. * Returns an array of objects representing the relative time format in parts that can be used for custom locale-aware formatting.
  159. *
  160. * @param value - Numeric value to use in the internationalized relative time message
  161. *
  162. * @param unit - [Unit](https://tc39.es/ecma402/#sec-singularrelativetimeunit) to use in the relative time internationalized message.
  163. *
  164. * @throws `RangeError` if `unit` was given something other than `unit` possible values
  165. *
  166. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts).
  167. */
  168. formatToParts(value: number, unit: RelativeTimeFormatUnit): RelativeTimeFormatPart[];
  169. /**
  170. * Provides access to the locale and options computed during initialization of this `Intl.RelativeTimeFormat` object.
  171. *
  172. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions).
  173. */
  174. resolvedOptions(): ResolvedRelativeTimeFormatOptions;
  175. }
  176. /**
  177. * The [`Intl.RelativeTimeFormat`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat)
  178. * object is a constructor for objects that enable language-sensitive relative time formatting.
  179. *
  180. * [Compatibility](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat#Browser_compatibility).
  181. */
  182. const RelativeTimeFormat: {
  183. /**
  184. * Creates [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat) objects
  185. *
  186. * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.
  187. * For the general form and interpretation of the locales argument,
  188. * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).
  189. *
  190. * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters)
  191. * with some or all of options of `RelativeTimeFormatOptions`.
  192. *
  193. * @returns [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat) object.
  194. *
  195. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat).
  196. */
  197. new (
  198. locales?: LocalesArgument,
  199. options?: RelativeTimeFormatOptions,
  200. ): RelativeTimeFormat;
  201. /**
  202. * Returns an array containing those of the provided locales
  203. * that are supported in date and time formatting
  204. * without having to fall back to the runtime's default locale.
  205. *
  206. * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.
  207. * For the general form and interpretation of the locales argument,
  208. * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).
  209. *
  210. * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters)
  211. * with some or all of options of the formatting.
  212. *
  213. * @returns An array containing those of the provided locales
  214. * that are supported in date and time formatting
  215. * without having to fall back to the runtime's default locale.
  216. *
  217. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf).
  218. */
  219. supportedLocalesOf(
  220. locales?: LocalesArgument,
  221. options?: RelativeTimeFormatOptions,
  222. ): UnicodeBCP47LocaleIdentifier[];
  223. };
  224. interface NumberFormatOptionsStyleRegistry {
  225. unit: never;
  226. }
  227. interface NumberFormatOptionsCurrencyDisplayRegistry {
  228. narrowSymbol: never;
  229. }
  230. interface NumberFormatOptionsSignDisplayRegistry {
  231. auto: never;
  232. never: never;
  233. always: never;
  234. exceptZero: never;
  235. }
  236. type NumberFormatOptionsSignDisplay = keyof NumberFormatOptionsSignDisplayRegistry;
  237. interface NumberFormatOptions {
  238. numberingSystem?: string | undefined;
  239. compactDisplay?: "short" | "long" | undefined;
  240. notation?: "standard" | "scientific" | "engineering" | "compact" | undefined;
  241. signDisplay?: NumberFormatOptionsSignDisplay | undefined;
  242. unit?: string | undefined;
  243. unitDisplay?: "short" | "long" | "narrow" | undefined;
  244. currencySign?: "standard" | "accounting" | undefined;
  245. }
  246. interface ResolvedNumberFormatOptions {
  247. compactDisplay?: "short" | "long";
  248. notation: "standard" | "scientific" | "engineering" | "compact";
  249. signDisplay: NumberFormatOptionsSignDisplay;
  250. unit?: string;
  251. unitDisplay?: "short" | "long" | "narrow";
  252. currencySign?: "standard" | "accounting";
  253. }
  254. interface NumberFormatPartTypeRegistry {
  255. compact: never;
  256. exponentInteger: never;
  257. exponentMinusSign: never;
  258. exponentSeparator: never;
  259. unit: never;
  260. unknown: never;
  261. }
  262. interface DateTimeFormatOptions {
  263. calendar?: string | undefined;
  264. dayPeriod?: "narrow" | "short" | "long" | undefined;
  265. numberingSystem?: string | undefined;
  266. dateStyle?: "full" | "long" | "medium" | "short" | undefined;
  267. timeStyle?: "full" | "long" | "medium" | "short" | undefined;
  268. hourCycle?: "h11" | "h12" | "h23" | "h24" | undefined;
  269. }
  270. type LocaleHourCycleKey = "h12" | "h23" | "h11" | "h24";
  271. type LocaleCollationCaseFirst = "upper" | "lower" | "false";
  272. interface LocaleOptions {
  273. /** A string containing the language, and the script and region if available. */
  274. baseName?: string;
  275. /** The part of the Locale that indicates the locale's calendar era. */
  276. calendar?: string;
  277. /** Flag that defines whether case is taken into account for the locale's collation rules. */
  278. caseFirst?: LocaleCollationCaseFirst;
  279. /** The collation type used for sorting */
  280. collation?: string;
  281. /** The time keeping format convention used by the locale. */
  282. hourCycle?: LocaleHourCycleKey;
  283. /** The primary language subtag associated with the locale. */
  284. language?: string;
  285. /** The numeral system used by the locale. */
  286. numberingSystem?: string;
  287. /** Flag that defines whether the locale has special collation handling for numeric characters. */
  288. numeric?: boolean;
  289. /** The region of the world (usually a country) associated with the locale. Possible values are region codes as defined by ISO 3166-1. */
  290. region?: string;
  291. /** The script used for writing the particular language used in the locale. Possible values are script codes as defined by ISO 15924. */
  292. script?: string;
  293. }
  294. interface Locale extends LocaleOptions {
  295. /** A string containing the language, and the script and region if available. */
  296. baseName: string;
  297. /** The primary language subtag associated with the locale. */
  298. language: string;
  299. /** Gets the most likely values for the language, script, and region of the locale based on existing values. */
  300. maximize(): Locale;
  301. /** Attempts to remove information about the locale that would be added by calling `Locale.maximize()`. */
  302. minimize(): Locale;
  303. /** Returns the locale's full locale identifier string. */
  304. toString(): UnicodeBCP47LocaleIdentifier;
  305. }
  306. /**
  307. * Constructor creates [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale)
  308. * objects
  309. *
  310. * @param tag - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646).
  311. * For the general form and interpretation of the locales argument,
  312. * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).
  313. *
  314. * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/Locale#Parameters) with some or all of options of the locale.
  315. *
  316. * @returns [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) object.
  317. *
  318. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale).
  319. */
  320. const Locale: {
  321. new (tag: UnicodeBCP47LocaleIdentifier | Locale, options?: LocaleOptions): Locale;
  322. };
  323. type DisplayNamesFallback =
  324. | "code"
  325. | "none";
  326. type DisplayNamesType =
  327. | "language"
  328. | "region"
  329. | "script"
  330. | "calendar"
  331. | "dateTimeField"
  332. | "currency";
  333. type DisplayNamesLanguageDisplay =
  334. | "dialect"
  335. | "standard";
  336. interface DisplayNamesOptions {
  337. localeMatcher?: RelativeTimeFormatLocaleMatcher;
  338. style?: RelativeTimeFormatStyle;
  339. type: DisplayNamesType;
  340. languageDisplay?: DisplayNamesLanguageDisplay;
  341. fallback?: DisplayNamesFallback;
  342. }
  343. interface ResolvedDisplayNamesOptions {
  344. locale: UnicodeBCP47LocaleIdentifier;
  345. style: RelativeTimeFormatStyle;
  346. type: DisplayNamesType;
  347. fallback: DisplayNamesFallback;
  348. languageDisplay?: DisplayNamesLanguageDisplay;
  349. }
  350. interface DisplayNames {
  351. /**
  352. * Receives a code and returns a string based on the locale and options provided when instantiating
  353. * [`Intl.DisplayNames()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames)
  354. *
  355. * @param code The `code` to provide depends on the `type` passed to display name during creation:
  356. * - If the type is `"region"`, code should be either an [ISO-3166 two letters region code](https://www.iso.org/iso-3166-country-codes.html),
  357. * or a [three digits UN M49 Geographic Regions](https://unstats.un.org/unsd/methodology/m49/).
  358. * - If the type is `"script"`, code should be an [ISO-15924 four letters script code](https://unicode.org/iso15924/iso15924-codes.html).
  359. * - If the type is `"language"`, code should be a `languageCode` ["-" `scriptCode`] ["-" `regionCode` ] *("-" `variant` )
  360. * subsequence of the unicode_language_id grammar in [UTS 35's Unicode Language and Locale Identifiers grammar](https://unicode.org/reports/tr35/#Unicode_language_identifier).
  361. * `languageCode` is either a two letters ISO 639-1 language code or a three letters ISO 639-2 language code.
  362. * - If the type is `"currency"`, code should be a [3-letter ISO 4217 currency code](https://www.iso.org/iso-4217-currency-codes.html).
  363. *
  364. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/of).
  365. */
  366. of(code: string): string | undefined;
  367. /**
  368. * Returns a new object with properties reflecting the locale and style formatting options computed during the construction of the current
  369. * [`Intl/DisplayNames`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames) object.
  370. *
  371. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/resolvedOptions).
  372. */
  373. resolvedOptions(): ResolvedDisplayNamesOptions;
  374. }
  375. /**
  376. * The [`Intl.DisplayNames()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames)
  377. * object enables the consistent translation of language, region and script display names.
  378. *
  379. * [Compatibility](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames#browser_compatibility).
  380. */
  381. const DisplayNames: {
  382. prototype: DisplayNames;
  383. /**
  384. * @param locales A string with a BCP 47 language tag, or an array of such strings.
  385. * For the general form and interpretation of the `locales` argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)
  386. * page.
  387. *
  388. * @param options An object for setting up a display name.
  389. *
  390. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames).
  391. */
  392. new (locales: LocalesArgument, options: DisplayNamesOptions): DisplayNames;
  393. /**
  394. * Returns an array containing those of the provided locales that are supported in display names without having to fall back to the runtime's default locale.
  395. *
  396. * @param locales A string with a BCP 47 language tag, or an array of such strings.
  397. * For the general form and interpretation of the `locales` argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)
  398. * page.
  399. *
  400. * @param options An object with a locale matcher.
  401. *
  402. * @returns An array of strings representing a subset of the given locale tags that are supported in display names without having to fall back to the runtime's default locale.
  403. *
  404. * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/supportedLocalesOf).
  405. */
  406. supportedLocalesOf(locales?: LocalesArgument, options?: { localeMatcher?: RelativeTimeFormatLocaleMatcher; }): UnicodeBCP47LocaleIdentifier[];
  407. };
  408. interface CollatorConstructor {
  409. new (locales?: LocalesArgument, options?: CollatorOptions): Collator;
  410. (locales?: LocalesArgument, options?: CollatorOptions): Collator;
  411. supportedLocalesOf(locales: LocalesArgument, options?: CollatorOptions): string[];
  412. }
  413. interface DateTimeFormatConstructor {
  414. new (locales?: LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;
  415. (locales?: LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;
  416. supportedLocalesOf(locales: LocalesArgument, options?: DateTimeFormatOptions): string[];
  417. }
  418. interface NumberFormatConstructor {
  419. new (locales?: LocalesArgument, options?: NumberFormatOptions): NumberFormat;
  420. (locales?: LocalesArgument, options?: NumberFormatOptions): NumberFormat;
  421. supportedLocalesOf(locales: LocalesArgument, options?: NumberFormatOptions): string[];
  422. }
  423. interface PluralRulesConstructor {
  424. new (locales?: LocalesArgument, options?: PluralRulesOptions): PluralRules;
  425. (locales?: LocalesArgument, options?: PluralRulesOptions): PluralRules;
  426. supportedLocalesOf(locales: LocalesArgument, options?: { localeMatcher?: "lookup" | "best fit"; }): string[];
  427. }
  428. }