diff --git a/frontend/package.json b/frontend/package.json index 1b2c75a21..4691c6b64 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -67,7 +67,7 @@ "react-dom": "^18.2.0", "react-easyfullscreen": "^1.1.1", "react-infinite-scroll-component": "6.1.0", - "react-inlinesvg": "^3.0.1", + "react-inlinesvg": "^3.0.2", "react-intl": "^6.2.1", "react-leaflet": "3.1.0", "react-leaflet-markercluster": "^3.0.0-rc1", @@ -79,6 +79,7 @@ "store": "^2.0.12", "striptags": "^3.2.0", "styled-components": "^5.3.6", + "svgo": "^3.0.2", "tailwind-merge": "^1.12.0", "tailwindcss": "^3.3.1", "ts-node": "^10.9.1", diff --git a/frontend/src/components/ActivitySearchFilter/ActivityButton/ActivityButton.tsx b/frontend/src/components/ActivitySearchFilter/ActivityButton/ActivityButton.tsx index f609aaf53..9ff43e363 100644 --- a/frontend/src/components/ActivitySearchFilter/ActivityButton/ActivityButton.tsx +++ b/frontend/src/components/ActivitySearchFilter/ActivityButton/ActivityButton.tsx @@ -1,8 +1,7 @@ import React from 'react'; import SVG from 'react-inlinesvg'; -import styled from 'styled-components'; -import { colorPalette } from 'stylesheet'; +import { optimizeAndDefineColor } from 'stylesheet'; import { Link } from 'components/Link'; interface Props { @@ -13,19 +12,12 @@ interface Props { export const ActivityButton: React.FC = ({ iconUrl, href, label }) => { return ( - - - - - {label} - - + + + {label} ); }; - -const FilledSvg = styled(SVG)` - & * { - fill: ${colorPalette.home.activity.color} !important; - } -`; diff --git a/frontend/src/components/CardIcon/CardIcon.tsx b/frontend/src/components/CardIcon/CardIcon.tsx index 71263c413..580a5c41b 100644 --- a/frontend/src/components/CardIcon/CardIcon.tsx +++ b/frontend/src/components/CardIcon/CardIcon.tsx @@ -1,4 +1,4 @@ -import { colorPalette, fillSvgWithColor } from 'stylesheet'; +import { optimizeAndDefineColor } from 'stylesheet'; import SVG from 'react-inlinesvg'; import styled from 'styled-components'; import Image from 'next/image'; @@ -35,8 +35,8 @@ const Icon: React.FC = ({ iconUri = '', className = '', color }) => { return ( ); } diff --git a/frontend/src/components/Information/RemoteIconInformation/index.tsx b/frontend/src/components/Information/RemoteIconInformation/index.tsx index f1d6d7647..df8f68250 100644 --- a/frontend/src/components/Information/RemoteIconInformation/index.tsx +++ b/frontend/src/components/Information/RemoteIconInformation/index.tsx @@ -1,6 +1,7 @@ import Image from 'next/image'; import SVG from 'react-inlinesvg'; +import { optimizeAndDefineColor } from 'stylesheet'; import { Information } from '../BaseInformation'; export interface Props { @@ -15,7 +16,7 @@ export interface Props { export const RemoteIconInformation: React.FC = ({ iconUri, ...props }) => { let icon = null; if (RegExp(/(.*).svg/).test(iconUri)) { - icon = ; + icon = ; } else if (typeof iconUri === 'string' && iconUri.length) { icon = ( = ({ const InformationDeskIcon: React.FC<{ pictogramUri: string }> = ({ pictogramUri }) => { if (RegExp(/(.*).svg/).test(pictogramUri)) { - return ; + return ; } return ( = ({ const LabelIcon: React.FC<{ pictogramUri: string }> = ({ pictogramUri }) => { if (RegExp(/(.*).svg/).test(pictogramUri)) { - return ; + return ( + + ); } return ( = ({ pictogramUri }) => {
); diff --git a/frontend/src/components/pages/details/components/DetailsTopIcons/DetailsTopIcons.tsx b/frontend/src/components/pages/details/components/DetailsTopIcons/DetailsTopIcons.tsx index 2d13663d4..2209c1fec 100644 --- a/frontend/src/components/pages/details/components/DetailsTopIcons/DetailsTopIcons.tsx +++ b/frontend/src/components/pages/details/components/DetailsTopIcons/DetailsTopIcons.tsx @@ -3,7 +3,7 @@ import getActivityColor from 'components/pages/search/components/ResultCard/getA import { Activity } from 'modules/activities/interface'; import Image from 'next/image'; import SVG from 'react-inlinesvg'; -import { colorPalette, fillSvgWithColor } from 'stylesheet'; +import { optimizeAndDefineColor } from 'stylesheet'; import { Details } from '../../../../../modules/details/interface'; import { OutdoorCourseDetails } from '../../../../../modules/outdoorCourse/interface'; import { OutdoorSiteDetails } from '../../../../../modules/outdoorSite/interface'; @@ -33,7 +33,9 @@ const Icon: React.FC = ({ src = '', ...props }) => { return null; } if (RegExp(/(.*).svg/).test(src)) { - return ; + return ( + + ); } return ; }; diff --git a/frontend/src/components/pages/home/components/HomeSection/HomeSection.tsx b/frontend/src/components/pages/home/components/HomeSection/HomeSection.tsx index 372394bed..a8912fd39 100644 --- a/frontend/src/components/pages/home/components/HomeSection/HomeSection.tsx +++ b/frontend/src/components/pages/home/components/HomeSection/HomeSection.tsx @@ -4,7 +4,7 @@ import { getHoverId } from 'components/pages/search/utils'; import { ActivitySuggestion } from 'modules/activitySuggestions/interface'; import SVG from 'react-inlinesvg'; import styled from 'styled-components'; -import { colorPalette, fillSvgWithColor } from 'stylesheet'; +import { optimizeAndDefineColor } from 'stylesheet'; export interface HomeSectionProps { title: string; @@ -21,7 +21,7 @@ export const HomeSection: React.FC = ({ title, iconUrl, result > {title} diff --git a/frontend/src/components/pages/search/components/FilterBar/Field.tsx b/frontend/src/components/pages/search/components/FilterBar/Field.tsx index 9da8f1e43..ae623c760 100644 --- a/frontend/src/components/pages/search/components/FilterBar/Field.tsx +++ b/frontend/src/components/pages/search/components/FilterBar/Field.tsx @@ -1,8 +1,7 @@ import React from 'react'; import SVG from 'react-inlinesvg'; import { useIntl } from 'react-intl'; -import styled from 'styled-components'; -import { colorPalette } from 'stylesheet'; +import { optimizeAndDefineColor } from 'stylesheet'; import { cn } from 'services/utils/cn'; import { FilterState, Option } from '../../../../../modules/filters/interface'; @@ -12,6 +11,24 @@ interface Props { hideLabel?: boolean; } +interface IconProps { + option: Option; + isSelected: boolean; +} + +const Icon: React.FC = ({ option, isSelected }) => { + if (option.pictogramUrl === undefined) { + return null; + } + return ( + + ); +}; + const Field: React.FC = ({ filterState, onSelect, hideLabel }) => { const intl = useIntl(); @@ -31,17 +48,6 @@ const Field: React.FC = ({ filterState, onSelect, hideLabel }) => { } }; - const getIcon = (option: Option, isSelected: boolean): React.ReactElement | null => { - if (option.pictogramUrl !== undefined) - return isSelected ? ( - - ) : ( - - ); - - return null; - }; - return (
{hideLabel !== true && ( @@ -67,7 +73,7 @@ const Field: React.FC = ({ filterState, onSelect, hideLabel }) => { - {getIcon(option, Boolean(selectedOption))} + { option.translatedKey !== undefined ? intl.formatMessage({ id: option.translatedKey }) @@ -82,24 +88,4 @@ const Field: React.FC = ({ filterState, onSelect, hideLabel }) => { ); }; -const FilledSvg = styled(SVG)` - height: 24px; - width: 24px; - margin-right: 10px; - - & * { - fill: ${colorPalette.home.activity.color} !important; - } -`; - -const FilledSvgActive = styled(SVG)` - height: 24px; - width: 24px; - margin-right: 10px; - - & * { - fill: ${colorPalette.primary1} !important; - } -`; - export default Field; diff --git a/frontend/src/stylesheet.ts b/frontend/src/stylesheet.ts index d029760f8..e3060d80d 100644 --- a/frontend/src/stylesheet.ts +++ b/frontend/src/stylesheet.ts @@ -1,4 +1,5 @@ import { css, FlattenSimpleInterpolation } from 'styled-components'; +import { optimize } from 'svgo/lib/svgo'; import tailwindConfig from '../tailwind.config'; /** @@ -196,8 +197,41 @@ export const scrollBar = { border-radius: ${getSpacing(2)}; `, } as const; +export const optimizeSVG = (svg: string): string => { + const { data } = optimize(svg, { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + inlineStyles: { + onlyMatchedOnce: false, + }, + removeViewBox: false, + }, + }, + }, + { + name: 'convertStyleToAttrs', + }, + ], + }); + return data; +}; + +export const optimizeAndDefineColor = + (color = 'currentColor') => + (svg: string): string => { + const optimizedSVG = optimizeSVG(svg); + + const svgNodesWithoutFillOrStrokeAttributes = /<(?!svg|g|\/)(?![^>]*\b(fill|stroke)\b)[^>]*>/g; -export const fillSvgWithColor = - (color: string) => - (svg: string): string => - svg.replace(/fill:.*?;/g, `fill: ${color};`); + return optimizedSVG + .replace(svgNodesWithoutFillOrStrokeAttributes, (match, p1, offset, string) => { + if (offset > 0) { + return match.replace('/>', `fill="${color}"/>`); + } + return string; + }) + .replace(/(fill|stroke)="(?!none|transparent).*?"/gi, `$1="${color}"`); + }; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 73b74d8a4..5aea03aa8 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2661,6 +2661,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@tsconfig/node10@^1.0.7": version "1.0.8" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" @@ -3774,6 +3779,11 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4287,6 +4297,11 @@ commander@^6.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -4469,6 +4484,17 @@ css-color-names@0.0.4: resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-shorthand-properties@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz#1c808e63553c283f289f2dd56fcee8f3337bd935" @@ -4483,6 +4509,22 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" +css-tree@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + css-values@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/css-values/-/css-values-0.1.0.tgz#128b7ce103d4dc027a814a5d5995c54781d7b4c6" @@ -4492,6 +4534,11 @@ css-values@^0.1.0: ends-with "^0.2.0" postcss-value-parser "^3.3.0" +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -4512,6 +4559,13 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -4849,6 +4903,15 @@ dom-serializer@^1.0.1: domhandler "^3.0.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -4864,6 +4927,11 @@ domelementtype@^2.2.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + domexception@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" @@ -4899,6 +4967,13 @@ domhandler@^4.0.0: dependencies: domelementtype "^2.1.0" +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -4916,6 +4991,15 @@ domutils@^2.5.2: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dotenv-flow@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/dotenv-flow/-/dotenv-flow-3.2.0.tgz#a5d79dd60ddb6843d457a4874aaf122cf659a8b7" @@ -5047,6 +5131,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -8099,6 +8188,16 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -8546,6 +8645,13 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -9431,10 +9537,10 @@ react-infinite-scroll-component@6.1.0: dependencies: throttle-debounce "^2.1.0" -react-inlinesvg@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/react-inlinesvg/-/react-inlinesvg-3.0.1.tgz#2133f5d2c770ac405060db2ce1c13eed30e7e83b" - integrity sha512-cBfoyfseNI2PkDA7ZKIlDoHq0eMfpoC3DhKBQNC+/X1M4ZQB+aXW+YiNPUDDDKXUsGDUIZWWiZWNFeauDIVdoA== +react-inlinesvg@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-inlinesvg/-/react-inlinesvg-3.0.2.tgz#5c59799966ae7926057091b2ac230ddcee01bea0" + integrity sha512-BEzkpMGQwEY68fgaouY7ZWvAUPb8jbj7dE9iDbWZxstDhMuz9qfpxNgvGSENKcDMdpq/XHduSk/LAmNKin4nKw== dependencies: exenv "^1.2.2" react-from-dom "^0.6.2" @@ -10271,7 +10377,7 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map-js@^1.0.2: +source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -10910,6 +11016,18 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= +svgo@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" + picocolors "^1.0.0" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"