From 92f4b2971f6a06ff932a055532ae9e93fd5e3837 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 18 Oct 2021 17:04:47 +0200 Subject: [PATCH] Design system TextField : ajoute les messages d'erreur et le composant SearchField --- mon-entreprise/package.json | 3 + .../conversation/select/SelectCommune.tsx | 26 +-- .../source/design-system/field/DateField.tsx | 0 .../design-system/field/SearchField.tsx | 50 ++++++ .../source/design-system/field/TextField.tsx | 158 ++++++++---------- .../source/design-system/field/index.ts | 1 + .../pages/Gérer/DemandeMobilite/index.tsx | 1 + yarn.lock | 127 +++++++++++++- 8 files changed, 255 insertions(+), 111 deletions(-) create mode 100644 mon-entreprise/source/design-system/field/DateField.tsx create mode 100644 mon-entreprise/source/design-system/field/SearchField.tsx diff --git a/mon-entreprise/package.json b/mon-entreprise/package.json index eaef609b7..6f2b5f4f4 100644 --- a/mon-entreprise/package.json +++ b/mon-entreprise/package.json @@ -25,6 +25,7 @@ "@babel/preset-env": "^7.9.5", "@babel/preset-react": "^7.9.4", "@babel/preset-typescript": "^7.9.0", + "@react-types/searchfield": "^3.1.2", "@types/cheerio": "^0.22.18", "@types/js-yaml": "^3.12.2", "@types/mocha": "^8.2.2", @@ -63,8 +64,10 @@ }, "dependencies": { "@babel/runtime": "^7.3.4", + "@react-aria/searchfield": "^3.2.0", "@react-aria/textfield": "^3.4.0", "@react-pdf/renderer": "^1.6.10", + "@react-stately/searchfield": "^3.1.3", "@rehooks/local-storage": "^2.1.1", "@sentry/react": "^6.3.5", "@sentry/tracing": "^6.3.5", diff --git a/mon-entreprise/source/components/conversation/select/SelectCommune.tsx b/mon-entreprise/source/components/conversation/select/SelectCommune.tsx index fa7647a00..2f7d8126c 100644 --- a/mon-entreprise/source/components/conversation/select/SelectCommune.tsx +++ b/mon-entreprise/source/components/conversation/select/SelectCommune.tsx @@ -3,6 +3,7 @@ import React, { useCallback, useMemo, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' import { debounce } from '../../../utils' +import { SearchField } from 'DesignSystem/field' import { InputProps } from '../RuleInput' export type ApiCommuneJson = { @@ -140,15 +141,15 @@ export default function Select({ onChange, value, id, missing }: InputProps) { }, [searchResults, focusedElem, noResult, handleSubmit]) const handleChange = useCallback( - (e: React.ChangeEvent) => { + (value: string) => { setFocusedElem(0) - setName(e.target.value) - if (e.target.value.length < 2) { + setName(value) + if (value.length < 2) { setSearchResults(null) return } setLoadingState(true) - debouncedHandleSearch(e.target.value) + debouncedHandleSearch(value) }, [debouncedHandleSearch] ) @@ -183,32 +184,21 @@ export default function Select({ onChange, value, id, missing }: InputProps) { return (
- Cette commune n'existe pas} type="search" id={id} aria-autocomplete="list" onBlur={submitFocusedElem} aria-readonly="true" - css={noResult ? 'border-color: firebrick !important' : ''} className="ui__" onKeyDown={handleKeyDown} aria-controls="liste-commune" - placeholder={t('Commune ou code postal')} + label={t('Commune ou code postal')} value={name} onChange={handleChange} /> - {noResult && ( -

- Cette commune n'existe pas -

- )} {!!searchResults && ( diff --git a/mon-entreprise/source/design-system/field/DateField.tsx b/mon-entreprise/source/design-system/field/DateField.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/mon-entreprise/source/design-system/field/SearchField.tsx b/mon-entreprise/source/design-system/field/SearchField.tsx new file mode 100644 index 000000000..0e067f396 --- /dev/null +++ b/mon-entreprise/source/design-system/field/SearchField.tsx @@ -0,0 +1,50 @@ +import { InputHTMLAttributes, useRef } from 'react' +import { useSearchField } from '@react-aria/searchfield' +import { AriaSearchFieldProps } from '@react-types/searchfield' +import { useSearchFieldState } from '@react-stately/searchfield' +import { + StyledContainer, + StyledDescription, + StyledInput, + StyledInputContainer, + StyledLabel, +} from './TextField' +import styled from 'styled-components' + +export default function SearchField(props: AriaSearchFieldProps) { + const state = useSearchFieldState(props) + const ref = useRef(null) + const { labelProps, inputProps, descriptionProps, clearButtonProps } = + useSearchField(props, state, ref) + + return ( + + + )} + ref={ref} + /> + {props.label} + {state.value !== '' && ( + × + )} + + {props.description && ( + + {props.description} + + )} + + ) +} + +const StyledClearButton = styled.button` + position: absolute; + right: 0; + font-size: 2rem; + line-height: 2rem; + height: ${({ theme }) => theme.spacings.xxxl}; + padding: ${({ theme }) => `${theme.spacings.md} ${theme.spacings.sm}`}; +` diff --git a/mon-entreprise/source/design-system/field/TextField.tsx b/mon-entreprise/source/design-system/field/TextField.tsx index 585454e27..f3080b95c 100644 --- a/mon-entreprise/source/design-system/field/TextField.tsx +++ b/mon-entreprise/source/design-system/field/TextField.tsx @@ -1,67 +1,46 @@ import { InputHTMLAttributes, useRef } from 'react' -import styled from 'styled-components' +import styled, { css } from 'styled-components' import { useTextField, AriaTextFieldOptions } from '@react-aria/textfield' import { ExtraSmallBody } from 'DesignSystem/typography/paragraphs' +const LABEL_HEIGHT = '1rem' + export default function TextField(props: AriaTextFieldOptions) { const ref = useRef(null) - const { labelProps, inputProps, descriptionProps } = useTextField( - { ...props, inputElementType: 'input' }, - ref - ) + const { labelProps, inputProps, descriptionProps, errorMessageProps } = + useTextField({ ...props, inputElementType: 'input' }, ref) return ( - <> - + + )} ref={ref} /> {props.label} + {props.errorMessage && ( + + {props.errorMessage} + + )} {props.description && ( - + {props.description} )} - + ) } -const labelHeight = '1rem' -const StyledInputContainer = styled.div` - border-radius: ${({ theme }) => theme.box.borderRadius}; - border: ${({ theme }) => theme.box.borderWidth} solid - ${({ theme }) => theme.colors.extended.grey[500]}; - outline: transparent solid 1px; - position: relative; - flex-direction: column; - transition: outline-color, border-color 0.3s; - height: ${({ theme }) => theme.spacings.xxxl}; - - :focus-within { - outline-color: ${({ theme }) => theme.colors.bases.primary[600]}; - border-color: ${({ theme }) => theme.colors.bases.primary[600]}; - } - - :focus-within label { - color: ${({ theme }) => theme.colors.bases.primary[800]}; - } - - :focus-within + p { - color: ${({ theme }) => theme.colors.bases.primary[800]}; - } - - input:not(:focus):placeholder-shown + label { - font-size: 1rem; - line-height: 1.5rem; - pointer-events: none; - top: 50%; - transform: translateY(-50%); - } +export const StyledContainer = styled.div` + width: 100%; + min-width: fit-content; + margin-bottom: ${({ theme }) => theme.spacings.lg}; ` - -const StyledInput = styled.input` +export const StyledInput = styled.input` font-size: 1rem; line-height: 1.5rem; border: none; @@ -72,15 +51,16 @@ const StyledInput = styled.input` height: 100%; outline: none; position: absolute; - padding: calc(${labelHeight} + ${({ theme }) => theme.spacings.xs}) + padding: calc(${LABEL_HEIGHT} + ${({ theme }) => theme.spacings.xs}) ${({ theme }) => theme.spacings.sm} ${({ theme }) => theme.spacings.xs}; ` -const StyledLabel = styled.label` +export const StyledLabel = styled.label` top: 0%; transform: translateY(0%); + font-size: 0.75rem; - line-height: ${labelHeight}; + line-height: ${LABEL_HEIGHT}; font-family: ${({ theme }) => theme.fonts.main}; padding: ${({ theme }) => theme.spacings.xs} ${({ theme }) => theme.spacings.sm}; @@ -89,56 +69,56 @@ const StyledLabel = styled.label` transition: all 0.1s; ` -const StyledDescription = styled(ExtraSmallBody)` +export const StyledDescription = styled(ExtraSmallBody)` padding: ${({ theme }) => theme.spacings.xxs} ${({ theme }) => theme.spacings.sm}; - will-change: feColorMatrix; + will-change: color; transition: color 0.2s; ` -// /* Type=Input text, Legend=False, Status=Default */ -// /* Auto Layout */ -// display: flex; -// flex-direction: column; -// align-items: flex-start; -// padding: 20px 16px; +const StyledErrorMessage = styled(StyledDescription)` + color: ${({ theme }) => theme.colors.extended.error[400]} !important; +` -// position: absolute; -// width: 360px; -// height: 64px; -// right: 1634px; -// bottom: 1055px; +export const StyledInputContainer = styled.div<{ error: boolean }>` + border-radius: ${({ theme }) => theme.box.borderRadius}; + border: ${({ theme }) => + `${theme.box.borderWidth} solid ${theme.colors.extended.grey[500]}`}; + outline: transparent solid 1px; + position: relative; + flex-direction: column; + transition: all 0.2s; + height: ${({ theme }) => theme.spacings.xxxl}; + :focus-within { + outline-color: ${({ theme, error }) => + error + ? theme.colors.extended.error[400] + : theme.colors.bases.primary[600]}; + } + :focus-within ${StyledLabel} { + color: ${({ theme }) => theme.colors.bases.primary[800]}; + } -// /* Base/UR White */ -// background: #FFFFFF; -// /* Base/UR Grey N°5 */ -// border: 1px solid #6C757D; -// box-sizing: border-box; -// border-radius: 6px; + :focus-within + ${StyledDescription} { + color: ${({ theme }) => theme.colors.bases.primary[800]}; + } -// /* Label */ + input:not(:focus):placeholder-shown + ${StyledLabel} { + font-size: 1rem; + line-height: 1.5rem; + pointer-events: none; + top: 50%; + transform: translateY(-50%); + } -// position: static; -// left: 16px; -// right: 16px; -// top: 20px; -// bottom: 20px; - -// /* Form/Label_inactive */ -// font-family: Roboto; -// font-style: normal; -// font-weight: normal; -// font-size: 16px; -// line-height: 24px; -// /* identical to box height, or 150% */ -// text-align: justify; - -// /* Base/UR Grey N°7 */ -// color: #212529; - -// /* Inside Auto Layout */ -// flex: none; -// order: 0; -// align-self: stretch; -// flex-grow: 0; -// margin: 10px 0px; + ${({ theme, error }) => + error && + css` + && { + border-color: ${theme.colors.extended.error[400]}; + } + &&& label { + color: ${theme.colors.extended.error[400]}; + } + `} +` diff --git a/mon-entreprise/source/design-system/field/index.ts b/mon-entreprise/source/design-system/field/index.ts index fb5f57905..2297bc93b 100644 --- a/mon-entreprise/source/design-system/field/index.ts +++ b/mon-entreprise/source/design-system/field/index.ts @@ -1 +1,2 @@ export { default as TextField } from './TextField' +export { default as SearchField } from './SearchField' diff --git a/mon-entreprise/source/pages/Gérer/DemandeMobilite/index.tsx b/mon-entreprise/source/pages/Gérer/DemandeMobilite/index.tsx index 2d709d7fa..175e74291 100644 --- a/mon-entreprise/source/pages/Gérer/DemandeMobilite/index.tsx +++ b/mon-entreprise/source/pages/Gérer/DemandeMobilite/index.tsx @@ -199,6 +199,7 @@ function FormulairePublicodes() { )} onChange(dottedName, value)} /> diff --git a/yarn.lock b/yarn.lock index bf072eecc..b78361ca8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2714,6 +2714,45 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@formatjs/ecma402-abstract@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz#f51b9167535c9463113c24644de90262aa5d31a7" + integrity sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.21" + tslib "^2.1.0" + +"@formatjs/fast-memoize@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz#1123bfcc5d21d761f15d8b1c32d10e1b6530355d" + integrity sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.13.tgz#fcd7816b3d0b799daf20ff9e5e0fe81d3618276e" + integrity sha512-dIdcNnuJj1V+DnXQUjJTA+uES/UCpxLPbIA8R1wSrWY/yCgv9N1beSY1lTHrhcG0XC++ShP+AEqqVV/zX3BMZg== + dependencies: + "@formatjs/ecma402-abstract" "1.10.0" + "@formatjs/icu-skeleton-parser" "1.3.0" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.0.tgz#fedf604bf788a587b23c9a03ec148c1f2c3177f7" + integrity sha512-ORUHdglLuE0Vvg3KlxeeguDq2ErUlCWmIU9EmQAhqwhtRwf78nNy2WAJ9qvxzSsp4dAv1CJ9AoS43RdY8JTVaA== + dependencies: + "@formatjs/ecma402-abstract" "1.10.0" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.21": + version "0.2.21" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz#39ef33d701fe8084f3d693cd3ff7cbe03cdd3a49" + integrity sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg== + dependencies: + tslib "^2.1.0" + "@hapi/address@^2.1.2": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -2757,6 +2796,21 @@ resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@internationalized/message@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.0.2.tgz#c3db2b6b7f75af815819f77da11f8424381416e3" + integrity sha512-ZZ8FQDCsri3vUB2mfDD76Vbf97DH361AiZUXKHV4BqwCtYyaNYiZqIr8KXrcMCxJvrIYVQLSn8+jeIQRO3bvtw== + dependencies: + "@babel/runtime" "^7.6.2" + intl-messageformat "^9.6.12" + +"@internationalized/number@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.0.3.tgz#d29003dffdff54ca6f2287ec0cb77ff3d045478f" + integrity sha512-ewFoVvsxSyd9QZnknvOWPjirYqdMQhXTeDhJg3hM6C/FeZt0banpGH1nZ0SGMZXHz8NK9uAa2KVIq+jqAIOg4w== + dependencies: + "@babel/runtime" "^7.6.2" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2998,6 +3052,18 @@ "@react-types/shared" "^3.9.0" clsx "^1.1.1" +"@react-aria/i18n@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.3.2.tgz#891902938333c6ab5491b7acb7581f8567045dbc" + integrity sha512-a4AptbWLPVMJfjPdyW60TFtT4gvKAputx9YaUrIywoV/5p900AcOOc3uuL43+vuCKBzMkGUeTa1a4eL1HstDUA== + dependencies: + "@babel/runtime" "^7.6.2" + "@internationalized/message" "^3.0.2" + "@internationalized/number" "^3.0.2" + "@react-aria/ssr" "^3.0.3" + "@react-aria/utils" "^3.8.2" + "@react-types/shared" "^3.8.0" + "@react-aria/interactions@^3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.6.0.tgz#63c16e6179e8ae38221e26256d9a7639d7f9b24e" @@ -3017,7 +3083,22 @@ "@react-types/label" "^3.5.0" "@react-types/shared" "^3.9.0" -"@react-aria/ssr@^3.1.0": +"@react-aria/searchfield@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.2.0.tgz#f0f8609c2e3a7ed300209f6aa01f6d782c131f81" + integrity sha512-uD3wSsvsZYW8LJ1hnt/5aWwcqmNT1Qorio2PizfvY7jKC4FytU/wjxxI8p8mRRtffltqldgTPgakAwW3KYPpAw== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-aria/i18n" "^3.3.2" + "@react-aria/interactions" "^3.6.0" + "@react-aria/textfield" "^3.4.0" + "@react-aria/utils" "^3.9.0" + "@react-stately/searchfield" "^3.1.3" + "@react-types/button" "^3.4.1" + "@react-types/searchfield" "^3.1.2" + "@react-types/shared" "^3.9.0" + +"@react-aria/ssr@^3.0.3", "@react-aria/ssr@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.1.0.tgz#b7163e6224725c30121932a8d1422ef91d1fab22" integrity sha512-RxqQKmE8sO7TGdrcSlHTcVzMP450hqowtBSd2bBS9oPlcokVkaGq28c3Rwa8ty5ctw4EBCjXqjP7xdcKMGDzug== @@ -3036,7 +3117,7 @@ "@react-types/shared" "^3.9.0" "@react-types/textfield" "^3.3.0" -"@react-aria/utils@^3.9.0": +"@react-aria/utils@^3.8.2", "@react-aria/utils@^3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.9.0.tgz#c5446f807091a744311d4d559fa8a42e7448824d" integrity sha512-P0dEOMHGHHJ5KC8iCpaMxAtgdUdeISAm4FZnmoD5fK3JxlKEC046hUxlad83RkNOBZkT2dDvF4HeDCUqdMWHKQ== @@ -3114,6 +3195,16 @@ dependencies: unicode-trie "^0.3.0" +"@react-stately/searchfield@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.1.3.tgz#c2fe18be4ca8478c3bb3fdebc7e9e4a14ebfae07" + integrity sha512-IIsgZ87RgdSTLcXB3U+EdgbtAXlpw50G9fDYhwpjIaiZQ60RsaEz0mo+s1+oapXGudCFWyQYNR+nqF7jzNKxwg== + dependencies: + "@babel/runtime" "^7.6.2" + "@react-stately/utils" "^3.2.2" + "@react-types/searchfield" "^3.1.2" + "@react-types/shared" "^3.8.0" + "@react-stately/utils@^3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.2.2.tgz#468eafa60740c6b0b847a368215dfaa55e87f505" @@ -3121,6 +3212,13 @@ dependencies: "@babel/runtime" "^7.6.2" +"@react-types/button@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.4.1.tgz#715ac9d4997c79233be4d9020b58f85936b8252b" + integrity sha512-B54M84LxdEppwjXNlkBEJyMfe9fd+bvFV7R6+NJvupGrZm/LuFNYjFcHk7yjMKWTdWm6DbpIuQz54n5qTW7Vlg== + dependencies: + "@react-types/shared" "^3.8.0" + "@react-types/label@^3.5.0": version "3.5.0" resolved "https://registry.yarnpkg.com/@react-types/label/-/label-3.5.0.tgz#c7093871f42c62e1b5523f61a0856a2f58d4cf2a" @@ -3128,12 +3226,19 @@ dependencies: "@react-types/shared" "^3.9.0" -"@react-types/shared@^3.9.0": +"@react-types/searchfield@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.1.2.tgz#184770b67f1fad57a6024ad00b7e42cf934ed54b" + integrity sha512-lIyXEzoS/XXmddAvgZk/a8/8qAkVt5XbUrX7CrpZOiwqIPsVDI2bDYiv7N9GdS0pMeSyu1X9mXCnJfvzu/Dkow== + dependencies: + "@react-types/textfield" "^3.2.3" + +"@react-types/shared@^3.8.0", "@react-types/shared@^3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.9.0.tgz#d834f3e6e2c992089192f3c83fb7963e3a6f5207" integrity sha512-YYksINfR6q92P10AhPEGo47Hd7oz1hrnZ6Vx8Gsrq62IbqDdv1XOTzPBaj17Z1ymNY2pitLUSEXsLmozt4wxxQ== -"@react-types/textfield@^3.3.0": +"@react-types/textfield@^3.2.3", "@react-types/textfield@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.3.0.tgz#07a447fda327df4843e7d36cbd00f87f8a73e725" integrity sha512-lOf0tx3c3dVaomH/uvKpOKFVTXQ232kLnMhOJTtj97JDX7fTr3SNhDUV0G8Zf4M0vr+l+xkTrJkywYE23rzliw== @@ -9791,6 +9896,15 @@ intl-locales-supported@^1.0.0: resolved "https://registry.yarnpkg.com/intl-locales-supported/-/intl-locales-supported-1.8.12.tgz#bbd83475a1cda61dc026309ca61f64c450af8ccb" integrity sha512-FJPl7p1LYO/C+LpwlDcvVpq7AeFTdFgwnq1JjdNYKjb51xkIxssXRR8LaA0fJFogjwRRztqw1ahgSJMSZsSFdw== +intl-messageformat@^9.6.12: + version "9.9.3" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.9.3.tgz#bf577b3a78c38f6cb81dda3952390df9be5be01d" + integrity sha512-YeXTVG1QAfDySO/gbpIrnMw3sKZvmNljahaTWFSGWNs0cNtR6vzwwvg6tzlda4buOw7xzJU3DgLm+skyMC85ow== + dependencies: + "@formatjs/fast-memoize" "1.2.0" + "@formatjs/icu-messageformat-parser" "2.0.13" + tslib "^2.1.0" + intl@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde" @@ -15962,6 +16076,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"