Launch Week Day 3: Introducing Organization Notifications in Socket.Learn More
Socket
Book a DemoSign in
Socket

@lingui/react

Package Overview
Dependencies
Maintainers
3
Versions
183
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lingui/react - npm Package Compare versions

Comparing version
3.17.0
to
3.17.1
+105
-159
build/cjs/index.js
'use strict';
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _extends = require('@babel/runtime/helpers/extends');
var React = require('react');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var LinguiContext = /*#__PURE__*/React.createContext(null);
const LinguiContext = /*#__PURE__*/React.createContext(null);
function useLingui() {
var context = React.useContext(LinguiContext);
const context = React.useContext(LinguiContext);
if (process.env.NODE_ENV !== "production") {

@@ -17,8 +14,7 @@ if (context == null) {

}
return context;
}
function withI18n(o) {
return function (WrappedComponent) {
return function (props) {
return WrappedComponent => {
return props => {
if (process.env.NODE_ENV !== "production") {

@@ -29,6 +25,5 @@ if (typeof o === "function" || /*#__PURE__*/React.isValidElement(o)) {

}
var _useLingui = useLingui(),
i18n = _useLingui.i18n;
const {
i18n
} = useLingui();
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {

@@ -40,9 +35,9 @@ i18n: i18n

}
var I18nProvider = function I18nProvider(_ref) {
var i18n = _ref.i18n,
defaultComponent = _ref.defaultComponent,
_ref$forceRenderOnLoc = _ref.forceRenderOnLocaleChange,
forceRenderOnLocaleChange = _ref$forceRenderOnLoc === void 0 ? true : _ref$forceRenderOnLoc,
children = _ref.children;
const I18nProvider = _ref => {
let {
i18n,
defaultComponent,
forceRenderOnLocaleChange = true,
children
} = _ref;
/**

@@ -59,21 +54,12 @@ * We can't pass `i18n` object directly through context, because even when locale

*/
var makeContext = function makeContext() {
return {
i18n: i18n,
defaultComponent: defaultComponent
};
const makeContext = () => ({
i18n,
defaultComponent
});
const getRenderKey = () => {
return forceRenderOnLocaleChange ? i18n.locale || "default" : "default";
};
const [context, setContext] = React.useState(makeContext()),
[renderKey, setRenderKey] = React.useState(getRenderKey());
var getRenderKey = function getRenderKey() {
return forceRenderOnLocaleChange ? i18n.locale || 'default' : 'default';
};
var _React$useState = React.useState(makeContext()),
_React$useState2 = _slicedToArray(_React$useState, 2),
context = _React$useState2[0],
setContext = _React$useState2[1],
_React$useState3 = React.useState(getRenderKey()),
_React$useState4 = _slicedToArray(_React$useState3, 2),
renderKey = _React$useState4[0],
setRenderKey = _React$useState4[1];
/**

@@ -91,23 +77,16 @@ * Subscribe for locale/message changes

*/
React.useEffect(function () {
var unsubscribe = i18n.on("change", function () {
React.useEffect(() => {
const unsubscribe = i18n.on("change", () => {
setContext(makeContext());
setRenderKey(getRenderKey());
});
if (renderKey === 'default') {
if (renderKey === "default") {
setRenderKey(getRenderKey());
}
if (forceRenderOnLocaleChange && renderKey === 'default') {
if (forceRenderOnLocaleChange && renderKey === "default") {
console.log("I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.");
}
return function () {
return unsubscribe();
};
return () => unsubscribe();
}, []);
if (forceRenderOnLocaleChange && renderKey === 'default') return null;
if (forceRenderOnLocaleChange && renderKey === "default") return null;
return /*#__PURE__*/React.createElement(LinguiContext.Provider, {

@@ -119,13 +98,9 @@ value: context,

function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
// match <tag>paired</tag> and <tag/> unpaired tags
const tagRe = /<([a-zA-Z0-9]+)>(.*?)<\/\1>|<([a-zA-Z0-9]+)\/>/;
const nlRe = /(?:\r\n|\r|\n)/g;
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
var tagRe = /<(\d+)>(.*?)<\/\1>|<(\d+)\/>/;
var nlRe = /(?:\r\n|\r|\n)/g; // For HTML, certain tags should omit their close tag. We keep a whitelist for
// For HTML, certain tags should omit their close tag. We keep a whitelist for
// those special-case tags.
var voidElementTags = {
const voidElementTags = {
area: true,

@@ -148,58 +123,43 @@ base: true,

};
/**
* `formatElements` - parse string and return tree of react elements
*
* `value` is string to be formatted with <0>Paired<0/> or <0/> (unpaired)
* `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)
* placeholders. `elements` is a array of react elements which indexes
* correspond to element indexes in formatted string
*/
function formatElements(value) {
var elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var uniqueId = makeCounter(0, '$lingui$');
var parts = value.replace(nlRe, "").split(tagRe); // no inline elements, return
let elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const uniqueId = makeCounter(0, "$lingui$");
const parts = value.replace(nlRe, "").split(tagRe);
// no inline elements, return
if (parts.length === 1) return value;
var tree = [];
var before = parts.shift();
const tree = [];
const before = parts.shift();
if (before) tree.push(before);
var _iterator = _createForOfIteratorHelper(getElements(parts)),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var _step$value = _slicedToArray(_step.value, 3),
index = _step$value[0],
children = _step$value[1],
after = _step$value[2];
var element = elements[index];
if (!element || voidElementTags[element.type] && children) {
if (!element) {
console.error("Can use element at index '".concat(index, "' as it is not declared in the original translation"));
} else {
console.error("".concat(element.type, " is a void element tag therefore it must have no children"));
} // ignore problematic element but push its children and elements after it
element = /*#__PURE__*/React.createElement(React.Fragment);
for (const [index, children, after] of getElements(parts)) {
let element = elements[index];
if (!element || voidElementTags[element.type] && children) {
if (!element) {
console.error(`Can use element at index '${index}' as it is not declared in the original translation`);
} else {
console.error(`${element.type} is a void element tag therefore it must have no children`);
}
tree.push( /*#__PURE__*/React.cloneElement(element, {
key: uniqueId()
}, // format children for pair tags
// unpaired tags might have children if it's a component passed as a variable
children ? formatElements(children, elements) : element.props.children));
if (after) tree.push(after);
// ignore problematic element but push its children and elements after it
element = /*#__PURE__*/React.createElement(React.Fragment);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
tree.push( /*#__PURE__*/React.cloneElement(element, {
key: uniqueId()
},
// format children for pair tags
// unpaired tags might have children if it's a component passed as a variable
children ? formatElements(children, elements) : element.props.children));
if (after) tree.push(after);
}
return tree;
}
/*

@@ -219,43 +179,31 @@ * `getElements` - return array of element indexes and element childrens

*/
function getElements(parts) {
if (!parts.length) return [];
var _parts$slice = parts.slice(0, 4),
_parts$slice2 = _slicedToArray(_parts$slice, 4),
paired = _parts$slice2[0],
children = _parts$slice2[1],
unpaired = _parts$slice2[2],
after = _parts$slice2[3];
return [[parseInt(paired || unpaired), children || "", after]].concat(getElements(parts.slice(4, parts.length)));
const [paired, children, unpaired, after] = parts.slice(0, 4);
return [[paired || unpaired, children || "", after]].concat(getElements(parts.slice(4, parts.length)));
}
var makeCounter = function makeCounter() {
var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
return function () {
return "".concat(prefix, "_").concat(count++);
};
const makeCounter = function () {
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
return () => `${prefix}_${count++}`;
};
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function Trans(props) {
var _useLingui = useLingui(),
i18n = _useLingui.i18n,
defaultComponent = _useLingui.defaultComponent;
var render = props.render,
component = props.component,
id = props.id,
message = props.message,
formats = props.formats;
var values = _objectSpread({}, props.values);
var components = _objectSpread({}, props.components);
const {
i18n,
defaultComponent
} = useLingui();
const {
render,
component,
id,
message,
formats
} = props;
const values = {
...props.values
};
const components = {
...props.components
};
if (values) {

@@ -271,19 +219,17 @@ /*

*/
Object.keys(values).forEach(function (key) {
var value = values[key];
Object.keys(values).forEach(key => {
const value = values[key];
if (! /*#__PURE__*/React.isValidElement(value)) return;
var index = Object.keys(components).length;
const index = Object.keys(components).length;
components[index] = value;
values[key] = "<".concat(index, "/>");
values[key] = `<${index}/>`;
});
}
var _translation = i18n && typeof i18n._ === "function" ? i18n._(id, values, {
message: message,
formats: formats
const _translation = i18n && typeof i18n._ === "function" ? i18n._(id, values, {
message,
formats
}) : id; // i18n provider isn't loaded at all
var translation = _translation ? formatElements(_translation, components) : null;
const translation = _translation ? formatElements(_translation, components) : null;
if (render === null || component === null) {

@@ -294,31 +240,31 @@ // Although `string` is a valid react element, types only allow `Element`

}
var FallbackComponent = defaultComponent || React.Fragment;
var i18nProps = {
id: id,
message: message,
translation: translation,
const FallbackComponent = defaultComponent || React.Fragment;
const i18nProps = {
id,
message,
translation,
isTranslated: id !== translation && message !== translation
}; // Validation of `render` and `component` props
};
// Validation of `render` and `component` props
if (render && component) {
console.error("You can't use both `component` and `render` prop at the same time. `component` is ignored.");
} else if (render && typeof render !== "function") {
console.error("Invalid value supplied to prop `render`. It must be a function, provided ".concat(render));
console.error(`Invalid value supplied to prop \`render\`. It must be a function, provided ${render}`);
} else if (component && typeof component !== "function") {
// Apparently, both function components and class components are functions
// See https://stackoverflow.com/a/41658173/1535540
console.error("Invalid value supplied to prop `component`. It must be a React component, provided ".concat(component));
console.error(`Invalid value supplied to prop \`component\`. It must be a React component, provided ${component}`);
return /*#__PURE__*/React.createElement(FallbackComponent, i18nProps, translation);
} // Rendering using a render prop
}
// Rendering using a render prop
if (typeof render === "function") {
// Component: render={(props) => <a title={props.translation}>x</a>}
return render(i18nProps);
} // `component` prop has a higher precedence over `defaultComponent`
}
var Component = component || FallbackComponent;
var DefaultComponent = defaultComponent;
// `component` prop has a higher precedence over `defaultComponent`
const Component = component || FallbackComponent;
const DefaultComponent = defaultComponent;
return DefaultComponent && !component ? /*#__PURE__*/React.createElement(DefaultComponent, i18nProps, translation) : /*#__PURE__*/React.createElement(Component, null, translation);

@@ -325,0 +271,0 @@ }

@@ -1,1 +0,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 (forceRenderOnLocaleChange ? (i18n.locale || 'default') : 'default') 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(\"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\")\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 <0>paired</0> and <1/> unpaired tags\nconst tagRe = /<(\\d+)>(.*?)<\\/\\1>|<(\\d+)\\/>/\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 <0>Paired<0/> or <0/> (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 [[parseInt(paired || unpaired), children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter = (count = 0, prefix = \"\") => () => `${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 context?: string\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","useState","setContext","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","getElements","index","after","element","type","error","createElement","Fragment","cloneElement","key","slice","paired","unpaired","parseInt","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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"}
{"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 context?: string\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":";;;;;AAkBA,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,SAASM,QAAQ,CACtBC,CAAU,EAG8B;AACxC,EAAA,OACEC,gBAAkC,IACb;AACrB,IAAA,OAAQC,KAAK,IAAK;AAChB,MAAA,IAAIP,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;QACzC,IAAI,OAAOG,CAAC,KAAK,UAAU,iBAAIV,KAAK,CAACa,cAAc,CAACH,CAAC,CAAC,EAAE;UACtD,MAAM,IAAIF,KAAK,CACb,yDAAyD,GACvD,sEAAsE,GACtE,sEAAsE,CACzE,CAAA;AACH,SAAA;AACF,OAAA;MAEA,MAAM;AAAEM,QAAAA,IAAAA;OAAM,GAAGZ,SAAS,EAAE,CAAA;MAC5B,oBAAO,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,QAAA,CAAA,EAAA,EAAKU,KAAK,EAAA;AAAE,QAAA,IAAI,EAAEE,IAAAA;OAAQ,CAAA,CAAA,CAAA;KACnD,CAAA;GACF,CAAA;AACH,CAAA;AAEO,MAAMC,YAAkD,GAAG,IAK5D,IAAA;EAAA,IAL6D;IACjED,IAAI;IACJE,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;IACzBL,IAAI;AACJE,IAAAA,gBAAAA;AACF,GAAC,CAAC,CAAA;EACF,MAAMI,YAAY,GAAG,MAAM;IACzB,OACEH,yBAAyB,GAAGH,IAAI,CAACO,MAAM,IAAI,SAAS,GAAG,SAAS,CAAA;GAEnE,CAAA;AAED,EAAA,MAAM,CAAClB,OAAO,EAAEmB,UAAU,CAAC,GAAGtB,KAAK,CAACuB,QAAQ,CAAcJ,WAAW,EAAE,CAAC;IACtE,CAACK,SAAS,EAAEC,YAAY,CAAC,GAAGzB,KAAK,CAACuB,QAAQ,CAASH,YAAY,EAAE,CAAC,CAAA;;AAEpE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEpB,KAAK,CAAC0B,SAAS,CAAC,MAAM;IACpB,MAAMC,WAAW,GAAGb,IAAI,CAACc,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,EAAErB,OAAQ;AAAC,IAAA,GAAG,EAAEqB,SAAAA;AAAU,GAAA,EACpDN,QAAQ,CACc,CAAA;AAE7B;;ACxHA;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,CAA4BL,0BAAAA,EAAAA,KAAM,qDAAoD,CACxF,CAAA;AACH,OAAC,MAAM;QACLlC,OAAO,CAACuC,KAAK,CACV,CAAA,EAAEF,OAAO,CAACC,IAAK,2DAA0D,CAC3E,CAAA;AACH,OAAA;;AAEA;MACAD,OAAO,gBAAGlE,KAAK,CAACqE,aAAa,CAACrE,KAAK,CAACsE,QAAQ,CAAC,CAAA;AAC/C,KAAA;IAEAX,IAAI,CAACG,IAAI,eACP9D,KAAK,CAACuE,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,CAACtD,KAAK,CAACM,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,CAACe,MAAM,EAAEvD,QAAQ,EAAEwD,QAAQ,EAAEV,KAAK,CAAC,GAAGT,KAAK,CAACoB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAO,CAAC,CAACF,MAAM,IAAIC,QAAQ,EAAExD,QAAQ,IAAI,EAAE,EAAE8C,KAAK,CAAC,CAAC,CAACY,MAAM,CACzDX,WAAW,CAACV,KAAK,CAACoB,KAAK,CAAC,CAAC,EAAEpB,KAAK,CAACG,MAAM,CAAC,CAAC,CAC1C,CAAA;AACH,CAAA;AAEA,MAAMJ,WAAW,GACf,YAAA;EAAA,IAACuB,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;;ACtFnB,SAASE,KAAK,CAACnE,KAAiB,EAAuC;EAC5E,MAAM;IAAEE,IAAI;AAAEE,IAAAA,gBAAAA;GAAkB,GAAGd,SAAS,EAAE,CAAA;EAC9C,MAAM;IAAE8E,MAAM;IAAEC,SAAS;IAAEC,EAAE;IAAEC,OAAO;AAAEC,IAAAA,OAAAA;AAAQ,GAAC,GAAGxE,KAAK,CAAA;AAEzD,EAAA,MAAMyE,MAAM,GAAG;AAAE,IAAA,GAAGzE,KAAK,CAACyE,MAAAA;GAAQ,CAAA;AAClC,EAAA,MAAMC,UAAU,GAAG;AAAE,IAAA,GAAG1E,KAAK,CAAC0E,UAAAA;GAAY,CAAA;AAE1C,EAAA,IAAID,MAAM,EAAE;AACV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAKIE,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAACI,OAAO,CAAEjB,GAAG,IAAK;AACnC,MAAA,MAAMrB,KAAK,GAAGkC,MAAM,CAACb,GAAG,CAAC,CAAA;AACzB,MAAA,IAAI,eAACxE,KAAK,CAACa,cAAc,CAACsC,KAAK,CAAC,EAAE,OAAA;MAElC,MAAMY,KAAK,GAAGwB,MAAM,CAACC,IAAI,CAACF,UAAU,CAAC,CAAC5B,MAAM,CAAA;AAE5C4B,MAAAA,UAAU,CAACvB,KAAK,CAAC,GAAGZ,KAAK,CAAA;AACzBkC,MAAAA,MAAM,CAACb,GAAG,CAAC,GAAI,CAAA,CAAA,EAAGT,KAAM,CAAG,EAAA,CAAA,CAAA;AAC7B,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA,EAAA,MAAM2B,YAAoB,GACxB5E,IAAI,IAAI,OAAOA,IAAI,CAAC6E,CAAC,KAAK,UAAU,GAChC7E,IAAI,CAAC6E,CAAC,CAACT,EAAE,EAAEG,MAAM,EAAE;IAAEF,OAAO;AAAEC,IAAAA,OAAAA;GAAS,CAAC,GACxCF,EAAE,CAAC;;EAET,MAAMU,WAAW,GAAGF,YAAY,GAC5BxC,cAAc,CAACwC,YAAY,EAAEJ,UAAU,CAAC,GACxC,IAAI,CAAA;AAER,EAAA,IAAIN,MAAM,KAAK,IAAI,IAAIC,SAAS,KAAK,IAAI,EAAE;AACzC;AACA;AACA,IAAA,OAAOW,WAAW,CAAA;AACpB,GAAA;AAEA,EAAA,MAAMC,iBAAiB,GAAI7E,gBAAgB,IACzChB,KAAK,CAACsE,QAAqC,CAAA;AAE7C,EAAA,MAAMwB,SAAS,GAAG;IAChBZ,EAAE;IACFC,OAAO;IACPS,WAAW;AACXG,IAAAA,YAAY,EAAEb,EAAE,KAAKU,WAAW,IAAIT,OAAO,KAAKS,WAAAA;GACjD,CAAA;;AAED;EACA,IAAIZ,MAAM,IAAIC,SAAS,EAAE;AACvBpD,IAAAA,OAAO,CAACuC,KAAK,CACX,4FAA4F,CAC7F,CAAA;GACF,MAAM,IAAIY,MAAM,IAAI,OAAOA,MAAM,KAAK,UAAU,EAAE;AACjDnD,IAAAA,OAAO,CAACuC,KAAK,CACV,CAA6EY,2EAAAA,EAAAA,MAAO,EAAC,CACvF,CAAA;GACF,MAAM,IAAIC,SAAS,IAAI,OAAOA,SAAS,KAAK,UAAU,EAAE;AACvD;AACA;AACApD,IAAAA,OAAO,CAACuC,KAAK,CACV,CAAuFa,qFAAAA,EAAAA,SAAU,EAAC,CACpG,CAAA;AACD,IAAA,oBAAO,oBAAC,iBAAiB,EAAKa,SAAS,EAAGF,WAAW,CAAqB,CAAA;AAC5E,GAAA;;AAEA;AACA,EAAA,IAAI,OAAOZ,MAAM,KAAK,UAAU,EAAE;AAChC;IACA,OAAOA,MAAM,CAACc,SAAS,CAAC,CAAA;AAC1B,GAAA;;AAEA;AACA,EAAA,MAAME,SAAS,GAAIf,SAAS,IAAIY,iBAA8C,CAAA;EAC9E,MAAMI,gBAAgB,GAAGjF,gBAAgB,CAAA;AAEzC,EAAA,OAAOiF,gBAAgB,IAAI,CAAChB,SAAS,gBACnC,oBAAC,gBAAgB,EAAKa,SAAS,EAAGF,WAAW,CAAoB,gBAEjE,oBAAC,SAAS,EAAA,IAAA,EAAEA,WAAW,CACxB,CAAA;AACH,CAAA;AAEAb,KAAK,CAACmB,YAAY,GAAG;EACnBb,MAAM,EAAE,EAAE;AACVC,EAAAA,UAAU,EAAE,EAAC;AACf,CAAC;;;;;;;"}

@@ -1,10 +0,7 @@

import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import _extends from '@babel/runtime/helpers/extends';
import React from 'react';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
var LinguiContext = /*#__PURE__*/React.createContext(null);
const LinguiContext = /*#__PURE__*/React.createContext(null);
function useLingui() {
var context = React.useContext(LinguiContext);
const context = React.useContext(LinguiContext);
if (process.env.NODE_ENV !== "production") {

@@ -15,8 +12,7 @@ if (context == null) {

}
return context;
}
function withI18n(o) {
return function (WrappedComponent) {
return function (props) {
return WrappedComponent => {
return props => {
if (process.env.NODE_ENV !== "production") {

@@ -27,6 +23,5 @@ if (typeof o === "function" || /*#__PURE__*/React.isValidElement(o)) {

}
var _useLingui = useLingui(),
i18n = _useLingui.i18n;
const {
i18n
} = useLingui();
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {

@@ -38,9 +33,9 @@ i18n: i18n

}
var I18nProvider = function I18nProvider(_ref) {
var i18n = _ref.i18n,
defaultComponent = _ref.defaultComponent,
_ref$forceRenderOnLoc = _ref.forceRenderOnLocaleChange,
forceRenderOnLocaleChange = _ref$forceRenderOnLoc === void 0 ? true : _ref$forceRenderOnLoc,
children = _ref.children;
const I18nProvider = _ref => {
let {
i18n,
defaultComponent,
forceRenderOnLocaleChange = true,
children
} = _ref;
/**

@@ -57,21 +52,12 @@ * We can't pass `i18n` object directly through context, because even when locale

*/
var makeContext = function makeContext() {
return {
i18n: i18n,
defaultComponent: defaultComponent
};
const makeContext = () => ({
i18n,
defaultComponent
});
const getRenderKey = () => {
return forceRenderOnLocaleChange ? i18n.locale || "default" : "default";
};
const [context, setContext] = React.useState(makeContext()),
[renderKey, setRenderKey] = React.useState(getRenderKey());
var getRenderKey = function getRenderKey() {
return forceRenderOnLocaleChange ? i18n.locale || 'default' : 'default';
};
var _React$useState = React.useState(makeContext()),
_React$useState2 = _slicedToArray(_React$useState, 2),
context = _React$useState2[0],
setContext = _React$useState2[1],
_React$useState3 = React.useState(getRenderKey()),
_React$useState4 = _slicedToArray(_React$useState3, 2),
renderKey = _React$useState4[0],
setRenderKey = _React$useState4[1];
/**

@@ -89,23 +75,16 @@ * Subscribe for locale/message changes

*/
React.useEffect(function () {
var unsubscribe = i18n.on("change", function () {
React.useEffect(() => {
const unsubscribe = i18n.on("change", () => {
setContext(makeContext());
setRenderKey(getRenderKey());
});
if (renderKey === 'default') {
if (renderKey === "default") {
setRenderKey(getRenderKey());
}
if (forceRenderOnLocaleChange && renderKey === 'default') {
if (forceRenderOnLocaleChange && renderKey === "default") {
console.log("I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.");
}
return function () {
return unsubscribe();
};
return () => unsubscribe();
}, []);
if (forceRenderOnLocaleChange && renderKey === 'default') return null;
if (forceRenderOnLocaleChange && renderKey === "default") return null;
return /*#__PURE__*/React.createElement(LinguiContext.Provider, {

@@ -117,13 +96,9 @@ value: context,

function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
// match <tag>paired</tag> and <tag/> unpaired tags
const tagRe = /<([a-zA-Z0-9]+)>(.*?)<\/\1>|<([a-zA-Z0-9]+)\/>/;
const nlRe = /(?:\r\n|\r|\n)/g;
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
var tagRe = /<(\d+)>(.*?)<\/\1>|<(\d+)\/>/;
var nlRe = /(?:\r\n|\r|\n)/g; // For HTML, certain tags should omit their close tag. We keep a whitelist for
// For HTML, certain tags should omit their close tag. We keep a whitelist for
// those special-case tags.
var voidElementTags = {
const voidElementTags = {
area: true,

@@ -146,58 +121,43 @@ base: true,

};
/**
* `formatElements` - parse string and return tree of react elements
*
* `value` is string to be formatted with <0>Paired<0/> or <0/> (unpaired)
* `value` is string to be formatted with <tag>Paired<tag/> or <tag/> (unpaired)
* placeholders. `elements` is a array of react elements which indexes
* correspond to element indexes in formatted string
*/
function formatElements(value) {
var elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var uniqueId = makeCounter(0, '$lingui$');
var parts = value.replace(nlRe, "").split(tagRe); // no inline elements, return
let elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const uniqueId = makeCounter(0, "$lingui$");
const parts = value.replace(nlRe, "").split(tagRe);
// no inline elements, return
if (parts.length === 1) return value;
var tree = [];
var before = parts.shift();
const tree = [];
const before = parts.shift();
if (before) tree.push(before);
var _iterator = _createForOfIteratorHelper(getElements(parts)),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var _step$value = _slicedToArray(_step.value, 3),
index = _step$value[0],
children = _step$value[1],
after = _step$value[2];
var element = elements[index];
if (!element || voidElementTags[element.type] && children) {
if (!element) {
console.error("Can use element at index '".concat(index, "' as it is not declared in the original translation"));
} else {
console.error("".concat(element.type, " is a void element tag therefore it must have no children"));
} // ignore problematic element but push its children and elements after it
element = /*#__PURE__*/React.createElement(React.Fragment);
for (const [index, children, after] of getElements(parts)) {
let element = elements[index];
if (!element || voidElementTags[element.type] && children) {
if (!element) {
console.error(`Can use element at index '${index}' as it is not declared in the original translation`);
} else {
console.error(`${element.type} is a void element tag therefore it must have no children`);
}
tree.push( /*#__PURE__*/React.cloneElement(element, {
key: uniqueId()
}, // format children for pair tags
// unpaired tags might have children if it's a component passed as a variable
children ? formatElements(children, elements) : element.props.children));
if (after) tree.push(after);
// ignore problematic element but push its children and elements after it
element = /*#__PURE__*/React.createElement(React.Fragment);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
tree.push( /*#__PURE__*/React.cloneElement(element, {
key: uniqueId()
},
// format children for pair tags
// unpaired tags might have children if it's a component passed as a variable
children ? formatElements(children, elements) : element.props.children));
if (after) tree.push(after);
}
return tree;
}
/*

@@ -217,43 +177,31 @@ * `getElements` - return array of element indexes and element childrens

*/
function getElements(parts) {
if (!parts.length) return [];
var _parts$slice = parts.slice(0, 4),
_parts$slice2 = _slicedToArray(_parts$slice, 4),
paired = _parts$slice2[0],
children = _parts$slice2[1],
unpaired = _parts$slice2[2],
after = _parts$slice2[3];
return [[parseInt(paired || unpaired), children || "", after]].concat(getElements(parts.slice(4, parts.length)));
const [paired, children, unpaired, after] = parts.slice(0, 4);
return [[paired || unpaired, children || "", after]].concat(getElements(parts.slice(4, parts.length)));
}
var makeCounter = function makeCounter() {
var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
return function () {
return "".concat(prefix, "_").concat(count++);
};
const makeCounter = function () {
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
return () => `${prefix}_${count++}`;
};
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function Trans(props) {
var _useLingui = useLingui(),
i18n = _useLingui.i18n,
defaultComponent = _useLingui.defaultComponent;
var render = props.render,
component = props.component,
id = props.id,
message = props.message,
formats = props.formats;
var values = _objectSpread({}, props.values);
var components = _objectSpread({}, props.components);
const {
i18n,
defaultComponent
} = useLingui();
const {
render,
component,
id,
message,
formats
} = props;
const values = {
...props.values
};
const components = {
...props.components
};
if (values) {

@@ -269,19 +217,17 @@ /*

*/
Object.keys(values).forEach(function (key) {
var value = values[key];
Object.keys(values).forEach(key => {
const value = values[key];
if (! /*#__PURE__*/React.isValidElement(value)) return;
var index = Object.keys(components).length;
const index = Object.keys(components).length;
components[index] = value;
values[key] = "<".concat(index, "/>");
values[key] = `<${index}/>`;
});
}
var _translation = i18n && typeof i18n._ === "function" ? i18n._(id, values, {
message: message,
formats: formats
const _translation = i18n && typeof i18n._ === "function" ? i18n._(id, values, {
message,
formats
}) : id; // i18n provider isn't loaded at all
var translation = _translation ? formatElements(_translation, components) : null;
const translation = _translation ? formatElements(_translation, components) : null;
if (render === null || component === null) {

@@ -292,31 +238,31 @@ // Although `string` is a valid react element, types only allow `Element`

}
var FallbackComponent = defaultComponent || React.Fragment;
var i18nProps = {
id: id,
message: message,
translation: translation,
const FallbackComponent = defaultComponent || React.Fragment;
const i18nProps = {
id,
message,
translation,
isTranslated: id !== translation && message !== translation
}; // Validation of `render` and `component` props
};
// Validation of `render` and `component` props
if (render && component) {
console.error("You can't use both `component` and `render` prop at the same time. `component` is ignored.");
} else if (render && typeof render !== "function") {
console.error("Invalid value supplied to prop `render`. It must be a function, provided ".concat(render));
console.error(`Invalid value supplied to prop \`render\`. It must be a function, provided ${render}`);
} else if (component && typeof component !== "function") {
// Apparently, both function components and class components are functions
// See https://stackoverflow.com/a/41658173/1535540
console.error("Invalid value supplied to prop `component`. It must be a React component, provided ".concat(component));
console.error(`Invalid value supplied to prop \`component\`. It must be a React component, provided ${component}`);
return /*#__PURE__*/React.createElement(FallbackComponent, i18nProps, translation);
} // Rendering using a render prop
}
// Rendering using a render prop
if (typeof render === "function") {
// Component: render={(props) => <a title={props.translation}>x</a>}
return render(i18nProps);
} // `component` prop has a higher precedence over `defaultComponent`
}
var Component = component || FallbackComponent;
var DefaultComponent = defaultComponent;
// `component` prop has a higher precedence over `defaultComponent`
const Component = component || FallbackComponent;
const DefaultComponent = defaultComponent;
return DefaultComponent && !component ? /*#__PURE__*/React.createElement(DefaultComponent, i18nProps, translation) : /*#__PURE__*/React.createElement(Component, null, translation);

@@ -323,0 +269,0 @@ }

@@ -1,1 +0,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 (forceRenderOnLocaleChange ? (i18n.locale || 'default') : 'default') 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(\"I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.\")\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 <0>paired</0> and <1/> unpaired tags\nconst tagRe = /<(\\d+)>(.*?)<\\/\\1>|<(\\d+)\\/>/\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 <0>Paired<0/> or <0/> (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 [[parseInt(paired || unpaired), children || \"\", after]].concat(\n getElements(parts.slice(4, parts.length))\n )\n}\n\nconst makeCounter = (count = 0, prefix = \"\") => () => `${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 context?: string\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","useState","setContext","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","getElements","index","after","element","type","error","createElement","Fragment","cloneElement","key","slice","paired","unpaired","parseInt","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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"}
{"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 context?: string\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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"}
import React, { ComponentType, FunctionComponent } from 'react';
import { I18n } from '@lingui/core';
declare type TransRenderProps = {
type TransRenderProps = {
id?: string;

@@ -11,3 +11,3 @@ translation?: React.ReactNode;

};
declare type TransProps = {
type TransProps = {
id: string;

@@ -33,10 +33,10 @@ message?: string;

declare type I18nContext = {
type I18nContext = {
i18n: I18n;
defaultComponent?: ComponentType<TransRenderProps>;
};
declare type withI18nProps = {
type withI18nProps = {
i18n: I18n;
};
declare type I18nProviderProps = I18nContext & {
type I18nProviderProps = I18nContext & {
forceRenderOnLocaleChange?: boolean;

@@ -46,5 +46,5 @@ children?: React.ReactNode;

declare function useLingui(): I18nContext;
declare function withI18n(o?: object): <P extends withI18nProps>(Component: ComponentType<P>) => React.ComponentType<Omit<P, 'i18n'>>;
declare function withI18n(o?: object): <P extends withI18nProps>(Component: ComponentType<P>) => React.ComponentType<Omit<P, "i18n">>;
declare const I18nProvider: FunctionComponent<I18nProviderProps>;
export { I18nContext, I18nProvider, I18nProviderProps, Trans, TransProps, TransRenderProps, useLingui, withI18n, withI18nProps };

@@ -6,2 +6,13 @@ # Change Log

## [3.17.1](https://github.com/lingui/js-lingui/compare/v3.17.0...v3.17.1) (2023-02-07)
### Bug Fixes
* Named components not working in Trans in @lingui/react ([#1402](https://github.com/lingui/js-lingui/issues/1402)) ([bf7f655](https://github.com/lingui/js-lingui/commit/bf7f655ccac3fc22fb7d36662ab0ec96595574e5))
# [3.17.0](https://github.com/lingui/js-lingui/compare/v3.16.1...v3.17.0) (2023-02-01)

@@ -8,0 +19,0 @@

{
"name": "@lingui/react",
"version": "3.17.0",
"version": "3.17.1",
"sideEffects": false,

@@ -56,4 +56,4 @@ "description": "React components for translations",

"dependencies": {
"@babel/runtime": "^7.11.2",
"@lingui/core": "3.17.0"
"@babel/runtime": "^7.20.13",
"@lingui/core": "3.17.1"
},

@@ -63,3 +63,3 @@ "devDependencies": {

},
"gitHead": "1c8bc46213b35b25da8fe7a80ddcf6f6a5d9d539"
"gitHead": "76ef4e8d1c668578ce2c3829ebf35d22ca5e679c"
}