@lingui/react 4.0.0-next.0 → 4.0.0-next.2

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.
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var _extends = require('@babel/runtime/helpers/extends');
4
3
  var React = require('react');
5
4
 
6
5
  const LinguiContext = /*#__PURE__*/React.createContext(null);
@@ -13,23 +12,6 @@ function useLingui() {
13
12
  }
14
13
  return context;
15
14
  }
16
- function withI18n(o) {
17
- return WrappedComponent => {
18
- return props => {
19
- if (process.env.NODE_ENV !== "production") {
20
- if (typeof o === "function" || /*#__PURE__*/React.isValidElement(o)) {
21
- throw new Error("withI18n([options]) takes options as a first argument, " + "but received React component itself. Without options, the Component " + "should be wrapped as withI18n()(Component), not withI18n(Component).");
22
- }
23
- }
24
- const {
25
- i18n
26
- } = useLingui();
27
- return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
28
- i18n: i18n
29
- }));
30
- };
31
- };
32
- }
33
15
  const I18nProvider = _ref => {
34
16
  let {
35
17
  i18n,
@@ -136,7 +118,7 @@ function formatElements(value) {
136
118
  let element = elements[index];
137
119
  if (!element || voidElementTags[element.type] && children) {
138
120
  if (!element) {
139
- console.error(`Can use element at index '${index}' as it is not declared in the original translation`);
121
+ console.error(`Can't use element at index '${index}' as it is not declared in the original translation`);
140
122
  } else {
141
123
  console.error(`${element.type} is a void element tag therefore it must have no children`);
142
124
  }
@@ -193,10 +175,10 @@ function Trans(props) {
193
175
  formats
194
176
  } = props;
195
177
  const values = {
196
- ...props.values
178
+ ...(props.values || {})
197
179
  };
198
180
  const components = {
199
- ...props.components
181
+ ...(props.components || {})
200
182
  };
201
183
  if (values) {
202
184
  /*
@@ -259,13 +241,8 @@ function Trans(props) {
259
241
  const DefaultComponent = defaultComponent;
260
242
  return DefaultComponent && !component ? /*#__PURE__*/React.createElement(DefaultComponent, i18nProps, translation) : /*#__PURE__*/React.createElement(Component, null, translation);
261
243
  }
262
- Trans.defaultProps = {
263
- values: {},
264
- components: {}
265
- };
266
244
 
267
245
  exports.I18nProvider = I18nProvider;
268
246
  exports.Trans = Trans;
269
247
  exports.useLingui = useLingui;
270
- exports.withI18n = withI18n;
271
248
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/I18nProvider.tsx","../../src/format.ts","../../src/Trans.tsx"],"sourcesContent":["import React, { ComponentType, FunctionComponent } from \"react\"\nimport { I18n } from \"@lingui/core\"\nimport { TransRenderProps } from \"./Trans\"\n\nexport type I18nContext = {\n i18n: I18n\n defaultComponent?: ComponentType<TransRenderProps>\n}\n\nexport type withI18nProps = {\n i18n: I18n\n}\n\nexport type I18nProviderProps = I18nContext & {\n forceRenderOnLocaleChange?: boolean\n children?: React.ReactNode\n}\n\nconst LinguiContext = React.createContext<I18nContext>(null)\n\nexport function useLingui(): I18nContext {\n const context = React.useContext<I18nContext>(LinguiContext)\n\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\"useLingui hook was used without I18nProvider.\")\n }\n }\n\n return context\n}\n\nexport function withI18n(\n o?: object\n): <P extends withI18nProps>(\n Component: ComponentType<P>\n) => React.ComponentType<Omit<P, \"i18n\">> {\n return <P extends withI18nProps>(\n WrappedComponent: ComponentType<P>\n ): ComponentType<P> => {\n return (props) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof o === \"function\" || React.isValidElement(o)) {\n throw new Error(\n \"withI18n([options]) takes options as a first argument, \" +\n \"but received React component itself. Without options, the Component \" +\n \"should be wrapped as withI18n()(Component), not withI18n(Component).\"\n )\n }\n }\n\n const { i18n } = useLingui()\n return <WrappedComponent {...props} i18n={i18n} />\n }\n }\n}\n\nexport const I18nProvider: FunctionComponent<I18nProviderProps> = ({\n i18n,\n defaultComponent,\n forceRenderOnLocaleChange = true,\n children,\n}) => {\n /**\n * We can't pass `i18n` object directly through context, because even when locale\n * or messages are changed, i18n object is still the same. Context provider compares\n * reference identity and suggested workaround is create a wrapper object every time\n * we need to trigger re-render. See https://reactjs.org/docs/context.html#caveats.\n *\n * Due to this effect we also pass `defaultComponent` in the same context, instead\n * of creating a separate Provider/Consumer pair.\n *\n * We can't use useMemo hook either, because we want to recalculate value manually.\n */\n const makeContext = () => ({\n i18n,\n defaultComponent,\n })\n const getRenderKey = () => {\n return (\n forceRenderOnLocaleChange ? i18n.locale || \"default\" : \"default\"\n ) as string\n }\n\n const [context, setContext] = React.useState<I18nContext>(makeContext()),\n [renderKey, setRenderKey] = React.useState<string>(getRenderKey())\n\n /**\n * Subscribe for locale/message changes\n *\n * I18n object from `@lingui/core` is the single source of truth for all i18n related\n * data (active locale, catalogs). When new messages are loaded or locale is changed\n * we need to trigger re-rendering of LinguiContext.Consumers.\n *\n * We call `setContext(makeContext())` after adding the observer in case the `change`\n * event would already have fired between the inital renderKey calculation and the\n * `useEffect` hook being called. This can happen if locales are loaded/activated\n * async.\n */\n React.useEffect(() => {\n const unsubscribe = i18n.on(\"change\", () => {\n setContext(makeContext())\n setRenderKey(getRenderKey())\n })\n if (renderKey === \"default\") {\n setRenderKey(getRenderKey())\n }\n if (forceRenderOnLocaleChange && renderKey === \"default\") {\n console.log(\n \"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\"\n )\n }\n return () => unsubscribe()\n }, [])\n\n if (forceRenderOnLocaleChange && renderKey === \"default\") return null\n\n return (\n <LinguiContext.Provider value={context} key={renderKey}>\n {children}\n </LinguiContext.Provider>\n )\n}\n","import React from \"react\"\n\n// match <tag>paired</tag> and <tag/> unpaired tags\nconst tagRe = /<([a-zA-Z0-9]+)>(.*?)<\\/\\1>|<([a-zA-Z0-9]+)\\/>/\nconst nlRe = /(?:\\r\\n|\\r|\\n)/g\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nconst voidElementTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n menuitem: true,\n}\n\n/**\n * `formatElements` - parse string and return tree of react elements\n *\n * `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)\n * placeholders. `elements` is a array of react elements which indexes\n * correspond to element indexes in formatted string\n */\nfunction formatElements(\n value: string,\n elements: { [key: string]: React.ReactElement<any> } = {}\n): string | Array<any> {\n const uniqueId = makeCounter(0, \"$lingui$\")\n const parts = value.replace(nlRe, \"\").split(tagRe)\n\n // no inline elements, return\n if (parts.length === 1) return value\n\n const tree = []\n\n const before = parts.shift()\n if (before) tree.push(before)\n\n for (const [index, children, after] of getElements(parts)) {\n let element = elements[index]\n\n if (!element || (voidElementTags[element.type as string] && children)) {\n if (!element) {\n console.error(\n `Can use element at index '${index}' as it is not declared in the original translation`\n )\n } else {\n console.error(\n `${element.type} is a void element tag therefore it must have no children`\n )\n }\n\n // ignore problematic element but push its children and elements after it\n element = React.createElement(React.Fragment)\n }\n\n tree.push(\n React.cloneElement(\n element,\n { key: uniqueId() },\n\n // format children for pair tags\n // unpaired tags might have children if it's a component passed as a variable\n children ? formatElements(children, elements) : element.props.children\n )\n )\n\n if (after) tree.push(after)\n }\n\n return tree\n}\n\n/*\n * `getElements` - return array of element indexes and element childrens\n *\n * `parts` is array of [pairedIndex, children, unpairedIndex, textAfter, ...]\n * where:\n * - `pairedIndex` is index of paired element (undef for unpaired)\n * - `children` are children of paired element (undef for unpaired)\n * - `unpairedIndex` is index of unpaired element (undef for paired)\n * - `textAfter` is string after all elements (empty string, if there's nothing)\n *\n * `parts` length is always multiply of 4\n *\n * Returns: Array<[elementIndex, children, after]>\n */\nfunction getElements(parts) {\n if (!parts.length) return []\n\n const [paired, children, unpaired, after] = parts.slice(0, 4)\n\n return [[paired || unpaired, children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter =\n (count = 0, prefix = \"\") =>\n () =>\n `${prefix}_${count++}`\n\nexport { formatElements }\n","import React from \"react\"\n\nimport { useLingui } from \"./I18nProvider\"\nimport { formatElements } from \"./format\"\n\nexport type TransRenderProps = {\n id?: string\n translation?: React.ReactNode\n children?: React.ReactNode\n message?: string | null\n isTranslated?: boolean\n}\n\nexport type TransProps = {\n id: string\n message?: string\n values: Record<string, unknown>\n components: { [key: string]: React.ElementType | any }\n formats?: Record<string, unknown>\n children?: React.ReactNode\n component?: React.ComponentType<TransRenderProps>\n render?: (props: TransRenderProps) => React.ReactElement<any, any> | null\n}\n\nexport function Trans(props: TransProps): React.ReactElement<any, any> | null {\n const { i18n, defaultComponent } = useLingui()\n const { render, component, id, message, formats } = props\n\n const values = { ...props.values }\n const components = { ...props.components }\n\n if (values) {\n /*\n Related discussion: https://github.com/lingui/js-lingui/issues/183\n\n Values *might* contain React elements with static content.\n They're replaced with <INDEX /> placeholders and added to `components`.\n\n Example:\n Translation: Hello {name}\n Values: { name: <strong>Jane</strong> }\n\n It'll become \"Hello <0 />\" with components=[<strong>Jane</strong>]\n */\n\n Object.keys(values).forEach((key) => {\n const value = values[key]\n if (!React.isValidElement(value)) return\n\n const index = Object.keys(components).length\n\n components[index] = value\n values[key] = `<${index}/>`\n })\n }\n\n const _translation: string =\n i18n && typeof i18n._ === \"function\"\n ? i18n._(id, values, { message, formats })\n : id // i18n provider isn't loaded at all\n\n const translation = _translation\n ? formatElements(_translation, components)\n : null\n\n if (render === null || component === null) {\n // Although `string` is a valid react element, types only allow `Element`\n // Upstream issue: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n return translation as unknown as React.ReactElement<any, any>\n }\n\n const FallbackComponent = (defaultComponent ||\n React.Fragment) as React.ComponentType<any>\n\n const i18nProps = {\n id,\n message,\n translation,\n isTranslated: id !== translation && message !== translation,\n }\n\n // Validation of `render` and `component` props\n if (render && component) {\n console.error(\n \"You can't use both `component` and `render` prop at the same time. `component` is ignored.\"\n )\n } else if (render && typeof render !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`render\\`. It must be a function, provided ${render}`\n )\n } else if (component && typeof component !== \"function\") {\n // Apparently, both function components and class components are functions\n // See https://stackoverflow.com/a/41658173/1535540\n console.error(\n `Invalid value supplied to prop \\`component\\`. It must be a React component, provided ${component}`\n )\n return <FallbackComponent {...i18nProps}>{translation}</FallbackComponent>\n }\n\n // Rendering using a render prop\n if (typeof render === \"function\") {\n // Component: render={(props) => <a title={props.translation}>x</a>}\n return render(i18nProps)\n }\n\n // `component` prop has a higher precedence over `defaultComponent`\n const Component = (component || FallbackComponent) as React.ComponentType<any>\n const DefaultComponent = defaultComponent\n\n return DefaultComponent && !component ? (\n <DefaultComponent {...i18nProps}>{translation}</DefaultComponent>\n ) : (\n <Component>{translation}</Component>\n )\n}\n\nTrans.defaultProps = {\n values: {},\n components: {},\n}\n"],"names":["LinguiContext","React","createContext","useLingui","context","useContext","process","env","NODE_ENV","Error","withI18n","o","WrappedComponent","props","isValidElement","i18n","I18nProvider","defaultComponent","forceRenderOnLocaleChange","children","makeContext","getRenderKey","locale","setContext","useState","renderKey","setRenderKey","useEffect","unsubscribe","on","console","log","tagRe","nlRe","voidElementTags","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","menuitem","formatElements","value","elements","uniqueId","makeCounter","parts","replace","split","length","tree","before","shift","push","index","after","getElements","element","type","error","createElement","Fragment","cloneElement","key","paired","unpaired","slice","concat","count","prefix","Trans","render","component","id","message","formats","values","components","Object","keys","forEach","_translation","_","translation","FallbackComponent","i18nProps","isTranslated","Component","DefaultComponent","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/I18nProvider.tsx","../../src/format.ts","../../src/Trans.tsx"],"sourcesContent":["import React, { ComponentType, FunctionComponent } from \"react\"\nimport { I18n } from \"@lingui/core\"\nimport { TransRenderProps } from \"./Trans\"\n\nexport type I18nContext = {\n i18n: I18n\n defaultComponent?: ComponentType<TransRenderProps>\n}\n\nexport type I18nProviderProps = I18nContext & {\n forceRenderOnLocaleChange?: boolean\n children?: React.ReactNode\n}\n\nconst LinguiContext = React.createContext<I18nContext>(null)\n\nexport function useLingui(): I18nContext {\n const context = React.useContext<I18nContext>(LinguiContext)\n\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\"useLingui hook was used without I18nProvider.\")\n }\n }\n\n return context\n}\n\nexport const I18nProvider: FunctionComponent<I18nProviderProps> = ({\n i18n,\n defaultComponent,\n forceRenderOnLocaleChange = true,\n children,\n}) => {\n /**\n * We can't pass `i18n` object directly through context, because even when locale\n * or messages are changed, i18n object is still the same. Context provider compares\n * reference identity and suggested workaround is create a wrapper object every time\n * we need to trigger re-render. See https://reactjs.org/docs/context.html#caveats.\n *\n * Due to this effect we also pass `defaultComponent` in the same context, instead\n * of creating a separate Provider/Consumer pair.\n *\n * We can't use useMemo hook either, because we want to recalculate value manually.\n */\n const makeContext = () => ({\n i18n,\n defaultComponent,\n })\n const getRenderKey = () => {\n return (\n forceRenderOnLocaleChange ? i18n.locale || \"default\" : \"default\"\n ) as string\n }\n\n const [context, setContext] = React.useState<I18nContext>(makeContext()),\n [renderKey, setRenderKey] = React.useState<string>(getRenderKey())\n\n /**\n * Subscribe for locale/message changes\n *\n * I18n object from `@lingui/core` is the single source of truth for all i18n related\n * data (active locale, catalogs). When new messages are loaded or locale is changed\n * we need to trigger re-rendering of LinguiContext.Consumers.\n *\n * We call `setContext(makeContext())` after adding the observer in case the `change`\n * event would already have fired between the inital renderKey calculation and the\n * `useEffect` hook being called. This can happen if locales are loaded/activated\n * async.\n */\n React.useEffect(() => {\n const unsubscribe = i18n.on(\"change\", () => {\n setContext(makeContext())\n setRenderKey(getRenderKey())\n })\n if (renderKey === \"default\") {\n setRenderKey(getRenderKey())\n }\n if (forceRenderOnLocaleChange && renderKey === \"default\") {\n console.log(\n \"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\"\n )\n }\n return () => unsubscribe()\n }, [])\n\n if (forceRenderOnLocaleChange && renderKey === \"default\") return null\n\n return (\n <LinguiContext.Provider value={context} key={renderKey}>\n {children}\n </LinguiContext.Provider>\n )\n}\n","import React from \"react\"\n\n// match <tag>paired</tag> and <tag/> unpaired tags\nconst tagRe = /<([a-zA-Z0-9]+)>(.*?)<\\/\\1>|<([a-zA-Z0-9]+)\\/>/\nconst nlRe = /(?:\\r\\n|\\r|\\n)/g\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nconst voidElementTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n menuitem: true,\n}\n\n/**\n * `formatElements` - parse string and return tree of react elements\n *\n * `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)\n * placeholders. `elements` is a array of react elements which indexes\n * correspond to element indexes in formatted string\n */\nfunction formatElements(\n value: string,\n elements: { [key: string]: React.ReactElement<any> } = {}\n): string | Array<any> {\n const uniqueId = makeCounter(0, \"$lingui$\")\n const parts = value.replace(nlRe, \"\").split(tagRe)\n\n // no inline elements, return\n if (parts.length === 1) return value\n\n const tree = []\n\n const before = parts.shift()\n if (before) tree.push(before)\n\n for (const [index, children, after] of getElements(parts)) {\n let element = elements[index]\n\n if (!element || (voidElementTags[element.type as string] && children)) {\n if (!element) {\n console.error(\n `Can't use element at index '${index}' as it is not declared in the original translation`\n )\n } else {\n console.error(\n `${element.type} is a void element tag therefore it must have no children`\n )\n }\n\n // ignore problematic element but push its children and elements after it\n element = React.createElement(React.Fragment)\n }\n\n tree.push(\n React.cloneElement(\n element,\n { key: uniqueId() },\n\n // format children for pair tags\n // unpaired tags might have children if it's a component passed as a variable\n children ? formatElements(children, elements) : element.props.children\n )\n )\n\n if (after) tree.push(after)\n }\n\n return tree\n}\n\n/*\n * `getElements` - return array of element indexes and element childrens\n *\n * `parts` is array of [pairedIndex, children, unpairedIndex, textAfter, ...]\n * where:\n * - `pairedIndex` is index of paired element (undef for unpaired)\n * - `children` are children of paired element (undef for unpaired)\n * - `unpairedIndex` is index of unpaired element (undef for paired)\n * - `textAfter` is string after all elements (empty string, if there's nothing)\n *\n * `parts` length is always multiply of 4\n *\n * Returns: Array<[elementIndex, children, after]>\n */\nfunction getElements(parts) {\n if (!parts.length) return []\n\n const [paired, children, unpaired, after] = parts.slice(0, 4)\n\n return [[paired || unpaired, children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter =\n (count = 0, prefix = \"\") =>\n () =>\n `${prefix}_${count++}`\n\nexport { formatElements }\n","import React from \"react\"\n\nimport { useLingui } from \"./I18nProvider\"\nimport { formatElements } from \"./format\"\n\nexport type TransRenderProps = {\n id?: string\n translation?: React.ReactNode\n children?: React.ReactNode\n message?: string | null\n isTranslated?: boolean\n}\n\nexport type TransProps = {\n id: string\n message?: string\n values?: Record<string, unknown>\n components?: { [key: string]: React.ElementType | any }\n formats?: Record<string, unknown>\n children?: React.ReactNode\n component?: React.ComponentType<TransRenderProps>\n render?: (props: TransRenderProps) => React.ReactElement<any, any> | null\n}\n\nexport function Trans(props: TransProps): React.ReactElement<any, any> | null {\n const { i18n, defaultComponent } = useLingui()\n const { render, component, id, message, formats } = props\n\n const values = { ...(props.values || {}) }\n const components = { ...(props.components || {}) }\n\n if (values) {\n /*\n Related discussion: https://github.com/lingui/js-lingui/issues/183\n\n Values *might* contain React elements with static content.\n They're replaced with <INDEX /> placeholders and added to `components`.\n\n Example:\n Translation: Hello {name}\n Values: { name: <strong>Jane</strong> }\n\n It'll become \"Hello <0 />\" with components=[<strong>Jane</strong>]\n */\n\n Object.keys(values).forEach((key) => {\n const value = values[key]\n if (!React.isValidElement(value)) return\n\n const index = Object.keys(components).length\n\n components[index] = value\n values[key] = `<${index}/>`\n })\n }\n\n const _translation: string =\n i18n && typeof i18n._ === \"function\"\n ? i18n._(id, values, { message, formats })\n : id // i18n provider isn't loaded at all\n\n const translation = _translation\n ? formatElements(_translation, components)\n : null\n\n if (render === null || component === null) {\n // Although `string` is a valid react element, types only allow `Element`\n // Upstream issue: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n return translation as unknown as React.ReactElement<any, any>\n }\n\n const FallbackComponent = (defaultComponent ||\n React.Fragment) as React.ComponentType<any>\n\n const i18nProps = {\n id,\n message,\n translation,\n isTranslated: id !== translation && message !== translation,\n }\n\n // Validation of `render` and `component` props\n if (render && component) {\n console.error(\n \"You can't use both `component` and `render` prop at the same time. `component` is ignored.\"\n )\n } else if (render && typeof render !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`render\\`. It must be a function, provided ${render}`\n )\n } else if (component && typeof component !== \"function\") {\n // Apparently, both function components and class components are functions\n // See https://stackoverflow.com/a/41658173/1535540\n console.error(\n `Invalid value supplied to prop \\`component\\`. It must be a React component, provided ${component}`\n )\n return <FallbackComponent {...i18nProps}>{translation}</FallbackComponent>\n }\n\n // Rendering using a render prop\n if (typeof render === \"function\") {\n // Component: render={(props) => <a title={props.translation}>x</a>}\n return render(i18nProps)\n }\n\n // `component` prop has a higher precedence over `defaultComponent`\n const Component = (component || FallbackComponent) as React.ComponentType<any>\n const DefaultComponent = defaultComponent\n\n return DefaultComponent && !component ? (\n <DefaultComponent {...i18nProps}>{translation}</DefaultComponent>\n ) : (\n <Component>{translation}</Component>\n )\n}\n"],"names":["LinguiContext","React","createContext","useLingui","context","useContext","process","env","NODE_ENV","Error","I18nProvider","i18n","defaultComponent","forceRenderOnLocaleChange","children","makeContext","getRenderKey","locale","setContext","useState","renderKey","setRenderKey","useEffect","unsubscribe","on","console","log","tagRe","nlRe","voidElementTags","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","menuitem","formatElements","value","elements","uniqueId","makeCounter","parts","replace","split","length","tree","before","shift","push","index","after","getElements","element","type","error","createElement","Fragment","cloneElement","key","props","paired","unpaired","slice","concat","count","prefix","Trans","render","component","id","message","formats","values","components","Object","keys","forEach","isValidElement","_translation","_","translation","FallbackComponent","i18nProps","isTranslated","Component","DefaultComponent"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import _extends from '@babel/runtime/helpers/extends';
2
1
  import React from 'react';
3
2
 
4
3
  const LinguiContext = /*#__PURE__*/React.createContext(null);
@@ -11,23 +10,6 @@ function useLingui() {
11
10
  }
12
11
  return context;
13
12
  }
14
- function withI18n(o) {
15
- return WrappedComponent => {
16
- return props => {
17
- if (process.env.NODE_ENV !== "production") {
18
- if (typeof o === "function" || /*#__PURE__*/React.isValidElement(o)) {
19
- throw new Error("withI18n([options]) takes options as a first argument, " + "but received React component itself. Without options, the Component " + "should be wrapped as withI18n()(Component), not withI18n(Component).");
20
- }
21
- }
22
- const {
23
- i18n
24
- } = useLingui();
25
- return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
26
- i18n: i18n
27
- }));
28
- };
29
- };
30
- }
31
13
  const I18nProvider = _ref => {
32
14
  let {
33
15
  i18n,
@@ -134,7 +116,7 @@ function formatElements(value) {
134
116
  let element = elements[index];
135
117
  if (!element || voidElementTags[element.type] && children) {
136
118
  if (!element) {
137
- console.error(`Can use element at index '${index}' as it is not declared in the original translation`);
119
+ console.error(`Can't use element at index '${index}' as it is not declared in the original translation`);
138
120
  } else {
139
121
  console.error(`${element.type} is a void element tag therefore it must have no children`);
140
122
  }
@@ -191,10 +173,10 @@ function Trans(props) {
191
173
  formats
192
174
  } = props;
193
175
  const values = {
194
- ...props.values
176
+ ...(props.values || {})
195
177
  };
196
178
  const components = {
197
- ...props.components
179
+ ...(props.components || {})
198
180
  };
199
181
  if (values) {
200
182
  /*
@@ -257,10 +239,6 @@ function Trans(props) {
257
239
  const DefaultComponent = defaultComponent;
258
240
  return DefaultComponent && !component ? /*#__PURE__*/React.createElement(DefaultComponent, i18nProps, translation) : /*#__PURE__*/React.createElement(Component, null, translation);
259
241
  }
260
- Trans.defaultProps = {
261
- values: {},
262
- components: {}
263
- };
264
242
 
265
- export { I18nProvider, Trans, useLingui, withI18n };
243
+ export { I18nProvider, Trans, useLingui };
266
244
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/I18nProvider.tsx","../../src/format.ts","../../src/Trans.tsx"],"sourcesContent":["import React, { ComponentType, FunctionComponent } from \"react\"\nimport { I18n } from \"@lingui/core\"\nimport { TransRenderProps } from \"./Trans\"\n\nexport type I18nContext = {\n i18n: I18n\n defaultComponent?: ComponentType<TransRenderProps>\n}\n\nexport type withI18nProps = {\n i18n: I18n\n}\n\nexport type I18nProviderProps = I18nContext & {\n forceRenderOnLocaleChange?: boolean\n children?: React.ReactNode\n}\n\nconst LinguiContext = React.createContext<I18nContext>(null)\n\nexport function useLingui(): I18nContext {\n const context = React.useContext<I18nContext>(LinguiContext)\n\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\"useLingui hook was used without I18nProvider.\")\n }\n }\n\n return context\n}\n\nexport function withI18n(\n o?: object\n): <P extends withI18nProps>(\n Component: ComponentType<P>\n) => React.ComponentType<Omit<P, \"i18n\">> {\n return <P extends withI18nProps>(\n WrappedComponent: ComponentType<P>\n ): ComponentType<P> => {\n return (props) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof o === \"function\" || React.isValidElement(o)) {\n throw new Error(\n \"withI18n([options]) takes options as a first argument, \" +\n \"but received React component itself. Without options, the Component \" +\n \"should be wrapped as withI18n()(Component), not withI18n(Component).\"\n )\n }\n }\n\n const { i18n } = useLingui()\n return <WrappedComponent {...props} i18n={i18n} />\n }\n }\n}\n\nexport const I18nProvider: FunctionComponent<I18nProviderProps> = ({\n i18n,\n defaultComponent,\n forceRenderOnLocaleChange = true,\n children,\n}) => {\n /**\n * We can't pass `i18n` object directly through context, because even when locale\n * or messages are changed, i18n object is still the same. Context provider compares\n * reference identity and suggested workaround is create a wrapper object every time\n * we need to trigger re-render. See https://reactjs.org/docs/context.html#caveats.\n *\n * Due to this effect we also pass `defaultComponent` in the same context, instead\n * of creating a separate Provider/Consumer pair.\n *\n * We can't use useMemo hook either, because we want to recalculate value manually.\n */\n const makeContext = () => ({\n i18n,\n defaultComponent,\n })\n const getRenderKey = () => {\n return (\n forceRenderOnLocaleChange ? i18n.locale || \"default\" : \"default\"\n ) as string\n }\n\n const [context, setContext] = React.useState<I18nContext>(makeContext()),\n [renderKey, setRenderKey] = React.useState<string>(getRenderKey())\n\n /**\n * Subscribe for locale/message changes\n *\n * I18n object from `@lingui/core` is the single source of truth for all i18n related\n * data (active locale, catalogs). When new messages are loaded or locale is changed\n * we need to trigger re-rendering of LinguiContext.Consumers.\n *\n * We call `setContext(makeContext())` after adding the observer in case the `change`\n * event would already have fired between the inital renderKey calculation and the\n * `useEffect` hook being called. This can happen if locales are loaded/activated\n * async.\n */\n React.useEffect(() => {\n const unsubscribe = i18n.on(\"change\", () => {\n setContext(makeContext())\n setRenderKey(getRenderKey())\n })\n if (renderKey === \"default\") {\n setRenderKey(getRenderKey())\n }\n if (forceRenderOnLocaleChange && renderKey === \"default\") {\n console.log(\n \"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\"\n )\n }\n return () => unsubscribe()\n }, [])\n\n if (forceRenderOnLocaleChange && renderKey === \"default\") return null\n\n return (\n <LinguiContext.Provider value={context} key={renderKey}>\n {children}\n </LinguiContext.Provider>\n )\n}\n","import React from \"react\"\n\n// match <tag>paired</tag> and <tag/> unpaired tags\nconst tagRe = /<([a-zA-Z0-9]+)>(.*?)<\\/\\1>|<([a-zA-Z0-9]+)\\/>/\nconst nlRe = /(?:\\r\\n|\\r|\\n)/g\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nconst voidElementTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n menuitem: true,\n}\n\n/**\n * `formatElements` - parse string and return tree of react elements\n *\n * `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)\n * placeholders. `elements` is a array of react elements which indexes\n * correspond to element indexes in formatted string\n */\nfunction formatElements(\n value: string,\n elements: { [key: string]: React.ReactElement<any> } = {}\n): string | Array<any> {\n const uniqueId = makeCounter(0, \"$lingui$\")\n const parts = value.replace(nlRe, \"\").split(tagRe)\n\n // no inline elements, return\n if (parts.length === 1) return value\n\n const tree = []\n\n const before = parts.shift()\n if (before) tree.push(before)\n\n for (const [index, children, after] of getElements(parts)) {\n let element = elements[index]\n\n if (!element || (voidElementTags[element.type as string] && children)) {\n if (!element) {\n console.error(\n `Can use element at index '${index}' as it is not declared in the original translation`\n )\n } else {\n console.error(\n `${element.type} is a void element tag therefore it must have no children`\n )\n }\n\n // ignore problematic element but push its children and elements after it\n element = React.createElement(React.Fragment)\n }\n\n tree.push(\n React.cloneElement(\n element,\n { key: uniqueId() },\n\n // format children for pair tags\n // unpaired tags might have children if it's a component passed as a variable\n children ? formatElements(children, elements) : element.props.children\n )\n )\n\n if (after) tree.push(after)\n }\n\n return tree\n}\n\n/*\n * `getElements` - return array of element indexes and element childrens\n *\n * `parts` is array of [pairedIndex, children, unpairedIndex, textAfter, ...]\n * where:\n * - `pairedIndex` is index of paired element (undef for unpaired)\n * - `children` are children of paired element (undef for unpaired)\n * - `unpairedIndex` is index of unpaired element (undef for paired)\n * - `textAfter` is string after all elements (empty string, if there's nothing)\n *\n * `parts` length is always multiply of 4\n *\n * Returns: Array<[elementIndex, children, after]>\n */\nfunction getElements(parts) {\n if (!parts.length) return []\n\n const [paired, children, unpaired, after] = parts.slice(0, 4)\n\n return [[paired || unpaired, children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter =\n (count = 0, prefix = \"\") =>\n () =>\n `${prefix}_${count++}`\n\nexport { formatElements }\n","import React from \"react\"\n\nimport { useLingui } from \"./I18nProvider\"\nimport { formatElements } from \"./format\"\n\nexport type TransRenderProps = {\n id?: string\n translation?: React.ReactNode\n children?: React.ReactNode\n message?: string | null\n isTranslated?: boolean\n}\n\nexport type TransProps = {\n id: string\n message?: string\n values: Record<string, unknown>\n components: { [key: string]: React.ElementType | any }\n formats?: Record<string, unknown>\n children?: React.ReactNode\n component?: React.ComponentType<TransRenderProps>\n render?: (props: TransRenderProps) => React.ReactElement<any, any> | null\n}\n\nexport function Trans(props: TransProps): React.ReactElement<any, any> | null {\n const { i18n, defaultComponent } = useLingui()\n const { render, component, id, message, formats } = props\n\n const values = { ...props.values }\n const components = { ...props.components }\n\n if (values) {\n /*\n Related discussion: https://github.com/lingui/js-lingui/issues/183\n\n Values *might* contain React elements with static content.\n They're replaced with <INDEX /> placeholders and added to `components`.\n\n Example:\n Translation: Hello {name}\n Values: { name: <strong>Jane</strong> }\n\n It'll become \"Hello <0 />\" with components=[<strong>Jane</strong>]\n */\n\n Object.keys(values).forEach((key) => {\n const value = values[key]\n if (!React.isValidElement(value)) return\n\n const index = Object.keys(components).length\n\n components[index] = value\n values[key] = `<${index}/>`\n })\n }\n\n const _translation: string =\n i18n && typeof i18n._ === \"function\"\n ? i18n._(id, values, { message, formats })\n : id // i18n provider isn't loaded at all\n\n const translation = _translation\n ? formatElements(_translation, components)\n : null\n\n if (render === null || component === null) {\n // Although `string` is a valid react element, types only allow `Element`\n // Upstream issue: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n return translation as unknown as React.ReactElement<any, any>\n }\n\n const FallbackComponent = (defaultComponent ||\n React.Fragment) as React.ComponentType<any>\n\n const i18nProps = {\n id,\n message,\n translation,\n isTranslated: id !== translation && message !== translation,\n }\n\n // Validation of `render` and `component` props\n if (render && component) {\n console.error(\n \"You can't use both `component` and `render` prop at the same time. `component` is ignored.\"\n )\n } else if (render && typeof render !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`render\\`. It must be a function, provided ${render}`\n )\n } else if (component && typeof component !== \"function\") {\n // Apparently, both function components and class components are functions\n // See https://stackoverflow.com/a/41658173/1535540\n console.error(\n `Invalid value supplied to prop \\`component\\`. It must be a React component, provided ${component}`\n )\n return <FallbackComponent {...i18nProps}>{translation}</FallbackComponent>\n }\n\n // Rendering using a render prop\n if (typeof render === \"function\") {\n // Component: render={(props) => <a title={props.translation}>x</a>}\n return render(i18nProps)\n }\n\n // `component` prop has a higher precedence over `defaultComponent`\n const Component = (component || FallbackComponent) as React.ComponentType<any>\n const DefaultComponent = defaultComponent\n\n return DefaultComponent && !component ? (\n <DefaultComponent {...i18nProps}>{translation}</DefaultComponent>\n ) : (\n <Component>{translation}</Component>\n )\n}\n\nTrans.defaultProps = {\n values: {},\n components: {},\n}\n"],"names":["LinguiContext","React","createContext","useLingui","context","useContext","process","env","NODE_ENV","Error","withI18n","o","WrappedComponent","props","isValidElement","i18n","I18nProvider","defaultComponent","forceRenderOnLocaleChange","children","makeContext","getRenderKey","locale","setContext","useState","renderKey","setRenderKey","useEffect","unsubscribe","on","console","log","tagRe","nlRe","voidElementTags","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","menuitem","formatElements","value","elements","uniqueId","makeCounter","parts","replace","split","length","tree","before","shift","push","index","after","getElements","element","type","error","createElement","Fragment","cloneElement","key","paired","unpaired","slice","concat","count","prefix","Trans","render","component","id","message","formats","values","components","Object","keys","forEach","_translation","_","translation","FallbackComponent","i18nProps","isTranslated","Component","DefaultComponent","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/I18nProvider.tsx","../../src/format.ts","../../src/Trans.tsx"],"sourcesContent":["import React, { ComponentType, FunctionComponent } from \"react\"\nimport { I18n } from \"@lingui/core\"\nimport { TransRenderProps } from \"./Trans\"\n\nexport type I18nContext = {\n i18n: I18n\n defaultComponent?: ComponentType<TransRenderProps>\n}\n\nexport type I18nProviderProps = I18nContext & {\n forceRenderOnLocaleChange?: boolean\n children?: React.ReactNode\n}\n\nconst LinguiContext = React.createContext<I18nContext>(null)\n\nexport function useLingui(): I18nContext {\n const context = React.useContext<I18nContext>(LinguiContext)\n\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\"useLingui hook was used without I18nProvider.\")\n }\n }\n\n return context\n}\n\nexport const I18nProvider: FunctionComponent<I18nProviderProps> = ({\n i18n,\n defaultComponent,\n forceRenderOnLocaleChange = true,\n children,\n}) => {\n /**\n * We can't pass `i18n` object directly through context, because even when locale\n * or messages are changed, i18n object is still the same. Context provider compares\n * reference identity and suggested workaround is create a wrapper object every time\n * we need to trigger re-render. See https://reactjs.org/docs/context.html#caveats.\n *\n * Due to this effect we also pass `defaultComponent` in the same context, instead\n * of creating a separate Provider/Consumer pair.\n *\n * We can't use useMemo hook either, because we want to recalculate value manually.\n */\n const makeContext = () => ({\n i18n,\n defaultComponent,\n })\n const getRenderKey = () => {\n return (\n forceRenderOnLocaleChange ? i18n.locale || \"default\" : \"default\"\n ) as string\n }\n\n const [context, setContext] = React.useState<I18nContext>(makeContext()),\n [renderKey, setRenderKey] = React.useState<string>(getRenderKey())\n\n /**\n * Subscribe for locale/message changes\n *\n * I18n object from `@lingui/core` is the single source of truth for all i18n related\n * data (active locale, catalogs). When new messages are loaded or locale is changed\n * we need to trigger re-rendering of LinguiContext.Consumers.\n *\n * We call `setContext(makeContext())` after adding the observer in case the `change`\n * event would already have fired between the inital renderKey calculation and the\n * `useEffect` hook being called. This can happen if locales are loaded/activated\n * async.\n */\n React.useEffect(() => {\n const unsubscribe = i18n.on(\"change\", () => {\n setContext(makeContext())\n setRenderKey(getRenderKey())\n })\n if (renderKey === \"default\") {\n setRenderKey(getRenderKey())\n }\n if (forceRenderOnLocaleChange && renderKey === \"default\") {\n console.log(\n \"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\"\n )\n }\n return () => unsubscribe()\n }, [])\n\n if (forceRenderOnLocaleChange && renderKey === \"default\") return null\n\n return (\n <LinguiContext.Provider value={context} key={renderKey}>\n {children}\n </LinguiContext.Provider>\n )\n}\n","import React from \"react\"\n\n// match <tag>paired</tag> and <tag/> unpaired tags\nconst tagRe = /<([a-zA-Z0-9]+)>(.*?)<\\/\\1>|<([a-zA-Z0-9]+)\\/>/\nconst nlRe = /(?:\\r\\n|\\r|\\n)/g\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nconst voidElementTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n menuitem: true,\n}\n\n/**\n * `formatElements` - parse string and return tree of react elements\n *\n * `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)\n * placeholders. `elements` is a array of react elements which indexes\n * correspond to element indexes in formatted string\n */\nfunction formatElements(\n value: string,\n elements: { [key: string]: React.ReactElement<any> } = {}\n): string | Array<any> {\n const uniqueId = makeCounter(0, \"$lingui$\")\n const parts = value.replace(nlRe, \"\").split(tagRe)\n\n // no inline elements, return\n if (parts.length === 1) return value\n\n const tree = []\n\n const before = parts.shift()\n if (before) tree.push(before)\n\n for (const [index, children, after] of getElements(parts)) {\n let element = elements[index]\n\n if (!element || (voidElementTags[element.type as string] && children)) {\n if (!element) {\n console.error(\n `Can't use element at index '${index}' as it is not declared in the original translation`\n )\n } else {\n console.error(\n `${element.type} is a void element tag therefore it must have no children`\n )\n }\n\n // ignore problematic element but push its children and elements after it\n element = React.createElement(React.Fragment)\n }\n\n tree.push(\n React.cloneElement(\n element,\n { key: uniqueId() },\n\n // format children for pair tags\n // unpaired tags might have children if it's a component passed as a variable\n children ? formatElements(children, elements) : element.props.children\n )\n )\n\n if (after) tree.push(after)\n }\n\n return tree\n}\n\n/*\n * `getElements` - return array of element indexes and element childrens\n *\n * `parts` is array of [pairedIndex, children, unpairedIndex, textAfter, ...]\n * where:\n * - `pairedIndex` is index of paired element (undef for unpaired)\n * - `children` are children of paired element (undef for unpaired)\n * - `unpairedIndex` is index of unpaired element (undef for paired)\n * - `textAfter` is string after all elements (empty string, if there's nothing)\n *\n * `parts` length is always multiply of 4\n *\n * Returns: Array<[elementIndex, children, after]>\n */\nfunction getElements(parts) {\n if (!parts.length) return []\n\n const [paired, children, unpaired, after] = parts.slice(0, 4)\n\n return [[paired || unpaired, children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter =\n (count = 0, prefix = \"\") =>\n () =>\n `${prefix}_${count++}`\n\nexport { formatElements }\n","import React from \"react\"\n\nimport { useLingui } from \"./I18nProvider\"\nimport { formatElements } from \"./format\"\n\nexport type TransRenderProps = {\n id?: string\n translation?: React.ReactNode\n children?: React.ReactNode\n message?: string | null\n isTranslated?: boolean\n}\n\nexport type TransProps = {\n id: string\n message?: string\n values?: Record<string, unknown>\n components?: { [key: string]: React.ElementType | any }\n formats?: Record<string, unknown>\n children?: React.ReactNode\n component?: React.ComponentType<TransRenderProps>\n render?: (props: TransRenderProps) => React.ReactElement<any, any> | null\n}\n\nexport function Trans(props: TransProps): React.ReactElement<any, any> | null {\n const { i18n, defaultComponent } = useLingui()\n const { render, component, id, message, formats } = props\n\n const values = { ...(props.values || {}) }\n const components = { ...(props.components || {}) }\n\n if (values) {\n /*\n Related discussion: https://github.com/lingui/js-lingui/issues/183\n\n Values *might* contain React elements with static content.\n They're replaced with <INDEX /> placeholders and added to `components`.\n\n Example:\n Translation: Hello {name}\n Values: { name: <strong>Jane</strong> }\n\n It'll become \"Hello <0 />\" with components=[<strong>Jane</strong>]\n */\n\n Object.keys(values).forEach((key) => {\n const value = values[key]\n if (!React.isValidElement(value)) return\n\n const index = Object.keys(components).length\n\n components[index] = value\n values[key] = `<${index}/>`\n })\n }\n\n const _translation: string =\n i18n && typeof i18n._ === \"function\"\n ? i18n._(id, values, { message, formats })\n : id // i18n provider isn't loaded at all\n\n const translation = _translation\n ? formatElements(_translation, components)\n : null\n\n if (render === null || component === null) {\n // Although `string` is a valid react element, types only allow `Element`\n // Upstream issue: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n return translation as unknown as React.ReactElement<any, any>\n }\n\n const FallbackComponent = (defaultComponent ||\n React.Fragment) as React.ComponentType<any>\n\n const i18nProps = {\n id,\n message,\n translation,\n isTranslated: id !== translation && message !== translation,\n }\n\n // Validation of `render` and `component` props\n if (render && component) {\n console.error(\n \"You can't use both `component` and `render` prop at the same time. `component` is ignored.\"\n )\n } else if (render && typeof render !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`render\\`. It must be a function, provided ${render}`\n )\n } else if (component && typeof component !== \"function\") {\n // Apparently, both function components and class components are functions\n // See https://stackoverflow.com/a/41658173/1535540\n console.error(\n `Invalid value supplied to prop \\`component\\`. It must be a React component, provided ${component}`\n )\n return <FallbackComponent {...i18nProps}>{translation}</FallbackComponent>\n }\n\n // Rendering using a render prop\n if (typeof render === \"function\") {\n // Component: render={(props) => <a title={props.translation}>x</a>}\n return render(i18nProps)\n }\n\n // `component` prop has a higher precedence over `defaultComponent`\n const Component = (component || FallbackComponent) as React.ComponentType<any>\n const DefaultComponent = defaultComponent\n\n return DefaultComponent && !component ? (\n <DefaultComponent {...i18nProps}>{translation}</DefaultComponent>\n ) : (\n <Component>{translation}</Component>\n )\n}\n"],"names":["LinguiContext","React","createContext","useLingui","context","useContext","process","env","NODE_ENV","Error","I18nProvider","i18n","defaultComponent","forceRenderOnLocaleChange","children","makeContext","getRenderKey","locale","setContext","useState","renderKey","setRenderKey","useEffect","unsubscribe","on","console","log","tagRe","nlRe","voidElementTags","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","menuitem","formatElements","value","elements","uniqueId","makeCounter","parts","replace","split","length","tree","before","shift","push","index","after","getElements","element","type","error","createElement","Fragment","cloneElement","key","props","paired","unpaired","slice","concat","count","prefix","Trans","render","component","id","message","formats","values","components","Object","keys","forEach","isValidElement","_translation","_","translation","FallbackComponent","i18nProps","isTranslated","Component","DefaultComponent"],"mappings":";;AAcA,MAAMA,aAAa,gBAAGC,KAAK,CAACC,aAAa,CAAc,IAAI,CAAC,CAAA;AAErD,SAASC,SAAS,GAAgB;AACvC,EAAA,MAAMC,OAAO,GAAGH,KAAK,CAACI,UAAU,CAAcL,aAAa,CAAC,CAAA;AAE5D,EAAA,IAAIM,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;IACzC,IAAIJ,OAAO,IAAI,IAAI,EAAE;AACnB,MAAA,MAAM,IAAIK,KAAK,CAAC,+CAA+C,CAAC,CAAA;AAClE,KAAA;AACF,GAAA;AAEA,EAAA,OAAOL,OAAO,CAAA;AAChB,CAAA;AAEO,MAAMM,YAAkD,GAAG,IAK5D,IAAA;EAAA,IAL6D;IACjEC,IAAI;IACJC,gBAAgB;AAChBC,IAAAA,yBAAyB,GAAG,IAAI;AAChCC,IAAAA,QAAAA;GACD,GAAA,IAAA,CAAA;AACC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,WAAW,GAAG,OAAO;IACzBJ,IAAI;AACJC,IAAAA,gBAAAA;AACF,GAAC,CAAC,CAAA;EACF,MAAMI,YAAY,GAAG,MAAM;IACzB,OACEH,yBAAyB,GAAGF,IAAI,CAACM,MAAM,IAAI,SAAS,GAAG,SAAS,CAAA;GAEnE,CAAA;AAED,EAAA,MAAM,CAACb,OAAO,EAAEc,UAAU,CAAC,GAAGjB,KAAK,CAACkB,QAAQ,CAAcJ,WAAW,EAAE,CAAC;IACtE,CAACK,SAAS,EAAEC,YAAY,CAAC,GAAGpB,KAAK,CAACkB,QAAQ,CAASH,YAAY,EAAE,CAAC,CAAA;;AAEpE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEf,KAAK,CAACqB,SAAS,CAAC,MAAM;IACpB,MAAMC,WAAW,GAAGZ,IAAI,CAACa,EAAE,CAAC,QAAQ,EAAE,MAAM;MAC1CN,UAAU,CAACH,WAAW,EAAE,CAAC,CAAA;MACzBM,YAAY,CAACL,YAAY,EAAE,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;IACF,IAAII,SAAS,KAAK,SAAS,EAAE;MAC3BC,YAAY,CAACL,YAAY,EAAE,CAAC,CAAA;AAC9B,KAAA;AACA,IAAA,IAAIH,yBAAyB,IAAIO,SAAS,KAAK,SAAS,EAAE;AACxDK,MAAAA,OAAO,CAACC,GAAG,CACT,+HAA+H,CAChI,CAAA;AACH,KAAA;IACA,OAAO,MAAMH,WAAW,EAAE,CAAA;GAC3B,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,IAAIV,yBAAyB,IAAIO,SAAS,KAAK,SAAS,EAAE,OAAO,IAAI,CAAA;EAErE,oBACE,KAAA,CAAA,aAAA,CAAC,aAAa,CAAC,QAAQ,EAAA;AAAC,IAAA,KAAK,EAAEhB,OAAQ;AAAC,IAAA,GAAG,EAAEgB,SAAAA;AAAU,GAAA,EACpDN,QAAQ,CACc,CAAA;AAE7B;;AC3FA;AACA,MAAMa,KAAK,GAAG,gDAAgD,CAAA;AAC9D,MAAMC,IAAI,GAAG,iBAAiB,CAAA;;AAE9B;AACA;AACA,MAAMC,eAAe,GAAG;AACtBC,EAAAA,IAAI,EAAE,IAAI;AACVC,EAAAA,IAAI,EAAE,IAAI;AACVC,EAAAA,EAAE,EAAE,IAAI;AACRC,EAAAA,GAAG,EAAE,IAAI;AACTC,EAAAA,KAAK,EAAE,IAAI;AACXC,EAAAA,EAAE,EAAE,IAAI;AACRC,EAAAA,GAAG,EAAE,IAAI;AACTC,EAAAA,KAAK,EAAE,IAAI;AACXC,EAAAA,MAAM,EAAE,IAAI;AACZC,EAAAA,IAAI,EAAE,IAAI;AACVC,EAAAA,IAAI,EAAE,IAAI;AACVC,EAAAA,KAAK,EAAE,IAAI;AACXC,EAAAA,MAAM,EAAE,IAAI;AACZC,EAAAA,KAAK,EAAE,IAAI;AACXC,EAAAA,GAAG,EAAE,IAAI;AACTC,EAAAA,QAAQ,EAAE,IAAA;AACZ,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAc,CACrBC,KAAa,EAEQ;EAAA,IADrBC,QAAoD,GAAG,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,EAAE,CAAA;AAEzD,EAAA,MAAMC,QAAQ,GAAGC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3C,EAAA,MAAMC,KAAK,GAAGJ,KAAK,CAACK,OAAO,CAACxB,IAAI,EAAE,EAAE,CAAC,CAACyB,KAAK,CAAC1B,KAAK,CAAC,CAAA;;AAElD;AACA,EAAA,IAAIwB,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE,OAAOP,KAAK,CAAA;EAEpC,MAAMQ,IAAI,GAAG,EAAE,CAAA;AAEf,EAAA,MAAMC,MAAM,GAAGL,KAAK,CAACM,KAAK,EAAE,CAAA;AAC5B,EAAA,IAAID,MAAM,EAAED,IAAI,CAACG,IAAI,CAACF,MAAM,CAAC,CAAA;AAE7B,EAAA,KAAK,MAAM,CAACG,KAAK,EAAE7C,QAAQ,EAAE8C,KAAK,CAAC,IAAIC,WAAW,CAACV,KAAK,CAAC,EAAE;AACzD,IAAA,IAAIW,OAAO,GAAGd,QAAQ,CAACW,KAAK,CAAC,CAAA;IAE7B,IAAI,CAACG,OAAO,IAAKjC,eAAe,CAACiC,OAAO,CAACC,IAAI,CAAW,IAAIjD,QAAS,EAAE;MACrE,IAAI,CAACgD,OAAO,EAAE;AACZrC,QAAAA,OAAO,CAACuC,KAAK,CACV,CAA8BL,4BAAAA,EAAAA,KAAM,qDAAoD,CAC1F,CAAA;AACH,OAAC,MAAM;QACLlC,OAAO,CAACuC,KAAK,CACV,CAAA,EAAEF,OAAO,CAACC,IAAK,2DAA0D,CAC3E,CAAA;AACH,OAAA;;AAEA;MACAD,OAAO,gBAAG7D,KAAK,CAACgE,aAAa,CAAChE,KAAK,CAACiE,QAAQ,CAAC,CAAA;AAC/C,KAAA;IAEAX,IAAI,CAACG,IAAI,eACPzD,KAAK,CAACkE,YAAY,CAChBL,OAAO,EACP;AAAEM,MAAAA,GAAG,EAAEnB,QAAQ,EAAA;KAAI;AAEnB;AACA;AACAnC,IAAAA,QAAQ,GAAGgC,cAAc,CAAChC,QAAQ,EAAEkC,QAAQ,CAAC,GAAGc,OAAO,CAACO,KAAK,CAACvD,QAAQ,CACvE,CACF,CAAA;AAED,IAAA,IAAI8C,KAAK,EAAEL,IAAI,CAACG,IAAI,CAACE,KAAK,CAAC,CAAA;AAC7B,GAAA;AAEA,EAAA,OAAOL,IAAI,CAAA;AACb,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASM,WAAW,CAACV,KAAK,EAAE;AAC1B,EAAA,IAAI,CAACA,KAAK,CAACG,MAAM,EAAE,OAAO,EAAE,CAAA;AAE5B,EAAA,MAAM,CAACgB,MAAM,EAAExD,QAAQ,EAAEyD,QAAQ,EAAEX,KAAK,CAAC,GAAGT,KAAK,CAACqB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAO,CAAC,CAACF,MAAM,IAAIC,QAAQ,EAAEzD,QAAQ,IAAI,EAAE,EAAE8C,KAAK,CAAC,CAAC,CAACa,MAAM,CACzDZ,WAAW,CAACV,KAAK,CAACqB,KAAK,CAAC,CAAC,EAAErB,KAAK,CAACG,MAAM,CAAC,CAAC,CAC1C,CAAA;AACH,CAAA;AAEA,MAAMJ,WAAW,GACf,YAAA;EAAA,IAACwB,KAAK,uEAAG,CAAC,CAAA;EAAA,IAAEC,MAAM,uEAAG,EAAE,CAAA;AAAA,EAAA,OACvB,MACG,CAAEA,EAAAA,MAAO,CAAGD,CAAAA,EAAAA,KAAK,EAAG,CAAC,CAAA,CAAA;AAAA,CAAA;;ACvFnB,SAASE,KAAK,CAACP,KAAiB,EAAuC;EAC5E,MAAM;IAAE1D,IAAI;AAAEC,IAAAA,gBAAAA;GAAkB,GAAGT,SAAS,EAAE,CAAA;EAC9C,MAAM;IAAE0E,MAAM;IAAEC,SAAS;IAAEC,EAAE;IAAEC,OAAO;AAAEC,IAAAA,OAAAA;AAAQ,GAAC,GAAGZ,KAAK,CAAA;AAEzD,EAAA,MAAMa,MAAM,GAAG;AAAE,IAAA,IAAIb,KAAK,CAACa,MAAM,IAAI,EAAE,CAAA;GAAG,CAAA;AAC1C,EAAA,MAAMC,UAAU,GAAG;AAAE,IAAA,IAAId,KAAK,CAACc,UAAU,IAAI,EAAE,CAAA;GAAG,CAAA;AAElD,EAAA,IAAID,MAAM,EAAE;AACV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAKIE,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAACI,OAAO,CAAElB,GAAG,IAAK;AACnC,MAAA,MAAMrB,KAAK,GAAGmC,MAAM,CAACd,GAAG,CAAC,CAAA;AACzB,MAAA,IAAI,eAACnE,KAAK,CAACsF,cAAc,CAACxC,KAAK,CAAC,EAAE,OAAA;MAElC,MAAMY,KAAK,GAAGyB,MAAM,CAACC,IAAI,CAACF,UAAU,CAAC,CAAC7B,MAAM,CAAA;AAE5C6B,MAAAA,UAAU,CAACxB,KAAK,CAAC,GAAGZ,KAAK,CAAA;AACzBmC,MAAAA,MAAM,CAACd,GAAG,CAAC,GAAI,CAAA,CAAA,EAAGT,KAAM,CAAG,EAAA,CAAA,CAAA;AAC7B,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA,EAAA,MAAM6B,YAAoB,GACxB7E,IAAI,IAAI,OAAOA,IAAI,CAAC8E,CAAC,KAAK,UAAU,GAChC9E,IAAI,CAAC8E,CAAC,CAACV,EAAE,EAAEG,MAAM,EAAE;IAAEF,OAAO;AAAEC,IAAAA,OAAAA;GAAS,CAAC,GACxCF,EAAE,CAAC;;EAET,MAAMW,WAAW,GAAGF,YAAY,GAC5B1C,cAAc,CAAC0C,YAAY,EAAEL,UAAU,CAAC,GACxC,IAAI,CAAA;AAER,EAAA,IAAIN,MAAM,KAAK,IAAI,IAAIC,SAAS,KAAK,IAAI,EAAE;AACzC;AACA;AACA,IAAA,OAAOY,WAAW,CAAA;AACpB,GAAA;AAEA,EAAA,MAAMC,iBAAiB,GAAI/E,gBAAgB,IACzCX,KAAK,CAACiE,QAAqC,CAAA;AAE7C,EAAA,MAAM0B,SAAS,GAAG;IAChBb,EAAE;IACFC,OAAO;IACPU,WAAW;AACXG,IAAAA,YAAY,EAAEd,EAAE,KAAKW,WAAW,IAAIV,OAAO,KAAKU,WAAAA;GACjD,CAAA;;AAED;EACA,IAAIb,MAAM,IAAIC,SAAS,EAAE;AACvBrD,IAAAA,OAAO,CAACuC,KAAK,CACX,4FAA4F,CAC7F,CAAA;GACF,MAAM,IAAIa,MAAM,IAAI,OAAOA,MAAM,KAAK,UAAU,EAAE;AACjDpD,IAAAA,OAAO,CAACuC,KAAK,CACV,CAA6Ea,2EAAAA,EAAAA,MAAO,EAAC,CACvF,CAAA;GACF,MAAM,IAAIC,SAAS,IAAI,OAAOA,SAAS,KAAK,UAAU,EAAE;AACvD;AACA;AACArD,IAAAA,OAAO,CAACuC,KAAK,CACV,CAAuFc,qFAAAA,EAAAA,SAAU,EAAC,CACpG,CAAA;AACD,IAAA,oBAAO,oBAAC,iBAAiB,EAAKc,SAAS,EAAGF,WAAW,CAAqB,CAAA;AAC5E,GAAA;;AAEA;AACA,EAAA,IAAI,OAAOb,MAAM,KAAK,UAAU,EAAE;AAChC;IACA,OAAOA,MAAM,CAACe,SAAS,CAAC,CAAA;AAC1B,GAAA;;AAEA;AACA,EAAA,MAAME,SAAS,GAAIhB,SAAS,IAAIa,iBAA8C,CAAA;EAC9E,MAAMI,gBAAgB,GAAGnF,gBAAgB,CAAA;AAEzC,EAAA,OAAOmF,gBAAgB,IAAI,CAACjB,SAAS,gBACnC,oBAAC,gBAAgB,EAAKc,SAAS,EAAGF,WAAW,CAAoB,gBAEjE,oBAAC,SAAS,EAAA,IAAA,EAAEA,WAAW,CACxB,CAAA;AACH;;;;"}
package/build/index.d.ts CHANGED
@@ -11,8 +11,8 @@ type TransRenderProps = {
11
11
  type TransProps = {
12
12
  id: string;
13
13
  message?: string;
14
- values: Record<string, unknown>;
15
- components: {
14
+ values?: Record<string, unknown>;
15
+ components?: {
16
16
  [key: string]: React.ElementType | any;
17
17
  };
18
18
  formats?: Record<string, unknown>;
@@ -21,26 +21,16 @@ type TransProps = {
21
21
  render?: (props: TransRenderProps) => React.ReactElement<any, any> | null;
22
22
  };
23
23
  declare function Trans(props: TransProps): React.ReactElement<any, any> | null;
24
- declare namespace Trans {
25
- var defaultProps: {
26
- values: {};
27
- components: {};
28
- };
29
- }
30
24
 
31
25
  type I18nContext = {
32
26
  i18n: I18n;
33
27
  defaultComponent?: ComponentType<TransRenderProps>;
34
28
  };
35
- type withI18nProps = {
36
- i18n: I18n;
37
- };
38
29
  type I18nProviderProps = I18nContext & {
39
30
  forceRenderOnLocaleChange?: boolean;
40
31
  children?: React.ReactNode;
41
32
  };
42
33
  declare function useLingui(): I18nContext;
43
- declare function withI18n(o?: object): <P extends withI18nProps>(Component: ComponentType<P>) => React.ComponentType<Omit<P, "i18n">>;
44
34
  declare const I18nProvider: FunctionComponent<I18nProviderProps>;
45
35
 
46
- export { I18nContext, I18nProvider, I18nProviderProps, Trans, TransProps, TransRenderProps, useLingui, withI18n, withI18nProps };
36
+ export { I18nContext, I18nProvider, I18nProviderProps, Trans, TransProps, TransRenderProps, useLingui };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingui/react",
3
- "version": "4.0.0-next.0",
3
+ "version": "4.0.0-next.2",
4
4
  "sideEffects": false,
5
5
  "description": "React components for translations",
6
6
  "main": "./build/cjs/index.js",
@@ -54,10 +54,10 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@babel/runtime": "^7.20.13",
57
- "@lingui/core": "^4.0.0-next.0"
57
+ "@lingui/core": "^4.0.0-next.2"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@testing-library/react": "^11.0.4"
61
61
  },
62
- "gitHead": "637f5cf6beda9d4ebce4e15cd9fdaa23e404b660"
62
+ "gitHead": "556ab57e20c2ac9d384a22424c6a90c2ba0dd133"
63
63
  }