react-i18next 15.5.2 → 15.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### 15.6.0
2
+
3
+ fix: passing components as object should still allow for indexed matching of children [1854](https://github.com/i18next/react-i18next/pull/1854)
4
+
5
+ ### 15.5.3
6
+
7
+ chore: update `@babel/runtime` [1851](https://github.com/i18next/react-i18next/pull/1851)
8
+
1
9
  ### 15.5.2
2
10
 
3
11
  fix element.ref access issue with react 19 [1846](https://github.com/i18next/react-i18next/pull/1846)
@@ -28,12 +28,12 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
28
28
  var r = {
29
29
  type: "tag",
30
30
  name: "",
31
- voidElement: !1,
31
+ voidElement: false,
32
32
  attrs: {},
33
33
  children: []
34
34
  },
35
35
  i = n.match(/<\/?([^\s]+?)[/\s>]/);
36
- if (i && (r.name = i[1], (e[i[1]] || "/" === n.charAt(n.length - 2)) && (r.voidElement = !0), r.name.startsWith("!--"))) {
36
+ if (i && (r.name = i[1], (e[i[1]] || "/" === n.charAt(n.length - 2)) && (r.voidElement = true), r.name.startsWith("!--"))) {
37
37
  var s = n.indexOf("--\x3e");
38
38
  return {
39
39
  type: "comment",
@@ -71,7 +71,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
71
71
  c = [],
72
72
  o = [],
73
73
  l = -1,
74
- m = !1;
74
+ m = false;
75
75
  if (0 !== e.indexOf("<")) {
76
76
  var u = e.indexOf("<");
77
77
  c.push({
@@ -82,7 +82,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
82
82
  return e.replace(r, function (r, s) {
83
83
  if (m) {
84
84
  if (r !== "</" + a.name + ">") return;
85
- m = !1;
85
+ m = false;
86
86
  }
87
87
  var u,
88
88
  f = "/" !== r.charAt(1),
@@ -93,7 +93,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
93
93
  var v = n(r);
94
94
  return l < 0 ? (c.push(v), c) : ((u = o[l]).children.push(v), c);
95
95
  }
96
- if (f && (l++, "tag" === (a = n(r)).type && t.components[a.name] && (a.type = "component", m = !0), a.voidElement || m || !d || "<" === d || a.children.push({
96
+ if (f && (l++, "tag" === (a = n(r)).type && t.components[a.name] && (a.type = "component", m = true), a.voidElement || m || !d || "<" === d || a.children.push({
97
97
  type: "text",
98
98
  content: e.slice(p, e.indexOf("<", p))
99
99
  }), 0 === l && c.push(a), (u = o[l - 1]) && u.children.push(a), o[l] = a), (!f || a.voidElement) && (l > -1 && (a.voidElement || a.name === r.slice(2, -1)) && (l--, a = -1 === l ? c : o[l]), !m && "<" !== d && d)) {
@@ -159,8 +159,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
159
159
  });
160
160
  i18n.loadLanguages(lng, loadedClb(i18n, cb));
161
161
  };
162
- const hasLoadedNamespace = function (ns, i18n) {
163
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
162
+ const hasLoadedNamespace = (ns, i18n, options = {}) => {
164
163
  if (!i18n.languages || !i18n.languages.length) {
165
164
  warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {
166
165
  languages: i18n.languages
@@ -214,8 +213,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
214
213
  useSuspense: true,
215
214
  unescape
216
215
  };
217
- const setDefaults = function () {
218
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
216
+ const setDefaults = (options = {}) => {
219
217
  defaultOptions = {
220
218
  ...defaultOptions,
221
219
  ...options
@@ -313,12 +311,12 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
313
311
  });
314
312
  return stringNode;
315
313
  };
316
- const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {
314
+ const renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {
317
315
  if (targetString === '') return [];
318
316
  const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];
319
317
  const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);
320
- if (!children && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];
321
- const data = {};
318
+ if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];
319
+ const data = knownComponentsMap ?? {};
322
320
  const getData = childs => {
323
321
  const childrenArray = getAsArray(childs);
324
322
  childrenArray.forEach(child => {
@@ -364,6 +362,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
364
362
  const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);
365
363
  if (node.type === 'tag') {
366
364
  let tmp = reactNodes[parseInt(node.name, 10)];
365
+ if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];
367
366
  if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];
368
367
  if (!tmp) tmp = {};
369
368
  const child = Object.keys(node.attrs).length !== 0 ? mergeProps({
@@ -372,7 +371,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
372
371
  const isElement = react.isValidElement(child);
373
372
  const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;
374
373
  const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;
375
- const isKnownComponent = isObject(children) && Object.hasOwnProperty.call(children, node.name);
374
+ const isKnownComponent = isObject(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);
376
375
  if (isString(child)) {
377
376
  const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);
378
377
  mem.push(value);
@@ -467,23 +466,27 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
467
466
  });
468
467
  return null;
469
468
  };
470
- function Trans$1(_ref) {
471
- let {
472
- children,
473
- count,
474
- parent,
475
- i18nKey,
476
- context,
477
- tOptions = {},
478
- values,
479
- defaults,
480
- components,
481
- ns,
482
- i18n: i18nFromProps,
483
- t: tFromProps,
484
- shouldUnescape,
485
- ...additionalProps
486
- } = _ref;
469
+ const isComponentsMap = object => {
470
+ if (!isObject(object)) return false;
471
+ if (Array.isArray(object)) return false;
472
+ return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);
473
+ };
474
+ function Trans$1({
475
+ children,
476
+ count,
477
+ parent,
478
+ i18nKey,
479
+ context,
480
+ tOptions = {},
481
+ values,
482
+ defaults,
483
+ components,
484
+ ns,
485
+ i18n: i18nFromProps,
486
+ t: tFromProps,
487
+ shouldUnescape,
488
+ ...additionalProps
489
+ }) {
487
490
  const i18n = i18nFromProps || getI18n();
488
491
  if (!i18n) {
489
492
  warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {
@@ -530,7 +533,13 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
530
533
  };
531
534
  const translation = key ? t(key, combinedTOpts) : defaultValue;
532
535
  const generatedComponents = generateComponents(components, translation, i18n, i18nKey);
533
- const content = renderNodes(generatedComponents || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
536
+ let indexedChildren = generatedComponents || children;
537
+ let componentsMap = null;
538
+ if (isComponentsMap(generatedComponents)) {
539
+ componentsMap = generatedComponents;
540
+ indexedChildren = children;
541
+ }
542
+ const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
534
543
  const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;
535
544
  return useAsParent ? react.createElement(useAsParent, additionalProps, content) : content;
536
545
  }
@@ -581,23 +590,22 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
581
590
  return ret;
582
591
  };
583
592
 
584
- function Trans(_ref) {
585
- let {
586
- children,
587
- count,
588
- parent,
589
- i18nKey,
590
- context,
591
- tOptions = {},
592
- values,
593
- defaults,
594
- components,
595
- ns,
596
- i18n: i18nFromProps,
597
- t: tFromProps,
598
- shouldUnescape,
599
- ...additionalProps
600
- } = _ref;
593
+ function Trans({
594
+ children,
595
+ count,
596
+ parent,
597
+ i18nKey,
598
+ context,
599
+ tOptions = {},
600
+ values,
601
+ defaults,
602
+ components,
603
+ ns,
604
+ i18n: i18nFromProps,
605
+ t: tFromProps,
606
+ shouldUnescape,
607
+ ...additionalProps
608
+ }) {
601
609
  const {
602
610
  i18n: i18nFromContext,
603
611
  defaultNS: defaultNSFromContext
@@ -631,8 +639,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
631
639
  };
632
640
  const alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);
633
641
  const useMemoizedT = (i18n, language, namespace, keyPrefix) => react.useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);
634
- const useTranslation = function (ns) {
635
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
642
+ const useTranslation = (ns, props = {}) => {
636
643
  const {
637
644
  i18n: i18nFromProps
638
645
  } = props;
@@ -728,46 +735,41 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
728
735
  });
729
736
  };
730
737
 
731
- const withTranslation = function (ns) {
732
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
733
- return function Extend(WrappedComponent) {
734
- function I18nextWithTranslation(_ref) {
735
- let {
736
- forwardedRef,
737
- ...rest
738
- } = _ref;
739
- const [t, i18n, ready] = useTranslation(ns, {
740
- ...rest,
741
- keyPrefix: options.keyPrefix
742
- });
743
- const passDownProps = {
744
- ...rest,
745
- t,
746
- i18n,
747
- tReady: ready
748
- };
749
- if (options.withRef && forwardedRef) {
750
- passDownProps.ref = forwardedRef;
751
- } else if (!options.withRef && forwardedRef) {
752
- passDownProps.forwardedRef = forwardedRef;
753
- }
754
- return react.createElement(WrappedComponent, passDownProps);
738
+ const withTranslation = (ns, options = {}) => function Extend(WrappedComponent) {
739
+ function I18nextWithTranslation({
740
+ forwardedRef,
741
+ ...rest
742
+ }) {
743
+ const [t, i18n, ready] = useTranslation(ns, {
744
+ ...rest,
745
+ keyPrefix: options.keyPrefix
746
+ });
747
+ const passDownProps = {
748
+ ...rest,
749
+ t,
750
+ i18n,
751
+ tReady: ready
752
+ };
753
+ if (options.withRef && forwardedRef) {
754
+ passDownProps.ref = forwardedRef;
755
+ } else if (!options.withRef && forwardedRef) {
756
+ passDownProps.forwardedRef = forwardedRef;
755
757
  }
756
- I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;
757
- I18nextWithTranslation.WrappedComponent = WrappedComponent;
758
- const forwardRef = (props, ref) => react.createElement(I18nextWithTranslation, Object.assign({}, props, {
759
- forwardedRef: ref
760
- }));
761
- return options.withRef ? react.forwardRef(forwardRef) : I18nextWithTranslation;
762
- };
758
+ return react.createElement(WrappedComponent, passDownProps);
759
+ }
760
+ I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;
761
+ I18nextWithTranslation.WrappedComponent = WrappedComponent;
762
+ const forwardRef = (props, ref) => react.createElement(I18nextWithTranslation, Object.assign({}, props, {
763
+ forwardedRef: ref
764
+ }));
765
+ return options.withRef ? react.forwardRef(forwardRef) : I18nextWithTranslation;
763
766
  };
764
767
 
765
- const Translation = _ref => {
766
- let {
767
- ns,
768
- children,
769
- ...options
770
- } = _ref;
768
+ const Translation = ({
769
+ ns,
770
+ children,
771
+ ...options
772
+ }) => {
771
773
  const [t, i18n, ready] = useTranslation(ns, options);
772
774
  return children(t, {
773
775
  i18n,
@@ -775,12 +777,11 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
775
777
  }, ready);
776
778
  };
777
779
 
778
- function I18nextProvider(_ref) {
779
- let {
780
- i18n,
781
- defaultNS,
782
- children
783
- } = _ref;
780
+ function I18nextProvider({
781
+ i18n,
782
+ defaultNS,
783
+ children
784
+ }) {
784
785
  const value = react.useMemo(() => ({
785
786
  i18n,
786
787
  defaultNS
@@ -790,8 +791,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
790
791
  }, children);
791
792
  }
792
793
 
793
- const useSSR = function (initialI18nStore, initialLanguage) {
794
- let props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
794
+ const useSSR = (initialI18nStore, initialLanguage, props = {}) => {
795
795
  const {
796
796
  i18n: i18nFromProps
797
797
  } = props;
@@ -818,12 +818,11 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
818
818
  };
819
819
 
820
820
  const withSSR = () => function Extend(WrappedComponent) {
821
- function I18nextWithSSR(_ref) {
822
- let {
823
- initialI18nStore,
824
- initialLanguage,
825
- ...rest
826
- } = _ref;
821
+ function I18nextWithSSR({
822
+ initialI18nStore,
823
+ initialLanguage,
824
+ ...rest
825
+ }) {
827
826
  useSSR(initialI18nStore, initialLanguage);
828
827
  return react.createElement(WrappedComponent, {
829
828
  ...rest
@@ -1 +1 @@
1
- define(["exports","react"],(function(e,n){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var s=t({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),r=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function a(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(s[t[1]]||"/"===e.charAt(e.length-2))&&(n.voidElement=!0),n.name.startsWith("!--"))){var a=e.indexOf("--\x3e");return{type:"comment",comment:-1!==a?e.slice(4,a):""}}for(var i=new RegExp(r),o=null;null!==(o=i.exec(e));)if(o[0].trim())if(o[1]){var l=o[1].trim(),c=[l,""];l.indexOf("=")>-1&&(c=l.split("=")),n.attrs[c[0]]=c[1],i.lastIndex--}else o[2]&&(n.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return n}var i=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,o=/^\s*$/,l=Object.create(null);var c=function(e,n){n||(n={}),n.components||(n.components=l);var t,s=[],r=[],c=-1,u=!1;if(0!==e.indexOf("<")){var p=e.indexOf("<");s.push({type:"text",content:-1===p?e:e.substring(0,p)})}return e.replace(i,(function(i,l){if(u){if(i!=="</"+t.name+">")return;u=!1}var p,d="/"!==i.charAt(1),f=i.startsWith("\x3c!--"),g=l+i.length,m=e.charAt(g);if(f){var h=a(i);return c<0?(s.push(h),s):((p=r[c]).children.push(h),s)}if(d&&(c++,"tag"===(t=a(i)).type&&n.components[t.name]&&(t.type="component",u=!0),t.voidElement||u||!m||"<"===m||t.children.push({type:"text",content:e.slice(g,e.indexOf("<",g))}),0===c&&s.push(t),(p=r[c-1])&&p.children.push(t),r[c]=t),(!d||t.voidElement)&&(c>-1&&(t.voidElement||t.name===i.slice(2,-1))&&(c--,t=-1===c?s:r[c]),!u&&"<"!==m&&m)){p=-1===c?s:r[c].children;var y=e.indexOf("<",g),v=e.slice(g,-1===y?void 0:y);o.test(v)&&(v=" "),(y>-1&&c+p.length>=0||" "!==v)&&p.push({type:"text",content:v})}})),s};const u=(e,n,t,s)=>{const r=[t,{code:n,...s||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(r,"warn","react-i18next::",!0);y(r[0])&&(r[0]=`react-i18next:: ${r[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...r):console?.warn&&console.warn(...r)},p={},d=(e,n,t,s)=>{y(t)&&p[t]||(y(t)&&(p[t]=new Date),u(e,n,t,s))},f=(e,n)=>()=>{if(e.isInitialized)n();else{const t=()=>{setTimeout((()=>{e.off("initialized",t)}),0),n()};e.on("initialized",t)}},g=(e,n,t)=>{e.loadNamespaces(n,f(e,t))},m=(e,n,t,s)=>{if(y(t)&&(t=[t]),e.options.preload&&e.options.preload.indexOf(n)>-1)return g(e,t,s);t.forEach((n=>{e.options.ns.indexOf(n)<0&&e.options.ns.push(n)})),e.loadLanguages(n,f(e,s))},h=e=>e.displayName||e.name||(y(e)&&e.length>0?e:"Unknown"),y=e=>"string"==typeof e,v=e=>"object"==typeof e&&null!==e,N=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,x={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},E=e=>x[e];let b={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:e=>e.replace(N,E)};const O=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};b={...b,...e}},I=()=>b;let S;const w=e=>{S=e},$=()=>S,k=(e,n)=>{if(!e)return!1;const t=e.props?.children??e.children;return n?t.length>0:!!t},T=e=>{if(!e)return[];const n=e.props?.children??e.children;return e.props?.i18nIsDynamicList?A(n):n},A=e=>Array.isArray(e)?e:[e],R=(e,t,s,r)=>{if(!e)return"";let a="";const i=A(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return i.forEach(((e,i)=>{if(y(e))a+=`${e}`;else if(n.isValidElement(e)){const{props:n,type:l}=e,c=Object.keys(n).length,u=o.indexOf(l)>-1,p=n.children;if(!p&&u&&!c)return void(a+=`<${l}/>`);if(!p&&(!u||c)||n.i18nIsDynamicList)return void(a+=`<${i}></${i}>`);if(u&&1===c&&y(p))return void(a+=`<${l}>${p}</${l}>`);const d=R(p,t,s,r);a+=`<${i}>${d}</${i}>`}else if(null!==e)if(v(e)){const{format:n,...t}=e,i=Object.keys(t);if(1===i.length){const e=n?`${i[0]}, ${n}`:i[0];return void(a+=`{{${e}}}`)}u(s,"TRANS_INVALID_OBJ","Invalid child - Object should only have keys {{ value, format }} (format is optional).",{i18nKey:r,child:e})}else u(s,"TRANS_INVALID_VAR","Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.",{i18nKey:r,child:e});else u(s,"TRANS_NULL_VALUE","Passed in a null value as child",{i18nKey:r})})),a},j=(e,t,s,r,a,i)=>{if(""===t)return[];const o=r.transKeepBasicHtmlNodesFor||[],l=t&&new RegExp(o.map((e=>`<${e}`)).join("|")).test(t);if(!e&&!l&&!i)return[t];const u={},p=e=>{A(e).forEach((e=>{y(e)||(k(e)?p(T(e)):v(e)&&!n.isValidElement(e)&&Object.assign(u,e))}))};p(e);const d=c(`<0>${t}</0>`),f={...u,...a},g=(e,t,s)=>{const r=T(e),a=h(r,t.children,s);return(e=>Array.isArray(e)&&e.every(n.isValidElement))(r)&&0===a.length||e.props?.i18nIsDynamicList?r:a},m=(e,t,s,r,a)=>{e.dummy?(e.children=t,s.push(n.cloneElement(e,{key:r},a?void 0:t))):s.push(...n.Children.map([e],(e=>{const s={...e.props};return delete s.i18nIsDynamicList,n.createElement(e.type,{...s,key:r,ref:e.props.ref??e.ref},a?null:t)})))},h=(t,a,c)=>{const u=A(t);return A(a).reduce(((t,a,p)=>{const d=a.children?.[0]?.content&&s.services.interpolator.interpolate(a.children[0].content,f,s.language);if("tag"===a.type){let i=u[parseInt(a.name,10)];1!==c.length||i||(i=c[0][a.name]),i||(i={});const N=0!==Object.keys(a.attrs).length?((e,n)=>{const t={...n};return t.props=Object.assign(e.props,n.props),t})({props:a.attrs},i):i,x=n.isValidElement(N),E=x&&k(a,!0)&&!a.voidElement,b=l&&v(N)&&N.dummy&&!x,O=v(e)&&Object.hasOwnProperty.call(e,a.name);if(y(N)){const e=s.services.interpolator.interpolate(N,f,s.language);t.push(e)}else if(k(N)||E){const e=g(N,a,c);m(N,e,t,p)}else if(b){const e=h(u,a.children,c);m(N,e,t,p)}else if(Number.isNaN(parseFloat(a.name)))if(O){const e=g(N,a,c);m(N,e,t,p,a.voidElement)}else if(r.transSupportBasicHtmlNodes&&o.indexOf(a.name)>-1)if(a.voidElement)t.push(n.createElement(a.name,{key:`${a.name}-${p}`}));else{const e=h(u,a.children,c);t.push(n.createElement(a.name,{key:`${a.name}-${p}`},e))}else if(a.voidElement)t.push(`<${a.name} />`);else{const e=h(u,a.children,c);t.push(`<${a.name}>${e}</${a.name}>`)}else if(v(N)&&!x){const e=a.children[0]?d:null;e&&t.push(e)}else m(N,d,t,p,1!==a.children.length||!d)}else if("text"===a.type){const e=r.transWrapTextNodes,o=i?r.unescape(s.services.interpolator.interpolate(a.content,f,s.language)):s.services.interpolator.interpolate(a.content,f,s.language);e?t.push(n.createElement(e,{key:`${a.name}-${p}`},o)):t.push(o)}return t}),[])},N=h([{dummy:!0,children:e||[]}],d,A(e||[]));return T(N[0])},C=(e,t,s)=>{const r=e.key||t,a=n.cloneElement(e,{key:r});if(!a.props||!a.props.children||s.indexOf(`${t}/>`)<0&&s.indexOf(`${t} />`)<0)return a;return n.createElement((function(){return n.createElement(n.Fragment,null,a)}),{key:r})},L=(e,n,t,s)=>e?Array.isArray(e)?((e,n)=>e.map(((e,t)=>C(e,t,n))))(e,n):v(e)?((e,n)=>{const t={};return Object.keys(e).forEach((s=>{Object.assign(t,{[s]:C(e[s],s,n)})})),t})(e,n):(d(t,"TRANS_INVALID_COMPONENTS",'<Trans /> "components" prop expects an object or array',{i18nKey:s}),null):null;function P(e){let{children:t,count:s,parent:r,i18nKey:a,context:i,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:f,t:g,shouldUnescape:m,...h}=e;const v=f||$();if(!v)return d(v,"NO_I18NEXT_INSTANCE","Trans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:a}),t;const N=g||v.t.bind(v)||(e=>e),x={...I(),...v.options?.react};let E=p||N.ns||v.options?.defaultNS;E=y(E)?[E]:E||["translation"];const b=R(t,x,v,a),O=c||b||x.transEmptyNodeValue||a,{hashTransKey:S}=x,w=a||(S?S(b||O):b||O);v.options?.interpolation?.defaultVariables&&(l=l&&Object.keys(l).length>0?{...l,...v.options.interpolation.defaultVariables}:{...v.options.interpolation.defaultVariables});const k=l||void 0!==s&&!v.options?.interpolation?.alwaysFormat||!t?o.interpolation:{interpolation:{...o.interpolation,prefix:"#$?",suffix:"?$#"}},T={...o,context:i||o.context,count:s,...l,...k,defaultValue:O,ns:E},A=w?N(w,T):O,C=L(u,A,v,a),P=j(C||t,A,v,x,T,m),V=r??x.defaultTransParent;return V?n.createElement(V,h,P):P}const V={type:"3rdParty",init(e){O(e.options.react),w(e)}},_=n.createContext();class D{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach((e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)}))}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const K=e=>async n=>({...await(e.getInitialProps?.(n))??{},...z()}),z=()=>{const e=$(),n=e.reportNamespaces?.getUsedNamespaces()??[],t={},s={};return e.languages.forEach((t=>{s[t]={},n.forEach((n=>{s[t][n]=e.getResourceBundle(t,n)||{}}))})),t.initialI18nStore=s,t.initialLanguage=e.language,t};const U=(e,n,t,s)=>e.getFixedT(n,t,s),F=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{i18n:s}=t,{i18n:r,defaultNS:a}=n.useContext(_)||{},i=s||r||$();if(i&&!i.reportNamespaces&&(i.reportNamespaces=new D),!i){d(i,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const e=(e,n)=>y(n)?n:v(n)&&y(n.defaultValue)?n.defaultValue:Array.isArray(e)?e[e.length-1]:e,n=[e,{},!1];return n.t=e,n.i18n={},n.ready=!1,n}i.options.react?.wait&&d(i,"DEPRECATED_OPTION","useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const o={...I(),...i.options.react,...t},{useSuspense:l,keyPrefix:c}=o;let u=e||a||i.options?.defaultNS;u=y(u)?[u]:u||["translation"],i.reportNamespaces.addUsedNamespaces?.(u);const p=(i.isInitialized||i.initializedStoreOnce)&&u.every((e=>function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.languages&&n.languages.length?n.hasLoadedNamespace(e,{lng:t.lng,precheck:(n,s)=>{if(t.bindI18n?.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!s(n.isLanguageChangingTo,e))return!1}}):(d(n,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:n.languages}),!0)}(e,i,o))),f=((e,t,s,r)=>n.useCallback(U(e,t,s,r),[e,t,s,r]))(i,t.lng||null,"fallback"===o.nsMode?u:u[0],c),h=()=>f,N=()=>U(i,t.lng||null,"fallback"===o.nsMode?u:u[0],c),[x,E]=n.useState(h);let b=u.join();t.lng&&(b=`${t.lng}${b}`);const O=((e,t)=>{const s=n.useRef();return n.useEffect((()=>{s.current=e}),[e,t]),s.current})(b),S=n.useRef(!0);n.useEffect((()=>{const{bindI18n:e,bindI18nStore:n}=o;S.current=!0,p||l||(t.lng?m(i,t.lng,u,(()=>{S.current&&E(N)})):g(i,u,(()=>{S.current&&E(N)}))),p&&O&&O!==b&&S.current&&E(N);const s=()=>{S.current&&E(N)};return e&&i?.on(e,s),n&&i?.store.on(n,s),()=>{S.current=!1,i&&e?.split(" ").forEach((e=>i.off(e,s))),n&&i&&n.split(" ").forEach((e=>i.store.off(e,s)))}}),[i,b]),n.useEffect((()=>{S.current&&p&&E(h)}),[i,c,p]);const w=[x,i,p];if(w.t=x,w.i18n=i,w.ready=p,p)return w;if(!p&&!l)return w;throw new Promise((e=>{t.lng?m(i,t.lng,u,(()=>e())):g(i,u,(()=>e()))}))};const B=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{i18n:r}=s,{i18n:a}=n.useContext(_)||{},i=r||a||$();i.options?.isClone||(e&&!i.initializedStoreOnce&&(i.services.resourceStore.data=e,i.options.ns=Object.values(e).reduce(((e,n)=>(Object.keys(n).forEach((n=>{e.indexOf(n)<0&&e.push(n)})),e)),i.options.ns),i.initializedStoreOnce=!0,i.isInitialized=!0),t&&!i.initializedLanguageOnce&&(i.changeLanguage(t),i.initializedLanguageOnce=!0))};e.I18nContext=_,e.I18nextProvider=function(e){let{i18n:t,defaultNS:s,children:r}=e;const a=n.useMemo((()=>({i18n:t,defaultNS:s})),[t,s]);return n.createElement(_.Provider,{value:a},r)},e.Trans=function(e){let{children:t,count:s,parent:r,i18nKey:a,context:i,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:d,t:f,shouldUnescape:g,...m}=e;const{i18n:h,defaultNS:y}=n.useContext(_)||{},v=d||h||$(),N=f||v?.t.bind(v);return P({children:t,count:s,parent:r,i18nKey:a,context:i,tOptions:o,values:l,defaults:c,components:u,ns:p||N?.ns||y||v?.options?.defaultNS,i18n:v,t:f,shouldUnescape:g,...m})},e.TransWithoutContext=P,e.Translation=e=>{let{ns:n,children:t,...s}=e;const[r,a,i]=F(n,s);return t(r,{i18n:a,lng:a.language},i)},e.composeInitialProps=K,e.date=()=>"",e.getDefaults=I,e.getI18n=$,e.getInitialProps=z,e.initReactI18next=V,e.number=()=>"",e.plural=()=>"",e.select=()=>"",e.selectOrdinal=()=>"",e.setDefaults=O,e.setI18n=w,e.time=()=>"",e.useSSR=B,e.useTranslation=F,e.withSSR=()=>function(e){function t(t){let{initialI18nStore:s,initialLanguage:r,...a}=t;return B(s,r),n.createElement(e,{...a})}return t.getInitialProps=K(e),t.displayName=`withI18nextSSR(${h(e)})`,t.WrappedComponent=e,t},e.withTranslation=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(s){function r(r){let{forwardedRef:a,...i}=r;const[o,l,c]=F(e,{...i,keyPrefix:t.keyPrefix}),u={...i,t:o,i18n:l,tReady:c};return t.withRef&&a?u.ref=a:!t.withRef&&a&&(u.forwardedRef=a),n.createElement(s,u)}r.displayName=`withI18nextTranslation(${h(s)})`,r.WrappedComponent=s;return t.withRef?n.forwardRef(((e,t)=>n.createElement(r,Object.assign({},e,{forwardedRef:t})))):r}}}));
1
+ define(["exports","react"],(function(e,n){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var s=t({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),r=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function a(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(s[t[1]]||"/"===e.charAt(e.length-2))&&(n.voidElement=!0),n.name.startsWith("!--"))){var a=e.indexOf("--\x3e");return{type:"comment",comment:-1!==a?e.slice(4,a):""}}for(var i=new RegExp(r),o=null;null!==(o=i.exec(e));)if(o[0].trim())if(o[1]){var l=o[1].trim(),c=[l,""];l.indexOf("=")>-1&&(c=l.split("=")),n.attrs[c[0]]=c[1],i.lastIndex--}else o[2]&&(n.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return n}var i=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,o=/^\s*$/,l=Object.create(null);var c=function(e,n){n||(n={}),n.components||(n.components=l);var t,s=[],r=[],c=-1,u=!1;if(0!==e.indexOf("<")){var p=e.indexOf("<");s.push({type:"text",content:-1===p?e:e.substring(0,p)})}return e.replace(i,(function(i,l){if(u){if(i!=="</"+t.name+">")return;u=!1}var p,d="/"!==i.charAt(1),f=i.startsWith("\x3c!--"),m=l+i.length,g=e.charAt(m);if(f){var h=a(i);return c<0?(s.push(h),s):((p=r[c]).children.push(h),s)}if(d&&(c++,"tag"===(t=a(i)).type&&n.components[t.name]&&(t.type="component",u=!0),t.voidElement||u||!g||"<"===g||t.children.push({type:"text",content:e.slice(m,e.indexOf("<",m))}),0===c&&s.push(t),(p=r[c-1])&&p.children.push(t),r[c]=t),(!d||t.voidElement)&&(c>-1&&(t.voidElement||t.name===i.slice(2,-1))&&(c--,t=-1===c?s:r[c]),!u&&"<"!==g&&g)){p=-1===c?s:r[c].children;var y=e.indexOf("<",m),N=e.slice(m,-1===y?void 0:y);o.test(N)&&(N=" "),(y>-1&&c+p.length>=0||" "!==N)&&p.push({type:"text",content:N})}})),s};const u=(e,n,t,s)=>{const r=[t,{code:n,...s||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(r,"warn","react-i18next::",!0);y(r[0])&&(r[0]=`react-i18next:: ${r[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...r):console?.warn&&console.warn(...r)},p={},d=(e,n,t,s)=>{y(t)&&p[t]||(y(t)&&(p[t]=new Date),u(e,n,t,s))},f=(e,n)=>()=>{if(e.isInitialized)n();else{const t=()=>{setTimeout((()=>{e.off("initialized",t)}),0),n()};e.on("initialized",t)}},m=(e,n,t)=>{e.loadNamespaces(n,f(e,t))},g=(e,n,t,s)=>{if(y(t)&&(t=[t]),e.options.preload&&e.options.preload.indexOf(n)>-1)return m(e,t,s);t.forEach((n=>{e.options.ns.indexOf(n)<0&&e.options.ns.push(n)})),e.loadLanguages(n,f(e,s))},h=e=>e.displayName||e.name||(y(e)&&e.length>0?e:"Unknown"),y=e=>"string"==typeof e,N=e=>"object"==typeof e&&null!==e,x=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,b={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},v=e=>b[e];let E={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:e=>e.replace(x,v)};const O=(e={})=>{E={...E,...e}},I=()=>E;let S;const w=e=>{S=e},$=()=>S,k=(e,n)=>{if(!e)return!1;const t=e.props?.children??e.children;return n?t.length>0:!!t},T=e=>{if(!e)return[];const n=e.props?.children??e.children;return e.props?.i18nIsDynamicList?A(n):n},A=e=>Array.isArray(e)?e:[e],R=(e,t,s,r)=>{if(!e)return"";let a="";const i=A(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return i.forEach(((e,i)=>{if(y(e))a+=`${e}`;else if(n.isValidElement(e)){const{props:n,type:l}=e,c=Object.keys(n).length,u=o.indexOf(l)>-1,p=n.children;if(!p&&u&&!c)return void(a+=`<${l}/>`);if(!p&&(!u||c)||n.i18nIsDynamicList)return void(a+=`<${i}></${i}>`);if(u&&1===c&&y(p))return void(a+=`<${l}>${p}</${l}>`);const d=R(p,t,s,r);a+=`<${i}>${d}</${i}>`}else if(null!==e)if(N(e)){const{format:n,...t}=e,i=Object.keys(t);if(1===i.length){const e=n?`${i[0]}, ${n}`:i[0];return void(a+=`{{${e}}}`)}u(s,"TRANS_INVALID_OBJ","Invalid child - Object should only have keys {{ value, format }} (format is optional).",{i18nKey:r,child:e})}else u(s,"TRANS_INVALID_VAR","Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.",{i18nKey:r,child:e});else u(s,"TRANS_NULL_VALUE","Passed in a null value as child",{i18nKey:r})})),a},j=(e,t,s,r,a,i,o)=>{if(""===s)return[];const l=a.transKeepBasicHtmlNodesFor||[],u=s&&new RegExp(l.map((e=>`<${e}`)).join("|")).test(s);if(!(e||t||u||o))return[s];const p=t??{},d=e=>{A(e).forEach((e=>{y(e)||(k(e)?d(T(e)):N(e)&&!n.isValidElement(e)&&Object.assign(p,e))}))};d(e);const f=c(`<0>${s}</0>`),m={...p,...i},g=(e,t,s)=>{const r=T(e),a=x(r,t.children,s);return(e=>Array.isArray(e)&&e.every(n.isValidElement))(r)&&0===a.length||e.props?.i18nIsDynamicList?r:a},h=(e,t,s,r,a)=>{e.dummy?(e.children=t,s.push(n.cloneElement(e,{key:r},a?void 0:t))):s.push(...n.Children.map([e],(e=>{const s={...e.props};return delete s.i18nIsDynamicList,n.createElement(e.type,{...s,key:r,ref:e.props.ref??e.ref},a?null:t)})))},x=(e,s,i)=>{const c=A(e);return A(s).reduce(((e,s,p)=>{const d=s.children?.[0]?.content&&r.services.interpolator.interpolate(s.children[0].content,m,r.language);if("tag"===s.type){let o=c[parseInt(s.name,10)];!o&&t&&(o=t[s.name]),1!==i.length||o||(o=i[0][s.name]),o||(o={});const f=0!==Object.keys(s.attrs).length?((e,n)=>{const t={...n};return t.props=Object.assign(e.props,n.props),t})({props:s.attrs},o):o,b=n.isValidElement(f),v=b&&k(s,!0)&&!s.voidElement,E=u&&N(f)&&f.dummy&&!b,O=N(t)&&Object.hasOwnProperty.call(t,s.name);if(y(f)){const n=r.services.interpolator.interpolate(f,m,r.language);e.push(n)}else if(k(f)||v){const n=g(f,s,i);h(f,n,e,p)}else if(E){const n=x(c,s.children,i);h(f,n,e,p)}else if(Number.isNaN(parseFloat(s.name)))if(O){const n=g(f,s,i);h(f,n,e,p,s.voidElement)}else if(a.transSupportBasicHtmlNodes&&l.indexOf(s.name)>-1)if(s.voidElement)e.push(n.createElement(s.name,{key:`${s.name}-${p}`}));else{const t=x(c,s.children,i);e.push(n.createElement(s.name,{key:`${s.name}-${p}`},t))}else if(s.voidElement)e.push(`<${s.name} />`);else{const n=x(c,s.children,i);e.push(`<${s.name}>${n}</${s.name}>`)}else if(N(f)&&!b){const n=s.children[0]?d:null;n&&e.push(n)}else h(f,d,e,p,1!==s.children.length||!d)}else if("text"===s.type){const t=a.transWrapTextNodes,i=o?a.unescape(r.services.interpolator.interpolate(s.content,m,r.language)):r.services.interpolator.interpolate(s.content,m,r.language);t?e.push(n.createElement(t,{key:`${s.name}-${p}`},i)):e.push(i)}return e}),[])},b=x([{dummy:!0,children:e||[]}],f,A(e||[]));return T(b[0])},C=(e,t,s)=>{const r=e.key||t,a=n.cloneElement(e,{key:r});if(!a.props||!a.props.children||s.indexOf(`${t}/>`)<0&&s.indexOf(`${t} />`)<0)return a;return n.createElement((function(){return n.createElement(n.Fragment,null,a)}),{key:r})},L=(e,n,t,s)=>e?Array.isArray(e)?((e,n)=>e.map(((e,t)=>C(e,t,n))))(e,n):N(e)?((e,n)=>{const t={};return Object.keys(e).forEach((s=>{Object.assign(t,{[s]:C(e[s],s,n)})})),t})(e,n):(d(t,"TRANS_INVALID_COMPONENTS",'<Trans /> "components" prop expects an object or array',{i18nKey:s}),null):null,P=e=>!!N(e)&&(!Array.isArray(e)&&Object.keys(e).reduce(((e,n)=>e&&Number.isNaN(Number.parseFloat(n))),!0));function V({children:e,count:t,parent:s,i18nKey:r,context:a,tOptions:i={},values:o,defaults:l,components:c,ns:u,i18n:p,t:f,shouldUnescape:m,...g}){const h=p||$();if(!h)return d(h,"NO_I18NEXT_INSTANCE","Trans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:r}),e;const N=f||h.t.bind(h)||(e=>e),x={...I(),...h.options?.react};let b=u||N.ns||h.options?.defaultNS;b=y(b)?[b]:b||["translation"];const v=R(e,x,h,r),E=l||v||x.transEmptyNodeValue||r,{hashTransKey:O}=x,S=r||(O?O(v||E):v||E);h.options?.interpolation?.defaultVariables&&(o=o&&Object.keys(o).length>0?{...o,...h.options.interpolation.defaultVariables}:{...h.options.interpolation.defaultVariables});const w=o||void 0!==t&&!h.options?.interpolation?.alwaysFormat||!e?i.interpolation:{interpolation:{...i.interpolation,prefix:"#$?",suffix:"?$#"}},k={...i,context:a||i.context,count:t,...o,...w,defaultValue:E,ns:b},T=S?N(S,k):E,A=L(c,T,h,r);let C=A||e,V=null;P(A)&&(V=A,C=e);const _=j(C,V,T,h,x,k,m),D=s??x.defaultTransParent;return D?n.createElement(D,g,_):_}const _={type:"3rdParty",init(e){O(e.options.react),w(e)}},D=n.createContext();class K{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach((e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)}))}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const z=e=>async n=>({...await(e.getInitialProps?.(n))??{},...U()}),U=()=>{const e=$(),n=e.reportNamespaces?.getUsedNamespaces()??[],t={},s={};return e.languages.forEach((t=>{s[t]={},n.forEach((n=>{s[t][n]=e.getResourceBundle(t,n)||{}}))})),t.initialI18nStore=s,t.initialLanguage=e.language,t};const F=(e,n,t,s)=>e.getFixedT(n,t,s),B=(e,t={})=>{const{i18n:s}=t,{i18n:r,defaultNS:a}=n.useContext(D)||{},i=s||r||$();if(i&&!i.reportNamespaces&&(i.reportNamespaces=new K),!i){d(i,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const e=(e,n)=>y(n)?n:N(n)&&y(n.defaultValue)?n.defaultValue:Array.isArray(e)?e[e.length-1]:e,n=[e,{},!1];return n.t=e,n.i18n={},n.ready=!1,n}i.options.react?.wait&&d(i,"DEPRECATED_OPTION","useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const o={...I(),...i.options.react,...t},{useSuspense:l,keyPrefix:c}=o;let u=e||a||i.options?.defaultNS;u=y(u)?[u]:u||["translation"],i.reportNamespaces.addUsedNamespaces?.(u);const p=(i.isInitialized||i.initializedStoreOnce)&&u.every((e=>((e,n,t={})=>n.languages&&n.languages.length?n.hasLoadedNamespace(e,{lng:t.lng,precheck:(n,s)=>{if(t.bindI18n?.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!s(n.isLanguageChangingTo,e))return!1}}):(d(n,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:n.languages}),!0))(e,i,o))),f=((e,t,s,r)=>n.useCallback(F(e,t,s,r),[e,t,s,r]))(i,t.lng||null,"fallback"===o.nsMode?u:u[0],c),h=()=>f,x=()=>F(i,t.lng||null,"fallback"===o.nsMode?u:u[0],c),[b,v]=n.useState(h);let E=u.join();t.lng&&(E=`${t.lng}${E}`);const O=((e,t)=>{const s=n.useRef();return n.useEffect((()=>{s.current=e}),[e,t]),s.current})(E),S=n.useRef(!0);n.useEffect((()=>{const{bindI18n:e,bindI18nStore:n}=o;S.current=!0,p||l||(t.lng?g(i,t.lng,u,(()=>{S.current&&v(x)})):m(i,u,(()=>{S.current&&v(x)}))),p&&O&&O!==E&&S.current&&v(x);const s=()=>{S.current&&v(x)};return e&&i?.on(e,s),n&&i?.store.on(n,s),()=>{S.current=!1,i&&e?.split(" ").forEach((e=>i.off(e,s))),n&&i&&n.split(" ").forEach((e=>i.store.off(e,s)))}}),[i,E]),n.useEffect((()=>{S.current&&p&&v(h)}),[i,c,p]);const w=[b,i,p];if(w.t=b,w.i18n=i,w.ready=p,p)return w;if(!p&&!l)return w;throw new Promise((e=>{t.lng?g(i,t.lng,u,(()=>e())):m(i,u,(()=>e()))}))};const W=(e,t,s={})=>{const{i18n:r}=s,{i18n:a}=n.useContext(D)||{},i=r||a||$();i.options?.isClone||(e&&!i.initializedStoreOnce&&(i.services.resourceStore.data=e,i.options.ns=Object.values(e).reduce(((e,n)=>(Object.keys(n).forEach((n=>{e.indexOf(n)<0&&e.push(n)})),e)),i.options.ns),i.initializedStoreOnce=!0,i.isInitialized=!0),t&&!i.initializedLanguageOnce&&(i.changeLanguage(t),i.initializedLanguageOnce=!0))};e.I18nContext=D,e.I18nextProvider=function({i18n:e,defaultNS:t,children:s}){const r=n.useMemo((()=>({i18n:e,defaultNS:t})),[e,t]);return n.createElement(D.Provider,{value:r},s)},e.Trans=function({children:e,count:t,parent:s,i18nKey:r,context:a,tOptions:i={},values:o,defaults:l,components:c,ns:u,i18n:p,t:d,shouldUnescape:f,...m}){const{i18n:g,defaultNS:h}=n.useContext(D)||{},y=p||g||$(),N=d||y?.t.bind(y);return V({children:e,count:t,parent:s,i18nKey:r,context:a,tOptions:i,values:o,defaults:l,components:c,ns:u||N?.ns||h||y?.options?.defaultNS,i18n:y,t:d,shouldUnescape:f,...m})},e.TransWithoutContext=V,e.Translation=({ns:e,children:n,...t})=>{const[s,r,a]=B(e,t);return n(s,{i18n:r,lng:r.language},a)},e.composeInitialProps=z,e.date=()=>"",e.getDefaults=I,e.getI18n=$,e.getInitialProps=U,e.initReactI18next=_,e.number=()=>"",e.plural=()=>"",e.select=()=>"",e.selectOrdinal=()=>"",e.setDefaults=O,e.setI18n=w,e.time=()=>"",e.useSSR=W,e.useTranslation=B,e.withSSR=()=>function(e){function t({initialI18nStore:t,initialLanguage:s,...r}){return W(t,s),n.createElement(e,{...r})}return t.getInitialProps=z(e),t.displayName=`withI18nextSSR(${h(e)})`,t.WrappedComponent=e,t},e.withTranslation=(e,t={})=>function(s){function r({forwardedRef:r,...a}){const[i,o,l]=B(e,{...a,keyPrefix:t.keyPrefix}),c={...a,t:i,i18n:o,tReady:l};return t.withRef&&r?c.ref=r:!t.withRef&&r&&(c.forwardedRef=r),n.createElement(s,c)}r.displayName=`withI18nextTranslation(${h(s)})`,r.WrappedComponent=s;return t.withRef?n.forwardRef(((e,t)=>n.createElement(r,Object.assign({},e,{forwardedRef:t})))):r}}));
@@ -6,12 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.I18nextProvider = I18nextProvider;
7
7
  var _react = require("react");
8
8
  var _context = require("./context.js");
9
- function I18nextProvider(_ref) {
10
- let {
11
- i18n,
12
- defaultNS,
13
- children
14
- } = _ref;
9
+ function I18nextProvider({
10
+ i18n,
11
+ defaultNS,
12
+ children
13
+ }) {
15
14
  const value = (0, _react.useMemo)(() => ({
16
15
  i18n,
17
16
  defaultNS
@@ -13,23 +13,22 @@ Object.defineProperty(exports, "nodesToString", {
13
13
  var _react = require("react");
14
14
  var _TransWithoutContext = require("./TransWithoutContext.js");
15
15
  var _context = require("./context.js");
16
- function Trans(_ref) {
17
- let {
18
- children,
19
- count,
20
- parent,
21
- i18nKey,
22
- context,
23
- tOptions = {},
24
- values,
25
- defaults,
26
- components,
27
- ns,
28
- i18n: i18nFromProps,
29
- t: tFromProps,
30
- shouldUnescape,
31
- ...additionalProps
32
- } = _ref;
16
+ function Trans({
17
+ children,
18
+ count,
19
+ parent,
20
+ i18nKey,
21
+ context,
22
+ tOptions = {},
23
+ values,
24
+ defaults,
25
+ components,
26
+ ns,
27
+ i18n: i18nFromProps,
28
+ t: tFromProps,
29
+ shouldUnescape,
30
+ ...additionalProps
31
+ }) {
33
32
  const {
34
33
  i18n: i18nFromContext,
35
34
  defaultNS: defaultNSFromContext
@@ -96,12 +96,12 @@ const nodesToString = (children, i18nOptions, i18n, i18nKey) => {
96
96
  return stringNode;
97
97
  };
98
98
  exports.nodesToString = nodesToString;
99
- const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {
99
+ const renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {
100
100
  if (targetString === '') return [];
101
101
  const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];
102
102
  const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);
103
- if (!children && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];
104
- const data = {};
103
+ if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];
104
+ const data = knownComponentsMap ?? {};
105
105
  const getData = childs => {
106
106
  const childrenArray = getAsArray(childs);
107
107
  childrenArray.forEach(child => {
@@ -147,6 +147,7 @@ const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, s
147
147
  const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);
148
148
  if (node.type === 'tag') {
149
149
  let tmp = reactNodes[parseInt(node.name, 10)];
150
+ if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];
150
151
  if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];
151
152
  if (!tmp) tmp = {};
152
153
  const child = Object.keys(node.attrs).length !== 0 ? mergeProps({
@@ -155,7 +156,7 @@ const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, s
155
156
  const isElement = (0, _react.isValidElement)(child);
156
157
  const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;
157
158
  const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && (0, _utils.isObject)(child) && child.dummy && !isElement;
158
- const isKnownComponent = (0, _utils.isObject)(children) && Object.hasOwnProperty.call(children, node.name);
159
+ const isKnownComponent = (0, _utils.isObject)(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);
159
160
  if ((0, _utils.isString)(child)) {
160
161
  const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);
161
162
  mem.push(value);
@@ -250,23 +251,27 @@ const generateComponents = (components, translation, i18n, i18nKey) => {
250
251
  });
251
252
  return null;
252
253
  };
253
- function Trans(_ref) {
254
- let {
255
- children,
256
- count,
257
- parent,
258
- i18nKey,
259
- context,
260
- tOptions = {},
261
- values,
262
- defaults,
263
- components,
264
- ns,
265
- i18n: i18nFromProps,
266
- t: tFromProps,
267
- shouldUnescape,
268
- ...additionalProps
269
- } = _ref;
254
+ const isComponentsMap = object => {
255
+ if (!(0, _utils.isObject)(object)) return false;
256
+ if (Array.isArray(object)) return false;
257
+ return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);
258
+ };
259
+ function Trans({
260
+ children,
261
+ count,
262
+ parent,
263
+ i18nKey,
264
+ context,
265
+ tOptions = {},
266
+ values,
267
+ defaults,
268
+ components,
269
+ ns,
270
+ i18n: i18nFromProps,
271
+ t: tFromProps,
272
+ shouldUnescape,
273
+ ...additionalProps
274
+ }) {
270
275
  const i18n = i18nFromProps || (0, _i18nInstance.getI18n)();
271
276
  if (!i18n) {
272
277
  (0, _utils.warnOnce)(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {
@@ -313,7 +318,13 @@ function Trans(_ref) {
313
318
  };
314
319
  const translation = key ? t(key, combinedTOpts) : defaultValue;
315
320
  const generatedComponents = generateComponents(components, translation, i18n, i18nKey);
316
- const content = renderNodes(generatedComponents || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
321
+ let indexedChildren = generatedComponents || children;
322
+ let componentsMap = null;
323
+ if (isComponentsMap(generatedComponents)) {
324
+ componentsMap = generatedComponents;
325
+ indexedChildren = children;
326
+ }
327
+ const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
317
328
  const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;
318
329
  return useAsParent ? (0, _react.createElement)(useAsParent, additionalProps, content) : content;
319
330
  }
@@ -5,12 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Translation = void 0;
7
7
  var _useTranslation = require("./useTranslation.js");
8
- const Translation = _ref => {
9
- let {
10
- ns,
11
- children,
12
- ...options
13
- } = _ref;
8
+ const Translation = ({
9
+ ns,
10
+ children,
11
+ ...options
12
+ }) => {
14
13
  const [t, i18n, ready] = (0, _useTranslation.useTranslation)(ns, options);
15
14
  return children(t, {
16
15
  i18n,
@@ -15,8 +15,7 @@ let defaultOptions = {
15
15
  useSuspense: true,
16
16
  unescape: _unescape.unescape
17
17
  };
18
- const setDefaults = function () {
19
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18
+ const setDefaults = (options = {}) => {
20
19
  defaultOptions = {
21
20
  ...defaultOptions,
22
21
  ...options
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useSSR = void 0;
7
7
  var _react = require("react");
8
8
  var _context = require("./context.js");
9
- const useSSR = function (initialI18nStore, initialLanguage) {
10
- let props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
9
+ const useSSR = (initialI18nStore, initialLanguage, props = {}) => {
11
10
  const {
12
11
  i18n: i18nFromProps
13
12
  } = props;
@@ -16,8 +16,7 @@ const usePrevious = (value, ignore) => {
16
16
  };
17
17
  const alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);
18
18
  const useMemoizedT = (i18n, language, namespace, keyPrefix) => (0, _react.useCallback)(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);
19
- const useTranslation = function (ns) {
20
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
19
+ const useTranslation = (ns, props = {}) => {
21
20
  const {
22
21
  i18n: i18nFromProps
23
22
  } = props;
@@ -53,8 +53,7 @@ const loadLanguages = (i18n, lng, ns, cb) => {
53
53
  i18n.loadLanguages(lng, loadedClb(i18n, cb));
54
54
  };
55
55
  exports.loadLanguages = loadLanguages;
56
- const hasLoadedNamespace = function (ns, i18n) {
57
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
56
+ const hasLoadedNamespace = (ns, i18n, options = {}) => {
58
57
  if (!i18n.languages || !i18n.languages.length) {
59
58
  warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {
60
59
  languages: i18n.languages
@@ -9,12 +9,11 @@ var _useSSR = require("./useSSR.js");
9
9
  var _context = require("./context.js");
10
10
  var _utils = require("./utils.js");
11
11
  const withSSR = () => function Extend(WrappedComponent) {
12
- function I18nextWithSSR(_ref) {
13
- let {
14
- initialI18nStore,
15
- initialLanguage,
16
- ...rest
17
- } = _ref;
12
+ function I18nextWithSSR({
13
+ initialI18nStore,
14
+ initialLanguage,
15
+ ...rest
16
+ }) {
18
17
  (0, _useSSR.useSSR)(initialI18nStore, initialLanguage);
19
18
  return (0, _react.createElement)(WrappedComponent, {
20
19
  ...rest