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}
-
- }
- >
- writeToClipboard(hearing.preview_url)}>
- {(text) => text}
-
-
+ writeToClipboard(hearing.preview_url)}>
+ {(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 (
-
-
- setMainHearingAttachmentsOpen(!mainHearingAttachmentsOpen)}
- aria-controls='hearing-section-attachments-accordion'
- id='hearing-section-attachments-accordion-button'
- aria-expanded={mainHearingAttachmentsOpen ? 'true' : 'false'}
- aria-label={ }
- >
-
-
-
-
-
+
+ } headingLevel={2} theme={ACCORDION_THEME}>
-
- {!published && (
-
-
-
- )}
- {files.map((file) => (
-
- ))}
-
+ {!published && (
+
+
+
+ )}
+ {files.map((file) => (
+
+ ))}
-
+
);
};
@@ -289,33 +267,19 @@ const SectionContainerComponent = ({
}
return (
-
-
- setMainHearingProjectOpen(!mainHearingProjectOpen)}
- aria-controls='hearing-section-project-accordion'
- id='hearing-section-project-accordion-button'
- aria-expanded={mainHearingProjectOpen ? 'true' : 'false'}
- >
+
+
-
- {activePhaseIndex + 1}/{numberOfItems}
+ {activePhaseIndex + 1}/{numberOfItems} - {' '}
+ {getAttr(project.title, renderLanguage)}
-
- {getAttr(project.title, renderLanguage)}
-
-
-
-
-
+
{phases.map((phase, index) => (
@@ -344,7 +308,7 @@ const SectionContainerComponent = ({
))}
-
+
);
};
@@ -355,39 +319,18 @@ const SectionContainerComponent = ({
}
return (
-
-
- setMainHearingContactsOpen(!mainHearingContactsOpen)}
- aria-controls='hearing-section-contacts-accordion'
- id='hearing-section-contacts-accordion-button'
- aria-expanded={mainHearingContactsOpen ? 'true' : 'false'}
- aria-label={ }
- >
-
-
-
-
-
+
+ } 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 (
-
-
- setMainHearingDetailsOpen(!mainHearingDetailsOpen)}
- aria-controls='hearing-section-details-accordion'
- id='hearing-section-details-accordion-button'
- aria-expanded={mainHearingDetailsOpen ? 'true' : 'false'}
- aria-label={ }
- >
-
-
-
-
-
+ }
+ 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 }) => (
-
- {options.map((filter) => {
- const { list, iconName, formattedMessage, role } = filter;
- // NavItem role is button by default if filter.role doesnt exist
- return (
-
-
- {(txt) => txt}
-
- );
- })}
-
-);
+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 }) => (
-
+
@@ -17,7 +16,7 @@ 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' }) },
]}
/>
-
-
+
>
);
};
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) => ;
+ const dateTooltip = (date) => parseTimestamp(date);
const renderCommentText = () => {
if (!comment.deleted) {
@@ -77,25 +76,33 @@ const UserComment = (props) => {
{comment.author_name}
-
-
-
-
-
+
+
+
+
+ {dateTooltip(comment.created_at)}
+
-
+
{(txt) => txt}
-
+
{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(
-
+
{publishText}
,
);
actions.push(
- this.props.onDeleteHearingDraft()} key='unpublish' size="small">
+ this.props.onDeleteHearingDraft()}
+ key='unpublish'
+ size='small'
+ >
,
);
@@ -86,12 +93,14 @@ class HearingToolbar extends React.Component {
return (
-
- {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"