diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json index f7466f233..4fa34d20e 100644 --- a/packages/pl-fe/package.json +++ b/packages/pl-fe/package.json @@ -121,7 +121,7 @@ "react-helmet-async": "^2.0.5", "react-hot-toast": "^2.5.2", "react-inlinesvg": "^4.1.8", - "react-intl": "^7.0.4", + "react-intl": "^8.0.10", "react-redux": "^9.0.4", "react-sparklines": "^1.7.0", "react-sticky-box": "^2.0.5", @@ -142,7 +142,7 @@ "zustand-mutative": "^1.2.0" }, "devDependencies": { - "@formatjs/cli": "^6.3.14", + "@formatjs/cli": "^6.9.0", "@jedmao/redux-mock-store": "^3.0.5", "@sentry/types": "^8.47.0", "@stylistic/eslint-plugin": "^3.1.0", diff --git a/packages/pl-fe/src/components/dropdown-navigation.tsx b/packages/pl-fe/src/components/dropdown-navigation.tsx index f980319ee..c269fae74 100644 --- a/packages/pl-fe/src/components/dropdown-navigation.tsx +++ b/packages/pl-fe/src/components/dropdown-navigation.tsx @@ -297,7 +297,7 @@ const DropdownNavigation: React.FC = React.memo((): JSX.Element | null => { } + text={} onClick={closeSidebar} /> )} diff --git a/packages/pl-fe/src/features/account/components/header.tsx b/packages/pl-fe/src/features/account/components/header.tsx index e48b3a97b..03b39dfa0 100644 --- a/packages/pl-fe/src/features/account/components/header.tsx +++ b/packages/pl-fe/src/features/account/components/header.tsx @@ -645,7 +645,7 @@ const Header: React.FC = ({ account }) => { } isFlush > - } /> + } /> ); } diff --git a/packages/pl-fe/src/features/ui/components/panels/account-note-panel.tsx b/packages/pl-fe/src/features/ui/components/panels/account-note-panel.tsx index 5e00508b7..de982ea18 100644 --- a/packages/pl-fe/src/features/ui/components/panels/account-note-panel.tsx +++ b/packages/pl-fe/src/features/ui/components/panels/account-note-panel.tsx @@ -12,7 +12,7 @@ import { useUpdateAccountNoteMutation } from 'pl-fe/queries/accounts/use-relatio import type { Account as AccountEntity } from 'pl-api'; const messages = defineMessages({ - placeholder: { id: 'account_note.placeholder', defaultMessage: 'Click to add a note' }, + placeholder: { id: 'account_note.placeholder', defaultMessage: 'Add a note' }, }); interface IAccountNotePanel { diff --git a/packages/pl-fe/src/locales/en.json b/packages/pl-fe/src/locales/en.json index b1f3f67f2..e7b888a4e 100644 --- a/packages/pl-fe/src/locales/en.json +++ b/packages/pl-fe/src/locales/en.json @@ -33,7 +33,7 @@ "account.follows": "Following", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", - "account.header.alt": "Header", + "account.header.alt": "Profile header", "account.header.description": "Header description", "account.hide_reblogs": "Hide reposts from @{name}", "account.instance_favicon": "Visit {domain} timeline", @@ -100,7 +100,7 @@ "account_note.fail": "Failed to save note", "account_note.header": "Note", "account_note.modal_header": "Edit note for @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Add a note", "account_note.save": "Save note", "account_note.success": "Note saved", "admin.announcements.action": "Create announcement", @@ -406,7 +406,7 @@ "column.developers": "Developers", "column.developers.service_worker": "Service Worker", "column.direct": "Direct messages", - "column.directory": "Browse profiles", + "column.directory": "Profile directory", "column.dislikes": "Dislikes", "column.domain_blocks": "Domain blocks", "column.draft_statuses": "Drafts", @@ -420,7 +420,7 @@ "column.favourited_statuses": "Liked posts", "column.favourites": "Likes", "column.federation_restrictions": "Federation restrictions", - "column.filters": "Filters", + "column.filters": "Muted words", "column.filters.accounts": "Accounts", "column.filters.add_new": "Add new filter", "column.filters.conversations": "Conversations", @@ -624,12 +624,12 @@ "confirmations.block_from_group.message": "Are you sure you want to ban @{name} from the group?", "confirmations.cancel.confirm": "Discard", "confirmations.cancel.heading": "Discard post", - "confirmations.cancel.message": "Are you sure you want to cancel creating this post?", + "confirmations.cancel.message": "Are you sure you want to discard the currently composed post?", "confirmations.cancel_draft.heading": "Discard draft changes", - "confirmations.cancel_draft_editing.message": "Are you sure you want to cancel editing this draft post? All changes will be lost.", + "confirmations.cancel_draft_editing.message": "Are you sure you want to discard the changes to this draft post? All changes will be lost.", "confirmations.cancel_editing.confirm": "Cancel editing", "confirmations.cancel_editing.heading": "Cancel post editing", - "confirmations.cancel_editing.message": "Are you sure you want to cancel editing this post? All changes will be lost.", + "confirmations.cancel_editing.message": "Are you sure you want to discard the changes to this post? All changes will be lost.", "confirmations.cancel_editing.save_draft": "Save draft", "confirmations.delete.confirm": "Delete", "confirmations.delete.heading": "Delete post", @@ -1632,6 +1632,8 @@ "security.update_password.fail": "Update password failed.", "security.update_password.password_confirmation_no_match": "Passwords do not match.", "security.update_password.success": "Password successfully updated.", + "select.no_options": "No options available", + "select.placeholder": "Select", "select_bookmark_folder_modal.header_title": "Select folder", "settings.configure_mfa": "Configure MFA", "settings.edit_profile": "Edit profile", @@ -1852,13 +1854,14 @@ "url_privacy.redirect_links_mode.auto": "From URL", "url_privacy.redirect_links_mode.manual": "Specify manually", "url_privacy.redirect_links_mode.off": "Disabled", + "url_privacy.redirect_service_url.placeholder": "eg. https://proxy.example.org", "url_privacy.redirect_services.name": "{name}", "url_privacy.redirect_services.patterns": "Matches: {pattern}, eg. {services}, leave empty for no redirect", "url_privacy.redirect_services_update.fail": "Failed to update redirect services URL", "url_privacy.redirect_services_update.success": "Successfully updated redirect services", "url_privacy.redirect_services_url.hint": "URLs database in Farside-compatible format, eg. {url}", "url_privacy.redirect_services_url.label": "Redirect services URLs database address", - "url_privacy.redirect_services_url.placeholder": "eg. https://proxy.example.org", + "url_privacy.redirect_services_url.placeholder": "Rules URL", "url_privacy.rules_url.hint": "Rules database in ClearURLs-compatible format, eg. {url}", "url_privacy.rules_url.label": "URL cleaning rules database address", "url_privacy.rules_url.placeholder": "Rules URL", diff --git a/packages/pl-fe/src/modals/compose-modal.tsx b/packages/pl-fe/src/modals/compose-modal.tsx index b4a37e010..94502d059 100644 --- a/packages/pl-fe/src/modals/compose-modal.tsx +++ b/packages/pl-fe/src/modals/compose-modal.tsx @@ -47,10 +47,10 @@ const ComposeModal: React.FC = ({ onClose, c ? : , message: editedId - ? + ? : compose.draftId - ? - : , + ? + : , confirm: intl.formatMessage(editedId ? messages.cancelEditing : messages.confirm), onConfirm: () => { onClose('COMPOSE'); diff --git a/packages/pl-fe/src/pages/account-lists/directory.tsx b/packages/pl-fe/src/pages/account-lists/directory.tsx index f562fea71..62162eba0 100644 --- a/packages/pl-fe/src/pages/account-lists/directory.tsx +++ b/packages/pl-fe/src/pages/account-lists/directory.tsx @@ -26,7 +26,7 @@ import { useDirectory } from 'pl-fe/queries/accounts/use-directory'; import { shortNumberFormat } from 'pl-fe/utils/numbers'; const messages = defineMessages({ - title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, + title: { id: 'column.directory', defaultMessage: 'Profile directory' }, recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' }, newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' }, local: { id: 'directory.local', defaultMessage: 'From {domain} only' }, diff --git a/packages/pl-fe/src/pages/settings/auth-token-list.tsx b/packages/pl-fe/src/pages/settings/auth-token-list.tsx index 071c770f6..08e2b9203 100644 --- a/packages/pl-fe/src/pages/settings/auth-token-list.tsx +++ b/packages/pl-fe/src/pages/settings/auth-token-list.tsx @@ -18,7 +18,7 @@ import { useModalsActions } from 'pl-fe/stores/modals'; import type { OauthToken } from 'pl-api'; const messages = defineMessages({ - header: { id: 'column.tokens', defaultMessage: 'Sessions' }, + header: { id: 'column.tokens', defaultMessage: 'Active sessions' }, revoke: { id: 'security.tokens.revoke', defaultMessage: 'Revoke' }, revokeSessionHeading: { id: 'confirmations.revoke_session.heading', defaultMessage: 'Revoke current session' }, revokeSessionMessage: { id: 'confirmations.revoke_session.message', defaultMessage: 'You are about to revoke your current session. You will be signed out.' }, diff --git a/packages/pl-fe/src/pages/settings/domain-blocks.tsx b/packages/pl-fe/src/pages/settings/domain-blocks.tsx index 2eaddff0d..8e8f2f464 100644 --- a/packages/pl-fe/src/pages/settings/domain-blocks.tsx +++ b/packages/pl-fe/src/pages/settings/domain-blocks.tsx @@ -9,7 +9,7 @@ import Spinner from 'pl-fe/components/ui/spinner'; import { domainBlocksQueryOptions } from 'pl-fe/queries/settings/domain-blocks'; const messages = defineMessages({ - heading: { id: 'column.domain_blocks', defaultMessage: 'Hidden domains' }, + heading: { id: 'column.domain_blocks', defaultMessage: 'Domain blocks' }, unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, }); diff --git a/packages/pl-fe/src/pages/settings/migration.tsx b/packages/pl-fe/src/pages/settings/migration.tsx index 848052db8..6136a78ca 100644 --- a/packages/pl-fe/src/pages/settings/migration.tsx +++ b/packages/pl-fe/src/pages/settings/migration.tsx @@ -15,7 +15,7 @@ import { useInstance } from 'pl-fe/hooks/use-instance'; import toast from 'pl-fe/toast'; const messages = defineMessages({ - heading: { id: 'column.migration', defaultMessage: 'Account migration' }, + heading: { id: 'column.migration', defaultMessage: 'Move account' }, submit: { id: 'migration.submit', defaultMessage: 'Move followers' }, moveAccountSuccess: { id: 'migration.move_account.success', defaultMessage: 'Account successfully moved.' }, moveAccountFail: { id: 'migration.move_account.fail', defaultMessage: 'Account migration failed.' }, diff --git a/packages/pl-fe/src/pages/settings/privacy.tsx b/packages/pl-fe/src/pages/settings/privacy.tsx index d09f7a76a..535ded6d1 100644 --- a/packages/pl-fe/src/pages/settings/privacy.tsx +++ b/packages/pl-fe/src/pages/settings/privacy.tsx @@ -29,7 +29,7 @@ const messages = defineMessages({ redirectLinksModeAuto: { id: 'url_privacy.redirect_links_mode.auto', defaultMessage: 'From URL' }, redirectLinksModeManual: { id: 'url_privacy.redirect_links_mode.manual', defaultMessage: 'Specify manually' }, redirectServicesUrlPlaceholder: { id: 'url_privacy.redirect_services_url.placeholder', defaultMessage: 'Rules URL' }, - redirectServicePlaceholder: { id: 'url_privacy.redirect_services_url.placeholder', defaultMessage: 'eg. https://proxy.example.org' }, + redirectServicePlaceholder: { id: 'url_privacy.redirect_service_url.placeholder', defaultMessage: 'eg. https://proxy.example.org' }, }); const Privacy = () => { diff --git a/packages/pl-fe/src/pages/settings/settings.tsx b/packages/pl-fe/src/pages/settings/settings.tsx index ff29d9ddf..1b145c1fd 100644 --- a/packages/pl-fe/src/pages/settings/settings.tsx +++ b/packages/pl-fe/src/pages/settings/settings.tsx @@ -24,7 +24,7 @@ const messages = defineMessages({ domainBlocks: { id: 'column.domain_blocks', defaultMessage: 'Domain blocks' }, editProfile: { id: 'settings.edit_profile', defaultMessage: 'Edit profile' }, exportData: { id: 'column.export_data', defaultMessage: 'Export data' }, - filters: { id: 'column.filters', defaultMessage: 'Filters' }, + filters: { id: 'column.filters', defaultMessage: 'Muted words' }, importData: { id: 'column.import_data', defaultMessage: 'Import data' }, interactionPolicies: { id: 'column.interaction_policies', defaultMessage: 'Interaction policies' }, mfaDisabled: { id: 'mfa.disabled', defaultMessage: 'Disabled' }, diff --git a/packages/pl-fe/src/pages/timelines/home-timeline.tsx b/packages/pl-fe/src/pages/timelines/home-timeline.tsx index 67683fb51..2b5654bce 100644 --- a/packages/pl-fe/src/pages/timelines/home-timeline.tsx +++ b/packages/pl-fe/src/pages/timelines/home-timeline.tsx @@ -88,7 +88,7 @@ const HomeTimelinePage: React.FC = () => { values={{ public: ( - + ), }} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c031cccb4..2b26e469b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -365,8 +365,8 @@ importers: specifier: ^4.1.8 version: 4.2.0(react@19.2.3) react-intl: - specifier: ^7.0.4 - version: 7.1.11(react@19.2.3)(typescript@5.7.3) + specifier: ^8.0.10 + version: 8.0.10(@types/react@18.3.23)(react@19.2.3)(typescript@5.7.3) react-redux: specifier: ^9.0.4 version: 9.2.0(@types/react@18.3.23)(react@19.2.3)(redux@5.0.1) @@ -423,8 +423,8 @@ importers: version: 1.3.0(@types/react@18.3.23)(mutative@1.2.0)(react@19.2.3)(zustand@5.0.7(@types/react@18.3.23)(immer@10.1.1)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3))) devDependencies: '@formatjs/cli': - specifier: ^6.3.14 - version: 6.7.2(@vue/compiler-core@3.5.18) + specifier: ^6.9.0 + version: 6.9.0(@vue/compiler-core@3.5.18) '@jedmao/redux-mock-store': specifier: ^3.0.5 version: 3.0.5(redux@5.0.1) @@ -459,13 +459,13 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@types/react': - specifier: ^18.3.23 + specifier: ^18.3.18 version: 18.3.23 '@types/react-color': specifier: ^3.0.13 version: 3.0.13(@types/react@18.3.23) '@types/react-dom': - specifier: ^18.3.7 + specifier: ^18.3.5 version: 18.3.7(@types/react@18.3.23) '@types/react-router-dom': specifier: ^5.3.3 @@ -1660,17 +1660,17 @@ packages: '@fontsource/tajawal@5.2.6': resolution: {integrity: sha512-Wxml4z3f7wr7xNVMXwGIc2aJpyUOwJxkxX9lTJHh3eDPZVaLa/MkOz+HMUt3VWMah/xq0Xmn5pVhSbdYTb9R2A==} - '@formatjs/cli@6.7.2': - resolution: {integrity: sha512-714/ifbtq7CmOtcLVGjYZp5EX0vKclQt3XZ+4Oiz0lhrHWU1ObFTtX9sLS9dADGta1pgDtS4+A3YpjWMY26Spg==} + '@formatjs/cli@6.9.0': + resolution: {integrity: sha512-gYzzsYvff8RoIZZczepjd0z+lmrVMjBKaVaHg39GCOJfDvBNnS96kHGwHqRn2NfbOEv5eqYZQL5liYSXHgKqtQ==} engines: {node: '>= 16'} hasBin: true peerDependencies: '@glimmer/env': '*' '@glimmer/reference': '*' - '@glimmer/syntax': ^0.94.9 + '@glimmer/syntax': ^0.95.0 '@glimmer/validator': '*' '@vue/compiler-core': ^3.5.12 - content-tag: ^3.0.0 + content-tag: '4' ember-template-recast: ^6.1.5 vue: ^3.5.12 peerDependenciesMeta: @@ -1694,20 +1694,35 @@ packages: '@formatjs/ecma402-abstract@2.3.4': resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + '@formatjs/ecma402-abstract@3.0.7': + resolution: {integrity: sha512-U55Yulf37vBXN0C7gHm7hrxULVrcrhpQBcdLmIN2rpYpLfC5eIpa1JRX9efjU74gfzjK/MSmSG3Lxv3E4ZNZIw==} + '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + '@formatjs/fast-memoize@3.0.2': + resolution: {integrity: sha512-YFApUDWFmjpPwAE7VcY7PYVjm6JaLZOAo0UfCQj1/OGi/1QtduG9kIBHmVC551M6AI01qvuP5kjbDebrZOT4Vg==} + '@formatjs/icu-messageformat-parser@2.11.2': resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + '@formatjs/icu-messageformat-parser@3.2.1': + resolution: {integrity: sha512-DEECn8HEHtI4dvfKtTfvDOZ9nCTAJ2ESXGPRGKe4dkn/RE9w/G0NjgP/kFAQJbwIKWHo+BRxpee1bQKJ4lF6pg==} + '@formatjs/icu-skeleton-parser@1.8.14': resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + '@formatjs/icu-skeleton-parser@2.0.7': + resolution: {integrity: sha512-/LEeQ2gOU7ujm7LJk07OYYOpsOtIH/6ma78vTHvZNGZ6m0wn3gxQqU39HEpXZfez6aIhGh7Psde2H2ILj5wb0Q==} + '@formatjs/intl-localematcher@0.6.1': resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} - '@formatjs/intl@3.1.6': - resolution: {integrity: sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==} + '@formatjs/intl-localematcher@0.7.4': + resolution: {integrity: sha512-AWsSZupIBMU/y04Nj24CjohyNVyfItMJPxSzX5OJwedDEIbGLOHkPxCjAeLeiLF2dw4xmQA8psktdi9MaebBQw==} + + '@formatjs/intl@4.0.8': + resolution: {integrity: sha512-+tf/K6NPHe0X5e2xTl7zsIeBMv2/G1czennknmPbNDxBbeCrWKBSIQHv1Pd92Jnwv59BnXL1ajn18bParbGdpg==} peerDependencies: typescript: ^5.6.0 peerDependenciesMeta: @@ -4375,6 +4390,9 @@ packages: intl-messageformat@10.7.16: resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + intl-messageformat@11.0.8: + resolution: {integrity: sha512-q2Md8nj28CSkXxkBaAOWhTjQAdea24fpcZxqR1pMsCwzDYLQF68iOOPNTLgFFF+HKJKNUiJ+Mkjp0zXvG88UFA==} + intl-pluralrules@2.0.1: resolution: {integrity: sha512-astxTLzIdXPeN0K9Rumi6LfMpm3rvNO0iJE+h/k8Kr/is+wPbRe4ikyDjlLr6VTh/mEfNv8RjN+gu3KwDiuhqg==} @@ -5543,9 +5561,10 @@ packages: peerDependencies: react: 16.8 - 19 - react-intl@7.1.11: - resolution: {integrity: sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==} + react-intl@8.0.10: + resolution: {integrity: sha512-+8L+/kClosP/z9B1lgVKyX6f4vs1aEQXFIO4l2/xSjapzXnJI/TJ50qVTZrn1idJTtO9MqlmZn64b1JlYtMHFg==} peerDependencies: + '@types/react': ^18.3.18 react: 16 || 17 || 18 || 19 typescript: ^5.6.0 peerDependenciesMeta: @@ -8043,7 +8062,7 @@ snapshots: '@fontsource/tajawal@5.2.6': {} - '@formatjs/cli@6.7.2(@vue/compiler-core@3.5.18)': + '@formatjs/cli@6.9.0(@vue/compiler-core@3.5.18)': optionalDependencies: '@vue/compiler-core': 3.5.18 @@ -8054,31 +8073,58 @@ snapshots: decimal.js: 10.6.0 tslib: 2.8.1 + '@formatjs/ecma402-abstract@3.0.7': + dependencies: + '@formatjs/fast-memoize': 3.0.2 + '@formatjs/intl-localematcher': 0.7.4 + decimal.js: 10.6.0 + tslib: 2.8.1 + '@formatjs/fast-memoize@2.2.7': dependencies: tslib: 2.8.1 + '@formatjs/fast-memoize@3.0.2': + dependencies: + tslib: 2.8.1 + '@formatjs/icu-messageformat-parser@2.11.2': dependencies: '@formatjs/ecma402-abstract': 2.3.4 '@formatjs/icu-skeleton-parser': 1.8.14 tslib: 2.8.1 + '@formatjs/icu-messageformat-parser@3.2.1': + dependencies: + '@formatjs/ecma402-abstract': 3.0.7 + '@formatjs/icu-skeleton-parser': 2.0.7 + tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@1.8.14': dependencies: '@formatjs/ecma402-abstract': 2.3.4 tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@2.0.7': + dependencies: + '@formatjs/ecma402-abstract': 3.0.7 + tslib: 2.8.1 + '@formatjs/intl-localematcher@0.6.1': dependencies: tslib: 2.8.1 - '@formatjs/intl@3.1.6(typescript@5.7.3)': + '@formatjs/intl-localematcher@0.7.4': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 - intl-messageformat: 10.7.16 + '@formatjs/fast-memoize': 3.0.2 + tslib: 2.8.1 + + '@formatjs/intl@4.0.8(typescript@5.7.3)': + dependencies: + '@formatjs/ecma402-abstract': 3.0.7 + '@formatjs/fast-memoize': 3.0.2 + '@formatjs/icu-messageformat-parser': 3.2.1 + intl-messageformat: 11.0.8 tslib: 2.8.1 optionalDependencies: typescript: 5.7.3 @@ -11394,6 +11440,13 @@ snapshots: '@formatjs/icu-messageformat-parser': 2.11.2 tslib: 2.8.1 + intl-messageformat@11.0.8: + dependencies: + '@formatjs/ecma402-abstract': 3.0.7 + '@formatjs/fast-memoize': 3.0.2 + '@formatjs/icu-messageformat-parser': 3.2.1 + tslib: 2.8.1 + intl-pluralrules@2.0.1: {} invariant@2.2.4: @@ -12527,15 +12580,15 @@ snapshots: react: 19.2.3 react-from-dom: 0.7.5(react@19.2.3) - react-intl@7.1.11(react@19.2.3)(typescript@5.7.3): + react-intl@8.0.10(@types/react@18.3.23)(react@19.2.3)(typescript@5.7.3): dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-messageformat-parser': 2.11.2 - '@formatjs/intl': 3.1.6(typescript@5.7.3) + '@formatjs/ecma402-abstract': 3.0.7 + '@formatjs/icu-messageformat-parser': 3.2.1 + '@formatjs/intl': 4.0.8(typescript@5.7.3) '@types/hoist-non-react-statics': 3.3.7(@types/react@18.3.23) '@types/react': 18.3.23 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.7.16 + intl-messageformat: 11.0.8 react: 19.2.3 tslib: 2.8.1 optionalDependencies: