diff --git a/.babelrc b/.babelrc index ba74f85ee..95bdbba37 100644 --- a/.babelrc +++ b/.babelrc @@ -17,10 +17,6 @@ [ "transform-imports", { - "react-bootstrap": { - "transform": "react-bootstrap/lib/${member}", - "preventFullImport": true - }, "lodash": { "transform": "lodash/${member}", "preventFullImport": true @@ -45,10 +41,6 @@ [ "transform-imports", { - "react-bootstrap": { - "transform": "react-bootstrap/lib/${member}", - "preventFullImport": true - }, "lodash": { "transform": "lodash/${member}", "preventFullImport": true diff --git a/assets/sass/kerrokantasi/_hearing-page.scss b/assets/sass/kerrokantasi/_hearing-page.scss index cf2844071..f2f0dd3d2 100644 --- a/assets/sass/kerrokantasi/_hearing-page.scss +++ b/assets/sass/kerrokantasi/_hearing-page.scss @@ -32,6 +32,7 @@ .hearing-header { &-title { + display: flex; margin-top: 0; margin-bottom: $line-height-computed; diff --git a/package.json b/package.json index 9facfc434..aa81ac7b2 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,6 @@ "qs": "^6.11.2", "react": "^18.0.0", "react-anchor-link-smooth-scroll": "^1.0.12", - "react-bootstrap": "0.33.1", "react-datetime": "^2.2.0", "react-device-detect": "^2.2.3", "react-dom": "^18.0.0", diff --git a/src/components/Hearing/Header.jsx b/src/components/Hearing/Header.jsx index 63145cf68..5eba179ad 100644 --- a/src/components/Hearing/Header.jsx +++ b/src/components/Hearing/Header.jsx @@ -5,8 +5,7 @@ import isEmpty from 'lodash/isEmpty'; import keys from 'lodash/keys'; import PropTypes from 'prop-types'; import moment from 'moment'; -import { Col, Grid, OverlayTrigger, Row, Tooltip } from 'react-bootstrap'; -import { Button } from 'hds-react'; +import { Button, Tooltip } from 'hds-react'; import { connect, useDispatch, useSelector } from 'react-redux'; import { FormattedPlural, FormattedMessage, useIntl } from 'react-intl'; import { stringify } from 'qs'; @@ -218,7 +217,7 @@ function HeaderComponent(props) { ); } - return {text}; + return text; }; const writeToClipboard = (url) => { @@ -234,18 +233,9 @@ function HeaderComponent(props) { const getPreviewLinkButton = () => (
- - {(text) => text} - - } - > - - +
); @@ -279,39 +269,36 @@ function HeaderComponent(props) { return ( <>
- +
- - +
+

{!isPublic(hearing) && ( - - - -   - - + + {getEyeTooltip()} + )} {getAttr(hearing.title, language)}

- +
{isMainSection(section) && config.showSocialMediaSharing && ( - +
- +
)} - +
{isMainSection(section) ? ( <> {!isEmpty(section.abstract) && ( - - +
+
- - +
+
)}
{getTimetableText(hearing)} @@ -330,7 +317,7 @@ function HeaderComponent(props) { )}
- +
{showClosureInfo && } diff --git a/src/components/Hearing/Section/SectionContainer.jsx b/src/components/Hearing/Section/SectionContainer.jsx index e630b55c4..70af7aca2 100644 --- a/src/components/Hearing/Section/SectionContainer.jsx +++ b/src/components/Hearing/Section/SectionContainer.jsx @@ -5,8 +5,7 @@ import get from 'lodash/get'; import findIndex from 'lodash/findIndex'; import isEmpty from 'lodash/isEmpty'; import PropTypes from 'prop-types'; -import { Grid, Row, Col, Collapse } from 'react-bootstrap'; -import { Button } from 'hds-react'; +import { Accordion, Button } from 'hds-react'; import { connect, useDispatch, useSelector } from 'react-redux'; import { injectIntl, FormattedMessage, FormattedPlural } from 'react-intl'; import { useParams, useLocation, useNavigate } from 'react-router-dom'; @@ -52,6 +51,11 @@ import { getNickname } from '../../../utils/user'; import { addToast } from '../../../actions/toast'; import { createLocalizedNotificationPayload, NOTIFICATION_TYPES } from '../../../utils/notify'; +const ACCORDION_THEME = { + '--header-font-size': 'var(--fontsize-heading-l)', + '--header-font-weight': '600', +}; + const SectionContainerComponent = ({ editCommentFn, deleteSectionCommentFn, @@ -66,13 +70,6 @@ const SectionContainerComponent = ({ postVoteFn, user, }) => { - const [mainHearingDetailsOpen, setMainHearingDetailsOpen] = useState( - typeof window !== 'undefined' && window.innerWidth >= 768, - ); - const [mainHearingProjectOpen, setMainHearingProjectOpen] = useState(false); - const [mainHearingContactsOpen, setMainHearingContactsOpen] = useState(false); - const [mainHearingAttachmentsOpen, setMainHearingAttachmentsOpen] = useState(false); - const { hearingSlug, sectionId } = useParams(); const { search } = useLocation(); const navigate = useNavigate(); @@ -99,6 +96,8 @@ const SectionContainerComponent = ({ refreshUser: false, }); + const [mainHearingDetailsOpen] = useState(typeof window !== 'undefined' && window.innerWidth >= 768); + const getSectionNav = () => { const filterNotClosedSections = sections.filter((sec) => sec.type !== SectionTypes.CLOSURE); const filteredSections = filterNotClosedSections.filter((sec) => sec.type !== SectionTypes.MAIN); @@ -240,40 +239,19 @@ const SectionContainerComponent = ({ } return ( -
-

- -

- +
+ } headingLevel={2} theme={ACCORDION_THEME}>
-
- {!published && ( -

- -

- )} - {files.map((file) => ( - - ))} -
+ {!published && ( +

+ +

+ )} + {files.map((file) => ( + + ))}
- +
); }; @@ -289,33 +267,19 @@ const SectionContainerComponent = ({ } return ( -
-

- -

-
-
+
{phases.map((phase, index) => (
@@ -344,7 +308,7 @@ const SectionContainerComponent = ({ ))}
- +
); }; @@ -355,39 +319,18 @@ const SectionContainerComponent = ({ } return ( -
-

- -

- +
+ } headingLevel={2} theme={ACCORDION_THEME}>
-
-
- {renderContactlist.map((person) => ( -
- -
- ))} -
+
+ {renderContactlist.map((person) => ( +
+ +
+ ))}
- +
); }; @@ -396,7 +339,7 @@ const SectionContainerComponent = ({ // render either admin download button or normal download link for others if (userIsAdmin) { return ( - +
- +
); } @@ -490,39 +433,23 @@ const SectionContainerComponent = ({ if (!isEmpty(renderSection.content) || sectionImage) { return ( -
-

- -

- + } + headingLevel={2} + theme={ACCORDION_THEME} + initiallyOpen={mainHearingDetailsOpen} >
-
- {renderSectionImage(renderLanguage)} - {/* Render main section title if it exists and it's not the same as the hearing title */} - {!isEmpty(renderSection.title) && - getAttr(renderHearing.title, renderLanguage) !== getAttr(renderSection.title, renderLanguage) && ( -

{getAttr(renderSection.title, renderLanguage)}

- )} - {renderSectionContent(renderLanguage)} -
+ {renderSectionImage(renderLanguage)} + {/* Render main section title if it exists and it's not the same as the hearing title */} + {!isEmpty(renderSection.title) && + getAttr(renderHearing.title, renderLanguage) !== getAttr(renderSection.title, renderLanguage) && ( +

{getAttr(renderSection.title, renderLanguage)}

+ )} + {renderSectionContent(renderLanguage)}
-
+
); } @@ -535,13 +462,13 @@ const SectionContainerComponent = ({ return ( <> {hearing.geojson && ( - +
- +
)} - +
{renderMainDetails(hearing, section, language)} {renderProjectPhaseSection(hearing, language)} @@ -576,13 +503,13 @@ const SectionContainerComponent = ({ {renderCommentsSection()} - +
{hearing.geojson && ( - +
- +
)} ); @@ -618,7 +545,7 @@ const SectionContainerComponent = ({ const published = 'published' in hearing ? hearing.published : true; return ( - +

@@ -655,19 +582,19 @@ const SectionContainerComponent = ({ {showSectionBrowser && } {renderCommentsSection()} - +

); }; return isEmpty(section) ? ( ) : ( - +
- {isMainSection(section) ? renderMainHearing() : renderSubHearing()} +
{isMainSection(section) ? renderMainHearing() : renderSubHearing()}
- +
); }; diff --git a/src/components/HearingCardList.jsx b/src/components/HearingCardList.jsx index eed88ea7c..a989c21c1 100644 --- a/src/components/HearingCardList.jsx +++ b/src/components/HearingCardList.jsx @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Row, Col } from 'react-bootstrap'; import HearingCard from './HearingCard'; import { hearingShape } from '../types'; @@ -28,13 +27,13 @@ const HearingCardList = ({ userProfile = false, unFavoriteAction, }) => ( - +
{hearings && hearings.map((hearing) => { // Hearings with long titles have larger HearingCards on the profile page. const mdSize = userProfile && getAttr(hearing.title, intl.locale, false).length > 140 ? 6 : 3; return ( - +
- +
); })} - +
); HearingCardList.propTypes = { diff --git a/src/components/Hearings/AdminFilterSelector.jsx b/src/components/Hearings/AdminFilterSelector.jsx index ab513bc6b..28b7d9b8b 100644 --- a/src/components/Hearings/AdminFilterSelector.jsx +++ b/src/components/Hearings/AdminFilterSelector.jsx @@ -1,9 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Nav, NavItem } from 'react-bootstrap'; -import { FormattedMessage } from 'react-intl'; - -import Icon from '../../utils/Icon'; +import { SelectionGroup, RadioButton } from 'hds-react'; +import { FormattedMessage, useIntl } from 'react-intl'; /** * [AdminFilterSelector description] @@ -12,20 +10,31 @@ import Icon from '../../utils/Icon'; * @param {function} props.onSelect * @param {Array} props.options */ -const AdminFilterSelector = ({ active, onSelect, options }) => ( - -); +const AdminFilterSelector = ({ active, onSelect, options }) => { + const intl = useIntl(); + + return ( + + {options.map((filter) => { + const { list, formattedMessage } = filter; + return ( + onSelect(list)} + label={{(txt) => txt}} + /> + ); + })} + + ); +}; AdminFilterSelector.propTypes = { active: PropTypes.string, diff --git a/src/components/Hearings/CreateHearingButton.jsx b/src/components/Hearings/CreateHearingButton.jsx index ab39bed80..b3bfc0880 100644 --- a/src/components/Hearings/CreateHearingButton.jsx +++ b/src/components/Hearings/CreateHearingButton.jsx @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; -import { ButtonToolbar } from 'react-bootstrap'; import { Button } from 'hds-react'; import Icon from '../../utils/Icon'; @@ -9,7 +8,7 @@ import Link from '../LinkWithLang'; const CreateHearingButton = ({ to }) => (
- +
- +
); diff --git a/src/components/MarkdownPage/MarkdownPage.jsx b/src/components/MarkdownPage/MarkdownPage.jsx index ff913cd8f..6fed8616d 100644 --- a/src/components/MarkdownPage/MarkdownPage.jsx +++ b/src/components/MarkdownPage/MarkdownPage.jsx @@ -2,7 +2,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import Helmet from 'react-helmet'; -import { Col, Row } from 'react-bootstrap'; import remarkGfm from 'remark-gfm'; import ReactMarkdown from 'react-markdown'; @@ -20,13 +19,13 @@ const MarkdownPage = ({ title, markdown }) => { { property: 'og:description', content: intl.formatMessage({ id: 'descriptionTag' }) }, ]} /> - - +
+
{markdown} - - +
+
); }; diff --git a/src/components/RichTextEditor/Image/ImageModal.jsx b/src/components/RichTextEditor/Image/ImageModal.jsx index f23136759..38307ab71 100644 --- a/src/components/RichTextEditor/Image/ImageModal.jsx +++ b/src/components/RichTextEditor/Image/ImageModal.jsx @@ -1,7 +1,6 @@ import React, { useState } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import PropTypes from 'prop-types'; -import { ControlLabel } from 'react-bootstrap'; import { Button, Card, Dialog, FileInput, TextInput } from 'hds-react'; import { useDispatch } from 'react-redux'; @@ -81,9 +80,9 @@ const ImageModal = ({ isOpen, onClose, onSubmit }) => { } />
- + +
{fileReaderResult && ( - + + {!hideBlockStyleControls && } {!hideInlineStyleControls && ( @@ -722,6 +721,7 @@ class RichTextEditor extends React.Component { {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}
{ * @param {string} date * @returns {JSX.Element} */ - const dateTooltip = (date) => {parseTimestamp(date)}; + const dateTooltip = (date) => parseTimestamp(date); const renderCommentText = () => { if (!comment.deleted) { @@ -77,25 +76,33 @@ const UserComment = (props) => {
- +
{getAttr(data.title, locale)}
diff --git a/src/components/admin/ContactModal.jsx b/src/components/admin/ContactModal.jsx index 809960c8f..68c701d70 100644 --- a/src/components/admin/ContactModal.jsx +++ b/src/components/admin/ContactModal.jsx @@ -1,6 +1,5 @@ import React from 'react'; import { map, forEach, omit, isEmpty } from 'lodash'; -import { ControlLabel, HelpBlock } from 'react-bootstrap'; import { Button, Dialog, Select } from 'hds-react'; import { injectIntl, FormattedMessage } from 'react-intl'; import update from 'immutability-helper'; @@ -166,10 +165,11 @@ class ContactModal extends React.Component { if (language) { titleInputs.push(
- + + this.onContactTitleChange(key, event.target.value)} value={contact.title[key] || ''} @@ -271,9 +271,9 @@ class ContactModal extends React.Component { value={contact.organization} disabled={!isEmpty(this.props.contactInfo)} // Enabled only when creating a contact /> - + - +

@@ -286,9 +286,9 @@ class ContactModal extends React.Component { placeholder='Lisätiedot yhteyshenkilöstä' maxLength='50' /> - + - +

{/* Used to trigger submit remotely. */} diff --git a/src/components/admin/HearingToolbar.jsx b/src/components/admin/HearingToolbar.jsx index 8be5927b4..70c37997d 100644 --- a/src/components/admin/HearingToolbar.jsx +++ b/src/components/admin/HearingToolbar.jsx @@ -2,8 +2,7 @@ import moment from 'moment'; import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, FormattedMessage } from 'react-intl'; -import { Row, Col, ButtonToolbar, Alert } from 'react-bootstrap'; -import { Button } from 'hds-react'; +import { Button, Notification } from 'hds-react'; import Icon from '../../utils/Icon'; import { hearingShape } from '../../types'; @@ -22,63 +21,71 @@ class HearingToolbar extends React.Component { let statusLabel = ''; const openingTime = moment(hearing.open_at); const actions = [ - , - , ]; if (!hearing.closed && hearing.published) { - statusLabel = ( - - - - ); + statusLabel = } />; actions.push( - , ); actions.push( - , ); } else if (hearing.closed && hearing.published && moment(hearing.close_at) <= moment()) { - statusLabel = ( - - - - ); + statusLabel = } />; } else if (hearing.closed && hearing.published) { statusLabel = ( - - {openingTime.format(DATE_FORMAT)} - + + {openingTime.format(DATE_FORMAT)} + + } + /> ); actions.push( - , ); } else { - statusLabel = ( - - - - ); + statusLabel = } />; let publishText = ; if (moment(hearing.open_at).diff(moment()) < 0) { publishText = ; } actions.push( - , ); actions.push( - , ); @@ -86,12 +93,14 @@ class HearingToolbar extends React.Component { return (
- - {statusLabel} - - {actions} - - +
+
{statusLabel}
+
+
+ {actions} +
+
+
); } diff --git a/src/components/admin/LabelModal.jsx b/src/components/admin/LabelModal.jsx index 744fee032..a2c2a8ae6 100644 --- a/src/components/admin/LabelModal.jsx +++ b/src/components/admin/LabelModal.jsx @@ -1,7 +1,6 @@ import React from 'react'; import map from 'lodash/map'; import forEach from 'lodash/forEach'; -import { ControlLabel } from 'react-bootstrap'; import { injectIntl, FormattedMessage } from 'react-intl'; import update from 'immutability-helper'; import PropTypes from 'prop-types'; @@ -96,10 +95,11 @@ class LabelModal extends React.Component { if (language) { labelInputs.push(
- + + this.onLabelChange(key, event.target.value)} value={label.label[key] || ''} diff --git a/src/i18n/en.json b/src/i18n/en.json index 7496350be..8743a9085 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -9,6 +9,7 @@ "addGeojson": "Add geojson as a file", "addGeojsonInfo": "Note that the GeoJSON format uses the wgs84 coordinate system. Save only one area boundary to the file.", "additionalInfo": "Additional info", + "adminFilterSelectorLabel": "Filter hearings", "adminCommentMessage": "You are logged in as an administrator. Your name and organization will be displayed with your comment", "all": "All", "allHearings": "All hearings", diff --git a/src/i18n/fi.json b/src/i18n/fi.json index 699bf2740..d64a5884d 100644 --- a/src/i18n/fi.json +++ b/src/i18n/fi.json @@ -12,6 +12,7 @@ "addProcess": "Lisää uusi vaihe", "addSection": "Lisää osa-alue", "additionalInfo": "Lisätiedot", + "adminFilterSelectorLabel": "Suodata kuulemisia", "adminCommentMessage": "Olet kirjautuneena pääkäyttäjänä. Nimesi ja organisaatiosi näytetään kommenttisi yhteydessä", "all": "Kaikki", "allHearings": "Kaikki kuulemiset", diff --git a/src/i18n/sv.json b/src/i18n/sv.json index 3f7c162cc..7220f35f3 100644 --- a/src/i18n/sv.json +++ b/src/i18n/sv.json @@ -9,6 +9,7 @@ "addGeojson": "Lägg till geojson som en fil", "addGeojsonInfo": "Observera att GeoJSON-formatet använder wgs84-koordinatsystemet. Spara endast en områdesgräns i filen.", "additionalInfo": "Ytterligare information", + "adminFilterSelectorLabel": "Filtrera hörander", "addProcess": "Lägg till ett steg", "all": "Alla", "allHearings": "Alla höranden", diff --git a/src/views/AccessibilityInfo/index.jsx b/src/views/AccessibilityInfo/index.jsx index c7a65d453..49ccee34b 100644 --- a/src/views/AccessibilityInfo/index.jsx +++ b/src/views/AccessibilityInfo/index.jsx @@ -1,6 +1,5 @@ /* eslint-disable import/no-unresolved */ import { connect } from 'react-redux'; -import { Grid } from 'react-bootstrap'; import { useIntl } from 'react-intl'; import React, { useEffect, useState } from 'react'; import AccessibilityFi from '@city-i18n/accessibility-info/accessibility.fi.md'; @@ -46,9 +45,9 @@ const AccessibilityInfo = () => { fetchData(); }, [pageContent]); return ( - +
- +
); }; diff --git a/src/views/Home.jsx b/src/views/Home.jsx index 603d93af6..f424fa4a7 100644 --- a/src/views/Home.jsx +++ b/src/views/Home.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import { injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import { Col, Grid, Row } from 'react-bootstrap'; import { Button } from 'hds-react'; import orderBy from 'lodash/orderBy'; @@ -78,9 +77,9 @@ export class Home extends React.Component { return (
- - - +
+
+

- - - +
+
+
diff --git a/src/views/UserHearings/index.jsx b/src/views/UserHearings/index.jsx index 07ac54d75..96e0c1a01 100644 --- a/src/views/UserHearings/index.jsx +++ b/src/views/UserHearings/index.jsx @@ -2,7 +2,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import { Col, Row } from 'react-bootstrap'; import { Button } from 'hds-react'; import Helmet from 'react-helmet'; @@ -117,9 +116,9 @@ class UserHearings extends React.Component { } = this.props; return hearings.reduce((accumulator, currentValue) => { accumulator.push( - +
- , +
, ); return accumulator; }, []); @@ -187,10 +186,10 @@ class UserHearings extends React.Component { const hearingListings = Object.keys(GET_HEARINGS).reduce((accumulator, currentValue) => { const small = currentValue.toLowerCase(); accumulator.push( - +
{this.getHearingHeader(small)}
{this.getHearingListing(small)}
- , +
, ); return accumulator; }, []); @@ -198,7 +197,7 @@ class UserHearings extends React.Component {
{helmetTitle}
- +
@@ -216,7 +215,7 @@ class UserHearings extends React.Component {
- +
{hearingListings}
diff --git a/yarn.lock b/yarn.lock index dca50012b..93da2cbc1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1335,14 +1335,6 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs2@^7.0.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.24.7.tgz#28e73d50c44812060a58548c5096be4243ee3ee5" - integrity sha512-+Lf6xofiPZLtFwNkpjGHPgJck4b22Yo8h9+WHf3bEbS4ikOyOMNtJk6HSTolEQ2irH1XSoeguaCkrkcgyThrMA== - dependencies: - core-js "^2.6.12" - regenerator-runtime "^0.14.0" - "@babel/runtime-corejs3@^7.10.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz#65a99097e4c28e6c3a174825591700cc5abd710e" @@ -1358,7 +1350,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== @@ -3170,7 +3162,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11": +"@types/react@*", "@types/react@16 || 17 || 18": version "18.3.3" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -4009,7 +4001,7 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" -classnames@^2.2.5, classnames@^2.3.1: +classnames@^2.3.1: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== @@ -4155,11 +4147,6 @@ core-js-pure@^3.30.2: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== -core-js@^2.6.12: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - core-js@^3.6.4: version "3.37.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" @@ -4468,13 +4455,6 @@ dom-accessibility-api@^0.6.3: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== -dom-helpers@^3.2.0, dom-helpers@^3.2.1, dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - dom-helpers@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" @@ -6563,11 +6543,6 @@ kashe@1.0.4: function-double "^1.0.4" reselect "^4.0.0" -keycode@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" - integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== - keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -7848,15 +7823,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types-extra@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" - integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== - dependencies: - react-is "^16.3.2" - warning "^4.0.0" - -prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7921,24 +7888,6 @@ react-anchor-link-smooth-scroll@^1.0.12: resolved "https://registry.yarnpkg.com/react-anchor-link-smooth-scroll/-/react-anchor-link-smooth-scroll-1.0.12.tgz#5cd49c73e74be6d20b4c05a5e5c72d07ebbedac7" integrity sha512-aaY+9X0yh8YnC0jBfoTKpsiCLdO/Y6pCltww+VB+NnTBPDOvnIdnp1AlazajsDitc1j+cVSQ+yNtaVeTIMQbxw== -react-bootstrap@0.33.1: - version "0.33.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.33.1.tgz#e072592aa143b9792526281272eca754bc9a4940" - integrity sha512-qWTRravSds87P8WC82tETy2yIso8qDqlIm0czsrduCaYAFtHuyLu0XDbUlfLXeRzqgwm5sRk2wRaTNoiVkk/YQ== - dependencies: - "@babel/runtime-corejs2" "^7.0.0" - classnames "^2.2.5" - dom-helpers "^3.2.0" - invariant "^2.2.4" - keycode "^2.2.0" - prop-types "^15.6.1" - prop-types-extra "^1.0.1" - react-overlays "^0.9.0" - react-prop-types "^0.4.0" - react-transition-group "^2.0.0" - uncontrollable "^7.0.2" - warning "^3.0.0" - react-datetime@^2.2.0: version "2.16.3" resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.16.3.tgz#7f9ac7d4014a939c11c761d0c22d1fb506cb505e" @@ -8032,7 +7981,7 @@ react-intl@^5.0.0: intl-messageformat "9.13.0" tslib "^2.1.0" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.3, react-is@^16.7.0: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.3, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8062,7 +8011,7 @@ react-leaflet@^4.2.1: dependencies: "@react-leaflet/core" "^2.1.0" -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -8108,18 +8057,6 @@ react-onclickoutside@^6.5.0: resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz#1f5e0241c08784b6e65745d91aca0d700c548a89" integrity sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w== -react-overlays@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.9.3.tgz#5bac8c1e9e7e057a125181dee2d784864dd62902" - integrity sha512-u2T7nOLnK+Hrntho4p0Nxh+BsJl0bl4Xuwj/Y0a56xywLMetgAfyjnDVrudLXsNcKGaspoC+t3C1V80W9QQTdQ== - dependencies: - classnames "^2.2.5" - dom-helpers "^3.2.1" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-transition-group "^2.2.1" - warning "^3.0.0" - react-popper@2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" @@ -8128,13 +8065,6 @@ react-popper@2.2.5: react-fast-compare "^3.0.1" warning "^4.0.2" -react-prop-types@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0" - integrity sha512-IyjsJhDX9JkoOV9wlmLaS7z+oxYoIWhfzDcFy7inwoAKTu+VcVNrVpPmLeioJ94y6GeDRsnwarG1py5qofFQMg== - dependencies: - warning "^3.0.0" - react-redux@^8.0.0: version "8.1.3" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" @@ -8201,16 +8131,6 @@ react-toastify@^9.0.0: dependencies: clsx "^1.1.1" -react-transition-group@^2.0.0, react-transition-group@^2.2.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - react-transition-group@^4.3.0: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -8899,8 +8819,16 @@ std-env@^3.9.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - name string-width-cjs +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9013,8 +8941,14 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9421,16 +9355,6 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" -uncontrollable@^7.0.2: - version "7.2.1" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" - integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== - dependencies: - "@babel/runtime" "^7.6.3" - "@types/react" ">=16.9.11" - invariant "^2.2.4" - react-lifecycles-compat "^3.0.4" - undici-types@~6.21.0: version "6.21.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" @@ -9713,14 +9637,7 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ== - dependencies: - loose-envify "^1.0.0" - -warning@^4.0.0, warning@^4.0.2, warning@^4.0.3: +warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== @@ -9870,8 +9787,7 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - name wrap-ansi-cjs +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -9889,6 +9805,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"