i18nizeelement 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,12 +5,15 @@
5
5
 
6
6
  // Private vars - star
7
7
  const _regexEscape = /([\.\*\+\^\$\[\]\\\(\)\|\{\}\,\-\:\?])/g; // eslint-disable-line no-useless-escape
8
- const _regexParseLocale = /^([a-zA-Z]+)([-a-zA-Z]*)$/;
8
+ const _regexParseLocale = /^([a-zA-Z]{2,3}|[a-zA-Z]{5,8})(-[a-zA-Z]{4})?(-(?:[a-zA-Z]{2}|\d{3}))?(-(?:[a-zA-Z\d]{5,8}|\d[a-zA-Z\d]{3}))?$/;
9
9
  // Private vars - end
10
10
 
11
11
  class Locale {
12
12
  // eslint-disable-line consistent-this
13
13
 
14
+ /**
15
+ * @param {string} locale
16
+ */
14
17
  constructor(locale) {
15
18
  if (typeof locale !== 'string') {
16
19
  throw new TypeError('A string argument is expected');
@@ -22,27 +25,53 @@ class Locale {
22
25
  }
23
26
 
24
27
  // Private functions - star
28
+
29
+ /**
30
+ * @param {null|undefined|string} [str]
31
+ * @returns {null|undefined|string}
32
+ */
25
33
  static _escapeRegExpPattern(str) {
26
34
  if (typeof str !== 'string') {
27
35
  return str;
28
36
  }
29
37
  return str.replace(_regexEscape, '\\$1');
30
38
  }
39
+
40
+ /**
41
+ * @param {string|null} [str]
42
+ * @param {boolean} [reserveReturnValue]
43
+ */
31
44
  static _toLowerCase(str, reserveReturnValue) {
32
45
  if (typeof str !== 'string') {
33
46
  return reserveReturnValue && str;
34
47
  }
35
48
  return str.toLowerCase();
36
49
  }
50
+
51
+ /**
52
+ * @param {string|null} [str]
53
+ * @param {boolean} [reserveReturnValue]
54
+ */
37
55
  static _toUpperCase(str, reserveReturnValue) {
38
56
  if (typeof str !== 'string') {
39
57
  return reserveReturnValue && str;
40
58
  }
41
59
  return str.toUpperCase();
42
60
  }
61
+
62
+ /**
63
+ * @param {string|null} [str]
64
+ * @param {string|null|string[]|boolean} [delimiter]
65
+ * @param {boolean} [reserveReturnValue]
66
+ */
43
67
  static _trim(str, delimiter, reserveReturnValue) {
68
+ /** @type {string[]} */
44
69
  const patterns = [];
45
70
  let regexp;
71
+
72
+ /**
73
+ * @param {string|null|undefined} pattern
74
+ */
46
75
  const addPatterns = function (pattern) {
47
76
  // Build trim RegExp pattern and push it to patterns array
48
77
  patterns.push('^' + pattern + '+|' + pattern + '+$');
@@ -54,14 +83,14 @@ class Locale {
54
83
  delimiter = null;
55
84
  }
56
85
  if (typeof str !== 'string') {
57
- return reserveReturnValue && str;
86
+ return reserveReturnValue ? str : undefined;
58
87
  }
59
88
 
60
89
  // Trim based on delimiter array values
61
90
  if (Array.isArray(delimiter)) {
62
91
  // Loop through delimiter array
63
92
  delimiter.map(item => {
64
- // Escape delimiter to be valid RegExp Pattern
93
+ // Escape delimiter to be valid RegExp pattern
65
94
  const pattern = this._escapeRegExpPattern(item);
66
95
  // Push pattern to patterns array
67
96
  addPatterns(pattern);
@@ -70,13 +99,13 @@ class Locale {
70
99
 
71
100
  // Trim based on delimiter string value
72
101
  if (typeof delimiter === 'string') {
73
- // Escape delimiter to be valid RegExp Pattern
102
+ // Escape delimiter to be valid RegExp pattern
74
103
  const patternDelimiter = this._escapeRegExpPattern(delimiter);
75
104
  // push pattern to patterns array
76
105
  addPatterns(patternDelimiter);
77
106
  }
78
107
 
79
- // If delimiter is not defined, Trim white spaces
108
+ // If delimiter is not defined, trim white spaces
80
109
  if (!delimiter) {
81
110
  // Push white space pattern to patterns array
82
111
  addPatterns('\\s');
@@ -95,23 +124,44 @@ class Locale {
95
124
  // Return trim string
96
125
  return str;
97
126
  }
127
+
128
+ /**
129
+ * @typedef {{
130
+ * lang: string,
131
+ * script: string|undefined,
132
+ * countryCode: string|undefined
133
+ * }} LocaleInfo
134
+ */
135
+
136
+ /**
137
+ * @param {string|null} [strLocale]
138
+ * @returns {undefined|LocaleInfo}
139
+ */
98
140
  static _parseLocale(strLocale) {
99
- var matches = _regexParseLocale.exec(strLocale); // exec regex
100
- let parsedLocale;
141
+ if (typeof strLocale !== 'string') {
142
+ return undefined;
143
+ }
144
+ const matches = _regexParseLocale.exec(strLocale); // exec regex
101
145
  let lang;
146
+ let script;
102
147
  let countryCode;
103
148
  if (!strLocale || !matches) {
104
- return;
149
+ return undefined;
105
150
  }
106
151
 
152
+ // fix script string by trimming '-' and '_'
153
+ const matches2 = this._trim(matches[2], ['-', '_']);
154
+
107
155
  // fix countryCode string by trimming '-' and '_'
108
- matches[2] = this._trim(matches[2], ['-', '_']);
109
- lang = this._toLowerCase(matches[1]);
110
- countryCode = this._toUpperCase(matches[2]) || countryCode;
156
+ const matches3 = this._trim(matches[3], ['-', '_']);
157
+ lang = /** @type {string} */this._toLowerCase(matches[1]);
158
+ script = this._toLowerCase(matches2) || script;
159
+ countryCode = this._toUpperCase(matches3) || countryCode;
111
160
 
112
- // object with lang, countryCode properties
113
- parsedLocale = {
161
+ // object with lang, script properties
162
+ const parsedLocale = {
114
163
  lang,
164
+ script,
115
165
  countryCode
116
166
  };
117
167
 
@@ -121,10 +171,17 @@ class Locale {
121
171
  // Private functions - End
122
172
 
123
173
  _isRtlLang() {
124
- const objLocale = this.constructor._parseLocale(this._locale);
174
+ const {
175
+ lang,
176
+ script
177
+ } = /** @type {LocaleInfo} */
178
+ Locale._parseLocale(this._locale);
179
+ if (script) {
180
+ return Locale._RTL_SCRIPTS.indexOf(script) >= 0;
181
+ }
125
182
 
126
183
  // return true if the intel string lang exists in the BID RTL LANGS array else return false
127
- return this.constructor._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0;
184
+ return Locale._BIDI_RTL_LANGS.indexOf(lang) >= 0;
128
185
  }
129
186
 
130
187
  // Public functions - star
@@ -138,39 +195,245 @@ class Locale {
138
195
 
139
196
  // Public functions - End
140
197
  }
198
+ Locale._RTL_SCRIPTS = ['adlm', 'arab', 'armi', 'avst', 'chrs', 'cprt', 'elym', 'hatr', 'hebr', 'hung', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'ougr', 'palm', 'phli', 'phlp', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'thaa', 'yezi'];
141
199
 
142
200
  // Why not working as static property
143
201
  Locale._BIDI_RTL_LANGS = [
144
202
  // Const BIDI_RTL_LANGS Array
145
203
  // BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left
146
204
  // Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)
147
- 'ae', /* Avestan */
148
- 'ar', /* 'العربية', Arabic */
149
- 'arc', /* Aramaic */
150
- 'bcc', /* 'بلوچی مکرانی', Southern Balochi */
151
- 'bqi', /* 'بختياري', Bakthiari */
152
- 'ckb', /* 'Soranî / کوردی', Sorani */
153
- 'dv', /* Dhivehi */
154
- 'fa', /* 'فارسی', Persian */
155
- 'glk', /* 'گیلکی', Gilaki */
156
- 'he', /* 'עברית', Hebrew */
157
- 'ku', /* 'Kurdî / كوردی', Kurdish */
158
- 'mzn', /* 'مازِرونی', Mazanderani */
159
- 'nqo', /* N'Ko */
160
- 'pnb', /* 'پنجابی', Western Punjabi */
161
- 'prs', /* 'دری', Darī */
162
- 'ps', /* 'پښتو', Pashto, */
163
- 'sd', /* 'سنڌي', Sindhi */
164
- 'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */
165
- 'ur', /* 'اردو', Urdu */
166
- 'yi' /* 'ייִדיש', Yiddish */];
205
+ 'ae',
206
+ // Avestan
207
+ 'aeb',
208
+ // Tunisian Arabic
209
+ 'ajt',
210
+ // Tunisian Arabic (old)
211
+ 'apc',
212
+ // Levantine Arabic
213
+ 'apd',
214
+ // Sudanese Arabic
215
+ 'ar',
216
+ // 'العربية', Arabic
217
+ 'ara',
218
+ // Arabic
219
+ 'arb',
220
+ // Standard Arabic
221
+ 'arc',
222
+ // Aramaic
223
+ 'arq',
224
+ // Algerian Arabic
225
+ 'ars',
226
+ // Najdi Arabic
227
+ 'ary',
228
+ // Moroccan Arabic
229
+ 'arz',
230
+ // Egyptian Arabic
231
+ 'ave',
232
+ // Avestan
233
+ 'avl',
234
+ // Eastern Egyptian Bedawi Arabic
235
+ 'bal',
236
+ // Baluchi
237
+ 'bcc',
238
+ // 'بلوچی مکرانی', Southern Balochi
239
+ 'bej',
240
+ // Beja; Bedawiyet
241
+ 'bft',
242
+ // Balti
243
+ 'bgn',
244
+ // Western Balochi
245
+ 'bqi',
246
+ // 'بختياري', Bakthiari
247
+ 'brh',
248
+ // Brahui
249
+ 'cja',
250
+ // Cham, Western
251
+ 'ckb',
252
+ // 'Soranî / کوردی', Sorani
253
+ 'cld',
254
+ // Chaldean Neo-Aramaic
255
+ 'dcc',
256
+ // Deccan
257
+ 'dgl',
258
+ // Andaandi
259
+ 'div',
260
+ // Divehi
261
+ 'drw',
262
+ // Darwazi (old)
263
+ 'dv',
264
+ // Dhivehi
265
+ 'fa',
266
+ // 'فارسی', Persian
267
+ 'fas',
268
+ // Persian
269
+ 'fia',
270
+ // Nobiin
271
+ 'fub',
272
+ // Fulfulde (Adamawa)
273
+ 'gbz',
274
+ // Dari, Zoroastrian
275
+ 'gjk',
276
+ // Koli, Kachi
277
+ 'gju',
278
+ // Gujari
279
+ 'glk',
280
+ // 'گیلکی', Gilaki
281
+ 'grc',
282
+ // Greek, Ancient (to 1453)
283
+ 'gwc',
284
+ // Kalami
285
+ 'gwt',
286
+ // Gawar-Bati
287
+ 'haz',
288
+ // Hazaragi
289
+ 'he',
290
+ // 'עברית', Hebrew
291
+ 'heb',
292
+ // Hebrew
293
+ 'hnd',
294
+ // Hindko, Southern
295
+ 'hno',
296
+ // Hindko, Northern
297
+ 'iw',
298
+ // Hebrew (old)
299
+ 'ji',
300
+ // Yiddish (old)
301
+ 'kas',
302
+ // Kashmiri
303
+ 'kby',
304
+ // Kanuri, Manga
305
+ 'khw',
306
+ // Khowar
307
+ 'ks',
308
+ // Kashmiri
309
+ 'kvx',
310
+ // Koli, Parkari
311
+ 'kxp',
312
+ // Koli, Wadiyara
313
+ 'kzh',
314
+ // Kenuzi-Dongola (old)
315
+ 'lad',
316
+ // Ladino
317
+ 'lah',
318
+ // Lahnda
319
+ 'lki',
320
+ // Laki
321
+ 'lrc',
322
+ // Luri, Northern
323
+ 'luz',
324
+ // Luri, Southern
325
+ 'mde',
326
+ // Maba (Chad)
327
+ 'mfa',
328
+ // Malay, Pattani
329
+ 'mki',
330
+ // Dhatki
331
+ 'mvy',
332
+ // Kohistani, Indus
333
+ 'myz',
334
+ // Mandaic, Classical
335
+ 'mzn',
336
+ // 'مازِرونی', Mazanderani
337
+ 'nqo',
338
+ // N'Ko
339
+ 'oru',
340
+ // Ormuri
341
+ 'ota',
342
+ // Turkish, Ottoman (1500–1928)
343
+ 'otk',
344
+ // Turkish, Old
345
+ 'oui',
346
+ // Uighur, Old
347
+ 'pal',
348
+ // Pahlavi
349
+ 'pbu',
350
+ // Pashto, Northern
351
+ 'per',
352
+ // Persian
353
+ 'pes',
354
+ // Western Farsi
355
+ 'phl',
356
+ // Phalura
357
+ 'phn',
358
+ // Phoenician
359
+ 'pnb',
360
+ // 'پنجابی', Western Punjabi
361
+ 'pra',
362
+ // Prakrit languages
363
+ 'prd',
364
+ // Dari (Persian)
365
+ 'prs',
366
+ // 'دری', Darī
367
+ 'ps',
368
+ // 'پښتو', Pashto,
369
+ 'pus',
370
+ // Pushto
371
+ 'rhg',
372
+ // Rohingya
373
+ 'rmt',
374
+ // Domari
375
+ 'scl',
376
+ // Shina
377
+ 'sd',
378
+ // 'سنڌي', Sindhi
379
+ 'sdh',
380
+ // Kurdish, Southern
381
+ 'shu',
382
+ // Arabic (Chadian)
383
+ 'skr',
384
+ // Saraiki
385
+ 'smp',
386
+ // Samaritan
387
+ 'snd',
388
+ // Sindhi
389
+ 'sog',
390
+ // Sogdian
391
+ 'swb',
392
+ // Comorian
393
+ 'syr',
394
+ // Syriac
395
+ 'tnf',
396
+ // Tangshewi (old)
397
+ 'trw',
398
+ // Torwali
399
+ 'ug',
400
+ // 'Uyghurche / ئۇيغۇرچە', Uyghur
401
+ 'uig',
402
+ // Uighur
403
+ 'ur',
404
+ // 'اردو', Urdu
405
+ 'urd',
406
+ // Urdu
407
+ 'wni',
408
+ // Comorian, Ndzwani
409
+ 'xco',
410
+ // Chorasmian
411
+ 'xld',
412
+ // Lydian
413
+ 'xmn',
414
+ // Manichaean Middle Persian
415
+ 'xmr',
416
+ // Meroitic
417
+ 'xna',
418
+ // North Arabian, Ancient
419
+ 'xpr',
420
+ // Parthian
421
+ 'xsa',
422
+ // Sabaean
423
+ 'ydd',
424
+ // Yiddish, Eastern
425
+ 'yi',
426
+ // 'ייִדיש', Yiddish
427
+ 'yid',
428
+ // Yiddish
429
+ 'zdj' // Comorian, Ngazidja
430
+ ];
167
431
 
168
432
  if (typeof Intl === 'undefined') {
433
+ // @ts-expect-error Not a complete polyfill
169
434
  globalThis.Intl = {};
170
435
  }
171
- if (typeof Intl.Locale === 'undefined') {
172
- Intl.Locale = Locale;
173
- }
436
+ Intl.Locale = Locale;
174
437
 
175
438
  // e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`
176
439
 
@@ -1 +1 @@
1
- {"version":3,"file":"i18nizeelement.es6.js","sources":["../node_modules/.pnpm/intl-locale-textinfo-polyfill@1.0.1/node_modules/intl-locale-textinfo-polyfill/lib/Locale.js","../node_modules/.pnpm/intl-locale-textinfo-polyfill@1.0.1/node_modules/intl-locale-textinfo-polyfill/lib/polyfill.js","../src/index.js"],"sourcesContent":["/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n// Private vars - star\nconst _regexEscape = /([\\.\\*\\+\\^\\$\\[\\]\\\\\\(\\)\\|\\{\\}\\,\\-\\:\\?])/g; // eslint-disable-line no-useless-escape\nconst _regexParseLocale = /^([a-zA-Z]+)([-a-zA-Z]*)$/;\n// Private vars - end\n\nclass Locale { // eslint-disable-line consistent-this\n\n constructor (locale) {\n if (typeof locale !== 'string') {\n throw new TypeError('A string argument is expected');\n }\n if (!_regexParseLocale.test(locale)) {\n throw new RangeError('A proper locale must be provided');\n }\n this._locale = locale;\n }\n\n // Private functions - star\n static _escapeRegExpPattern (str) {\n if (typeof str !== 'string') {\n return str;\n }\n return str.replace(_regexEscape, '\\\\$1');\n }\n\n static _toLowerCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toLowerCase();\n }\n\n static _toUpperCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toUpperCase();\n }\n\n static _trim (str, delimiter, reserveReturnValue) {\n const patterns = [];\n let regexp;\n const addPatterns = function (pattern) {\n // Build trim RegExp pattern and push it to patterns array\n patterns.push('^' + pattern + '+|' + pattern + '+$');\n };\n\n // fix reserveReturnValue value\n if (typeof delimiter === 'boolean') {\n reserveReturnValue = delimiter;\n delimiter = null;\n }\n\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n\n // Trim based on delimiter array values\n if (Array.isArray(delimiter)) {\n // Loop through delimiter array\n delimiter.map((item) => {\n // Escape delimiter to be valid RegExp Pattern\n const pattern = this._escapeRegExpPattern(item);\n // Push pattern to patterns array\n addPatterns(pattern);\n });\n }\n\n // Trim based on delimiter string value\n if (typeof delimiter === 'string') {\n // Escape delimiter to be valid RegExp Pattern\n const patternDelimiter = this._escapeRegExpPattern(delimiter);\n // push pattern to patterns array\n addPatterns(patternDelimiter);\n }\n\n // If delimiter is not defined, Trim white spaces\n if (!delimiter) {\n // Push white space pattern to patterns array\n addPatterns('\\\\s');\n }\n\n // Build RegExp pattern\n const pattern = '(' + patterns.join('|') + ')';\n // Build RegExp object\n regexp = new RegExp(pattern, 'g');\n\n // trim string for all patterns\n while (str.match(regexp)) {\n str = str.replace(regexp, '');\n }\n\n // Return trim string\n return str;\n }\n\n static _parseLocale (strLocale) {\n var matches = _regexParseLocale.exec(strLocale); // exec regex\n let parsedLocale;\n let lang;\n let countryCode;\n\n if (!strLocale || !matches) {\n return;\n }\n\n // fix countryCode string by trimming '-' and '_'\n matches[2] = this._trim(matches[2], ['-', '_']);\n\n lang = this._toLowerCase(matches[1]);\n countryCode = this._toUpperCase(matches[2]) || countryCode;\n\n // object with lang, countryCode properties\n parsedLocale = {\n lang,\n countryCode\n };\n\n // return parsed locale object\n return parsedLocale;\n }\n // Private functions - End\n\n _isRtlLang () {\n const objLocale = this.constructor._parseLocale(this._locale);\n\n // return true if the intel string lang exists in the BID RTL LANGS array else return false\n return (this.constructor._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0);\n }\n\n // Public functions - star\n get textInfo () {\n // return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'\n const direction = this._isRtlLang() ? 'rtl' : 'ltr';\n return { direction };\n }\n\n // Public functions - End\n}\n\n// Why not working as static property\nLocale._BIDI_RTL_LANGS = [\n // Const BIDI_RTL_LANGS Array\n // BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left\n // Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)\n 'ae',\t/* Avestan */\n 'ar', /* 'العربية', Arabic */\n 'arc', /* Aramaic */\n 'bcc', /* 'بلوچی مکرانی', Southern Balochi */\n 'bqi', /* 'بختياري', Bakthiari */\n 'ckb', /* 'Soranî / کوردی', Sorani */\n 'dv', /* Dhivehi */\n 'fa', /* 'فارسی', Persian */\n 'glk', /* 'گیلکی', Gilaki */\n 'he', /* 'עברית', Hebrew */\n 'ku', /* 'Kurdî / كوردی', Kurdish */\n 'mzn', /* 'مازِرونی', Mazanderani */\n 'nqo', /* N'Ko */\n 'pnb', /* 'پنجابی', Western Punjabi */\n 'prs', /* 'دری', Darī */\n 'ps', /* 'پښتو', Pashto, */\n 'sd', /* 'سنڌي', Sindhi */\n 'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */\n 'ur', /* 'اردو', Urdu */\n 'yi' /* 'ייִדיש', Yiddish */\n];\n\nexport default Locale;\n","import Locale from './Locale.js';\n\nif (typeof Intl === 'undefined') {\n globalThis.Intl = {};\n}\n\nif (typeof Intl.Locale === 'undefined') {\n Intl.Locale = Locale;\n}\n","import 'intl-locale-textinfo-polyfill/lib/polyfill.js';\n\n// e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`\n\n/**\n * @param {HTMLElement} element\n * @param {{\n * language?: string,\n * avoidLangIfSet?: boolean,\n * avoidDirIfSet?: boolean,\n * avoidLTRByDefault?: boolean\n * }} cfg\n */\nconst i18nizeElement = (element, {\n language,\n // These avoid setting if found to be already set with the same value\n // on the closest ancestor\n avoidLangIfSet = true, avoidDirIfSet = true,\n // This avoids setting LTR if there is no ancestor with `dir` (since\n // LTR is the default)\n avoidLTRByDefault = true\n} = {}) => {\n if (!element || !language) {\n throw new TypeError('You must supply an element and language');\n }\n let presetLangElement;\n\n // We set `lang` if:\n // 1. The user is not avoiding setting `lang` when the supplied language\n // is the same as the closest ancestor with `lang`\n // 2. There is no ancestor with `lang`\n // 3. The closest ancestor with `lang` has a different language from\n // the supplied\n if (avoidLangIfSet) {\n presetLangElement = /** @type {HTMLElement} */ (\n element.closest('[lang]')\n );\n }\n if (!presetLangElement || presetLangElement.lang !== language) {\n element.lang = language;\n }\n\n // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this\n // We set `dir` if:\n // 1. The user is not avoiding setting `dir` when the supplied\n // language's directionality is the same as the closest ancestor\n // with `dir`\n // 2. There is no ancestor with `dir` (and this is either not an LTR\n // direction or the user isn't avoiding (the default) LTR)\n // 3. The closest ancestor with `dir` has a different `dir` from the\n // direction of the supplied language\n const {direction: dir} =\n /**\n * @type {Intl.Locale & {\n * textInfo: {direction: \"ltr\"|\"rtl\"|\"ttb\"}\n * }}\n */ (\n new Intl.Locale(language)\n ).textInfo;\n\n /** @type {HTMLElement|undefined} */\n let presetDirElement;\n if (avoidDirIfSet ||\n // If avoiding the default LTR except when different (even if not\n // avoiding an (RTL) already-set dir), we need to know if different\n (avoidLTRByDefault && dir === 'ltr')\n ) {\n presetDirElement = /** @type {HTMLElement} */ (\n element.closest('[dir]')\n );\n }\n if (\n // If the closest ancestor with `dir` is different, we need to\n // set regardless\n (presetDirElement && presetDirElement.dir !== dir) ||\n // We set if the user is not avoiding (whether there is no ancestor\n // with `div` or even when there is and the language has the same\n // directionality as the closest ancestor with `dir`) OR\n (!avoidDirIfSet ||\n // ...if there is no ancestor with `dir` AND...\n (!presetDirElement &&\n // this is either not an LTR direction or the user isn't\n // avoiding (the default) LTR\n (!avoidLTRByDefault || dir !== 'ltr'))\n )\n ) {\n element.dir = dir;\n\n /* c8 ignore next 3 */\n if (dir === 'ttb') {\n element.style.writingMode = 'vertical-lr';\n }\n }\n};\nexport default i18nizeElement;\n"],"names":["_regexEscape","_regexParseLocale","Locale","constructor","locale","TypeError","test","RangeError","_locale","_escapeRegExpPattern","str","replace","_toLowerCase","reserveReturnValue","toLowerCase","_toUpperCase","toUpperCase","_trim","delimiter","patterns","regexp","addPatterns","pattern","push","Array","isArray","map","item","patternDelimiter","join","RegExp","match","_parseLocale","strLocale","matches","exec","parsedLocale","lang","countryCode","_isRtlLang","objLocale","_BIDI_RTL_LANGS","indexOf","textInfo","direction","Intl","globalThis","i18nizeElement","element","language","avoidLangIfSet","avoidDirIfSet","avoidLTRByDefault","presetLangElement","closest","dir","presetDirElement","style","writingMode"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA,MAAMA,YAAY,GAAG,yCAAyC,CAAC;AAC/D,MAAMC,iBAAiB,GAAG,2BAA2B,CAAA;AACrD;;AAEA,MAAMC,MAAM,CAAC;AAAG;;EAEdC,WAAWA,CAAEC,MAAM,EAAE;AACnB,IAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;AAC9B,MAAA,MAAM,IAAIC,SAAS,CAAC,+BAA+B,CAAC,CAAA;AACtD,KAAA;AACA,IAAA,IAAI,CAACJ,iBAAiB,CAACK,IAAI,CAACF,MAAM,CAAC,EAAE;AACnC,MAAA,MAAM,IAAIG,UAAU,CAAC,kCAAkC,CAAC,CAAA;AAC1D,KAAA;IACA,IAAI,CAACC,OAAO,GAAGJ,MAAM,CAAA;AACvB,GAAA;;AAEA;EACA,OAAOK,oBAAoBA,CAAEC,GAAG,EAAE;AAChC,IAAA,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;AAC3B,MAAA,OAAOA,GAAG,CAAA;AACZ,KAAA;AACA,IAAA,OAAOA,GAAG,CAACC,OAAO,CAACX,YAAY,EAAE,MAAM,CAAC,CAAA;AAC1C,GAAA;AAEA,EAAA,OAAOY,YAAYA,CAAEF,GAAG,EAAEG,kBAAkB,EAAE;AAC5C,IAAA,IAAI,OAAOH,GAAG,KAAK,QAAQ,EAAE;MAC3B,OAAOG,kBAAkB,IAAIH,GAAG,CAAA;AAClC,KAAA;AACA,IAAA,OAAOA,GAAG,CAACI,WAAW,EAAE,CAAA;AAC1B,GAAA;AAEA,EAAA,OAAOC,YAAYA,CAAEL,GAAG,EAAEG,kBAAkB,EAAE;AAC5C,IAAA,IAAI,OAAOH,GAAG,KAAK,QAAQ,EAAE;MAC3B,OAAOG,kBAAkB,IAAIH,GAAG,CAAA;AAClC,KAAA;AACA,IAAA,OAAOA,GAAG,CAACM,WAAW,EAAE,CAAA;AAC1B,GAAA;AAEA,EAAA,OAAOC,KAAKA,CAAEP,GAAG,EAAEQ,SAAS,EAAEL,kBAAkB,EAAE;IAChD,MAAMM,QAAQ,GAAG,EAAE,CAAA;AACnB,IAAA,IAAIC,MAAM,CAAA;AACV,IAAA,MAAMC,WAAW,GAAG,UAAUC,OAAO,EAAE;AACrC;AACAH,MAAAA,QAAQ,CAACI,IAAI,CAAC,GAAG,GAAGD,OAAO,GAAG,IAAI,GAAGA,OAAO,GAAG,IAAI,CAAC,CAAA;KACrD,CAAA;;AAED;AACA,IAAA,IAAI,OAAOJ,SAAS,KAAK,SAAS,EAAE;AAClCL,MAAAA,kBAAkB,GAAGK,SAAS,CAAA;AAC9BA,MAAAA,SAAS,GAAG,IAAI,CAAA;AAClB,KAAA;AAEA,IAAA,IAAI,OAAOR,GAAG,KAAK,QAAQ,EAAE;MAC3B,OAAOG,kBAAkB,IAAIH,GAAG,CAAA;AAClC,KAAA;;AAEA;AACA,IAAA,IAAIc,KAAK,CAACC,OAAO,CAACP,SAAS,CAAC,EAAE;AAC5B;AACAA,MAAAA,SAAS,CAACQ,GAAG,CAAEC,IAAI,IAAK;AACtB;AACA,QAAA,MAAML,OAAO,GAAG,IAAI,CAACb,oBAAoB,CAACkB,IAAI,CAAC,CAAA;AAC/C;QACAN,WAAW,CAACC,OAAO,CAAC,CAAA;AACtB,OAAC,CAAC,CAAA;AACJ,KAAA;;AAEA;AACA,IAAA,IAAI,OAAOJ,SAAS,KAAK,QAAQ,EAAE;AACjC;AACA,MAAA,MAAMU,gBAAgB,GAAG,IAAI,CAACnB,oBAAoB,CAACS,SAAS,CAAC,CAAA;AAC7D;MACAG,WAAW,CAACO,gBAAgB,CAAC,CAAA;AAC/B,KAAA;;AAEA;IACA,IAAI,CAACV,SAAS,EAAE;AACd;MACAG,WAAW,CAAC,KAAK,CAAC,CAAA;AACpB,KAAA;;AAEA;IACA,MAAMC,OAAO,GAAG,GAAG,GAAGH,QAAQ,CAACU,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;AAC9C;AACAT,IAAAA,MAAM,GAAG,IAAIU,MAAM,CAACR,OAAO,EAAE,GAAG,CAAC,CAAA;;AAEjC;AACA,IAAA,OAAOZ,GAAG,CAACqB,KAAK,CAACX,MAAM,CAAC,EAAE;MACxBV,GAAG,GAAGA,GAAG,CAACC,OAAO,CAACS,MAAM,EAAE,EAAE,CAAC,CAAA;AAC/B,KAAA;;AAEA;AACA,IAAA,OAAOV,GAAG,CAAA;AACZ,GAAA;EAEA,OAAOsB,YAAYA,CAAEC,SAAS,EAAE;IAC9B,IAAIC,OAAO,GAAIjC,iBAAiB,CAACkC,IAAI,CAACF,SAAS,CAAC,CAAC;AACjD,IAAA,IAAIG,YAAY,CAAA;AAChB,IAAA,IAAIC,IAAI,CAAA;AACR,IAAA,IAAIC,WAAW,CAAA;AAEf,IAAA,IAAI,CAACL,SAAS,IAAI,CAACC,OAAO,EAAE;AAC1B,MAAA,OAAA;AACF,KAAA;;AAEA;AACAA,IAAAA,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAACjB,KAAK,CAACiB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAE/CG,IAAI,GAAG,IAAI,CAACzB,YAAY,CAACsB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACpCI,WAAW,GAAG,IAAI,CAACvB,YAAY,CAACmB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAII,WAAW,CAAA;;AAE1D;AACAF,IAAAA,YAAY,GAAG;MACbC,IAAI;AACJC,MAAAA,WAAAA;KACD,CAAA;;AAED;AACA,IAAA,OAAOF,YAAY,CAAA;AACrB,GAAA;AACA;;AAEAG,EAAAA,UAAUA,GAAI;IACZ,MAAMC,SAAS,GAAG,IAAI,CAACrC,WAAW,CAAC6B,YAAY,CAAC,IAAI,CAACxB,OAAO,CAAC,CAAA;;AAE7D;AACA,IAAA,OAAQ,IAAI,CAACL,WAAW,CAACsC,eAAe,CAACC,OAAO,CAACF,SAAS,CAACH,IAAI,CAAC,IAAI,CAAC,CAAA;AACvE,GAAA;;AAEA;EACA,IAAIM,QAAQA,GAAI;AACd;IACA,MAAMC,SAAS,GAAG,IAAI,CAACL,UAAU,EAAE,GAAG,KAAK,GAAG,KAAK,CAAA;IACnD,OAAO;AAAEK,MAAAA,SAAAA;KAAW,CAAA;AACtB,GAAA;;AAEA;AACF,CAAA;;AAEA;AACA1C,MAAM,CAACuC,eAAe,GAAG;AACvB;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ,KAAK;AACL,KAAK;AACL,KAAK;AACL,KAAK;AACL,IAAI;AACJ,IAAI;AACJ,KAAK;AACL,IAAI;AACJ,IAAI;AACJ,KAAK;AACL,KAAK;AACL,KAAK;AACL,KAAK;AACL,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,yBACL;;ACxKD,IAAI,OAAOI,IAAI,KAAK,WAAW,EAAE;AAC/BC,EAAAA,UAAU,CAACD,IAAI,GAAG,EAAE,CAAA;AACtB,CAAA;AAEA,IAAI,OAAOA,IAAI,CAAC3C,MAAM,KAAK,WAAW,EAAE;EACtC2C,IAAI,CAAC3C,MAAM,GAAGA,MAAM,CAAA;AACtB;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM6C,cAAc,GAAGA,CAACC,OAAO,EAAE;EAC/BC,QAAQ;AACR;AACA;AACAC,EAAAA,cAAc,GAAG,IAAI;AAAEC,EAAAA,aAAa,GAAG,IAAI;AAC3C;AACA;AACAC,EAAAA,iBAAiB,GAAG,IAAA;AACtB,CAAC,GAAG,EAAE,KAAK;AACT,EAAA,IAAI,CAACJ,OAAO,IAAI,CAACC,QAAQ,EAAE;AACzB,IAAA,MAAM,IAAI5C,SAAS,CAAC,yCAAyC,CAAC,CAAA;AAChE,GAAA;AACA,EAAA,IAAIgD,iBAAiB,CAAA;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,IAAIH,cAAc,EAAE;AAClBG,IAAAA,iBAAiB;AACfL,IAAAA,OAAO,CAACM,OAAO,CAAC,QAAQ,CACzB,CAAA;AACH,GAAA;EACA,IAAI,CAACD,iBAAiB,IAAIA,iBAAiB,CAAChB,IAAI,KAAKY,QAAQ,EAAE;IAC7DD,OAAO,CAACX,IAAI,GAAGY,QAAQ,CAAA;AACzB,GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM;AAACL,IAAAA,SAAS,EAAEW,GAAAA;GAAI;AACpB;AACJ;AACA;AACA;AACA;AACM,EAAA,IAAIV,IAAI,CAAC3C,MAAM,CAAC+C,QAAQ,CAAC,CACzBN,QAAQ,CAAA;;AAEZ;AACA,EAAA,IAAIa,gBAAgB,CAAA;AACpB,EAAA,IAAIL,aAAa;AACf;AACA;AACCC,EAAAA,iBAAiB,IAAIG,GAAG,KAAK,KAAM,EACpC;AACAC,IAAAA,gBAAgB;AACdR,IAAAA,OAAO,CAACM,OAAO,CAAC,OAAO,CACxB,CAAA;AACH,GAAA;AACA,EAAA;AACE;AACA;AACCE,EAAAA,gBAAgB,IAAIA,gBAAgB,CAACD,GAAG,KAAKA,GAAG;AAC/C;AACA;AACA;AACC,EAAA,CAACJ,aAAa;AACb;AACC,EAAA,CAACK,gBAAgB;AAChB;AACA;AACC,EAAA,CAACJ,iBAAiB,IAAIG,GAAG,KAAK,KAAK,CACvC,EACH;IACAP,OAAO,CAACO,GAAG,GAAGA,GAAG,CAAA;;AAEjB;IACA,IAAIA,GAAG,KAAK,KAAK,EAAE;AACjBP,MAAAA,OAAO,CAACS,KAAK,CAACC,WAAW,GAAG,aAAa,CAAA;AAC3C,KAAA;AACF,GAAA;AACF;;;;","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"i18nizeelement.es6.js","sources":["../node_modules/.pnpm/intl-locale-textinfo-polyfill@2.1.1/node_modules/intl-locale-textinfo-polyfill/lib/Locale.js","../node_modules/.pnpm/intl-locale-textinfo-polyfill@2.1.1/node_modules/intl-locale-textinfo-polyfill/lib/polyfill.js","../src/index.js"],"sourcesContent":["/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n// Private vars - star\nconst _regexEscape = /([\\.\\*\\+\\^\\$\\[\\]\\\\\\(\\)\\|\\{\\}\\,\\-\\:\\?])/g; // eslint-disable-line no-useless-escape\nconst _regexParseLocale = /^([a-zA-Z]{2,3}|[a-zA-Z]{5,8})(-[a-zA-Z]{4})?(-(?:[a-zA-Z]{2}|\\d{3}))?(-(?:[a-zA-Z\\d]{5,8}|\\d[a-zA-Z\\d]{3}))?$/;\n// Private vars - end\n\nclass Locale { // eslint-disable-line consistent-this\n\n /**\n * @param {string} locale\n */\n constructor (locale) {\n if (typeof locale !== 'string') {\n throw new TypeError('A string argument is expected');\n }\n if (!_regexParseLocale.test(locale)) {\n throw new RangeError('A proper locale must be provided');\n }\n this._locale = locale;\n }\n\n // Private functions - star\n\n /**\n * @param {null|undefined|string} [str]\n * @returns {null|undefined|string}\n */\n static _escapeRegExpPattern (str) {\n if (typeof str !== 'string') {\n return str;\n }\n return str.replace(_regexEscape, '\\\\$1');\n }\n\n /**\n * @param {string|null} [str]\n * @param {boolean} [reserveReturnValue]\n */\n static _toLowerCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toLowerCase();\n }\n\n /**\n * @param {string|null} [str]\n * @param {boolean} [reserveReturnValue]\n */\n static _toUpperCase (str, reserveReturnValue) {\n if (typeof str !== 'string') {\n return reserveReturnValue && str;\n }\n return str.toUpperCase();\n }\n\n /**\n * @param {string|null} [str]\n * @param {string|null|string[]|boolean} [delimiter]\n * @param {boolean} [reserveReturnValue]\n */\n static _trim (str, delimiter, reserveReturnValue) {\n /** @type {string[]} */\n const patterns = [];\n let regexp;\n\n /**\n * @param {string|null|undefined} pattern\n */\n const addPatterns = function (pattern) {\n // Build trim RegExp pattern and push it to patterns array\n patterns.push('^' + pattern + '+|' + pattern + '+$');\n };\n\n // fix reserveReturnValue value\n if (typeof delimiter === 'boolean') {\n reserveReturnValue = delimiter;\n delimiter = null;\n }\n\n if (typeof str !== 'string') {\n return reserveReturnValue ? str : undefined;\n }\n\n // Trim based on delimiter array values\n if (Array.isArray(delimiter)) {\n // Loop through delimiter array\n delimiter.map((item) => {\n // Escape delimiter to be valid RegExp pattern\n const pattern = this._escapeRegExpPattern(item);\n // Push pattern to patterns array\n addPatterns(pattern);\n });\n }\n\n // Trim based on delimiter string value\n if (typeof delimiter === 'string') {\n // Escape delimiter to be valid RegExp pattern\n const patternDelimiter = this._escapeRegExpPattern(delimiter);\n // push pattern to patterns array\n addPatterns(patternDelimiter);\n }\n\n // If delimiter is not defined, trim white spaces\n if (!delimiter) {\n // Push white space pattern to patterns array\n addPatterns('\\\\s');\n }\n\n // Build RegExp pattern\n const pattern = '(' + patterns.join('|') + ')';\n // Build RegExp object\n regexp = new RegExp(pattern, 'g');\n\n // trim string for all patterns\n while (str.match(regexp)) {\n str = str.replace(regexp, '');\n }\n\n // Return trim string\n return str;\n }\n\n /**\n * @typedef {{\n * lang: string,\n * script: string|undefined,\n * countryCode: string|undefined\n * }} LocaleInfo\n */\n\n /**\n * @param {string|null} [strLocale]\n * @returns {undefined|LocaleInfo}\n */\n static _parseLocale (strLocale) {\n if (typeof strLocale !== 'string') {\n return undefined;\n }\n\n const matches = _regexParseLocale.exec(strLocale); // exec regex\n let lang;\n let script;\n let countryCode;\n\n if (!strLocale || !matches) {\n return undefined;\n }\n\n // fix script string by trimming '-' and '_'\n const matches2 = this._trim(matches[2], ['-', '_']);\n\n // fix countryCode string by trimming '-' and '_'\n const matches3 = this._trim(matches[3], ['-', '_']);\n\n lang = /** @type {string} */ (this._toLowerCase(matches[1]));\n script = this._toLowerCase(matches2) || script;\n countryCode = this._toUpperCase(matches3) || countryCode;\n\n // object with lang, script properties\n const parsedLocale = {\n lang,\n script,\n countryCode\n };\n\n // return parsed locale object\n return parsedLocale;\n }\n // Private functions - End\n\n _isRtlLang () {\n const { lang, script } = /** @type {LocaleInfo} */ (\n Locale._parseLocale(this._locale)\n );\n\n if (script) {\n return Locale._RTL_SCRIPTS.indexOf(script) >= 0;\n }\n\n // return true if the intel string lang exists in the BID RTL LANGS array else return false\n return (Locale._BIDI_RTL_LANGS.indexOf(lang) >= 0);\n }\n\n // Public functions - star\n get textInfo () {\n // return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'\n const direction = this._isRtlLang() ? 'rtl' : 'ltr';\n return { direction };\n }\n\n // Public functions - End\n}\n\nLocale._RTL_SCRIPTS = [\n 'adlm', 'arab', 'armi', 'avst', 'chrs', 'cprt',\n 'elym', 'hatr', 'hebr', 'hung', 'khar', 'lydi',\n 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',\n 'nbat', 'nkoo', 'orkh', 'ougr', 'palm', 'phli',\n 'phlp', 'phnx', 'prti', 'rohg', 'samr', 'sarb',\n 'sogd', 'sogo', 'syrc', 'thaa', 'yezi'\n];\n\n// Why not working as static property\nLocale._BIDI_RTL_LANGS = [\n // Const BIDI_RTL_LANGS Array\n // BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left\n // Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)\n 'ae',\t// Avestan\n 'aeb', // Tunisian Arabic\n 'ajt', // Tunisian Arabic (old)\n 'apc', // Levantine Arabic\n 'apd', // Sudanese Arabic\n 'ar', // 'العربية', Arabic\n 'ara', // Arabic\n 'arb', // Standard Arabic\n 'arc', // Aramaic\n 'arq', // Algerian Arabic\n 'ars', // Najdi Arabic\n 'ary', // Moroccan Arabic\n 'arz', // Egyptian Arabic\n 'ave', // Avestan\n 'avl', // Eastern Egyptian Bedawi Arabic\n 'bal', // Baluchi\n 'bcc', // 'بلوچی مکرانی', Southern Balochi\n 'bej', // Beja; Bedawiyet\n 'bft', // Balti\n 'bgn', // Western Balochi\n 'bqi', // 'بختياري', Bakthiari\n 'brh', // Brahui\n 'cja', // Cham, Western\n 'ckb', // 'Soranî / کوردی', Sorani\n 'cld', // Chaldean Neo-Aramaic\n 'dcc', // Deccan\n 'dgl', // Andaandi\n 'div', // Divehi\n 'drw', // Darwazi (old)\n 'dv', // Dhivehi\n 'fa', // 'فارسی', Persian\n 'fas', // Persian\n 'fia', // Nobiin\n 'fub', // Fulfulde (Adamawa)\n 'gbz', // Dari, Zoroastrian\n 'gjk', // Koli, Kachi\n 'gju', // Gujari\n 'glk', // 'گیلکی', Gilaki\n 'grc', // Greek, Ancient (to 1453)\n 'gwc', // Kalami\n 'gwt', // Gawar-Bati\n 'haz', // Hazaragi\n 'he', // 'עברית', Hebrew\n 'heb', // Hebrew\n 'hnd', // Hindko, Southern\n 'hno', // Hindko, Northern\n 'iw', // Hebrew (old)\n 'ji', // Yiddish (old)\n 'kas', // Kashmiri\n 'kby', // Kanuri, Manga\n 'khw', // Khowar\n 'ks', // Kashmiri\n 'kvx', // Koli, Parkari\n 'kxp', // Koli, Wadiyara\n 'kzh', // Kenuzi-Dongola (old)\n 'lad', // Ladino\n 'lah', // Lahnda\n 'lki', // Laki\n 'lrc', // Luri, Northern\n 'luz', // Luri, Southern\n 'mde', // Maba (Chad)\n 'mfa', // Malay, Pattani\n 'mki', // Dhatki\n 'mvy', // Kohistani, Indus\n 'myz', // Mandaic, Classical\n 'mzn', // 'مازِرونی', Mazanderani\n 'nqo', // N'Ko\n 'oru', // Ormuri\n 'ota', // Turkish, Ottoman (1500–1928)\n 'otk', // Turkish, Old\n 'oui', // Uighur, Old\n 'pal', // Pahlavi\n 'pbu', // Pashto, Northern\n 'per', // Persian\n 'pes', // Western Farsi\n 'phl', // Phalura\n 'phn', // Phoenician\n 'pnb', // 'پنجابی', Western Punjabi\n 'pra', // Prakrit languages\n 'prd', // Dari (Persian)\n 'prs', // 'دری', Darī\n 'ps', // 'پښتو', Pashto,\n 'pus', // Pushto\n 'rhg', // Rohingya\n 'rmt', // Domari\n 'scl', // Shina\n 'sd', // 'سنڌي', Sindhi\n 'sdh', // Kurdish, Southern\n 'shu', // Arabic (Chadian)\n 'skr', // Saraiki\n 'smp', // Samaritan\n 'snd', // Sindhi\n 'sog', // Sogdian\n 'swb', // Comorian\n 'syr', // Syriac\n 'tnf', // Tangshewi (old)\n 'trw', // Torwali\n 'ug', // 'Uyghurche / ئۇيغۇرچە', Uyghur\n 'uig', // Uighur\n 'ur', // 'اردو', Urdu\n 'urd', // Urdu\n 'wni', // Comorian, Ndzwani\n 'xco', // Chorasmian\n 'xld', // Lydian\n 'xmn', // Manichaean Middle Persian\n 'xmr', // Meroitic\n 'xna', // North Arabian, Ancient\n 'xpr', // Parthian\n 'xsa', // Sabaean\n 'ydd', // Yiddish, Eastern\n 'yi', // 'ייִדיש', Yiddish\n 'yid', // Yiddish\n 'zdj' // Comorian, Ngazidja\n];\n\nexport default Locale;\n","import Locale from './Locale.js';\n\nif (typeof Intl === 'undefined') {\n // @ts-expect-error Not a complete polyfill\n globalThis.Intl = {};\n}\n\nIntl.Locale = Locale;\n","import 'intl-locale-textinfo-polyfill/lib/polyfill.js';\n\n// e.g., `i18nizeElement(document.title, {language: 'ar-AR'});`\n\n/**\n * @param {HTMLElement} element\n * @param {{\n * language?: string,\n * avoidLangIfSet?: boolean,\n * avoidDirIfSet?: boolean,\n * avoidLTRByDefault?: boolean\n * }} cfg\n */\nconst i18nizeElement = (element, {\n language,\n // These avoid setting if found to be already set with the same value\n // on the closest ancestor\n avoidLangIfSet = true, avoidDirIfSet = true,\n // This avoids setting LTR if there is no ancestor with `dir` (since\n // LTR is the default)\n avoidLTRByDefault = true\n} = {}) => {\n if (!element || !language) {\n throw new TypeError('You must supply an element and language');\n }\n let presetLangElement;\n\n // We set `lang` if:\n // 1. The user is not avoiding setting `lang` when the supplied language\n // is the same as the closest ancestor with `lang`\n // 2. There is no ancestor with `lang`\n // 3. The closest ancestor with `lang` has a different language from\n // the supplied\n if (avoidLangIfSet) {\n presetLangElement = /** @type {HTMLElement} */ (\n element.closest('[lang]')\n );\n }\n if (!presetLangElement || presetLangElement.lang !== language) {\n element.lang = language;\n }\n\n // See <https://github.com/tc39/ecma402/issues/205> for request for JavaScript to detect this\n // We set `dir` if:\n // 1. The user is not avoiding setting `dir` when the supplied\n // language's directionality is the same as the closest ancestor\n // with `dir`\n // 2. There is no ancestor with `dir` (and this is either not an LTR\n // direction or the user isn't avoiding (the default) LTR)\n // 3. The closest ancestor with `dir` has a different `dir` from the\n // direction of the supplied language\n const {direction: dir} =\n /**\n * @type {Intl.Locale & {\n * textInfo: {direction: \"ltr\"|\"rtl\"|\"ttb\"}\n * }}\n */ (\n new Intl.Locale(language)\n ).textInfo;\n\n /** @type {HTMLElement|undefined} */\n let presetDirElement;\n if (avoidDirIfSet ||\n // If avoiding the default LTR except when different (even if not\n // avoiding an (RTL) already-set dir), we need to know if different\n (avoidLTRByDefault && dir === 'ltr')\n ) {\n presetDirElement = /** @type {HTMLElement} */ (\n element.closest('[dir]')\n );\n }\n if (\n // If the closest ancestor with `dir` is different, we need to\n // set regardless\n (presetDirElement && presetDirElement.dir !== dir) ||\n // We set if the user is not avoiding (whether there is no ancestor\n // with `div` or even when there is and the language has the same\n // directionality as the closest ancestor with `dir`) OR\n (!avoidDirIfSet ||\n // ...if there is no ancestor with `dir` AND...\n (!presetDirElement &&\n // this is either not an LTR direction or the user isn't\n // avoiding (the default) LTR\n (!avoidLTRByDefault || dir !== 'ltr'))\n )\n ) {\n element.dir = dir;\n\n /* c8 ignore next 3 */\n if (dir === 'ttb') {\n element.style.writingMode = 'vertical-lr';\n }\n }\n};\nexport default i18nizeElement;\n"],"names":["_regexEscape","_regexParseLocale","Locale","constructor","locale","TypeError","test","RangeError","_locale","_escapeRegExpPattern","str","replace","_toLowerCase","reserveReturnValue","toLowerCase","_toUpperCase","toUpperCase","_trim","delimiter","patterns","regexp","addPatterns","pattern","push","undefined","Array","isArray","map","item","patternDelimiter","join","RegExp","match","_parseLocale","strLocale","matches","exec","lang","script","countryCode","matches2","matches3","parsedLocale","_isRtlLang","_RTL_SCRIPTS","indexOf","_BIDI_RTL_LANGS","textInfo","direction","Intl","globalThis","i18nizeElement","element","language","avoidLangIfSet","avoidDirIfSet","avoidLTRByDefault","presetLangElement","closest","dir","presetDirElement","style","writingMode"],"mappings":"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E;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,KAAK;AAAE;AACP,IAAI;AAAE;AACN,KAAK;AAAE;AACP,KAAK;AAAC,CACP;;ACnUD,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;AAC/B;AACAC,EAAAA,UAAU,CAACD,IAAI,GAAG,EAAE,CAAA;AACtB,CAAA;AAEAA,IAAI,CAAC/C,MAAM,GAAGA,MAAM;;ACLpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMiD,cAAc,GAAGA,CAACC,OAAO,EAAE;EAC/BC,QAAQ;AACR;AACA;AACAC,EAAAA,cAAc,GAAG,IAAI;AAAEC,EAAAA,aAAa,GAAG,IAAI;AAC3C;AACA;AACAC,EAAAA,iBAAiB,GAAG,IAAA;AACtB,CAAC,GAAG,EAAE,KAAK;AACT,EAAA,IAAI,CAACJ,OAAO,IAAI,CAACC,QAAQ,EAAE;AACzB,IAAA,MAAM,IAAIhD,SAAS,CAAC,yCAAyC,CAAC,CAAA;AAChE,GAAA;AACA,EAAA,IAAIoD,iBAAiB,CAAA;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,IAAIH,cAAc,EAAE;AAClBG,IAAAA,iBAAiB;AACfL,IAAAA,OAAO,CAACM,OAAO,CAAC,QAAQ,CACzB,CAAA;AACH,GAAA;EACA,IAAI,CAACD,iBAAiB,IAAIA,iBAAiB,CAACpB,IAAI,KAAKgB,QAAQ,EAAE;IAC7DD,OAAO,CAACf,IAAI,GAAGgB,QAAQ,CAAA;AACzB,GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM;AAACL,IAAAA,SAAS,EAAEW,GAAAA;GAAI;AACpB;AACJ;AACA;AACA;AACA;AACM,EAAA,IAAIV,IAAI,CAAC/C,MAAM,CAACmD,QAAQ,CAAC,CACzBN,QAAQ,CAAA;;AAEZ;AACA,EAAA,IAAIa,gBAAgB,CAAA;AACpB,EAAA,IAAIL,aAAa;AACf;AACA;AACCC,EAAAA,iBAAiB,IAAIG,GAAG,KAAK,KAAM,EACpC;AACAC,IAAAA,gBAAgB;AACdR,IAAAA,OAAO,CAACM,OAAO,CAAC,OAAO,CACxB,CAAA;AACH,GAAA;AACA,EAAA;AACE;AACA;AACCE,EAAAA,gBAAgB,IAAIA,gBAAgB,CAACD,GAAG,KAAKA,GAAG;AAC/C;AACA;AACA;AACC,EAAA,CAACJ,aAAa;AACb;AACC,EAAA,CAACK,gBAAgB;AAChB;AACA;AACC,EAAA,CAACJ,iBAAiB,IAAIG,GAAG,KAAK,KAAK,CACvC,EACH;IACAP,OAAO,CAACO,GAAG,GAAGA,GAAG,CAAA;;AAEjB;IACA,IAAIA,GAAG,KAAK,KAAK,EAAE;AACjBP,MAAAA,OAAO,CAACS,KAAK,CAACC,WAAW,GAAG,aAAa,CAAA;AAC3C,KAAA;AACF,GAAA;AACF;;;;","x_google_ignoreList":[0,1]}