diff --git a/package.json b/package.json index 48e443fc..7e6d9894 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,12 @@ }, "dependencies": { "@expo/react-native-action-sheet": "3.13.0", + "@formatjs/intl-datetimeformat": "^5.0.2", + "@formatjs/intl-getcanonicallocales": "^1.9.2", + "@formatjs/intl-locale": "^2.4.47", + "@formatjs/intl-numberformat": "^7.4.3", + "@formatjs/intl-pluralrules": "^4.3.3", + "@formatjs/intl-relativetimeformat": "^10.0.1", "@neverdull-agency/expo-unlimited-secure-store": "1.0.10", "@react-native-async-storage/async-storage": "1.17.3", "@react-native-community/blur": "3.6.0", @@ -68,6 +74,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "react-i18next": "11.16.7", + "react-intl": "^5.25.1", "react-native": "0.67.4", "react-native-animated-spinkit": "1.5.2", "react-native-base64": "^0.2.1", @@ -88,7 +95,6 @@ "react-native-tab-view": "3.1.1", "react-query": "3.38.0", "react-redux": "8.0.1", - "react-timeago": "6.2.1", "redux-persist": "6.0.0", "rn-placeholder": "3.0.3", "sentry-expo": "4.1.1", diff --git a/src/App.tsx b/src/App.tsx index e1057e8c..84c4bc99 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,31 @@ import { ActionSheetProvider } from '@expo/react-native-action-sheet' +import '@formatjs/intl-getcanonicallocales/polyfill' +import '@formatjs/intl-locale/polyfill' +import '@formatjs/intl-pluralrules/polyfill' +import '@formatjs/intl-pluralrules/locale-data/de' +import '@formatjs/intl-pluralrules/locale-data/en' +import '@formatjs/intl-pluralrules/locale-data/ko' +import '@formatjs/intl-pluralrules/locale-data/vi' +import '@formatjs/intl-pluralrules/locale-data/zh' +import '@formatjs/intl-numberformat/polyfill' +import '@formatjs/intl-numberformat/locale-data/de' +import '@formatjs/intl-numberformat/locale-data/en' +import '@formatjs/intl-numberformat/locale-data/ko' +import '@formatjs/intl-numberformat/locale-data/vi' +import '@formatjs/intl-numberformat/locale-data/zh' +import '@formatjs/intl-datetimeformat/polyfill' +import '@formatjs/intl-datetimeformat/locale-data/de' +import '@formatjs/intl-datetimeformat/locale-data/en' +import '@formatjs/intl-datetimeformat/locale-data/ko' +import '@formatjs/intl-datetimeformat/locale-data/vi' +import '@formatjs/intl-datetimeformat/locale-data/zh' +import '@formatjs/intl-datetimeformat/add-all-tz' +import '@formatjs/intl-relativetimeformat/polyfill' +import '@formatjs/intl-relativetimeformat/locale-data/de' +import '@formatjs/intl-relativetimeformat/locale-data/en' +import '@formatjs/intl-relativetimeformat/locale-data/ko' +import '@formatjs/intl-relativetimeformat/locale-data/vi' +import '@formatjs/intl-relativetimeformat/locale-data/zh' import queryClient from '@helpers/queryClient' import i18n from '@root/i18n/i18n' import Screens from '@root/Screens' @@ -6,7 +33,9 @@ import audio from '@root/startup/audio' import dev from '@root/startup/dev' import log from '@root/startup/log' import netInfo from '@root/startup/netInfo' +import push from '@root/startup/push' import sentry from '@root/startup/sentry' +import timezone from '@root/startup/timezone' import { persistor, store } from '@root/store' import AccessibilityManager from '@utils/accessibility/AccessibilityManager' import { @@ -24,7 +53,7 @@ import { enableFreeze } from 'react-native-screens' import { QueryClientProvider } from 'react-query' import { Provider } from 'react-redux' import { PersistGate } from 'redux-persist/integration/react' -import push from './startup/push' +import { IntlProvider } from 'react-intl' Platform.select({ android: LogBox.ignoreLogs(['Setting a timer for a long period of time']) @@ -34,6 +63,7 @@ dev() sentry() audio() push() +timezone() enableFreeze(true) const App: React.FC = () => { @@ -92,13 +122,18 @@ const App: React.FC = () => { const language = getSettingsLanguage(store.getState()) if (!language) { store.dispatch(changeLanguage('en')) + i18n.changeLanguage('en') + } else { + i18n.changeLanguage(language) } - i18n.changeLanguage(language) + return ( - + + + diff --git a/src/components/RelativeTime.tsx b/src/components/RelativeTime.tsx deleted file mode 100644 index 378aa878..00000000 --- a/src/components/RelativeTime.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { useTranslation } from 'react-i18next' -import { Text } from 'react-native' -import TimeAgo from 'react-timeago' -// @ts-ignore -import buildFormatter from 'react-timeago/lib/formatters/buildFormatter' - -export interface Props { - date: string | number -} - -const RelativeTime: React.FC = ({ date }) => { - const { t } = useTranslation('componentRelativeTime') - - return ( - - ) -} - -export default RelativeTime diff --git a/src/components/Timeline/Default.tsx b/src/components/Timeline/Default.tsx index 5a235b34..3605f240 100644 --- a/src/components/Timeline/Default.tsx +++ b/src/components/Timeline/Default.tsx @@ -102,6 +102,7 @@ const TimelineDefault = React.memo( queryKey={disableOnPress ? undefined : queryKey} rootQueryKey={disableOnPress ? undefined : rootQueryKey} status={actualStatus} + highlighted={highlighted} /> diff --git a/src/components/Timeline/Shared/HeaderDefault.tsx b/src/components/Timeline/Shared/HeaderDefault.tsx index 2496c2a2..b4db437b 100644 --- a/src/components/Timeline/Shared/HeaderDefault.tsx +++ b/src/components/Timeline/Shared/HeaderDefault.tsx @@ -18,9 +18,15 @@ export interface Props { queryKey?: QueryKeyTimeline rootQueryKey?: QueryKeyTimeline status: Mastodon.Status + highlighted: boolean } -const TimelineHeaderDefault = ({ queryKey, rootQueryKey, status }: Props) => { +const TimelineHeaderDefault = ({ + queryKey, + rootQueryKey, + status, + highlighted +}: Props) => { const { t } = useTranslation('componentTimeline') const navigation = useNavigation>() const { colors } = useTheme() @@ -40,6 +46,7 @@ const TimelineHeaderDefault = ({ queryKey, rootQueryKey, status }: Props) => { diff --git a/src/components/Timeline/Shared/HeaderShared/Created.tsx b/src/components/Timeline/Shared/HeaderShared/Created.tsx index 816b43f9..cd8eff38 100644 --- a/src/components/Timeline/Shared/HeaderShared/Created.tsx +++ b/src/components/Timeline/Shared/HeaderShared/Created.tsx @@ -1,25 +1,43 @@ import Icon from '@components/Icon' -import RelativeTime from '@components/RelativeTime' import CustomText from '@components/Text' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React from 'react' import { useTranslation } from 'react-i18next' +import { FormattedDate, FormattedRelativeTime, FormattedTime } from 'react-intl' export interface Props { created_at: Mastodon.Status['created_at'] | number edited_at?: Mastodon.Status['edited_at'] + highlighted: boolean } const HeaderSharedCreated = React.memo( - ({ created_at, edited_at }: Props) => { + ({ created_at, edited_at, highlighted }: Props) => { const { t } = useTranslation('componentTimeline') const { colors } = useTheme() + const actualTime = edited_at || created_at + return ( <> - + {highlighted ? ( + <> + + + ) : ( + + )} {edited_at ? ( = ({ ]} + components={[ + + ]} /> ) diff --git a/src/i18n/de/components/relativeTime.json b/src/i18n/de/components/relativeTime.json deleted file mode 100644 index afe2da03..00000000 --- a/src/i18n/de/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": "her", - "suffixFromNow": "", - "seconds": "%d Sekunden", - "minute": "etwa eine Minute", - "minutes": "%d Minuten", - "hour": "etwa eine Stunde", - "hours": "etwa %d Stunden", - "day": "1 Tag", - "days": "%d Tage", - "month": "etwa 1 Monat", - "months": "%d Monate", - "year": "etwa 1 Jahr", - "years": "%d Jahre", - "wordSeparator": "" - } -} \ No newline at end of file diff --git a/src/i18n/en/components/relativeTime.json b/src/i18n/en/components/relativeTime.json deleted file mode 100644 index 2e3a2056..00000000 --- a/src/i18n/en/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": "ago", - "suffixFromNow": "", - "seconds": "%d seconds", - "minute": "about a minute", - "minutes": "%d minutes", - "hour": "about an hour", - "hours": "about %d hours", - "day": "a day", - "days": "%d days", - "month": "about a month", - "months": "%d months", - "year": "about a year", - "years": "%d years", - "wordSeparator": " " - } -} \ No newline at end of file diff --git a/src/i18n/ko/components/relativeTime.json b/src/i18n/ko/components/relativeTime.json deleted file mode 100644 index 4d09558f..00000000 --- a/src/i18n/ko/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": "전", - "suffixFromNow": "", - "seconds": "%d초", - "minute": "약 1분", - "minutes": "%d분", - "hour": "약 1시간", - "hours": "약 %d시간", - "day": "하루", - "days": "%d일", - "month": "약 1달", - "months": "%d달", - "year": "약 1년", - "years": "%d년", - "wordSeparator": "" - } -} \ No newline at end of file diff --git a/src/i18n/vi/components/relativeTime.json b/src/i18n/vi/components/relativeTime.json deleted file mode 100644 index c5fffdb1..00000000 --- a/src/i18n/vi/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": " trước", - "suffixFromNow": "", - "seconds": "%d giây", - "minute": "một phút", - "minutes": "%d phút", - "hour": "một giờ", - "hours": "khoảng %d giờ", - "day": "một ngày", - "days": "%d ngày", - "month": "khoảng một tháng", - "months": "%d tháng", - "year": "khoảng một năm", - "years": "%d năm", - "wordSeparator": "" - } -} \ No newline at end of file diff --git a/src/i18n/zh-Hans/components/relativeTime.json b/src/i18n/zh-Hans/components/relativeTime.json deleted file mode 100644 index e9872070..00000000 --- a/src/i18n/zh-Hans/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": "前", - "suffixFromNow": "", - "seconds": "%d秒", - "minute": "1分钟", - "minutes": "%d分钟", - "hour": "1小时", - "hours": "%d小时", - "day": "1天", - "days": "%d天", - "month": "1个月", - "months": "%d月", - "year": "大约1年", - "years": "%d年", - "wordSeparator": "" - } -} \ No newline at end of file diff --git a/src/i18n/zh-Hant/components/relativeTime.json b/src/i18n/zh-Hant/components/relativeTime.json deleted file mode 100644 index 2f50ef1e..00000000 --- a/src/i18n/zh-Hant/components/relativeTime.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "strings": { - "prefixAgo": "", - "prefixFromNow": "", - "suffixAgo": "前", - "suffixFromNow": "", - "seconds": "%d 秒", - "minute": "約 1 分", - "minutes": "%d 分", - "hour": "約 1 小時", - "hours": "約 %d 小時", - "day": "1 天", - "days": "%d 天", - "month": "約 1 個月", - "months": "%d 個月", - "year": "約 1 年", - "years": "%d 年", - "wordSeparator": "" - } -} \ No newline at end of file diff --git a/src/screens/Announcements.tsx b/src/screens/Announcements.tsx index c9bfe684..b00c12f3 100644 --- a/src/screens/Announcements.tsx +++ b/src/screens/Announcements.tsx @@ -15,6 +15,7 @@ import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback, useEffect, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' +import { FormattedRelativeTime } from 'react-intl' import { Dimensions, Platform, Pressable, StyleSheet, View } from 'react-native' import { Circle } from 'react-native-animated-spinkit' import FastImage from 'react-native-fast-image' @@ -91,7 +92,17 @@ const ScreenAnnouncements: React.FC< > ]} + components={[ + + ]} /> { + log('log', 'Timezone', Localization.timezone) + if ('__setDefaultTimeZone' in Intl.DateTimeFormat) { + // @ts-ignore + Intl.DateTimeFormat.__setDefaultTimeZone(Localization.timezone) + } +} + +export default timezone diff --git a/tsconfig.json b/tsconfig.json index 86fced90..2a2c8a93 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "target": "ES6", + "module": "esnext", + "target": "esnext", "allowSyntheticDefaultImports": true, "jsx": "react-native", "lib": ["dom", "esnext"], diff --git a/yarn.lock b/yarn.lock index b9f41f6f..6a11b3ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1467,6 +1467,128 @@ lodash.pick "^4.4.0" lodash.template "^4.5.0" +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" + integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-skeleton-parser" "1.3.6" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" + integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + tslib "^2.1.0" + +"@formatjs/intl-datetimeformat@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-datetimeformat/-/intl-datetimeformat-5.0.2.tgz#11bf5814416c03f544e0b118789fb1497b815566" + integrity sha512-yk7CItBMgtUsub123+iqOfXoqG6JHJIl3Pke7eOYb7QFAPsOZliAJb2i0+Tr1FXWcm1PdWZVHEv6C2l4nEmQdw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl-displaynames@5.4.3": + version "5.4.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz#e468586694350c722c7efab1a31fcde68aeaed8b" + integrity sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl-getcanonicallocales@1.9.2", "@formatjs/intl-getcanonicallocales@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.9.2.tgz#5aab5f6ac2d923933538085eec20a19c393b6ebf" + integrity sha512-69WTStIJI2ikErOU1Il4NQKLVV8f2x6awr7+/dZz0uihuI7uQRcZtI6k/BBt4EtYaEl6w65YjUF93VuE015C0w== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-listformat@6.5.3": + version "6.5.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz#f29da613a8062dc3e4e3d847ba890c3ea745f051" + integrity sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl-locale@^2.4.47": + version "2.4.47" + resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-2.4.47.tgz#7bf66960e55e7dfa77fcc7c02ee06aea29f92eb6" + integrity sha512-yEpjx6RgVVG3pPsxb/jydhnq/A02KmjMste5U/wWxscRK0sny8LPIoBwgkOQycRoMRLNlLemJaQB7VbHZJ9OVg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-getcanonicallocales" "1.9.2" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" + integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-numberformat@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-7.4.3.tgz#dbf15fb6c8341088f1d526cf24d54f5388b478d1" + integrity sha512-oxhLCw00YO7brwMPqGD+ui5gdeWoMiRhqsRSqwsDSRd03aJ/N3/VZQDoxGIn3IM9bhlPM5W0ckXiXuOMFLszjw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl-pluralrules@^4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-4.3.3.tgz#9dc5a96175d89c8887f003eacef457a1f3003caf" + integrity sha512-NLZN8gf2qLpCuc0m565IbKLNUarEGOzk0mkdTkE4XTuNCofzoQTurW6lL3fmDlneAoYl2FiTdHa5q4o2vZF50g== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl-relativetimeformat@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-10.0.1.tgz#ed5e3df104a97e3ac6386ea7e5e34adb54ac8e74" + integrity sha512-AABPQtPjFilXegQsnmVHrSlzjFNUffAEk5DgowY6b7WSwDI7g2W6QgW903/lbZ58emhphAbgHdtKeUBXqTiLpw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/intl@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.2.1.tgz#6daf4dabed055b17f467f0aa1bc073a626bc9189" + integrity sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + "@formatjs/intl-displaynames" "5.4.3" + "@formatjs/intl-listformat" "6.5.3" + intl-messageformat "9.13.0" + tslib "^2.1.0" + "@hapi/hoek@^9.0.0": version "9.2.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" @@ -2175,6 +2297,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@16 || 17 || 18": + version "18.0.9" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878" + integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -4392,6 +4523,16 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +intl-messageformat@9.13.0: + version "9.13.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" + integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + tslib "^2.1.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6228,6 +6369,22 @@ react-i18next@11.16.7: html-escaper "^2.0.2" html-parse-stringify "^3.0.1" +react-intl@^5.25.1: + version "5.25.1" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.25.1.tgz#68a73aefc485c9bf70062381ae7f6f4791680879" + integrity sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-messageformat-parser" "2.1.0" + "@formatjs/intl" "2.2.1" + "@formatjs/intl-displaynames" "5.4.3" + "@formatjs/intl-listformat" "6.5.3" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/react" "16 || 17 || 18" + hoist-non-react-statics "^3.3.2" + intl-messageformat "9.13.0" + tslib "^2.1.0" + react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -7345,7 +7502,7 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@2.4.0: +tslib@2.4.0, tslib@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==