From 519196db307ed38a3c4648a7aa3282dcafd1ccc7 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Mon, 14 Oct 2024 16:50:16 +0200 Subject: [PATCH 01/19] feat: add menu items for unlik and delete event --- i18n/en.pot | 36 +++++++- .../Modal/UnlinkAndDeleteModal.js | 49 +++++++++++ .../Modal/UnlinkAndDeleteModal.types.js | 8 ++ .../OverflowMenu/Modal/UnlinkModal.js | 50 +++++++++++ .../OverflowMenu/Modal/UnlinkModal.types.js | 8 ++ .../OverflowMenu/Modal/index.js | 2 + .../OverflowMenu/OverflowMenu.component.js | 83 +++++++++++++++++++ .../OverflowMenu/OverflowMenu.types.js | 0 .../OverflowMenu/index.js | 1 + .../WidgetTwoEventWorkspace.container.js | 37 ++------- 10 files changed, 241 insertions(+), 33 deletions(-) create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js diff --git a/i18n/en.pot b/i18n/en.pot index d299bcedcf..75a337bbc3 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" -"PO-Revision-Date: 2024-09-02T11:08:16.281Z\n" +"POT-Creation-Date: 2024-10-14T14:08:33.622Z\n" +"PO-Revision-Date: 2024-10-14T14:08:33.622Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1538,12 +1538,40 @@ msgstr "{{ scheduledEvents }} scheduled" msgid "Stages and Events" msgstr "Stages and Events" -msgid "An error occurred while loading the widget." -msgstr "An error occurred while loading the widget." +msgid "" +"Are you sure you want to unlink and delete the event? This will permanently " +"remove the event and all related data." +msgstr "" +"Are you sure you want to unlink and delete the event? This will permanently " +"remove the event and all related data." + +msgid "There was a problem unliking and deletiung the event" +msgstr "There was a problem unliking and deletiung the event" + +msgid "Yes, unlink and delete event" +msgstr "Yes, unlink and delete event" + +msgid "Are you sure you want to unlink the event?" +msgstr "Are you sure you want to unlink the event?" + +msgid "There was a problem unliking the event" +msgstr "There was a problem unliking the event" + +msgid "Yes, unlink event" +msgstr "Yes, unlink event" msgid "View linked event" msgstr "View linked event" +msgid "Unlink event" +msgstr "Unlink event" + +msgid "Unlink and delete event" +msgstr "Unlink and delete event" + +msgid "An error occurred while loading the widget." +msgstr "An error occurred while loading the widget." + msgid "Scheduled" msgstr "Scheduled" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js new file mode 100644 index 0000000000..9c2d4e130a --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -0,0 +1,49 @@ +// @flow +import React from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { Modal, ModalContent, ModalTitle, ModalActions, ButtonStrip, Button } from '@dhis2/ui'; +import type { Props } from './UnlinkAndDeleteModal.types'; + +export const UnlinkAndDeleteModal = ({ trackedEntityTypeName, setOpenModal }: Props) => +// const [errorReports, setErrorReports] = useState([]); + + ( + + + {i18n.t('Delete event', { + trackedEntityTypeName, + interpolation: { escapeValue: false }, + })} + + +

+ {i18n.t( + 'Are you sure you want to unlink and delete the event? This will permanently remove the event and all related data.', + )} +

+ {/* {errorReports.length > 0 && ( + +
    + {errorReports.map(content => ( +
  • {content.message}
  • + ))} +
+
+ )} */} +
+ + + + + + +
+ ) +; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js new file mode 100644 index 0000000000..ab402795c2 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js @@ -0,0 +1,8 @@ +// @flow + +export type Props = {| + trackedEntity: { trackedEntity: string }, + trackedEntityTypeName: string, + setOpenModal: (toogle: boolean) => void, + onDeleteSuccess?: () => void, +|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js new file mode 100644 index 0000000000..9b294816d0 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -0,0 +1,50 @@ +// @flow +import React from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { Modal, ModalContent, ModalTitle, ModalActions, ButtonStrip, Button } from '@dhis2/ui'; +import type { Props } from './UnlinkAndDeleteModal.types'; + +export const UnlinkModal = ({ trackedEntityTypeName, setOpenModal }: Props) => +// const [errorReports, setErrorReports] = useState([]); + + + ( + + + {i18n.t('Delete event', { + trackedEntityTypeName, + interpolation: { escapeValue: false }, + })} + + +

+ {i18n.t( + 'Are you sure you want to unlink the event?', + )} +

+ {/* {errorReports.length > 0 && ( + +
    + {errorReports.map(content => ( +
  • {content.message}
  • + ))} +
+
+ )} */} +
+ + + + + + +
+ ) +; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js new file mode 100644 index 0000000000..ab402795c2 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js @@ -0,0 +1,8 @@ +// @flow + +export type Props = {| + trackedEntity: { trackedEntity: string }, + trackedEntityTypeName: string, + setOpenModal: (toogle: boolean) => void, + onDeleteSuccess?: () => void, +|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js new file mode 100644 index 0000000000..87a18e746e --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js @@ -0,0 +1,2 @@ +export { UnlinkModal } from './UnlinkModal'; +export { UnlinkAndDeleteModal } from './UnlinkAndDeleteModal'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js new file mode 100644 index 0000000000..dd8910da01 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -0,0 +1,83 @@ +// @flow +import React, { useState } from 'react'; +import { useHistory } from 'react-router-dom'; +import { FlyoutMenu, IconDelete16, IconLink16, IconMore16, IconView16, Divider, MenuItem } from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { OverflowButton } from '../../Buttons'; +import { UnlinkModal, UnlinkAndDeleteModal } from './Modal'; +import { buildUrlQueryString } from '../../../utils/routing'; + + +type Props = { + linkedEvent: any, + orgUnitId: string, +}; + +export const OverflowMenuComponent = ({ + linkedEvent, + orgUnitId, +}: Props) => { + const [actionsIsOpen, setActionsIsOpen] = useState(false); + const [unlikModalIsOpen, setUnlinkModalIsOpen] = useState(false); + const [UnlinkAndDeleteModalIsOpen, setUnlinkAndDeleteModalIsOpen] = useState(false); + + const { push } = useHistory(); + + return ( + <> + setActionsIsOpen(prev => !prev)} + icon={} + small + secondary + dataTest={'widget-event-navigate-to-linked-event'} + component={( + + } + dataTest={'event-overflow-view-linked-event'} + onClick={() => { + push(`/enrollmentEventEdit?${buildUrlQueryString({ + eventId: linkedEvent.event, + orgUnitId, + })}`); + setActionsIsOpen(false); + }} + /> + + } + dataTest={'event-overflow-unlink-event'} + onClick={() => { + setUnlinkModalIsOpen(true); + }} + /> + } + label={i18n.t('Unlink and delete event')} + onClick={() => { + setUnlinkAndDeleteModalIsOpen(true); + }} + /> + + + )} + /> + {unlikModalIsOpen && ( + + )} + {UnlinkAndDeleteModalIsOpen && ( + + )} + + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js new file mode 100644 index 0000000000..069efe9da1 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js @@ -0,0 +1 @@ +export { OverflowMenuComponent } from './OverflowMenu.component'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index a889aace6b..1c92fa5897 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -1,7 +1,6 @@ // @flow -import React, { useState } from 'react'; -import { useHistory } from 'react-router-dom'; -import { colors, FlyoutMenu, IconMore16, MenuItem, spacersNum } from '@dhis2/ui'; +import React from 'react'; +import { colors, spacersNum } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core/'; import type { Props } from './WidgetTwoEventWorkspace.types'; @@ -9,8 +8,7 @@ import { useMetadataForProgramStage } from '../DataEntries/common/ProgramStage/u import { Widget } from '../Widget'; import { useLinkedEventByOriginId } from './hooks/useLinkedEventByOriginId'; import { WidgetTwoEventWorkspaceComponent } from './WidgetTwoEventWorkspace.component'; -import { OverflowButton } from '../Buttons'; -import { buildUrlQueryString } from '../../utils/routing'; +import { OverflowMenuComponent } from './OverflowMenu'; import { EnrollmentPageKeys, } from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; @@ -48,8 +46,6 @@ const WidgetTwoEventWorkspacePlain = ({ currentPage, classes, }: Props) => { - const [actionsIsOpen, setActionsIsOpen] = useState(false); - const { push } = useHistory(); const { linkedEvent, dataValues, @@ -97,28 +93,11 @@ const WidgetTwoEventWorkspacePlain = ({
{currentPage === EnrollmentPageKeys.VIEW_EVENT && (
- setActionsIsOpen(prev => !prev)} - icon={} - small - secondary - dataTest={'widget-event-navigate-to-linked-event'} - component={( - - { - push(`/enrollmentEventEdit?${buildUrlQueryString({ - eventId: linkedEvent.event, - orgUnitId, - })}`); - setActionsIsOpen(false); - }} - /> - - )} +
)} From 31f0b4afdf833d7c4db6138cef3444a101392635 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Fri, 18 Oct 2024 07:22:24 +0200 Subject: [PATCH 02/19] feat: temp --- i18n/en.pot | 35 +++--- .../ScheduleInOrgUnit.container.js | 2 +- .../Modal/UnlinkAndDeleteModal.js | 101 ++++++++++++++---- .../Modal/UnlinkAndDeleteModal.types.js | 8 +- .../OverflowMenu/Modal/UnlinkModal.js | 73 ++++++++----- .../OverflowMenu/Modal/UnlinkModal.types.js | 8 +- .../OverflowMenu/Modal/index.js | 1 + .../Modal/useDeleteRelationship.js | 70 ++++++++++++ .../OverflowMenu/OverflowMenu.component.js | 52 +++++---- .../OverflowMenu/index.js | 1 + .../WidgetTwoEventWorkspace.container.js | 4 +- .../hooks/useLinkedEventByOriginId.js | 7 +- 12 files changed, 265 insertions(+), 97 deletions(-) create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js diff --git a/i18n/en.pot b/i18n/en.pot index 75a337bbc3..bf48160229 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-10-14T14:08:33.622Z\n" -"PO-Revision-Date: 2024-10-14T14:08:33.622Z\n" +"POT-Creation-Date: 2024-10-17T16:06:48.023Z\n" +"PO-Revision-Date: 2024-10-17T16:06:48.023Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1545,20 +1545,32 @@ msgstr "" "Are you sure you want to unlink and delete the event? This will permanently " "remove the event and all related data." -msgid "There was a problem unliking and deletiung the event" -msgstr "There was a problem unliking and deletiung the event" +msgid "There was a problem unlinking and deleting the event" +msgstr "There was a problem unlinking and deleting the event" + +msgid "Deleting..." +msgstr "Deleting..." msgid "Yes, unlink and delete event" msgstr "Yes, unlink and delete event" -msgid "Are you sure you want to unlink the event?" -msgstr "Are you sure you want to unlink the event?" +msgid "An error occurred while unlinking the relationship." +msgstr "An error occurred while unlinking the relationship." + +msgid "Unlink relationship" +msgstr "Unlink relationship" + +msgid "Are you sure you want to unlink this relationship?" +msgstr "Are you sure you want to unlink this relationship?" -msgid "There was a problem unliking the event" -msgstr "There was a problem unliking the event" +msgid "There was a problem unlinking the relationship" +msgstr "There was a problem unlinking the relationship" -msgid "Yes, unlink event" -msgstr "Yes, unlink event" +msgid "Yes, unlink relationship" +msgstr "Yes, unlink relationship" + +msgid "An error occurred while deleting the relationship." +msgstr "An error occurred while deleting the relationship." msgid "View linked event" msgstr "View linked event" @@ -1636,9 +1648,6 @@ msgstr "" msgid "Yes, delete relationship" msgstr "Yes, delete relationship" -msgid "An error occurred while deleting the relationship." -msgstr "An error occurred while deleting the relationship." - msgid "To open this relationship, please wait until saving is complete" msgstr "To open this relationship, please wait until saving is complete" diff --git a/src/core_modules/capture-core/components/WidgetRelatedStages/ScheduleInOrgUnit/ScheduleInOrgUnit.container.js b/src/core_modules/capture-core/components/WidgetRelatedStages/ScheduleInOrgUnit/ScheduleInOrgUnit.container.js index 33c556f0ed..327adf9fc1 100644 --- a/src/core_modules/capture-core/components/WidgetRelatedStages/ScheduleInOrgUnit/ScheduleInOrgUnit.container.js +++ b/src/core_modules/capture-core/components/WidgetRelatedStages/ScheduleInOrgUnit/ScheduleInOrgUnit.container.js @@ -44,7 +44,7 @@ type Props = { ...CssClasses, } -export const ScheduleInOrgUnitPlain = ({ +const ScheduleInOrgUnitPlain = ({ relatedStagesDataValues, setRelatedStagesDataValues, saveAttempted, diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 9c2d4e130a..206e53dee2 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -1,49 +1,106 @@ // @flow -import React from 'react'; +import React, { useState } from 'react'; import i18n from '@dhis2/d2-i18n'; -import { Modal, ModalContent, ModalTitle, ModalActions, ButtonStrip, Button } from '@dhis2/ui'; +import { + Modal, + ModalContent, + ModalTitle, + ModalActions, + ButtonStrip, + Button, + NoticeBox, + CircularLoader, +} from '@dhis2/ui'; +import { useDataEngine } from '@dhis2/app-runtime'; import type { Props } from './UnlinkAndDeleteModal.types'; -export const UnlinkAndDeleteModal = ({ trackedEntityTypeName, setOpenModal }: Props) => -// const [errorReports, setErrorReports] = useState([]); +export const UnlinkAndDeleteModal = ({ + setOpenModal, + eventId, + onDeleteSuccess, +}: Props) => { + const [errorReports, setErrorReports] = useState([]); + const [loading, setLoading] = useState(false); + const dataEngine = useDataEngine(); - ( - - - {i18n.t('Delete event', { - trackedEntityTypeName, - interpolation: { escapeValue: false }, - })} - + const handleDelete = async () => { + setLoading(true); + setErrorReports([]); + + try { + const mutation = { + resource: 'tracker', + type: 'create', + params: { + async: 'false', + importStrategy: 'DELETE', + }, + data: { + events: [ + { + event: eventId, + }, + ], + }, + }; + + await dataEngine.mutate(mutation); + + if (onDeleteSuccess) { + onDeleteSuccess(); + } + + setOpenModal(false); + } catch (error) { + const messages = error.details?.response?.errorReports?.map(report => report.message) || [ + error.message, + ]; + setErrorReports(messages); + } finally { + setLoading(false); + } + }; + + return ( + + {i18n.t('Delete event')}

{i18n.t( 'Are you sure you want to unlink and delete the event? This will permanently remove the event and all related data.', )}

- {/* {errorReports.length > 0 && ( + {errorReports.length > 0 && (
    - {errorReports.map(content => ( -
  • {content.message}
  • + {errorReports.map((message, index) => ( + // eslint-disable-next-line react/no-array-index-key +
  • {message}
  • ))}
- )} */} + )}
- -
- ) -; + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js index ab402795c2..5fc63efe31 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js @@ -1,8 +1,6 @@ // @flow - export type Props = {| - trackedEntity: { trackedEntity: string }, - trackedEntityTypeName: string, - setOpenModal: (toogle: boolean) => void, - onDeleteSuccess?: () => void, + setOpenModal: (open: boolean) => void, + eventId: string, + onDeleteSuccess?: () => void, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index 9b294816d0..786852f98b 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -1,50 +1,67 @@ // @flow -import React from 'react'; +import React, { useState } from 'react'; import i18n from '@dhis2/d2-i18n'; -import { Modal, ModalContent, ModalTitle, ModalActions, ButtonStrip, Button } from '@dhis2/ui'; -import type { Props } from './UnlinkAndDeleteModal.types'; +import { + Modal, + ModalContent, + ModalTitle, + ModalActions, + ButtonStrip, + Button, + NoticeBox, +} from '@dhis2/ui'; +import { useDeleteRelationship } from './useDeleteRelationship'; +import type { Props } from './UnlinkModal.types'; -export const UnlinkModal = ({ trackedEntityTypeName, setOpenModal }: Props) => -// const [errorReports, setErrorReports] = useState([]); +export const UnlinkModal = ({ setOpenModal, relationshipId, onUnlinkSuccess }: Props) => { + const [loading, setLoading] = useState(false); + const [errorMessage, setErrorMessage] = useState(null); + const { onDeleteRelationship } = useDeleteRelationship({ sourceId: relationshipId }); - ( - + const handleUnlink = async () => { + setLoading(true); + setErrorMessage(null); + + try { + await onDeleteRelationship({ relationshipId }); + + if (onUnlinkSuccess) { + onUnlinkSuccess(); + } + setOpenModal(false); + } catch (error) { + setErrorMessage(i18n.t('An error occurred while unlinking the relationship.')); + setLoading(false); + } + }; + + return ( + - {i18n.t('Delete event', { - trackedEntityTypeName, - interpolation: { escapeValue: false }, - })} + {i18n.t('Unlink relationship')} -

- {i18n.t( - 'Are you sure you want to unlink the event?', - )} -

- {/* {errorReports.length > 0 && ( +

{i18n.t('Are you sure you want to unlink this relationship?')}

+ {errorMessage && ( -
    - {errorReports.map(content => ( -
  • {content.message}
  • - ))} -
+ {errorMessage}
- )} */} + )}
-
- ) -; + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js index ab402795c2..45693897dd 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js @@ -1,8 +1,6 @@ // @flow - export type Props = {| - trackedEntity: { trackedEntity: string }, - trackedEntityTypeName: string, - setOpenModal: (toogle: boolean) => void, - onDeleteSuccess?: () => void, + setOpenModal: (open: boolean) => void, + relationshipId: string, + onUnlinkSuccess?: () => void, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js index 87a18e746e..6c9800926f 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/index.js @@ -1,2 +1,3 @@ +// @flow export { UnlinkModal } from './UnlinkModal'; export { UnlinkAndDeleteModal } from './UnlinkAndDeleteModal'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js new file mode 100644 index 0000000000..9c296e23c6 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js @@ -0,0 +1,70 @@ +// @flow +import i18n from '@dhis2/d2-i18n'; +import log from 'loglevel'; +import { errorCreator, FEATURES, useFeature } from 'capture-core-utils'; +import { handleAPIResponse, REQUESTED_ENTITIES } from 'capture-core/utils/api'; +import { useMutation, useQueryClient } from 'react-query'; +import { useAlert, useDataEngine } from '@dhis2/app-runtime'; +import { ReactQueryAppNamespace } from '../../../../utils/reactQueryHelpers'; + +type Props = { + sourceId: string, +}; + +export type OnDeleteRelationship = ({ relationshipId: string }) => void; + +const deleteRelationshipMutation = { + resource: 'tracker?importStrategy=DELETE&async=false', + type: 'create', + data: ({ relationshipId }) => ({ + relationships: [ + { + relationship: relationshipId, + }, + ], + }), +}; + +export const useDeleteRelationship = ({ sourceId }: Props): { onDeleteRelationship: OnDeleteRelationship } => { + const dataEngine = useDataEngine(); + const queryKey: string = useFeature(FEATURES.exportablePayload) ? 'relationships' : 'instances'; + const queryClient = useQueryClient(); + const { show: showError } = useAlert( + i18n.t('An error occurred while deleting the relationship.'), + { + critical: true, + }, + ); + const { mutate: onDeleteRelationship } = useMutation( + ({ relationshipId }) => dataEngine.mutate(deleteRelationshipMutation, { variables: { relationshipId } }), + { + onMutate: ({ relationshipId }) => { + const prevRelationships = queryClient + .getQueryData([ReactQueryAppNamespace, 'relationships', sourceId]); + + const apiRelationships = handleAPIResponse(REQUESTED_ENTITIES.relationships, prevRelationships); + + const newRelationships = apiRelationships + ?.filter(({ relationship }) => relationship !== relationshipId); + + queryClient.setQueryData( + [ReactQueryAppNamespace, 'relationships', sourceId], + { [queryKey]: newRelationships }); + + return { prevRelationships }; + }, + onError: (error, { relationshipId }, context) => { + log.error(errorCreator('An error occurred while deleting the relationship')({ error, relationshipId })); + showError(); + + if (!context?.prevRelationships) return; + queryClient.setQueryData( + [ReactQueryAppNamespace, 'relationships', sourceId], + context.prevRelationships, + ); + }, + }, + ); + + return { onDeleteRelationship }; +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index dd8910da01..f462b3e419 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -1,28 +1,37 @@ // @flow import React, { useState } from 'react'; import { useHistory } from 'react-router-dom'; -import { FlyoutMenu, IconDelete16, IconLink16, IconMore16, IconView16, Divider, MenuItem } from '@dhis2/ui'; +import { + FlyoutMenu, + IconDelete16, + IconLink16, + IconMore16, + IconView16, + Divider, + MenuItem, +} from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; import { OverflowButton } from '../../Buttons'; import { UnlinkModal, UnlinkAndDeleteModal } from './Modal'; import { buildUrlQueryString } from '../../../utils/routing'; - type Props = { linkedEvent: any, + relationshipId: string, orgUnitId: string, }; export const OverflowMenuComponent = ({ linkedEvent, + relationshipId, orgUnitId, }: Props) => { - const [actionsIsOpen, setActionsIsOpen] = useState(false); - const [unlikModalIsOpen, setUnlinkModalIsOpen] = useState(false); - const [UnlinkAndDeleteModalIsOpen, setUnlinkAndDeleteModalIsOpen] = useState(false); - const { push } = useHistory(); + const [actionsIsOpen, setActionsIsOpen] = useState(false); + const [unlinkModalIsOpen, setUnlinkModalIsOpen] = useState(false); + const [unlinkAndDeleteModalIsOpen, setUnlinkAndDeleteModalIsOpen] = useState(false); + return ( <> } small secondary - dataTest={'widget-event-navigate-to-linked-event'} - component={( + dataTest={'widget-linked-event-overflow-menu'} + component={ } dataTest={'event-overflow-view-linked-event'} onClick={() => { - push(`/enrollmentEventEdit?${buildUrlQueryString({ - eventId: linkedEvent.event, - orgUnitId, - })}`); + push( + `/enrollmentEventEdit?${buildUrlQueryString({ + eventId: linkedEvent.event, + orgUnitId, + })}`, + ); setActionsIsOpen(false); }} /> @@ -53,29 +64,32 @@ export const OverflowMenuComponent = ({ dataTest={'event-overflow-unlink-event'} onClick={() => { setUnlinkModalIsOpen(true); + setActionsIsOpen(false); }} /> } label={i18n.t('Unlink and delete event')} + icon={} + dataTest={'event-overflow-unlink-and-delete-event'} + destructive onClick={() => { setUnlinkAndDeleteModalIsOpen(true); + setActionsIsOpen(false); }} /> - - )} + } /> - {unlikModalIsOpen && ( + {unlinkModalIsOpen && ( )} - {UnlinkAndDeleteModalIsOpen && ( + {unlinkAndDeleteModalIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js index 069efe9da1..477342f90b 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/index.js @@ -1 +1,2 @@ +// @flow export { OverflowMenuComponent } from './OverflowMenu.component'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 1c92fa5897..4df13eccfe 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -48,6 +48,7 @@ const WidgetTwoEventWorkspacePlain = ({ }: Props) => { const { linkedEvent, + relationship, dataValues, isError: isLinkedEventError, isLoading: isLinkedEventLoading, @@ -95,9 +96,8 @@ const WidgetTwoEventWorkspacePlain = ({
)} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js index fa876139d7..36fc4c4409 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js @@ -33,6 +33,7 @@ const calculateRelatedStageRelationships = (event) => { return { relationshipType: stageToStageRelationship.relationshipType, + relationship: stageToStageRelationship.relationship, linkedEvent, }; }; @@ -42,7 +43,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { resource: 'tracker/events', id: originEventId, params: { - fields: 'event,relationships[relationshipType,relationshipName,bidirectional,' + + fields: 'event,relationships[relationship,relationshipType,relationshipName,bidirectional,' + 'from[event[event,dataValues,occurredAt,scheduledAt,status,orgUnit,programStage,program]],' + 'to[event[event,dataValues,*,occurredAt,scheduledAt,status,orgUnit,programStage,program]]' + ']', @@ -61,6 +62,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { const { linkedEvent, + relationship, relationshipType, dataValues, } = useMemo(() => { @@ -75,12 +77,12 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { return { linkedEvent: relatedStageRelationship.linkedEvent, + relationship: relatedStageRelationship.relationship, relationshipType: relatedStageRelationship.relationshipType, dataValues: relatedStageRelationship.linkedEvent.dataValues, }; }, [data]); - // Add fallback query if relationship is missing eventData const { data: fallbackDataValues, isLoading: isLoadingFallback, @@ -101,6 +103,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { return { linkedEvent: dataValues ? linkedEvent : fallbackDataValues, + relationship, relationshipType, dataValues: dataValues || fallbackDataValues?.dataValues, isLoading: isLoading || isLoadingFallback, From 2509447d921ab45a03186328d5e10cc8709c5f31 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Fri, 18 Oct 2024 12:48:18 +0200 Subject: [PATCH 03/19] feat: delete and unlink function --- i18n/en.pot | 7 +--- .../Modal/UnlinkAndDeleteModal.js | 39 +++++-------------- .../Modal/UnlinkAndDeleteModal.types.js | 2 +- .../OverflowMenu/Modal/UnlinkModal.js | 14 ++++--- .../OverflowMenu/Modal/UnlinkModal.types.js | 2 +- .../OverflowMenu/OverflowMenu.component.js | 12 +++--- .../OverflowMenu/OverflowMenu.types.js | 7 ++++ .../WidgetTwoEventWorkspace.container.js | 4 ++ .../hooks/useLinkedEventByOriginId.js | 7 +++- 9 files changed, 43 insertions(+), 51 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index 35fcf26b7e..a390ea37a1 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" -"PO-Revision-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-18T08:53:26.831Z\n" +"PO-Revision-Date: 2024-10-18T08:53:26.831Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1500,9 +1500,6 @@ msgstr "" msgid "There was a problem unlinking and deleting the event" msgstr "There was a problem unlinking and deleting the event" -msgid "Deleting..." -msgstr "Deleting..." - msgid "Yes, unlink and delete event" msgstr "Yes, unlink and delete event" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 206e53dee2..81f6f272bf 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -2,14 +2,13 @@ import React, { useState } from 'react'; import i18n from '@dhis2/d2-i18n'; import { + Button, + ButtonStrip, Modal, + ModalActions, ModalContent, ModalTitle, - ModalActions, - ButtonStrip, - Button, NoticeBox, - CircularLoader, } from '@dhis2/ui'; import { useDataEngine } from '@dhis2/app-runtime'; import type { Props } from './UnlinkAndDeleteModal.types'; @@ -17,7 +16,7 @@ import type { Props } from './UnlinkAndDeleteModal.types'; export const UnlinkAndDeleteModal = ({ setOpenModal, eventId, - onDeleteSuccess, + setUpdateData, }: Props) => { const [errorReports, setErrorReports] = useState([]); const [loading, setLoading] = useState(false); @@ -26,30 +25,16 @@ export const UnlinkAndDeleteModal = ({ const handleDelete = async () => { setLoading(true); setErrorReports([]); + setUpdateData(true); try { const mutation = { - resource: 'tracker', + resource: '/tracker?async=false&importStrategy=DELETE', type: 'create', - params: { - async: 'false', - importStrategy: 'DELETE', - }, - data: { - events: [ - { - event: eventId, - }, - ], - }, + data: { events: [{ event: eventId }] }, }; await dataEngine.mutate(mutation); - - if (onDeleteSuccess) { - onDeleteSuccess(); - } - setOpenModal(false); } catch (error) { const messages = error.details?.response?.errorReports?.map(report => report.message) || [ @@ -58,6 +43,7 @@ export const UnlinkAndDeleteModal = ({ setErrorReports(messages); } finally { setLoading(false); + setUpdateData(false); } }; @@ -90,14 +76,7 @@ export const UnlinkAndDeleteModal = ({ {i18n.t('No, cancel')} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js index 5fc63efe31..309559f93e 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js @@ -2,5 +2,5 @@ export type Props = {| setOpenModal: (open: boolean) => void, eventId: string, - onDeleteSuccess?: () => void, + setUpdateData: Function, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index 786852f98b..6687ff9d05 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -13,7 +13,11 @@ import { import { useDeleteRelationship } from './useDeleteRelationship'; import type { Props } from './UnlinkModal.types'; -export const UnlinkModal = ({ setOpenModal, relationshipId, onUnlinkSuccess }: Props) => { +export const UnlinkModal = ({ + setOpenModal, + relationshipId, + setUpdateData, +}: Props) => { const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(null); @@ -22,17 +26,17 @@ export const UnlinkModal = ({ setOpenModal, relationshipId, onUnlinkSuccess }: P const handleUnlink = async () => { setLoading(true); setErrorMessage(null); + setUpdateData(true); try { await onDeleteRelationship({ relationshipId }); - - if (onUnlinkSuccess) { - onUnlinkSuccess(); - } setOpenModal(false); } catch (error) { setErrorMessage(i18n.t('An error occurred while unlinking the relationship.')); setLoading(false); + } finally { + setLoading(false); + setUpdateData(false); } }; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js index 45693897dd..8e9d66e11b 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js @@ -2,5 +2,5 @@ export type Props = {| setOpenModal: (open: boolean) => void, relationshipId: string, - onUnlinkSuccess?: () => void, + setUpdateData: Function, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index f462b3e419..e0b6cd966b 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -2,29 +2,25 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router-dom'; import { + Divider, FlyoutMenu, IconDelete16, IconLink16, IconMore16, IconView16, - Divider, MenuItem, } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; import { OverflowButton } from '../../Buttons'; import { UnlinkModal, UnlinkAndDeleteModal } from './Modal'; import { buildUrlQueryString } from '../../../utils/routing'; - -type Props = { - linkedEvent: any, - relationshipId: string, - orgUnitId: string, -}; +import type { Props } from './OverflowMenu.types'; export const OverflowMenuComponent = ({ linkedEvent, relationshipId, orgUnitId, + setUpdateData, }: Props) => { const { push } = useHistory(); @@ -84,12 +80,14 @@ export const OverflowMenuComponent = ({ )} {unlinkAndDeleteModalIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js index e69de29bb2..e14aaf6763 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js @@ -0,0 +1,7 @@ +// @flow +export type Props = { + linkedEvent: any, + relationshipId: string, + orgUnitId: string, + setUpdateData: Function, +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 4df13eccfe..1a7228a031 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -50,6 +50,7 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent, relationship, dataValues, + setUpdateData, isError: isLinkedEventError, isLoading: isLinkedEventLoading, } = useLinkedEventByOriginId({ originEventId: eventId }); @@ -86,6 +87,8 @@ const WidgetTwoEventWorkspacePlain = ({ ); } + console.log('linkedEvent', !!linkedEvent); + if (!linkedEvent || !formFoundation || !stage) { return null; } @@ -98,6 +101,7 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent={linkedEvent} relationshipId={relationship} orgUnitId={orgUnitId} + setUpdateData={setUpdateData} />
)} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js index 36fc4c4409..806d22540c 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js @@ -1,5 +1,5 @@ // @flow -import { useMemo } from 'react'; +import { useMemo, useState } from 'react'; import { useApiDataQuery } from '../../../utils/reactQueryHelpers'; type Props = {| @@ -39,6 +39,8 @@ const calculateRelatedStageRelationships = (event) => { }; export const useLinkedEventByOriginId = ({ originEventId }: Props) => { + const [updateData, setUpdateData] = useState(false); + const eventByIdQuery = useMemo(() => ({ resource: 'tracker/events', id: originEventId, @@ -51,7 +53,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { }), [originEventId]); const { data, isLoading, isError, error } = useApiDataQuery( - ['linkedEventByOriginEvent', originEventId], + ['linkedEventByOriginEvent', originEventId, updateData], eventByIdQuery, { enabled: !!originEventId, @@ -105,6 +107,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { linkedEvent: dataValues ? linkedEvent : fallbackDataValues, relationship, relationshipType, + setUpdateData, dataValues: dataValues || fallbackDataValues?.dataValues, isLoading: isLoading || isLoadingFallback, isError: isError || isErrorFallback, From dba31d130be483e40056b6c84b5d2bb681a7637a Mon Sep 17 00:00:00 2001 From: henrikmv Date: Mon, 28 Oct 2024 20:47:08 +0100 Subject: [PATCH 04/19] fix: review changes --- .../Modal/UnlinkAndDeleteModal.js | 63 +++++++++++-------- .../OverflowMenu/Modal/UnlinkModal.js | 2 +- .../Modal/useDeleteRelationship.js | 48 ++++---------- .../WidgetTwoEventWorkspace.container.js | 2 - .../hooks/useLinkedEventByOriginId.js | 4 +- 5 files changed, 54 insertions(+), 65 deletions(-) diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 81f6f272bf..5a98dceb16 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -1,5 +1,5 @@ // @flow -import React, { useState } from 'react'; +import React from 'react'; import i18n from '@dhis2/d2-i18n'; import { Button, @@ -11,6 +11,7 @@ import { NoticeBox, } from '@dhis2/ui'; import { useDataEngine } from '@dhis2/app-runtime'; +import { useMutation } from 'react-query'; import type { Props } from './UnlinkAndDeleteModal.types'; export const UnlinkAndDeleteModal = ({ @@ -18,35 +19,39 @@ export const UnlinkAndDeleteModal = ({ eventId, setUpdateData, }: Props) => { - const [errorReports, setErrorReports] = useState([]); - const [loading, setLoading] = useState(false); const dataEngine = useDataEngine(); - const handleDelete = async () => { - setLoading(true); - setErrorReports([]); - setUpdateData(true); + const deleteEvent = async () => { + const mutation = { + resource: '/tracker?async=false&importStrategy=DELETE', + type: 'create', + data: { events: [{ event: eventId }] }, + }; - try { - const mutation = { - resource: '/tracker?async=false&importStrategy=DELETE', - type: 'create', - data: { events: [{ event: eventId }] }, - }; + return dataEngine.mutate(mutation); + }; - await dataEngine.mutate(mutation); + const mutation = useMutation(deleteEvent, { + onMutate: () => { + setUpdateData(true); + }, + onSuccess: () => { setOpenModal(false); - } catch (error) { - const messages = error.details?.response?.errorReports?.map(report => report.message) || [ - error.message, - ]; - setErrorReports(messages); - } finally { - setLoading(false); setUpdateData(false); - } + }, + onError: () => { + setUpdateData(false); + }, + }); + + const handleDelete = () => { + mutation.mutate(); }; + const errorReports = + mutation.error?.details?.response?.errorReports?.map(report => report.message) || + (mutation.error ? [mutation.error.message] : []); + return ( {i18n.t('Delete event')} @@ -56,7 +61,7 @@ export const UnlinkAndDeleteModal = ({ 'Are you sure you want to unlink and delete the event? This will permanently remove the event and all related data.', )}

- {errorReports.length > 0 && ( + {mutation.isError && ( - - diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index 6687ff9d05..c6293eca9e 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -21,7 +21,7 @@ export const UnlinkModal = ({ const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(null); - const { onDeleteRelationship } = useDeleteRelationship({ sourceId: relationshipId }); + const { onDeleteRelationship } = useDeleteRelationship(); const handleUnlink = async () => { setLoading(true); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js index 9c296e23c6..10a9f2f1be 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js @@ -1,15 +1,9 @@ // @flow import i18n from '@dhis2/d2-i18n'; import log from 'loglevel'; -import { errorCreator, FEATURES, useFeature } from 'capture-core-utils'; -import { handleAPIResponse, REQUESTED_ENTITIES } from 'capture-core/utils/api'; -import { useMutation, useQueryClient } from 'react-query'; +import { errorCreator } from 'capture-core-utils'; +import { useMutation } from 'react-query'; import { useAlert, useDataEngine } from '@dhis2/app-runtime'; -import { ReactQueryAppNamespace } from '../../../../utils/reactQueryHelpers'; - -type Props = { - sourceId: string, -}; export type OnDeleteRelationship = ({ relationshipId: string }) => void; @@ -25,43 +19,27 @@ const deleteRelationshipMutation = { }), }; -export const useDeleteRelationship = ({ sourceId }: Props): { onDeleteRelationship: OnDeleteRelationship } => { +export const useDeleteRelationship = (): { onDeleteRelationship: OnDeleteRelationship } => { const dataEngine = useDataEngine(); - const queryKey: string = useFeature(FEATURES.exportablePayload) ? 'relationships' : 'instances'; - const queryClient = useQueryClient(); const { show: showError } = useAlert( i18n.t('An error occurred while deleting the relationship.'), { critical: true, }, ); + const { mutate: onDeleteRelationship } = useMutation( - ({ relationshipId }) => dataEngine.mutate(deleteRelationshipMutation, { variables: { relationshipId } }), + ({ relationshipId }) => + dataEngine.mutate(deleteRelationshipMutation, { variables: { relationshipId } }), { - onMutate: ({ relationshipId }) => { - const prevRelationships = queryClient - .getQueryData([ReactQueryAppNamespace, 'relationships', sourceId]); - - const apiRelationships = handleAPIResponse(REQUESTED_ENTITIES.relationships, prevRelationships); - - const newRelationships = apiRelationships - ?.filter(({ relationship }) => relationship !== relationshipId); - - queryClient.setQueryData( - [ReactQueryAppNamespace, 'relationships', sourceId], - { [queryKey]: newRelationships }); - - return { prevRelationships }; - }, - onError: (error, { relationshipId }, context) => { - log.error(errorCreator('An error occurred while deleting the relationship')({ error, relationshipId })); - showError(); - - if (!context?.prevRelationships) return; - queryClient.setQueryData( - [ReactQueryAppNamespace, 'relationships', sourceId], - context.prevRelationships, + onError: (error, { relationshipId }) => { + log.error( + errorCreator('An error occurred while deleting the relationship')({ + error, + relationshipId, + }), ); + showError(); }, }, ); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 1a7228a031..00431738b3 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -87,8 +87,6 @@ const WidgetTwoEventWorkspacePlain = ({ ); } - console.log('linkedEvent', !!linkedEvent); - if (!linkedEvent || !formFoundation || !stage) { return null; } diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js index 806d22540c..f657b2d778 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js @@ -33,7 +33,7 @@ const calculateRelatedStageRelationships = (event) => { return { relationshipType: stageToStageRelationship.relationshipType, - relationship: stageToStageRelationship.relationship, + relationshipId: stageToStageRelationship.relationship, linkedEvent, }; }; @@ -79,7 +79,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { return { linkedEvent: relatedStageRelationship.linkedEvent, - relationship: relatedStageRelationship.relationship, + relationship: relatedStageRelationship.relationshipId, relationshipType: relatedStageRelationship.relationshipType, dataValues: relatedStageRelationship.linkedEvent.dataValues, }; From 9d443b143ca41c24adaf07b4962ae6b8857c0e84 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Mon, 28 Oct 2024 21:10:50 +0100 Subject: [PATCH 05/19] fix: remove update data --- .../Modal/UnlinkAndDeleteModal.js | 11 +----- .../Modal/UnlinkAndDeleteModal.types.js | 1 - .../OverflowMenu/Modal/UnlinkModal.js | 3 -- .../OverflowMenu/Modal/UnlinkModal.types.js | 1 - .../OverflowMenu/OverflowMenu.component.js | 3 -- .../OverflowMenu/OverflowMenu.types.js | 1 - .../WidgetTwoEventWorkspace.container.js | 2 -- .../hooks/useLinkedEventByOriginId.js | 36 +++++-------------- 8 files changed, 10 insertions(+), 48 deletions(-) diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 5a98dceb16..3fef5f65e9 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -17,7 +17,6 @@ import type { Props } from './UnlinkAndDeleteModal.types'; export const UnlinkAndDeleteModal = ({ setOpenModal, eventId, - setUpdateData, }: Props) => { const dataEngine = useDataEngine(); @@ -32,15 +31,8 @@ export const UnlinkAndDeleteModal = ({ }; const mutation = useMutation(deleteEvent, { - onMutate: () => { - setUpdateData(true); - }, onSuccess: () => { setOpenModal(false); - setUpdateData(false); - }, - onError: () => { - setUpdateData(false); }, }); @@ -48,8 +40,7 @@ export const UnlinkAndDeleteModal = ({ mutation.mutate(); }; - const errorReports = - mutation.error?.details?.response?.errorReports?.map(report => report.message) || + const errorReports = mutation.error?.details?.response?.errorReports?.map(report => report.message) || (mutation.error ? [mutation.error.message] : []); return ( diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js index 309559f93e..2ff12c7a28 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.types.js @@ -2,5 +2,4 @@ export type Props = {| setOpenModal: (open: boolean) => void, eventId: string, - setUpdateData: Function, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index c6293eca9e..f6d4077d5c 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -16,7 +16,6 @@ import type { Props } from './UnlinkModal.types'; export const UnlinkModal = ({ setOpenModal, relationshipId, - setUpdateData, }: Props) => { const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(null); @@ -26,7 +25,6 @@ export const UnlinkModal = ({ const handleUnlink = async () => { setLoading(true); setErrorMessage(null); - setUpdateData(true); try { await onDeleteRelationship({ relationshipId }); @@ -36,7 +34,6 @@ export const UnlinkModal = ({ setLoading(false); } finally { setLoading(false); - setUpdateData(false); } }; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js index 8e9d66e11b..9ca15081f7 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js @@ -2,5 +2,4 @@ export type Props = {| setOpenModal: (open: boolean) => void, relationshipId: string, - setUpdateData: Function, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index e0b6cd966b..03e98ed013 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -20,7 +20,6 @@ export const OverflowMenuComponent = ({ linkedEvent, relationshipId, orgUnitId, - setUpdateData, }: Props) => { const { push } = useHistory(); @@ -80,14 +79,12 @@ export const OverflowMenuComponent = ({ )} {unlinkAndDeleteModalIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js index e14aaf6763..82a720c374 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js @@ -3,5 +3,4 @@ export type Props = { linkedEvent: any, relationshipId: string, orgUnitId: string, - setUpdateData: Function, }; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 00431738b3..4df13eccfe 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -50,7 +50,6 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent, relationship, dataValues, - setUpdateData, isError: isLinkedEventError, isLoading: isLinkedEventLoading, } = useLinkedEventByOriginId({ originEventId: eventId }); @@ -99,7 +98,6 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent={linkedEvent} relationshipId={relationship} orgUnitId={orgUnitId} - setUpdateData={setUpdateData} /> )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js index f657b2d778..c2453dbcc1 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useLinkedEventByOriginId.js @@ -1,10 +1,10 @@ // @flow -import { useMemo, useState } from 'react'; +import { useMemo } from 'react'; import { useApiDataQuery } from '../../../utils/reactQueryHelpers'; type Props = {| originEventId: string, -|} +|}; const calculateRelatedStageRelationships = (event) => { if (!event || !event.relationships || event.relationships.length === 0) { @@ -39,8 +39,6 @@ const calculateRelatedStageRelationships = (event) => { }; export const useLinkedEventByOriginId = ({ originEventId }: Props) => { - const [updateData, setUpdateData] = useState(false); - const eventByIdQuery = useMemo(() => ({ resource: 'tracker/events', id: originEventId, @@ -53,7 +51,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { }), [originEventId]); const { data, isLoading, isError, error } = useApiDataQuery( - ['linkedEventByOriginEvent', originEventId, updateData], + ['linkedEventByOriginEvent', originEventId], eventByIdQuery, { enabled: !!originEventId, @@ -62,20 +60,11 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { }, ); - const { - linkedEvent, - relationship, - relationshipType, - dataValues, - } = useMemo(() => { - if (!data) { - return {}; - } + const { linkedEvent, relationship, relationshipType, dataValues } = useMemo(() => { + if (!data) return {}; const relatedStageRelationship = calculateRelatedStageRelationships(data); - if (!relatedStageRelationship) { - return {}; - } + if (!relatedStageRelationship) return {}; return { linkedEvent: relatedStageRelationship.linkedEvent, @@ -85,11 +74,7 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { }; }, [data]); - const { - data: fallbackDataValues, - isLoading: isLoadingFallback, - isError: isErrorFallback, - } = useApiDataQuery( + const { data: fallbackDataValues, isLoading: isLoadingFallback } = useApiDataQuery( ['linkedEventDataValuesFallback', linkedEvent?.event], { resource: 'tracker/events', @@ -98,19 +83,16 @@ export const useLinkedEventByOriginId = ({ originEventId }: Props) => { fields: 'event,dataValues,occurredAt,scheduledAt,status,orgUnit,programStage,program', }, }, - { - enabled: !!linkedEvent?.event && !dataValues, - }, + { enabled: !!linkedEvent?.event && !dataValues }, ); return { linkedEvent: dataValues ? linkedEvent : fallbackDataValues, relationship, relationshipType, - setUpdateData, dataValues: dataValues || fallbackDataValues?.dataValues, isLoading: isLoading || isLoadingFallback, - isError: isError || isErrorFallback, + isError, error, }; }; From 74a1fe9d63117db097029a9ad64a6ba394ed36a5 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Wed, 30 Oct 2024 12:30:26 +0100 Subject: [PATCH 06/19] fix: use invalidatequeries --- i18n/en.pot | 13 ++--- .../Modal/UnlinkAndDeleteModal.js | 29 +++++------ .../Modal/UnlinkAndDeleteModal.types.js | 1 + .../OverflowMenu/Modal/UnlinkModal.js | 51 +++++++++++-------- .../OverflowMenu/Modal/UnlinkModal.types.js | 1 + .../Modal/useDeleteRelationship.js | 48 ----------------- .../OverflowMenu/OverflowMenu.component.js | 3 ++ .../OverflowMenu/OverflowMenu.types.js | 1 + .../WidgetTwoEventWorkspace.container.js | 1 + 9 files changed, 55 insertions(+), 93 deletions(-) delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js diff --git a/i18n/en.pot b/i18n/en.pot index 3d127d796a..f502445e5e 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-10-18T08:53:26.831Z\n" -"PO-Revision-Date: 2024-10-18T08:53:26.831Z\n" +"POT-Creation-Date: 2024-10-30T11:27:59.565Z\n" +"PO-Revision-Date: 2024-10-30T11:27:59.565Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1496,9 +1496,6 @@ msgstr "There was a problem unlinking and deleting the event" msgid "Yes, unlink and delete event" msgstr "Yes, unlink and delete event" -msgid "An error occurred while unlinking the relationship." -msgstr "An error occurred while unlinking the relationship." - msgid "Unlink relationship" msgstr "Unlink relationship" @@ -1511,9 +1508,6 @@ msgstr "There was a problem unlinking the relationship" msgid "Yes, unlink relationship" msgstr "Yes, unlink relationship" -msgid "An error occurred while deleting the relationship." -msgstr "An error occurred while deleting the relationship." - msgid "View linked event" msgstr "View linked event" @@ -1596,6 +1590,9 @@ msgstr "" msgid "Yes, delete relationship" msgstr "Yes, delete relationship" +msgid "An error occurred while deleting the relationship." +msgstr "An error occurred while deleting the relationship." + msgid "To open this relationship, please wait until saving is complete" msgstr "To open this relationship, please wait until saving is complete" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 3fef5f65e9..6f465f26be 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -11,18 +11,21 @@ import { NoticeBox, } from '@dhis2/ui'; import { useDataEngine } from '@dhis2/app-runtime'; -import { useMutation } from 'react-query'; +import { useMutation, useQueryClient } from 'react-query'; +import { ReactQueryAppNamespace } from 'capture-core/utils/reactQueryHelpers'; import type { Props } from './UnlinkAndDeleteModal.types'; export const UnlinkAndDeleteModal = ({ setOpenModal, eventId, + originEventId, }: Props) => { const dataEngine = useDataEngine(); + const queryClient = useQueryClient(); const deleteEvent = async () => { const mutation = { - resource: '/tracker?async=false&importStrategy=DELETE', + resource: 'tracker?async=false&importStrategy=DELETE', type: 'create', data: { events: [{ event: eventId }] }, }; @@ -32,17 +35,15 @@ export const UnlinkAndDeleteModal = ({ const mutation = useMutation(deleteEvent, { onSuccess: () => { + queryClient.invalidateQueries([ + ReactQueryAppNamespace, + 'linkedEventByOriginEvent', + originEventId, + ]); setOpenModal(false); }, }); - const handleDelete = () => { - mutation.mutate(); - }; - - const errorReports = mutation.error?.details?.response?.errorReports?.map(report => report.message) || - (mutation.error ? [mutation.error.message] : []); - return ( {i18n.t('Delete event')} @@ -57,12 +58,7 @@ export const UnlinkAndDeleteModal = ({ title={i18n.t('There was a problem unlinking and deleting the event')} error > -
    - {errorReports.map((message, index) => ( - // eslint-disable-next-line react/no-array-index-key -
  • {message}
  • - ))} -
+ {mutation.error?.message}
)} @@ -71,13 +67,12 @@ export const UnlinkAndDeleteModal = ({ - diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js index 9ca15081f7..b2d0b37c85 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.types.js @@ -2,4 +2,5 @@ export type Props = {| setOpenModal: (open: boolean) => void, relationshipId: string, + originEventId: string, |}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js deleted file mode 100644 index 10a9f2f1be..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/useDeleteRelationship.js +++ /dev/null @@ -1,48 +0,0 @@ -// @flow -import i18n from '@dhis2/d2-i18n'; -import log from 'loglevel'; -import { errorCreator } from 'capture-core-utils'; -import { useMutation } from 'react-query'; -import { useAlert, useDataEngine } from '@dhis2/app-runtime'; - -export type OnDeleteRelationship = ({ relationshipId: string }) => void; - -const deleteRelationshipMutation = { - resource: 'tracker?importStrategy=DELETE&async=false', - type: 'create', - data: ({ relationshipId }) => ({ - relationships: [ - { - relationship: relationshipId, - }, - ], - }), -}; - -export const useDeleteRelationship = (): { onDeleteRelationship: OnDeleteRelationship } => { - const dataEngine = useDataEngine(); - const { show: showError } = useAlert( - i18n.t('An error occurred while deleting the relationship.'), - { - critical: true, - }, - ); - - const { mutate: onDeleteRelationship } = useMutation( - ({ relationshipId }) => - dataEngine.mutate(deleteRelationshipMutation, { variables: { relationshipId } }), - { - onError: (error, { relationshipId }) => { - log.error( - errorCreator('An error occurred while deleting the relationship')({ - error, - relationshipId, - }), - ); - showError(); - }, - }, - ); - - return { onDeleteRelationship }; -}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index 03e98ed013..e399dfd673 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -20,6 +20,7 @@ export const OverflowMenuComponent = ({ linkedEvent, relationshipId, orgUnitId, + originEventId, }: Props) => { const { push } = useHistory(); @@ -79,12 +80,14 @@ export const OverflowMenuComponent = ({ )} {unlinkAndDeleteModalIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js index 82a720c374..3282b5ee9a 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js @@ -3,4 +3,5 @@ export type Props = { linkedEvent: any, relationshipId: string, orgUnitId: string, + originEventId: string, }; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 4df13eccfe..e91a4b7630 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -98,6 +98,7 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent={linkedEvent} relationshipId={relationship} orgUnitId={orgUnitId} + originEventId={eventId} /> )} From e39d360e0dccf264e246a61b962963b02b5c5192 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Wed, 30 Oct 2024 13:40:25 +0100 Subject: [PATCH 07/19] fix: remove noticebox and add alerterror --- i18n/en.pot | 13 ++++------- .../Modal/UnlinkAndDeleteModal.js | 23 +++++++++++-------- .../OverflowMenu/Modal/UnlinkModal.js | 23 +++++++++++-------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index 138a2722ee..0914cc6d61 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-10-30T11:27:59.565Z\n" -"PO-Revision-Date: 2024-10-30T11:27:59.565Z\n" +"POT-Creation-Date: 2024-10-30T12:38:53.423Z\n" +"PO-Revision-Date: 2024-10-30T12:38:53.423Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1489,6 +1489,9 @@ msgstr "{{ scheduledEvents }} scheduled" msgid "Stages and Events" msgstr "Stages and Events" +msgid "An error occurred while unlinking and deleting the event." +msgstr "An error occurred while unlinking and deleting the event." + msgid "" "Are you sure you want to unlink and delete the event? This will permanently " "remove the event and all related data." @@ -1496,9 +1499,6 @@ msgstr "" "Are you sure you want to unlink and delete the event? This will permanently " "remove the event and all related data." -msgid "There was a problem unlinking and deleting the event" -msgstr "There was a problem unlinking and deleting the event" - msgid "Yes, unlink and delete event" msgstr "Yes, unlink and delete event" @@ -1508,9 +1508,6 @@ msgstr "Unlink relationship" msgid "Are you sure you want to unlink this relationship?" msgstr "Are you sure you want to unlink this relationship?" -msgid "There was a problem unlinking the relationship" -msgstr "There was a problem unlinking the relationship" - msgid "Yes, unlink relationship" msgstr "Yes, unlink relationship" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 6f465f26be..7b755acb41 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -8,9 +8,9 @@ import { ModalActions, ModalContent, ModalTitle, - NoticeBox, } from '@dhis2/ui'; -import { useDataEngine } from '@dhis2/app-runtime'; +import log from 'loglevel'; +import { useDataEngine, useAlert } from '@dhis2/app-runtime'; import { useMutation, useQueryClient } from 'react-query'; import { ReactQueryAppNamespace } from 'capture-core/utils/reactQueryHelpers'; import type { Props } from './UnlinkAndDeleteModal.types'; @@ -22,6 +22,10 @@ export const UnlinkAndDeleteModal = ({ }: Props) => { const dataEngine = useDataEngine(); const queryClient = useQueryClient(); + const { show: showErrorAlert } = useAlert( + i18n.t('An error occurred while unlinking and deleting the event.'), + { critical: true }, + ); const deleteEvent = async () => { const mutation = { @@ -42,6 +46,13 @@ export const UnlinkAndDeleteModal = ({ ]); setOpenModal(false); }, + onError: (error) => { + showErrorAlert(); + log.error( + `Failed to unlink and delete event with ID: ${eventId}`, + error, + ); + }, }); return ( @@ -53,14 +64,6 @@ export const UnlinkAndDeleteModal = ({ 'Are you sure you want to unlink and delete the event? This will permanently remove the event and all related data.', )}

- {mutation.isError && ( - - {mutation.error?.message} - - )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index 50dae38ef7..a312126348 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -8,9 +8,9 @@ import { ModalActions, ButtonStrip, Button, - NoticeBox, } from '@dhis2/ui'; -import { useDataEngine } from '@dhis2/app-runtime'; +import log from 'loglevel'; +import { useDataEngine, useAlert } from '@dhis2/app-runtime'; import { useMutation, useQueryClient } from 'react-query'; import { ReactQueryAppNamespace } from 'capture-core/utils/reactQueryHelpers'; import type { Props } from './UnlinkModal.types'; @@ -22,6 +22,10 @@ export const UnlinkModal = ({ }: Props) => { const dataEngine = useDataEngine(); const queryClient = useQueryClient(); + const { show: showErrorAlert } = useAlert( + i18n.t('An error occurred while unlinking and deleting the event.'), + { critical: true }, + ); const deleteRelationship = async () => { const mutation = { @@ -42,6 +46,13 @@ export const UnlinkModal = ({ ]); setOpenModal(false); }, + onError: (error) => { + showErrorAlert(); + log.error( + `Failed to remove relationship with id ${relationshipId}`, + error, + ); + }, }); return ( @@ -51,14 +62,6 @@ export const UnlinkModal = ({

{i18n.t('Are you sure you want to unlink this relationship?')}

- {mutation.isError && ( - - {mutation.error?.message} - - )}
From 4cd3f98199772ca6e47a0f1c934d141641dcc0e8 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Mon, 4 Nov 2024 19:07:05 +0100 Subject: [PATCH 08/19] feat: add validation --- i18n/en.pot | 30 ++++-- .../Modal/UnlinkAndDeleteModal.js | 2 +- .../OverflowMenu/Modal/UnlinkModal.js | 2 +- .../OverflowMenu/OverflowMenu.component.js | 97 +++++++++++-------- .../OverflowMenu/OverflowMenu.types.js | 2 + .../WidgetTwoEventWorkspace.container.js | 6 +- .../WidgetTwoEventWorkspace/hooks/index.js | 3 + .../hooks/useRelationshipTypeAccess.js | 28 ++++++ .../capture-core/dataQueries/index.js | 2 + .../dataQueries/useOrganisationUnits.js | 25 +++++ 10 files changed, 146 insertions(+), 51 deletions(-) create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/index.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js create mode 100644 src/core_modules/capture-core/dataQueries/useOrganisationUnits.js diff --git a/i18n/en.pot b/i18n/en.pot index 0914cc6d61..50e6903ab0 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-10-30T12:38:53.423Z\n" -"PO-Revision-Date: 2024-10-30T12:38:53.423Z\n" +"POT-Creation-Date: 2024-11-04T17:57:57.557Z\n" +"PO-Revision-Date: 2024-11-04T17:57:57.557Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1493,11 +1493,11 @@ msgid "An error occurred while unlinking and deleting the event." msgstr "An error occurred while unlinking and deleting the event." msgid "" -"Are you sure you want to unlink and delete the event? This will permanently " -"remove the event and all related data." +"Are you sure you want delete the relationsship and the related event? This " +"will permanently remove the event and all related data." msgstr "" -"Are you sure you want to unlink and delete the event? This will permanently " -"remove the event and all related data." +"Are you sure you want delete the relationsship and the related event? This " +"will permanently remove the event and all related data." msgid "Yes, unlink and delete event" msgstr "Yes, unlink and delete event" @@ -1505,8 +1505,12 @@ msgstr "Yes, unlink and delete event" msgid "Unlink relationship" msgstr "Unlink relationship" -msgid "Are you sure you want to unlink this relationship?" -msgstr "Are you sure you want to unlink this relationship?" +msgid "" +"Are you sure you want to delete the relationship between these two events? " +"This will only delete the relationship, not the other event" +msgstr "" +"Are you sure you want to delete the relationship between these two events? " +"This will only delete the relationship, not the other event" msgid "Yes, unlink relationship" msgstr "Yes, unlink relationship" @@ -1514,9 +1518,19 @@ msgstr "Yes, unlink relationship" msgid "View linked event" msgstr "View linked event" +msgid "You do not have access to remove the relationship between these two events" +msgstr "You do not have access to remove the relationship between these two events" + msgid "Unlink event" msgstr "Unlink event" +msgid "" +"You do not have access remove the relationship between these two events and " +"delete the other event" +msgstr "" +"You do not have access remove the relationship between these two events and " +"delete the other event" + msgid "Unlink and delete event" msgstr "Unlink and delete event" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 7b755acb41..875aefa4e4 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -61,7 +61,7 @@ export const UnlinkAndDeleteModal = ({

{i18n.t( - 'Are you sure you want to unlink and delete the event? This will permanently remove the event and all related data.', + 'Are you sure you want delete the relationsship and the related event? This will permanently remove the event and all related data.', )}

diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index a312126348..3556c72c35 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -61,7 +61,7 @@ export const UnlinkModal = ({ {i18n.t('Unlink relationship')} -

{i18n.t('Are you sure you want to unlink this relationship?')}

+

{i18n.t('Are you sure you want to delete the relationship between these two events? This will only delete the relationship, not the other event')}

diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index e399dfd673..06911a9684 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -11,81 +11,100 @@ import { MenuItem, } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; +import { ConditionalTooltip } from '../../Tooltips/ConditionalTooltip'; import { OverflowButton } from '../../Buttons'; import { UnlinkModal, UnlinkAndDeleteModal } from './Modal'; import { buildUrlQueryString } from '../../../utils/routing'; import type { Props } from './OverflowMenu.types'; +import { useRelationshipTypeAccess } from '../hooks'; export const OverflowMenuComponent = ({ linkedEvent, relationshipId, orgUnitId, originEventId, + stageWriteAccess, + relationshipType, }: Props) => { const { push } = useHistory(); + const [isActionsOpen, setIsActionsOpen] = useState(false); + const [isUnlinkModalOpen, setIsUnlinkModalOpen] = useState(false); + const [isUnlinkAndDeleteModalOpen, setIsUnlinkAndDeleteModalOpen] = useState(false); + const { relationshipTypeWriteAccess } = useRelationshipTypeAccess(relationshipType); - const [actionsIsOpen, setActionsIsOpen] = useState(false); - const [unlinkModalIsOpen, setUnlinkModalIsOpen] = useState(false); - const [unlinkAndDeleteModalIsOpen, setUnlinkAndDeleteModalIsOpen] = useState(false); + const handleViewLinkedEvent = () => { + push(`/enrollmentEventEdit?${buildUrlQueryString({ eventId: linkedEvent.event, orgUnitId })}`); + setIsActionsOpen(false); + }; + + const handleUnlinkEvent = () => { + setIsUnlinkModalOpen(true); + setIsActionsOpen(false); + }; + + const handleUnlinkAndDeleteEvent = () => { + setIsUnlinkAndDeleteModalOpen(true); + setIsActionsOpen(false); + }; return ( <> setActionsIsOpen(prev => !prev)} + open={isActionsOpen} + onClick={() => setIsActionsOpen(prev => !prev)} icon={} small secondary - dataTest={'widget-linked-event-overflow-menu'} + dataTest="widget-linked-event-overflow-menu" component={ } - dataTest={'event-overflow-view-linked-event'} - onClick={() => { - push( - `/enrollmentEventEdit?${buildUrlQueryString({ - eventId: linkedEvent.event, - orgUnitId, - })}`, - ); - setActionsIsOpen(false); - }} + dataTest="event-overflow-view-linked-event" + onClick={handleViewLinkedEvent} /> - } - dataTest={'event-overflow-unlink-event'} - onClick={() => { - setUnlinkModalIsOpen(true); - setActionsIsOpen(false); - }} - /> - } - dataTest={'event-overflow-unlink-and-delete-event'} - destructive - onClick={() => { - setUnlinkAndDeleteModalIsOpen(true); - setActionsIsOpen(false); - }} - /> + + } + disabled={!relationshipTypeWriteAccess} + dense + dataTest="event-overflow-unlink-event" + onClick={handleUnlinkEvent} + /> + + + } + disabled={!stageWriteAccess || !relationshipTypeWriteAccess} + dense + destructive + dataTest="event-overflow-unlink-and-delete-event" + onClick={handleUnlinkAndDeleteEvent} + /> + } /> - {unlinkModalIsOpen && ( + {isUnlinkModalOpen && ( )} - {unlinkAndDeleteModalIsOpen && ( + {isUnlinkAndDeleteModalOpen && ( diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js index 3282b5ee9a..61b1f85de3 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.types.js @@ -4,4 +4,6 @@ export type Props = { relationshipId: string, orgUnitId: string, originEventId: string, + stageWriteAccess: boolean, + relationshipType: string, }; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index e91a4b7630..37be7a7963 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -6,14 +6,13 @@ import { withStyles } from '@material-ui/core/'; import type { Props } from './WidgetTwoEventWorkspace.types'; import { useMetadataForProgramStage } from '../DataEntries/common/ProgramStage/useMetadataForProgramStage'; import { Widget } from '../Widget'; -import { useLinkedEventByOriginId } from './hooks/useLinkedEventByOriginId'; +import { useLinkedEventByOriginId, useClientDataValues } from './hooks'; import { WidgetTwoEventWorkspaceComponent } from './WidgetTwoEventWorkspace.component'; import { OverflowMenuComponent } from './OverflowMenu'; import { EnrollmentPageKeys, } from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; -import { useClientDataValues } from './hooks/useClientDataValues'; const styles = { menu: { @@ -50,6 +49,7 @@ const WidgetTwoEventWorkspacePlain = ({ linkedEvent, relationship, dataValues, + relationshipType, isError: isLinkedEventError, isLoading: isLinkedEventLoading, } = useLinkedEventByOriginId({ originEventId: eventId }); @@ -97,8 +97,10 @@ const WidgetTwoEventWorkspacePlain = ({ )} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/index.js new file mode 100644 index 0000000000..195e176eef --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/index.js @@ -0,0 +1,3 @@ +export { useClientDataValues } from './useClientDataValues'; +export { useLinkedEventByOriginId } from './useLinkedEventByOriginId'; +export { useRelationshipTypeAccess } from './useRelationshipTypeAccess'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js new file mode 100644 index 0000000000..cf4e55990a --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js @@ -0,0 +1,28 @@ +// @flow +import { useIndexedDBQuery } from '../../../utils/reactQueryHelpers'; +import { getUserStorageController } from '../../../storageControllers'; +import { userStores } from '../../../storageControllers/stores'; + +export const useRelationshipTypeAccess = (relationshipTypeId: string) => { + const storageController = getUserStorageController(); + console.log('relationshipTypeId', relationshipTypeId); + + const { data, error, isLoading } = useIndexedDBQuery( + ['relationshipTypeAccess', relationshipTypeId], + () => + storageController.get(userStores.RELATIONSHIP_TYPES, relationshipTypeId, { + project: ({ access }) => ({ + hasWriteAccess: access?.write ?? false, + }), + }), + { + enabled: !!relationshipTypeId, + }, + ); + + return { + relationshipTypeWriteAccess: data?.hasWriteAccess, + isLoading, + error, + }; +}; diff --git a/src/core_modules/capture-core/dataQueries/index.js b/src/core_modules/capture-core/dataQueries/index.js index c77469ff0c..7b929714ea 100644 --- a/src/core_modules/capture-core/dataQueries/index.js +++ b/src/core_modules/capture-core/dataQueries/index.js @@ -1,2 +1,4 @@ export { useOrganisationUnit } from './useOrganisationUnit'; +export { useOrganisationUnits } from './useOrganisationUnits'; + export { useOrgUnitAutoSelect } from './useOrgUnitsForAutoSelect'; diff --git a/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js b/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js new file mode 100644 index 0000000000..9baac6fe9b --- /dev/null +++ b/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js @@ -0,0 +1,25 @@ +// @flow +import { useApiMetadataQuery } from '../utils/reactQueryHelpers'; + +export const useOrganisationUnits = (customQueryOptions: Object) => { + const queryKey = ['organisationUnits']; + const queryFn = { + resource: 'organisationUnits', + params: { + fields: ['id, displayName~rename(name), path'], + withinUserHierarchy: true, + }, + }; + const defaultQueryOptions = { + select: ({ organisationUnits }) => organisationUnits, + }; + + const queryOptions = { ...defaultQueryOptions, ...customQueryOptions }; + + const { data, isLoading } = useApiMetadataQuery(queryKey, queryFn, queryOptions); + + return { + isLoading, + data, + }; +}; From 4c596fc26569a318930ddc76df6d4cf9891292af Mon Sep 17 00:00:00 2001 From: henrikmv Date: Tue, 5 Nov 2024 11:35:49 +0100 Subject: [PATCH 09/19] fix: indexeddb write access --- .../WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js index cf4e55990a..484dbdf0c6 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js @@ -12,7 +12,7 @@ export const useRelationshipTypeAccess = (relationshipTypeId: string) => { () => storageController.get(userStores.RELATIONSHIP_TYPES, relationshipTypeId, { project: ({ access }) => ({ - hasWriteAccess: access?.write ?? false, + hasWriteAccess: access?.data?.write ?? false, }), }), { From f6c961013193ef1099474fa7e192f4401b4fa43c Mon Sep 17 00:00:00 2001 From: henrikmv Date: Wed, 6 Nov 2024 13:51:21 +0100 Subject: [PATCH 10/19] fix: review comments --- i18n/en.pot | 8 +++--- .../Modal/UnlinkAndDeleteModal.js | 4 +-- .../hooks/useRelationshipTypeAccess.js | 1 - .../WidgetsChangelog/common/hooks/index.js | 1 - .../capture-core/dataQueries/index.js | 2 -- .../dataQueries/useOrganisationUnits.js | 25 ------------------- 6 files changed, 6 insertions(+), 35 deletions(-) delete mode 100644 src/core_modules/capture-core/dataQueries/useOrganisationUnits.js diff --git a/i18n/en.pot b/i18n/en.pot index cdff7f2122..8439b6cd95 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-11-04T17:57:57.557Z\n" -"PO-Revision-Date: 2024-11-04T17:57:57.557Z\n" +"POT-Creation-Date: 2024-11-06T12:51:22.564Z\n" +"PO-Revision-Date: 2024-11-06T12:51:22.564Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1497,10 +1497,10 @@ msgid "An error occurred while unlinking and deleting the event." msgstr "An error occurred while unlinking and deleting the event." msgid "" -"Are you sure you want delete the relationsship and the related event? This " +"Are you sure you want delete the relationship and the related event? This " "will permanently remove the event and all related data." msgstr "" -"Are you sure you want delete the relationsship and the related event? This " +"Are you sure you want delete the relationship and the related event? This " "will permanently remove the event and all related data." msgid "Yes, unlink and delete event" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 875aefa4e4..647a60552f 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -56,12 +56,12 @@ export const UnlinkAndDeleteModal = ({ }); return ( - + {i18n.t('Delete event')}

{i18n.t( - 'Are you sure you want delete the relationsship and the related event? This will permanently remove the event and all related data.', + 'Are you sure you want delete the relationship and the related event? This will permanently remove the event and all related data.', )}

diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js index 484dbdf0c6..a4befc955d 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/hooks/useRelationshipTypeAccess.js @@ -5,7 +5,6 @@ import { userStores } from '../../../storageControllers/stores'; export const useRelationshipTypeAccess = (relationshipTypeId: string) => { const storageController = getUserStorageController(); - console.log('relationshipTypeId', relationshipTypeId); const { data, error, isLoading } = useIndexedDBQuery( ['relationshipTypeAccess', relationshipTypeId], diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js index 1cc9b74cc8..af7f2f4226 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js @@ -1,3 +1,2 @@ // @flow - export { useChangelogData } from './useChangelogData'; diff --git a/src/core_modules/capture-core/dataQueries/index.js b/src/core_modules/capture-core/dataQueries/index.js index 7b929714ea..c77469ff0c 100644 --- a/src/core_modules/capture-core/dataQueries/index.js +++ b/src/core_modules/capture-core/dataQueries/index.js @@ -1,4 +1,2 @@ export { useOrganisationUnit } from './useOrganisationUnit'; -export { useOrganisationUnits } from './useOrganisationUnits'; - export { useOrgUnitAutoSelect } from './useOrgUnitsForAutoSelect'; diff --git a/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js b/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js deleted file mode 100644 index 9baac6fe9b..0000000000 --- a/src/core_modules/capture-core/dataQueries/useOrganisationUnits.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow -import { useApiMetadataQuery } from '../utils/reactQueryHelpers'; - -export const useOrganisationUnits = (customQueryOptions: Object) => { - const queryKey = ['organisationUnits']; - const queryFn = { - resource: 'organisationUnits', - params: { - fields: ['id, displayName~rename(name), path'], - withinUserHierarchy: true, - }, - }; - const defaultQueryOptions = { - select: ({ organisationUnits }) => organisationUnits, - }; - - const queryOptions = { ...defaultQueryOptions, ...customQueryOptions }; - - const { data, isLoading } = useApiMetadataQuery(queryKey, queryFn, queryOptions); - - return { - isLoading, - data, - }; -}; From 73eb06b5db882ff0b4951daadf237e5a35bdccb6 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Wed, 27 Nov 2024 14:39:07 +0100 Subject: [PATCH 11/19] fix: user message improvements --- i18n/en.pot | 53 ++++++++----------- .../Modal/UnlinkAndDeleteModal.js | 6 +-- .../OverflowMenu/Modal/UnlinkModal.js | 6 +-- .../OverflowMenu/OverflowMenu.component.js | 6 +-- 4 files changed, 32 insertions(+), 39 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index 8439b6cd95..f5f3c016f4 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-11-06T12:51:22.564Z\n" -"PO-Revision-Date: 2024-11-06T12:51:22.564Z\n" +"POT-Creation-Date: 2024-11-21T13:57:21.323Z\n" +"PO-Revision-Date: 2024-11-21T13:57:21.323Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1496,47 +1496,40 @@ msgstr "Stages and Events" msgid "An error occurred while unlinking and deleting the event." msgstr "An error occurred while unlinking and deleting the event." +msgid "Unlink and delete linked event" +msgstr "Unlink and delete linked event" + msgid "" -"Are you sure you want delete the relationship and the related event? This " -"will permanently remove the event and all related data." +"Are you sure you want to remove the link and delete the linked event? This " +"action permanently removes the link, linked event, and all related data." msgstr "" -"Are you sure you want delete the relationship and the related event? This " -"will permanently remove the event and all related data." +"Are you sure you want to remove the link and delete the linked event? This " +"action permanently removes the link, linked event, and all related data." -msgid "Yes, unlink and delete event" -msgstr "Yes, unlink and delete event" +msgid "Yes, unlink and delete linked event" +msgstr "Yes, unlink and delete linked event" -msgid "Unlink relationship" -msgstr "Unlink relationship" +msgid "Unlink event" +msgstr "Unlink event" msgid "" -"Are you sure you want to delete the relationship between these two events? " -"This will only delete the relationship, not the other event" +"Are you sure you want to remove the link between these events? This action " +"removes the link itself, but the linked event will remain." msgstr "" -"Are you sure you want to delete the relationship between these two events? " -"This will only delete the relationship, not the other event" +"Are you sure you want to remove the link between these events? This action " +"removes the link itself, but the linked event will remain." -msgid "Yes, unlink relationship" -msgstr "Yes, unlink relationship" +msgid "Yes, unlink event" +msgstr "Yes, unlink event" msgid "View linked event" msgstr "View linked event" -msgid "You do not have access to remove the relationship between these two events" -msgstr "You do not have access to remove the relationship between these two events" - -msgid "Unlink event" -msgstr "Unlink event" - -msgid "" -"You do not have access remove the relationship between these two events and " -"delete the other event" -msgstr "" -"You do not have access remove the relationship between these two events and " -"delete the other event" +msgid "You do not have access to remove the link between these events" +msgstr "You do not have access to remove the link between these events" -msgid "Unlink and delete event" -msgstr "Unlink and delete event" +msgid "You do not have access to remove the link and delete the linked event" +msgstr "You do not have access to remove the link and delete the linked event" msgid "An error occurred while loading the widget." msgstr "An error occurred while loading the widget." diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js index 647a60552f..abe1af1713 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkAndDeleteModal.js @@ -57,11 +57,11 @@ export const UnlinkAndDeleteModal = ({ return ( - {i18n.t('Delete event')} + {i18n.t('Unlink and delete linked event')}

{i18n.t( - 'Are you sure you want delete the relationship and the related event? This will permanently remove the event and all related data.', + 'Are you sure you want to remove the link and delete the linked event? This action permanently removes the link, linked event, and all related data.', )}

@@ -78,7 +78,7 @@ export const UnlinkAndDeleteModal = ({ onClick={() => mutation.mutate()} disabled={mutation.isLoading} > - {i18n.t('Yes, unlink and delete event')} + {i18n.t('Yes, unlink and delete linked event')}
diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js index 3556c72c35..66cf139e74 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/Modal/UnlinkModal.js @@ -58,10 +58,10 @@ export const UnlinkModal = ({ return ( - {i18n.t('Unlink relationship')} + {i18n.t('Unlink event')} -

{i18n.t('Are you sure you want to delete the relationship between these two events? This will only delete the relationship, not the other event')}

+

{i18n.t('Are you sure you want to remove the link between these events? This action removes the link itself, but the linked event will remain.')}

@@ -73,7 +73,7 @@ export const UnlinkModal = ({ onClick={() => mutation.mutate()} disabled={mutation.isLoading} > - {i18n.t('Yes, unlink relationship')} + {i18n.t('Yes, unlink event')} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js index 06911a9684..df12185fec 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/OverflowMenu/OverflowMenu.component.js @@ -66,7 +66,7 @@ export const OverflowMenuComponent = ({ /> } disabled={!stageWriteAccess || !relationshipTypeWriteAccess} dense From e3284e970b1a833f2dfda06a00ed5e1095132496 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Thu, 5 Dec 2024 09:14:40 +0100 Subject: [PATCH 12/19] Merge remote-tracking branch 'origin/master' into hv/feat/DHIS2-18017_AbilityToUnlinkEvent --- CHANGELOG.md | 85 + .../EnrollmentAddEventPageForm.feature | 6 +- .../EnrollmentAddEventPageNavigation.feature | 2 +- .../e2e/EnrollmentAddEventPage/sharedSteps.js | 6 +- .../EnrollmentEditEventPageForm.feature | 36 +- .../EnrollmentEditEventPageForm.js | 20 +- .../EnrollmentEditEventPageNavigation.feature | 12 +- .../EnrollmentEditEventPageNavigation.js | 15 +- .../EnrollmentPageNavigation.js | 11 +- .../EnrollmentQuickActions.js | 8 +- cypress/e2e/EnrollmentPage/sharedSteps.js | 4 + cypress/e2e/NewPage/NewPage.js | 8 +- .../e2e/ScopeSelector/ScopeSelector.feature | 18 +- cypress/e2e/ScopeSelector/ScopeSelector.js | 12 +- .../e2e/TopBarActions/TopBarActions.feature | 4 +- cypress/e2e/TopBarActions/TopBarActions.js | 8 +- .../WidgetAssignee/index.js | 3 +- .../WidgetEventNote/index.js | 8 +- .../WidgetsForEnrollmentAddEventPage.js | 4 +- .../WidgetsForEnrollmentDashboard.js | 4 +- .../EventBulkActions/EventBulkAction.feature | 49 + .../EventBulkActions/EventBulkAction.js | 73 + .../EventWorkingListsUser.js | 20 +- .../TeiBulkActions/TeiBulkActions.feature | 92 + .../TeiBulkActions/TeiBulkActions.js | 284 ++ cypress/e2e/WorkingLists/sharedSteps.js | 79 +- .../event-bulk-actions-selected-rows.png | Bin 0 -> 126931 bytes ...tity-bulk-actions-complete-enrollments.png | Bin 0 -> 148631 bytes ...entity-bulk-actions-delete-enrollments.png | Bin 0 -> 159251 bytes ...cked-entity-bulk-actions-selected-rows.png | Bin 0 -> 128972 bytes docs/user/using-the-capture-app.md | 42 + i18n/cs.po | 57 +- i18n/en.pot | 254 +- i18n/es.po | 25 +- i18n/es_419.po | 17 +- i18n/lo.po | 19 +- i18n/nb.po | 19 +- i18n/nl.po | 15 +- i18n/pt.po | 216 +- i18n/ru.po | 14 +- i18n/zh.po | 23 +- i18n/zh_CN.po | 10 +- package.json | 6 +- packages/rules-engine/package.json | 2 +- .../featuresSupport/support.js | 2 + .../EnrollmentBreadcrumb.js | 171 + .../hooks/useWorkingListLabel.js | 60 + .../Breadcrumbs/EnrollmentBreadcrumb/index.js | 3 + .../EventBreadcrumb/EventBreadcrumb.js | 106 + .../hooks/useWorkingListLabel.js | 40 + .../Breadcrumbs/EventBreadcrumb/index.js | 3 + .../Breadcrumbs/common/BreadcrumbItem.js | 47 + .../SingleEventRegistrationEntry.component.js | 1 - .../SingleEventRegistrationEntry.container.js | 3 +- .../Date/DateFilter.component.js | 142 +- .../Date/DateFilterManager.component.js | 12 +- .../FiltersForTypes/Date/End.component.js | 7 - .../FiltersForTypes/Date/From.component.js | 43 +- .../Date/RangeFilter.component.js | 6 - .../FiltersForTypes/Date/To.component.js | 46 +- .../Date/dateFilterDataGetter.js | 8 +- .../FiltersForTypes/Date/types/date.types.js | 6 + .../FiltersForTypes/Date/types/index.js | 2 +- .../Numeric/NumericFilter.component.js | 6 + .../DateAndTime/D2Date/D2Date.component.js | 207 +- .../D2Date/D2DateCalendar.component.js | 158 - .../D2Date/D2DatePopup.component.js | 94 - .../DateAndTime/D2Date/customStyles.css | 12 - .../DateAndTime/D2Date/d2DatePopup.const.js | 16 - .../FormFields/DateAndTime/D2Date/getTheme.js | 14 - .../FormFields/Options/FormGroup.component.js | 2 + .../List/OnlineList/OnlineList.component.js | 62 +- .../ListViewContextBuilder.component.js | 10 + .../ListView/Main/ListViewMain.component.js | 36 +- .../ListView/Main/listViewMain.types.js | 8 +- .../ListView/types/listView.types.js | 15 +- .../EnrollmentPageDefault.container.js | 29 +- .../EnrollmentPageDefault.types.js | 11 +- ...EnrollmentAddEventPageDefault.container.js | 23 +- .../EnrollmentAddEventPageDefault.types.js | 9 +- .../EnrollmentEditEventPage.component.js | 8 + .../EnrollmentEditEventPage.container.js | 28 +- .../EnrollmentEditEventPage.types.js | 7 +- .../PageLayout/DefaultPageLayout.constants.js | 4 - .../EventDetailsSection.component.js | 3 + .../EventDetailsSection.container.js | 1 + .../ViewEventComponent/ViewEvent.component.js | 68 +- .../ViewEventComponent/ViewEvent.container.js | 7 +- .../ViewEvent/ViewEventPage.component.js | 1 + .../DefaultEnrollmentLayout.constants.js | 8 - .../DefaultEnrollmentLayout.types.js | 1 - .../EnrollmentPageLayout.js | 56 +- .../WidgetEventEditWrapper.js | 24 +- .../Pagination/withDefaultNavigation.js | 9 +- .../Pagination/withRowsPerPageSelector.js | 4 +- .../ScopeSelector/hooks/useSetProgramId.js | 2 +- .../DataEntry/fieldValidators/index.js | 5 + .../orgUnit.validatorContainersGetter.js | 15 + .../EventChangelogWrapper.component.js | 3 +- .../EventChangelogWrapper.types.js | 1 + .../ViewEventDataEntry.component.js | 24 +- .../viewEventDataEntry.actions.js | 7 +- .../WidgetEventEdit.container.js | 216 +- .../WidgetHeader/WidgetHeader.container.js | 129 + .../WidgetHeader/WidgetHeader.types.js | 16 + .../WidgetEventEdit/WidgetHeader/index.js | 2 + .../OverflowMenu/OverflowMenu.component.js | 2 + .../OverflowMenu/OverflowMenu.container.js | 2 + .../OverflowMenu/OverflowMenu.types.js | 2 + ...TrackedEntityChangelogWrapper.component.js | 8 +- .../TrackedEntityChangelogWrapper.types.js | 1 + .../WidgetProfile/WidgetProfile.component.js | 1 + .../Stages/Stage/StageDetail/hooks/helpers.js | 7 +- .../WidgetHeader/WidgetHeader.container.js | 63 + .../WidgetHeader/WidgetHeader.types.js | 21 + .../WidgetHeader/index.js | 2 + .../WidgetTwoEventWorkspace.container.js | 110 +- .../WidgetTwoEventWorkspace.types.js | 12 +- .../WidgetTwoEventWorkspaceWrapper.const.js | 5 + .../WidgetWrapper/WidgetWrapper.container.js | 74 + .../WidgetWrapper/WidgetWrapper.types.js | 15 + .../WidgetWrapper/index.js | 2 + .../WidgetTwoEventWorkspace/index.js | 1 + .../WidgetEventChangelog.js | 3 + .../WidgetTrackedEntityChangelog.js | 3 + .../common/Changelog/Changelog.container.js | 30 +- .../ChangelogCells/ChangelogValueCell.js | 31 +- .../ChangelogTable/ChangelogTableRow.js | 4 +- .../WidgetsChangelog/common/hooks/index.js | 1 + .../common/hooks/useChangelogData.js | 92 +- .../common/hooks/useListDataValues.js | 177 + .../utils/getSubValueForChangelogData.js | 148 + ...ventWorkingListsReduxProvider.container.js | 4 +- .../eventWorkingListsReduxProvider.types.js | 2 +- ...ventWorkingListsUpdateTrigger.component.js | 7 +- ...ventWorkingListsViewMenuSetup.component.js | 50 +- .../EventWorkingListsViewMenuSetup.types.js | 7 + .../Actions/CompleteAction/CompleteAction.js | 169 + .../hooks/useBulkCompleteEvents.js | 141 + .../Actions/DeleteAction/DeleteAction.js | 102 + .../EventBulkActions/Actions/index.js | 4 + .../EventBulkActions/EventBulkActions.js | 47 + .../EventBulkActions/index.js | 3 + .../TeiWorkingListsReduxProvider.container.js | 4 +- .../teiWorkingListsReduxProvider.types.js | 2 +- .../Setup/TeiWorkingListsSetup.component.js | 10 +- .../Setup/teiWorkingListsSetup.types.js | 3 +- .../Actions/CompleteAction/CompleteAction.js | 239 + .../hooks/useCompleteBulkEnrollments.js | 267 ++ .../Actions/CompleteAction/index.js | 3 + .../DeleteEnrollmentsAction.js | 56 + .../CustomCheckbox/CustomCheckbox.js | 80 + .../CustomCheckbox/index.js | 3 + .../EnrollmentDeleteModal.js | 188 + .../EnrollmentDeleteModal/index.js | 3 + .../hooks/useDeleteEnrollments.js | 159 + .../Actions/DeleteEnrollmentsAction/index.js | 3 + .../DeleteTeiAction/DeleteTeiAction.js | 87 + .../hooks/useCascadeDeleteTei.js | 51 + .../Actions/DeleteTeiAction/index.js | 3 + .../TrackedEntityBulkActions/Actions/index.js | 4 + .../TrackedEntityBulkActions.component.js | 51 + .../TrackedEntityBulkActions.container.js | 40 + .../TrackedEntityBulkActions.types.js | 17 + .../TrackedEntityBulkActions/index.js | 3 + ...ckerWorkingListsViewMenuSetup.component.js | 45 +- .../TrackerWorkingListsViewMenuSetup.types.js | 13 + .../BulkActionBar/BulkActionBar.component.js | 50 + .../BulkActionBar/BulkActionBar.container.js | 19 + .../BulkActionBar/BulkActionBar.types.js | 16 + .../BulkActionBar/hooks/index.js | 3 + .../hooks/useSelectedRowsController.js | 66 + .../WorkingListsBase/BulkActionBar/index.js | 4 + ...istViewBuilderContextProvider.component.js | 28 +- ...stsListViewBuilderContextProvider.types.js | 24 +- .../WorkingListsContextBuilder.component.js | 23 +- .../workingListsContextBuilder.types.js | 11 +- .../ListViewBuilder.component.js | 12 +- .../TemplateSelector.component.js | 3 + .../TemplateSelectorChip.component.js | 9 +- .../TemplatesLoader/templatesLoader.types.js | 5 + .../TemplatesManager.component.js | 10 +- .../workingListsBase.types.js | 30 +- .../useWorkingListsCommonStateManagement.js | 1 + .../capture-core/converters/clientToView.js | 8 +- .../utils/userInfo/useAuthority.js | 27 + yarn.lock | 4094 +++++++++-------- 187 files changed, 7507 insertions(+), 3282 deletions(-) create mode 100644 cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature create mode 100644 cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js create mode 100644 cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature create mode 100644 cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js create mode 100644 docs/user/resources/images/event-bulk-actions-selected-rows.png create mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png create mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png create mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js create mode 100644 src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js delete mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js delete mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js delete mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css delete mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js delete mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js create mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js create mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js create mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js create mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js create mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js create mode 100644 src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js create mode 100644 src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js create mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js create mode 100644 src/core_modules/capture-core/utils/userInfo/useAuthority.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ec4072b5a..37492757dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,88 @@ +# [101.18.0](https://github.com/dhis2/capture-app/compare/v101.17.0...v101.18.0) (2024-11-28) + + +### Features + +* [DHIS2-16337] Org unit in view event page ([#3882](https://github.com/dhis2/capture-app/issues/3882)) ([c605e82](https://github.com/dhis2/capture-app/commit/c605e828622aa9f9b0c10f96359ba1b037c8e0ee)) + +# [101.17.0](https://github.com/dhis2/capture-app/compare/v101.16.7...v101.17.0) (2024-11-25) + + +### Features + +* [DHIS2-15463] Use dhis2 ui calendarInput component in working list ([#3712](https://github.com/dhis2/capture-app/issues/3712)) ([5f27455](https://github.com/dhis2/capture-app/commit/5f27455b136d6d994adea0788bf2d0683dfe5d06)) + +## [101.16.7](https://github.com/dhis2/capture-app/compare/v101.16.6...v101.16.7) (2024-11-25) + + +### Bug Fixes + +* [DHIS2-16801] events scheduled for today's date not showing today ([#3856](https://github.com/dhis2/capture-app/issues/3856)) ([d63e124](https://github.com/dhis2/capture-app/commit/d63e124d1c0702898b453be8cfbdd0a5f4620ba5)) + +## [101.16.6](https://github.com/dhis2/capture-app/compare/v101.16.5...v101.16.6) (2024-11-25) + + +### Bug Fixes + +* [DHIS2-17519] app crashing when opening new event from view event ([#3781](https://github.com/dhis2/capture-app/issues/3781)) ([93366ef](https://github.com/dhis2/capture-app/commit/93366ef504210cc9aa746f7d10a4cc7d6188586d)) +* [DHIS2-18150] user has to click out of range filter for update button to trigger ([#3855](https://github.com/dhis2/capture-app/issues/3855)) ([f70b205](https://github.com/dhis2/capture-app/commit/f70b2053f753388e994c89698677821fd8032f79)) + +## [101.16.5](https://github.com/dhis2/capture-app/compare/v101.16.4...v101.16.5) (2024-11-24) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([3098faf](https://github.com/dhis2/capture-app/commit/3098faf8b73dbfc0d894535cbdfd5539e80a24fe)) + +## [101.16.4](https://github.com/dhis2/capture-app/compare/v101.16.3...v101.16.4) (2024-11-20) + + +### Bug Fixes + +* [DHIS2-18019] related stages UI tweaks ([#3872](https://github.com/dhis2/capture-app/issues/3872)) ([7ea2240](https://github.com/dhis2/capture-app/commit/7ea2240b68408a0c4e8db624093c058f2b416584)) + +## [101.16.3](https://github.com/dhis2/capture-app/compare/v101.16.2...v101.16.3) (2024-11-20) + + +### Bug Fixes + +* [DHIS2-18444] stabilize possible duplicate modal cypress test ([#3886](https://github.com/dhis2/capture-app/issues/3886)) ([5b5b477](https://github.com/dhis2/capture-app/commit/5b5b477ed3a26c7eb04c4966802769fe973e1631)) + +## [101.16.2](https://github.com/dhis2/capture-app/compare/v101.16.1...v101.16.2) (2024-11-19) + + +### Bug Fixes + +* [DHIS2-16994] Image and File DE and TEA not Displayed in Changelog ([#3837](https://github.com/dhis2/capture-app/issues/3837)) ([9327210](https://github.com/dhis2/capture-app/commit/932721045126e02379f56a85af4f6586b836b4c0)) + +## [101.16.1](https://github.com/dhis2/capture-app/compare/v101.16.0...v101.16.1) (2024-11-17) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([37c32df](https://github.com/dhis2/capture-app/commit/37c32df3e7839e30b493ff8e8185de769c3e2fd4)) + +# [101.16.0](https://github.com/dhis2/capture-app/compare/v101.15.0...v101.16.0) (2024-11-13) + + +### Features + +* [DHIS2-18250] Breadcrumb for event & enrollment pages ([#3849](https://github.com/dhis2/capture-app/issues/3849)) ([d65882e](https://github.com/dhis2/capture-app/commit/d65882eacb711865d9f6a860c65d56a0f4d68157)) + +# [101.15.0](https://github.com/dhis2/capture-app/compare/v101.14.9...v101.15.0) (2024-11-12) + + +### Features + +* [DHIS2-15187][DHIS2-15190] Working list bulk actions ([#3773](https://github.com/dhis2/capture-app/issues/3773)) ([5a12722](https://github.com/dhis2/capture-app/commit/5a127229e984b744fa3ea486d9b5a2632603bcd4)) + +## [101.14.9](https://github.com/dhis2/capture-app/compare/v101.14.8...v101.14.9) (2024-11-10) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([00403fb](https://github.com/dhis2/capture-app/commit/00403fb596e08eba233fd4103c66c66f286a0881)) + ## [101.14.8](https://github.com/dhis2/capture-app/compare/v101.14.7...v101.14.8) (2024-11-05) diff --git a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature index 869b837615..e74ed7c4f8 100644 --- a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature +++ b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature @@ -50,7 +50,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User should be asked to create new event after completing a stage and choose to cancel Given you land on the enrollment new event page by having typed #/enrollmentEventNew?enrollmentId=zRfAPUpjoG3&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=CWaAcQYKVpq&teiId=S3JjTA4QMNe - Then you see the following Enrollment: New Event + Then you see the new event form And you see the widget header Foci investigation & classification And you type 2022-01-01 in the input number 0 And you type x in the input number 20 @@ -62,7 +62,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User should be asked to create new event after completing a stage and choose to continue Given you land on the enrollment new event page by having typed #/enrollmentEventNew?enrollmentId=zRfAPUpjoG3&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=CWaAcQYKVpq&teiId=S3JjTA4QMNe - Then you see the following Enrollment: New Event + Then you see the new event form And you see the widget header Foci investigation & classification And you type 2022-01-01 in the input number 0 And you type x in the input number 20 @@ -74,7 +74,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User is able to schedule an event with a note Given you land on the enrollment new event page by having typed /#/enrollmentEventNew?enrollmentId=qcFFRp7DpcX&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&stageId=edqlbukwRfQ&teiId=erqa3phUfpI - And you see the following Enrollment: New Event + And you see the new event form And you select the schedule tab When you add a note to the event And the events saves successfully diff --git a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature index 5364d08ec0..de83e45d76 100644 --- a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature +++ b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature @@ -1,7 +1,7 @@ Feature: User interacts with Enrollment Add event page Scenario: The user can land on the enrollment add event page. Given you land on the enrollment add event page by having typed /#/enrollmentEventNew?programId=IpHINAT79UW&orgUnitId=DiszpKrYNg8&teiId=tIJu6iqQxNV&enrollmentId=CCBLMntFuzb&stageId=A03MvHHogjR - Then you see the following Enrollment: New Event + Then you see the new event form And you see the widget header Birth And you see the following Report date And you see the add event form details diff --git a/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js b/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js index 9be509e28c..354b982afa 100644 --- a/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js +++ b/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js @@ -1,4 +1,4 @@ -import { Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Then, When } from '@badeball/cypress-cucumber-preprocessor'; Then(/^you see the following (.*)$/, (message) => { cy.contains(message); @@ -12,3 +12,7 @@ And(/^you see the widget header (.*)$/, (name) => { cy.contains(name).should('exist'); }); }); + +When('you see the new event form', () => { + cy.get('[data-test="new-enrollment-event-form"]').should('exist'); +}); diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature index 594b821007..31ab0f99c8 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature @@ -25,12 +25,12 @@ And the user see the following text: Yes Scenario: The user can enter and exit the edit mode. Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL -And the user see the following text: Enrollment: View Event +And the view enrollment event form is in view mode And the user see the following text: Apgar Score When the user clicks on the edit button -Then the user see the following text: Enrollment: Edit Event +Then the view enrollment event form is in edit mode When the user clicks on the cancel button -And the user see the following text: Enrollment: View Event +And the view enrollment event form is in view mode Scenario: The tracker program rules are triggered correctly for the Child Program. Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL @@ -53,58 +53,58 @@ Then the user don't see the following text: Low-dose acetylsalicylic acid given Scenario: User can modify and save the data in the form Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL -Then the user see the following text: Enrollment: View Event +Then the view enrollment event form is in view mode And the apgar score is 11 When the user clicks on the edit button And the user set the apgar score to 5 And the user clicks on the save button Then you are redirected to the enrollment dashboard And you open the Birth stage event -Then the user see the following text: Enrollment: View Event +Then the view enrollment event form is in view mode And the user see the following text: 5 When the user clicks on the edit button And the user set the apgar score to 11 And the user clicks on the save button Then you are redirected to the enrollment dashboard And you open the Birth stage event -Then the user see the following text: Enrollment: View Event +Then the view enrollment event form is in view mode And the user see the following text: 11 Scenario: User goes directly to Edit mode for scheduled events Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=RIrfCcEP8Uu&orgUnitId=DiszpKrYNg8 - Then the user see the following text: Enrollment: Edit Event + Then the view enrollment event form is in edit mode And the user see the following text: Infant Feeding When the user clicks on the cancel button - Then the user see the following text: Enrollment Dashboard + Then the user is navigated to the enrollment dashboard -Scenario: User can update schedule date for a scheduled event +Scenario: User can update schedule date for a scheduled event Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=RIrfCcEP8Uu&orgUnitId=DiszpKrYNg8 - Then the user see the following text: Enrollment: Edit Event + Then the view enrollment event form is in edit mode And the user see the following text: Infant Feeding When the user clicks switch tab to Schedule And the user selects another schedule date And the user clicks on the schedule button on widget-enrollment-event - Then the user see the following text: Enrollment Dashboard + Then the user is navigated to the enrollment dashboard Scenario: User can update schedule date if Hide due date is enabled Given you land on the enrollment event page with selected Focus area by having typed /#/enrollmentEventNew?enrollmentId=V8uPJuhvlL7&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=uvMKOn1oWvd&tab=SCHEDULE&teiId=dNpxRu1mWG5 - Then the user see the following text: Enrollment: New Event + Then the add event form is displayed And the user see the following text: Foci response And the user see the schedule date and info box And the user clicks on the schedule button on add-event-enrollment-page-content - Then the user see the following text: Enrollment Dashboard + Then the user is navigated to the enrollment dashboard Scenario: User can see disabled scheduled date for active event Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=FV4JCI73wO2&orgUnitId=DiszpKrYNg8 - Then the user see the following text: Enrollment: View Event + Then the view enrollment event form is in view mode When the user clicks on the edit button - Then the user see the following text: Enrollment: Edit Event + Then the view enrollment event form is in edit mode Then the user see the schedule date field with tooltip: Scheduled date cannot be changed for Active events - + @user:trackerAutoTestRestricted Scenario: The user cannot enter edit mode for completed events Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=nUVwTLuQ6FT&orgUnitId=DiszpKrYNg8 - And the user see the following text: Enrollment: View Event + And the view enrollment event form is in view mode Then the edit button should be disabled Scenario: User can edit the event and complete the enrollment @@ -113,4 +113,4 @@ Scenario: User can edit the event and complete the enrollment And the user clicks on the edit button And the user completes the event And the user completes the enrollment - Then the user sees the enrollment status and recently edited event in Case outcome event status is completed \ No newline at end of file + Then the user sees the enrollment status and recently edited event in Case outcome event status is completed diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js index 70468a3a93..93ab1beea1 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js @@ -1,4 +1,4 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; import { getCurrentYear } from '../../../support/date'; const changeEnrollmentAndEventsStatus = () => ( @@ -61,8 +61,7 @@ Given(/^you land on the enrollment event page with selected (.*) by having typed When(/^the user clicks on the edit button/, () => cy .get('[data-test="widget-enrollment-event"]') - .find('[data-test="dhis2-uicore-button"]') - .eq(1) + .find('[data-test="widget-enrollment-event-edit-button"]') .click(), ); @@ -208,7 +207,18 @@ And('you open the Birth stage event', () => { Then('the edit button should be disabled', () => { cy.get('[data-test="widget-enrollment-event"]') - .find('[data-test="dhis2-uicore-button"]') - .eq(1) + .find('[data-test="widget-enrollment-event-edit-button"]') .should('be.disabled'); }); + +And('the add event form is displayed', () => { + cy.get('[data-test="add-event-enrollment-page-content"]').should('exist'); +}); + +And('the user is navigated to the enrollment dashboard', () => { + cy.get('[data-test="enrollment-overview-page"]').should('exist'); +}); + +And(/^the view enrollment event form is in (.*) mode$/, (mode) => { + cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); +}); diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature index 118c8e4c14..663543760e 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature @@ -2,18 +2,18 @@ Feature: User interacts with Enrollment event page Scenario: The user can land on the enrollment event page. Given you land on the enrollment event page by having typed #/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=O7IACPx40nQ - Then you see the following Enrollment: View Event + Then the view enrollment event form is in view mode And you see the following Baby Postnatal - Scenario: User can navigate back and forward between the enrollment event edit page and the enrollment page + Scenario: User can navigate back and forward between the enrollment event edit page and the enrollment page Given you open the enrollment page which has multiple events and stages - Then you see the following Enrollment Dashboard + Then the user is navigated to the enrollment dashboard And the widgets are done rendering And the program stages should be displayed When the user clicks the first second antenatal care visit event - Then you see the following Enrollment: View Event + Then the view enrollment event form is in view mode And you see the following antenatal care visit And you see the following No ARV medication plan When the user clicks the "Back to all stages and events" button - Then you see the following Enrollment Dashboard - And the program stages should be displayed \ No newline at end of file + Then the user is navigated to the enrollment dashboard + And the program stages should be displayed diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js index 76fbb1915c..d97e01569c 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js @@ -1,4 +1,4 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you land on the enrollment event page by having typed (.*)$/, (url) => { cy.visit(url); @@ -21,10 +21,7 @@ When('the user clicks the first second antenatal care visit event', () => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy - .get('[data-test="widget-enrollment-event"]') - .find('[data-test="dhis2-uicore-button"]') - .eq(0) + cy.get('[data-test="enrollment-edit-event-back-button"]') .click(), ); @@ -39,3 +36,11 @@ Then('the program stages should be displayed', () => { cy.contains('Care at birth').should('exist'); }); }); + +And('the user is navigated to the enrollment dashboard', () => { + cy.get('[data-test="enrollment-overview-page"]').should('exist'); +}); + +And(/^the view enrollment event form is in (.*) mode$/, (mode) => { + cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); +}); diff --git a/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js b/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js index 4d331734b9..46fe376da8 100644 --- a/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js +++ b/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js @@ -1,9 +1,8 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; Given('you are on an enrollment page', () => { cy.visit('/#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); And('you select the Inpatient morbidity program', () => { @@ -90,8 +89,7 @@ Then(/^you should be redirect to (.*)$/, (expectedUrl) => { Given('you land on the enrollment page by having typed only the enrollmentId in the url', () => { cy.visit('/#/enrollment?enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); cy.contains('[data-test="scope-selector"]', 'Carlos Cruz'); cy.contains('[data-test="scope-selector"]', 'Taninahun (Malen) CHP'); cy.contains('1 event'); @@ -119,8 +117,7 @@ When('you reset the org unit selection', () => { Then('you see the enrollment page but there is no org unit id in the url', () => { cy.url().should('not.include', 'orgUnitId'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); When('you reset the enrollment selection', () => { diff --git a/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js b/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js index a450af97d9..ff2c76281f 100644 --- a/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js +++ b/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you open the enrollment page by typing (.*)$/, url => cy.visit(url), @@ -6,14 +6,12 @@ Given(/^you open the enrollment page by typing (.*)$/, url => Given('you are on an enrollment page with stage available', () => { cy.visit('/#/enrollment?programId=ur1Edk5Oe2n&orgUnitId=UgYg0YW7ZIh&teiId=zmgVvEZ91Kg&enrollmentId=xRnBV5aJDeF'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); Given('you are on an enrollment page with no stage available', () => { cy.visit('/#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); When(/^you click the (.*) event-button/, (mode) => { diff --git a/cypress/e2e/EnrollmentPage/sharedSteps.js b/cypress/e2e/EnrollmentPage/sharedSteps.js index 8f8e2992ca..b21b9ec516 100644 --- a/cypress/e2e/EnrollmentPage/sharedSteps.js +++ b/cypress/e2e/EnrollmentPage/sharedSteps.js @@ -7,3 +7,7 @@ Given('you open the enrollment page', () => { Given('you open the enrollment page which has multiples events and stages', () => { cy.visit('#/enrollment?enrollmentId=ek4WWAgXX5i'); }); + +Given('you are on the enrollment dashboard', () => { + cy.url().should('include', '/#/enrollment?'); +}); diff --git a/cypress/e2e/NewPage/NewPage.js b/cypress/e2e/NewPage/NewPage.js index 9ef6ab3440..a4a7579656 100644 --- a/cypress/e2e/NewPage/NewPage.js +++ b/cypress/e2e/NewPage/NewPage.js @@ -469,14 +469,14 @@ And('you fill the WHO RMNCH program registration form with its required unique v }); And('you fill the WHO RMNCH program registration form with its required values', () => { - cy.get('[data-test="capture-ui-input"]') - .eq(2) - .type('Ava'); - cy.get('[data-test="capture-ui-input"]') .eq(3) .type('Didriksson'); + cy.get('[data-test="capture-ui-input"]') + .eq(2) + .type('Ava'); + cy.get('[data-test="capture-ui-input"]') .eq(9) .type('1985-10-01') diff --git a/cypress/e2e/ScopeSelector/ScopeSelector.feature b/cypress/e2e/ScopeSelector/ScopeSelector.feature index ec80a5d2b0..5a06714422 100644 --- a/cypress/e2e/ScopeSelector/ScopeSelector.feature +++ b/cypress/e2e/ScopeSelector/ScopeSelector.feature @@ -144,14 +144,14 @@ Feature: User uses the ScopeSelector to navigate Examples: | url | state | message | - | /#/enrollment?enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?programId=IpHINAT79UW&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | - | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?programId=IpHINAT79UW&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ | teiAndOrgUnit | Choose a program to add new or see existing enrollments for Carlos Cruz | | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ | teiAndChildProgram | Choose an enrollment to view the dashboard. | | /#/enrollment?programId=qDkgAbB5Jlk&teiId=fhFQhO0xILJ | teiAndMalariaProgram | Carlos Cruz is a person and cannot be enrolled in the Malaria case diagnosis, treatment and investigation. Choose another program that allows person enrollment. Enroll a new malaria entity in this program.| @@ -184,6 +184,8 @@ Feature: User uses the ScopeSelector to navigate When you reset the program selection Then you see message explaining you need to select a program + # DHIS2-18326 + @skip Scenario: Enrollment event edit page > resetting the org unit Given you land on a enrollment page domain by having typed /#/enrollmentEventEdit?orgUnitId=UgYg0YW7ZIh&eventId=lQQyjR73hHk When you reset the org unit selection diff --git a/cypress/e2e/ScopeSelector/ScopeSelector.js b/cypress/e2e/ScopeSelector/ScopeSelector.js index 00b119713f..c870644462 100644 --- a/cypress/e2e/ScopeSelector/ScopeSelector.js +++ b/cypress/e2e/ScopeSelector/ScopeSelector.js @@ -1,4 +1,4 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; import { getCurrentYear } from '../../support/date'; Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { @@ -263,8 +263,7 @@ Then(/^you see the following (.*)$/, (message) => { And('you land on the enrollment page by having typed only the enrollmentId on the url', () => { cy.visit('/#/enrollment?enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); And('you reset the tei selection', () => { @@ -288,7 +287,7 @@ And('you reset the org unit selection', () => { And('you see the enrollment event Edit page but there is no org unit id in the url', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollmentEventEdit?eventId=lQQyjR73hHk`); - cy.contains('Enrollment: View Event'); + cy.get('[data-test="widget-enrollment-event-view"]').should('exist'); }); And('you see the enrollment event New page but there is no org unit id in the url', () => { @@ -298,13 +297,12 @@ And('you see the enrollment event New page but there is no org unit id in the ur And('you see the enrollment event New page but there is no stage id in the url', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollmentEventNew?enrollmentId=gPDueU02tn8&orgUnitId=UgYg0YW7ZIh&programId=IpHINAT79UW&teiId=fhFQhO0xILJ`); - cy.contains('Enrollment: New Event'); + cy.contains('Choose a stage for a new event'); }); And('you see the enrollment page', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollment?enrollmentId=gPDueU02tn8&orgUnitId=UgYg0YW7ZIh&programId=IpHINAT79UW&teiId=fhFQhO0xILJ`); - cy.get('[data-test="enrollment-page-content"]') - .contains('Enrollment Dashboard'); + cy.get('[data-test="enrollment-overview-page"]'); }); And('you reset the enrollment selection', () => { diff --git a/cypress/e2e/TopBarActions/TopBarActions.feature b/cypress/e2e/TopBarActions/TopBarActions.feature index 20f8aa8f74..25135c9328 100644 --- a/cypress/e2e/TopBarActions/TopBarActions.feature +++ b/cypress/e2e/TopBarActions/TopBarActions.feature @@ -61,7 +61,7 @@ Feature: User uses the TopBarActions to navigate Given you land on a enrollment page domain by having typed /#/enrollmentEventEdit?orgUnitId=DwpbWkiqjMy&eventId=KNbStF7YTon And the user see the following text: Gestational age at visit When the user clicks on the edit button - And the user see the following text: Enrollment: Edit Event + And the view enrollment event form is in edit mode When the user clicks the element containing the text: Clear selections Then the user sees the warning popup @@ -88,7 +88,7 @@ Feature: User uses the TopBarActions to navigate Given you land on a enrollment page domain by having typed #/enrollmentEventNew?programId=WSGAb5XwJ3Y&orgUnitId=DwpbWkiqjMy&teiId=yFcOhsM1Yoa&enrollmentId=ek4WWAgXX5i&stageId=edqlbukwRfQ And the user see the following text: Clear selections When the user clicks the arrow button to see the dropdown - And the user clicks the element containing the text: Create new in another program... + And the user clicks the element containing the text: Create new in another program... Then the current url is /#/new?orgUnitId=DwpbWkiqjMy Scenario: Enrollment Event New page > You go to the new page inside the same program diff --git a/cypress/e2e/TopBarActions/TopBarActions.js b/cypress/e2e/TopBarActions/TopBarActions.js index 81d8cc996e..624ca1ac82 100644 --- a/cypress/e2e/TopBarActions/TopBarActions.js +++ b/cypress/e2e/TopBarActions/TopBarActions.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; +import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { cy.visit(url); @@ -6,7 +6,7 @@ Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { }); When(/^the user clicks on the edit button/, () => - cy.get('[data-test="widget-enrollment-event"]').find('[data-test="dhis2-uicore-button"]').eq(1).click(), + cy.get('[data-test="widget-enrollment-event"]').find('[data-test="widget-enrollment-event-edit-button"]').click(), ); When('the user clicks the arrow button to see the dropdown', () => { @@ -24,3 +24,7 @@ When(/^the user set the WHOMCH Diastolic blood pressure to (.*)/, score => .type(score) .blur(), ); + +And(/^the view enrollment event form is in (.*) mode$/, (mode) => { + cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); +}); diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js index 9f45c31e2f..07403f7566 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js @@ -12,8 +12,7 @@ When('you assign the user Geetha in the view mode', () => { When('you assign the user Tracker demo User in the edit mode', () => { cy .get('[data-test="widget-enrollment-event"]') - .find('[data-test="dhis2-uicore-button"]') - .eq(1) + .find('[data-test="widget-enrollment-event-edit-button"]') .click(); cy.get('[data-test="widget-assignee"]').within(() => { diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js index 2a1c5200ef..aec7cc2c19 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js @@ -1,13 +1,15 @@ -import { When, Then } from '@badeball/cypress-cucumber-preprocessor'; +import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; Then('the enrollment widget should be loaded', () => { cy.contains('The enrollment event data could not be found').should('not.exist'); }); When('you click edit mode', () => { - cy.contains('[data-test="dhis2-uicore-button"]', 'Edit event') + cy + .get('[data-test="widget-enrollment-event"]') + .find('[data-test="widget-enrollment-event-edit-button"]') .click(); - cy.contains('Enrollment: Edit Event').should('exist'); + cy.get('[data-test="widget-enrollment-event-edit"]').should('exist'); }); When(/^you fill in the note: (.*)$/, (note) => { diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js index ebb0f1293a..24f07d7593 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js @@ -16,9 +16,7 @@ Then('you can assign a user when scheduling the event', () => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy - .get('[data-test="widget-enrollment-event"]') - .contains('Back to all stages and events') + cy.get('[data-test="enrollment-edit-event-back-button"]') .click(), ); diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js index 81034e2507..96a583bd38 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js @@ -51,9 +51,7 @@ Then(/^the scope selector list contains the text (.*)$/, (name) => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy - .get('[data-test="widget-enrollment-event"]') - .contains('Back to all stages and events') + cy.get('[data-test="enrollment-edit-event-back-button"]') .click(), ); diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature new file mode 100644 index 0000000000..f44f8caa8d --- /dev/null +++ b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature @@ -0,0 +1,49 @@ +Feature: User facing tests for bulk actions on event working lists + + Scenario: the user should be able to select rows + Given you open the main page with Ngelehun and malaria case context + When you select the first 5 rows + Then the bulk action bar should say 5 selected + And the first 5 rows should be selected + + Scenario: the user should be able to deselect rows + Given you open the main page with Ngelehun and malaria case context + When you select the first 5 rows + And you deselect the first 3 rows + Then the bulk action bar should say 2 selected + + Scenario: the user should be able to select all rows + Given you open the main page with Ngelehun and malaria case context + When you select all rows + Then the bulk action bar should say 15 selected + And all rows should be selected + + Scenario: the user should be able to deselect all rows + Given you open the main page with Ngelehun and malaria case context + When you select all rows + And all rows should be selected + And you select all rows + Then the bulk action bar should not be present + And no rows should be selected + + Scenario: the filters should be disabled when rows are selected + Given you open the main page with Ngelehun and malaria case context + When you select the first 5 rows + Then the filters should be disabled + + @v<42 + Scenario: the user should be able to bulk complete events + Given you open the main page with Ngelehun and malaria case context + And you select the first 3 rows + And you click the bulk complete button + And the bulk complete modal should open + When you click the confirm complete events button + Then the bulk complete modal should close + + Scenario: the user should be able to bulk delete events + Given you open the main page with Ngelehun and malaria case context + And you select the first 3 rows + And you click the bulk Delete button + And the bulk delete modal should open + When you click the confirm delete events button + Then the bulk delete modal should close diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js new file mode 100644 index 0000000000..3a89c95cba --- /dev/null +++ b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js @@ -0,0 +1,73 @@ +import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import '../../sharedSteps'; + +Given('you open the main page with Ngelehun and malaria case context', () => { + cy.visit('#/?programId=VBqh0ynB2wv&orgUnitId=DiszpKrYNg8'); +}); + +Then('the bulk complete modal should open', () => { + cy.get('[data-test="bulk-complete-events-dialog"]') + .should('exist'); +}); + +When('you click the confirm complete events button', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false**', + }, { + statusCode: 200, + body: {}, + }).as('completeEvents'); + + cy.get('[data-test="bulk-complete-events-dialog"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Complete').click(); + + cy.wait('@completeEvents') + .its('request.body') + .should(({ events }) => { + expect(events).to.have.length(3); + expect(events[0]).to.include({ status: 'COMPLETED' }); + expect(events[1]).to.include({ status: 'COMPLETED' }); + expect(events[2]).to.include({ status: 'COMPLETED' }); + }); +}); + +Then('the bulk complete modal should close', () => { + cy.get('[data-test="bulk-complete-events-dialog"]') + .should('not.exist'); +}); + +Then('the bulk delete modal should open', () => { + cy.get('[data-test="bulk-delete-events-dialog"]') + .should('exist'); +}); + +// you click the confirm delete events button +When('you click the confirm delete events button', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false**', + }, { + statusCode: 200, + body: {}, + }).as('deleteEvents'); + + cy.get('[data-test="bulk-delete-events-dialog"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Delete').click(); + + cy.wait('@deleteEvents') + .its('request.body') + .should(({ events }) => { + expect(events).to.have.length(3); + expect(events).to.deep.include({ event: 'a969f7a3bf1' }); + expect(events).to.deep.include({ event: 'a6f092d0d44' }); + expect(events).to.deep.include({ event: 'a5e67163090' }); + }); +}); + +Then('the bulk delete modal should close', () => { + cy.get('[data-test="bulk-delete-events-dialog"]') + .should('not.exist'); +}); diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js b/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js index b1a6158642..019ba97970 100644 --- a/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js +++ b/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js @@ -1,7 +1,7 @@ -import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; import { v4 as uuid } from 'uuid'; import '../sharedSteps'; -import { getCurrentYear, combineDataAndYear } from '../../../../support/date'; +import { combineDataAndYear, getCurrentYear } from '../../../../support/date'; Given('you open the main page with Ngelehun and malaria case context', () => { cy.visit('#/?programId=VBqh0ynB2wv&orgUnitId=DiszpKrYNg8'); @@ -29,7 +29,7 @@ Then('the default working list should be displayed', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').first().invoke('text') + cy.wrap($row).find('td').eq(1).invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -185,7 +185,7 @@ Then('the list should display data for the second page', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').first().invoke('text') + cy.wrap($row).find('td').eq(1).invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -219,7 +219,7 @@ Then('the list should display 10 rows of data', () => { .should('have.length', 11) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').first().invoke('text') + cy.wrap($row).find('td').eq(1).invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -250,9 +250,9 @@ Then('the list should display data ordered descendingly by report date', () => { .click(); cy.get('input[placeholder="From"]') - .type(`${lastYear}-01-01`); + .type(`${lastYear}-01-01`).blur(); - cy.get('input[placeholder="To"]').click(); + cy.get('input[placeholder="To"]').click().blur(); cy.contains('Update') .click({ force: true }); @@ -278,7 +278,7 @@ Then('the list should display data ordered descendingly by report date', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').first().invoke('text') + cy.wrap($row).find('td').eq(1).invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -399,10 +399,10 @@ When('you set the date of admission filter', () => { cy.get('input[type="text"]') .then(($elements) => { cy.wrap($elements[0]) - .type('2018-01-01'); + .type('2018-01-01').blur(); cy.wrap($elements[1]) - .type('2018-12-31'); + .type('2018-12-31').blur(); }); cy.contains('Update') diff --git a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature new file mode 100644 index 0000000000..f79f4faf87 --- /dev/null +++ b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature @@ -0,0 +1,92 @@ +Feature: User facing tests for bulk actions on Tracked Entity working lists + + Scenario: the user should be able to select rows + Given you open the main page with Ngelehun and child programe context + When you select the first 5 rows + Then the bulk action bar should say 5 selected + And the first 5 rows should be selected + + Scenario: the user should be able to deselect rows + Given you open the main page with Ngelehun and child programe context + When you select the first 5 rows + And you deselect the first 3 rows + Then the bulk action bar should say 2 selected + + Scenario: the user should be able to select all rows + Given you open the main page with Ngelehun and child programe context + When you select all rows + Then the bulk action bar should say 15 selected + And all rows should be selected + + Scenario: the user should be able to deselect all rows + Given you open the main page with Ngelehun and child programe context + When you select all rows + And all rows should be selected + And you select all rows + Then the bulk action bar should not be present + And no rows should be selected + + Scenario: the filters should be disabled when rows are selected + Given you open the main page with Ngelehun and child programe context + When you select the first 5 rows + Then the filters should be disabled + + Scenario: The user should see an error message when trying to bulk complete enrollments with errors + Given you open the main page with Ngelehun and Malaria focus investigation context + And you select the first 3 rows + And you click the bulk complete enrollments button + And the bulk complete enrollments modal should open + And the modal content should say: This action will complete 2 active enrollments in your selection. 1 enrollment already marked as completed will not be changed. + When you confirm 2 active enrollments with errors + Then an error dialog will be displayed to the user + And you close the error dialog + And the unsuccessful enrollments should still be selected + + Scenario: the user should be able to bulk complete enrollments and events + Given you open the main page with Ngelehun and Malaria focus investigation context + And you select the first 4 rows + And you click the bulk complete enrollments button + And the bulk complete enrollments modal should open + And the modal content should say: This action will complete 3 active enrollments in your selection. 1 enrollment already marked as completed will not be changed. + When you confirm 3 active enrollments successfully + Then the bulk complete enrollments modal should close + +#DHIS2-18447 +@skip + Scenario: the user should be able to bulk complete enrollments without completing events + Given you open the main page with Ngelehun and Malaria Case diagnosis context + And you select row number 1 + And you click the bulk complete enrollments button + And the bulk complete enrollments modal should open + And you deselect the complete events checkbox + And the modal content should say: This action will complete 1 active enrollment in your selection. + When you confirm 1 active enrollment without completing events successfully + Then the bulk complete enrollments modal should close + +#DHIS2-18447 +@skip + Scenario: the user should be able to bulk delete enrollments + Given you open the main page with Ngelehun and Malaria Case diagnosis context + And you select the first 3 rows + And you click the bulk delete enrollments button + And the bulk delete enrollments modal should open + When you confirm deleting 3 enrollments + Then the bulk delete enrollments modal should close + +#DHIS2-18447 +@skip + Scenario: the user should be able to bulk delete only active enrollments + Given you open the main page with Ngelehun and Malaria Case diagnosis context + And you select the first 3 rows + And you click the bulk delete enrollments button + And the bulk delete enrollments modal should open + When you deselect completed enrollments + And you confirm deleting 2 active enrollments + Then the bulk delete enrollments modal should close + + @user:trackerAutoTestRestricted + Scenario: a restricted user should not be able to bulk delete enrollments + Given you open the main page with Ngelehun and WHO RMNCH Tracker context + And you open the working lists + When you select the first 3 rows + Then the bulk delete enrollments button should not be visible diff --git a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js new file mode 100644 index 0000000000..9a8931cc7f --- /dev/null +++ b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js @@ -0,0 +1,284 @@ +import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import '../../sharedSteps'; + +Given('you open the main page with Ngelehun and child programe context', () => { + cy.visit('#/?programId=IpHINAT79UW&orgUnitId=DiszpKrYNg8'); +}); + +Given('you open the main page with Ngelehun and Malaria Case diagnosis context', () => { + cy.visit('#/?programId=qDkgAbB5Jlk&orgUnitId=DiszpKrYNg8'); +}); + +Given('you open the main page with Ngelehun and Malaria focus investigation context', () => { + cy.visit('#/?programId=M3xtLkYBlKI&orgUnitId=DiszpKrYNg8'); +}); + +Given('you open the main page with Ngelehun and WHO RMNCH Tracker context', () => { + cy.visit('#/?programId=WSGAb5XwJ3Y&orgUnitId=DiszpKrYNg8'); +}); + +// you open the working lists +Given('you open the working lists', () => { + cy.get('[data-test="template-selector-create-list"]') + .click(); +}); + +Then('the bulk complete enrollments modal should open', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .should('exist'); +}); + +When('it should say there are 2 active enrollments and 1 completed enrollment', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .contains('This action will complete 2 active enrollments in your selection.' + + ' 1 enrollment already marked as completed will not be changed.'); +}); + +Then('you confirm 3 active enrollments successfully', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', + }, { + statusCode: 200, + body: {}, + }).as('completeEnrollmentsDryRun'); + + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', + }, { + statusCode: 200, + body: {}, + }).as('completeEnrollments'); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('[data-test="bulk-complete-enrollments-confirm-button"]') + .click(); + + cy.wait('@completeEnrollmentsDryRun') + .then((interception) => { + expect(interception.response.statusCode).to.eq(200); + expect(interception.request.body.enrollments).to.have.length(3); + }); + + cy.wait('@completeEnrollments') + .its('request.body') + .should(({ enrollments }) => { + // Should be 3 enrollments + expect(enrollments).to.have.length(3); + + // Assert that all enrollments are completed + enrollments.forEach((enrollment) => { + expect(enrollment).to.include({ status: 'COMPLETED' }); + + enrollment.events.forEach((event) => { + expect(event).to.include({ status: 'COMPLETED' }); + }); + }); + }); +}); + +Then('the bulk complete enrollments modal should close', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .should('not.exist'); +}); + +When(/^you select row number (.*)$/, (rowNumber) => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .eq(rowNumber) + .find('[data-test="select-row-checkbox"]') + .click(); +}); + +Then(/^the modal content should say: (.*)$/, (content) => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .contains(content); +}); + +When('you deselect the complete events checkbox', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('[data-test="dhis2-uicore-checkbox"]') + .click(); +}); + +When('you confirm 1 active enrollment without completing events successfully', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', + }).as('completeEnrollmentsDryRun'); + + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', + }, { + statusCode: 200, + body: {}, + }).as('completeEnrollments'); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('[data-test="bulk-complete-enrollments-confirm-button"]') + .click(); + + cy.wait('@completeEnrollmentsDryRun') + .then((interception) => { + expect(interception.response.statusCode).to.eq(200); + expect(interception.request.body.enrollments).to.have.length(1); + }); + + cy.wait('@completeEnrollments') + .its('request.body') + .should(({ enrollments }) => { + // Should be 1 enrollment + expect(enrollments).to.have.length(1); + + // Assert that first enrollment is completed with one completed event + expect(enrollments[0]).to.include({ status: 'COMPLETED' }); + expect(enrollments[0].events).to.have.length(0); + }); +}); + +When('you confirm 2 active enrollments with errors', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', + }).as('completeEnrollmentsDryRun'); + + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', + }, { + statusCode: 200, + body: {}, + }).as('completeEnrollments'); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('[data-test="bulk-complete-enrollments-confirm-button"]') + .click(); + + cy.wait('@completeEnrollmentsDryRun') + .then((interception) => { + expect(interception.response.statusCode).to.eq(409); + expect(interception.request.body.enrollments).to.have.length(2); + }); + + cy.wait('@completeEnrollments') + .its('request.body') + .should(({ enrollments }) => { + // The bad data should be filtered out and not sent to the server + expect(enrollments).to.have.length(1); + + const enrollment = enrollments[0]; + expect(enrollment).to.include({ enrollment: 'MqSC9Vuckeh', status: 'COMPLETED' }); + }); +}); + +Then('an error dialog will be displayed to the user', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .contains('Error completing enrollments'); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .contains('Some enrollments were completed successfully, ' + + 'but there was an error while completing the rest. Please see the details below.'); + + cy.get('[data-test="widget-open-close-toggle-button"]') + .click(); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('li') + .should('have.length', 2); + + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('li') + .contains('Mandatory DataElement `fjdU9F6EngS` is not present'); +}); + +When('you close the error dialog', () => { + cy.get('[data-test="bulk-complete-enrollments-dialog"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Cancel'); +}); + +Then('the unsuccessful enrollments should still be selected', () => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .eq(0) + .should('have.class', 'selected'); + + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .eq(2) + .should('have.class', 'selected'); +}); + +Then('the bulk delete enrollments modal should open', () => { + cy.get('[data-test="bulk-delete-enrollments-dialog"]') + .should('exist'); + + cy.contains('Delete selected enrollments'); +}); + +When('you deselect completed enrollments', () => { + cy.get('[data-test="bulk-delete-enrollments-dialog"]') + .find('[data-test="bulk-delete-enrollments-completed-checkbox"]') + .click(); +}); + +When('you confirm deleting 2 active enrollments', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=DELETE', + }, { + statusCode: 200, + body: {}, + }).as('deleteEnrollments'); + + cy.get('[data-test="bulk-delete-enrollments-dialog"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Delete 2 enrollments') + .click(); + + cy.wait('@deleteEnrollments') + .its('request.body') + .should(({ enrollments }) => { + expect(enrollments).to.have.length(2); + expect(enrollments).to.deep.include({ enrollment: 'Rkx1QOZeBra' }); + expect(enrollments).to.deep.include({ enrollment: 'hDVHG1OavhE' }); + }); +}); + +Then('the bulk delete enrollments modal should close', () => { + cy.get('[data-test="bulk-delete-enrollments-dialog"]') + .should('not.exist'); +}); + +When('you confirm deleting 3 enrollments', () => { + cy.intercept({ + method: 'POST', + url: '**/tracker?async=false&importStrategy=DELETE', + }, { + statusCode: 200, + body: {}, + }).as('deleteEnrollments'); + + cy.get('[data-test="bulk-delete-enrollments-dialog"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Delete 3 enrollments') + .click(); + + cy.wait('@deleteEnrollments') + .its('request.body') + .should(({ enrollments }) => { + expect(enrollments).to.have.length(3); + expect(enrollments).to.deep.include({ enrollment: 'PvJFfKjNWbq' }); + expect(enrollments).to.deep.include({ enrollment: 'Rkx1QOZeBra' }); + expect(enrollments).to.deep.include({ enrollment: 'hDVHG1OavhE' }); + }); +}); + +Then('the bulk delete enrollments button should not be visible', () => { + cy.get('[data-test="bulk-action-bar"]') + .find('[data-test="dhis2-uicore-button"]') + .contains('Delete enrollments') + .should('not.exist'); +}); diff --git a/cypress/e2e/WorkingLists/sharedSteps.js b/cypress/e2e/WorkingLists/sharedSteps.js index dbe0bb9928..41c60e6159 100644 --- a/cypress/e2e/WorkingLists/sharedSteps.js +++ b/cypress/e2e/WorkingLists/sharedSteps.js @@ -1,4 +1,4 @@ -import { When, Then } from '@badeball/cypress-cucumber-preprocessor'; +import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; Then('for an event program the page navigation should show that you are on the first page', () => { cy.get('[data-test="event-working-lists"]') @@ -127,3 +127,80 @@ When('you change rows per page to 10', () => { .contains('10') .click(); }); + +When(/^you select the first (.*) rows$/, (rows) => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .each(($tr, index) => { + if (index < rows) { + cy.wrap($tr).find('[data-test="select-row-checkbox"]').click(); + } + }); +}); + +Then(/^the bulk action bar should say (.*) selected$/, (rows) => { + cy.get('[data-test="bulk-action-bar"]') + .contains(`${rows} selected`); +}); + +Then(/^the first (.*) rows should be selected$/, (rows) => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .each(($tr, index) => { + if (index < rows) { + cy.wrap($tr) + .should('have.class', 'selected') + .find('[data-test="select-row-checkbox"]'); + } + }); +}); + +When('you select all rows', () => { + cy.get('[data-test="select-all-rows-checkbox"]').click(); +}); + +Then('all rows should be selected', () => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .each(($tr) => { + cy.wrap($tr) + .should('have.class', 'selected') + .find('[data-test="select-row-checkbox"]'); + }); +}); + +Then('the bulk action bar should not be present', () => { + cy.get('[data-test="bulk-action-bar"]').should('not.exist'); +}); + +Then('no rows should be selected', () => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .each(($tr) => { + cy.wrap($tr).should('not.have.class', 'selected'); + }); +}); + +When(/^you deselect the first (.*) rows$/, (rows) => { + cy.get('[data-test="dhis2-uicore-tablebody"]') + .find('tr') + .each(($tr, index) => { + if (index < rows) { + cy.wrap($tr).find('[data-test="select-row-checkbox"]').click(); + } + }); +}); + +Then('the filters should be disabled', () => { + cy.get('[data-test="workinglist-template-selector-chip"]') + .each(($chip) => { + cy.wrap($chip).should('have.class', 'disabled'); + }); +}); + +When(/^you click the bulk (.*) button$/, (text) => { + cy.get('[data-test="bulk-action-bar"]') + .find('[data-test="dhis2-uicore-button"]') + .contains(text, { matchCase: false }) + .click(); +}); diff --git a/docs/user/resources/images/event-bulk-actions-selected-rows.png b/docs/user/resources/images/event-bulk-actions-selected-rows.png new file mode 100644 index 0000000000000000000000000000000000000000..84c93e2626d7fb76da454d30ef759d96810e37c2 GIT binary patch literal 126931 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 MNhOIwF~c|i1I@t#4gdfE literal 0 HcmV?d00001 diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png b/docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png new file mode 100644 index 0000000000000000000000000000000000000000..84a094746f07739d5cb0f111b800c7202a362f5c GIT binary patch literal 148631 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≧)& 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 Q-KsQ~^^Gs0F4%_u2Res3(*OVf literal 0 HcmV?d00001 diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png b/docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png new file mode 100644 index 0000000000000000000000000000000000000000..4999e4251876a862db6a0c6876fef6c9a125ac5e GIT binary patch literal 128972 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]|KKv`7z2b6u8eX7z>A& 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 kar(bI **Note** > You can download the tracked entities list in JSON or CSV formats. + +## Tracked entity bulk actions + +You can perform bulk actions on tracked entities and their enrollments in the tracked entity list. + +![](resources/images/tracked-entity-bulk-actions-selected-rows.png) + +### Completing active enrollments + +1. Select the tracked entities you want to perform the action on by clicking the checkbox to the left of the tracked entity. + +2. Click the **Complete enrollments** button. + 1. You can also choose if you want to complete all active events within the selected enrollments. + +3. Confirm the action in the dialog that appears. + +![](resources/images/tracked-entity-bulk-actions-complete-enrollments.png) + +### Deleting enrollments + +1. Select the tracked entities you want to perform the action on by clicking the checkbox to the left of the tracked entity. + +2. Click the **Delete enrollments** button. + +3. In the dialog that appears, select what enrollment statuses you want to delete and confirm the action. + 1. You can choose any combination of enrollment statuses to delete. + +4. Confirm the action in the dialog that appears. + +![](resources/images/tracked-entity-bulk-actions-delete-enrollments.png) + ## Tracker program stage working list You can show data elements from a single stage in a working list. Select the "Program stage" option from the "More filters" dropdown, then choose a program stage. diff --git a/i18n/cs.po b/i18n/cs.po index 496af4cba9..39571615b5 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jiří Podhorecký , 2024\n" "Language-Team: Czech (https://app.transifex.com/hisp-uio/teams/100509/cs/)\n" @@ -688,8 +688,10 @@ msgstr "Nejsou žádné aktivní zápisy." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Přidejte nový zápis pro {{teiDisplayName}} v tomto programu." -msgid "No access to program owner." -msgstr "Žádný přístup k vlastníkovi programu." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} není v tomto programu zapsán." @@ -765,6 +767,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"Možnost kategorie není pro vybranou organizační jednotku platná. Vyberte " +"prosím platnou kombinaci." msgid "Please select {{category}}." msgstr "Vyberte prosím {{category}}." @@ -942,7 +946,7 @@ msgid "Loading" msgstr "načítání" msgid "An error occurred while loading the form" -msgstr "" +msgstr "Při načítání formuláře došlo k chybě" msgid "Possible duplicates found" msgstr "Byly nalezeny možné duplikáty" @@ -1092,8 +1096,8 @@ msgstr "Nejsou k dispozici žádné typy trasované entity" msgid "Assigned to" msgstr "Přiřazen k" -msgid "You don't have access to edit this assignee" -msgstr "Nemáte přístup k úpravám tohoto příjemce" +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "Upravit" @@ -1101,8 +1105,8 @@ msgstr "Upravit" msgid "No one is assigned to this event" msgstr "K této události není nikdo přiřazen" -msgid "You don't have access to assign an assignee" -msgstr "Nemáte přístup k přiřazení příjemce" +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "Přiřadit" @@ -1149,6 +1153,9 @@ msgstr "Označit jako zrušené" msgid "Mark incomplete" msgstr "Označit jako neúplné" +msgid "You do not have access to delete this enrollment" +msgstr "Nemáte přístup ke smazání tohoto zápisu." + msgid "Delete enrollment" msgstr "Smazat zápis" @@ -1239,7 +1246,7 @@ msgid "Started at{{escape}}" msgstr "" msgid "Owned by{{escape}}" -msgstr "" +msgstr "Ve vlastnictví{{escape}}" msgid "Cancelled" msgstr "Zrušeno" @@ -1296,7 +1303,7 @@ msgid "Event completed" msgstr "Událost dokončena" msgid "The event cannot be edited after it has been completed" -msgstr "" +msgstr "Událost nelze upravovat po jejím dokončení." msgid "Back to all stages and events" msgstr "Zpět ke všem fázím a událostem" @@ -1359,7 +1366,7 @@ msgid "Schedule date / Due date" msgstr "Datum plánu / Datum konce platnosti" msgid "Event notes" -msgstr "" +msgstr "Poznámky k události" msgid "Write a note about this scheduled event" msgstr "Napište poznámku o této plánované události" @@ -1461,7 +1468,7 @@ msgid "Please select a valid event" msgstr "Vyberte prosím platnou událost" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "V této fázi nemáte přístup k vytváření událostí." msgid "This stage can only have one event" msgstr "Tato fáze může mít pouze jednu událost" @@ -1470,15 +1477,17 @@ msgid "New {{ eventName }} event" msgstr "Nová událost {{ eventName }}" msgid "An error occurred while deleting the event" -msgstr "" +msgstr "Při mazání události došlo k chybě" msgid "" "Deleting an event is permanent and cannot be undone. Are you sure you want " "to delete this event?" msgstr "" +"Odstranění události je trvalé a nelze jej vrátit zpět. Opravdu chcete tuto " +"událost odstranit?" msgid "An error occurred when updating event status" -msgstr "" +msgstr "Při aktualizaci stavu události došlo k chybě" msgid "Unskip" msgstr "" @@ -1515,10 +1524,10 @@ msgid "Stages and Events" msgstr "Fáze a události" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "Při načítání widgetu došlo k chybě." msgid "View linked event" -msgstr "" +msgstr "Zobrazit propojenou událost" msgid "Scheduled" msgstr "Naplánováno" @@ -1527,7 +1536,7 @@ msgid "Changelog" msgstr "Seznam změn" msgid "No changes to display" -msgstr "" +msgstr "Žádné změny k zobrazení" msgid "Updated" msgstr "Aktualizováno" @@ -1548,13 +1557,13 @@ msgid "Data item" msgstr "Datová položka" msgid "Change" -msgstr "" +msgstr "Změna" msgid "Value" -msgstr "" +msgstr "Hodnota" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "" +msgstr "Nový vztah {{trackedEntityTypeName}} " msgid "Missing implementation step" msgstr "Chybí krok implementace" @@ -1585,12 +1594,14 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" +"Odstranění vztahu je trvalé a nelze jej vrátit zpět. Opravdu chcete tento " +"vztah odstranit?" msgid "Yes, delete relationship" -msgstr "" +msgstr "Ano, vymazat vztah" msgid "An error occurred while deleting the relationship." -msgstr "" +msgstr "Při odstraňování vztahu došlo k chybě." msgid "To open this relationship, please wait until saving is complete" msgstr "Chcete-li otevřít tento vztah, počkejte na dokončení ukládání" @@ -1752,7 +1763,7 @@ msgid "Error editing the event, the changes made were not saved" msgstr "Chyba při úpravě události, provedené změny nebyly uloženy" msgid "Error updating the Assignee" -msgstr "" +msgstr "Chyba při aktualizaci Příjemce" msgid "Set coordinate" msgstr "Nastavit souřadnice" diff --git a/i18n/en.pot b/i18n/en.pot index f5f3c016f4..fd3148ff95 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-11-21T13:57:21.323Z\n" -"PO-Revision-Date: 2024-11-21T13:57:21.323Z\n" +"POT-Creation-Date: 2024-11-29T15:22:36.811Z\n" +"PO-Revision-Date: 2024-11-29T15:22:36.811Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -35,6 +35,39 @@ msgstr "" "(in the same domain). Please refresh this page if you would like to use " "this version again, but be aware that this will close other versions." +msgid "Enrollment dashboard" +msgstr "Enrollment dashboard" + +msgid "View event" +msgstr "View event" + +msgid "Edit event" +msgstr "Edit event" + +msgid "New event" +msgstr "New event" + +msgid "Active enrollments" +msgstr "Active enrollments" + +msgid "Completed enrollments" +msgstr "Completed enrollments" + +msgid "Cancelled enrollments" +msgstr "Cancelled enrollments" + +msgid "{{trackedEntityName}} list" +msgstr "{{trackedEntityName}} list" + +msgid "Search" +msgstr "Search" + +msgid "Working List" +msgstr "Working List" + +msgid "Event list" +msgstr "Event list" + msgid "More" msgstr "More" @@ -293,9 +326,6 @@ msgstr "Yes, discard changes" msgid "No, cancel" msgstr "No, cancel" -msgid "New event" -msgstr "New event" - msgid "You don't have access to create an event in the current selections" msgstr "You don't have access to create an event in the current selections" @@ -514,9 +544,6 @@ msgstr "Type to filter options" msgid "No match found" msgstr "No match found" -msgid "Search" -msgstr "Search" - msgid "Clear" msgstr "Clear" @@ -858,9 +885,6 @@ msgstr "event" msgid "You don't have access to edit this event" msgstr "You don't have access to edit this event" -msgid "Edit event" -msgstr "Edit event" - msgid "View changelog" msgstr "View changelog" @@ -898,15 +922,6 @@ msgstr "Event could not be loaded" msgid "Organisation unit could not be loaded" msgstr "Organisation unit could not be loaded" -msgid "Dashboard" -msgstr "Dashboard" - -msgid "Edit Event" -msgstr "Edit Event" - -msgid "View Event" -msgstr "View Event" - msgid "Selected program" msgstr "Selected program" @@ -933,6 +948,9 @@ msgstr "Loading" msgid "An error occurred while loading the form" msgstr "An error occurred while loading the form" +msgid "Back to all stages and events" +msgstr "Back to all stages and events" + msgid "Possible duplicates found" msgstr "Possible duplicates found" @@ -1273,6 +1291,9 @@ msgstr "Warning" msgid "stage not found in rules execution" msgstr "stage not found in rules execution" +msgid "Please provide an valid organisation unit" +msgstr "Please provide an valid organisation unit" + msgid "Delete event" msgstr "Delete event" @@ -1291,9 +1312,6 @@ msgstr "Event completed" msgid "The event cannot be edited after it has been completed" msgstr "The event cannot be edited after it has been completed" -msgid "Back to all stages and events" -msgstr "Back to all stages and events" - msgid "Notes about this event" msgstr "Notes about this event" @@ -1534,6 +1552,16 @@ msgstr "You do not have access to remove the link and delete the linked event" msgid "An error occurred while loading the widget." msgstr "An error occurred while loading the widget." +msgid "Linked event" +msgstr "Linked event" + +msgid "" +"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " +"the linked event details before entering data below" +msgstr "" +"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " +"the linked event details before entering data below" + msgid "Scheduled" msgstr "Scheduled" @@ -1567,6 +1595,12 @@ msgstr "Change" msgid "Value" msgstr "Value" +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Image" + msgid "New {{trackedEntityTypeName}} relationship" msgstr "New {{trackedEntityTypeName}} relationship" @@ -1628,6 +1662,45 @@ msgstr "Download data..." msgid "an error occurred loading working lists" msgstr "an error occurred loading working lists" +msgid "You do not have access to complete events" +msgstr "You do not have access to complete events" + +msgid "Complete events" +msgstr "Complete events" + +msgid "Are you sure you want to complete all active events in selection?" +msgstr "Are you sure you want to complete all active events in selection?" + +msgid "There are no active events to complete in the current selection." +msgstr "There are no active events to complete in the current selection." + +msgid "Error completing events" +msgstr "Error completing events" + +msgid "There was an error completing the events." +msgstr "There was an error completing the events." + +msgid "Details (Advanced)" +msgstr "Details (Advanced)" + +msgid "An unknown error occurred." +msgstr "An unknown error occurred." + +msgid "An error occurred while completing events" +msgstr "An error occurred while completing events" + +msgid "An error occurred while deleting the events" +msgstr "An error occurred while deleting the events" + +msgid "You do not have access to delete events" +msgstr "You do not have access to delete events" + +msgid "Delete events" +msgstr "Delete events" + +msgid "This cannot be undone. Are you sure you want to delete the selected events?" +msgstr "This cannot be undone. Are you sure you want to delete the selected events?" + msgid "Registration Date" msgstr "Registration Date" @@ -1643,14 +1716,129 @@ msgstr "Follow up" msgid "Choose a program stage to filter by {{label}}" msgstr "Choose a program stage to filter by {{label}}" -msgid "Active enrollments" -msgstr "Active enrollments" +msgid "" +"Some enrollments were completed successfully, but there was an error while " +"completing the rest. Please see the details below." +msgstr "" +"Some enrollments were completed successfully, but there was an error while " +"completing the rest. Please see the details below." -msgid "Completed enrollments" -msgstr "Completed enrollments" +msgid "" +"There was an error while completing the enrollments. Please see the details " +"below." +msgstr "" +"There was an error while completing the enrollments. Please see the details " +"below." -msgid "Cancelled enrollments" -msgstr "Cancelled enrollments" +msgid "" +"An unexpected error occurred while fetching the enrollments. Please try " +"again." +msgstr "" +"An unexpected error occurred while fetching the enrollments. Please try " +"again." + +msgid "" +"There are currently no active enrollments in the selection. All enrollments " +"are already completed or cancelled." +msgstr "" +"There are currently no active enrollments in the selection. All enrollments " +"are already completed or cancelled." + +msgid "This action will complete {{count}} active enrollment in your selection." +msgid_plural "This action will complete {{count}} active enrollment in your selection." +msgstr[0] "This action will complete {{count}} active enrollment in your selection." +msgstr[1] "This action will complete {{count}} active enrollments in your selection." + +msgid "{{count}} enrollment already marked as completed will not be changed." +msgid_plural "{{count}} enrollment already marked as completed will not be changed." +msgstr[0] "{{count}} enrollment already marked as completed will not be changed." +msgstr[1] "{{count}} enrollments already marked as completed will not be changed." + +msgid "Mark all events within enrollments as complete" +msgstr "Mark all events within enrollments as complete" + +msgid "You do not have access to bulk complete enrollments" +msgstr "You do not have access to bulk complete enrollments" + +msgid "Complete enrollments" +msgstr "Complete enrollments" + +msgid "Error completing enrollments" +msgstr "Error completing enrollments" + +msgid "No active enrollments to complete" +msgstr "No active enrollments to complete" + +msgid "Complete {{count}} enrollment" +msgid_plural "Complete {{count}} enrollment" +msgstr[0] "Complete {{count}} enrollment" +msgstr[1] "Complete {{count}} enrollments" + +msgid "An error occurred when completing the enrollments" +msgstr "An error occurred when completing the enrollments" + +msgid "An unknown error occurred when completing enrollments" +msgstr "An unknown error occurred when completing enrollments" + +msgid "You do not have access to delete enrollments" +msgstr "You do not have access to delete enrollments" + +msgid "Delete enrollments" +msgstr "Delete enrollments" + +msgid "Delete selected enrollments" +msgstr "Delete selected enrollments" + +msgid "An error occurred while loading the selected enrollments. Please try again." +msgstr "An error occurred while loading the selected enrollments. Please try again." + +msgid "" +"This action will permanently delete the selected enrollments, including all " +"associated data and events." +msgstr "" +"This action will permanently delete the selected enrollments, including all " +"associated data and events." + +msgid "Active enrollments ({{count}})" +msgid_plural "Active enrollments ({{count}})" +msgstr[0] "Active enrollments ({{count}})" +msgstr[1] "Active enrollments ({{count}})" + +msgid "Completed enrollments ({{count}})" +msgid_plural "Completed enrollments ({{count}})" +msgstr[0] "Completed enrollments ({{count}})" +msgstr[1] "Completed enrollments ({{count}})" + +msgid "Cancelled enrollments ({{count}})" +msgid_plural "Cancelled enrollments ({{count}})" +msgstr[0] "Cancelled enrollments ({{count}})" +msgstr[1] "Cancelled enrollments ({{count}})" + +msgid "Delete {{count}} enrollment" +msgid_plural "Delete {{count}} enrollment" +msgstr[0] "Delete {{count}} enrollment" +msgstr[1] "Delete {{count}} enrollments" + +msgid "An error occurred when deleting enrollments" +msgstr "An error occurred when deleting enrollments" + +msgid "Delete {{ trackedEntityName }} with all enrollments" +msgstr "Delete {{ trackedEntityName }} with all enrollments" + +msgid "Delete {{count}} {{ trackedEntityName }}" +msgid_plural "Delete {{count}} {{ trackedEntityName }}" +msgstr[0] "Delete {{count}} {{ trackedEntityName }}" +msgstr[1] "Delete {{count}} {{ trackedEntityName }}" + +msgid "" +"Deleting records will also delete any associated enrollments and events. " +"This cannot be undone. Are you sure you want to delete?" +msgstr "" +"Deleting records will also delete any associated enrollments and events. " +"This cannot be undone. Are you sure you want to delete?" + +msgid "An error occurred while deleting the records" +msgstr "An error occurred while deleting the records" msgid "Working list could not be updated" msgstr "Working list could not be updated" @@ -1661,6 +1849,14 @@ msgstr "an error occurred loading the working lists" msgid "an error occurred loading Tracked entity instance lists" msgstr "an error occurred loading Tracked entity instance lists" +msgid "{{count}} selected" +msgid_plural "{{count}} selected" +msgstr[0] "{{count}} selected" +msgstr[1] "{{count}} selected" + +msgid "Deselect all" +msgstr "Deselect all" + msgid "Update view" msgstr "Update view" diff --git a/i18n/es.po b/i18n/es.po index 62ee25e726..301f636658 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -7,7 +7,6 @@ # Prabhjot Singh, 2023 # Christian Atavillos, 2023 # Alison Andrade , 2024 -# Philip Larsen Donnelly, 2024 # Gabriela Rodriguez , 2024 # Janeth Cruz, 2024 # Enzo Nicolas Rossi , 2024 @@ -15,13 +14,14 @@ # Marta Vila , 2024 # Juan M Alcantara Acosta , 2024 # Manuel Silva , 2024 +# Philip Larsen Donnelly, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Manuel Silva , 2024\n" +"Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Spanish (https://app.transifex.com/hisp-uio/teams/100509/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -712,8 +712,10 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Agregue una nueva inscripción para {{teiDisplayName}} en este programa." -msgid "No access to program owner." -msgstr "Sin acceso al propietario del programa." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} no está inscrito en este programa." @@ -1126,8 +1128,8 @@ msgstr "No hay tipos de entidades rastreadas disponibles" msgid "Assigned to" msgstr "Asignado a" -msgid "You don't have access to edit this assignee" -msgstr "No tienes acceso para editar este asignado." +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "Editar" @@ -1135,8 +1137,8 @@ msgstr "Editar" msgid "No one is assigned to this event" msgstr "Nadie está asignado a este evento" -msgid "You don't have access to assign an assignee" -msgstr "No tienes acceso para asignar un asignado." +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "Asignar" @@ -1185,6 +1187,9 @@ msgstr "Marca como cancelado" msgid "Mark incomplete" msgstr "Marca como incompleto" +msgid "You do not have access to delete this enrollment" +msgstr "" + msgid "Delete enrollment" msgstr "Borrar inscripción" @@ -1602,7 +1607,7 @@ msgid "Change" msgstr "Cambio" msgid "Value" -msgstr "" +msgstr "Valor" msgid "New {{trackedEntityTypeName}} relationship" msgstr "Nueva relación de {{trackedEntityTypeName}}" diff --git a/i18n/es_419.po b/i18n/es_419.po index c94ef95e6a..f996ede3ef 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jaime Bosque , 2024\n" "Language-Team: Spanish (Latin America) (https://app.transifex.com/hisp-uio/teams/100509/es_419/)\n" @@ -700,8 +700,10 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Agregue una nueva inscripción para {{teiDisplayName}} en este programa." -msgid "No access to program owner." -msgstr "Sin acceso al propietario del programa." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} no está inscrito en este programa." @@ -1098,7 +1100,7 @@ msgstr "" msgid "Assigned to" msgstr "" -msgid "You don't have access to edit this assignee" +msgid "You don't have access to edit the assigned user" msgstr "" msgid "Edit" @@ -1107,7 +1109,7 @@ msgstr "" msgid "No one is assigned to this event" msgstr "No hay nadie asignado a este evento." -msgid "You don't have access to assign an assignee" +msgid "You don't have access to assign a user to this event" msgstr "" msgid "Assign" @@ -1153,6 +1155,9 @@ msgstr "" msgid "Mark incomplete" msgstr "" +msgid "You do not have access to delete this enrollment" +msgstr "" + msgid "Delete enrollment" msgstr "" @@ -1534,7 +1539,7 @@ msgid "Change" msgstr "" msgid "Value" -msgstr "" +msgstr "Valor" msgid "New {{trackedEntityTypeName}} relationship" msgstr "" diff --git a/i18n/lo.po b/i18n/lo.po index 4decb60044..3137abc4f2 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Saysamone Sibounma, 2024\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" @@ -682,8 +682,10 @@ msgstr "ບໍ່ມີການລົງທະບຽນທີ່ເຄື່ອ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "ເພີ່ມການລົງທະບຽນໃໝ່ສຳລັບ {{teiDisplayName}} ໃນໂປແກຼມນີ້." -msgid "No access to program owner." -msgstr "ບໍ່ສາມາດເຂົ້າເຖິງເຈົ້າຂອງໂປແກຼມ." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} ບໍ່ໄດ້ລົງທະບຽນຢູ່ໃນໂປແກຼມນີ້." @@ -1077,8 +1079,8 @@ msgstr "ບໍ່ມີປະເພດບາຍບຸກຄົນທີ່ສາ msgid "Assigned to" msgstr "ມອບໝາຍໃຫ້" -msgid "You don't have access to edit this assignee" -msgstr "ທ່ານບໍ່ມີສິດໃນການແກ້ໄຂຂໍ້ມູນຜູ້ມອບໝາຍ" +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "ແກ້ໄຂ" @@ -1086,8 +1088,8 @@ msgstr "ແກ້ໄຂ" msgid "No one is assigned to this event" msgstr "ບໍ່ມີຜູ້ຖືກມອບໝາຍໃຫ້ກັບເຫດການນີ້" -msgid "You don't have access to assign an assignee" -msgstr "ທ່ານບໍ່ມີສິດໃນການມອບໝາຍ" +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "ມອບໝາຍ" @@ -1134,6 +1136,9 @@ msgstr "ໝາຍວ່າຖືກຍົກເລີກ" msgid "Mark incomplete" msgstr "ໝາຍວ່າບໍ່ຄົບຖ້ວນ" +msgid "You do not have access to delete this enrollment" +msgstr "" + msgid "Delete enrollment" msgstr "ລົບການລົງທະບຽນ" diff --git a/i18n/nb.po b/i18n/nb.po index 6b566e538a..97ce9b28c4 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Caroline Hesthagen Holen , 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" @@ -689,8 +689,10 @@ msgstr "Det er ingen aktive registreringer." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Legg til ny registrering for {{teiDisplayName}} i dette programmet." -msgid "No access to program owner." -msgstr "Ingen tilgang til programeier." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} er ikke registrert i dette programmet." @@ -1090,8 +1092,8 @@ msgstr "Det er ingen sporbare enhetstyper tilgjengelig" msgid "Assigned to" msgstr "Tildelt til" -msgid "You don't have access to edit this assignee" -msgstr "Du har ikke tilgang til å redigere denne tildelte brukeren" +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "Rediger" @@ -1099,8 +1101,8 @@ msgstr "Rediger" msgid "No one is assigned to this event" msgstr "Ingen er tildelt denne hendelsen" -msgid "You don't have access to assign an assignee" -msgstr "Du har ikke tilgang til å tildele bruker" +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "Tildel" @@ -1149,6 +1151,9 @@ msgstr "Merk som kansellert" msgid "Mark incomplete" msgstr "Merk som ufullstendig" +msgid "You do not have access to delete this enrollment" +msgstr "" + msgid "Delete enrollment" msgstr "Slett registrering" diff --git a/i18n/nl.po b/i18n/nl.po index 9f88c8b400..6a73105036 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Rica, 2024\n" "Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" @@ -697,8 +697,10 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Voeg een nieuwe inschrijving toe voor {{teiDisplayName}} in dit programma." -msgid "No access to program owner." -msgstr "Geen toegang tot programma-eigenaar." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} is niet ingeschreven voor dit programma." @@ -1104,7 +1106,7 @@ msgstr "" msgid "Assigned to" msgstr "Toegewezen aan" -msgid "You don't have access to edit this assignee" +msgid "You don't have access to edit the assigned user" msgstr "" msgid "Edit" @@ -1113,7 +1115,7 @@ msgstr "Bewerk" msgid "No one is assigned to this event" msgstr "Er is niemand toegewezen aan dit evenement" -msgid "You don't have access to assign an assignee" +msgid "You don't have access to assign a user to this event" msgstr "" msgid "Assign" @@ -1164,6 +1166,9 @@ msgstr "Markeren als geannuleerd" msgid "Mark incomplete" msgstr "Markering onvolledig" +msgid "You do not have access to delete this enrollment" +msgstr "" + msgid "Delete enrollment" msgstr "Inschrijving verwijderen" diff --git a/i18n/pt.po b/i18n/pt.po index 1a05f44f6b..7261e12ecb 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -11,13 +11,14 @@ # Jason Pickering , 2024 # Helton Dias, 2024 # Shelsea Chumaio, 2024 +# Laurência Luís, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Shelsea Chumaio, 2024\n" +"Last-Translator: Laurência Luís, 2024\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -170,13 +171,13 @@ msgid "Complete event" msgstr "Evento completo" msgid "{{ stageName }} - Basic info" -msgstr "" +msgstr "{{ stageName }} - Informações básicas" msgid "{{ stageName }} - Assignee" -msgstr "" +msgstr "{{ stageName }} - Atribuído" msgid "{{ stageName }} - Status" -msgstr "" +msgstr "{{ stageName }} - Estado" msgid "Please select {{categoryName}}" msgstr "Por Favor Selecione {{categoryName}}" @@ -198,10 +199,10 @@ msgid "Metadata error. see log for details" msgstr "Erro de metadados. veja o log para detalhes" msgid "{{ stageName }} - Details" -msgstr "" +msgstr "{{ stageName }} - Detalhes" msgid "{{ stageName }} - {{ sectionName }}" -msgstr "" +msgstr "{{ stageName }} - {{ sectionName }}" msgid "Assigned user" msgstr "Utilizador atribuído" @@ -250,7 +251,7 @@ msgid "Completed" msgstr "Concluído" msgid "Please add or cancel note before saving the event" -msgstr "" +msgstr "Adicionar ou cancelar a nota antes de guardar o evento" msgid "Save and add another" msgstr "Gravar e adicionar outro" @@ -336,26 +337,26 @@ msgid "An error has occurred. See log for details" msgstr "Ocorreu um erro. Veja o log para detalhes" msgid "{{programStageName}} completed" -msgstr "" +msgstr "{{programStageName}} Concluído" msgid "" "Would you like to complete the enrollment and all active events as well?" -msgstr "" +msgstr "Gostaria de completar a inscrição e todos os eventos activos?" msgid "{{count}} event in {{programStageName}}" msgid_plural "{{count}} event in {{programStageName}}" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{{count}} evento em {{programStageName}}" +msgstr[1] "{{count}} eventos em {{programStageName}}" +msgstr[2] "{{count}} Eventos em {{programStageName}}" msgid "Yes, complete enrollment and events" -msgstr "" +msgstr "Sim, completar a inscrição e os eventos" msgid "Complete enrollment only" -msgstr "" +msgstr "Completar apenas a inscrição" msgid "Would you like to complete the enrollment?" -msgstr "" +msgstr "Gostaria de completar a inscrição?" msgid "Complete enrollment" msgstr "Completar inscrição" @@ -391,10 +392,10 @@ msgid "validation failed" msgstr "falha na validação" msgid "No feedback for this event yet" -msgstr "" +msgstr "Ainda não há feedback para este evento" msgid "No indicator output for this event yet" -msgstr "" +msgstr "Não existe nenhum resultado do indicador para este evento" msgid "Generate new event" msgstr "Gerar novo evento" @@ -531,7 +532,7 @@ msgid "Select image" msgstr "Selecione a imagem" msgid "Type to filter options" -msgstr "" +msgstr "Tipo de opções de filtros" msgid "No match found" msgstr "Nenhuma correspondência encontrada" @@ -619,15 +620,16 @@ msgstr "Programa não existe" msgid "Selected program is invalid for selected organisation unit" msgstr "" +"O programa selecionado é inválido para a unidade organizacional selecionada" msgid "Add note" msgstr "Adicionar uma nota" msgid "You don't have access to write notes" -msgstr "" +msgstr "Não tem acesso para escrever notas" msgid "Write note" -msgstr "" +msgstr "Escrever nota" msgid "was blanked out and hidden by your last action" msgstr "foi apagado e escondido pela sua última ação" @@ -639,13 +641,13 @@ msgid "Close the notice" msgstr "Fechar o aviso" msgid "Enrollment with id \"{{enrollmentId}}\" does not exist" -msgstr "" +msgstr "O registo com o id \"{{enrollmentId}}\" não existe" msgid "Tracked entity instance with id \"{{teiId}}\" does not exist" msgstr "A instância de entidade rastreada com id \"{{teiId}}\" não existe" msgid "Program with id \"{{programId}}\" does not exist" -msgstr "" +msgstr "O programa com o id \"{{programId}}\" não existe" msgid "" "An error occurred while fetching enrollments. Please enter a valid url." @@ -701,8 +703,12 @@ msgstr "Não há inscrições ativas." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Adicione uma nova inscrição para {{teiDisplayName}} neste programa." -msgid "No access to program owner." -msgstr "Sem acesso ao proprietário do programa." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" +"Não tem permissões para aceder a este programa, unidade de registo, contacte" +" o seu administrador para mais informações." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} não está inscrito neste programa." @@ -743,7 +749,7 @@ msgid "There was an error loading the page" msgstr "Ocorreu um erro ao carregar a página" msgid "Choose an organisation unit to start reporting" -msgstr "" +msgstr "Selecionar uma unidade organizacional para iniciar o preenchimento " msgid "Program stage is invalid" msgstr "O estagio do programa é inválida" @@ -758,7 +764,7 @@ msgid "Refer" msgstr "Referir" msgid "You can't add any more {{ programStageName }} events" -msgstr "" +msgstr "Não é possível adicionar mais eventos {{ programStageName }} " msgid "Cancel without saving" msgstr "Cancelar sem gravar" @@ -779,6 +785,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"A opção de categoria não é válida para a unidade organizacional selecionada." +" Por favor, selecione uma combinação válida." msgid "Please select {{category}}." msgstr "Selecione {{category}}." @@ -796,6 +804,7 @@ msgid "" "You don't have access to create a {{trackedEntityName}} in the current " "selections" msgstr "" +"Não tem acesso para criar um {{trackedEntityName}} nas selecções actuais" msgid "Choose the {{missingCategories}} to start reporting" msgstr "Escolha as {{missingCategories}} para começar a relatar" @@ -819,7 +828,7 @@ msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "Nova Inscrição no programa{{escape}} {{programName}}" msgid "Save {{trackedEntityTypeName}}" -msgstr "" +msgstr "Guardar {{trackedEntityTypeName}}" msgid "Save {{trackedEntityName}}" msgstr "Gravar {{trackedEntityName}}" @@ -885,7 +894,7 @@ msgid "Edit event" msgstr "Editar evento" msgid "View changelog" -msgstr "" +msgstr "Ver registo de alterações" msgid "Event details" msgstr "Detalhes do evento" @@ -925,10 +934,10 @@ msgid "Dashboard" msgstr "Painel de Instrumentos" msgid "Edit Event" -msgstr "" +msgstr "Editar evento" msgid "View Event" -msgstr "" +msgstr "Ver evento" msgid "Selected program" msgstr "Programa selecionado" @@ -947,6 +956,8 @@ msgstr[2] "Preencha pelo menos {{count}} atributos para pesquisar" msgid "Could not retrieve metadata. Please try again later." msgstr "" +"Não foi possível recuperar os metadados. Por favor, tente novamente mais " +"tarde." msgid "The enrollment event data could not be found" msgstr "Os dados do evento de inscrição não foram encontrados" @@ -955,7 +966,7 @@ msgid "Loading" msgstr "Carregando.." msgid "An error occurred while loading the form" -msgstr "" +msgstr "Ocorreu um erro ao carregar o formulário" msgid "Possible duplicates found" msgstr "Possíveis duplicatas encontradas" @@ -976,7 +987,7 @@ msgid "No results found for " msgstr "Nenhum resultado encontrado para" msgid "Choose an organisation unit" -msgstr "" +msgstr "Escolha uma unidade organizacional" msgid "Clear selection" msgstr "Limpar seleção" @@ -989,6 +1000,7 @@ msgstr "Procurar um programa" msgid "Some programs are being filtered by the chosen organisation unit" msgstr "" +"Alguns programas estão a ser filtrados pela unidade organizacional escolhida" msgid "Show all programs" msgstr "Mostrar todos os programas" @@ -1093,7 +1105,7 @@ msgid "Create saved list" msgstr "Criar lista gravadas" msgid "Create new in another program" -msgstr "" +msgstr "Criar novo noutro programa" msgid "Create new event" msgstr "Criar um novo evento" @@ -1102,13 +1114,13 @@ msgid "Search for a {{trackedEntityName}} in {{programName}}" msgstr "Procure por um {{trackedEntityName}} em {{programName}}" msgid "No tracked entity types available" -msgstr "" +msgstr "Não há tipos de entidades rastreadas disponíveis" msgid "Assigned to" msgstr "Atribuído a" -msgid "You don't have access to edit this assignee" -msgstr "" +msgid "You don't have access to edit the assigned user" +msgstr "Não tem acesso para editar o utilizador atribuído" msgid "Edit" msgstr "Editar" @@ -1116,8 +1128,8 @@ msgstr "Editar" msgid "No one is assigned to this event" msgstr "Ninguém está atribuído a este evento" -msgid "You don't have access to assign an assignee" -msgstr "" +msgid "You don't have access to assign a user to this event" +msgstr "Não tem acesso para atribuir um utilizador a este evento" msgid "Assign" msgstr "Atribuir" @@ -1167,7 +1179,7 @@ msgid "Mark incomplete" msgstr "Marca incompleta" msgid "You do not have access to delete this enrollment" -msgstr "" +msgstr "Não tem acesso para apagar este registo" msgid "Delete enrollment" msgstr "Excluir inscrição" @@ -1192,10 +1204,12 @@ msgid "Transfer" msgstr "Transferir" msgid "An error occurred while transferring ownership" -msgstr "" +msgstr "Ocorreu um erro durante a transferência de propriedade" msgid "Existing dates for auto-generated events will not be updated." msgstr "" +"As datas existentes para eventos gerados automaticamente não serão " +"actualizadas." msgid "Latitude" msgstr "Latitude" @@ -1204,7 +1218,7 @@ msgid "Longitude" msgstr "Longitude" msgid "Set coordinates" -msgstr "" +msgstr "Definir coordenadas" msgid "Coordinates" msgstr "Coordenadas" @@ -1213,10 +1227,10 @@ msgid "Delete polygon" msgstr "Excluir polígono" msgid "Close without saving" -msgstr "" +msgstr "Fechar sem guardar" msgid "Finish drawing before saving" -msgstr "" +msgstr "Terminar o desenho antes de o guardar" msgid "Set area" msgstr "Definir área" @@ -1225,19 +1239,25 @@ msgid "" "Transferring enrollment ownership from {{ownerOrgUnit}} to " "{{newOrgUnit}}{{escape}}" msgstr "" +"Transferência da propriedade do registo de {{ownerOrgUnit}} para " +"{{newOrgUnit}}{{escape}}" msgid "" "You will lose access to the enrollment when transferring ownership to " "{{organisationUnit}}." msgstr "" +"O utilizador perderá o acesso ao registo quando transferir a propriedade " +"para {{organisationUnit}}." msgid "Transfer Ownership" -msgstr "" +msgstr "Transferir a propriedade" msgid "" "Choose the organisation unit to which enrollment ownership should be " "transferred." msgstr "" +"Selecionar a unidade organizacional para a qual a propriedade do registo " +"deve ser transferida." msgid "Enrollment date" msgstr "Data de inscrição" @@ -1254,22 +1274,22 @@ msgid "Follow-up" msgstr "Acompanhamento" msgid "Started at{{escape}}" -msgstr "" +msgstr "Iniciado em{{escape}}" msgid "Owned by{{escape}}" -msgstr "" +msgstr "Propriedade de{{escape}}" msgid "Cancelled" msgstr "Cancelado" msgid "Add coordinates" -msgstr "" +msgstr "Adicionar coordenadas" msgid "Add area" -msgstr "" +msgstr "Adicionar área" msgid "Please add or cancel the note before saving the event" -msgstr "" +msgstr "Adicione ou cancele a nota antes de guardar o evento" msgid "organisation unit could not be retrieved. Please try again later." msgstr "" @@ -1283,13 +1303,13 @@ msgid "program or stage is invalid" msgstr "programa ou estágio é inválido" msgid "Notes about this enrollment" -msgstr "" +msgstr "Notas sobre este registo" msgid "Write a note about this enrollment" -msgstr "" +msgstr "Escrever uma nota sobre este registo" msgid "This enrollment doesn't have any notes" -msgstr "" +msgstr "Este registo não tem notas" msgid "Error" msgstr "Erro" @@ -1316,19 +1336,19 @@ msgid "Event completed" msgstr "Evento concluído" msgid "The event cannot be edited after it has been completed" -msgstr "" +msgstr "O evento não pode ser editado depois de ter sido concluído" msgid "Back to all stages and events" msgstr "Voltar para todos os palcos e eventos" msgid "Notes about this event" -msgstr "" +msgstr "Notas sobre este evento" msgid "Write a note about this event" -msgstr "" +msgstr "Escrever uma nota sobre este evento" msgid "This event doesn't have any notes" -msgstr "" +msgstr "Este evento não tem quaisquer notas" msgid "Schedule date info" msgstr "Informação da data da programação" @@ -1374,10 +1394,10 @@ msgid "Schedule date / Due date" msgstr "Data de programação / Data de vencimento" msgid "Event notes" -msgstr "" +msgstr "Notas do evento" msgid "Write a note about this scheduled event" -msgstr "" +msgstr "Escrever uma nota sobre este evento programado" msgid "Save note" msgstr "Gravar notas" @@ -1418,22 +1438,25 @@ msgid "Fix errors in the form to continue." msgstr "Corrija os erros no formulário para continuar." msgid "You do not have access to delete this {{trackedEntityTypeName}}" -msgstr "" +msgstr "Não tem acesso para apagar{{trackedEntityTypeName}}" msgid "Delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Apagar{{trackedEntityTypeName}}" msgid "" "Are you sure you want to delete this {{trackedEntityTypeName}}? This will " "permanently remove the {{trackedEntityTypeName}} and all its associated " "enrollments and events in all programs." msgstr "" +"Tem a certeza de que pretende apagar {{trackedEntityTypeName}}? Isto irá " +"remover permanentemente o {{trackedEntityTypeName}} e todos os registos e " +"eventos associados em todos os programas." msgid "There was a problem deleting the {{trackedEntityTypeName}}" -msgstr "" +msgstr "Houve um problema ao eliminar o ficheiro {{trackedEntityTypeName}}" msgid "Yes, delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Sim, apagar {{trackedEntityTypeName}}" msgid "Profile widget could not be loaded. Please try again later" msgstr "" @@ -1441,31 +1464,31 @@ msgstr "" "tarde" msgid "{{trackedEntityTypeName}} profile" -msgstr "" +msgstr "{{trackedEntityTypeName}} perfil" msgid "tracked entity instance" msgstr "instância de entidade rastreada" msgid "Link to an existing {{linkableStageLabel}}" -msgstr "" +msgstr "Ligar a um existente {{linkableStageLabel}}" msgid "Choose a {{linkableStageLabel}}" -msgstr "" +msgstr "Escolha um {{linkableStageLabel}}" msgid "{{ linkableStageLabel }} is not repeatable" -msgstr "" +msgstr "{{ linkableStageLabel }} Não é repetivo" msgid "{{ linkableStageLabel }} has no linkable events" -msgstr "" +msgstr "{{ linkableStageLabel }} Não tem eventos associados" msgid "Ambiguous relationships, contact system administrator" -msgstr "" +msgstr "Relacionamentos ambíguos, contacte o administrador do sistema" msgid "Enter details now" -msgstr "" +msgstr "Introduzir dados agora" msgid "Link to an existing" -msgstr "" +msgstr "Ligar a um existente " msgid "Scheduled date" msgstr "Data agendada" @@ -1474,10 +1497,10 @@ msgid "Report date" msgstr "Data do relatório" msgid "Please select a valid event" -msgstr "" +msgstr "Selecione um evento válido" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "Não tem acesso para criar eventos neste estágio" msgid "This stage can only have one event" msgstr "Esta etapa só pode ter um evento" @@ -1486,18 +1509,20 @@ msgid "New {{ eventName }} event" msgstr "Novo evento de {{ eventName }}" msgid "An error occurred while deleting the event" -msgstr "" +msgstr "Ocorreu um erro ao apagar o evento" msgid "" "Deleting an event is permanent and cannot be undone. Are you sure you want " "to delete this event?" msgstr "" +"A eliminação de um evento é permanente e não pode ser anulada. Tem a certeza" +" de que pretende apagar este evento?" msgid "An error occurred when updating event status" -msgstr "" +msgstr "Ocorreu um erro ao atualizar o estado do evento" msgid "Unskip" -msgstr "" +msgstr "Descompactar" msgid "Skip" msgstr "Saltar" @@ -1519,9 +1544,9 @@ msgstr "" msgid "{{ count }} event" msgid_plural "{{ count }} event" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{{ count }} evento" +msgstr[1] "{{count}} eventos" +msgstr[2] "{{count}} Eventos" msgid "{{ overdueEvents }} overdue" msgstr "{{ overdueEvents }} em atraso" @@ -1533,10 +1558,10 @@ msgid "Stages and Events" msgstr "Fases e Eventos" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "Ocorreu um erro ao carregar o widget." msgid "View linked event" -msgstr "" +msgstr "Ver evento associado" msgid "Scheduled" msgstr "Agendado" @@ -1545,7 +1570,7 @@ msgid "Changelog" msgstr "Registo de mudanças" msgid "No changes to display" -msgstr "" +msgstr "Sem alterações no ecrã" msgid "Updated" msgstr "Actualizado" @@ -1566,35 +1591,37 @@ msgid "Data item" msgstr "Item de dados" msgid "Change" -msgstr "" +msgstr "Alterar" msgid "Value" msgstr "Valor" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "" +msgstr "Relacionamento {{trackedEntityTypeName}} " msgid "Missing implementation step" -msgstr "" +msgstr "Falta etapa de implementação" msgid "Go back without saving relationship" -msgstr "" +msgstr "Voltar atrás sem guardar o relacionamento" msgid "New Relationship" -msgstr "" +msgstr "Novo relacionamento" msgid "Link to an existing {{tetName}}" -msgstr "" +msgstr "Associar a um existente {{tetName}}" msgid "An error occurred while adding the relationship" -msgstr "" +msgstr "Ocorreu um erro ao adicionar o relacionamento" msgid "" "Something went wrong while loading relationships. Please try again later." msgstr "" +"Algo correu mal ao carregar os relacionamento. Por favor, tente novamente " +"mais tarde." msgid "{{trackedEntityTypeName}} relationships" -msgstr "" +msgstr "{{trackedEntityTypeName}} Relacionamentos" msgid "Delete relationship" msgstr "Apagar relacionamento" @@ -1603,21 +1630,24 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" +"A eliminação da relação é permanente e não pode ser anulada. Tem a certeza " +"de que pretende eliminar este relacionamento?" msgid "Yes, delete relationship" -msgstr "" +msgstr "Sim, apagar relacionamento" msgid "An error occurred while deleting the relationship." -msgstr "" +msgstr "Ocorreu um erro ao apagar o relacionamento." msgid "To open this relationship, please wait until saving is complete" msgstr "" +"Para abrir este relacionamento, aguarde até que a gravação esteja concluída" msgid "Type" msgstr "Tipo" msgid "Created date" -msgstr "" +msgstr "Data de criação" msgid "Program stage name" msgstr "Nome do estágio do programa" @@ -1771,7 +1801,7 @@ msgid "Error editing the event, the changes made were not saved" msgstr "Erro ao editar o evento, as alterações feitas não foram gravadas" msgid "Error updating the Assignee" -msgstr "" +msgstr "Erro ao atualizar o destinatário" msgid "Set coordinate" msgstr "Definir coordenada" diff --git a/i18n/ru.po b/i18n/ru.po index 23d7e47cd1..0d16b78d76 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -701,8 +701,10 @@ msgstr "" "Создать новую регистрационную запись для объекта {{teiDisplayName}} в данной" " программе." -msgid "No access to program owner." -msgstr "Нет доступа к владельцу программы." +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "Объект {{teiDisplayName}} не зарегистрирован в данной программе." @@ -1106,8 +1108,8 @@ msgstr "Нет доступных отслеживаемых типов объе msgid "Assigned to" msgstr "Назначено пользователю" -msgid "You don't have access to edit this assignee" -msgstr "У вас нет доступа к редактированию данного назначенного пользователя" +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "Редактировать" @@ -1115,8 +1117,8 @@ msgstr "Редактировать" msgid "No one is assigned to this event" msgstr "Никто не назначен для данного события" -msgid "You don't have access to assign an assignee" -msgstr "У вас нет доступа к назначению пользователя" +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "Назначить" diff --git a/i18n/zh.po b/i18n/zh.po index d18eb1bd0d..68c558db1b 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" +"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: easylin , 2024\n" "Language-Team: Chinese (https://app.transifex.com/hisp-uio/teams/100509/zh/)\n" @@ -668,8 +668,10 @@ msgstr "没有有效的注册。" msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "在此计划中为 {{teiDisplayName}} 添加新注册。" -msgid "No access to program owner." -msgstr "无法访问项目所有者。" +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "该项目未报名{{teiDisplayName}} 。" @@ -1056,8 +1058,8 @@ msgstr "没有可跟踪的实体类型" msgid "Assigned to" msgstr "指派到" -msgid "You don't have access to edit this assignee" -msgstr "您无权编辑该受让人" +msgid "You don't have access to edit the assigned user" +msgstr "" msgid "Edit" msgstr "编辑" @@ -1065,8 +1067,8 @@ msgstr "编辑" msgid "No one is assigned to this event" msgstr "没有人被分配到的该事件" -msgid "You don't have access to assign an assignee" -msgstr "您无权指定受托人" +msgid "You don't have access to assign a user to this event" +msgstr "" msgid "Assign" msgstr "分配" @@ -1111,6 +1113,9 @@ msgstr "标记为已取消" msgid "Mark incomplete" msgstr "标记不完整" +msgid "You do not have access to delete this enrollment" +msgstr "您没有删除此注册登记的权限" + msgid "Delete enrollment" msgstr "删除报名" @@ -1192,10 +1197,10 @@ msgid "Follow-up" msgstr "后续" msgid "Started at{{escape}}" -msgstr "" +msgstr "开始于{{escape}}" msgid "Owned by{{escape}}" -msgstr "" +msgstr "所有者{{escape}}" msgid "Cancelled" msgstr "已取消" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index 8d01178792..6a0a80ee90 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -667,8 +667,10 @@ msgstr "没有活跃的注册。" msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "在此计划中为 {{teiDisplayName}} 添加新注册。" -msgid "No access to program owner." -msgstr "无法访问程序所有者。" +msgid "" +"You do not have permissions to access to this program, registering unit or " +"record, contact your administrator for more information." +msgstr "" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "该项目未报名{{teiDisplayName}} 。" @@ -1055,7 +1057,7 @@ msgstr "" msgid "Assigned to" msgstr "指派到" -msgid "You don't have access to edit this assignee" +msgid "You don't have access to edit the assigned user" msgstr "" msgid "Edit" @@ -1064,7 +1066,7 @@ msgstr "编辑" msgid "No one is assigned to this event" msgstr "没有人被分配到的该事件" -msgid "You don't have access to assign an assignee" +msgid "You don't have access to assign a user to this event" msgstr "" msgid "Assign" diff --git a/package.json b/package.json index 120562781a..4f75109c84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.14.8", + "version": "101.18.0", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.14.8", + "@dhis2/rules-engine-javascript": "101.18.0", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", @@ -19,6 +19,7 @@ "@dhis2/d2-ui-rich-text": "^7.4.0", "@dhis2/d2-ui-sharing-dialog": "^7.3.3", "@dhis2/ui": "^9.10.1", + "@dhis2-ui/calendar": "10.0.3", "@joakim_sm/react-infinite-calendar": "^2.4.2", "@material-ui/core": "3.9.4", "@material-ui/icons": "3", @@ -136,6 +137,7 @@ "@dhis2/app-runtime": "^3.10.2", "@babel/preset-react": "7.16.7", "@dhis2/ui": "^9.10.1", + "@dhis2-ui/calendar": "10.0.3", "@js-temporal/polyfill": "0.4.3", "core-js": "2.5.7", "i18next": "^20.5.0" diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 5609a84908..ba125a9d60 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.14.8", + "version": "101.18.0", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { diff --git a/src/core_modules/capture-core-utils/featuresSupport/support.js b/src/core_modules/capture-core-utils/featuresSupport/support.js index 103df995a5..ff5fb4f11a 100644 --- a/src/core_modules/capture-core-utils/featuresSupport/support.js +++ b/src/core_modules/capture-core-utils/featuresSupport/support.js @@ -10,6 +10,7 @@ export const FEATURES = Object.freeze({ trackerFileEndpoint: 'trackerFileEndpoint', trackedEntitiesCSV: 'trackedEntitiesCSV', newAocApiSeparator: 'newAocApiSeparator', + newEntityFilterQueryParam: 'newEntityFilterQueryParam', }); // The first minor version that supports the feature @@ -24,6 +25,7 @@ const MINOR_VERSION_SUPPORT = Object.freeze({ [FEATURES.changelogs]: 41, [FEATURES.trackedEntitiesCSV]: 40, [FEATURES.newAocApiSeparator]: 41, + [FEATURES.newEntityFilterQueryParam]: 41, }); export const hasAPISupportForFeature = (minorVersion: string | number, featureName: string) => diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js new file mode 100644 index 0000000000..1387ce9209 --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js @@ -0,0 +1,171 @@ +// @flow +import type { ComponentType } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core/styles'; +import { colors, IconChevronRight16 } from '@dhis2/ui'; +import { useWorkingListLabel } from './hooks/useWorkingListLabel'; +import { BreadcrumbItem } from '../common/BreadcrumbItem'; +import { defaultDialogProps } from '../../Dialogs/DiscardDialog.constants'; +import { DiscardDialog } from '../../Dialogs/DiscardDialog.component'; +import { + EnrollmentPageKeys, +} from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; + +type Props = { + onBackToMainPage: () => void, + onBackToDashboard?: () => void, + onBackToViewEvent?: () => void, + displayFrontPageList: boolean, + programId: string, + userInteractionInProgress?: boolean, + trackedEntityName?: string, +}; + +export const EventStatuses = { + ACTIVE: 'ACTIVE', + COMPLETED: 'COMPLETED', + SKIPPED: 'SKIPPED', + SCHEDULE: 'SCHEDULE', + OVERDUE: 'OVERDUE', +}; + +const styles = { + container: { + display: 'flex', + alignItems: 'center', + }, +}; + +const pageKeys = Object.freeze({ + MAIN_PAGE: 'mainPage', + ...EnrollmentPageKeys, +}); + +const eventIsScheduled = eventStatus => [EventStatuses.SCHEDULE, EventStatuses.OVERDUE, EventStatuses.SKIPPED] + .includes(eventStatus); + +const BreadcrumbsPlain = ({ + onBackToMainPage, + onBackToDashboard, + onBackToViewEvent, + eventStatus, + programId, + trackedEntityName, + displayFrontPageList, + userInteractionInProgress = false, + page, + classes, +}) => { + const [openWarning, setOpenWarning] = useState(null); + + const { label } = useWorkingListLabel({ + trackedEntityName, + programId, + displayFrontPageList, + }); + + const handleNavigation = useCallback((callback, warningType) => { + if (userInteractionInProgress) { + setOpenWarning(warningType); + } else { + callback && callback(); + } + }, [userInteractionInProgress]); + + const breadcrumbItems = useMemo(() => ([ + { + key: pageKeys.MAIN_PAGE, + onClick: () => handleNavigation(onBackToMainPage, pageKeys.MAIN_PAGE), + label, + selected: false, + condition: true, + }, + { + key: pageKeys.OVERVIEW, + onClick: () => handleNavigation(onBackToDashboard, pageKeys.OVERVIEW), + label: i18n.t('Enrollment dashboard'), + selected: page === pageKeys.OVERVIEW, + condition: true, + }, + { + key: pageKeys.VIEW_EVENT, + onClick: () => handleNavigation(onBackToViewEvent, pageKeys.VIEW_EVENT), + label: i18n.t('View event'), + selected: page === pageKeys.VIEW_EVENT, + condition: page === pageKeys.VIEW_EVENT || + (page === pageKeys.EDIT_EVENT && !eventIsScheduled(eventStatus)), + }, + { + key: pageKeys.EDIT_EVENT, + onClick: () => {}, + label: i18n.t('Edit event'), + selected: page === pageKeys.EDIT_EVENT, + condition: page === pageKeys.EDIT_EVENT, + }, + { + key: pageKeys.NEW_EVENT, + onClick: () => {}, + label: i18n.t('New event'), + selected: page === pageKeys.NEW_EVENT, + condition: page === pageKeys.NEW_EVENT, + }, + ].filter(item => item.condition)), [ + label, + page, + eventStatus, + handleNavigation, + onBackToMainPage, + onBackToDashboard, + onBackToViewEvent, + ]); + + return ( +

+ ); +}; + +export const EnrollmentBreadcrumb: ComponentType<$Diff> = withStyles(styles)(BreadcrumbsPlain); diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js new file mode 100644 index 0000000000..a151d169ed --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js @@ -0,0 +1,60 @@ +// @flow +import i18n from '@dhis2/d2-i18n'; +import { useMemo } from 'react'; +import { useSelector } from 'react-redux'; + +type Props = { + programId: string, + displayFrontPageList: boolean, + trackedEntityName?: string, +} + +const DefaultFilterLabels = { + active: i18n.t('Active enrollments'), + complete: i18n.t('Completed enrollments'), + cancelled: i18n.t('Cancelled enrollments'), +}; + +export const useWorkingListLabel = ({ + programId, + trackedEntityName, + displayFrontPageList, +}: Props) => { + const workingListTemplates = useSelector(({ workingListsTemplates }) => workingListsTemplates?.teiList); + const workingListProgramId = useSelector(({ workingListsContext }) => workingListsContext?.teiList?.programIdView); + const { selectedTemplateId, loading: isLoadingTemplates, templates } = workingListTemplates ?? {}; + const selectedTemplate = templates?.find(({ id }) => id === selectedTemplateId); + const isSameProgram = workingListProgramId === programId; + + const label = useMemo(() => { + if (isLoadingTemplates) return '...'; + + if (isSameProgram) { + if (selectedTemplate && !selectedTemplate.isDefault) { + return selectedTemplate.name; + } + + if (selectedTemplateId && !selectedTemplate) { + return DefaultFilterLabels[selectedTemplateId]; + } + + if (selectedTemplate.name === 'default') { + return i18n.t('{{trackedEntityName}} list', { trackedEntityName }); + } + } + + if (!displayFrontPageList) return i18n.t('Search'); + return trackedEntityName ? i18n.t('{{trackedEntityName}} list', { trackedEntityName }) : i18n.t('Working List'); + }, [ + displayFrontPageList, + isLoadingTemplates, + isSameProgram, + selectedTemplate, + selectedTemplateId, + trackedEntityName, + ]); + + return { + label, + }; +}; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js new file mode 100644 index 0000000000..b4c1a29b6a --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EnrollmentBreadcrumb } from './EnrollmentBreadcrumb'; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js new file mode 100644 index 0000000000..0665843c00 --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js @@ -0,0 +1,106 @@ +// @flow +import React, { type ComponentType, useCallback, useMemo, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { colors, IconChevronRight16 } from '@dhis2/ui'; +import { withStyles } from '@material-ui/core/styles'; +import { BreadcrumbItem } from '../common/BreadcrumbItem'; +import { DiscardDialog } from '../../Dialogs/DiscardDialog.component'; +import { defaultDialogProps } from '../../Dialogs/DiscardDialog.constants'; +import { useWorkingListLabel } from './hooks/useWorkingListLabel'; + +export const pageKeys = Object.freeze({ + MAIN_PAGE: 'mainPage', + VIEW_EVENT: 'viewEvent', + EDIT_EVENT: 'editEvent', +}); + +type Props = { + page: string, + programId: string, + userInteractionInProgress?: boolean, + onBackToMainPage?: () => void, +}; + +const styles = { + container: { + display: 'flex', + alignItems: 'center', + }, +}; + + +const EventBreadcrumbPlain = ({ + page, + programId, + userInteractionInProgress, + onBackToMainPage, + classes, +}) => { + const [openWarning, setOpenWarning] = useState(null); + const { label } = useWorkingListLabel({ programId }); + + const handleNavigation = useCallback((callback, warningType) => { + if (userInteractionInProgress) { + setOpenWarning(warningType); + } else { + callback && callback(); + } + }, [userInteractionInProgress]); + + const breadcrumbItems = useMemo(() => ([ + { + key: pageKeys.MAIN_PAGE, + onClick: () => handleNavigation(onBackToMainPage, pageKeys.MAIN_PAGE), + label, + selected: page === pageKeys.MAIN_PAGE, + condition: true, + }, + { + key: pageKeys.VIEW_EVENT, + onClick: () => handleNavigation(null, pageKeys.VIEW_EVENT), + label: i18n.t('View event'), + selected: page === pageKeys.VIEW_EVENT, + condition: page === pageKeys.VIEW_EVENT || page === pageKeys.EDIT_EVENT, + }, + { + key: pageKeys.EDIT_EVENT, + onClick: () => {}, + label: i18n.t('Edit event'), + selected: page === pageKeys.EDIT_EVENT, + condition: page === pageKeys.EDIT_EVENT, + }, + ].filter(item => item.condition !== false)), [ + label, + handleNavigation, + onBackToMainPage, + page, + ]); + + return ( +
+ {breadcrumbItems.map((button, index) => ( + + + {index < (breadcrumbItems.length - 1) && ( + + )} + + ))} + + setOpenWarning(null)} + onDestroy={onBackToMainPage} + {...defaultDialogProps} + /> +
+ ); +}; + + +export const EventBreadcrumb: ComponentType<$Diff> = withStyles(styles)(EventBreadcrumbPlain); diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js new file mode 100644 index 0000000000..c2c7c461b9 --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js @@ -0,0 +1,40 @@ +// @flow +import { useMemo } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { useSelector } from 'react-redux'; + +type Props = { + programId: string, +} + +export const useWorkingListLabel = ({ programId }: Props) => { + const workingListTemplate = useSelector(({ workingListsTemplates }) => workingListsTemplates?.eventList); + const workingListProgramId = useSelector(({ workingListsContext }) => workingListsContext + ?.eventList + ?.programIdView, + ); + + + const { + selectedTemplateId, + templates, + loading: loadingTemplates, + } = workingListTemplate ?? {}; + const selectedTemplete = templates?.find(({ id }) => id === selectedTemplateId); + const isDefaultTemplate = selectedTemplete?.isDefault; + const isSameProgram = workingListProgramId === programId; + + const computedLabel = useMemo(() => { + if (loadingTemplates) return '...'; + + if (isSameProgram && !isDefaultTemplate && selectedTemplete) { + return selectedTemplete.name; + } + + return i18n.t('Event list'); + }, [isDefaultTemplate, isSameProgram, loadingTemplates, selectedTemplete]); + + return { + label: computedLabel, + }; +}; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js new file mode 100644 index 0000000000..96d8ae0ea5 --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EventBreadcrumb } from './EventBreadcrumb'; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js b/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js new file mode 100644 index 0000000000..e122220bf9 --- /dev/null +++ b/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js @@ -0,0 +1,47 @@ +// @flow +import React, { type ComponentType } from 'react'; +import cx from 'classnames'; +import { withStyles } from '@material-ui/core/styles'; +import { colors } from '@dhis2/ui'; + +type Props = { + label: string, + onClick: () => void, + selected: boolean, +}; + +const styles = { + button: { + // Reset button styles + background: 'none', + border: 'none', + cursor: 'pointer', + font: 'inherit', + + // Custom button styles + fontSize: '14px', + padding: '6px 4px', + color: colors.grey800, + borderRadius: '3px', + + '&:hover': { + textDecoration: 'underline', + color: 'black', + }, + '&.selected': { + color: 'black', + }, + }, +}; + +const BreadcrumbItemPlain = ({ label, onClick, selected, classes }) => ( + +); + +export const BreadcrumbItem: ComponentType<$Diff> = withStyles(styles)(BreadcrumbItemPlain); diff --git a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js index 90047ba753..24340325cb 100644 --- a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js +++ b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js @@ -22,4 +22,3 @@ export const SingleEventRegistrationEntryComponent = ({ showAddRelationship, eve ); }; - diff --git a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js index 3c7d2d66d8..3d88627fb9 100644 --- a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js +++ b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js @@ -13,13 +13,14 @@ import { defaultDialogProps as dialogConfig } from '../../Dialogs/DiscardDialog. import { getOpenDataEntryActions } from './DataEntryWrapper/DataEntry'; import type { ContainerProps, StateProps, MapStateToProps } from './SingleEventRegistrationEntry.types'; import { useCategoryCombinations } from '../../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; +import { itemId } from './DataEntryWrapper/DataEntry/helpers/constants'; const inEffect = (state: ReduxState) => dataEntryHasChanges(state, 'singleEvent-newEvent') || state.newEventPage.showAddRelationship; const makeMapStateToProps = (): MapStateToProps => { const eventAccessSelector = makeEventAccessSelector(); return (state: ReduxState, { id }: ContainerProps): StateProps => ({ - ready: state.dataEntries[id], + ready: state.dataEntries[id]?.itemId === itemId, showAddRelationship: !!state.newEventPage.showAddRelationship, eventAccess: eventAccessSelector(state), }); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js index 09ce95ce70..c326e4477b 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js @@ -7,17 +7,16 @@ import { isValidZeroOrPositiveInteger } from 'capture-core-utils/validators/form import { SelectBoxes, orientations } from '../../FormFields/Options/SelectBoxes'; import { OptionSet } from '../../../metaData/OptionSet/OptionSet'; import { Option } from '../../../metaData/OptionSet/Option'; - +import type { UpdatableFilterContent } from '../types'; +import { type DateValue } from './types'; import { FromDateFilter } from './From.component'; import { ToDateFilter } from './To.component'; -import { isValidDate } from '../../../utils/validators/form'; -import { parseDate } from '../../../utils/converters/date'; import { dataElementTypes } from '../../../metaData'; -import type { UpdatableFilterContent } from '../types'; import './calendarFilterStyles.css'; import { mainOptionKeys, mainOptionTranslatedTexts } from './options'; import { getDateFilterData } from './dateFilterDataGetter'; import { RangeFilter } from './RangeFilter.component'; +import { parseDate } from '../../../utils/converters/date'; const getStyles = (theme: Theme) => ({ fromToContainer: { @@ -29,7 +28,7 @@ const getStyles = (theme: Theme) => ({ width: 30, display: 'flex', justifyContent: 'center', - alignItems: 'center', + alignItems: 'start', paddingTop: theme.typography.pxToRem(6), fontSize: theme.typography.body1.fontSize, }, @@ -43,8 +42,8 @@ const getStyles = (theme: Theme) => ({ }); export type Value = ?{ - from?: ?string, - to?: ?string, + from?: ?DateValue, + to?: ?DateValue, main?: ?string, start?: ?string, end?: ?string, @@ -52,9 +51,7 @@ export type Value = ?{ type Props = { onCommitValue: (value: ?{ from?: ?string, to?: ?string }) => void, - onUpdate: (commitValue?: any) => void, value: Value, - type: $Keys, classes: { fromToContainer: string, inputContainer: string, @@ -69,33 +66,33 @@ type State = { submitAttempted: boolean, }; -const getAbsoluteRangeErrors = (fromValue, toValue, type, submitAttempted) => { - let errors = { - minValueError: null, - maxValueError: null, - dateLogicError: null, - }; +// eslint-disable-next-line complexity +const getAbsoluteRangeErrors = (fromValue, toValue, submitAttempted) => { + const fromValueString = fromValue?.value; + const toValueString = toValue?.value; + const isFromValueValid = fromValue?.isValid; + const isToValueValid = toValue?.isValid; - if (!fromValue && !toValue) { - errors = { - ...errors, - dateLogicError: submitAttempted ? i18n.t(DateFilter.errorMessages.ABSOLUTE_RANGE_WITHOUT_VALUES) : null, - }; - } else { - const { isValid: isMinValueValid, error: minValueError } = DateFilter.validateField(fromValue, type); - const { isValid: isMaxValueValid, error: maxValueError } = DateFilter.validateField(toValue, type); - const hasDateLogicError = () => - isMinValueValid && isMaxValueValid && fromValue && toValue && DateFilter.isFromAfterTo(fromValue, toValue); - - errors = { - ...errors, - minValueError, - maxValueError, - dateLogicError: hasDateLogicError() ? i18n.t(DateFilter.errorMessages.FROM_GREATER_THAN_TO) : null, + if (!fromValueString && !toValueString) { + return { + dateLogicError: submitAttempted + ? i18n.t(DateFilter.errorMessages.ABSOLUTE_RANGE_WITHOUT_VALUES) + : null, }; } - return errors; + const hasDateLogicError = + fromValueString && + toValueString && + isFromValueValid && + isToValueValid && + DateFilter.isFromAfterTo(fromValueString, toValueString); + + return { + dateLogicError: hasDateLogicError + ? i18n.t(DateFilter.errorMessages.FROM_GREATER_THAN_TO) + : null, + }; }; const getRelativeRangeErrors = (startValue, endValue, submitAttempted) => { @@ -110,8 +107,8 @@ const getRelativeRangeErrors = (startValue, endValue, submitAttempted) => { bufferLogicError: submitAttempted ? i18n.t(DateFilter.errorMessages.RELATIVE_RANGE_WITHOUT_VALUES) : null, }; } - const { error: startValueError } = DateFilter.validateField(startValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE); - const { error: endValueError } = DateFilter.validateField(endValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE); + const { error: startValueError } = DateFilter.validateRelativeRangeValue(startValue); + const { error: endValueError } = DateFilter.validateRelativeRangeValue(endValue); errors = { ...errors, startValueError, @@ -125,18 +122,11 @@ const isAbsoluteRangeFilterValid = (fromValue, toValue) => { return false; } - const parseResultFrom = fromValue ? parseDate(fromValue) : { isValid: true, moment: null }; - const parseResultTo = toValue ? parseDate(toValue) : { isValid: true, moment: null }; - - if (!(parseResultFrom.isValid && parseResultTo.isValid)) { + if ((fromValue && !fromValue.isValid) || (toValue && !toValue.isValid)) { return false; } - const isValidMomentDate = () => - parseResultFrom.momentDate && - parseResultTo.momentDate && - parseResultFrom.momentDate.isAfter(parseResultTo.momentDate); - return !isValidMomentDate(); + return !DateFilter.isFromAfterTo(fromValue?.value, toValue?.value); }; const isRelativeRangeFilterValid = (startValue, endValue) => { @@ -144,8 +134,8 @@ const isRelativeRangeFilterValid = (startValue, endValue) => { return false; } if ( - !DateFilter.validateField(startValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE).isValid || - !DateFilter.validateField(endValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE).isValid + !DateFilter.validateRelativeRangeValue(startValue).isValid || + !DateFilter.validateRelativeRangeValue(endValue).isValid ) { return false; } @@ -154,7 +144,7 @@ const isRelativeRangeFilterValid = (startValue, endValue) => { // $FlowFixMe[incompatible-variance] automated comment class DateFilterPlain extends Component implements UpdatableFilterContent { - static validateField(value: ?string, type: $Keys) { + static validateRelativeRangeValue(value: ?string) { if (!value) { return { isValid: true, @@ -162,21 +152,18 @@ class DateFilterPlain extends Component implements UpdatableFilter }; } - // $FlowFixMe dataElementTypes flow error - const typeValidator = DateFilter.validatorForTypes[type]; - const isValid = typeValidator(value); + const isValid = isValidZeroOrPositiveInteger(value); return { isValid, - // $FlowFixMe dataElementTypes flow error - error: isValid ? null : i18n.t(DateFilter.errorMessages[type]), + error: isValid ? null : i18n.t(DateFilter.errorMessages[dataElementTypes.INTEGER_ZERO_OR_POSITIVE]), }; } static isFilterValid( mainValue?: ?string, - fromValue?: ?string, - toValue?: ?string, + fromValue?: ?DateValue, + toValue?: ?DateValue, startValue?: ?string, endValue?: ?string, ) { @@ -199,24 +186,19 @@ class DateFilterPlain extends Component implements UpdatableFilter } toD2DateTextFieldInstance: any; + constructor(props: Props) { super(props); this.state = { submitAttempted: false }; } + static errorMessages = { ABSOLUTE_RANGE_WITHOUT_VALUES: 'Please specify a range', RELATIVE_RANGE_WITHOUT_VALUES: 'Please specify the number of days', FROM_GREATER_THAN_TO: "The From date can't be after the To date", - MIN_GREATER_THAN_MAX: 'Days in the past cannot be greater than days in the future', - [dataElementTypes.DATE]: 'Please provide a valid date', [dataElementTypes.INTEGER_ZERO_OR_POSITIVE]: 'Please provide zero or a positive integer', }; - static validatorForTypes = { - [dataElementTypes.DATE]: isValidDate, - [dataElementTypes.INTEGER_ZERO_OR_POSITIVE]: isValidZeroOrPositiveInteger, - }; - static mainOptionSet = new OptionSet('mainOptions', [ new Option((_this) => { _this.text = mainOptionTranslatedTexts[mainOptionKeys.TODAY]; @@ -251,12 +233,14 @@ class DateFilterPlain extends Component implements UpdatableFilter _this.value = mainOptionKeys.ABSOLUTE_RANGE; }), ]); + static optionSet = new OptionSet('mainOptions', [ new Option((_this) => { _this.text = mainOptionTranslatedTexts[mainOptionKeys.RELATIVE_RANGE]; _this.value = mainOptionKeys.RELATIVE_RANGE; }), ]); + onGetUpdateData(updatedValues?: Value) { const value = typeof updatedValues !== 'undefined' ? updatedValues : this.props.value; @@ -302,23 +286,11 @@ class DateFilterPlain extends Component implements UpdatableFilter } handleEnterKeyInFrom = () => { - this.toD2DateTextFieldInstance.focus(); + this.toD2DateTextFieldInstance && this.toD2DateTextFieldInstance.focus(); }; handleDateSelectedFromCalendarInFrom = () => { - this.toD2DateTextFieldInstance.focus(); - }; - - handleEnterKeyInTo = (value: { [key: string]: string }) => { - // validate with updated values - const values = this.getUpdatedValue(value); - this.setState({ submitAttempted: true }); - - if (values && !DateFilter.isFilterValid(values.main, values.from, values.to, values.start, values.end)) { - this.props.onCommitValue(values); - } else { - this.props.onUpdate(values || null); - } + this.toD2DateTextFieldInstance && this.toD2DateTextFieldInstance.focus(); }; handleFieldBlur = (value: { [key: string]: string }) => { @@ -342,7 +314,6 @@ class DateFilterPlain extends Component implements UpdatableFilter const toValue = values && values.to; const startValue = values && values.start; const endValue = values && values.end; - const type = this.props.type; const errors = { minValueError: null, maxValueError: null, @@ -353,7 +324,7 @@ class DateFilterPlain extends Component implements UpdatableFilter }; if (mainValue === mainOptionKeys.ABSOLUTE_RANGE) { - return { ...errors, ...getAbsoluteRangeErrors(fromValue, toValue, type, submitAttempted) }; + return { ...errors, ...getAbsoluteRangeErrors(fromValue, toValue, submitAttempted) }; } if (mainValue === mainOptionKeys.RELATIVE_RANGE) { @@ -364,8 +335,11 @@ class DateFilterPlain extends Component implements UpdatableFilter render() { const { value, classes, onFocusUpdateButton } = this.props; - const { minValueError, maxValueError, startValueError, endValueError, dateLogicError, bufferLogicError } = + const fromValue = value?.from; + const toValue = value?.to; + const { startValueError, endValueError, dateLogicError, bufferLogicError } = this.getErrors(); + return (
@@ -384,12 +358,12 @@ class DateFilterPlain extends Component implements UpdatableFilter {/* $FlowSuppress: Flow not working 100% with HOCs */} {/* $FlowFixMe[prop-missing] automated comment */}
{i18n.t('to')}
@@ -397,13 +371,12 @@ class DateFilterPlain extends Component implements UpdatableFilter {/* $FlowSuppress: Flow not working 100% with HOCs */} {/* $FlowFixMe[prop-missing] automated comment */}
@@ -424,7 +397,6 @@ class DateFilterPlain extends Component implements UpdatableFilter startValueError={startValueError} endValueError={endValueError} handleFieldBlur={this.handleFieldBlur} - handleEnterKeyInTo={this.handleEnterKeyInTo} />
{dateLogicError}
diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js index da08dcfca8..0971d33264 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js @@ -28,8 +28,14 @@ export class DateFilterManager extends React.Component { static calculateAbsoluteRangeValueState(filter: DateFilterData) { return { main: mainOptionKeys.ABSOLUTE_RANGE, - from: filter.ge && DateFilterManager.convertDateForEdit(filter.ge), - to: filter.le && DateFilterManager.convertDateForEdit(filter.le), + from: filter.ge ? { + value: filter.ge && DateFilterManager.convertDateForEdit(filter.ge), + isValid: true, + } : undefined, + to: filter.le ? { + value: filter.le && DateFilterManager.convertDateForEdit(filter.le), + isValid: true, + } : undefined, }; } static calculateRelativeRangeValueState(filter: DateFilterData) { @@ -74,7 +80,7 @@ export class DateFilterManager extends React.Component { }; } - handleCommitValue = (value: ?Object) => { + handleCommitValue = (value: ?Value) => { this.setState({ value }); this.props.handleCommitValue && this.props.handleCommitValue(); }; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js index cf5a698740..444ba6b26d 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js @@ -22,12 +22,6 @@ class EndRangeFilterPlain extends Component { this.props.onBlur(EndRangeFilterPlain.getValueObject(value)); }; - handleKeyPress = (event: SyntheticKeyboardEvent) => { - if (event.key === 'Enter') { - this.props.onEnterKey(EndRangeFilterPlain.getValueObject(this.props.value || '')); - } - }; - render() { const { error, onBlur, onEnterKey, textFieldRef, errorClass, ...passOnProps } = this.props; return ( @@ -35,7 +29,6 @@ class EndRangeFilterPlain extends Component { {/* $FlowFixMe[cannot-spread-inexact] automated comment */} void, - onEnterKey: () => void, - errorClass: string, + errorClass: ?string, + onBlur: ({ from: DateValue }) => void, }; class FromDateFilterPlain extends Component { - static getValueObject(value: string) { - return { from: value.trim() }; - } - displayOptions: Object; - constructor(props: Props) { - super(props); - this.displayOptions = { - showWeekdays: true, - showHeader: false, - }; + static getValueObject(value: DateValue) { + return { from: { ...value } }; } - handleBlur = (value: string) => { + handleBlur = (value: DateValue) => { this.props.onBlur(FromDateFilterPlain.getValueObject(value)); } - handleKeyPress = (event: SyntheticKeyboardEvent) => { - if (event.key === 'Enter') { - this.props.onEnterKey(); - } - } - render() { - const { error, errorClass, onBlur, onEnterKey, ...passOnProps } = this.props; + const { error, errorClass, onBlur, ...passOnProps } = this.props; return (
{/* $FlowFixMe[cannot-spread-inexact] automated comment */}
- {error} + {error ? i18n.t('Please provide a valid date') : error}
); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js index 32dd4c6fd5..f74c382ff7 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js @@ -41,7 +41,6 @@ type RangeFilterData = ?{ type Props = { handleFieldBlur: (value: ?Value) => void, - handleEnterKeyInTo: (value: { [key: string]: ?string }) => void, value: RangeFilterData, startValueError?: ?string, endValueError?: ?string, @@ -73,10 +72,6 @@ class RangeFilterPlain extends Component { this.endD2TextFieldInstance.focus(); }; - handleEnterKeyInEnd = (value: { [key: string]: ?string }) => { - this.props.handleEnterKeyInTo && this.props.handleEnterKeyInTo(value); - }; - handleFieldBlur = (value: { [key: string]: ?string }) => { this.props.handleFieldBlur && this.props.handleFieldBlur(this.getUpdatedValue(value)); }; @@ -110,7 +105,6 @@ class RangeFilterPlain extends Component { error={endValueError} errorClass={classes.error} onBlur={this.handleFieldBlur} - onEnterKey={this.handleEnterKeyInEnd} textFieldRef={this.setEndD2TextFieldInstance} /> diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js index 1a3a7405ef..29a97465ee 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js @@ -2,69 +2,45 @@ import React, { Component } from 'react'; import i18n from '@dhis2/d2-i18n'; import { D2Date } from '../../FormFields/DateAndTime/D2Date/D2Date.component'; -import { anchorPositions, modes, absoluteDirections } from '../../FormFields/DateAndTime/D2Date/d2DatePopup.const'; import { withInternalChangeHandler } from '../../FormFields/withInternalChangeHandler'; +import { type DateValue } from './types/date.types'; type Props = { - value: ?string, + value: ?DateValue, error: ?string, - onBlur: ({ to: string }) => void, - onEnterKey: ({ to: string }) => void, - textFieldRef: (instance: any) => void, - errorClass: string, + errorClass: ?string, + onBlur: ({ to: DateValue }) => void, onFocusUpdateButton: () => void, }; class ToDateFilterPlain extends Component { - static getValueObject(value: string) { - return { to: value.trim() }; + static getValueObject(value: DateValue) { + return { to: { ...value } }; } - displayOptions: Object; - constructor(props: Props) { - super(props); - this.displayOptions = { - showWeekdays: true, - showHeader: false, - }; - } - - handleBlur = (value: string) => { + handleBlur = (value: DateValue) => { this.props.onBlur(ToDateFilterPlain.getValueObject(value)); } - handleKeyPress = (event: SyntheticKeyboardEvent) => { - if (event.key === 'Enter') { - this.props.onEnterKey(ToDateFilterPlain.getValueObject(this.props.value || '')); - } - } - handleDateSelectedFromCalendar = () => { this.props.onFocusUpdateButton(); } render() { - const { error, onBlur, onEnterKey, errorClass, onFocusUpdateButton, ...passOnProps } = this.props; + const { error, errorClass, onBlur, onFocusUpdateButton, ...passOnProps } = this.props; return (
{/* $FlowFixMe[cannot-spread-inexact] automated comment */}
- {error} + {error ? i18n.t('Please provide a valid date') : error}
); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js index 550418e0d4..f7758cd1b1 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js @@ -3,12 +3,12 @@ import { parseNumber } from 'capture-core-utils/parsers'; import { mainOptionKeys } from './options'; import { dateFilterTypes } from './constants'; import { parseDate } from '../../../utils/converters/date'; -import { type AbsoluteDateFilterData, type RelativeDateFilterData } from './types'; +import { type AbsoluteDateFilterData, type RelativeDateFilterData, type DateValue } from './types'; type Value = { main: string, - from?: ?string, - to?: ?string, + from?: ?DateValue, + to?: ?DateValue, start?: ?string, end?: ?string, }; @@ -53,7 +53,7 @@ function convertRelativeRange(value: Value) { function convertSelections(value: Value) { if (value.main === mainOptionKeys.ABSOLUTE_RANGE) { - return convertAbsoluteDate(value.from, value.to); + return convertAbsoluteDate(value?.from?.value, value?.to?.value); } if (value.main === mainOptionKeys.RELATIVE_RANGE) { return convertRelativeRange(value); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js index 18324b9029..b34381b58d 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js @@ -13,4 +13,10 @@ export type RelativeDateFilterData = {| endBuffer?: number, |}; +export type DateValue = {| + value: ?string, + error?: ?string, + isValid: ?boolean, +|}; + export type DateFilterData = AbsoluteDateFilterData | RelativeDateFilterData; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js index d98412bd3f..1e93bcf8de 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js @@ -1,2 +1,2 @@ // @flow -export { AbsoluteDateFilterData, RelativeDateFilterData, DateFilterData } from './date.types'; +export { AbsoluteDateFilterData, RelativeDateFilterData, DateFilterData, DateValue } from './date.types'; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js index 4450e1a539..7b9c48ba89 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js @@ -153,6 +153,10 @@ class NumericFilterPlain extends Component implements UpdatableFilterCont this.props.onCommitValue(this.getUpdatedValue(value)); } + handleFieldChange = (value: {[key: string]: string}) => { + this.props.onCommitValue(this.getUpdatedValue(value)); + } + setMaxD2TextFieldInstance = (instance: any) => { this.maxD2TextFieldInstance = instance; } @@ -195,6 +199,7 @@ class NumericFilterPlain extends Component implements UpdatableFilterCont errorClass={classes.error} onBlur={this.handleFieldBlur} onEnterKey={this.handleEnterKeyInMin} + onChange={this.handleFieldChange} />
implements UpdatableFilterCont onBlur={this.handleFieldBlur} onEnterKey={this.handleEnterKeyInMax} textFieldRef={this.setMaxD2TextFieldInstance} + onChange={this.handleFieldChange} />
diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js index 2644c2e809..eacca0a466 100644 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js @@ -1,207 +1,86 @@ // @flow import * as React from 'react'; -import { withStyles } from '@material-ui/core/styles'; -import { lowerCaseFirstLetter } from 'capture-core-utils/string/lowerCaseFirstLetter'; -import { D2TextField } from '../../Generic/D2TextField.component'; -import { D2DatePopup } from './D2DatePopup.component'; -import { D2DateCalendar } from './D2DateCalendar.component'; +import { CalendarInput } from '@dhis2/ui'; +import { systemSettingsStore } from '../../../../../capture-core/metaDataMemoryStores'; +import { type DateValue } from '../../../FiltersForTypes/Date/types/date.types'; type Props = { - label: string, + label?: ?string, value: ?string, - width: number, + calendar?: string, calendarWidth?: ?number, - calendarHeight?: ?number, inputWidth?: ?number, - onBlur: (value: string) => void, + onBlur: (value: DateValue) => void, onFocus?: ?() => void, onDateSelectedFromCalendar?: () => void, - classes: Object, - textFieldRef?: (instance: D2TextField) => void, + classes?: Object, + disabled?: boolean, }; type State = { - popoverOpen: boolean, + date: ?string, }; -const styles = () => ({ - textField: { - width: '100%', - }, -}); +type Validation = {| + validationCode: string, + validationText: string, + error: boolean, + valid: boolean, +|}; -class D2DatePlain extends React.Component { - static splitPassOnProps(passOnProps: ?Object) { - const splittedProps = { - input: {}, - popup: {}, - calendar: {}, - }; - - if (!passOnProps) { - return splittedProps; - } - - return Object - .keys(passOnProps) - .reduce((accSplittedProps, propKey) => { - let propContainer; - if (propKey.startsWith(D2Date.propContainers.CALENDAR)) { - propContainer = D2Date.propContainers.CALENDAR; - } else if (propKey.startsWith(D2Date.propContainers.POPUP)) { - propContainer = D2Date.propContainers.POPUP; - } else { - propContainer = D2Date.propContainers.INPUT; - } - - const outputKey = lowerCaseFirstLetter(propKey.replace(propContainer, '')); - - accSplittedProps[propContainer][outputKey] = passOnProps[propKey]; - return accSplittedProps; - }, splittedProps); - } - - containerInstance: ?HTMLElement; - handleTextFieldFocus: () => void; - handleDateSelected: (value: string) => void; - handleTextFieldBlur: (value: string) => void; - hidePopover: () => void; - handleDocumentClick: (event: SyntheticEvent) => void; +export class D2Date extends React.Component { + handleDateSelected: (value: {calendarDateString: string}) => void; constructor(props: Props) { super(props); - - this.state = { - popoverOpen: false, - }; - - this.handleTextFieldFocus = this.handleTextFieldFocus.bind(this); this.handleDateSelected = this.handleDateSelected.bind(this); - this.handleTextFieldBlur = this.handleTextFieldBlur.bind(this); - this.hidePopover = this.hidePopover.bind(this); - this.handleDocumentClick = this.handleDocumentClick.bind(this); - } - - componentWillUnmount() { - // $FlowFixMe[incompatible-call] automated comment - document.removeEventListener('click', this.handleDocumentClick); } - static propContainers = { - CALENDAR: 'calendar', - POPUP: 'popup', - INPUT: 'input', - }; - - handleTextFieldFocus() { - // $FlowFixMe[incompatible-call] automated comment - document.removeEventListener('click', this.handleDocumentClick); - - this.setState({ - popoverOpen: true, - }); - - this.props.onFocus && this.props.onFocus(); - } - - handleDateSelected(value: string) { - this.props.onBlur(value); - this.hidePopover(); - this.props.onDateSelectedFromCalendar && this.props.onDateSelectedFromCalendar(); - - // $FlowFixMe[incompatible-call] automated comment - document.removeEventListener('click', this.handleDocumentClick); - } - - handleDocumentClick(event) { - if ((event.target && event.target.className && - event.target.className.startsWith && - event.target.className.startsWith('Cal__')) || - (event.target && event.target.className && - event.target.className.baseVal && event.target.className.baseVal.startsWith('Cal__'))) { - return; - } - - this.hidePopover(); - - // $FlowFixMe[incompatible-call] automated comment - document.removeEventListener('click', this.handleDocumentClick); - } - - handleTextFieldBlur(value: string, event) { - this.props.onBlur(value); - - if (!event.relatedTarget || event.relatedTarget.className !== 'Cal__Container__root') { - this.hidePopover(); - } else { - // $FlowFixMe[incompatible-call] automated comment - document.addEventListener('click', this.handleDocumentClick); + handleDateSelected(value: {calendarDateString: string, validation: Validation}) { + const { calendarDateString: selectedDate, validation } = value || {}; + if (selectedDate !== undefined) { + this.props.onBlur({ + value: selectedDate, + error: validation?.validationText, + isValid: validation?.valid, + }); } - } - - hidePopover() { - this.setState({ - popoverOpen: false, - }); + this.props.onDateSelectedFromCalendar && this.props.onDateSelectedFromCalendar(); } render() { const { - width, + calendar, calendarWidth, - calendarHeight, inputWidth, classes, onBlur, onFocus, onDateSelectedFromCalendar, - textFieldRef, + value, + disabled, ...passOnProps } = this.props; - const { popoverOpen } = this.state; - const textFieldRefPropObject = textFieldRef ? { ref: textFieldRef } : null; - const calculatedInputWidth = inputWidth || width; - const calculatedCalendarWidth = calendarWidth || width; - const splittedPassOnProps = D2Date.splitPassOnProps(passOnProps); - const calculatedCalendarHeight = calendarHeight || 350; + const calendarType = calendar || 'gregory'; + const format = systemSettingsStore.get().dateFormat; return ( -
{ this.containerInstance = containerInstance; }} - style={{ - width, - }} - > - {/* $FlowFixMe[incompatible-type] automated comment */} - + - - -
); } } -export const D2Date = withStyles(styles)(D2DatePlain); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js deleted file mode 100644 index e20f89d12a..0000000000 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js +++ /dev/null @@ -1,158 +0,0 @@ -// @flow -/* eslint-disable class-methods-use-this */ -import React, { Component } from 'react'; -import { withStyles, withTheme } from '@material-ui/core/styles'; -import InfiniteCalendar from '@joakim_sm/react-infinite-calendar'; -import { capitalizeFirstLetter } from 'capture-core-utils/string'; -import '@joakim_sm/react-infinite-calendar/styles.css'; -import './customStyles.css'; -import { parseDate, convertDateObjectToDateFormatString } from '../../../../utils/converters/date'; -import { CurrentLocaleData } from '../../../../utils/localeData/CurrentLocaleData'; -import { getTheme } from './getTheme'; - -type Props = { - onDateSelected: (value: any) => void, - value?: ?string, - minMoment?: ?Object, - maxMoment?: ?Object, - currentWidth: number, - height?: ?number, - classes: Object, - displayOptions?: ?Object, - theme: Object, -}; - -const styles = () => ({ - container: {}, -}); - -class D2DateCalendarPlain extends Component { - handleChange: (e: any, dates: ?Array) => void; - calendarLocaleData: Object; - theme: Object; - displayOptions: Object; - - constructor(props: Props) { - super(props); - this.handleChange = this.handleChange.bind(this); - - const projectLocaleData = CurrentLocaleData.get(); - const currentWidth = this.props.currentWidth; - - this.calendarLocaleData = { - locale: projectLocaleData.dateFnsLocale, - headerFormat: currentWidth >= 400 ? - projectLocaleData.calendarFormatHeaderLong : - projectLocaleData.calendarFormatHeaderShort, - weekdays: projectLocaleData.weekDaysShort.map(day => capitalizeFirstLetter(day)), - blank: projectLocaleData.selectDatesText, - todayLabel: { - long: projectLocaleData.todayLabelLong, - short: projectLocaleData.todayLabelShort, - }, - weekStartsOn: projectLocaleData.weekStartsOn, - }; - - this.theme = getTheme(this.props.theme); - - - this.displayOptions = { - ...D2DateCalendar.displayOptions, - ...this.props.displayOptions, - }; - } - - shouldComponentUpdate(nextProps: Props) { - // Selecting multiple dates, then updating the props to the infiniteCalendar makes the Component "jump" back to the first selected date - if (nextProps.currentWidth !== this.props.currentWidth) { - const projectLocaleData = CurrentLocaleData.get(); - if (nextProps.currentWidth < 400) { - this.calendarLocaleData.headerFormat = projectLocaleData.calendarFormatHeaderShort; - } else { - this.calendarLocaleData.headerFormat = projectLocaleData.calendarFormatHeaderLong; - } - return true; - } - return false; - } - - static displayOptions = { - showHeader: false, - }; - - handleChange(changeDate: Date) { - const dateFormatString = convertDateObjectToDateFormatString(changeDate); - this.props.onDateSelected(dateFormatString); - } - - getValue(inputValue: ?string) { - if (!inputValue) { - return null; - } - - const parseData = parseDate(inputValue); - if (!parseData.isValid) { - return null; - } - - // $FlowFixMe[incompatible-use] automated comment - return parseData.momentDate.toDate(); - } - - getMinMaxProps() { - const minMaxProps: {min?: Date, minDate?: Date, max?: Date, maxDate?: Date} = {}; - - const minMoment = this.props.minMoment; - const maxMoment = this.props.maxMoment; - - if (minMoment) { - const minDate = minMoment.toDate(); - minMaxProps.min = minDate; - minMaxProps.minDate = minDate; - } - - if (maxMoment) { - const maxDate = maxMoment.toDate(); - minMaxProps.max = maxDate; - minMaxProps.maxDate = maxDate; - } - return minMaxProps; - } - - render() { - const { - value, - classes, - currentWidth, - height, - minMoment, - maxMoment, - onDateSelected, - theme, - displayOptions, - ...passOnProps - } = this.props; - - return ( -
- { /* $FlowFixMe */ } - -
- ); - } -} - -export const D2DateCalendar = withTheme()(withStyles(styles)(D2DateCalendarPlain)); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js deleted file mode 100644 index 311391c75b..0000000000 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js +++ /dev/null @@ -1,94 +0,0 @@ -// @flow -import * as React from 'react'; -import { withStyles } from '@material-ui/core/styles'; -import { anchorPositions, modes, absoluteDirections } from './d2DatePopup.const'; - -const getStyles = () => ({ - containerAbsolute: { - position: 'relative', - }, - containerInline: {}, - calendarAbsolute: { - position: 'absolute', - zIndex: 201, - }, - calendarInline: {}, -}); - -type Props = { - open: boolean, - children: React.Node, - anchorPosition?: $Values, - mode?: $Values, - absoluteDirection: $Values, - inputWidth: number, - calendarWidth: number, - classes: { - containerAbsolute: string, - containerInline: string, - calendarAbsolute: string, - calendarInline: string, - }, - inputUsesFloatingLabel: boolean, -}; - -class D2DatePopupPlain extends React.Component { - getAbsoluteBottom() { - const inputUsesFloatingLabel = this.props.inputUsesFloatingLabel; - return inputUsesFloatingLabel ? 60 : 40; - } - getAbsoluteVerticalPosition() { - const absoluteDirection = this.props.absoluteDirection; - return absoluteDirection === absoluteDirections.UP ? { bottom: this.getAbsoluteBottom() } : { top: 0 }; - } - calculateMarginLeftInline() { - const { inputWidth, calendarWidth } = this.props; - return calendarWidth - inputWidth; - } - getPopupStyle() { - const { anchorPosition, mode } = this.props; - - let calendarStyle; - if (anchorPosition === anchorPositions.RIGHT) { - calendarStyle = mode === modes.INLINE ? - { marginLeft: `-${this.calculateMarginLeftInline()}px` } : - { ...this.getAbsoluteVerticalPosition(), right: 0 }; - } else { - calendarStyle = mode === modes.INLINE ? { } : { ...this.getAbsoluteVerticalPosition(), left: 0 }; - } - - return calendarStyle; - } - - render() { - const { - open, - mode, - classes, - children, - } = this.props; - - if (!open) { - return null; - } - - const containerClasses = mode === modes.INLINE ? classes.containerInline : classes.containerAbsolute; - const calendarClasses = mode === modes.INLINE ? classes.calendarInline : classes.calendarAbsolute; - const calendarStyle = this.getPopupStyle(); - - return ( -
-
- {children} -
-
- ); - } -} - -export const D2DatePopup = withStyles(getStyles)(D2DatePopupPlain); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css deleted file mode 100644 index fdcb5d1cbb..0000000000 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css +++ /dev/null @@ -1,12 +0,0 @@ -.Cal__Today__root { - align-items: center; - justify-content: center; -} -.Cal__Today__root .Cal__Today__chevron { - position: unset; - top: unset; - margin-left: 5px; - margin-top: 0; - margin-bottom: 0; - margin-right: 0; -} \ No newline at end of file diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js deleted file mode 100644 index 27d68de2ec..0000000000 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow - -export const anchorPositions = { - LEFT: 'left', - RIGHT: 'right', -}; - -export const absoluteDirections = { - UP: 'up', - DOWN: 'down', -}; - -export const modes = { - ABSOLUTE: 'absolute', - INLINE: 'inline', -}; diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js deleted file mode 100644 index ad8c635647..0000000000 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export const getTheme = (theme: Theme) => ({ - accentColor: theme.palette.secondary.main, - floatingNav: { - background: 'rgba(0, 30, 64, 0.8)', - chevron: 'rgb(145, 203, 193)', - color: 'white', - }, - headerColor: theme.palette.primary.main, - todayColor: theme.palette.secondary.main, - selectionColor: theme.palette.primary.main, - weekdayColor: theme.palette.primary.main, -}); diff --git a/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js b/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js index 3241b9d7a0..0fe8f70206 100644 --- a/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js +++ b/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js @@ -6,10 +6,12 @@ const styles = { formGroup: { display: 'flex', flexDirection: 'column', + width: 'fit-content', }, formGroupRow: { display: 'flex', flexDirection: 'row', + width: 'fit-content', }, }; diff --git a/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js b/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js index 21b085e8d0..f511499c7f 100644 --- a/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js +++ b/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js @@ -2,11 +2,19 @@ import * as React from 'react'; import i18n from '@dhis2/d2-i18n'; -import { DataTableHead, DataTable, DataTableBody, DataTableRow, DataTableCell, DataTableColumnHeader } from '@dhis2/ui'; +import { + CheckboxField, + DataTable, + DataTableBody, + DataTableCell, + DataTableColumnHeader, + DataTableHead, + DataTableRow, +} from '@dhis2/ui'; import classNames from 'classnames'; import { withStyles } from '@material-ui/core/styles'; -import { dataElementTypes } from '../../../metaData'; import type { OptionSet } from '../../../metaData'; +import { dataElementTypes } from '../../../metaData'; const getStyles = () => ({ tableContainer: { @@ -34,7 +42,13 @@ type Props = { dataSource: Array, rowIdKey: string, columns: ?Array, + selectedRows: { [key: string]: boolean }, + onSelectAll: (ids: Array) => void, + onRowSelect: (id: string) => void, + allRowsAreSelected: boolean, + isSelectionInProgress: ?boolean, sortById: string, + showSelectCheckBox: ?boolean, sortByDirection: string, onSort: (id: string, direction: string) => void, updating?: ?boolean, @@ -86,7 +100,7 @@ class Index extends React.Component { }; renderHeaderRow(visibleColumns: Array) { - const { classes, sortById, sortByDirection } = this.props; + const { classes, sortById, sortByDirection, dataSource, onSelectAll, allRowsAreSelected } = this.props; const headerCells = visibleColumns.map(column => ( { )); + const checkboxCell = this.props.showSelectCheckBox ? ( + + onSelectAll(dataSource.map(({ id }) => id))} + /> + + ) : null; + return ( + {checkboxCell} {headerCells} {this.getCustomEndCellHeader()} @@ -121,7 +147,7 @@ class Index extends React.Component { } renderRows(visibleColumns: Array, columnsCount: number) { - const { dataSource, rowIdKey, ...customEndCellBodyProps } = this.props; + const { dataSource, rowIdKey, selectedRows, onRowSelect, ...customEndCellBodyProps } = this.props; if (!dataSource || dataSource.length === 0) { return ( @@ -136,13 +162,37 @@ class Index extends React.Component { this.props.onRowClick(row)} + style={{ cursor: this.props.isSelectionInProgress ? 'pointer' : 'default' }} + onClick={() => { + if (this.props.isSelectionInProgress) { + onRowSelect(row[rowIdKey]); + return; + } + this.props.onRowClick(row); + }} > {row[column.id]} )); + + const rowId = row[rowIdKey]; return ( - + + {this.props.showSelectCheckBox && ( + + onRowSelect(rowId)} + /> + + )} {cells} {this.getCustomEndCellBody(row, customEndCellBodyProps)} diff --git a/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js b/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js index 7b3ec7806a..16d19dfc2c 100644 --- a/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js +++ b/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js @@ -9,6 +9,11 @@ import type { Props } from './listViewContextBuilder.types'; export const ListViewContextBuilder = ({ filters, + selectedRows, + allRowsAreSelected, + onRowSelect, + onSelectAll, + selectionInProgress, onChangePage, onChangeRowsPerPage, rowsPerPage, @@ -40,6 +45,11 @@ export const ListViewContextBuilder = ({ diff --git a/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js b/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js index 87c71afbee..5460022419 100644 --- a/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js +++ b/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js @@ -39,7 +39,20 @@ const getStyles = (theme: Theme) => ({ class ListViewMainPlain extends React.PureComponent { renderTopBar = () => { - const { classes, filters, columns, customMenuContents, onSetColumnOrder } = this.props; + const { + classes, + filters, + columns, + customMenuContents, + onSetColumnOrder, + isSelectionInProgress, + bulkActionBarComponent, + } = this.props; + + if (isSelectionInProgress) { + return bulkActionBarComponent; + } + return (
{ > {filters}
-
+
{ } renderPager = () => { - const classes = this.props.classes; + const { classes, isSelectionInProgress } = this.props; return (
- +
); } @@ -80,8 +93,11 @@ class ListViewMainPlain extends React.PureComponent { classes, filters, updatingWithDialog, - onSelectRow, + onClickListRow, + onRowSelect, + onSelectAll, customRowMenuContents, + isSelectionInProgress, ...passOnProps } = this.props; @@ -92,8 +108,12 @@ class ListViewMainPlain extends React.PureComponent { return ( ); } diff --git a/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js b/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js index da7edd0124..c164f94591 100644 --- a/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js +++ b/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js @@ -1,6 +1,6 @@ // @flow import type { ListViewContextBuilderPassOnProps } from '../ContextBuilder'; -import type { CustomRowMenuContents, CustomMenuContents, Columns } from '../types'; +import type { Columns, CustomMenuContents, CustomRowMenuContents } from '../types'; type WithFilterPassOnProps = {| ...ListViewContextBuilderPassOnProps, @@ -14,7 +14,11 @@ type ComponentProps = {| rowIdKey: string, customMenuContents?: CustomMenuContents, customRowMenuContents?: CustomRowMenuContents, - onSelectRow: Function, + onClickListRow: Function, + onRowSelect: Function, + onSelectAll: Function, + isSelectionInProgress: ?boolean, + bulkActionBarComponent: React$Node, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/ListView/types/listView.types.js b/src/core_modules/capture-core/components/ListView/types/listView.types.js index 96f98f4c90..c367075b4e 100644 --- a/src/core_modules/capture-core/components/ListView/types/listView.types.js +++ b/src/core_modules/capture-core/components/ListView/types/listView.types.js @@ -1,10 +1,7 @@ // @flow import { typeof dataElementTypes } from '../../../metaData'; -import type { - FilterData, - Options, -} from '../../FiltersForTypes'; +import type { FilterData, Options } from '../../FiltersForTypes'; export type Column = { id: string, @@ -103,7 +100,7 @@ export type InterfaceProps = $ReadOnly<{| onClearFilter: ClearFilter, onRemoveFilter: RemoveFilter, onSelectRestMenuItem: SelectRestMenuItem, - onSelectRow: SelectRow, + onClickListRow: SelectRow, onSetColumnOrder: SetColumnOrder, onSort: Sort, onUpdateFilter: UpdateFilter, @@ -114,7 +111,13 @@ export type InterfaceProps = $ReadOnly<{| stickyFilters: StickyFilters, updating: boolean, updatingWithDialog: boolean, - programStageId?: string + onRowSelect: (id: string) => void, + programStageId?: string, + selectedRows: { [key: string]: boolean }, + onSelectAll: (rows: Array) => void, + allRowsAreSelected: ?boolean, + selectionInProgress: ?boolean, + bulkActionBarComponent: React$Element, |}>; export type ListViewPassOnProps = $ReadOnly<{| diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js index 1259861683..65050c4641 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js @@ -4,34 +4,29 @@ import i18n from '@dhis2/d2-i18n'; import moment from 'moment'; import log from 'loglevel'; import { errorCreator } from 'capture-core-utils'; -// $FlowFixMe import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { useTimeZoneConversion } from '@dhis2/app-runtime'; import { - useCommonEnrollmentDomainData, - useRuleEffects, + commitEnrollmentAndEvents, + rollbackEnrollmentAndEvents, + showEnrollmentError, + updateEnrollmentAndEvents, updateEnrollmentAttributeValues, updateEnrollmentDate, updateIncidentDate, - showEnrollmentError, - updateEnrollmentAndEvents, - commitEnrollmentAndEvents, - rollbackEnrollmentAndEvents, + useCommonEnrollmentDomainData, + useRuleEffects, } from '../../common/EnrollmentOverviewDomain'; import { - updateEnrollmentDate as updateTopBarEnrollmentDate, deleteEnrollment, + updateEnrollmentDate as updateTopBarEnrollmentDate, updateTeiDisplayName, } from '../EnrollmentPage.actions'; import { useTrackerProgram } from '../../../../hooks/useTrackerProgram'; import { useCoreOrgUnit } from '../../../../metadataRetrieval/coreOrgUnit'; -import { EnrollmentPageLayout, DataStoreKeyByPage } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; -import { - useProgramMetadata, - useHideWidgetByRuleLocations, - useProgramStages, -} from './hooks'; +import { DataStoreKeyByPage, EnrollmentPageLayout } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; +import { useHideWidgetByRuleLocations, useProgramMetadata, useProgramStages } from './hooks'; import { buildUrlQueryString, useLocationQuery } from '../../../../utils/routing'; import { useFilteredWidgetData } from './hooks/useFilteredWidgetData'; import { useLinkedRecordClick } from '../../common/TEIRelationshipsWidget'; @@ -181,6 +176,10 @@ export const EnrollmentPageDefault = () => { dispatch(commitEnrollmentAndEvents()); }, [dispatch]); + const onBackToMainPage = useCallback(() => { + history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); + }, [history, orgUnitId, programId]); + if (isLoading) { return ( @@ -208,6 +207,8 @@ export const EnrollmentPageDefault = () => { onDelete={onDelete} onDeleteTrackedEntitySuccess={onDeleteTrackedEntitySuccess} onViewAll={onViewAll} + onBackToMainPage={onBackToMainPage} + trackedEntityName={program.trackedEntityType.name} onCreateNew={onCreateNew} widgetEffects={outputEffects} hideWidgets={hideWidgets} diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js index 543130c143..572efeb874 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js @@ -2,11 +2,12 @@ import { typeof effectActions } from '@dhis2/rules-engine-javascript'; import type { TrackerProgram } from 'capture-core/metaData'; import type { Stage } from 'capture-core/components/WidgetStagesAndEvents/types/common.types'; -import type { WidgetEffects, HideWidgets } from '../../common/EnrollmentOverviewDomain'; +import type { HideWidgets, WidgetEffects } from '../../common/EnrollmentOverviewDomain'; import type { Event } from '../../common/EnrollmentOverviewDomain/useCommonEnrollmentDomainData'; import type { LinkedRecordClick } from '../../../WidgetsRelationship/WidgetTrackedEntityRelationship'; import type { - PageLayoutConfig, WidgetConfig, + PageLayoutConfig, + WidgetConfig, } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; import { EnrollmentPageKeys, @@ -22,6 +23,11 @@ export type Props = {| widgetEffects: ?WidgetEffects, hideWidgets: HideWidgets, orgUnitId: string, + onBackToMainPage: () => void, + onBackToDashboard?: () => void, + onBackToViewEvent?: () => void, + userInteractionInProgress?: boolean, + eventStatus?: string, onDelete: () => void, onAddNew: () =>void, onViewAll: (stageId: string) => void, @@ -41,6 +47,7 @@ export type Props = {| pageLayout: PageLayoutConfig, availableWidgets: $ReadOnly<{ [key: string]: WidgetConfig }>, onDeleteTrackedEntitySuccess: () => void, + trackedEntityName: string, |}; export type PlainProps = {| diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js index 88b39abb5d..01ee6a0347 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js @@ -9,20 +9,19 @@ import { useHistory } from 'react-router-dom'; import { NoticeBox } from '@dhis2/ui'; import { buildUrlQueryString, useLocationQuery } from '../../../../utils/routing'; import { useProgramInfo } from '../../../../hooks/useProgramInfo'; -import { useEnrollmentAddEventTopBar, EnrollmentAddEventTopBar } from '../TopBar'; +import { EnrollmentAddEventTopBar, useEnrollmentAddEventTopBar } from '../TopBar'; import { deleteEnrollment, fetchEnrollments } from '../../Enrollment/EnrollmentPage.actions'; import { actions as RelatedStageModes } from '../../../WidgetRelatedStages/constants'; import { useWidgetDataFromStore } from '../hooks'; +import { useHideWidgetByRuleLocations } from '../../Enrollment/EnrollmentPageDefault/hooks'; import { - useHideWidgetByRuleLocations, -} from '../../Enrollment/EnrollmentPageDefault/hooks'; -import { - updateOrAddEnrollmentEvents, + commitEnrollmentAndEvents, + rollbackEnrollmentAndEvents, + setExternalEnrollmentStatus, showEnrollmentError, updateEnrollmentAndEvents, - rollbackEnrollmentAndEvents, - setExternalEnrollmentStatus, commitEnrollmentAndEvents, + updateOrAddEnrollmentEvents, } from '../../common/EnrollmentOverviewDomain'; import { dataEntryHasChanges as getDataEntryHasChanges } from '../../../DataEntry/common/dataEntryHasChanges'; import type { ContainerProps } from './EnrollmentAddEventPageDefault.types'; @@ -51,6 +50,10 @@ export const EnrollmentAddEventPageDefault = ({ history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); }, [history, orgUnitId, programId]); + const onBackToMainPage = useCallback(() => { + history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); + }, [history, orgUnitId, programId]); + const onUpdateEnrollmentStatus = useCallback((enrollmentToUpdate) => { dispatch(updateEnrollmentAndEvents(enrollmentToUpdate)); }, [dispatch]); @@ -113,7 +116,7 @@ export const EnrollmentAddEventPageDefault = ({ const outputEffects = useWidgetDataFromStore(widgetReducerName); const hideWidgets = useHideWidgetByRuleLocations(program?.programRules.concat(selectedProgramStage?.programRules ?? [])); // $FlowFixMe - const trackedEntityName = program?.trackedEntityType?.name; + const trackedEntityName = program?.trackedEntityType?.name ?? ''; const rulesExecutionDependencies = useMemo(() => ({ events: enrollment?.events, @@ -181,6 +184,10 @@ export const EnrollmentAddEventPageDefault = ({ orgUnitId={orgUnitId} teiId={teiId} enrollmentId={enrollmentId} + onBackToMainPage={onBackToMainPage} + onBackToDashboard={handleCancel} + trackedEntityName={trackedEntityName} + userInteractionInProgress={userInteractionInProgress} onSave={handleSave} onCancel={handleCancel} onDelete={handleDelete} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js index a8929f2b14..99fe0e57e3 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js @@ -1,8 +1,9 @@ // @flow -import type { WidgetEffects, HideWidgets } from '../../common/EnrollmentOverviewDomain'; +import type { HideWidgets, WidgetEffects } from '../../common/EnrollmentOverviewDomain'; import type { ExternalSaveHandler } from '../../../WidgetEnrollmentEventNew'; import type { - PageLayoutConfig, WidgetConfig, + PageLayoutConfig, + WidgetConfig, } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; import { Program } from '../../../../metaData'; @@ -14,6 +15,10 @@ export type Props = {| enrollmentId: string, onSave: ExternalSaveHandler, dataEntryHasChanges: boolean, + userInteractionInProgress: boolean, + trackedEntityName: string, + onBackToMainPage: () => void, + onBackToDashboard: () => void, onCancel: () => void, onDelete: () => void, onAddNew: () => void, diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js index d2acb94e3b..679bb616c4 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js @@ -40,6 +40,9 @@ export const EnrollmentEditEventPageComponent = ({ assignee, pageStatus, events, + onBackToDashboard, + onBackToMainPage, + onBackToViewEvent, onEnrollmentError, onEnrollmentSuccess, onUpdateEnrollmentStatus, @@ -73,6 +76,11 @@ export const EnrollmentEditEventPageComponent = ({ pageLayout={pageLayout} currentPage={mode === EnrollmentPageKeys.EDIT_EVENT ? EnrollmentPageKeys.EDIT_EVENT : EnrollmentPageKeys.VIEW_EVENT} availableWidgets={WidgetsForEnrollmentEventEdit} + userInteractionInProgress={mode === EnrollmentPageKeys.EDIT_EVENT} + trackedEntityName={trackedEntityName} + onBackToMainPage={onBackToMainPage} + onBackToDashboard={onBackToDashboard} + onBackToViewEvent={onBackToViewEvent} onSaveExternal={onSaveExternal} trackedEntityTypeId={trackedEntityTypeId} programStage={programStage} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js index 995fca5429..f459cff54d 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js @@ -1,18 +1,18 @@ // @flow -import React, { useEffect, useCallback } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { useQueryClient } from 'react-query'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { dataEntryIds } from 'capture-core/constants'; import { useEnrollmentEditEventPageMode } from 'capture-core/hooks'; import { - useCommonEnrollmentDomainData, - showEnrollmentError, - updateEnrollmentEvent, - updateEnrollmentAndEvents, commitEnrollmentAndEvents, rollbackEnrollmentAndEvents, setExternalEnrollmentStatus, + showEnrollmentError, + updateEnrollmentAndEvents, + updateEnrollmentEvent, + useCommonEnrollmentDomainData, } from '../common/EnrollmentOverviewDomain'; import { useTeiDisplayName } from '../common/EnrollmentOverviewDomain/useTeiDisplayName'; import { useProgramInfo } from '../../../hooks/useProgramInfo'; @@ -26,7 +26,7 @@ import { changeEventFromUrl } from '../ViewEvent/ViewEventComponent/viewEvent.ac import { buildEnrollmentsAsOptions } from '../../ScopeSelector'; import { convertDateWithTimeForView, convertValue } from '../../../converters/clientToView'; import { dataElementTypes } from '../../../metaData/DataElement'; -import { useEvent, useAssignee, useAssignedUserSaveContext } from './hooks'; +import { useAssignedUserSaveContext, useAssignee, useEvent } from './hooks'; import type { Props } from './EnrollmentEditEventPage.types'; import { LoadingMaskForPage } from '../../LoadingMasks'; import { cleanUpDataEntry } from '../../DataEntry'; @@ -39,11 +39,13 @@ import { import { DataStoreKeyByPage } from '../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; import { DefaultPageLayout } from './PageLayout/DefaultPageLayout.constants'; import { getProgramEventAccess } from '../../../metaData'; -import { setAssignee, rollbackAssignee } from './EnrollmentEditEventPage.actions'; +import { rollbackAssignee, setAssignee } from './EnrollmentEditEventPage.actions'; import { convertClientToServer } from '../../../converters'; import { CHANGELOG_ENTITY_TYPES } from '../../WidgetsChangelog'; import { ReactQueryAppNamespace } from '../../../utils/reactQueryHelpers'; import { statusTypes } from '../../../enrollment'; +import { cancelEditEventDataEntry } from '../../WidgetEventEdit/EditEventDataEntry/editEventDataEntry.actions'; +import { setCurrentDataEntry } from '../../DataEntry/actions/dataEntry.actions'; const getEventDate = (event) => { const eventDataConvertValue = convertDateWithTimeForView(event?.occurredAt || event?.scheduledAt); @@ -139,6 +141,10 @@ const EnrollmentEditEventPageWithContextPlain = ({ history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); }, [history, orgUnitId, programId]); + const onBackToMainPage = useCallback(() => { + history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); + }, [history, orgUnitId, programId]); + const onDelete = () => { history.push(`/enrollment?${buildUrlQueryString({ orgUnitId, programId, teiId })}`); dispatch(deleteEnrollment({ enrollmentId })); @@ -192,6 +198,11 @@ const EnrollmentEditEventPageWithContextPlain = ({ history.push(`enrollment?${buildUrlQueryString({ enrollmentId })}`); }; + const onBackToViewEvent = () => { + dispatch(cancelEditEventDataEntry()); + dispatch(setCurrentDataEntry(dataEntryIds.ENROLLMENT_EVENT, pageKeys.VIEW_EVENT)); + }; + const { teiDisplayName } = useTeiDisplayName(teiId, programId); // $FlowFixMe const { name: trackedEntityName, id: trackedEntityTypeId } = program?.trackedEntityType; @@ -242,6 +253,9 @@ const EnrollmentEditEventPageWithContextPlain = ({ pageStatus={pageStatus} programStage={programStage} onGoBack={onGoBack} + onBackToMainPage={onBackToMainPage} + onBackToDashboard={onGoBack} + onBackToViewEvent={onBackToViewEvent} widgetEffects={outputEffects} hideWidgets={hideWidgets} teiId={teiId} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js index 7f48be3b24..56e2d5c5de 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js @@ -1,12 +1,12 @@ // @flow import type { ProgramStage } from '../../../metaData'; -import type { WidgetEffects, HideWidgets } from '../common/EnrollmentOverviewDomain'; +import { Program } from '../../../metaData'; +import type { HideWidgets, WidgetEffects } from '../common/EnrollmentOverviewDomain'; import type { UserFormField } from '../../FormFields/UserField'; import type { LinkedRecordClick } from '../../WidgetsRelationship/WidgetTrackedEntityRelationship'; import type { PageLayoutConfig, } from '../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; -import { Program } from '../../../metaData'; export type PlainProps = {| pageLayout: ?PageLayoutConfig, @@ -29,6 +29,9 @@ export type PlainProps = {| onDelete: () => void, onAddNew: () => void, onGoBack: () => void, + onBackToMainPage: () => void, + onBackToDashboard: () => void, + onBackToViewEvent: () => void, onLinkedRecordClick: LinkedRecordClick, onEnrollmentError: (message: string) => void, onEnrollmentSuccess: () => void, diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js index e4c0feb93d..0a8065a405 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js @@ -22,10 +22,6 @@ export const WidgetsForEnrollmentEventEdit: $ReadOnly<{ [key: string]: WidgetCon export const DefaultPageLayout: PageLayoutConfig = { leftColumn: [ - { - type: WidgetTypes.COMPONENT, - name: 'TwoEventWorkspace', - }, { type: WidgetTypes.COMPONENT, name: 'EditEventWorkspace', diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js index 70ee627719..30af8fca67 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js @@ -56,6 +56,7 @@ const getStyles = () => ({ type Props = { showEditEvent: ?boolean, eventId: string, + eventData: Object, onOpenEditEvent: (orgUnit: Object, programCategory: ?ProgramCategory) => void, programStage: ProgramStage, eventAccess: { read: boolean, write: boolean }, @@ -76,6 +77,7 @@ const EventDetailsSectionPlain = (props: Props) => { const { classes, eventId, + eventData, onOpenEditEvent, showEditEvent, programStage, @@ -200,6 +202,7 @@ const EventDetailsSectionPlain = (props: Props) => { diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js index e57972d6bc..46c97da75d 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js @@ -10,6 +10,7 @@ import type { ProgramCategory } from '../../../WidgetEventSchedule/CategoryOptio const mapStateToProps = (state: ReduxState) => ({ showEditEvent: state.viewEventPage.eventDetailsSection && state.viewEventPage.eventDetailsSection.showEditEvent, eventId: state.viewEventPage.eventId, + eventData: state.viewEventPage.loadedValues?.eventContainer?.values || {}, programId: state.currentSelections.programId, }); diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js index ee5710e754..76d7d1b2dd 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js @@ -2,16 +2,21 @@ import React, { Component } from 'react'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core/styles'; -import { spacers, IconChevronLeft24, Button } from '@dhis2/ui'; +import { Button, IconChevronLeft24, spacers } from '@dhis2/ui'; import { EventDetails } from '../EventDetailsSection/EventDetailsSection.container'; import { RightColumnWrapper } from '../RightColumn/RightColumnWrapper.component'; import type { ProgramStage } from '../../../../metaData'; import { DiscardDialog } from '../../../Dialogs/DiscardDialog.component'; import { defaultDialogProps } from '../../../Dialogs/DiscardDialog.constants'; import type { UserFormField } from '../../../FormFields/UserField'; +import { EventBreadcrumb } from '../../../Breadcrumbs/EventBreadcrumb'; +import { pageKeys } from '../../../Breadcrumbs/EventBreadcrumb/EventBreadcrumb'; const getStyles = (theme: Theme) => ({ container: { + display: 'flex', + flexDirection: 'column', + gap: spacers.dp12, padding: theme.typography.pxToRem(24), paddingTop: theme.typography.pxToRem(10), }, @@ -36,11 +41,14 @@ const getStyles = (theme: Theme) => ({ }); type Props = { + programId: string, onBackToAllEvents: () => void, currentDataEntryKey: string, programStage: ProgramStage, eventAccess: { read: boolean, write: boolean }, isUserInteractionInProgress: boolean, + showEditEvent: boolean, + onBackToViewEvent: () => void, classes: { container: string, contentContainer: string, @@ -76,7 +84,11 @@ class ViewEventPlain extends Component { render() { const { classes, + programId, programStage, + showEditEvent, + onBackToViewEvent, + isUserInteractionInProgress, currentDataEntryKey, eventAccess, assignee, @@ -88,28 +100,38 @@ class ViewEventPlain extends Component { return (
- -
- - + +
+ +
+ + +
{ assignee: state.viewEventPage.loadedValues?.eventContainer.event.assignee, getAssignedUserSaveContext: () => assignedUserContextSelector(state), eventId: state.viewEventPage.eventId, + showEditEvent: eventDetailsSection.showEditEvent, }; }; }; diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js index a137ffb1e7..21a1e71c2b 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js @@ -37,6 +37,7 @@ export const ViewEventPageComponent = ({ isUserInteractionInProgress, showAddRel showAddRelationship ? : } diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js index b06c213045..e9edfb3234 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js @@ -1,5 +1,4 @@ // @flow -import i18n from '@dhis2/d2-i18n'; import { EnrollmentWidget, ErrorWidget, @@ -17,13 +16,6 @@ export const EnrollmentPageKeys = Object.freeze({ VIEW_EVENT: 'viewEvent', }); -export const DefaultPageTitle = { - OVERVIEW: i18n.t('Dashboard'), - NEW_EVENT: i18n.t('New Event'), - EDIT_EVENT: i18n.t('Edit Event'), - VIEW_EVENT: i18n.t('View Event'), -}; - // Default components are available across all Enrollment Pages export const DefaultWidgetsForEnrollmentOverview = { TrackedEntityRelationship, diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js index 922a2071fc..cbb1bea87a 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js @@ -8,7 +8,6 @@ type DefaultComponents = 'QuickActions' | 'AssigneeWidget' | 'NewEventWorkspace' | 'EditEventWorkspace' - | 'TwoEventWorkspace' | 'EnrollmentNote' | 'EventNote' | 'TrackedEntityRelationship' diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js index f6d821e872..b8af4f35f9 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js @@ -1,12 +1,11 @@ // @flow import React, { useCallback, useMemo, useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; import { colors, spacers, spacersNum } from '@dhis2/ui'; import { withStyles } from '@material-ui/core/styles'; import { useWidgetColumns } from './hooks/useWidgetColumns'; import { AddRelationshipRefWrapper } from './AddRelationshipRefWrapper'; import type { PlainProps } from '../../../Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types'; -import { DefaultPageTitle, EnrollmentPageKeys } from './DefaultEnrollmentLayout.constants'; +import { EnrollmentBreadcrumb } from '../../../../Breadcrumbs/EnrollmentBreadcrumb'; const getEnrollmentPageStyles = () => ({ container: { @@ -15,6 +14,9 @@ const getEnrollmentPageStyles = () => ({ }, contentContainer: { position: 'relative', + display: 'flex', + flexDirection: 'column', + gap: spacers.dp12, }, columns: { display: 'flex', @@ -41,28 +43,23 @@ const getEnrollmentPageStyles = () => ({ color: colors.grey900, fontWeight: 500, paddingTop: spacersNum.dp8, - paddingBottom: spacersNum.dp16, }, }); // Function to validate hex color const isValidHex = (color: string) => /^#[0-9A-F]{6}$/i.test(color); -const getTitle = (inputTitle, page) => { - const title = inputTitle || i18n.t('Enrollment'); - const titles = { - [EnrollmentPageKeys.OVERVIEW]: !inputTitle ? `${title} ${DefaultPageTitle.OVERVIEW}` : title, - [EnrollmentPageKeys.NEW_EVENT]: `${title}: ${DefaultPageTitle.NEW_EVENT}`, - [EnrollmentPageKeys.EDIT_EVENT]: `${title}: ${DefaultPageTitle.EDIT_EVENT}`, - [EnrollmentPageKeys.VIEW_EVENT]: `${title}: ${DefaultPageTitle.VIEW_EVENT}`, - }; - return titles[page] || title; -}; - const EnrollmentPageLayoutPlain = ({ pageLayout, availableWidgets, + program, + trackedEntityName, + userInteractionInProgress, + eventStatus, currentPage, + onBackToMainPage, + onBackToDashboard, + onBackToViewEvent, classes, ...passOnProps }: PlainProps) => { @@ -73,10 +70,19 @@ const EnrollmentPageLayoutPlain = ({ const allProps = useMemo(() => ({ ...passOnProps, + program, currentPage, + eventStatus, toggleVisibility, addRelationShipContainerElement, - }), [addRelationShipContainerElement, currentPage, passOnProps, toggleVisibility]); + }), [ + addRelationShipContainerElement, + currentPage, + eventStatus, + passOnProps, + program, + toggleVisibility, + ]); const { leftColumnWidgets, @@ -93,13 +99,29 @@ const EnrollmentPageLayoutPlain = ({ }, [pageLayout.backgroundColor]); return ( -
+
-
{getTitle(pageLayout.title, currentPage)}
+
+ +
{pageLayout.leftColumn && !!leftColumnWidgets?.length && (
diff --git a/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js b/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js index 2968d8b1ef..aa99aae4e4 100644 --- a/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js +++ b/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js @@ -1,5 +1,6 @@ // @flow import React from 'react'; +import { IconArrowLeft24, Button } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; import { pageStatuses } from '../../EnrollmentEditEvent/EnrollmentEditEventPage.constants'; import { IncompleteSelectionsMessage } from '../../../IncompleteSelectionsMessage'; @@ -16,6 +17,7 @@ export const WidgetEventEditWrapper = ({ pageStatus, ...passOnProps }: WidgetPro const { programId, stageId, + onGoBack, } = passOnProps; const { @@ -56,12 +58,20 @@ export const WidgetEventEditWrapper = ({ pageStatus, ...passOnProps }: WidgetPro } return ( - + <> +
+ +
+ + ); }; diff --git a/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js b/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js index 77fe10dafa..980303faea 100644 --- a/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js +++ b/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js @@ -54,6 +54,7 @@ type Props = { nextPageButtonDisabled: boolean, currentPage: number, onChangePage: (pageNumber: number) => void, + disabled?: boolean, classes: { root: string, }, @@ -74,7 +75,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => }; renderNavigationElement() { - const { currentPage, classes, theme, nextPageButtonDisabled } = this.props; + const { currentPage, disabled, classes, theme, nextPageButtonDisabled } = this.props; return (
) => {theme.direction === 'rtl' ? : } @@ -91,7 +92,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => {theme.direction === 'rtl' ? : } @@ -99,7 +100,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => {theme.direction === 'rtl' ? : } diff --git a/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js b/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js index 46cbe2fe34..2d3edee629 100644 --- a/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js +++ b/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js @@ -12,6 +12,7 @@ const OptionsSelectWithTranslations = withTranslations()(OptionsSelectVirtualize type Props = { rowsPerPage: number, onChangeRowsPerPage: (rowsPerPage: number) => void, + disabled?: boolean, }; const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => @@ -37,7 +38,7 @@ const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => } renderSelectorElement = () => { - const rowsPerPage = this.props.rowsPerPage; + const { rowsPerPage, disabled } = this.props; return (
@@ -46,6 +47,7 @@ const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => options={this.options} value={rowsPerPage} nullable={false} + disabled={disabled} withoutUnderline searchable={false} /> diff --git a/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js b/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js index c373f3b688..575270becc 100644 --- a/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js +++ b/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js @@ -5,7 +5,7 @@ import { buildUrlQueryString, useLocationQuery } from '../../../utils/routing'; export const useSetProgramId = () => { const history = useHistory(); const { pathname } = useLocation(); - const restOfQueries = useLocationQuery(); + const { selectedTemplateId, ...restOfQueries } = useLocationQuery(); const setProgramId = (programId: string, pageToPush: string = pathname) => { diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js new file mode 100644 index 0000000000..1d1e26c9a9 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js @@ -0,0 +1,5 @@ +// @flow +export { getCategoryOptionsValidatorContainers } from './categoryOptions.validatorContainersGetter'; +export { getEventDateValidatorContainers } from './eventDate.validatorContainersGetter'; +export { getNoteValidatorContainers } from './note.validatorContainersGetter'; +export { getOrgUnitValidatorContainers } from './orgUnit.validatorContainersGetter'; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js new file mode 100644 index 0000000000..b438a4a494 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js @@ -0,0 +1,15 @@ +// @flow +import { isValidOrgUnit } from 'capture-core-utils/validators/form'; +import i18n from '@dhis2/d2-i18n'; + +const validateOrgUnit = (value?: ?Object) => isValidOrgUnit(value); + +export const getOrgUnitValidatorContainers = () => { + const validatorContainers = [ + { + validator: validateOrgUnit, + message: i18n.t('Please provide an valid organisation unit'), + }, + ]; + return validatorContainers; +}; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js index d9f20c2e66..e7041bdd74 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js @@ -5,7 +5,7 @@ import { dataElementTypes } from '../../../metaData'; import type { Props } from './EventChangelogWrapper.types'; import { WidgetEventChangelog } from '../../WidgetsChangelog'; -export const EventChangelogWrapper = ({ formFoundation, eventId, ...passOnProps }: Props) => { +export const EventChangelogWrapper = ({ formFoundation, eventId, eventData, ...passOnProps }: Props) => { const dataItemDefinitions = useMemo(() => { const elements = formFoundation.getElements(); const contextLabels = formFoundation.getLabels(); @@ -52,6 +52,7 @@ export const EventChangelogWrapper = ({ formFoundation, eventId, ...passOnProps ); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js index 274891017e..58cb1d981f 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js @@ -10,4 +10,5 @@ type PassOnProps = {| export type Props = { ...PassOnProps, formFoundation: RenderFoundation, + eventData: Object, }; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js index 550f589dc4..eed050d621 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js @@ -139,6 +139,27 @@ const buildReportDateSettingsFn = () => { return reportDateSettings; }; +const buildOrgUnitSettingsFn = () => { + const dataElement = new DataElement((o) => { + o.type = dataElementTypes.ORGANISATION_UNIT; + }); + + const orgUnitSettings = { + getComponent: () => viewModeComponent, + getComponentProps: (props: Object) => createComponentProps(props, { + label: i18n.t('Organisation unit'), + valueConverter: value => dataElement.convertValue(value, valueConvertFn), + }), + getPropName: () => 'orgUnitId', + getMeta: () => ({ + placement: placements.TOP, + section: dataEntrySectionNames.BASICINFO, + }), + }; + + return orgUnitSettings; +}; + const buildScheduleDateSettingsFn = () => { const dataElement = new DataElement((o) => { o.type = dataElementTypes.DATE; @@ -245,7 +266,8 @@ const AOCFieldBuilderHOC = withAOCFieldBuilder({})(withDataEntryFields(getCatego const CleanUpHOC = withCleanUp()(AOCFieldBuilderHOC); const GeometryField = withDataEntryFieldIfApplicable(buildGeometrySettingsFn())(CleanUpHOC); const ScheduleDateField = withDataEntryField(buildScheduleDateSettingsFn())(GeometryField); -const ReportDateField = withDataEntryField(buildReportDateSettingsFn())(ScheduleDateField); +const OrgUnitField = withDataEntryField(buildOrgUnitSettingsFn())(ScheduleDateField); +const ReportDateField = withDataEntryField(buildReportDateSettingsFn())(OrgUnitField); const CompletableDataEntry = withDataEntryField(buildCompleteFieldSettingsFn())(ReportDateField); const DataEntryWrapper = withBrowserBackWarning()(CompletableDataEntry); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js index a3252ab790..65b90ecf13 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js @@ -23,7 +23,7 @@ import type { EnrollmentData, AttributeValue, } from '../../Pages/common/EnrollmentOverviewDomain/useCommonEnrollmentDomainData'; -import { getEventDateValidatorContainers } from '../DataEntry/fieldValidators/eventDate.validatorContainersGetter'; +import { getEventDateValidatorContainers, getOrgUnitValidatorContainers } from '../DataEntry/fieldValidators'; import { getCachedSingleResourceFromKeyAsync } from '../../../metaDataMemoryStoreBuilders/baseBuilder/singleResourceFromKeyGetter'; import { userStores } from '../../../storageControllers/stores'; import { FEATURES, hasAPISupportForFeature } from '../../../../capture-core-utils'; @@ -67,6 +67,11 @@ export const loadViewEventDataEntry = type: 'DATE', validatorContainers: getEventDateValidatorContainers(), }, + { + id: 'orgUnitId', + type: 'ORGANISATION_UNIT', + validatorContainers: getOrgUnitValidatorContainers(), + }, { id: 'scheduledAt', type: 'DATE', diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js index b39bb89c7c..21b2e372ea 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js @@ -1,40 +1,41 @@ // @flow -import React, { type ComponentType, useState, useEffect } from 'react'; +import React, { type ComponentType, useEffect, useState } from 'react'; import { dataEntryIds, dataEntryKeys } from 'capture-core/constants'; -import { useDispatch, useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; import { spacersNum, - Button, colors, - IconEdit24, - IconArrowLeft24, - IconMore16, - FlyoutMenu, - MenuItem, spacers, } from '@dhis2/ui'; import { withStyles } from '@material-ui/core'; -import i18n from '@dhis2/d2-i18n'; -import { ConditionalTooltip } from 'capture-core/components/Tooltips/ConditionalTooltip'; import { useEnrollmentEditEventPageMode, useAvailableProgramStages } from 'capture-core/hooks'; import { useCoreOrgUnit } from 'capture-core/metadataRetrieval/coreOrgUnit'; import type { PlainProps, ComponentProps } from './widgetEventEdit.types'; -import { startShowEditEventDataEntry } from './WidgetEventEdit.actions'; import { Widget } from '../Widget'; import { EditEventDataEntry } from './EditEventDataEntry/'; import { ViewEventDataEntry } from './ViewEventDataEntry/'; import { LoadingMaskElementCenter } from '../LoadingMasks'; -import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; -import { getProgramEventAccess } from '../../metaData'; -import { useCategoryCombinations } from '../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; -import { OverflowButton } from '../Buttons'; import { EventChangelogWrapper } from './EventChangelogWrapper'; import { FEATURES, useFeature } from '../../../capture-core-utils'; import { inMemoryFileStore } from '../DataEntry/file/inMemoryFileStore'; -import { eventStatuses } from './constants/status.const'; -import { useAuthorities } from '../../utils/authority/useAuthorities'; +import { WidgetHeader } from './WidgetHeader'; +import { WidgetTwoEventWorkspace, WidgetTwoEventWorkspaceWrapperTypes } from '../WidgetTwoEventWorkspace'; const styles = { + container: { + backgroundColor: 'white', + borderRadius: 3, + borderStyle: 'solid', + borderColor: colors.grey400, + borderWidth: 1, + '& > div:nth-child(2)': { + margin: spacersNum.dp16, + borderRadius: 3, + borderStyle: 'solid', + borderColor: colors.grey400, + borderWidth: 1, + }, + }, header: { display: 'flex', alignItems: 'center', @@ -73,7 +74,6 @@ export const WidgetEventEditPlain = ({ initialScheduleDate, stage, formFoundation, - onGoBack, onCancelEditEvent, onHandleScheduleSave, onSaveExternal, @@ -90,144 +90,98 @@ export const WidgetEventEditPlain = ({ classes, }: PlainProps) => { useEffect(() => inMemoryFileStore.clear, []); - const dispatch = useDispatch(); const supportsChangelog = useFeature(FEATURES.changelogs); const { currentPageMode } = useEnrollmentEditEventPageMode(eventStatus); const { orgUnit, error } = useCoreOrgUnit(orgUnitId); const [changeLogIsOpen, setChangeLogIsOpen] = useState(false); - const [actionsIsOpen, setActionsIsOpen] = useState(false); // "Edit event"-button depends on loadedValues. Delay rendering component until loadedValues has been initialized. const loadedValues = useSelector(({ viewEventPage }) => viewEventPage.loadedValues); - const eventAccess = getProgramEventAccess(programId, stageId); - const { hasAuthority } = useAuthorities({ authorities: ['F_UNCOMPLETE_EVENT'] }); - const blockEntryForm = stage.blockEntryForm && !hasAuthority && eventStatus === eventStatuses.COMPLETED; - const disableEdit = !eventAccess?.write || blockEntryForm; - - const tooltipContent = blockEntryForm ? - i18n.t('The event cannot be edited after it has been completed') : - i18n.t('You don\'t have access to edit this event'); - const availableProgramStages = useAvailableProgramStages(stage, teiId, enrollmentId, programId); - const { programCategory } = useCategoryCombinations(programId); if (error) { return error.errorComponent; } - const { icon, name } = stage; return orgUnit && loadedValues ? ( -
-
- - - {currentPageMode === dataEntryKeys.VIEW && ( -
- - - - - {supportsChangelog && ( - setActionsIsOpen(prev => !prev)} - icon={} - small - secondary - dataTest={'widget-event-edit-overflow-button'} - component={( - - { - setChangeLogIsOpen(true); - setActionsIsOpen(false); - }} - /> - - )} - /> - )} -
- )} -
- - {icon && ( -
- +
+ ) : ( +
+
)} - {name}
- } - noncollapsible - > -
- {currentPageMode === dataEntryKeys.VIEW ? ( - - ) : ( - - )} -
- + +
{supportsChangelog && changeLogIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js new file mode 100644 index 0000000000..8e86f36fdc --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js @@ -0,0 +1,129 @@ +// @flow +import React, { type ComponentType, useState, useEffect } from 'react'; +import { dataEntryKeys } from 'capture-core/constants'; +import { useDispatch } from 'react-redux'; +import { spacersNum, Button, IconEdit24, IconMore16, FlyoutMenu, MenuItem, spacers } from '@dhis2/ui'; +import { withStyles } from '@material-ui/core'; +import i18n from '@dhis2/d2-i18n'; +import { FEATURES, useFeature } from 'capture-core-utils'; +import { useAuthorities } from 'capture-core/utils/authority/useAuthorities'; +import { ConditionalTooltip } from 'capture-core/components/Tooltips/ConditionalTooltip'; +import { useEnrollmentEditEventPageMode } from 'capture-core/hooks'; +import { startShowEditEventDataEntry } from '../WidgetEventEdit.actions'; +import { NonBundledDhis2Icon } from '../../NonBundledDhis2Icon'; +import { getProgramEventAccess } from '../../../metaData'; +import { useCategoryCombinations } from '../../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; +import { OverflowButton } from '../../Buttons'; +import { inMemoryFileStore } from '../../DataEntry/file/inMemoryFileStore'; +import { eventStatuses } from '../constants/status.const'; +import type { PlainProps, Props } from './WidgetHeader.types'; + +const styles = { + icon: { + paddingRight: spacersNum.dp8, + }, + menu: { + marginLeft: 'auto', + }, + menuActions: { + display: 'flex', + alignItems: 'center', + gap: spacers.dp4, + }, + tooltip: { + display: 'inline-flex', + }, +}; + +export const WidgetHeaderPlain = ({ + eventStatus, + stage, + programId, + orgUnit, + setChangeLogIsOpen, + classes, +}: Props) => { + useEffect(() => inMemoryFileStore.clear, []); + const dispatch = useDispatch(); + + const supportsChangelog = useFeature(FEATURES.changelogs); + const { currentPageMode } = useEnrollmentEditEventPageMode(eventStatus); + const [actionsIsOpen, setActionsIsOpen] = useState(false); + + const eventAccess = getProgramEventAccess(programId, stage.id); + const { hasAuthority } = useAuthorities({ authorities: ['F_UNCOMPLETE_EVENT'] }); + const blockEntryForm = stage.blockEntryForm && !hasAuthority && eventStatus === eventStatuses.COMPLETED; + const disableEdit = !eventAccess?.write || blockEntryForm; + + const tooltipContent = blockEntryForm + ? i18n.t('The event cannot be edited after it has been completed') + : i18n.t("You don't have access to edit this event"); + + const { programCategory } = useCategoryCombinations(programId); + + const { icon, name } = stage; + + return ( + <> + {icon && ( +
+ +
+ )} + {name} +
+ {currentPageMode === dataEntryKeys.VIEW && ( +
+ + + + + {supportsChangelog && ( + setActionsIsOpen(prev => !prev)} + icon={} + small + secondary + dataTest={'widget-event-edit-overflow-button'} + component={ + + { + setChangeLogIsOpen(true); + setActionsIsOpen(false); + }} + /> + + } + /> + )} +
+ )} +
+ + ); +}; + +export const WidgetHeader: ComponentType = withStyles(styles)(WidgetHeaderPlain); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js new file mode 100644 index 0000000000..df70f89e0e --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js @@ -0,0 +1,16 @@ +// @flow +import type { OrgUnit } from '@dhis2/rules-engine-javascript'; +import { ProgramStage } from '../../../metaData'; + +export type PlainProps = {| + eventStatus?: string, + stage: ProgramStage, + programId: string, + orgUnit: OrgUnit, + setChangeLogIsOpen: (toggle: boolean) => void, +|}; + +export type Props = {| + ...PlainProps, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js new file mode 100644 index 0000000000..efff17d3ce --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js @@ -0,0 +1,2 @@ +// @flow +export { WidgetHeader } from './WidgetHeader.container'; diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js index e711f1a1f7..faf83dfe91 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js @@ -9,6 +9,7 @@ import { TrackedEntityChangelogWrapper } from './TrackedEntityChangelogWrapper'; export const OverflowMenuComponent = ({ trackedEntity, + trackedEntityData, trackedEntityTypeName, canWriteData, canCascadeDeleteTei, @@ -68,6 +69,7 @@ export const OverflowMenuComponent = ({ programAPI={programAPI} isOpen={changelogIsOpen} setIsOpen={setChangelogIsOpen} + trackedEntityData={trackedEntityData} /> )} diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js index 031f7fd462..38d17ad0c0 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js @@ -8,6 +8,7 @@ export const OverflowMenu = ({ trackedEntityTypeName, canWriteData, trackedEntity, + trackedEntityData, onDeleteSuccess, displayChangelog, teiId, @@ -21,6 +22,7 @@ export const OverflowMenu = ({ canWriteData={canWriteData} canCascadeDeleteTei={hasAuthority} trackedEntity={trackedEntity} + trackedEntityData={trackedEntityData} onDeleteSuccess={onDeleteSuccess} displayChangelog={displayChangelog} teiId={teiId} diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js index ad3cc687d4..84ea57e86a 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js @@ -3,6 +3,7 @@ export type Props = {| trackedEntity: { trackedEntity: string }, trackedEntityTypeName: string, + trackedEntityData: Object, canWriteData: boolean, onDeleteSuccess?: () => void, displayChangelog: boolean, @@ -13,6 +14,7 @@ export type Props = {| export type PlainProps = {| trackedEntity: { trackedEntity: string }, trackedEntityTypeName: string, + trackedEntityData: Object, canWriteData: boolean, canCascadeDeleteTei: boolean, onDeleteSuccess?: () => void, diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js index 1dc3172af6..27db89634d 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js @@ -5,9 +5,14 @@ import { useFormFoundation } from '../../DataEntry/hooks'; import { WidgetTrackedEntityChangelog } from '../../../WidgetsChangelog'; import type { Props } from './TrackedEntityChangelogWrapper.types'; -export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, ...passOnProps }: Props) => { +export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, trackedEntityData, ...passOnProps }: Props) => { const formFoundation: RenderFoundation = useFormFoundation(programAPI); + const transformedTrackedEntityData = trackedEntityData.reduce((acc, item) => { + acc[item.attribute] = item.value; + return acc; + }, {}); + const dataItemDefinitions = useMemo(() => { if (!Object.keys(formFoundation)?.length) return {}; const elements = formFoundation.getElements(); @@ -58,6 +63,7 @@ export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, .. close={() => setIsOpen(false)} programId={programAPI.id} dataItemDefinitions={dataItemDefinitions} + trackedEntityData={transformedTrackedEntityData} /> ); }; diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js index e0bb62461f..c2c5d726f4 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js @@ -5,6 +5,7 @@ type PassOnProps = {| teiId: string, isOpen: boolean, setIsOpen: (boolean | boolean => boolean) => void, + trackedEntityData: Object, |} export type Props = { diff --git a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js index 0204ac19a7..f63800dd43 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js @@ -162,6 +162,7 @@ const WidgetProfilePlain = ({ trackedEntity={trackedEntity} onDeleteSuccess={onDeleteSuccess} displayChangelog={displayChangelog} + trackedEntityData={clientAttributesWithSubvalues} teiId={teiId} programAPI={program} /> diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js index 74ae039f19..9d7f31f63f 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js @@ -1,6 +1,7 @@ // @flow import React from 'react'; import moment from 'moment'; +import i18n from '@dhis2/d2-i18n'; import { statusTypes, translatedStatusTypes } from 'capture-core/events/statusTypes'; import { convertMomentToDateFormatString } from '../../../../../../utils/converters/date'; import { getSubValues } from '../../getEventDataWithSubValue'; @@ -25,10 +26,14 @@ const getEventStatus = (event: ApiEnrollmentEvent) => { } if (event.status === statusTypes.SCHEDULE) { - if (!event.scheduledAt || !daysUntilDueDate) { + if (!event.scheduledAt) { return { status: statusTypes.SCHEDULE, options: undefined }; } + if (daysUntilDueDate === 0) { + return { status: statusTypes.SCHEDULE, options: i18n.t('Today') }; + } + if (daysUntilDueDate < 14) { return { status: statusTypes.SCHEDULE, options: dueDateFromNow }; } diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js new file mode 100644 index 0000000000..ccacd58885 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js @@ -0,0 +1,63 @@ +// @flow +import React, { type ComponentType } from 'react'; +import { spacersNum } from '@dhis2/ui'; +import { withStyles } from '@material-ui/core/'; +import { EnrollmentPageKeys } + from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import { NonBundledDhis2Icon } from '../../NonBundledDhis2Icon'; +import type { PlainProps, Props } from './WidgetHeader.types'; +import { OverflowMenuComponent } from '../OverflowMenu'; + +const styles = { + menu: { + marginLeft: 'auto', + }, + icon: { + marginRight: spacersNum.dp8, + }, +}; + + +const WidgetHeaderPlain = ({ + linkedStage, + linkedEvent, + orgUnitId, + currentPage, + eventId, + relationship, + relationshipType, + stage, + classes }: Props) => { + const { icon } = linkedStage; + return ( + <> + {icon && ( +
+ +
+ )} + {linkedStage.name} + {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( +
+ +
+ )} + + ); +}; + +export const WidgetHeader: ComponentType = withStyles(styles)(WidgetHeaderPlain); + diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js new file mode 100644 index 0000000000..16d4b75138 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js @@ -0,0 +1,21 @@ +// @flow +import { EnrollmentPageKeys } + from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import type { ProgramStage } from '../../../metaData'; + +export type PlainProps = {| + orgUnitId: string, + linkedEvent: { event: string }, + linkedStage: ProgramStage, + currentPage: $Values | string, + eventId: string, + relationship: string, + relationshipType: string, + stage: ProgramStage, +|}; + +export type Props = {| + ...PlainProps, + ...CssClasses, +|}; + diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js new file mode 100644 index 0000000000..efff17d3ce --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js @@ -0,0 +1,2 @@ +// @flow +export { WidgetHeader } from './WidgetHeader.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 37be7a7963..dc74e98476 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -1,49 +1,21 @@ // @flow import React from 'react'; -import { colors, spacersNum } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core/'; import type { Props } from './WidgetTwoEventWorkspace.types'; import { useMetadataForProgramStage } from '../DataEntries/common/ProgramStage/useMetadataForProgramStage'; import { Widget } from '../Widget'; import { useLinkedEventByOriginId, useClientDataValues } from './hooks'; import { WidgetTwoEventWorkspaceComponent } from './WidgetTwoEventWorkspace.component'; -import { OverflowMenuComponent } from './OverflowMenu'; -import { - EnrollmentPageKeys, -} from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; -import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; +import { WidgetWrapper } from './WidgetWrapper'; +import { WidgetHeader } from './WidgetHeader'; -const styles = { - menu: { - display: 'flex', - alignItems: 'center', - padding: spacersNum.dp8, - justifyContent: 'end', - background: colors.white, - borderTopLeftRadius: 3, - borderTopRightRadius: 3, - borderStyle: 'solid', - borderColor: colors.grey400, - borderWidth: 1, - borderBottomWidth: 0, - }, - header: { - display: 'flex', - alignItems: 'center', - padding: spacersNum.dp8, - }, - icon: { - marginRight: spacersNum.dp8, - }, -}; - -const WidgetTwoEventWorkspacePlain = ({ +export const WidgetTwoEventWorkspace = ({ eventId, programId, orgUnitId, currentPage, - classes, + stage, + type, }: Props) => { const { linkedEvent, @@ -56,7 +28,7 @@ const WidgetTwoEventWorkspacePlain = ({ const { formFoundation, - stage, + stage: linkedStage, isLoading: isLoadingMetadata, isError: isMetadataError, } = useMetadataForProgramStage({ @@ -86,54 +58,38 @@ const WidgetTwoEventWorkspacePlain = ({ ); } - if (!linkedEvent || !formFoundation || !stage) { + if (!linkedEvent || !formFoundation || !linkedStage) { return null; } return ( -
- {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( -
- + } + noncollapsible + > + -
- )} - - - {stage.icon && ( -
- -
- )} - {stage.name} -
- } - noncollapsible - > - - -
+ + } + /> ); }; - -export const WidgetTwoEventWorkspace = withStyles( - styles, -)(WidgetTwoEventWorkspacePlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js index 52aff39ded..c79a68c5d5 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js @@ -2,13 +2,17 @@ import { EnrollmentPageKeys, } from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import { WidgetTwoEventWorkspaceWrapperTypes } from './index'; +import type { ProgramStage } from '../../metaData'; -type PlainProps = {| +export type Props = {| programId: string, eventId: string, orgUnitId: string, stageId: string, - currentPage: $Values, + currentPage: $Values | string, + stage?: ProgramStage, + type?: $Values, |} export type LinkedEvent = {| @@ -18,7 +22,3 @@ export type LinkedEvent = {| orgUnit: string, |} -export type Props = {| - ...PlainProps, - ...CssClasses, -|} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js new file mode 100644 index 0000000000..421d827ca5 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js @@ -0,0 +1,5 @@ +// @flow + +export const WidgetTwoEventWorkspaceWrapperTypes = { + EDIT_EVENT: 'editEvent', +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js new file mode 100644 index 0000000000..dcc0defdc9 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js @@ -0,0 +1,74 @@ +// @flow +import React from 'react'; +import { colors, spacersNum, IconLink16 } from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core/'; +import type { Props } from './WidgetWrapper.types'; +import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; + +const styles = { + container: { + width: 'fit-content', + marginBottom: '16px', + margin: '16px', + }, + header: { + display: 'flex', + alignItems: 'center', + paddingBottom: spacersNum.dp16, + fontWeight: 500, + fontSize: 16, + color: colors.grey800, + }, + referalResponse: { + padding: spacersNum.dp16, + backgroundColor: colors.blue100, + borderRadius: '3px', + }, + linkedEvent: { + color: colors.blue900, + verticalAlign: 'middle', + display: 'flex', + fontSize: '16px', + fontWeight: '500', + }, + icon: { + marginRight: spacersNum.dp8, + }, + decription: { + margin: `${spacersNum.dp8}px 0`, + }, +}; + +const WidgetWrapperPlain = ({ widget, type, stage, linkedStage, classes }: Props) => { + if (type === WidgetTwoEventWorkspaceWrapperTypes.EDIT_EVENT) { + return ( +
+
{stage?.name}
+
+
+ + + +
{i18n.t('Linked event')}
+
+
+ {i18n.t( + 'This {{stageName}} event is linked to a {{linkedStageName}} event. Review the linked event details before entering data below', + { + linkedStageName: linkedStage?.name, + stageName: stage?.name, + interpolation: { escapeValue: false }, + }, + )} +
+ {widget} +
+
+ ); + } + + return <>{widget}; +}; + +export const WidgetWrapper = withStyles(styles)(WidgetWrapperPlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js new file mode 100644 index 0000000000..ae72f04aa3 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js @@ -0,0 +1,15 @@ +// @flow +import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; +import type { ProgramStage } from '../../../metaData'; + +type PlainProps = {| + widget: any, + linkedStage: ProgramStage, + stage?: ProgramStage, + type?: $Values, +|}; + +export type Props = {| + ...PlainProps, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js new file mode 100644 index 0000000000..adb87f9498 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js @@ -0,0 +1,2 @@ +// @flow +export { WidgetWrapper } from './WidgetWrapper.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js index 27320f9e8c..b057d60b99 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js @@ -1,3 +1,4 @@ // @flow export { WidgetTwoEventWorkspace } from './WidgetTwoEventWorkspace.container'; +export { WidgetTwoEventWorkspaceWrapperTypes } from './WidgetTwoEventWorkspaceWrapper.const'; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js index 86137d295e..aabb240e4a 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js @@ -5,6 +5,7 @@ import { Changelog, CHANGELOG_ENTITY_TYPES } from '../common/Changelog'; type Props = { eventId: string, + eventData: Object, dataItemDefinitions: ItemDefinitions, isOpen: boolean, setIsOpen: (boolean | boolean => boolean) => void, @@ -12,6 +13,7 @@ type Props = { export const WidgetEventChangelog = ({ eventId, + eventData, setIsOpen, ...passOnProps }: Props) => ( @@ -19,6 +21,7 @@ export const WidgetEventChangelog = ({ {...passOnProps} close={() => setIsOpen(false)} entityId={eventId} + entityData={eventData} entityType={CHANGELOG_ENTITY_TYPES.EVENT} /> ); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js index 86e941142c..a28370ea35 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js @@ -9,17 +9,20 @@ type Props = { dataItemDefinitions: ItemDefinitions, isOpen: boolean, close: () => void, + trackedEntityData: Object, } export const WidgetTrackedEntityChangelog = ({ teiId, programId, close, + trackedEntityData, ...passOnProps }: Props) => ( , isOpen: boolean, close: () => void, dataItemDefinitions: ItemDefinitions, programId?: string, -} +}; export const Changelog = ({ entityId, + entityData, entityType, programId, isOpen, @@ -25,9 +27,11 @@ export const Changelog = ({ dataItemDefinitions, }: Props) => { const { - records, + rawRecords, pager, - isLoading, + isLoading: isChangelogLoading, + page, + pageSize, setPage, setPageSize, sortDirection, @@ -36,10 +40,24 @@ export const Changelog = ({ entityId, entityType, programId, + }); + + const { + processedRecords, + isLoading: isProcessingLoading, + } = useListDataValues({ + rawRecords, dataItemDefinitions, + entityId, + entityData, + entityType, + programId, + sortDirection, + page, + pageSize, }); - if (isLoading) { + if (isChangelogLoading || isProcessingLoading) { return ( @@ -51,7 +69,7 @@ export const Changelog = ({ (
- {previousValue} - - {currentValue} +
{previousValue}
+
+
{currentValue}
); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js index e93571cbf2..3169194fc1 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js @@ -13,13 +13,11 @@ type Props = { }, classes: { dataItemColumn: string, - valueColumn: string, }, }; const styles = { dataItemColumn: { wordWrap: 'break-word', hyphens: 'auto' }, - valueColumn: { wordWrap: 'break-word' }, }; const ChangelogTableRowPlain = ({ record, classes }: Props) => ( @@ -28,7 +26,7 @@ const ChangelogTableRowPlain = ({ record, classes }: Props) => ( {record.user} {record.dataItemLabel} - + ); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js index af7f2f4226..d35467e5b7 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js @@ -1,2 +1,3 @@ // @flow export { useChangelogData } from './useChangelogData'; +export { useListDataValues } from './useListDataValues'; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js index bcf1c82a54..f9562cf4ac 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js @@ -1,48 +1,31 @@ // @flow -import moment from 'moment'; -import { v4 as uuid } from 'uuid'; -import log from 'loglevel'; -import { errorCreator } from 'capture-core-utils'; -import { useMemo, useState } from 'react'; -import { useTimeZoneConversion } from '@dhis2/app-runtime'; +import { useState } from 'react'; import { useApiDataQuery } from '../../../../utils/reactQueryHelpers'; -import { CHANGELOG_ENTITY_TYPES, QUERY_KEYS_BY_ENTITY_TYPE } from '../Changelog/Changelog.constants'; -import type { Change, ChangelogRecord, ItemDefinitions, SortDirection } from '../Changelog/Changelog.types'; -import { convertServerToClient } from '../../../../converters'; -import { convert } from '../../../../converters/clientToList'; +import { + CHANGELOG_ENTITY_TYPES, + QUERY_KEYS_BY_ENTITY_TYPE, +} from '../Changelog/Changelog.constants'; +import type { + SortDirection, +} from '../Changelog/Changelog.types'; type Props = { entityId: string, programId?: string, entityType: $Values, - dataItemDefinitions: ItemDefinitions, -} +}; const DEFAULT_PAGE_SIZE = 10; const DEFAULT_SORT_DIRECTION = 'default'; -const getMetadataItemDefinition = ( - elementKey: string, - change: Change, - dataItemDefinitions: ItemDefinitions, -) => { - const { dataElement, attribute } = change; - const fieldId = dataElement ?? attribute; - const metadataElement = fieldId ? dataItemDefinitions[fieldId] : dataItemDefinitions[elementKey]; - - return { metadataElement, fieldId }; -}; - export const useChangelogData = ({ entityId, entityType, programId, - dataItemDefinitions, }: Props) => { + const [sortDirection, setSortDirection] = useState(DEFAULT_SORT_DIRECTION); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); - const [sortDirection, setSortDirection] = useState(DEFAULT_SORT_DIRECTION); - const { fromServerDate } = useTimeZoneConversion(); const handleChangePageSize = (newPageSize: number) => { setPage(1); @@ -50,7 +33,7 @@ export const useChangelogData = ({ }; const { data, isLoading, isError } = useApiDataQuery( - ['changelog', entityType, entityId, { sortDirection, page, pageSize, programId }], + ['changelog', entityType, entityId, 'rawData', { sortDirection, page, pageSize, programId }], { resource: `tracker/${QUERY_KEYS_BY_ENTITY_TYPE[entityType]}/${entityId}/changeLogs`, params: { @@ -67,62 +50,15 @@ export const useChangelogData = ({ }, ); - const records: ?Array = useMemo(() => { - if (!data) return undefined; - - return data.changeLogs.map((changelog) => { - const { change: apiChange, createdAt, createdBy } = changelog; - const elementKey = Object.keys(apiChange)[0]; - const change = apiChange[elementKey]; - - const { metadataElement, fieldId } = getMetadataItemDefinition( - elementKey, - change, - dataItemDefinitions, - ); - - if (!metadataElement) { - log.error(errorCreator('Could not find metadata for element')({ - ...changelog, - })); - return null; - } - - const { firstName, surname, username } = createdBy; - const { options } = metadataElement; - - const previousValue = convert( - convertServerToClient(change.previousValue, metadataElement.type), - metadataElement.type, - options, - ); - - const currentValue = convert( - convertServerToClient(change.currentValue, metadataElement.type), - metadataElement.type, - options, - ); - - return { - reactKey: uuid(), - date: moment(fromServerDate(createdAt)).format('YYYY-MM-DD HH:mm'), - user: `${firstName} ${surname} (${username})`, - dataItemId: fieldId, - changeType: changelog.type, - dataItemLabel: metadataElement.name, - previousValue, - currentValue, - }; - }).filter(Boolean); - }, [data, dataItemDefinitions, fromServerDate]); - return { - records, + rawRecords: data, pager: data?.pager, setPage, setPageSize: handleChangePageSize, sortDirection, setSortDirection, + page, + pageSize, isLoading, isError, }; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js new file mode 100644 index 0000000000..e94bf94a88 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js @@ -0,0 +1,177 @@ +// @flow +import { useMemo } from 'react'; +import log from 'loglevel'; +import { useTimeZoneConversion, useConfig, useDataEngine } from '@dhis2/app-runtime'; +import { useQuery } from 'react-query'; +import { errorCreator, buildUrl, pipe } from 'capture-core-utils'; +import { ReactQueryAppNamespace } from 'capture-core/utils/reactQueryHelpers'; +import { dataElementTypes } from '../../../../metaData'; +import { CHANGELOG_ENTITY_TYPES } from '../Changelog/Changelog.constants'; +import type { Change, ItemDefinitions, SortDirection } from '../Changelog/Changelog.types'; +import { convertServerToClient } from '../../../../converters'; +import { convert as convertClientToList } from '../../../../converters/clientToList'; +import { RECORD_TYPE, subValueGetterByElementType } from '../utils/getSubValueForChangelogData'; +import { makeQuerySingleResource } from '../../../../utils/api'; +import { attributeOptionsKey } from '../../../DataEntryDhis2Helpers'; + + +type Props = { + rawRecords: Object, + dataItemDefinitions: ItemDefinitions, + entityId: string, + entityData: Object, + entityType: $Values, + programId?: string, + sortDirection: SortDirection, + page: number, + pageSize: number, +}; + +const fetchFormattedValues = async ({ + rawRecords, + dataItemDefinitions, + entityId, + entityData, + entityType, + programId, + absoluteApiPath, + querySingleResource, + fromServerDate, +}) => { + if (!rawRecords) return []; + + const getMetadataItemDefinition = ( + elementKey: string, + change: Change, + ) => { + const fieldId = change.dataElement || change.attribute; + if (!fieldId) { + log.error('Could not find fieldId in change:', change); + return { metadataElement: null, fieldId: null }; + } + const metadataElement = dataItemDefinitions[fieldId]; + return { metadataElement, fieldId }; + }; + + + const fetchedRecords = await Promise.all( + rawRecords.changeLogs.map(async (changelog) => { + const { change: apiChange, createdAt, createdBy, type } = changelog; + const elementKey = Object.keys(apiChange)[0]; + const change = apiChange[elementKey]; + + const { metadataElement, fieldId } = getMetadataItemDefinition( + elementKey, + change, + ); + + if (!metadataElement) { + log.error( + errorCreator('Could not find metadata for element')({ ...changelog }), + ); + return null; + } + + const getSubValue = subValueGetterByElementType[RECORD_TYPE[entityType]]?.[metadataElement.type]; + + const getValue = async (value, latestValue) => { + if (!getSubValue) { + return convertServerToClient(value, metadataElement.type); + } + if (entityType === RECORD_TYPE.trackedEntity) { + return getSubValue({ + trackedEntity: { teiId: entityId, value }, + programId, + attributeId: fieldId, + absoluteApiPath, + querySingleResource, + latestValue, + }); + } + if (entityType === RECORD_TYPE.event) { + return getSubValue({ + dataElement: { id: fieldId, value }, + eventId: entityId, + absoluteApiPath, + querySingleResource, + latestValue, + }); + } + return null; + }; + + const [previousValueClient, currentValueClient] = await Promise.all([ + change.previousValue ? getValue(change.previousValue, false) : null, + getValue(change.currentValue, entityData?.[change.attribute ?? change.dataElement]?.value === change.currentValue), + ]); + + const { firstName, surname, username } = createdBy; + const { options } = metadataElement; + + const previousValue = convertClientToList(previousValueClient, metadataElement.type, options); + const currentValue = convertClientToList(currentValueClient, metadataElement.type, options); + + return { + reactKey: fieldId ? `${createdAt}-${fieldId}` : attributeOptionsKey, + date: pipe(convertServerToClient, convertClientToList)(fromServerDate(createdAt), dataElementTypes.DATETIME), + user: `${firstName} ${surname} (${username})`, + changeType: type, + dataItemLabel: metadataElement.name, + previousValue, + currentValue, + }; + }), + ); + + return fetchedRecords.filter(Boolean); +}; + +export const useListDataValues = ({ + rawRecords, + dataItemDefinitions, + entityId, + entityData, + entityType, + programId, + sortDirection, + page, + pageSize, +}: Props) => { + const dataEngine = useDataEngine(); + const { baseUrl, apiVersion } = useConfig(); + const { fromServerDate } = useTimeZoneConversion(); + const absoluteApiPath = buildUrl(baseUrl, `api/${apiVersion}`); + + const querySingleResource = useMemo( + () => makeQuerySingleResource(dataEngine.query.bind(dataEngine)), + [dataEngine], + ); + + const queryKey = [ReactQueryAppNamespace, 'changelog', entityType, entityId, 'formattedData', { sortDirection, page, pageSize, programId }]; + + const { data: processedRecords, isError, isLoading } = useQuery( + queryKey, + () => fetchFormattedValues({ + rawRecords, + dataItemDefinitions, + entityId, + entityData, + entityType, + programId, + absoluteApiPath, + querySingleResource, + fromServerDate, + }), + { + enabled: !!rawRecords && !!dataItemDefinitions && !!entityId && !!entityType, + staleTime: Infinity, + cacheTime: Infinity, + }, + ); + + return { + processedRecords, + isError, + isLoading, + }; +}; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js new file mode 100644 index 0000000000..85b13724e2 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js @@ -0,0 +1,148 @@ +// @flow +import log from 'loglevel'; +import i18n from '@dhis2/d2-i18n'; +import { errorCreator } from 'capture-core-utils'; +import { dataElementTypes } from '../../../../metaData'; +import type { QuerySingleResource } from '../../../../utils/api'; + +type SubValueTEAProps = { + trackedEntity: Object, + attributeId: string, + programId: string, + absoluteApiPath: string, + querySingleResource: QuerySingleResource, + latestValue?: boolean, +}; + +type SubValuesDataElementProps = { + dataElement: Object, + querySingleResource: QuerySingleResource, + eventId: string, + absoluteApiPath: string, + latestValue?: boolean, +}; + +const buildTEAUrlByElementType: {| +[string]: Function, +|} = { + [dataElementTypes.FILE_RESOURCE]: async ({ + trackedEntity, + attributeId, + programId, + absoluteApiPath, + querySingleResource, + latestValue, + }: SubValueTEAProps) => { + const { teiId, value } = trackedEntity; + if (!value) return null; + try { + if (!latestValue) { + return i18n.t('File'); + } + + const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); + + return { + id, + name, + url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/file?program=${programId}`, + }; + } catch (error) { + log.error( + errorCreator('Error fetching file resource')({ error }), + ); + return null; + } + }, + [dataElementTypes.IMAGE]: async ({ + trackedEntity, + attributeId, + programId, + absoluteApiPath, + latestValue, + querySingleResource, + }: SubValueTEAProps) => { + const { teiId, value } = trackedEntity; + if (!value) return null; + try { + if (!latestValue) { + return i18n.t('Image'); + } + const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); + + return { + id, + name, + url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?program=${programId}`, + previewUrl: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?program=${programId}&dimension=small`, + }; + } catch (error) { + log.error( + errorCreator('Error fetching image resource')({ error }), + ); + return null; + } + }, +}; + +const buildDataElementUrlByElementType: {| +[string]: Function, +|} = { + [dataElementTypes.FILE_RESOURCE]: async ({ dataElement, querySingleResource, eventId, absoluteApiPath, latestValue }: SubValuesDataElementProps) => { + const { id: dataElementId, value } = dataElement; + if (!value) return null; + + try { + if (!latestValue) { + return i18n.t('File'); + } + + const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); + + return { + id, + name, + url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/file`, + }; + } catch (error) { + log.error( + errorCreator('Error fetching file resource')({ error }), + ); + return null; + } + }, + [dataElementTypes.IMAGE]: async ({ dataElement, querySingleResource, eventId, absoluteApiPath, latestValue }: SubValuesDataElementProps) => { + const { id: dataElementId, value } = dataElement; + if (!value) return null; + + try { + if (!latestValue) { + return i18n.t('Image'); + } + + const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); + + return { + id, + name, + url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/image`, + previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/image?dimension=small`, + }; + } catch (error) { + log.error( + errorCreator('Error fetching image resource')({ error }), + ); + return null; + } + }, +}; + +export const RECORD_TYPE = Object.freeze({ + event: 'event', + trackedEntity: 'trackedEntity', +}); + +export const subValueGetterByElementType = Object.freeze({ + [RECORD_TYPE.trackedEntity]: buildTEAUrlByElementType, + [RECORD_TYPE.event]: buildDataElementUrlByElementType, +}); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js index 3bacc8df11..bcb525bcc6 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js @@ -38,7 +38,7 @@ export const EventWorkingListsReduxProvider = ({ storeId, program, programStage, const downloadRequest = useSelector(({ workingLists }) => workingLists[storeId] && workingLists[storeId].currentRequest); // TODO: Remove when DownloadDialog is rewritten - const onSelectListRow = useCallback(({ id }) => { + const onClickListRow = useCallback(({ id }) => { window.scrollTo(0, 0); dispatch(openViewEventPage(id)); }, [dispatch]); @@ -98,7 +98,7 @@ export const EventWorkingListsReduxProvider = ({ storeId, program, programStage, currentTemplate={currentTemplate} templates={templates} lastIdDeleted={lastEventIdDeleted} - onSelectListRow={onSelectListRow} + onClickListRow={onClickListRow} onLoadView={injectDownloadRequestToLoadView} onUpdateList={injectDownloadRequestToUpdateList} onDeleteEvent={onDeleteEvent} diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js index 3be72bf3d8..33a53d67a6 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js @@ -79,7 +79,7 @@ export type EventWorkingListsReduxOutputProps = {| onDeleteTemplate: DeleteTemplate, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js index d79f2af5d6..0b1954c4eb 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js @@ -6,6 +6,7 @@ import type { Props } from './eventWorkingListsUpdateTrigger.types'; export const EventWorkingListsUpdateTrigger = ({ lastTransaction, + customUpdateTrigger, lastIdDeleted, listDataRefreshTimestamp, lastTransactionOnListDataRefresh, @@ -16,12 +17,6 @@ export const EventWorkingListsUpdateTrigger = ({ const forceUpdateOnMount = moment().diff(moment(listDataRefreshTimestamp || 0), 'minutes') > 5 || lastTransaction !== lastTransactionOnListDataRefresh; - // Creating a string that will force an update of the list when it changes. - const customUpdateTrigger = [ - lastTransaction, - lastIdDeleted, - ].join('##'); - const injectCustomUpdateContextToLoadList = useCallback((selectedTemplate: Object, context: Object, meta: Object) => onLoadView(selectedTemplate, { ...context, lastTransaction }, meta), [onLoadView, lastTransaction]); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js index 8ae6c0609c..79b1c6aa32 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js @@ -1,13 +1,33 @@ // @flow -import React, { useState, useMemo, useCallback } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import i18n from '@dhis2/d2-i18n'; +import { v4 as uuid } from 'uuid'; import { EventWorkingListsRowMenuSetup } from '../RowMenuSetup'; import { DownloadDialog } from '../../WorkingListsCommon'; import type { CustomMenuContents } from '../../WorkingListsBase'; import type { Props } from './EventWorkingListsViewMenuSetup.types'; +import { useSelectedRowsController } from '../../WorkingListsBase/BulkActionBar'; +import { EventBulkActions } from '../../EventWorkingListsCommon/EventBulkActions'; -export const EventWorkingListsViewMenuSetup = ({ downloadRequest, program, ...passOnProps }: Props) => { +export const EventWorkingListsViewMenuSetup = ({ + downloadRequest, + program, + dataSource, + ...passOnProps +}: Props) => { const [downloadDialogOpen, setDownloadDialogOpenStatus] = useState(false); + const [customUpdateTrigger, setCustomUpdateTrigger] = useState(); + + const { + selectedRows, + clearSelection, + selectAllRows, + selectionInProgress, + toggleRowSelected, + allRowsAreSelected, + removeRowsFromSelection, + } = useSelectedRowsController({ recordIds: dataSource?.map(data => data.id) }); + const customListViewMenuContents: CustomMenuContents = useMemo(() => [{ key: 'downloadData', clickHandler: () => setDownloadDialogOpenStatus(true), @@ -18,12 +38,38 @@ export const EventWorkingListsViewMenuSetup = ({ downloadRequest, program, ...pa setDownloadDialogOpenStatus(false); }, [setDownloadDialogOpenStatus]); + + const onUpdateList = useCallback((disableClearSelection?: boolean) => { + const id = uuid(); + setCustomUpdateTrigger(id); + !disableClearSelection && clearSelection(); + }, [clearSelection]); + + const eventBulkActions = ( + + ); + return ( void, + onSelectAll: (rows: Array) => void, + selectionInProgress: ?boolean, + selectedRows: { [key: string]: boolean }, + bulkActionBarComponent: React$Element, |}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js new file mode 100644 index 0000000000..6c3fce11fa --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js @@ -0,0 +1,169 @@ +// @flow +import React, { type ComponentType, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core'; +import { Button, ButtonStrip, colors, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; +import { useBulkCompleteEvents } from './hooks/useBulkCompleteEvents'; +import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; +import { Widget } from '../../../../../Widget'; + +type Props = {| + selectedRows: { [key: string]: boolean }, + disabled?: boolean, + onUpdateList: (disableClearSelections?: boolean) => void, + removeRowsFromSelection: (rows: Array) => void, +|} + +const styles = { + container: { + fontSize: '14px', + lineHeight: '19px', + color: colors.grey900, + display: 'flex', + flexDirection: 'column', + gap: '8px', + }, + errorContainer: { + padding: '0px 20px', + }, +}; + +const CompleteActionPlain = ({ + selectedRows, + disabled, + removeRowsFromSelection, + onUpdateList, + classes, +}) => { + const [isCompleteDialogOpen, setIsCompleteDialogOpen] = useState(false); + const [openAccordion, setOpenAccordion] = useState(false); + const { + eventCounts, + isLoading, + isCompletingEvents, + onCompleteEvents, + validationError, + } = useBulkCompleteEvents({ + selectedRows, + isCompleteDialogOpen, + setIsCompleteDialogOpen, + removeRowsFromSelection, + onUpdateList, + }); + + return ( + <> + + + + + {isCompleteDialogOpen && eventCounts && !validationError && ( + setIsCompleteDialogOpen(false)} + dataTest={'bulk-complete-events-dialog'} + > + + {i18n.t('Complete events')} + + + + + {eventCounts.active > 0 ? + i18n.t('Are you sure you want to complete all active events in selection?') + : + i18n.t('There are no active events to complete in the current selection.') + } + + + + + + + + + + + + + )} + + {isCompleteDialogOpen && validationError && ( + setIsCompleteDialogOpen(false)} + dataTest={'bulk-complete-events-dialog'} + > + + {i18n.t('Error completing events')} + + + + + {i18n.t('There was an error completing the events.')} + + setOpenAccordion(true)} + onClose={() => setOpenAccordion(false)} + borderless + header={i18n.t('Details (Advanced)')} + > + +
    + {validationError?.validationReport?.errorReports ? + validationError.validationReport.errorReports.map(errorReport => ( +
  • + {errorReport?.message} +
  • + )) : ( +
  • + {i18n.t('An unknown error occurred.')} +
  • + ) + } +
+
+
+
+
+ + + + + + + +
+ )} + + ); +}; + +export const CompleteAction: ComponentType<$Diff> = withStyles(styles)(CompleteActionPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js new file mode 100644 index 0000000000..5c91e35cd7 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js @@ -0,0 +1,141 @@ +// @flow +import { useCallback, useEffect, useMemo } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { useMutation } from 'react-query'; +import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; +import { useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; +import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; +import { FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; + +type Props = {| + selectedRows: { [key: string]: boolean }, + isCompleteDialogOpen: boolean, + setIsCompleteDialogOpen: (isCompleteDialogOpen: boolean) => void, + onUpdateList: (disableClearSelection?: boolean) => void, + removeRowsFromSelection: (rows: Array) => void, +|} + +export const useBulkCompleteEvents = ({ + selectedRows, + isCompleteDialogOpen, + setIsCompleteDialogOpen, + removeRowsFromSelection, + onUpdateList, +}: Props) => { + const { serverVersion: { minor } } = useConfig(); + const dataEngine = useDataEngine(); + const { show: showAlert } = useAlert( + ({ message }) => message, + { critical: true }, + ); + + const { data: events, isLoading } = useApiDataQuery( + ['WorkingLists', 'BulkActionBar', 'CompleteAction', 'Events', selectedRows], + { + resource: 'tracker/events', + params: () => { + const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); + const filterQueryParam: string = supportForFeature ? 'events' : 'event'; + + return ({ + fields: '*,!completedAt,!completedBy,!dataValues,!relationships', + [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), + }); + }, + }, + { + enabled: Object.keys(selectedRows).length > 0 && isCompleteDialogOpen, + staleTime: 0, + cacheTime: 0, + select: (data: any) => { + const apiEvents = handleAPIResponse(REQUESTED_ENTITIES.events, data); + + return apiEvents.reduce((acc, event) => { + if (event.status === 'ACTIVE') { + acc.activeEvents.push(event); + } else { + acc.completedEvents.push(event); + } + + return acc; + }, { activeEvents: [], completedEvents: [] }); + }, + }, + ); + + const { + mutate: completeEvents, + isLoading: isCompletingEvents, + data: validationError, + error, + reset: resetCompleteEvents, + } = useMutation( + ({ payload }: any) => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=UPDATE&atomicMode=OBJECT', + type: 'create', + data: { + events: payload, + }, + }), + { + onError: () => { + showAlert({ message: i18n.t('An error occurred while completing events') }); + }, + onSuccess: (response, { payload }: any) => { + const errorReports = response?.validationReport?.errorReports; + if (errorReports && errorReports.length) { + const eventIds = payload.map(event => event.event); + const validEventIds = eventIds + .filter(eventId => !errorReports + .find(errorReport => errorReport.uid === eventId), + ); + + removeRowsFromSelection(validEventIds); + onUpdateList(true); + } else { + onUpdateList(); + setIsCompleteDialogOpen(false); + } + }, + }, + ); + + const onCompleteEvents = useCallback(() => { + if (!events) { + return; + } + + const serverPayload = events.activeEvents.map(event => ({ + ...event, + status: 'COMPLETED', + })); + + completeEvents({ payload: serverPayload }); + }, [completeEvents, events]); + + const eventCounts = useMemo(() => { + if (!events) { + return null; + } + + return { + active: events.activeEvents.length, + completed: events.completedEvents.length, + }; + }, [events]); + + useEffect(() => { + if (!isCompleteDialogOpen) { + resetCompleteEvents(); + } + }, [isCompleteDialogOpen, resetCompleteEvents]); + + return { + eventCounts, + error, + validationError, + onCompleteEvents, + isCompletingEvents, + isLoading, + }; +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js new file mode 100644 index 0000000000..e4d1df4b63 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js @@ -0,0 +1,102 @@ +// @flow + +import React, { useState } from 'react'; +import log from 'loglevel'; +import i18n from '@dhis2/d2-i18n'; +import { Button, ButtonStrip, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; +import { useMutation } from 'react-query'; +import { useAlert, useDataEngine } from '@dhis2/app-runtime'; +import { errorCreator } from '../../../../../../../capture-core-utils'; +import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; + +type Props = { + selectedRows: { [id: string]: boolean }, + disabled?: boolean, + onUpdateList: () => void, +} + +export const DeleteAction = ({ + selectedRows, + disabled, + onUpdateList, +}: Props) => { + const [isModalOpen, setIsModalOpen] = useState(false); + const dataEngine = useDataEngine(); + const { show: showAlert } = useAlert( + ({ message }) => message, + { critical: true }, + ); + + const { mutate: deleteEvents, isLoading } = useMutation( + () => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=DELETE', + type: 'create', + data: { + events: Object + .keys(selectedRows) + .map(id => ({ event: id })), + }, + }), + { + onError: (error) => { + log.error(errorCreator('An error occurred while deleting the events')({ error })); + showAlert({ message: i18n.t('An error occurred while deleting the events') }); + }, + onSuccess: () => { + onUpdateList(); + setIsModalOpen(false); + }, + }, + ); + + return ( + <> + + + + + {isModalOpen && ( + setIsModalOpen(false)} + dataTest={'bulk-delete-events-dialog'} + > + + {i18n.t('Delete events')} + + + + {i18n.t('This cannot be undone. Are you sure you want to delete the selected events?')} + + + + + + + + + + )} + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js new file mode 100644 index 0000000000..d90e5aa2e7 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js @@ -0,0 +1,4 @@ +// @flow + +export { DeleteAction } from './DeleteAction/DeleteAction'; +export { CompleteAction } from './CompleteAction/CompleteAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js new file mode 100644 index 0000000000..5311ca7780 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js @@ -0,0 +1,47 @@ +// @flow +import React from 'react'; +import { BulkActionBar } from '../../WorkingListsBase/BulkActionBar'; +import { CompleteAction, DeleteAction } from './Actions'; +import type { ProgramStage } from '../../../../metaData'; + +type Props = {| + selectedRows: { [key: string]: boolean }, + onClearSelection: () => void, + stage: ProgramStage, + onUpdateList: (disableClearSelection?: boolean) => void, + removeRowsFromSelection: (rows: Array) => void, +|} + +export const EventBulkActions = ({ + selectedRows, + stage, + onClearSelection, + removeRowsFromSelection, + onUpdateList, +}: Props) => { + const selectedRowsCount = Object.keys(selectedRows).length; + + if (!selectedRowsCount) { + return null; + } + + return ( + + + + + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js new file mode 100644 index 0000000000..492ab82c49 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EventBulkActions } from './EventBulkActions'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js index 071103a706..cb10ad31d8 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js @@ -62,7 +62,7 @@ export const TeiWorkingListsReduxProvider = ({ } }, [selectedTemplateId, viewPreloaded, currentTemplateId, onSelectTemplate]); - const onSelectListRow = useCallback(({ id }) => { + const onClickListRow = useCallback(({ id }) => { const record = records[id]; const orgUnitIdParameter = orgUnitId || record.orgUnit?.id || record.programOwner; @@ -109,7 +109,7 @@ export const TeiWorkingListsReduxProvider = ({ currentTemplateId={currentTemplateId} viewPreloaded={viewPreloaded} templateSharingType={templateSharingType} - onSelectListRow={onSelectListRow} + onClickListRow={onClickListRow} onLoadTemplates={onLoadTemplates} program={program} programStageId={programStage} diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js index f4637bf5cf..0b9a66d3b4 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js @@ -66,7 +66,7 @@ export type TeiWorkingListsReduxOutputProps = {| onClearFilters: ClearFilters, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js index b59d0233cd..24f6b4d333 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js @@ -1,14 +1,14 @@ // @flow -import React, { useCallback, useMemo, useEffect, useRef } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import type { Props } from './teiWorkingListsSetup.types'; import { WorkingListsBase } from '../../WorkingListsBase'; import { useDefaultColumnConfig, - useStaticTemplates, useFiltersOnly, - useProgramStageFilters, useInjectDataFetchingMetaToLoadList, useInjectDataFetchingMetaToUpdateList, + useProgramStageFilters, + useStaticTemplates, } from './hooks'; import { useColumns, useDataSource, useViewHasTemplateChanges } from '../../WorkingListsCommon'; import type { TeiWorkingListsColumnConfigs } from '../types'; @@ -55,6 +55,8 @@ export const TeiWorkingListsSetup = ({ onUpdateTemplate, onDeleteTemplate, forceUpdateOnMount, + customUpdateTrigger, + bulkActionBarComponent, ...passOnProps }: Props) => { const prevProgramStageId = useRef(programStageId); @@ -189,6 +191,7 @@ export const TeiWorkingListsSetup = ({ {...passOnProps} forceUpdateOnMount={forceUpdateOnMount} currentTemplate={useCurrentTemplate(templates, currentTemplateId)} + customUpdateTrigger={customUpdateTrigger} templates={templates} columns={columns} onAddTemplate={injectArgumentsForAddTemplate} @@ -217,6 +220,7 @@ export const TeiWorkingListsSetup = ({ filters={filters} sortById={sortById} sortByDirection={sortByDirection} + bulkActionBarComponent={bulkActionBarComponent} /> ); }; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js index 963367d643..426ab63241 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js @@ -12,6 +12,7 @@ import type { } from '../../WorkingListsCommon'; import type { FiltersData, WorkingListTemplates, SetTemplateSharingSettings } from '../../WorkingListsBase'; import type { LoadTeiView, TeiRecords } from '../types'; +import type { TrackerWorkingListsViewMenuSetupOutputProps } from '../ViewMenuSetup/TrackerWorkingListsViewMenuSetup.types'; type ExtractedProps = $ReadOnly<{| customColumnOrder?: CustomColumnOrder, @@ -35,7 +36,7 @@ type ExtractedProps = $ReadOnly<{| |}>; export type Props = $ReadOnly<{| - ...TeiWorkingListsReduxOutputProps, + ...TrackerWorkingListsViewMenuSetupOutputProps, ...ExtractedProps, |}>; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js new file mode 100644 index 0000000000..73543ad15a --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js @@ -0,0 +1,239 @@ +// @flow + +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core'; +import React, { type ComponentType, useState } from 'react'; +import { + Button, + ButtonStrip, + Checkbox, + CircularLoader, + colors, + Modal, + ModalActions, + ModalContent, + ModalTitle, +} from '@dhis2/ui'; +import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; +import { useCompleteBulkEnrollments } from './hooks/useCompleteBulkEnrollments'; +import { Widget } from '../../../../../Widget'; +import type { ProgramStage } from '../../../../../../metaData'; + +type Props = { + selectedRows: { [id: string]: any }, + programId: string, + stages: Map, + programDataWriteAccess: boolean, + onUpdateList: (disableClearSelections?: boolean) => void, + removeRowsFromSelection: (rows: Array) => void, +}; + +const styles = { + container: { + fontSize: '14px', + lineHeight: '19px', + color: colors.grey900, + display: 'flex', + flexDirection: 'column', + gap: '8px', + }, + spinner: { + display: 'flex', + justifyContent: 'center', + margin: '20px 0', + }, + errorContainer: { + padding: '0px 20px', + }, +}; + +const CompleteActionPlain = ({ + selectedRows, + programId, + stages, + programDataWriteAccess, + onUpdateList, + removeRowsFromSelection, + classes, +}) => { + const [modalIsOpen, setModalIsOpen] = useState(false); + const [completeEvents, setCompleteEvents] = useState(true); + const [openAccordion, setOpenAccordion] = useState(false); + const { + completeEnrollments, + enrollmentCounts, + isLoading, + validationError, + isCompleting, + hasPartiallyUploadedEnrollments, + isError: errorFetchingTrackedEntities, + } = useCompleteBulkEnrollments({ + selectedRows, + programId, + modalIsOpen, + stages, + onUpdateList, + removeRowsFromSelection, + }); + + const ModalTextContent = () => { + // If the data is still loading, show a spinner + if (!enrollmentCounts || isLoading) { + return ( +
+ +
+ ); + } + + // If there was an error importing the data, show an error message + if (validationError) { + const errors = (validationError: any)?.details?.validationReport?.errorReports; + return ( +
+ + {hasPartiallyUploadedEnrollments ? + i18n.t('Some enrollments were completed successfully, but there was an error while completing the rest. Please see the details below.') : + i18n.t('There was an error while completing the enrollments. Please see the details below.') + } + + + setOpenAccordion(true)} + onClose={() => setOpenAccordion(false)} + borderless + header={i18n.t('Details (Advanced)')} + > + +
    + {errors ? errors.map(errorReport => ( +
  • + {errorReport?.message} +
  • + )) : ( +
  • + {i18n.t('An unknown error occurred.')} +
  • + )} +
+
+
+
+ ); + } + + if (errorFetchingTrackedEntities) { + return ( +
+ {i18n.t('An unexpected error occurred while fetching the enrollments. Please try again.')} +
+ ); + } + + // If there are no active enrollments, show a message and disable the complete button + if (enrollmentCounts.active === 0) { + return ( +
+ {i18n.t('There are currently no active enrollments in the selection. All enrollments are already completed or cancelled.')} +
+ ); + } + + return ( +
+ {i18n.t('This action will complete {{count}} active enrollment in your selection.', + { + count: enrollmentCounts.active, + defaultValue: 'This action will complete {{count}} active enrollment in your selection.', + defaultValue_plural: 'This action will complete {{count}} active enrollments in your selection.', + }) + } + + {' '} + + {enrollmentCounts.completed > 0 && + i18n.t('{{count}} enrollment already marked as completed will not be changed.', { + count: enrollmentCounts.completed, + defaultValue: '{{count}} enrollment already marked as completed will not be changed.', + defaultValue_plural: '{{count}} enrollments already marked as completed will not be changed.', + }) + } + + setCompleteEvents(prevState => !prevState)} + /> + +
+ ); + }; + + return ( + <> + + + + + {modalIsOpen && ( + setModalIsOpen(false)} + loading={isLoading} + dataTest={'bulk-complete-enrollments-dialog'} + > + + {validationError ? i18n.t('Error completing enrollments') + : i18n.t('Complete enrollments')} + + + + + + + + + + {!validationError && ( + + + + )} + + + + )} + + ); +}; + +export const CompleteAction: ComponentType<$Diff> = withStyles(styles)(CompleteActionPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js new file mode 100644 index 0000000000..a1bcbf350d --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js @@ -0,0 +1,267 @@ +// @flow + +import { useEffect, useMemo } from 'react'; +import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; +import { useMutation, useQueryClient } from 'react-query'; +import i18n from '@dhis2/d2-i18n'; +import log from 'loglevel'; +import { ReactQueryAppNamespace, useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; +import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; +import { errorCreator, FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; +import type { ProgramStage } from '../../../../../../../metaData'; + +type Props = { + selectedRows: { [id: string]: any }, + programId: string, + stages: Map, + modalIsOpen: boolean, + onUpdateList: (disableClearSelections?: boolean) => void, + removeRowsFromSelection: (rows: Array) => void, +} + +const validateEnrollments = async ({ dataEngine, enrollments }) => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', + type: 'create', + data: () => ({ enrollments }), +}); + +const importValidEnrollments = async ({ dataEngine, enrollments }) => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', + type: 'create', + data: () => ({ enrollments }), +}); + +const formatServerPayload = (trackedEntities, completeEvents, stages) => { + const enrollments = trackedEntities?.activeEnrollments ?? []; + let updatedEnrollments; + + if (completeEvents) { + updatedEnrollments = enrollments.map(enrollment => ({ + ...enrollment, + status: 'COMPLETED', + events: enrollment.events + .filter((event) => { + const access = stages.get(event.programStage)?.access?.data?.write; + const isEventActive = event.status === 'ACTIVE'; + return access && isEventActive; + }) + .map(event => ({ ...event, status: 'COMPLETED' })), + })); + } else { + updatedEnrollments = enrollments.map(enrollment => ({ + ...enrollment, + status: 'COMPLETED', + events: [], + })); + } + + return updatedEnrollments; +}; + +const filterValidEnrollments = (enrollments, errors) => { + const invalidEnrollments = new Set(); + + errors.forEach((apiErrorMessage) => { + if (apiErrorMessage.trackerType === 'ENROLLMENT') { + invalidEnrollments.add(apiErrorMessage.uid); + } else if (apiErrorMessage.trackerType === 'EVENT') { + const invalidEnrollment = enrollments.find(enrollment => + enrollment.events.some(event => event.event === apiErrorMessage.uid), + ); + + if (invalidEnrollment) { + invalidEnrollments.add(invalidEnrollment.enrollment); + } + } + }); + + return enrollments.filter( + enrollment => !invalidEnrollments.has(enrollment.enrollment), + ); +}; + + +export const useCompleteBulkEnrollments = ({ + selectedRows, + programId, + stages, + modalIsOpen, + removeRowsFromSelection, + onUpdateList, +}: Props) => { + const { serverVersion: { minor } } = useConfig(); + const dataEngine = useDataEngine(); + const queryClient = useQueryClient(); + const { show: showAlert } = useAlert( + ({ message }) => message, + { critical: true }, + ); + + const removeQueries = () => { + queryClient.removeQueries( + [ + ReactQueryAppNamespace, + 'WorkingLists', + 'BulkActionBar', + 'CompleteAction', + 'trackedEntities', + ], + ); + }; + + const { + data: trackedEntities, + isError: isTrackedEntitiesError, + isLoading: isFetchingTrackedEntities, + } = useApiDataQuery( + ['WorkingLists', 'BulkActionBar', 'CompleteAction', 'trackedEntities', selectedRows], + { + resource: 'tracker/trackedEntities', + params: () => { + const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); + const filterQueryParam: string = supportForFeature ? 'trackedEntities' : 'trackedEntity'; + + return ({ + program: programId, + fields: 'trackedEntity,enrollments[*,!attributes,!completedBy,!completedAt,!relationships,events[*,!dataValues,!completedAt,!completedBy,!relationships]]', + [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), + }); + }, + }, + { + enabled: modalIsOpen && Object.keys(selectedRows).length > 0, + select: (data: any) => { + const apiTrackedEntities = handleAPIResponse(REQUESTED_ENTITIES.trackedEntities, data); + if (!apiTrackedEntities) return null; + + const { activeEnrollments, completedEnrollments } = apiTrackedEntities + .flatMap(trackedEntity => trackedEntity.enrollments) + .reduce((acc, enrollment) => { + if (enrollment.status === 'ACTIVE') { + acc.activeEnrollments.push(enrollment); + } else { + acc.completedEnrollments.push(enrollment); + } + + return acc; + }, { activeEnrollments: [], completedEnrollments: [] }); + + return { + activeEnrollments, + completedEnrollments, + }; + }, + }, + ); + + const { + mutate: importEnrollments, + isLoading: isImportingEnrollments, + } = useMutation( + ({ enrollments }: any) => importValidEnrollments({ dataEngine, enrollments }), + { + onSuccess: () => { + onUpdateList(); + removeQueries(); + }, + onError: (serverResponse, variables) => { + removeQueries(); + showAlert({ message: i18n.t('An error occurred when completing the enrollments') }); + log.error( + errorCreator('An error occurred when completing enrollments')({ + serverResponse, + variables, + }), + ); + }, + }, + ); + + const { + mutate: importPartialEnrollments, + isLoading: isImportingPartialEnrollments, + isSuccess: hasPartiallyUploadedEnrollments, + } = useMutation( + ({ enrollments }: any) => importValidEnrollments({ dataEngine, enrollments }), + { + onSuccess: (serverResponse, { enrollments }) => { + const enrollmentIds = enrollments.map(enrollment => enrollment.trackedEntity); + removeRowsFromSelection(enrollmentIds); + removeQueries(); + onUpdateList(true); + }, + onError: (serverResponse, variables) => { + showAlert({ message: i18n.t('An error occurred when completing the enrollments') }); + log.error( + errorCreator('An error occurred when completing enrollments')({ + serverResponse, + variables, + }), + ); + }, + }, + ); + + const { + mutate: onValidateEnrollments, + isLoading: isCompletingEnrollments, + error: validationError, + reset: resetCompleteEnrollments, + } = useMutation( + ({ enrollments }: any) => validateEnrollments({ + dataEngine, + enrollments, + }), + { + onSuccess: (serverResponse: any, { enrollments }: any) => { + importEnrollments({ enrollments }); + }, + onError: (serverResponse: any, { enrollments }: any) => { + const errors = serverResponse?.details?.validationReport?.errorReports; + if (!errors) { + log.error( + errorCreator('An unknown error occurred when completing enrollments', + )({ + serverResponse, + enrollments, + })); + showAlert({ message: i18n.t('An unknown error occurred when completing enrollments') }); + return; + } + const validEnrollments = filterValidEnrollments(enrollments, errors); + + if (validEnrollments.length === 0) { + return; + } + + importPartialEnrollments({ enrollments: validEnrollments }); + }, + }, + ); + + const enrollmentCounts = useMemo(() => ({ + active: trackedEntities?.activeEnrollments?.length ?? 0, + completed: trackedEntities?.completedEnrollments?.length ?? 0, + }), [trackedEntities]); + + useEffect(() => { + if (!modalIsOpen) { + resetCompleteEnrollments(); + } + }, [modalIsOpen, resetCompleteEnrollments]); + + const onStartCompleteEnrollments = ({ completeEvents }: { completeEvents: boolean }) => { + const enrollments = formatServerPayload(trackedEntities, completeEvents, stages); + onValidateEnrollments({ completeEvents, enrollments }); + }; + + return { + completeEnrollments: onStartCompleteEnrollments, + enrollmentCounts, + isLoading: isFetchingTrackedEntities, + isError: isTrackedEntitiesError, + validationError, + isCompleting: isImportingEnrollments || isImportingPartialEnrollments || isCompletingEnrollments, + hasPartiallyUploadedEnrollments, + }; +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js new file mode 100644 index 0000000000..0c51a6978f --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js @@ -0,0 +1,3 @@ +// @flow + +export { CompleteAction } from './CompleteAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js new file mode 100644 index 0000000000..7e0a4bcb68 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js @@ -0,0 +1,56 @@ +// @flow +import React, { useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { Button } from '@dhis2/ui'; +import { useAuthority } from '../../../../../../utils/userInfo/useAuthority'; +import { EnrollmentDeleteModal } from './EnrollmentDeleteModal'; +import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; + +type Props = { + selectedRows: { [id: string]: boolean }, + programDataWriteAccess: boolean, + programId: string, + onUpdateList: () => void, +} + +const CASCADE_DELETE_TEI_AUTHORITY = 'F_ENROLLMENT_CASCADE_DELETE'; + +export const DeleteEnrollmentsAction = ({ + selectedRows, + programDataWriteAccess, + programId, + onUpdateList, +}: Props) => { + const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); + const { hasAuthority } = useAuthority({ authority: CASCADE_DELETE_TEI_AUTHORITY }); + + if (!hasAuthority) { + return null; + } + + return ( + <> + + + + + {isDeleteDialogOpen && ( + + )} + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js new file mode 100644 index 0000000000..4c1d5f255e --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js @@ -0,0 +1,80 @@ +// @flow +import type { ComponentType } from 'react'; +import React from 'react'; +import cx from 'classnames'; +import { withStyles } from '@material-ui/core'; +import { Checkbox } from '@dhis2/ui'; + +type Props = { + label: string, + checked: boolean, + disabled?: boolean, + id: string, + onChange: (status: string) => void, + dataTest?: string, +} + +const styles = { + checkboxButton: { + // Reset default browser styles + appearance: 'none', + background: 'none', + font: 'inherit', + cursor: 'pointer', + outline: 'inherit', + + // Custom styles + display: 'flex', + alignItems: 'center', + width: '100%', + padding: '16px', + border: '2px solid #E2E8F0', + borderRadius: '6px', + marginBottom: '8px', + transition: 'all 0.2s', + textAlign: 'left', + backgroundColor: 'white', + '&:hover': { + backgroundColor: '#F7FAFC', + }, + '&.checked': { + borderColor: '#38A169', + }, + '&.disabled': { + borderColor: '#E2E8F0', + backgroundColor: '#F7FAFC', + cursor: 'not-allowed', + }, + }, +}; + +const CustomCheckboxPlain = ({ + checked, + id, + onChange, + label, + disabled, + dataTest, + classes, +}) => ( + +); + +export const CustomCheckbox: ComponentType<$Diff> = withStyles(styles)(CustomCheckboxPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js new file mode 100644 index 0000000000..e981c34310 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js @@ -0,0 +1,3 @@ +// @flow + +export { CustomCheckbox } from './CustomCheckbox'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js new file mode 100644 index 0000000000..4d00490f6e --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js @@ -0,0 +1,188 @@ +// @flow +import React from 'react'; +import { withStyles } from '@material-ui/core'; +import { Button, ButtonStrip, CircularLoader, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { useDeleteEnrollments } from '../hooks/useDeleteEnrollments'; +import { CustomCheckbox } from './CustomCheckbox'; + +type Props = { + selectedRows: { [id: string]: boolean }, + programId: string, + onUpdateList: () => void, + setIsDeleteDialogOpen: (open: boolean) => void, + classes: Object, +} + +const styles = { + modalContent: { + display: 'flex', + flexDirection: 'column', + gap: '10px', + fontSize: '16px', + }, + loadingContainer: { + display: 'flex', + justifyContent: 'center', + }, +}; + +const EnrollmentDeleteModalPlain = ({ + selectedRows, + programId, + onUpdateList, + setIsDeleteDialogOpen, + classes, +}: Props) => { + const { + deleteEnrollments, + isDeletingEnrollments, + enrollmentCounts, + isLoadingEnrollments, + statusToDelete, + updateStatusToDelete, + numberOfEnrollmentsToDelete, + isEnrollmentsError, + } = useDeleteEnrollments({ + selectedRows, + programId, + onUpdateList, + setIsDeleteDialogOpen, + }); + + if (isEnrollmentsError) { + return ( + setIsDeleteDialogOpen(false)} + small + > + + {i18n.t('Delete selected enrollments')} + + + +
+ {i18n.t('An error occurred while loading the selected enrollments. Please try again.')} +
+
+ + + + + + +
+ ); + } + + if (isLoadingEnrollments || !enrollmentCounts) { + return ( + setIsDeleteDialogOpen(false)} + > + + {i18n.t('Delete selected enrollments')} + + + + + + + + + + + + + + + ); + } + + return ( + setIsDeleteDialogOpen(false)} + dataTest={'bulk-delete-enrollments-dialog'} + > + + {i18n.t('Delete selected enrollments')} + + + +
+
+ {i18n.t('This action will permanently delete the selected enrollments, including all associated data and events.')} +
+ +
+ {i18n.t('Please select which enrollment statuses you want to delete:')} +
+ +
+ + + + + +
+
+
+ + + + + + + + +
+ ); +}; + +export const EnrollmentDeleteModal = withStyles(styles)(EnrollmentDeleteModalPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js new file mode 100644 index 0000000000..7dbb8bad62 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EnrollmentDeleteModal } from './EnrollmentDeleteModal'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js new file mode 100644 index 0000000000..fa71ff5eb4 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js @@ -0,0 +1,159 @@ +// @flow +import { useCallback, useMemo, useState } from 'react'; +import log from 'loglevel'; +import i18n from '@dhis2/d2-i18n'; +import { useMutation, useQueryClient } from 'react-query'; +import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; +import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; +import { ReactQueryAppNamespace, useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; +import { errorCreator, FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; + +type Props = { + selectedRows: { [id: string]: boolean }, + programId: string, + onUpdateList: () => void, + setIsDeleteDialogOpen: (open: boolean) => void, +} + +const QueryKey = ['WorkingLists', 'BulkActionBar', 'DeleteEnrollmentsAction', 'trackedEntities']; + +export const useDeleteEnrollments = ({ + selectedRows, + programId, + onUpdateList, + setIsDeleteDialogOpen, +}: Props) => { + const { serverVersion: { minor } } = useConfig(); + const queryClient = useQueryClient(); + const [statusToDelete, setStatusToDelete] = useState({ + active: true, + completed: true, + cancelled: true, + }); + const dataEngine = useDataEngine(); + const { show: showAlert } = useAlert( + ({ message }) => message, + { critical: true }, + ); + + const updateStatusToDelete = useCallback((status: string) => { + setStatusToDelete(prevStatus => ({ + ...prevStatus, + [status]: !prevStatus[status], + })); + }, []); + + const { + data: enrollments, + isLoading: isLoadingEnrollments, + isError: isEnrollmentsError, + } = useApiDataQuery( + [...QueryKey, selectedRows], + { + resource: 'tracker/trackedEntities', + params: () => { + const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); + const filterQueryParam: string = supportForFeature ? 'trackedEntities' : 'trackedEntity'; + + return ({ + fields: 'trackedEntity,enrollments[enrollment,program,status]', + [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), + program: programId, + }); + }, + }, + { + enabled: Object.keys(selectedRows).length > 0, + select: (data: any) => { + const apiTrackedEntities = handleAPIResponse(REQUESTED_ENTITIES.trackedEntities, data); + if (!apiTrackedEntities) return []; + + return apiTrackedEntities + .flatMap(apiTrackedEntity => apiTrackedEntity.enrollments); + }, + }, + ); + + const { mutate: deleteEnrollments, isLoading: isDeletingEnrollments } = useMutation( + () => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=DELETE', + type: 'create', + data: { + enrollments: enrollments + // $FlowFixMe - business logic dictates that enrollments is not undefined at this point + .filter(({ status }) => status && statusToDelete[status.toLowerCase()]) + .map(({ enrollment }) => ({ enrollment })), + }, + }), + { + onError: (error) => { + log.error(errorCreator('An error occurred when deleting enrollments')({ error })); + showAlert({ message: i18n.t('An error occurred when deleting enrollments') }); + }, + onSuccess: () => { + queryClient.removeQueries([ReactQueryAppNamespace, ...QueryKey]); + onUpdateList(); + setIsDeleteDialogOpen(false); + }, + }, + ); + + const enrollmentCounts = useMemo(() => { + if (!enrollments) { + return null; + } + + const { + activeEnrollments, + completedEnrollments, + cancelledEnrollments, + } = enrollments.reduce((acc, enrollment) => { + if (enrollment.status === 'ACTIVE') { + acc.activeEnrollments += 1; + } else if (enrollment.status === 'CANCELLED') { + acc.cancelledEnrollments += 1; + } else { + acc.completedEnrollments += 1; + } + + return acc; + }, { activeEnrollments: 0, completedEnrollments: 0, cancelledEnrollments: 0 }); + + return { + active: activeEnrollments, + completed: completedEnrollments, + cancelled: cancelledEnrollments, + total: enrollments.length, + }; + }, [enrollments]); + + const numberOfEnrollmentsToDelete = useMemo(() => { + if (!enrollments || !enrollmentCounts) { + return 0; + } + + let total = 0; + if (statusToDelete.active) { + total += enrollmentCounts.active; + } + if (statusToDelete.completed) { + total += enrollmentCounts.completed; + } + if (statusToDelete.cancelled) { + total += enrollmentCounts.cancelled; + } + + return total; + }, [enrollments, enrollmentCounts, statusToDelete]); + + return { + deleteEnrollments, + isDeletingEnrollments, + isLoadingEnrollments, + isEnrollmentsError, + enrollmentCounts, + statusToDelete, + updateStatusToDelete, + numberOfEnrollmentsToDelete, + }; +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js new file mode 100644 index 0000000000..801079a513 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js @@ -0,0 +1,3 @@ +// @flow + +export { DeleteEnrollmentsAction } from './DeleteEnrollmentsAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js new file mode 100644 index 0000000000..12ffed180b --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js @@ -0,0 +1,87 @@ +// @flow +import React, { useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; +import { Button, ButtonStrip, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; +import { useAuthority } from '../../../../../../utils/userInfo/useAuthority'; +import { useCascadeDeleteTei } from './hooks/useCascadeDeleteTei'; + +type Props = { + selectedRows: { [id: string]: boolean }, + selectedRowsCount: number, + trackedEntityName: string, + onUpdateList: () => void, +} + +const CASCADE_DELETE_TEI_AUTHORITY = 'F_TEI_CASCADE_DELETE'; + + +// TODO - Add program and TEType access checks before adding action to prod +export const DeleteTeiAction = ({ + selectedRows, + selectedRowsCount, + trackedEntityName, + onUpdateList, +}: Props) => { + const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); + const { hasAuthority } = useAuthority({ authority: CASCADE_DELETE_TEI_AUTHORITY }); + const { deleteTeis, isLoading } = useCascadeDeleteTei({ + selectedRows, + setIsDeleteDialogOpen, + onUpdateList, + }); + + if (!hasAuthority) { + return null; + } + + return ( + <> + + + {isDeleteDialogOpen && ( + setIsDeleteDialogOpen(false)} + > + + {i18n.t('Delete {{count}} {{ trackedEntityName }}', { + count: selectedRowsCount, + trackedEntityName: trackedEntityName.toLowerCase(), + defaultValue: 'Delete {{count}} {{ trackedEntityName }}', + defaultValue_plural: 'Delete {{count}} {{ trackedEntityName }}', + })} + + + + {i18n.t('Deleting records will also delete any associated enrollments and events. This cannot be undone. Are you sure you want to delete?')} + + + + + + + + + + )} + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js new file mode 100644 index 0000000000..1ae0862e9d --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js @@ -0,0 +1,51 @@ +// @flow +import log from 'loglevel'; +import i18n from '@dhis2/d2-i18n'; +import { useAlert, useDataEngine } from '@dhis2/app-runtime'; +import { useMutation } from 'react-query'; +import { errorCreator } from '../../../../../../../../capture-core-utils'; + +type Props = { + selectedRows: { [id: string]: boolean }, + setIsDeleteDialogOpen: (open: boolean) => void, + onUpdateList: () => void, +} + +export const useCascadeDeleteTei = ({ + selectedRows, + setIsDeleteDialogOpen, + onUpdateList, +}: Props) => { + const dataEngine = useDataEngine(); + const { show: showAlert } = useAlert( + ({ message }) => message, + { critical: true }, + ); + + const { mutate: deleteTeis, isLoading } = useMutation( + () => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=DELETE', + type: 'create', + data: { + trackedEntities: Object + .keys(selectedRows) + .map(id => ({ trackedEntity: id })), + }, + }), + { + onError: (error) => { + log.error(errorCreator('An error occurred while deleting the tracked entities')({ error })); + showAlert({ message: i18n.t('An error occurred while deleting the records') }); + }, + onSuccess: () => { + onUpdateList(); + setIsDeleteDialogOpen(false); + }, + }, + ); + + return { + deleteTeis, + isLoading, + }; +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js new file mode 100644 index 0000000000..e2522d77d4 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js @@ -0,0 +1,3 @@ +// @flow + +export { DeleteTeiAction } from './DeleteTeiAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js new file mode 100644 index 0000000000..d8e44d744b --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js @@ -0,0 +1,4 @@ +// @flow + +export { CompleteAction } from './CompleteAction'; +export { DeleteTeiAction } from './DeleteTeiAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js new file mode 100644 index 0000000000..2b2002ce53 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js @@ -0,0 +1,51 @@ +// @flow +import React from 'react'; +import { BulkActionBar } from '../../WorkingListsBase/BulkActionBar'; +import { CompleteAction } from './Actions'; +import type { Props } from './TrackedEntityBulkActions.types'; +import { DeleteEnrollmentsAction } from './Actions/DeleteEnrollmentsAction'; + +export const TrackedEntityBulkActionsComponent = ({ + selectedRows, + programId, + stages, + programDataWriteAccess, + onClearSelection, + onUpdateList, + removeRowsFromSelection, +}: Props) => { + const selectedRowsCount = Object.keys(selectedRows).length; + + if (!selectedRowsCount) { + return null; + } + + return ( + + + + + + {/* */} + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js new file mode 100644 index 0000000000..3cd769eb56 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js @@ -0,0 +1,40 @@ +// @flow +import React from 'react'; +import log from 'loglevel'; +import { EventBulkActions } from '../../EventWorkingListsCommon/EventBulkActions'; +import { TrackedEntityBulkActionsComponent } from './TrackedEntityBulkActions.component'; +import type { ContainerProps } from './TrackedEntityBulkActions.types'; +import { errorCreator } from '../../../../../capture-core-utils'; + +export const TrackedEntityBulkActions = ({ + programStageId, + stages, + programDataWriteAccess, + programId, + ...passOnProps +}: ContainerProps) => { + if (programStageId) { + const stage = stages.get(programStageId); + + if (!stage) { + log.error(errorCreator('Program stage not found')({ programStageId, stages })); + throw new Error('Program stage not found'); + } + + return ( + + ); + } + + return ( + + ); +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js new file mode 100644 index 0000000000..37f18324fa --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js @@ -0,0 +1,17 @@ +// @flow +import type { ProgramStage } from '../../../../metaData'; + +export type Props = {| + selectedRows: { [key: string]: boolean }, + programId: string, + stages: Map, + onClearSelection: () => void, + programDataWriteAccess: boolean, + onUpdateList: () => void, + removeRowsFromSelection: (rows: Array) => void, +|} + +export type ContainerProps = {| + ...Props, + programStageId: ?string, +|} diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js new file mode 100644 index 0000000000..47f38f1e9a --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js @@ -0,0 +1,3 @@ +// @flow + +export { TrackedEntityBulkActions } from './TrackedEntityBulkActions.container'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js index ba35786506..ca74b7a97c 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js @@ -1,5 +1,6 @@ // @flow -import React, { useState, useMemo, useCallback } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; +import { v4 as uuid } from 'uuid'; import { useSelector } from 'react-redux'; import { useDataEngine } from '@dhis2/app-runtime'; import { makeQuerySingleResource } from 'capture-core/utils/api'; @@ -11,15 +12,29 @@ import { DownloadDialog } from '../../WorkingListsCommon'; import { computeDownloadRequest } from './downloadRequest'; import { convertToClientConfig } from '../helpers/TEIFilters'; import { FEATURES, useFeature } from '../../../../../capture-core-utils'; +import { useSelectedRowsController } from '../../WorkingListsBase/BulkActionBar'; +import { TrackedEntityBulkActions } from '../TrackedEntityBulkActions'; export const TrackerWorkingListsViewMenuSetup = ({ onLoadView, onUpdateList, storeId, + program, programStageId, orgUnitId, + recordsOrder, ...passOnProps }: Props) => { + const [customUpdateTrigger, setCustomUpdateTrigger] = useState(); + const { + selectedRows, + clearSelection, + selectAllRows, + selectionInProgress, + toggleRowSelected, + allRowsAreSelected, + removeRowsFromSelection, + } = useSelectedRowsController({ recordIds: recordsOrder }); const hasCSVSupport = useFeature(FEATURES.trackedEntitiesCSV); const downloadRequest = useSelector( ({ workingLists }) => workingLists[storeId] && workingLists[storeId].currentRequest, @@ -87,15 +102,43 @@ export const TrackerWorkingListsViewMenuSetup = ({ [onUpdateList, storeId], ); + const handleCustomUpdateTrigger = useCallback((disableClearSelection?: boolean) => { + const id = uuid(); + setCustomUpdateTrigger(id); + !disableClearSelection && clearSelection(); + }, [clearSelection]); + + const TrackedEntityBulkActionsComponent = useMemo(() => ( + + ), [program, programStageId, selectedRows, clearSelection, handleCustomUpdateTrigger, removeRowsFromSelection]); + return ( <> void, + onSelectAll: (rows: Array) => void, + selectionInProgress: ?boolean, + bulkActionBarComponent: React$Element, +|}; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js new file mode 100644 index 0000000000..a100abb1f6 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js @@ -0,0 +1,50 @@ +// @flow +import React from 'react'; +import { Button, colors } from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core/styles'; +import type { ComponentProps } from './BulkActionBar.types'; + +const styles = { + container: { + background: colors.teal100, + height: '60px', + border: `2px solid ${colors.teal400}`, + width: '100%', + padding: '8px', + fontSize: '14px', + gap: '8px', + display: 'flex', + alignItems: 'center', + }, +}; + +export const BulkActionBarComponentPlain = ({ + selectedRowsCount, + onClearSelection, + children, + classes, +}: ComponentProps) => ( +
+ + {i18n.t('{{count}} selected', { count: selectedRowsCount })} + + + {children} + + +
+); + +export const BulkActionBarComponent = withStyles( + styles, +)(BulkActionBarComponentPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js new file mode 100644 index 0000000000..604e5133d2 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js @@ -0,0 +1,19 @@ +// @flow +import React from 'react'; +import { BulkActionBarComponent } from './BulkActionBar.component'; +import type { ContainerProps } from './BulkActionBar.types'; + +export const BulkActionBar = ({ + onClearSelection, + selectedRowsCount, + children, +}: ContainerProps) => ( + <> + + {children} + + +); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js new file mode 100644 index 0000000000..140806a1fe --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js @@ -0,0 +1,16 @@ +// @flow + +type SharedProps = {| + onClearSelection: () => void, + selectedRowsCount: number, + children: React$Node, +|} + +export type ContainerProps = {| + ...SharedProps, +|} + +export type ComponentProps = {| + ...SharedProps, + ...CssClasses, +|} diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js new file mode 100644 index 0000000000..41247da8ff --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js @@ -0,0 +1,3 @@ +// @flow + +export { useSelectedRowsController } from './useSelectedRowsController'; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js new file mode 100644 index 0000000000..bf7aff3de0 --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js @@ -0,0 +1,66 @@ +// @flow +import { useCallback, useMemo, useState } from 'react'; + +type Props = { + recordIds: ?Array, +} + +export const useSelectedRowsController = ({ recordIds }: Props) => { + const [selectedRows, setSelectedRows] = useState({}); + + const allRowsAreSelected = useMemo( + () => recordIds && recordIds.length > 0 && recordIds.every(rowId => selectedRows[rowId]), + [recordIds, selectedRows]); + + const toggleRowSelected = useCallback((rowId: string) => { + setSelectedRows((prevSelectedRows) => { + const newSelectedRows = { ...prevSelectedRows }; + if (newSelectedRows[rowId]) { + delete newSelectedRows[rowId]; + } else { + newSelectedRows[rowId] = true; + } + return newSelectedRows; + }); + }, []); + + const selectAllRows = useCallback((rows: Array) => { + if (allRowsAreSelected) { + setSelectedRows({}); + return; + } + + setSelectedRows(rows.reduce((acc, rowId) => { + acc[rowId] = true; + return acc; + }, {})); + }, [allRowsAreSelected]); + + const clearSelection = useCallback(() => { + setSelectedRows({}); + }, []); + + const selectionInProgress = useMemo( + () => Object.keys(selectedRows).length > 0, + [selectedRows]); + + const removeRowsFromSelection = useCallback((rows: Array) => { + setSelectedRows((prevSelectedRows) => { + const newSelectedRows = { ...prevSelectedRows }; + rows.forEach((rowId) => { + delete newSelectedRows[rowId]; + }); + return newSelectedRows; + }); + }, []); + + return { + selectedRows, + toggleRowSelected, + allRowsAreSelected, + selectAllRows, + selectionInProgress, + clearSelection, + removeRowsFromSelection, + }; +}; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js new file mode 100644 index 0000000000..f40a1d152b --- /dev/null +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js @@ -0,0 +1,4 @@ +// @flow + +export { BulkActionBar } from './BulkActionBar.container'; +export { useSelectedRowsController } from './hooks'; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js index 655b2b30ca..e1aafab6da 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js @@ -1,15 +1,18 @@ // @flow import React, { useMemo } from 'react'; -import { - ListViewBuilderContext, -} from '../../workingListsBase.context'; +import { ListViewBuilderContext } from '../../workingListsBase.context'; import type { Props } from './workingListsListViewBuilderContextProvider.types'; export const WorkingListsListViewBuilderContextProvider = ({ updating, updatingWithDialog, + selectedRows, + allRowsAreSelected, + selectionInProgress, dataSource, - onSelectListRow, + onClickListRow, + onRowSelect, + onSelectAll, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -21,13 +24,19 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, + bulkActionBarComponent, children, }: Props) => { const listViewBuilderContextData = useMemo(() => ({ updating, updatingWithDialog, dataSource, - onSelectListRow, + selectedRows, + allRowsAreSelected, + selectionInProgress, + onClickListRow, + onRowSelect, + onSelectAll, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -39,11 +48,17 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, + bulkActionBarComponent, }), [ updating, updatingWithDialog, dataSource, - onSelectListRow, + selectedRows, + allRowsAreSelected, + selectionInProgress, + onClickListRow, + onRowSelect, + onSelectAll, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -55,6 +70,7 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, + bulkActionBarComponent, ]); return ( diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js index 96db7de391..a82e67aab6 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js @@ -1,24 +1,24 @@ // @flow import type { - DataSource, - SelectRow, - Sort, - SetColumnOrder, - CustomRowMenuContents, - UpdateFilter, + ChangePage, + ChangeRowsPerPage, ClearFilter, + CustomRowMenuContents, + DataSource, RemoveFilter, SelectRestMenuItem, - ChangePage, - ChangeRowsPerPage, + SelectRow, + SetColumnOrder, + Sort, StickyFilters, + UpdateFilter, } from '../../../../ListView'; export type Props = $ReadOnly<{| updating: boolean, updatingWithDialog: boolean, dataSource?: DataSource, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSortList: Sort, onSetListColumnOrder: SetColumnOrder, customRowMenuContents?: CustomRowMenuContents, @@ -30,5 +30,11 @@ export type Props = $ReadOnly<{| onChangeRowsPerPage: ChangeRowsPerPage, stickyFilters?: StickyFilters, programStageId?: string, + onRowSelect: (id: string) => void, + onSelectAll: (rows: Array) => void, + selectedRows: { [key: string]: boolean }, + allRowsAreSelected: ?boolean, + selectionInProgress: ?boolean, + bulkActionBarComponent: React$Element, children: React$Node, |}>; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js index 5c43c5324f..2a6e4e6004 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js @@ -1,11 +1,11 @@ // @flow -import React, { useMemo, useRef, useEffect } from 'react'; +import React, { useEffect, useMemo, useRef } from 'react'; import { - WorkingListsManagerContextProvider, + WorkingListsListViewBuilderContextProvider, WorkingListsListViewConfigContextProvider, WorkingListsListViewLoaderContextProvider, WorkingListsListViewUpdaterContextProvider, - WorkingListsListViewBuilderContextProvider, + WorkingListsManagerContextProvider, } from './ContextProviders'; import { TemplatesLoader } from '../TemplatesLoader'; import type { Props } from './workingListsContextBuilder.types'; @@ -15,6 +15,9 @@ export const WorkingListsContextBuilder = (props: Props) => { const { templates: allTemplates, currentTemplate, + selectedRows, + selectionInProgress, + allRowsAreSelected, onSelectTemplate, onLoadView, loadViewError, @@ -33,7 +36,9 @@ export const WorkingListsContextBuilder = (props: Props) => { categories, loadedContext, dataSource, - onSelectListRow, + onClickListRow, + onRowSelect, + onSelectAll, sortById, sortByDirection, onSortList, @@ -54,6 +59,7 @@ export const WorkingListsContextBuilder = (props: Props) => { customUpdateTrigger, forceUpdateOnMount, programStageId, + bulkActionBarComponent, ...passOnProps } = props; @@ -125,10 +131,15 @@ export const WorkingListsContextBuilder = (props: Props) => { loadedOrgUnitId={loadedContextDefined.orgUnitId} > { onChangeRowsPerPage={onChangeRowsPerPage} stickyFilters={stickyFilters} programStageId={programStageId} + bulkActionBarComponent={bulkActionBarComponent} > { dirtyTemplates={!!dirtyTemplatesStateFirstRunRef.current} loadedProgramIdForTemplates={loadedProgramIdForTemplates} programStageId={programStageId} + selectionInProgress={selectionInProgress} /> diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js index 481cfb721c..e882b5910d 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js @@ -12,18 +12,18 @@ import type { UnloadingContext, UpdateList, UpdateTemplate, - WorkingListTemplates, - WorkingListTemplate, WorkingListsOutputProps, + WorkingListTemplate, + WorkingListTemplates, } from '../workingListsBase.types'; import type { ChangePage, ChangeRowsPerPage, ClearFilter, - RemoveFilter, - DataSource, CustomRowMenuContents, + DataSource, FiltersData, + RemoveFilter, SelectRestMenuItem, SelectRow, SetColumnOrder, @@ -56,7 +56,7 @@ type ExtractedProps = $ReadOnly<{| onDeleteTemplate?: DeleteTemplate, onLoadView: LoadView, onUpdateFilter: UpdateFilter, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, @@ -74,6 +74,7 @@ type ExtractedProps = $ReadOnly<{| updatingWithDialog: boolean, templates?: WorkingListTemplates, viewPreloaded?: boolean, + bulkActionBarComponent: React$Node, |}>; type OptionalExtractedProps = {| diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js index a5c7a86516..c33d6e6cb5 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js @@ -16,7 +16,11 @@ export const ListViewBuilder = ({ customListViewMenuContents, ...passOnProps }: const { dataSource, - onSelectListRow, + onClickListRow, + onRowSelect, + onSelectAll, + selectedRows, + allRowsAreSelected, onSortList, onSetListColumnOrder, stickyFilters, @@ -36,7 +40,11 @@ export const ListViewBuilder = ({ customListViewMenuContents, ...passOnProps }: {...passOnProps} {...passOnContext} dataSource={dataSource} - onSelectRow={onSelectListRow} + selectedRows={selectedRows} + allRowsAreSelected={allRowsAreSelected} + onClickListRow={onClickListRow} + onRowSelect={onRowSelect} + onSelectAll={onSelectAll} onSort={onSortList} onSetColumnOrder={onSetListColumnOrder} customMenuContents={customListViewMenuContents} diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js index 95ce24415b..b6b91b495d 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js @@ -54,6 +54,7 @@ type Props = { currentTemplateId: string, currentListIsModified: boolean, onSelectTemplate: Function, + selectionInProgress: boolean, classes: Object, }; @@ -63,6 +64,7 @@ const TemplateSelectorPlain = (props: Props) => { currentTemplateId, currentListIsModified, onSelectTemplate, + selectionInProgress, classes, } = props; @@ -111,6 +113,7 @@ const TemplateSelectorPlain = (props: Props) => { currentTemplateId={currentTemplateId} onSelectTemplate={onSelectTemplate} currentListIsModified={currentListIsModified} + disabled={selectionInProgress} />
); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js index 238423ef2c..81ca6c10a1 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js @@ -15,6 +15,7 @@ type Props = { currentTemplateId: string, onSelectTemplate: Function, maxCharacters?: number, + disabled?: boolean, }; export const TemplateSelectorChip = (props: Props) => { @@ -22,14 +23,18 @@ export const TemplateSelectorChip = (props: Props) => { template, currentTemplateId, onSelectTemplate, + disabled, maxCharacters = 30, ...passOnProps } = props; const { name, id } = template; const selectTemplateHandler = React.useCallback(() => { - onSelectTemplate(template); + if (!disabled) { + onSelectTemplate(template); + } }, [ + disabled, onSelectTemplate, template, ]); @@ -49,12 +54,14 @@ export const TemplateSelectorChip = (props: Props) => { marginRight={0} dataTest="workinglist-template-selector-chip" selected={id === currentTemplateId} + disabled={disabled} > diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js index 437e5330a7..5ad89c8434 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js @@ -12,9 +12,14 @@ type ExtractedProps = {| |}; type OptionalExtractedProps = { + allRowsAreSelected: boolean, + selectedRows: { [key: string]: boolean }, loadTemplatesError: string, onCancelLoadTemplates: Function, loadedProgramIdForTemplates: string, + onRowSelect: Function, + onSelectAll: Function, + bulkActionBarComponent: React$Element, }; type RestProps = $Rest; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js index 17dacb39f3..180e0634c9 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js @@ -1,18 +1,16 @@ // @flow -import React, { useContext, useCallback, type ComponentType } from 'react'; +import React, { type ComponentType, useCallback, useContext } from 'react'; import log from 'loglevel'; import { errorCreator } from 'capture-core-utils'; import { ListViewConfig } from '../ListViewConfig'; import { TemplateSelector } from '../TemplateSelector.component'; import { ManagerContext } from '../workingListsBase.context'; import { withBorder } from '../borderHOC'; -import type { - WorkingListTemplate, -} from '../workingListsBase.types'; +import type { WorkingListTemplate } from '../workingListsBase.types'; import type { Props } from './templatesManager.types'; const TemplatesManagerPlain = (props: Props) => { - const { templates, ...passOnProps } = props; + const { templates, selectionInProgress, ...passOnProps } = props; const { currentTemplate, onSelectTemplate, @@ -42,6 +40,7 @@ const TemplatesManagerPlain = (props: Props) => { return ( { @@ -51,6 +50,7 @@ const TemplatesManagerPlain = (props: Props) => { currentTemplateId={currentTemplate.id} currentListIsModified={currentListIsModified} onSelectTemplate={handleSelectTemplate} + selectionInProgress={selectionInProgress} /> ) } diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js index f6b8f82ef9..046c59d246 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js @@ -1,22 +1,22 @@ // @flow import { typeof dataElementTypes } from '../../../metaData'; import type { + AdditionalFilters, + ChangePage, + ChangeRowsPerPage, + ClearFilter, CustomMenuContents, CustomRowMenuContents, DataSource, FiltersData, FiltersOnly, - AdditionalFilters, - StickyFilters, - ChangePage, - ChangeRowsPerPage, - ClearFilter, RemoveFilter, - UpdateFilter, SelectRestMenuItem, - SetColumnOrder, SelectRow, + SetColumnOrder, Sort, + StickyFilters, + UpdateFilter, } from '../../ListView'; export type WorkingListTemplate = { @@ -141,7 +141,7 @@ export type ListViewBuilderContextData = {| updating: boolean, updatingWithDialog: boolean, dataSource?: DataSource, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSortList: Sort, onSetListColumnOrder: SetColumnOrder, customRowMenuContents?: CustomRowMenuContents, @@ -153,6 +153,12 @@ export type ListViewBuilderContextData = {| onChangeRowsPerPage: ChangeRowsPerPage, stickyFilters?: StickyFilters, programStageId?: string, + onRowSelect: (id: string) => void, + onSelectAll: (rows: Array) => void, + selectedRows: { [key: string]: boolean }, + selectionInProgress: ?boolean, + allRowsAreSelected: ?boolean, + bulkActionBarComponent: React$Element, |}; export type SharingSettings = {| @@ -200,7 +206,7 @@ export type InterfaceProps = $ReadOnly<{| onDeleteTemplate?: DeleteTemplate, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onSelectListRow: SelectRow, + onClickListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, @@ -224,6 +230,12 @@ export type InterfaceProps = $ReadOnly<{| viewPreloaded?: boolean, programStageId?: string, templateSharingType: string, + allRowsAreSelected: ?boolean, + onRowSelect: (id: string) => void, + onSelectAll: (rows: Array) => void, + selectionInProgress: ?boolean, + selectedRows: { [key: string]: boolean }, + bulkActionBarComponent: React$Element, |}>; export type WorkingListsOutputProps = InterfaceProps; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js index 8e53fd7e01..7f50dd459f 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js @@ -189,6 +189,7 @@ const useView = ( const nextFilters = useSelector(({ workingListsMeta }) => workingListsMeta[storeId] && workingListsMeta[storeId].next && workingListsMeta[storeId].next.filters); + const filtersState = useMemo(() => ({ ...appliedFilters, ...nextFilters }), [ appliedFilters, nextFilters, diff --git a/src/core_modules/capture-core/converters/clientToView.js b/src/core_modules/capture-core/converters/clientToView.js index 2849a02b01..fb7728f723 100644 --- a/src/core_modules/capture-core/converters/clientToView.js +++ b/src/core_modules/capture-core/converters/clientToView.js @@ -52,13 +52,11 @@ function convertImageForDisplay(clientValue: ImageClientValue) { return ; } -function convertOrgUnitForDisplay(clientValue: { id: string }) { - return ( - - ); +function convertOrgUnitForDisplay(clientValue: { id: string } | string) { + const orgUnitId = typeof clientValue === 'string' ? clientValue : clientValue.id; + return ; } - const valueConvertersForType = { [dataElementTypes.NUMBER]: stringifyNumber, [dataElementTypes.INTEGER]: stringifyNumber, diff --git a/src/core_modules/capture-core/utils/userInfo/useAuthority.js b/src/core_modules/capture-core/utils/userInfo/useAuthority.js new file mode 100644 index 0000000000..fdf2c62539 --- /dev/null +++ b/src/core_modules/capture-core/utils/userInfo/useAuthority.js @@ -0,0 +1,27 @@ +// @flow + +import { useApiMetadataQuery } from '../reactQueryHelpers'; + +type Props = { + authority: string, +} + +export const useAuthority = ({ authority }: Props) => { + const queryKey = ['authorities']; + const queryFn = { + resource: 'me.json', + params: { + fields: 'authorities', + }, + }; + const queryOptions = { + select: ({ authorities }) => + authorities && + authorities.some(apiAuthority => apiAuthority === 'ALL' || apiAuthority === authority), + }; + const { data } = useApiMetadataQuery(queryKey, queryFn, queryOptions); + + return { + hasAuthority: Boolean(data), + }; +}; diff --git a/yarn.lock b/yarn.lock index 5c8b6775b8..f96f6e61a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,9 +11,9 @@ uuid "^8.3.2" "@actions/http-client@^2.0.1": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.0.tgz#f8239f375be6185fcd07765efdcf0031ad5df1a0" - integrity sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" + integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== dependencies: tunnel "^0.0.6" undici "^5.25.4" @@ -24,12 +24,12 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -47,34 +47,34 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.17.8", "@babel/core@^7.6.2", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -90,69 +90,68 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2", "@babel/generator@^7.7.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.25.0", "@babel/generator@^7.7.2", "@babel/generator@^7.7.4": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== dependencies: - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" - integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" - integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -160,172 +159,165 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5", "@babel/parser@^7.9.4": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.25.2" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5", "@babel/parser@^7.9.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.8.3": version "7.18.6" @@ -336,13 +328,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz#1d827902cbd3d9054e54fb2f2056cdd1eaa0e368" - integrity sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" + integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.7" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-decorators" "^7.24.7" "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.18.6" @@ -383,12 +375,12 @@ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-proposal-throw-expressions@^7.7.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.23.3.tgz#acb23c5ffc0cae31d5a52b26e678d1b9a69dbc5b" - integrity sha512-aAQebpCm3+qUMJ3ug9B5G26Z5VsaE955lGWrZMhAIPFhK/Cv7bL9GbWgdEXmel/jlHTRvwcYRnfzJS2prsPdVg== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.24.7.tgz#8a386bcb77965d82f5b926508b27919d9ac9450f" + integrity sha512-Rh4WoHyWKgsxvdkEMqDEZtKuGnZw+JwicMCvcZaIjYaQ3fK+a8JZYLhgcac9dKcL47Xqf+SG3MopTx+8BACdrQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-throw-expressions" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-throw-expressions" "^7.24.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -418,12 +410,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -439,26 +431,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.23.3", "@babel/plugin-syntax-flow@^7.7.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== +"@babel/plugin-syntax-flow@^7.24.7", "@babel/plugin-syntax-flow@^7.7.4": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -481,12 +473,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -537,12 +529,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-throw-expressions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.23.3.tgz#46077241577243b00ddd465f627242c492bf935c" - integrity sha512-P7zUpjwebv09kxTCG0Gp0TMa8luPG4t2Q5gylayLeRHHwfUR4jgjYgx/X9DYPF81/W5aYpYOzX2kQnChAFFp8Q== +"@babel/plugin-syntax-throw-expressions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.24.7.tgz#30887b54c478120831bc95881e73ec1984584930" + integrity sha512-b1bdlAmUTy9VQ/g2cnBuJFwd7jeARNW2F65c9Gcn8qyNYGuVy/cYyqpiSL6SVmUAJTDbIYL2FzlZ8nH1qUCBXA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" @@ -551,12 +543,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -566,484 +558,492 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" - integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" + integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== +"@babel/plugin-transform-classes@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.16.0", "@babel/plugin-transform-flow-strip-types@^7.16.7", "@babel/plugin-transform-flow-strip-types@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== +"@babel/plugin-transform-flow-strip-types@^7.16.0", "@babel/plugin-transform-flow-strip-types@^7.16.7", "@babel/plugin-transform-flow-strip-types@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz#b3aa251db44959b7a7c82abcd6b4225dec7d2258" + integrity sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-flow" "^7.24.7" -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.7" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" - integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz#71a665ed16ce618067d05f4a98130207349d82ae" + integrity sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.7" -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" "@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-runtime@^7.16.4": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz#52bbd20054855beb9deae3bee9ceb05289c343e6" - integrity sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.7" - babel-plugin-polyfill-corejs3 "^0.8.7" - babel-plugin-polyfill-regenerator "^0.5.4" + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.14.7", "@babel/preset-env@^7.16.11", "@babel/preset-env@^7.16.4": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" - integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1055,69 +1055,70 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.7" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.7" - babel-plugin-polyfill-corejs3 "^0.8.7" - babel-plugin-polyfill-regenerator "^0.5.4" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" semver "^6.3.1" "@babel/preset-flow@^7.0.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.7.tgz#eef5cb8e05e97a448fc50c16826f5612fe512c06" + integrity sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-flow-strip-types" "^7.24.7" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -1141,20 +1142,20 @@ "@babel/plugin-transform-react-pure-annotations" "^7.16.7" "@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.6.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/register@^7.0.0": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" - integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1167,35 +1168,32 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.23.7", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" +"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" @@ -1207,23 +1205,23 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" "@badeball/cypress-configuration@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@badeball/cypress-configuration/-/cypress-configuration-6.1.0.tgz#26141be2395089a3d79fd886da489ac366a070d6" - integrity sha512-30M6frVmhP8MUKscg8CEWnPbDLYDRHswUdny1ajRJlW/kdlMZ5da+eDnzMW3qUW73JfqLRk1pteejwlcZOt0GQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/@badeball/cypress-configuration/-/cypress-configuration-6.1.1.tgz#9772173061d2c71c0e79823a5312ec43651f98cb" + integrity sha512-0IcJFMiCRo33Ofrvxxojt5QRJWyxApymHuuy981FeXnOGz4UsWKgr/hRupeXkw2cKXvah+j+880kXliygxPOSQ== dependencies: "@babel/parser" "^7.18.8" debug "^4.3.2" - esbuild "^0.14.23" + esbuild "^0.19.4" glob "^7.1.6" minimatch "^3.0.4" node-hook "^1.0.0" @@ -1402,6 +1400,21 @@ dependencies: chalk "^4.0.0" +"@csstools/css-parser-algorithms@^2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" + integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== + +"@csstools/css-tokenizer@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" + integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== + +"@csstools/media-query-list-parser@^2.1.13": + version "2.1.13" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" + integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== + "@csstools/normalize.css@*": version "12.1.1" resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.1.1.tgz#f0ad221b7280f3fc814689786fd9ee092776ef8f" @@ -1513,6 +1526,11 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + "@cucumber/ci-environment@9.2.0": version "9.2.0" resolved "https://registry.yarnpkg.com/@cucumber/ci-environment/-/ci-environment-9.2.0.tgz#3942f39d6a7595295256d97a88d39d02469ba50f" @@ -1669,9 +1687,9 @@ uuid "^8.3.2" "@cypress/webpack-preprocessor@^6.0.0": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.1.tgz#5369527c063b2f4718a125ddbd163c5775086e06" - integrity sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.2.tgz#58a96aa4dbff7433dd37d24ed47e413aa3d3fabb" + integrity sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA== dependencies: bluebird "3.7.1" debug "^4.3.4" @@ -1685,647 +1703,795 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@dhis2-ui/alert@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.10.1.tgz#c15d851cdf6e15b1a6240c5af9f4308817e7c126" - integrity sha512-jSS+RDM8HLtlHx/SOMDAn50Te+mafevUuM2Emt4z/Lwb3wslps7LYjdwfI9yE+OLML9yjmJQWEhgChMIvwNNfg== +"@dhis2-ui/alert@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.11.0.tgz#01456616ad601b9c5ff5d71dfb5db102f46e5743" + integrity sha512-jka/E26RkLJexYhi934yj8hpIvdI/mOnFzjwca0kDxnCaJ9JCz/j6x0BklrzRFFt/gGJ9aldG1mVX7fGtIEEvw== dependencies: - "@dhis2-ui/portal" "9.10.1" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.10.1.tgz#67c311156b762c4ecd39532ec36713e229f2ba27" - integrity sha512-MwjhsiXGVLV2D7BmRlc5npK7MLJZsEcR62Fw/YWln0lIXd2GP5EA6vtXaabWV0XC/ZZFjdE9KetNZsgr1amkrQ== +"@dhis2-ui/box@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-10.0.3.tgz#2a2885d3d27449963d56bdff7d3185c031ac447c" + integrity sha512-lGMkAWRwKUNwTe71sAlcsieUozRbEdBT9tyVJjkm4Ldp9DsgtvKfOSaevHMGo0hLMPkbrJg7a2A5xOyAeUzGdQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.10.1.tgz#ccdedc218a966db70d1bf723cdd224d8e6b3e93f" - integrity sha512-Xa52rE9aiXt/6w2ElbqermFq2P+0V+isyNz7wELtFmGI9G+ASvqr0aIO4ePG2/qu/qknhLO1U3SA4RmlrkFLpw== +"@dhis2-ui/box@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.11.0.tgz#92391d2d8bbdb3bdd2714d93e7d519dc041f1db9" + integrity sha512-/ds/LWG8P995QRDHhkVvCS8ao6tOpssAwqFY2PiaRIl2J39b6bmfIVfIQldldiKO1IK05oJmRSCmCx8TfHE9ig== dependencies: - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/popper" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/calendar@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-9.10.1.tgz#7683f05fef63b6841403f746f32a52891e323d64" - integrity sha512-tzFJWHMqdvvOsGTLttyqfAWMWH6aabt/4nIfRYJyCGvEIOdZLx62S2tZZjjtFwUpVtIN06+cunaGv8XHwmvlxQ== - dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2/multi-calendar-dates" "^1.2.3" +"@dhis2-ui/button@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-10.0.3.tgz#d797a8aa8f9f8ad9555522393ab22cf6b9d22f10" + integrity sha512-0bKWNWMbSuvXR48VGc2sl92bF3lCSZKY1E9xkknNBkPoHaXnepRGWcd2tNYmHPVp59CEHgOME2YCiEazn2pKng== + dependencies: + "@dhis2-ui/layer" "10.0.3" + "@dhis2-ui/loader" "10.0.3" + "@dhis2-ui/popper" "10.0.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-icons" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/card@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.10.1.tgz#d4814458245444f95bc0a6c1fd88679e1ffba01c" - integrity sha512-Aj9ZvKJbRoDy3DqhYO9/phOiX/bC+gCyk4E0leMxtJx7he7pfdGCfpRHNyxEuy7tEi8WaVaMzfnb8lNzsv/nUw== +"@dhis2-ui/button@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.11.0.tgz#ee6a5dec0e44da72a654c546a6c685dbcdc33245" + integrity sha512-b5cA+v0uv+5Dj6CXPiFavOUSgiNLKXRBg6OjeZatUTIsoO59UpOxQoVp4cCo8/kZkBBUyuwsMYO2AHuIarTucQ== dependencies: + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/calendar@10.0.3", "@dhis2-ui/calendar@9.11.0": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-10.0.3.tgz#726560825eb0919db8018097608075a46bd9b638" + integrity sha512-yxLESkgO+PlCdkREqzCKGq5KXmKtUjMkRWb6LY3hkpYZ0DmHCrqUpIHGqm/cxA3xo812km2SwpoKgVbmP+T6YA== + dependencies: + "@dhis2-ui/button" "10.0.3" + "@dhis2-ui/card" "10.0.3" + "@dhis2-ui/input" "10.0.3" + "@dhis2-ui/layer" "10.0.3" + "@dhis2-ui/popper" "10.0.3" + "@dhis2/multi-calendar-dates" "2.0.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-icons" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/center@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.10.1.tgz#5628692b2aeff42870c0e0619aafac5dcab0777d" - integrity sha512-pmASts6pNktt0NKetShhTMje3ZKBD1k7xr4dx6fhhNfw96PgM2fYxXCn8vNQK9HkKyY0K65tX/u8Q1oegXMFKw== +"@dhis2-ui/card@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-10.0.3.tgz#968ccada671eb351c225a9fc5ee18bca6be1a23c" + integrity sha512-ldMyDmDSWztubwgP/4IKjXFP4YgMIfFI1gRuMkvLJYx5CcpcqnZqULeunHM6+47d6mP2oD7a38Mly1+GPbjY6A== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "10.0.3" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/card@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.11.0.tgz#17b40d55240a1fb5c34345b0d16e63ab984cfdb6" + integrity sha512-phjsyukZfmxKqqtRxVRuFJdc30S7XfEkEmQv11wWnAjGVl2YxIWKm8SAGShpu0gC8susJg0GBhY7Ts+h5cRvQg== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/center@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.11.0.tgz#f3d5a302fb2227a78a8430a706a90a43eae92665" + integrity sha512-LEAW1wlpArkA63sko/24H8C4AHYTGFolIMYjcAFX1GR2xBcFpj/4VQRQFK6P9POtrSv+syVlfw51g9zBfhYi9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/checkbox@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.10.1.tgz#4ee2112c3972beca38a9897ecb82dfd3b307710e" - integrity sha512-sNERu2S3rrmxl8wnWoNDSq5jv5D43ncYu2prbG8mP27yaZ5Jx+9cy5seLVOh719zZvC0cQiADjXoFt8Lslj/eA== +"@dhis2-ui/checkbox@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.11.0.tgz#05d59ac1403a93c44bee2e2e04b008f1851ebeb7" + integrity sha512-jPn/3DCUNLar8EEgUI01h100POtob6GxkcpTkMsRqngN4f+QTAPZGVORVFjd+2nAAG/msHXaqnNqmfwkaKPsaA== dependencies: - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/required" "9.10.1" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/chip@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.10.1.tgz#b530093e9ef2c6bfa85f556512a1b43a9b0c9e77" - integrity sha512-VZ4+WM63wZPVWF8J2gpw2IQXI04VlEsijwd7aBeux4JUhTv0rJkyUfGWYR2PSSDh2xAZWsJHmkOiwS+Bguv31w== +"@dhis2-ui/chip@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.11.0.tgz#1e8b4276872b8737ed1607588867d0f6d9800e13" + integrity sha512-jc/CCohXhbTT91AagWIxieybSyAR9Mo91vMjRHbe8qzVua40WezAazhjLCd82ynGjEzHWMryaK7om1VK5hbM9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/cover@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.10.1.tgz#c668649399b4b9e9aaffb0209cfa98c868c3b986" - integrity sha512-sU9s3dOQd1kfClZcwPVjG6zBW0l4i91xZvJSODqbFtSX0Tz7OmNwWAC23xYoXl6TaizCk+1iKG5iB2aiay9yuQ== +"@dhis2-ui/cover@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.11.0.tgz#ea8280dfcb2444111cd0e1da87c566d5813dc1c3" + integrity sha512-mwb15H2gJNOO9ZDZEQclfrvKbb0TvLn3n7BMErR8+Z9oE9j8ycMI/Ks6Itov94dIX2Es+1cHZFMDLJUOTtI+yg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/css@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.10.1.tgz#d94b659e3f00c7d353b9f53ab786ebd0dc6fc4cb" - integrity sha512-ZJWv9zRVzl5/08s5WMHPV1WZLhVYDekMvmQNSoBRkLDoitZOtxfTx5ytsgStBpjWPK6lxwCKhh4D7ArI0gQCqA== +"@dhis2-ui/css@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.11.0.tgz#4540c4795b146b3c92feae5ccbca99b198d66fb2" + integrity sha512-TsLR1Jw7fjTqszrybAdw1ouAdV3hPX9v3JJE/iWqTKPHfTSxtEj201jHAqpNWjxiIgEzPJ2AG61fUh44+Iiibw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/divider@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.10.1.tgz#a6fa0af3b02cc28d35180b784cc53ccd5d710173" - integrity sha512-o1OAah4EQMX72cXV/A0dfcORqKDbbbzcSW5jWuFIreAuqC0XRutoDUOaF2NWi2mc4AJsI37o7M1+0w8MCjtOOA== +"@dhis2-ui/divider@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.11.0.tgz#af514387024824102dbdb352058809f1d54c8901" + integrity sha512-zDFjs2BZF3Dra8cpYypYmvYTnFgItHoFOAGs1JfVlvTcWGpaggf1ah8BcxqFSxOg7rgL0CGtF9uLujGNdbla5g== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.10.1.tgz#732d289d274c11f853c8fc399de9703ccb0da327" - integrity sha512-7VOU28pkqkPlcTfD1FWSOLRcmIi4DMSo0ElPA8HwPE8eiBj52XPUQ1LMCuBiosS5sCAeUC74108dNQidTgY+OQ== +"@dhis2-ui/field@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-10.0.3.tgz#e2721efbcaaec159774f046d96ebcade8129fccf" + integrity sha512-Lh7VyFCCCycR0DIygWcDvff1/4c0RMfQFp8svfFRYbC8jscaeBsqqbR082wFjbvwVn9uUYB45eu+1HJLKwDviQ== dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/help" "9.10.1" - "@dhis2-ui/label" "9.10.1" + "@dhis2-ui/box" "10.0.3" + "@dhis2-ui/help" "10.0.3" + "@dhis2-ui/label" "10.0.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/file-input@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.10.1.tgz#f1c38080c4f65a35b8383508a22b34bfd0596b05" - integrity sha512-VyXsOs+JSK7P+QFf1byGFWDjs2bIbD2XF1FhbVlEsAwPJ9gLYnwYqkyRNI3VcSg8vbTw1VgYmEd4ODjbQjGMOw== +"@dhis2-ui/field@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.11.0.tgz#c57c623ea4ad32a6440062ed4ee81e2130d80f75" + integrity sha512-pVFNqiKVgsefxpgfMnrM6mU9ZM1qZtRAZsDjzooYIlh1r0nUQt01GKgn0TTdyICIoqO3lNLxvxNA5SXv9QRqfQ== dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/label" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/status-icon" "9.10.1" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/help" "9.11.0" + "@dhis2-ui/label" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/header-bar@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.10.1.tgz#a3b75bb45630f0576bfa411719749eff928fdc24" - integrity sha512-9rDwuL2fO1Zo25Zc2aTjG/h6+k55kPsduh7jvJEqQ1440silP3PrKygPBLvJMxJFHGfhwIsDPa6JC4sONOne3g== - dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/center" "9.10.1" - "@dhis2-ui/divider" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/logo" "9.10.1" - "@dhis2-ui/menu" "9.10.1" - "@dhis2-ui/modal" "9.10.1" - "@dhis2-ui/user-avatar" "9.10.1" +"@dhis2-ui/file-input@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.11.0.tgz#77735de2a87f734a4041f4a397911313dc816df6" + integrity sha512-CWp34b6hMc67V5KJow5orPzLTVJzFnudouXYQEiPd3fUHJa4xRYW+GvbL+uY46VvF+GSB82eP5+z4PTgicZWxA== + dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/header-bar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.11.0.tgz#aeac3955e407e4c398daa81ae3231b52bcd18870" + integrity sha512-1NRznu2gluvAc1Kd5Ogt7K7rlfvvlvouUYGC9kn+mLYHj/h6T+eeTOS8Y0uEJLgmfuuklm2omZ+ASUIY3A7+iA== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/logo" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" moment "^2.29.1" prop-types "^15.7.2" -"@dhis2-ui/help@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.10.1.tgz#e4d9999a15c95e070f78a5bc9cb8f1534859d8d2" - integrity sha512-Ky7ry3KlQBYGY/3Yi2kb3vLq55FYO0ZI9NDBfALtHBsYa/E6ql5Adc2SsL6+1kVSxjXZ5H5Rvg9eg62rz/Rhrg== +"@dhis2-ui/help@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-10.0.3.tgz#2d7782499e9ba4135f1dd1650e35ddc03b90610b" + integrity sha512-iNQRXfzDq5z9GGcnA01y5VxLXzWHzG+hRf/L/l0tZCV2xqRwirHwFi1KVazVKShQxYvXBGMMr2GwqpiRg9I7oA== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "10.0.3" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/help@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.11.0.tgz#071ed4ff473cbc423b7a1f51c7217b6bbf057974" + integrity sha512-/n1bnolladI44ZVSzxKvt6SnsAlVK9G76uT1pTMNyMRDHCIpZc8070HADv+2GGD5YbwSpltClgy+3U4xPz14/A== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/input@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-10.0.3.tgz#b57f3b7659156163e3641a8927fa6633c57d0468" + integrity sha512-MhtjU9OMKXl1YXwMlQKUsuG+641a994GzKiFR0RcYsEW0/yVaFwyOEfnRBwzZhGwSnnSl2KE24MTPqSotBAQLg== + dependencies: + "@dhis2-ui/box" "10.0.3" + "@dhis2-ui/field" "10.0.3" + "@dhis2-ui/input" "10.0.3" + "@dhis2-ui/loader" "10.0.3" + "@dhis2-ui/status-icon" "10.0.3" + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-icons" "10.0.3" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/input@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.11.0.tgz#4dd6efc15c82605468a3e1211f0b182bd5c66a08" + integrity sha512-jx3scjWkhO3s7SzaTfYUOYpOacGfS9317fGEshrirdkh6+jzLF+qbWLM9BX/hf63JfU4iPZC4cZzr0yWgxohDg== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/intersection-detector@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.11.0.tgz#cad6dc8095cdfc9db133fd8a46d19e90130e4f07" + integrity sha512-Dr1WUDvcWbKFFu2DoCwfLwokM/d1oQApEkbAmUBSkAv9uWx61VgLlH/Z3I/Pr/VSJuBR3zWSpmVbduLlFs1Avg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/input@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.10.1.tgz#b683732e6b1b0672516c7927f23c87090cc72f11" - integrity sha512-yfZfIlvDfuWpM9YNtB2J6toRjbrzdcKefIExyOIBdgmTamFzp8fCCVUnSUfO3VEdBCM4fqWcHBLDA6/hU5iQpA== +"@dhis2-ui/label@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-10.0.3.tgz#1787ff36b0f5ab0aa362b2809a5af4029f326099" + integrity sha512-HFo5Onguwx/sv+Iz6hFJ1xiKiwXLdH0BCpJXBgYaNyKFLkgbprEHaBW9ZOM/e9cVX5jlodE5z5b9hIdgjzw9Yg== dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/status-icon" "9.10.1" + "@dhis2-ui/required" "10.0.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/intersection-detector@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.10.1.tgz#767227650e4436262c91d9d670aa279aca998d3f" - integrity sha512-42RMPz5evHh9Uyu6XleYPGu5PiwkXCN9ZnQhlL1kyAksOtxVxwWyHNk5n7XRjyo9X50CAwcZGtRlXgKavcQ9Nw== +"@dhis2-ui/label@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.11.0.tgz#286e9b1b79ef7cf45d500a893b4c0fd6b11eeaec" + integrity sha512-wOlHjghmey9nbytOKHHfwzaUzxqgXcmTzy7ntkRBsmqVMdJ07+pL7iFId4EFNdGz2aGPGPAs1qmMEqDJPoz3eA== dependencies: + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.10.1.tgz#b4d9de56e9e209d94937c09e83f356bab717a6b3" - integrity sha512-v/bJCTK+zw0tzQ0S1gHFXhxgfbREKcFaEWQKJpn94Woh/ws/uMo+UNd3BIf7iCylCXz/V5/MVCgJhjDjJnB/Ww== +"@dhis2-ui/layer@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-10.0.3.tgz#1066f606ce7b44bff365f2937d4432f8353f729f" + integrity sha512-qOygPIbQRthhigtQH+uebq4PRLtkvYHRAzYt8YxtKo4rwTbLWqAmfwZ03rbogLTzkPortZonPcczLoOzR+tskw== dependencies: - "@dhis2-ui/required" "9.10.1" + "@dhis2-ui/portal" "10.0.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.10.1.tgz#8f7867ccb62af0b0af5b8a25767e693ee585d38f" - integrity sha512-fV98uG359y1LqKjulStTrc8MJClQ7Ub3RUJ8DgXe/mrps12Ads9SyqN68bPX1Mr++2Ks4IbtC88vRM+XmW0wyA== +"@dhis2-ui/layer@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.11.0.tgz#ffc80120cf38236ec04291e1bb992549c4e685fd" + integrity sha512-jCrgn2n4QlxTY7GRhwgrDqTbMaju7SDUGrrqOTBZXg8bCoVBazqh3dgUUWogOVJ8UH6ob+tycfXvbUf0lJClNg== dependencies: - "@dhis2-ui/portal" "9.10.1" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/legend@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.10.1.tgz#8521c229fa46e1926cb9587a6b0c6c5482f6bcf0" - integrity sha512-w/RrHS6yvi+W872lTw9NZqJMbuYz1FmyP7d3E4uAOxGM7n7dEnfKWgRQhG+GYG935mYLl+aYv0szS36uDgCusg== +"@dhis2-ui/legend@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.11.0.tgz#f8c8201ae9da75c815810715d3aca38e03fb585d" + integrity sha512-MxpJbao+t1qhUrStLhLAn2+Xt2G2gyoiHEf7BeF85opf5HsY+9Xbki1RemP69ixe906czCKD2gieZxNNpdQYBw== dependencies: - "@dhis2-ui/required" "9.10.1" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.10.1.tgz#1a48b05a9e8c31d7819f66d22b27288a076cfc02" - integrity sha512-lMlmtyGQGxu48oBVhZGT9USOB5yEqzgSAkTZg/vd+byHm5oMM2m8KNJTH7RT2HHg2Du24E4L2n9+W6ZSAwhMyA== +"@dhis2-ui/loader@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-10.0.3.tgz#56fe040123db30e822221e45d3fd384f18c5fbca" + integrity sha512-4ENjQrUO1jM2p/+gRjTqaliOpXjSo8pTv9YvZHyOA6HGptWudk+s5NXSNyqUkDwJB2pnAMxKFs4Rd5JOKHdujg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/logo@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.10.1.tgz#b4bd80780786c35a85c1fe2d7888862df3e97213" - integrity sha512-hW1PJGG+l6fHI9XHjOH9565LwUpWaYhELgi+Gjutbcyil0xY4DHO/Nd6YxTui2V5RwnZsFNHEbOJlJRG1oXNbQ== +"@dhis2-ui/loader@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.11.0.tgz#f0a2f8f0646efd9bce632194eb68bba0f1512c2e" + integrity sha512-98M8KmGYYeROkGE/rZ8e3BHQKgfk7ZsZmYrhr6JyEYUWoW+rDHeR/a5bprbMmie//+ePdOx2UxZUJKIDUZEPvw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/menu@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.10.1.tgz#e9d7ef056680ceb3b385940d433d88be02ed6c77" - integrity sha512-Wy2z3FIIX1vhReQucG3aLUtEmjFgCtNDf09U8a+JUjXLmrKH41fcMVvz4mkzmGy4jQf60Przp4tXOpmLwehkHA== +"@dhis2-ui/logo@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.11.0.tgz#2ff0058cc6dffcb0dcf6182e70429d0fa710dcd4" + integrity sha512-R0nebCjwHeYbq0+N2xje1NOTI6bcUB16riSNBBimyZAQXqEWUyiuqxISf49UUG+Ed7UjkcMnJe6AmL+Yoemfug== dependencies: - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/divider" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/modal@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.10.1.tgz#63453611171a61541d3bb07df9b78697e40ec1aa" - integrity sha512-tvpyQPKqjP42mRJE+Nm33YxgCQkVwDHkLsxkxdaKUj9cMAkQs2hcvD3+QlzuHLf3uVtwPrfKxUM6L79AJIo4RA== +"@dhis2-ui/menu@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.11.0.tgz#33b5f74e193d36dd4a13175bfeaafdaa6ae8373d" + integrity sha512-613Yb3IK2JQGrOTP6caCRkSTqqrOkL0K1Frsv0Uzhts066bZQaIT7drL0T+vIFv0+sgRSGyfBSfTrYQofxnKYQ== dependencies: - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/center" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/portal" "9.10.1" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/node@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.10.1.tgz#d70d639edec02dffd1a7fbd3871c10b9463b30e2" - integrity sha512-AvsVsoclCVTq6MFwTejDLDhk+mehOkL8XdpJAWxZ7G0vcS+/xqukHxuVQXgEGOyCpZNPDaIgvz+BPRS+Qf38cA== +"@dhis2-ui/modal@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.11.0.tgz#c16b04787641e9f64d385c55959fa8f5537f1acf" + integrity sha512-GDg7uad+/eLvadJEXjVoHTlEfrd639QmVVdjEcvC+RtHOOXKjlR3wpm+FvgUSbw7zhXpcZ68LNdga9X9bjn14Q== dependencies: - "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/notice-box@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.10.1.tgz#0bc013d64da1f1e523c7bcd167987cbe94770947" - integrity sha512-I8n/4qfDlRaoOVpaFEtPwYRx/h6Ee9k+C9Kr3fxflD+lPMfm2O7b6UkoOoY0lKpAQyO1zHkMbIzgJ1o09s9akA== +"@dhis2-ui/node@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.11.0.tgz#d4cc2b0ca1b653247bf3bf90a9e4152780f61253" + integrity sha512-GfI9ecBzJGeZnS6fLiS19eAg+w9hIXOC5sk69S5NOEKDbCU+CWR97GSpb71RBiq9QZuNBtNEZU7Vqa01+G041Q== dependencies: + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/organisation-unit-tree@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.10.1.tgz#8798f023cd9c14e8b586b1249fca92d27d31b3c5" - integrity sha512-Yk6jzVQ36LP+sRXDYA2c+IUGAKS1lO5A8tx79EUQZfMfBnh1TSUAMN7BPtg4BrZmL2Hp+LrKQs32RZLmR6sa8A== +"@dhis2-ui/notice-box@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.11.0.tgz#2bd5c4a13a9d021c2d694f94ee6520276ccc533f" + integrity sha512-xEfsxFVoiMxVjqvf9QyB7w83cwraS+aS1HaOXTySvseOd+jSk7YlYAQJ2RQbGmik7rsSlyNMXbWoJ9TaJ8Y/pg== dependencies: - "@dhis2-ui/checkbox" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/node" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/pagination@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.10.1.tgz#8ae88b47642d8a0a87cdeb99d6a0607f9185ad8b" - integrity sha512-wmMYYrquaZp5EgUugGIJCyUQ1h6BMHMfFXM4g7KTpvh5n6o9vnElQeWy58EPaL8QDAqk//zsyQMEAXm/YwSbyg== +"@dhis2-ui/organisation-unit-tree@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.11.0.tgz#c626c71cac19ba93241a6e36fad2d261f3307c32" + integrity sha512-2mYpgBPjmNlkCnCLrDmmPtC1rs07uxlEeqULTCiqRcbbWzEYL2S+fAao5IiOrlzXR9JIVlG7P8htMYNfj48tJQ== dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/select" "9.10.1" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/node" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popover@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.10.1.tgz#edc06a2208a14a9cf69b1217fd9d4bb9f8f3be4a" - integrity sha512-LHxCXotEkqAoBQcax3DICyo/AotLG/gaNzc9iPwan4/hHOiwy5ciwMNh9RycyT90WqtPmTtDBDJFS90BRv5sxw== +"@dhis2-ui/pagination@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.11.0.tgz#6967b1241ec3c36855e4570125e202752a6db577" + integrity sha512-HllIE5IVsNK1vM9wxRDfrLtxrrMWOxDEV+8B6QKG9qLXubfoFZL6+b5MGHo/mzDzY+7LxxBpiowoYaj52QMFYQ== dependencies: - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/select" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popper@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.10.1.tgz#841ac08c79f81b6cbf3761c1a6aea261e1612f6e" - integrity sha512-kTfXQsiYcqw2/gRmxbFuFSiYL2giGMxebgHsP/ikONcsM+QNBBtVwEu70uEdfoNMTKrevjssAnhUjB8mPgjwuA== +"@dhis2-ui/popover@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.11.0.tgz#c6af553735f6c441c59514841f732f3f3ec86371" + integrity sha512-jad3kEqIyvhKQ4YBUGIbvcnFinED9ywgIfp0AG7sP3t80S15/aso+kTPyZ06Tgt/Slk6o6vHEuUy5SSpgnaLcw== dependencies: + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/popper@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-10.0.3.tgz#fc161b1d00c199b71bd562af693faa5ac7a6002c" + integrity sha512-X8Cd8NqRTCl9RqwpX4tK0vhnYB3GMUQWZ5LrFo507M6zqOk8MldOb/x7ThnhFB7TCH4aK+95qLj2p+Jm8KB7yA== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "10.0.3" "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" react-popper "^2.2.5" resize-observer-polyfill "^1.5.1" -"@dhis2-ui/portal@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.10.1.tgz#fd3d45eecbf73281cfc682b4d9c0c7ed47b2fe39" - integrity sha512-0qkHHrOAkyH1mV3C1kAV6SA9c632yfE2DsMb48kTii4wuKqWvXAXoGsqQ12SqyLgvRHgrxaEd0nt1Ap/C8gRQA== +"@dhis2-ui/popper@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.11.0.tgz#6b08e1f32588384b408cb6fdc6ba65369fd0e392" + integrity sha512-RIUSd0qmV0gCE1aTX9kUv8hYbat/5wUECFAhMF/0mqkDZAqTGpyQDFHFTPwAc37wNaxOXb8z6dDMozaNn5OpQA== dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" + react-popper "^2.2.5" + resize-observer-polyfill "^1.5.1" -"@dhis2-ui/radio@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.10.1.tgz#c44f0df810b246758b166988e91cc3e5ac4eabb8" - integrity sha512-VWpR+i4wIVK4SCYrBkA1V6bJaePBVqSvPimPQ22bIhxxWpmK9eOrn3+nSnZi3Fx5HT+UF/axg1Ez49HFPgPulw== +"@dhis2-ui/portal@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-10.0.3.tgz#0f88544145f45d6c4f1e61166b2609e05defd5fd" + integrity sha512-5pY2RfkTxntYzNeG88+2CQDPXZCxXl4aafYM+bBrmcgG9JSAtn5rLaKGtlKzK9GA0H849ce6W9mSDICMA/w2Sw== + dependencies: + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/portal@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.11.0.tgz#4a3e874d701f1a5b872e717abcad645e073efc16" + integrity sha512-z0hhTMtUK8pQvA9cl6VU2QYvlEFPamxPT3MWGKcfhUTkPj/zrA0ovKWRZwrcEN0AoXb3bqc6TsS6szJL0ohi1Q== + dependencies: + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/radio@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.11.0.tgz#e9fbdcfd3fc8e6cbc0107c00606c275fe19d56b6" + integrity sha512-YAI/uow1R+LwANKfMOdOqXYBrrRowf23fQDgZNDvdxVAYU3BxHBoCKhx/14qyslcHv6/pwDLghvDUw0un5suOA== + dependencies: + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2-ui/required@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-10.0.3.tgz#4820ba88c1770c50823b2b2a53a63702e92cec90" + integrity sha512-8Vl/Zx/XtRN1o2KeULQTdbeOP31qfYJLQtkQbiHxfWJFf+c7KPdI1rcxthopRIMGzOacKgO4352pSrAo5qbawA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/required@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.10.1.tgz#0755f646334eb6425c67bbb20c47b89e79025691" - integrity sha512-vhMUNxaVYfpniR5iofy579sR29m+H/qHkaCscKE2p7B7FmhEGWwN2H+N/CVOAMsAVSgHaMHoGgfM9r44Va0ClA== +"@dhis2-ui/required@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.11.0.tgz#71f2dc7cdbb5b9bd412316af5ccb611caf261484" + integrity sha512-2fThUG/+wdOeQeuZD52M/TdMTCRSdxPxt2IIdkc9MUC+MmvMieJOFjYTzaHaItSqy0huNnOEvmaHEOTcERae/Q== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/segmented-control@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.10.1.tgz#ca4daf18d46d43d1cb46a40204430d85c5bd5dc4" - integrity sha512-LPf2Zrf2aGRxvsmI0lE3+hbE+pZC+ujoT+E+4M8OO+Xue9ssbJf5yLv6t6jqAjpRT8IoGSGTZA2rckl29at6sg== +"@dhis2-ui/segmented-control@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.11.0.tgz#97b80b28543039a7c75914df9fe8147d9141b6d3" + integrity sha512-Ejv6/zCa7o9PFK9BvroSio0DgSZt2Ue7Q89MkJYee7yH5dAe6uuCcZ8/lrtpOWOoqEQtDpsrAF6bU5LVjSsAng== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/select@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.10.1.tgz#c8e7083632e44c26874ff9e4d2ca05db80028989" - integrity sha512-eHr1zkVBjjC1mLPnYUKjMdxqQteXGIA4L0viKq7ab34GttZVu3fuuVhg+cV0XjZm03YWex0nmwbSlk00oDjnJQ== - dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/checkbox" "9.10.1" - "@dhis2-ui/chip" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2-ui/status-icon" "9.10.1" - "@dhis2-ui/tooltip" "9.10.1" +"@dhis2-ui/select@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.11.0.tgz#8f09f3500a37d9ad63d9bdb58ec9cfe224626fff" + integrity sha512-sfOZMR+7LaxfLseYyyqrGKBiZEuUCI/IDJXvakIaCqQGhSjjkY5Y8FC6LMZl/0TQUP8yCIjKaqBaUukLZxN6jQ== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/chip" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/selector-bar@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.10.1.tgz#6dbc1759ed17fb487b704e2f0d177601844b4cc8" - integrity sha512-K9z/rJML4owFYkrZ6uzpOAvtuJXQ5Thyo4Pb3vQGCM8ORbGKme4QewU8UA9AP4aiU5zDDJjZF1+K0ft+7ugITQ== - dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" +"@dhis2-ui/selector-bar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.11.0.tgz#a9ef657f0ecacce87e67e343ccbe60813067186c" + integrity sha512-7VqBu0GSk9By+5Z4B6R2lNEPHUyXjOWWV2fgD29jH8zj7Z65XffJS/A1da8M33uSFX3sstOkpyZVHo71vx0cAA== + dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" "@testing-library/react" "^12.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/sharing-dialog@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.10.1.tgz#d73a7b2f013719b7abfc958078369d6c596c4d41" - integrity sha512-yvvF3zav5b8a5ZCTtWX0Clped4dvlR9OXnnurgZPLGcELFIQRnW1ttusVhBNGHIJfItCeX3vRYhB0a/j1sXAmw== - dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/divider" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/menu" "9.10.1" - "@dhis2-ui/modal" "9.10.1" - "@dhis2-ui/notice-box" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2-ui/select" "9.10.1" - "@dhis2-ui/tab" "9.10.1" - "@dhis2-ui/tooltip" "9.10.1" - "@dhis2-ui/user-avatar" "9.10.1" +"@dhis2-ui/sharing-dialog@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.11.0.tgz#9adf070335b45b99c718642a887e6f3bc8e3bcad" + integrity sha512-5LSZhO13dXZ5jOSpN2GlAlBfcZmRBrgye13cKvYgEWy+n1CWe4nJwQLYtfYoH5rItCBsjfS4/ouAFu6/koOPcg== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/notice-box" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/tab" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" "@react-hook/size" "^2.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.10.1.tgz#e23274968cd304d23770dca9970d5036c758ce53" - integrity sha512-l9H5eplY9Q/02ItoEDKG70z06lODG9Rc5jgOBQN8WS9K0U67Ux/BYcJuyXUGz77ai8C+LQru1A9Bq7Kug7zr6w== +"@dhis2-ui/status-icon@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-10.0.3.tgz#4d772fdfc35c8e3d559afeaeff5a07015e5364bb" + integrity sha512-LZC+ALg1qYx4Zxl5uvlib0nGJ+eRihRULycUQasQq1UT+nIL/Dyf4Y7GJwQ3rdIy2gq9Sr4eDIhYsn+OBIhi9w== dependencies: - "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/loader" "10.0.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-icons" "10.0.3" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/switch@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.10.1.tgz#886cb5955274526331e6fa07127c4d8f236403f7" - integrity sha512-ZcbCJJlv9VG8BuQQ0Hhw2JueJjbFuIm5tXozmC9GaTd2F2v1FDHsMJpIenY+RcgK/SWRbCF6iYdyONBw2nn29g== +"@dhis2-ui/status-icon@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.11.0.tgz#2387a0ed48ecd9d09a76fd30ed249efa6df9ee00" + integrity sha512-EUEwH+Q3Z+Y0bdra94NmyqDyUz3gSOijEhIX3BPfk7mesvY9mLp87PvBaSfHJIHf1xywTI/Py067Et6MLPUR2w== dependencies: - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/required" "9.10.1" + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tab@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.10.1.tgz#8e9b6d1b7610617981bbc24a02ff87b150a00c8d" - integrity sha512-SghJvw5EImrFB7yOlOtBqQX0N8w8y8OAivSIsqScF/ejTR8m7dSRrWXLBBawfo0ht6dOs9l0Fje3Ej0MU+40yA== +"@dhis2-ui/switch@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.11.0.tgz#2eb848cbf0471375912ee48849d1beb949eedf45" + integrity sha512-norlPc5z/YCNVIHTqU/BpKii+c6biSAXV1Sv+wlfh2eXTa78+lFUNOG8RoO5lQCUmOC1bZd5+L1BjUwh6MlOVw== dependencies: - "@dhis2-ui/tooltip" "9.10.1" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/table@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.10.1.tgz#51c8e4973c1174edcf94627b3a5513340be85b12" - integrity sha512-nWSWN16EHnF1Q6UGP36P5xmYxxhcKPl706XLcBbNGbSULY4a90hXQJnCcuWAoulSgZtC7D7XhiwcD8diNY2Q1w== +"@dhis2-ui/tab@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.11.0.tgz#4e475d915aec266919d4c4fc73f58a6144312901" + integrity sha512-ijjxbxOeFe6iOQEZ/bICEjTDnq9PNkBSnO74rR/PImrPvsHUU+d2ZOSYWkh3TwFL9QQ76Vb9NwcAo6eSOGdVOw== dependencies: + "@dhis2-ui/tooltip" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tag@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.10.1.tgz#8bad6d9e6f9ef3aa761bc98c3cbed9455261e633" - integrity sha512-iiZu51CQSBOWkkYk56iiVuzieFbHjUC55YDkJpHHb2QhgU+6LzacTltP3vOBWIw/BKaMWLkQjvf/XyjWHJd3/Q== +"@dhis2-ui/table@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.11.0.tgz#4c37dc4f334ceb49e1d11a3c9839ee229f2e9bd9" + integrity sha512-qc2OtBe9LqDCci3wJM7y4JSA5S3AfubxnySMMJPPEo7jilb6aAEheYFKjfmRXdUP+GxMUdOh4hCUQ22LAG1i9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/text-area@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.10.1.tgz#b4e54872f85fa3825d8bfea0d2c7772e6a3b5c65" - integrity sha512-kTOXmANxFYR2+FO4ZrUnxOSxuQXcNcVSUTa/Em/X7cOzoqeDK5VeQ0HB3PnppFEMk3cBnbHTOlixlm8EwQQJ9Q== +"@dhis2-ui/tag@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.11.0.tgz#f1c292d72a84e6e04cdbe4ae16d16ff95f28579a" + integrity sha512-FMN/1NmHyKUdFNdw2E7Bc1UnAFhyljGTwD3DXegY5ncEYBafWQjzLXyQtHJTlu58VfdBwwQ/nIG9qChJj6w2zQ== dependencies: - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/status-icon" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tooltip@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.10.1.tgz#598008b4c8eedf397ad76c313f1c6ab121af6a84" - integrity sha512-2kbvbo319mR5NHbfwcL4cVndwE97VQXgsllOFXe++0ywGwwCqvo/uQDbA6Fpzdc5CfiFnGshMPbz4HAGiHB+9g== +"@dhis2-ui/text-area@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.11.0.tgz#e3568e70f9b0ecd45f4e92820f59184db5fdda4b" + integrity sha512-UPTK0PKiicU0OjfyMcNCN8znlrGicUyMY2MoSC1n2Tck2S0JUaCbG4Daski8uCMdss/2ZIra/k6vlP/KWzlHzw== dependencies: - "@dhis2-ui/popper" "9.10.1" - "@dhis2-ui/portal" "9.10.1" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/transfer@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.10.1.tgz#1c70b0a9be82d3b60202e3ff872ecb1456106df9" - integrity sha512-v09uS4XwOUBz/taPxA3R5lCIGQAVRDb1DFmZqTlSAA2/UES3SsyjFoEdITO0LGpJilSc8Zw7wVlsVbMRDC7JbA== +"@dhis2-ui/tooltip@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.11.0.tgz#53095be4ebe458f0b8e22c55f50ddef7fea28255" + integrity sha512-zyGF3J0bpUC3JJM8WK9C+lm5x7fNGnzH0xrgYRP1TbcI/2RJNzlNsWr/pfNfHNqRqSwseai7Q2ssQWyADkuqPQ== dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/intersection-detector" "9.10.1" - "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/user-avatar@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.10.1.tgz#c0998148e52dedbe8f0da00e886c09726a4946c5" - integrity sha512-uGLzEl7C3/fjJ9A1/t5+Rw4fKaj7sh7tAMXGSKytBYOMHkTPEXCRK1jGrGGKP4+dJVJPqRBvyBGGd7bd7ZwGvQ== +"@dhis2-ui/transfer@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.11.0.tgz#f5d445ea46ecad95c47f90ab61648b1b1082cbc7" + integrity sha512-sSmhqSKcuCZSXG4pgLTPNJuY/K8oSGg92x7sHXQfrLFbrnsSenD6ckJjnMt4hWXNHW3xPbG5jVlB+CHWKCLrYQ== dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/intersection-detector" "9.11.0" + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2/app-adapter@10.4.0": - version "10.4.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-adapter/-/app-adapter-10.4.0.tgz#befb3e9ee09a4f2d064a6dc0c590bffaf5a7ca7c" - integrity sha512-dqjrK8FtshofMp4LzMV6J1Oj3c2/pyl6m+gOYx65Ynr7FPk20QybMNPEWnpmeWQbhI1iMf/OV/O6MzTiezfUfQ== +"@dhis2-ui/user-avatar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.11.0.tgz#82bf405f33d912961ae7447820140e510907fa57" + integrity sha512-4mK1eYYwe54rCsoDxxEqHlSMDYm0G6Ls5UXKmgi07nGvUL9QM2gUEW8J/FPmQDgFcXiBKAZpAbu5yc7d48lIbg== dependencies: - "@dhis2/pwa" "10.4.0" + "@dhis2/prop-types" "^3.1.2" + "@dhis2/ui-constants" "9.11.0" + classnames "^2.3.1" + prop-types "^15.7.2" + +"@dhis2/app-adapter@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-adapter/-/app-adapter-10.5.0.tgz#f27d6905e93a392ba2dfe5d31ec22e745f4d82ff" + integrity sha512-cPqY21QrcnSi8Kicn+TuP7HWPFMgKJ1BLMZOvPOSW/zpjzm2udZvp7LCO8qmsgCKvuMilvwVcL9Oeo/Sk9ISSA== + dependencies: + "@dhis2/pwa" "10.5.0" moment "^2.24.0" -"@dhis2/app-runtime@^3.10.0-alpha.2", "@dhis2/app-runtime@^3.10.2", "@dhis2/app-runtime@^3.9.3": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.10.2.tgz#e82639bd68234bdeaf2f6d3c256dcdfcdd267da2" - integrity sha512-GiftKk8ZTXlPElXAgVJn41Vj6E1vEGTPGrjrqU7j41ZTYsg+tUcCkISNt1woe5l7E+8+y+9Fy4bgqSsBOAEUvg== +"@dhis2/app-runtime@^3.10.2", "@dhis2/app-runtime@^3.9.3": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.10.6.tgz#10add0b8a2e1de06777e6e78c681a3a8f15ba058" + integrity sha512-WfC+AHkw0V3V3/wyLPHoTyAf8i4btLl/R2nMBVs3NEXLwA9mekG/gXs7AEPnK2/p6FVoqXMDwJHEH2b8Iw4UFw== dependencies: - "@dhis2/app-service-alerts" "3.10.2" - "@dhis2/app-service-config" "3.10.2" - "@dhis2/app-service-data" "3.10.2" - "@dhis2/app-service-offline" "3.10.2" - "@dhis2/app-service-plugin" "3.10.2" + "@dhis2/app-service-alerts" "3.10.6" + "@dhis2/app-service-config" "3.10.6" + "@dhis2/app-service-data" "3.10.6" + "@dhis2/app-service-offline" "3.10.6" + "@dhis2/app-service-plugin" "3.10.6" -"@dhis2/app-service-alerts@3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.10.2.tgz#0e07c3530606f81ab998a20f2c478600b6027a77" - integrity sha512-2IqaawnlOzYVJLBF2AKVQJ4cuxJNZD7FK0XE0XOv1WwFs70h6bp23MQueIJ/QHxLo7lamE0FC22m4diM4P0CuA== +"@dhis2/app-service-alerts@3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.10.6.tgz#47e65d7ed57a4bd801a513b0f71d0ed2839ea363" + integrity sha512-2r9IUBp5Z5zuSqjTEWpt+rx7tP5AqrtkPJ8ZVOKW5YBn1DB4bQ5ti9GOevHM4othr7Mrmt22UADPgfEkfc7XzQ== -"@dhis2/app-service-config@3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.10.2.tgz#be52676068e31cdb1fe3f8ddabb8153e1cd6e3e6" - integrity sha512-Crw7Tx4yg4qWw3qYxNCIye77IaY2HUYyDmDKPVVWzgmrcSGxpunv/NtsUg12pxrVfVLnqlH9L6AF9A6hO0afmw== +"@dhis2/app-service-config@3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.10.6.tgz#bf952156329ab48d6da407522c6e06072fdf896a" + integrity sha512-Z/rSBjCc8kP78QYhKNyGoCafGfwpqMDg8mV2x/H6CavgEicOa+qHX3bkKV6+fC9Sw2FnsWHRemxYRkgbW/BD3g== -"@dhis2/app-service-data@3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.10.2.tgz#e94d45d87cab5e156decfe9e92e3153e5df68ba0" - integrity sha512-+ESLrVEDQKXBaQmpaCq78RonkqJM2BliykaO4QBeOc4ilWohaqYajue1Ntg4uV2KrdkCylBdMDwGYjsak0G7hg== +"@dhis2/app-service-data@3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.10.6.tgz#2f3f522b4a5a8c8d531f8901cca502323e566042" + integrity sha512-9RH3Dn0shcVdF7itgKy9cK3yMEcyP5xXjNzYPGzWf+3q9aGlzjh22pHE4p+C9OV+SeVO2q+5GcNOk7rdZvS+Cg== dependencies: react-query "^3.13.11" -"@dhis2/app-service-offline@3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.10.2.tgz#082279b7045e702c2eecda751d762225313156b0" - integrity sha512-bTp+CCRbyKt/0QADj0O6wLNWhi+6QDkjt2+sfpv3M8oKcftjaQDqedVoypZRA0nqvSdVL2ehtTzqMrrxu6jtZQ== +"@dhis2/app-service-offline@3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.10.6.tgz#e1d83520bb292fc51b24eab65d05e1c9fa1e2ad6" + integrity sha512-179QXdUOFgPPIOhY5HD+C6GzzJDvhR8GW7jXT4LtjCeO/4EbA3r9sycyrYpLZL66GtpGHkeV5g4slxM1t+63cw== dependencies: lodash "^4.17.21" -"@dhis2/app-service-plugin@3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.10.2.tgz#09de64ee59017c86c8dab96a0d2ca0d915ae9d31" - integrity sha512-FqR6ILmvAXT2n1SzCZknT+5jJRdajg1dBegWAu3xqZXAntsM4wvFLCx6EtjS5LO2Kga9VZ+TJmVr2UFX1330CQ== +"@dhis2/app-service-plugin@3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.10.6.tgz#1c6792b6d051c4b3301d76d083c3364424140a83" + integrity sha512-um4ONieW+xpWfagt+QNF4ZtzzFpm8KeA9tlBomamOfhGIpi9mkCWtaY0Mw2IUWO+d0Uh4cfmeQV6w6jOX6xJzw== dependencies: post-robot "^10.0.46" -"@dhis2/app-shell@10.4.0": - version "10.4.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-shell/-/app-shell-10.4.0.tgz#66cf2148bc2e92f741f7ef0dd08ef955f2c40707" - integrity sha512-XROGP/co8IZJF//xHUY/m6EZhIh+6g4Wk/ItTgrkYnBbz69JWXB2Zo/M/b2nx3TKOKbz9FeVXVeH7liWHKkaug== +"@dhis2/app-shell@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-shell/-/app-shell-10.5.0.tgz#d8d56352147aee008bae2cbeeb4ede5e5936d80f" + integrity sha512-zXUPH/Frbq7gsd+XJ9lTwla9cTb1oUOwmakJyN+nteTPY4IihpNR9qpwixpH/J9qSW68owhl8NR+ZLLm3dHtsw== dependencies: - "@dhis2/app-adapter" "10.4.0" - "@dhis2/app-runtime" "^3.10.0-alpha.2" + "@dhis2/app-adapter" "10.5.0" + "@dhis2/app-runtime" "^3.10.2" "@dhis2/d2-i18n" "^1.1.1" - "@dhis2/pwa" "10.4.0" + "@dhis2/pwa" "10.5.0" "@dhis2/ui" "^8.12.3" classnames "^2.2.6" moment "^2.29.1" @@ -2340,9 +2506,9 @@ typescript "^3.6.3" "@dhis2/cli-app-scripts@^10.4.0": - version "10.4.0" - resolved "https://registry.yarnpkg.com/@dhis2/cli-app-scripts/-/cli-app-scripts-10.4.0.tgz#3a80ccc7c10b0804e8d76f7df40ece48d30d5f17" - integrity sha512-QMx+5UEEEb0AELzeZ5oZcxb8dv0hpzHS3/ily67oRchVdGB1K1stl0MwQF7CdbCS4ejGtU+2c5ODWFoBD0cWFA== + version "10.5.0" + resolved "https://registry.yarnpkg.com/@dhis2/cli-app-scripts/-/cli-app-scripts-10.5.0.tgz#d967963a9ea6fecfc64944c575fb5e1916ef7b5c" + integrity sha512-3FSFLLLWYQVsDGx4EsdwwiOgtbBO1+RYacvuElTUbXsgUsqs8cZafb3kBmXeb/08jANLpynJGs0xtWic+90iIQ== dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-class-properties" "^7.8.3" @@ -2351,7 +2517,7 @@ "@babel/preset-env" "^7.14.7" "@babel/preset-react" "^7.0.0" "@babel/preset-typescript" "^7.6.0" - "@dhis2/app-shell" "10.4.0" + "@dhis2/app-shell" "10.5.0" "@dhis2/cli-helpers-engine" "^3.2.0" "@jest/core" "^27.0.6" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.4" @@ -2409,9 +2575,9 @@ yargs "^13.1.0" "@dhis2/cli-helpers-engine@^3.0.0", "@dhis2/cli-helpers-engine@^3.2.0", "@dhis2/cli-helpers-engine@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-3.2.1.tgz#80d3f5b50ae223e5ed3f91550c81c30c3d7741a7" - integrity sha512-8VRM7KMuiGudogiKmpD7dfjp4Y9aSmmh1dGnTq57kdIQLw/o3CqGqz61BSw41SN/t9hxZvYAy8fBaujPAgL1sQ== + version "3.2.2" + resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-3.2.2.tgz#e3ab24d3da46c7ecb79a31cb332548ebdac72d1c" + integrity sha512-zMBm33WzYbjmb/eqIfpZS1ZZWbFaRHoHZoVhKWvOX0TDAEmdPtEmfG5fc5keV3CU9lDBIyXCfmca0KJeNvs5/w== dependencies: chalk "^3.0.0" cross-spawn "^7.0.3" @@ -2424,9 +2590,9 @@ yargs "^13.1.0" "@dhis2/cli-style@^10.4.1": - version "10.5.1" - resolved "https://registry.yarnpkg.com/@dhis2/cli-style/-/cli-style-10.5.1.tgz#cf2df63b5eb203e3e3cec867bb9ba53b0d6f2ed6" - integrity sha512-epMQFxX+A7HzivXMqX5pHSJqP/CRw94HHWOZ+ab8Ug930Y3gF8YG1QtXgfvdMFz7u+LfQlLujj+DgVa/6W5GTQ== + version "10.7.3" + resolved "https://registry.yarnpkg.com/@dhis2/cli-style/-/cli-style-10.7.3.tgz#38cd2b6672fca44d9e72c64583ce7550e123686a" + integrity sha512-uqlJwV2hegPNgxpoqWH5nZhqBSvPH2GJ0Uoeaw7OpiHKFauOFUTuUiy6MGwUZqtgEAbmcq0DbyDexNQ/UqHQLQ== dependencies: "@commitlint/cli" "^12.1.4" "@commitlint/config-conventional" "^13.1.0" @@ -2437,14 +2603,20 @@ eslint-config-prettier "^8.3.0" eslint-plugin-import "^2.22.1" eslint-plugin-react "^7.31.10" + eslint-plugin-react-hooks "^4.6.2" fast-glob "^3.2.5" find-up "^5.0.0" fs-extra "^10.0.0" husky "^7.0.2" micromatch "^4.0.4" perfy "^1.1.5" + postcss "^8.4.38" + postcss-styled-jsx "^1.0.1" + postcss-syntax "^0.36.2" prettier "^2.4.1" semver "^7.3.5" + stylelint "^16.3.1" + stylelint-use-logical "^2.1.2" yargs "^16.2.0" "@dhis2/cli-utils-cypress@^9.0.2": @@ -2457,16 +2629,16 @@ jscodeshift "^0.11.0" "@dhis2/cypress-commands@^10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-commands/-/cypress-commands-10.0.3.tgz#dae315cc839ff57965f307c2d2d34277c19592d4" - integrity sha512-K+GJtnzZGg62Qe67d/5Fl662s5VXnvhB55TTDoTcL/7Euawxyo1FC7ZrLXJExM2C1z0ic5WfZ7MH6EUsS6OfqQ== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@dhis2/cypress-commands/-/cypress-commands-10.0.6.tgz#2ef6a5bc0a737703993f63b9465d00727a1d0ff6" + integrity sha512-TNmOO5sKcz20BVcx/lEAJU0WiKX7OUZbKfAJfPzAPo875RU247YTH91FheCEPoG0o1dZrQ6IMNDhurdBV+daHQ== dependencies: jscodeshift "^0.11.0" "@dhis2/cypress-plugins@^10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-plugins/-/cypress-plugins-10.0.3.tgz#83403aca333e2b356f7ea92c272d3ca00d00276d" - integrity sha512-MYIkWI/kCR4hoqvD+spmbXcdoNL/EFX3HZuyRCGUErj5ChJmyWX7jQtDq/twd7GFRma0IqwTtOwaiKAxLRv/Nw== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@dhis2/cypress-plugins/-/cypress-plugins-10.0.6.tgz#d405f96d0de2c58b77931ef5fd212c7c263cfd49" + integrity sha512-7NjQrXPT2K6OiabVu58+ljrGpdOOe78yL1LclQlmIJRs9gT2dcWB9RrgeGSSXaY5KCeuXYG/unkF15a1u1FKbw== "@dhis2/d2-i18n@^1.1.0", "@dhis2/d2-i18n@^1.1.1", "@dhis2/d2-i18n@^1.1.3": version "1.1.3" @@ -2546,10 +2718,10 @@ recompose "^0.26.0" rxjs "^5.5.7" -"@dhis2/multi-calendar-dates@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@dhis2/multi-calendar-dates/-/multi-calendar-dates-1.2.3.tgz#ef36bc80b34eaaa7f7cefa51b443528c019ff2d2" - integrity sha512-K3E9yAH/SPXi1O7RWuK7bznYTa1v3x4Ys0ihpMWnKH++OLMx76yK/1H1m9v7NgQvMry29ATQMJh0n/vJSg+EpA== +"@dhis2/multi-calendar-dates@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@dhis2/multi-calendar-dates/-/multi-calendar-dates-2.0.0.tgz#febf04f873670960804d38c9ebaa1cadf8050db3" + integrity sha512-pxu81kkkh70tB+CyAub41ulpNJPHyxDGwH2pdcc+NUqrKu4OTQr5ScdCBL2MndShrEKj9J6qj9zKVagvvymH5w== dependencies: "@dhis2/d2-i18n" "^1.1.3" "@js-temporal/polyfill" "0.4.3" @@ -2560,10 +2732,10 @@ resolved "https://registry.yarnpkg.com/@dhis2/prop-types/-/prop-types-3.1.2.tgz#65b8ad2da8cd2f72bc8b951049a6c9d1b97af3e9" integrity sha512-eM0jjLOWvtXWqSFp5YC4DHFpkP8Y1D2eUwGV7MBWjni+o27oesVan+oT7WHeOeLdlAd4acRJrnaaAyB4Ck1wGQ== -"@dhis2/pwa@10.4.0": - version "10.4.0" - resolved "https://registry.yarnpkg.com/@dhis2/pwa/-/pwa-10.4.0.tgz#1b21b79b1a8c85aed9c73e4655e1bb1f4d3d3d95" - integrity sha512-iNq4imbSBnIv2YBkrtljsAHV/Q934ZxZVfUiffGWAAiS9gqhrD1iQ9dhCRl4nq/X71sIRR28aK7CDlwql31OrQ== +"@dhis2/pwa@10.5.0": + version "10.5.0" + resolved "https://registry.yarnpkg.com/@dhis2/pwa/-/pwa-10.5.0.tgz#356193d8fb3b151ec4e258b544c75b8a8b20cf80" + integrity sha512-+Yzm5us8rDbRCtsziriWAGLhzm+ADEqg96MMaCBbzkxYJ6L4axB3f24Y/pHMlgeXM7xtG8grHAHqo/kbz5LFSA== dependencies: idb "^6.0.0" workbox-core "^6.1.5" @@ -2571,93 +2743,110 @@ workbox-routing "^6.1.5" workbox-strategies "^6.1.5" -"@dhis2/ui-constants@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.10.1.tgz#f9491b1a5af1483b85aa43b120e4f782e15eb33d" - integrity sha512-FB1AgraRWC35lpEPAZvuJJmFqi69xwJBe3gIwHaFs8LHA9bah4yt67E8VRHvQWDrGQgyUU8uirXmG9jLQ/Fm3Q== +"@dhis2/ui-constants@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-10.0.3.tgz#c2703847dc94d727a0e7d7bb03f4f3de29f1d543" + integrity sha512-c2j2JPF/ipyg/S4yPbPa5giU01J9hNulRio9KKJ7TuAufiv7lkwy2mFRnJhHYBPD4jEKVtkSSKl1DTcKAgkeaA== dependencies: prop-types "^15.7.2" -"@dhis2/ui-forms@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.10.1.tgz#52cfc6c8d0feab615749217a37b882eea70eeeff" - integrity sha512-9LEECuQaVG6IEj4TJRgV1DvCTFZYMd20uoAn0aA8Zz1kBU+agk4OwSXlBR04A/tovD8tK32AyFEUZalkRN2oEA== - dependencies: - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/checkbox" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/file-input" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/radio" "9.10.1" - "@dhis2-ui/select" "9.10.1" - "@dhis2-ui/switch" "9.10.1" - "@dhis2-ui/text-area" "9.10.1" +"@dhis2/ui-constants@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.11.0.tgz#0f41339dca04c95d026c278d17ff795cbe500020" + integrity sha512-uN0vH+HXtnVYmFGj0fARrsouKxMTEKHmq1aGuIbxK49+AcnMtxUirqXwuYx6wc/lJTl+MqdHKGqwTgJvEJ3TGQ== + dependencies: + prop-types "^15.7.2" + +"@dhis2/ui-forms@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.11.0.tgz#4b71be63e5e671dff29a49a9cf906375d2d7ce2d" + integrity sha512-A/gL3QJByckMHeSAnLCpU5FcvBp3l+H16YpJXhNYYHXistaxPfSCwzO+VITl+MBJCi30umbe4hN/rVWjiTw60Q== + dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/file-input" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/radio" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/switch" "9.11.0" + "@dhis2-ui/text-area" "9.11.0" "@dhis2/prop-types" "^3.1.2" classnames "^2.3.1" final-form "^4.20.2" prop-types "^15.7.2" react-final-form "^6.5.3" -"@dhis2/ui-icons@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.10.1.tgz#d930ecf48e17969ba51617ff2880133266a77a46" - integrity sha512-OUnShRkXRewIfEq0EPEXR1Phc1PTZOMDATkNUiYr+6Zy1IOxENa1dmeN58mAXlZIxxFH6Fd5wQIqax/iqz40PQ== +"@dhis2/ui-icons@10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.0.3.tgz#70666c96943fdcafed99afaaaae00a16debc2e3a" + integrity sha512-ax7b+UDdGhkY2MJ/dndEs18N0qxi4IzFlu6VTF8OoGTvBflyf4KkG6jHLQY4nfdHzM5O5uY2jCETdfwWFVoUNg== + +"@dhis2/ui-icons@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.11.0.tgz#f9ca73d12b26ba3dd1a1ccb381cc3fc39ec15044" + integrity sha512-1XTls+m5xyQKDTgsQ+ehtLOgUdHqIAmKuwSkTf9/LtFpa/Wt2t9waKI7KIZYUL1MhPXSd0d9k2eEClPhseH+4Q== "@dhis2/ui@^8.12.3", "@dhis2/ui@^9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.10.1.tgz#66b8384f22eb44313fd1f34c76c8615ec5b91e76" - integrity sha512-Zb5cwoNEfi5VGySow8WA+3LE1VD9mdDMK35Fj4Wg+Q3nL9JknxUUl2cLafZaTqjytyHE2AIel/n5RyqlYtun+Q== - dependencies: - "@dhis2-ui/alert" "9.10.1" - "@dhis2-ui/box" "9.10.1" - "@dhis2-ui/button" "9.10.1" - "@dhis2-ui/calendar" "9.10.1" - "@dhis2-ui/card" "9.10.1" - "@dhis2-ui/center" "9.10.1" - "@dhis2-ui/checkbox" "9.10.1" - "@dhis2-ui/chip" "9.10.1" - "@dhis2-ui/cover" "9.10.1" - "@dhis2-ui/css" "9.10.1" - "@dhis2-ui/divider" "9.10.1" - "@dhis2-ui/field" "9.10.1" - "@dhis2-ui/file-input" "9.10.1" - "@dhis2-ui/header-bar" "9.10.1" - "@dhis2-ui/help" "9.10.1" - "@dhis2-ui/input" "9.10.1" - "@dhis2-ui/intersection-detector" "9.10.1" - "@dhis2-ui/label" "9.10.1" - "@dhis2-ui/layer" "9.10.1" - "@dhis2-ui/legend" "9.10.1" - "@dhis2-ui/loader" "9.10.1" - "@dhis2-ui/logo" "9.10.1" - "@dhis2-ui/menu" "9.10.1" - "@dhis2-ui/modal" "9.10.1" - "@dhis2-ui/node" "9.10.1" - "@dhis2-ui/notice-box" "9.10.1" - "@dhis2-ui/organisation-unit-tree" "9.10.1" - "@dhis2-ui/pagination" "9.10.1" - "@dhis2-ui/popover" "9.10.1" - "@dhis2-ui/popper" "9.10.1" - "@dhis2-ui/portal" "9.10.1" - "@dhis2-ui/radio" "9.10.1" - "@dhis2-ui/required" "9.10.1" - "@dhis2-ui/segmented-control" "9.10.1" - "@dhis2-ui/select" "9.10.1" - "@dhis2-ui/selector-bar" "9.10.1" - "@dhis2-ui/sharing-dialog" "9.10.1" - "@dhis2-ui/switch" "9.10.1" - "@dhis2-ui/tab" "9.10.1" - "@dhis2-ui/table" "9.10.1" - "@dhis2-ui/tag" "9.10.1" - "@dhis2-ui/text-area" "9.10.1" - "@dhis2-ui/tooltip" "9.10.1" - "@dhis2-ui/transfer" "9.10.1" - "@dhis2-ui/user-avatar" "9.10.1" - "@dhis2/ui-constants" "9.10.1" - "@dhis2/ui-forms" "9.10.1" - "@dhis2/ui-icons" "9.10.1" + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.11.0.tgz#da8d4791ca7bc6ceb7d681ce6b743f51dc8987a3" + integrity sha512-vO1GhzbhOHJBVPLjFHyxH4JTbcf5z8xas5iyoRry+tUzDB81CGRB4Hz9C73w8Kw6lyOicrDP/B/keKk9LpDLSQ== + dependencies: + "@dhis2-ui/alert" "9.11.0" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/calendar" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/chip" "9.11.0" + "@dhis2-ui/cover" "9.11.0" + "@dhis2-ui/css" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/file-input" "9.11.0" + "@dhis2-ui/header-bar" "9.11.0" + "@dhis2-ui/help" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/intersection-detector" "9.11.0" + "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/legend" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/logo" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/node" "9.11.0" + "@dhis2-ui/notice-box" "9.11.0" + "@dhis2-ui/organisation-unit-tree" "9.11.0" + "@dhis2-ui/pagination" "9.11.0" + "@dhis2-ui/popover" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/radio" "9.11.0" + "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/segmented-control" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/selector-bar" "9.11.0" + "@dhis2-ui/sharing-dialog" "9.11.0" + "@dhis2-ui/switch" "9.11.0" + "@dhis2-ui/tab" "9.11.0" + "@dhis2-ui/table" "9.11.0" + "@dhis2-ui/tag" "9.11.0" + "@dhis2-ui/text-area" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" + "@dhis2-ui/transfer" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-forms" "9.11.0" + "@dhis2/ui-icons" "9.11.0" prop-types "^15.7.2" +"@dual-bundle/import-meta-resolve@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" + integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== + "@emotion/is-prop-valid@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -2670,121 +2859,231 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== -"@esbuild/linux-loong64@0.14.54": - version "0.14.54" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" - integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -2833,9 +3132,9 @@ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" @@ -3133,42 +3432,42 @@ react-transition-group "^1.1.3" recompose "^0.22.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -3182,9 +3481,9 @@ tslib "^2.3.1" "@jsdoc/salty@^0.2.1": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.7.tgz#98ddce519fd95d7bee605a658fabf6e8cbf7556d" - integrity sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg== + version "0.2.8" + resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.8.tgz#8d29923a9429694a437a50ab75004b576131d597" + integrity sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg== dependencies: lodash "^4.17.21" @@ -3194,9 +3493,9 @@ integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@ls-lint/ls-lint@^1.10.0": version "1.11.2" @@ -3652,9 +3951,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -3696,7 +3995,15 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": +"@types/eslint@*": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" + integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint@^7.29.0 || ^8.4.1": version "8.56.11" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" integrity sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q== @@ -3715,9 +4022,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + version "4.19.5" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" + integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3760,9 +4067,9 @@ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.14" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" - integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== + version "1.17.15" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" + integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== dependencies: "@types/node" "*" @@ -3809,9 +4116,9 @@ indefinite-observable "^1.0.1" "@types/linkify-it@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" - integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== "@types/markdown-it@^12.2.3": version "12.2.3" @@ -3822,14 +4129,9 @@ "@types/mdurl" "*" "@types/mdurl@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" - integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/mime@^1": version "1.3.5" @@ -3849,16 +4151,16 @@ "@types/node" "*" "@types/node@*": - version "20.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.7.tgz#40fe8faf25418a75de9fe68a8775546732a3a901" - integrity sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg== + version "22.1.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" + integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== dependencies: - undici-types "~5.26.4" + undici-types "~6.13.0" "@types/node@^16.18.39": - version "16.18.70" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.70.tgz#d4c819be1e9f8b69a794d6f2fd929d9ff76f6d4b" - integrity sha512-8eIk20G5VVVQNZNouHjLA2b8utE2NvGybLjMaF4lyhA9uhGwnmXF8o+icdXKGSQSNANJewXva/sFUoZLwAaYAg== + version "16.18.104" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.104.tgz#33d5f4886c54133af0ff02445e57c5254025ee53" + integrity sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ== "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -3876,9 +4178,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== "@types/q@^1.5.1": version "1.5.8" @@ -3886,9 +4188,9 @@ integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== "@types/range-parser@*": version "1.2.7" @@ -3920,21 +4222,20 @@ "@types/react" "*" "@types/react@*": - version "18.2.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" - integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== + 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== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/react@^17": - version "17.0.74" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.74.tgz#ea93059a55e5cfc7a76e7712fe8db5317dd29ee3" - integrity sha512-nBtFGaeTMzpiL/p73xbmCi00SiCQZDTJUk9ZuHOLtil3nI+y7l269LHkHIAYpav99ZwGnPJzuJsJpfLXjiQ52g== + version "17.0.80" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" + integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" + "@types/scheduler" "^0.16" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -3949,7 +4250,7 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@*": +"@types/scheduler@^0.16": version "0.16.8" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== @@ -3975,13 +4276,13 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -4021,9 +4322,9 @@ integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== "@types/ws@^8.5.5": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -4040,9 +4341,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" @@ -4558,14 +4859,14 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-align@^3.0.0: version "3.0.1" @@ -4804,25 +5105,27 @@ array-unique@^0.3.2: integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.filter@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz#bef83fde8a36a14d3de988c43563e0f5249962bf" + integrity sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" es-array-method-boxes-properly "^1.0.0" + es-object-atoms "^1.0.0" is-string "^1.0.7" array.prototype.find@^2.1.1, array.prototype.find@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.2.2.tgz#e862cf891e725d8f2a10e5e42d750629faaabd32" - integrity sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.2.3.tgz#675a233dbcd9b65ecf1fb3f915741aebc45461e6" + integrity sha512-fO/ORdOELvjbbeIfZfzrXFMhYHGofRGqd+am9zm3tZ4GlJINj/pA2eITyfd65Vg6+ZbHd/Cys7stpoRSWtQFdA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.findlast@^1.2.5: version "1.2.5" @@ -4837,15 +5140,16 @@ array.prototype.findlast@^1.2.5: es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -4868,14 +5172,16 @@ array.prototype.flatmap@^1.3.2: es-shim-unscopables "^1.0.0" array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" is-string "^1.0.7" array.prototype.tosorted@^1.1.4: @@ -4999,15 +5305,15 @@ author-regex@^1.0.0: integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== autoprefixer@^10.4.13: - version "10.4.19" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" - integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.23.0" - caniuse-lite "^1.0.30001599" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" autosuggest-highlight@^3.3.4: @@ -5030,9 +5336,9 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.13.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.1.tgz#bb5f8b8a20739f6ae1caeaf7eea2c7913df8048e" + integrity sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA== axe-core@^4.9.1: version "4.10.0" @@ -5047,11 +5353,11 @@ axios@^0.25.0: follow-redirects "^1.14.7" axios@^1.6.1: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + version "1.7.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.3.tgz#a1125f2faf702bc8e8f2104ec3a76fab40257d85" + integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw== dependencies: - follow-redirects "^1.15.4" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -5194,44 +5500,44 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-module-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" - integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== + version "5.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz#cdeac5d4aaa3b08dd1ac23ddbf516660ed2d293e" + integrity sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg== dependencies: - find-babel-config "^2.0.0" - glob "^8.0.3" + find-babel-config "^2.1.1" + glob "^9.3.3" pkg-up "^3.1.0" reselect "^4.1.7" - resolve "^1.22.1" + resolve "^1.22.8" babel-plugin-named-asset-import@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" - integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" - integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" - integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-plugin-react-require@^3.1.3: version "3.1.3" @@ -5358,6 +5664,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + base64-arraybuffer-es6@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz#dbe1e6c87b1bf1ca2875904461a7de40f21abc86" @@ -5424,9 +5735,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3: version "4.1.0" @@ -5542,12 +5853,12 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brcast@^3.0.1: version "3.0.2" @@ -5573,14 +5884,14 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" - integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001640" - electron-to-chromium "^1.4.820" - node-releases "^2.0.14" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" update-browserslist-db "^1.1.0" bser@2.1.1: @@ -5729,10 +6040,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: - version "1.0.30001644" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz#bcd4212a7a03bdedba1ea850b8a72bfe4bec2395" - integrity sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646: + version "1.0.30001651" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" + integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== capital-case@^1.0.4: version "1.0.4" @@ -5857,9 +6168,9 @@ cheerio@^1.0.0-rc.3: parse5-htmlparser2-tree-adapter "^7.0.0" chokidar@^3.3.0, chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -5877,9 +6188,9 @@ chownr@^1.1.4: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^2.0.0: version "2.0.0" @@ -5892,9 +6203,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== class-autobind@^0.1.4: version "0.1.4" @@ -5945,7 +6256,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@0.6.3, cli-table3@~0.6.1: +cli-table3@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== @@ -5954,6 +6265,15 @@ cli-table3@0.6.3, cli-table3@~0.6.1: optionalDependencies: "@colors/colors" "1.5.0" +cli-table3@~0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cli-table@^0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" @@ -6111,7 +6431,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.9.1: +colord@^2.9.1, colord@^2.9.3: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== @@ -6371,17 +6691,17 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.35.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" - integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== +core-js-compat@^3.37.1, core-js-compat@^3.38.0: + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" + integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.3" core-js-pure@^3.23.3: - version "3.35.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.0.tgz#4660033304a050215ae82e476bd2513a419fbb34" - integrity sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew== + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.38.0.tgz#bc802cd152e33d5b0ec733b656c71cb847cac701" + integrity sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ== core-js@2.5.7, core-js@^1.0.0, core-js@^2.4.0, core-js@^3.19.2, core-js@^3.6.4: version "2.5.7" @@ -6430,6 +6750,16 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: parse-json "^5.2.0" path-type "^4.0.0" +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -6506,6 +6836,11 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== +css-functions-list@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== + css-has-pseudo@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" @@ -6614,6 +6949,14 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@^2.3.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-vendor@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" @@ -6889,9 +7232,9 @@ date-fns@^2.30.0: "@babel/runtime" "^7.21.0" dayjs@^1.10.4: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + version "1.11.12" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" + integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== debounce@^1.1.0: version "1.2.1" @@ -6905,10 +7248,10 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" @@ -7106,9 +7449,9 @@ detect-port-alt@^1.1.6: debug "^2.6.0" detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + version "1.6.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== dependencies: address "^1.0.1" debug "4" @@ -7474,10 +7817,10 @@ ejs@^3.1.5, ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.820: - version "1.5.3" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz#032bbb8661c0449656fd896e805c8f7150229a0f" - integrity sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA== +electron-to-chromium@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz#03bfdf422bdd2c05ee2657efedde21264a1a566b" + integrity sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA== emittery@^0.10.2: version "0.10.2" @@ -7588,40 +7931,45 @@ entities@~2.1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + enzyme-adapter-react-16@^1.15.6: - version "1.15.7" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz#a737e6d8e2c147e9da5acf957755be7634f76201" - integrity sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw== + version "1.15.8" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.8.tgz#1aecb5daadaae33d32c5b8b78566d7cf45dc49d8" + integrity sha512-uYGC31eGZBp5nGsr4nKhZKvxGQjyHGjS06BJsUlWgE29/hvnpgCsT1BJvnnyny7N3GIIVyxZ4O9GChr6hy2WQA== dependencies: - enzyme-adapter-utils "^1.14.1" - enzyme-shallow-equal "^1.0.5" - has "^1.0.3" - object.assign "^4.1.4" - object.values "^1.1.5" + enzyme-adapter-utils "^1.14.2" + enzyme-shallow-equal "^1.0.7" + hasown "^2.0.0" + object.assign "^4.1.5" + object.values "^1.1.7" prop-types "^15.8.1" react-is "^16.13.1" react-test-renderer "^16.0.0-0" - semver "^5.7.0" + semver "^5.7.2" -enzyme-adapter-utils@^1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz#f30db15dafc22e0ccd44f5acc8d93be29218cdcf" - integrity sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ== +enzyme-adapter-utils@^1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.2.tgz#1d012e6261accbe7d406db098bb4d8dfdce8c003" + integrity sha512-1ZC++RlsYRaiOWE5NRaF5OgsMt7F5rn/VuaJIgc7eW/fmgg8eS1/Ut7EugSPPi7VMdWMLcymRnMF+mJUJ4B8KA== dependencies: airbnb-prop-types "^2.16.0" - function.prototype.name "^1.1.5" - has "^1.0.3" - object.assign "^4.1.4" - object.fromentries "^2.0.5" + function.prototype.name "^1.1.6" + hasown "^2.0.0" + object.assign "^4.1.5" + object.fromentries "^2.0.7" prop-types "^15.8.1" - semver "^5.7.1" + semver "^6.3.1" -enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz#5528a897a6ad2bdc417c7221a7db682cd01711ba" - integrity sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg== +enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz#4e3aa678022387a68e6c47aff200587851885b5e" + integrity sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg== dependencies: - has "^1.0.3" + hasown "^2.0.0" object-is "^1.1.5" enzyme@^3.11.0: @@ -7676,7 +8024,7 @@ error-stack-parser@^2.0.6, error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -7781,9 +8129,9 @@ es-iterator-helpers@^1.0.19: safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== es-object-atoms@^1.0.0: version "1.0.0" @@ -7792,7 +8140,7 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.1, es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -7817,133 +8165,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild-android-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" - integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== - -esbuild-android-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" - integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== - -esbuild-darwin-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" - integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== - -esbuild-darwin-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" - integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== - -esbuild-freebsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" - integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== - -esbuild-freebsd-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" - integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== - -esbuild-linux-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" - integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== - -esbuild-linux-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" - integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== - -esbuild-linux-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" - integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== - -esbuild-linux-arm@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" - integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== - -esbuild-linux-mips64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" - integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== - -esbuild-linux-ppc64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" - integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== - -esbuild-linux-riscv64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" - integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== - -esbuild-linux-s390x@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" - integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== - -esbuild-netbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" - integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== - -esbuild-openbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" - integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== - -esbuild-sunos-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" - integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== - -esbuild-windows-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" - integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== - -esbuild-windows-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" - integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== - -esbuild-windows-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" - integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== - -esbuild@^0.14.23: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" - integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== - optionalDependencies: - "@esbuild/linux-loong64" "0.14.54" - esbuild-android-64 "0.14.54" - esbuild-android-arm64 "0.14.54" - esbuild-darwin-64 "0.14.54" - esbuild-darwin-arm64 "0.14.54" - esbuild-freebsd-64 "0.14.54" - esbuild-freebsd-arm64 "0.14.54" - esbuild-linux-32 "0.14.54" - esbuild-linux-64 "0.14.54" - esbuild-linux-arm "0.14.54" - esbuild-linux-arm64 "0.14.54" - esbuild-linux-mips64le "0.14.54" - esbuild-linux-ppc64le "0.14.54" - esbuild-linux-riscv64 "0.14.54" - esbuild-linux-s390x "0.14.54" - esbuild-netbsd-64 "0.14.54" - esbuild-openbsd-64 "0.14.54" - esbuild-sunos-64 "0.14.54" - esbuild-windows-32 "0.14.54" - esbuild-windows-64 "0.14.54" - esbuild-windows-arm64 "0.14.54" - esbuild@^0.17.18: version "0.17.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" @@ -7972,6 +8193,35 @@ esbuild@^0.17.18: "@esbuild/win32-ia32" "0.17.19" "@esbuild/win32-x64" "0.17.19" +esbuild@^0.19.4: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -8111,9 +8361,9 @@ eslint-import-resolver-webpack@^0.13.2: semver "^5.7.2" eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -8198,7 +8448,7 @@ eslint-plugin-jsx-a11y@^6.5.1: safe-regex-test "^1.0.3" string.prototype.includes "^2.0.0" -eslint-plugin-react-hooks@4.6.2, eslint-plugin-react-hooks@^4.3.0: +eslint-plugin-react-hooks@4.6.2, eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== @@ -8679,7 +8929,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -8700,10 +8950,20 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -8774,6 +9034,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-entry-cache@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.0.0.tgz#4478e7ceaa5191fa9676a2daa7030211c31b1e7e" + integrity sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw== + dependencies: + flat-cache "^5.0.0" + file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -8820,10 +9087,10 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -8852,12 +9119,12 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-babel-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" - integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== +find-babel-config@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.1.1.tgz#93703fc8e068db5e4c57592900c5715dd04b7e5b" + integrity sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA== dependencies: - json5 "^2.1.1" + json5 "^2.2.3" path-exists "^4.0.0" find-cache-dir@^2.0.0: @@ -8930,10 +9197,18 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flat-cache@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-5.0.0.tgz#26c4da7b0f288b408bb2b506b2cb66c240ddf062" + integrity sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ== + dependencies: + flatted "^3.3.1" + keyv "^4.5.4" + +flatted@^3.2.9, flatted@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flow-bin@^0.132.0: version "0.132.0" @@ -8941,9 +9216,9 @@ flow-bin@^0.132.0: integrity sha512-S1g/vnAyNaLUdajmuUHCMl30qqye12gS6mr4LVyswf1k+JDF4efs6SfKmptuvnpitF3LGCVf0TIffChP8ljwnw== flow-parser@0.*: - version "0.226.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.226.0.tgz#d552ab6762342e0e2b112fc937dd70b59e5e5d05" - integrity sha512-YlH+Y/P/5s0S7Vg14RwXlJMF/JsGfkG7gcKB/zljyoqaPNX9YVsGzx+g6MLTbhZaWbPhs4347aTpmSb9GgiPtw== + version "0.243.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.243.0.tgz#4a55047035a4fa0fa7215348b9d7b4ea276abb04" + integrity sha512-HCDBfH+kZcY5etWYeAqatjW78gkIryzb9XixRsA8lGI1uyYc7aCpElkkO4H+KIpoyQMiY0VAZPI4cyac3wQe8w== flush-write-stream@^1.0.2: version "1.1.1" @@ -8953,7 +9228,7 @@ flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.15.4: +follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -8978,9 +9253,9 @@ for-own@^0.1.4: for-in "^1.0.1" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -9107,9 +9382,9 @@ fs-mkdirp-stream@^1.0.0: through2 "^2.0.3" fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== fs.realpath@^1.0.0: version "1.0.0" @@ -9126,7 +9401,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.2, function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.2, function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -9179,7 +9454,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -9354,16 +9629,15 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +glob@^9.3.3: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== dependencies: fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" glob@~7.1.1: version "7.1.7" @@ -9425,11 +9699,12 @@ globals@^9.18.0: integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: version "11.1.0" @@ -9443,6 +9718,11 @@ globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== + globule@^1.0.0: version "1.3.4" resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" @@ -9725,9 +10005,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== html-escaper@^2.0.0: version "2.0.2" @@ -9747,6 +10027,11 @@ html-minifier-terser@^6.0.2: relateurl "^0.2.7" terser "^5.10.0" +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + html-webpack-plugin@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" @@ -9902,9 +10187,9 @@ husky@^8.0.1: integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436" + integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw== i18next-conv@^9: version "9.2.1" @@ -9997,10 +10282,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^5.1.8, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^9.0.7: version "9.0.21" @@ -10031,9 +10316,9 @@ import-lazy@^2.1.0: integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -10142,9 +10427,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-absolute@^1.0.0: version "1.0.0" @@ -10236,11 +10521,11 @@ is-ci@^3.0.0: ci-info "^3.2.0" is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-data-descriptor@^1.0.1: version "1.0.1" @@ -10394,10 +10679,10 @@ is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-module@^1.0.0: version "1.0.0" @@ -10489,6 +10774,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -10529,10 +10819,10 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" @@ -10611,10 +10901,10 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -10623,13 +10913,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -10746,9 +11036,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -10774,9 +11064,9 @@ jackspeak@^3.1.2: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== dependencies: async "^3.2.3" chalk "^4.0.2" @@ -11271,9 +11561,9 @@ jiti@^1.20.0, jiti@^1.21.0: integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== joi@^17.11.0: - version "17.12.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" - integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -11490,7 +11780,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: +json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -11756,7 +12046,7 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -keyv@^4.5.3: +keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -11799,6 +12089,11 @@ klona@^2.0.4, klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== +known-css-properties@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.34.0.tgz#ccd7e9f4388302231b3f174a8b1d5b1f7b576cea" + integrity sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ== + knuth-shuffle-seeded@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz#01f1b65733aa7540ee08d8b0174164d22081e4e1" @@ -11807,9 +12102,9 @@ knuth-shuffle-seeded@^1.0.6: seed-random "~2.2.0" language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" @@ -11826,9 +12121,9 @@ latest-version@^5.0.0: package-json "^6.3.0" launch-editor@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" + integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -11961,9 +12256,9 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: json5 "^2.1.2" loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== locate-path@^2.0.0: version "2.0.0" @@ -12312,12 +12607,12 @@ marked@^4.0.10: integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== match-sorter@^6.0.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== + version "6.3.4" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" + integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" + "@babel/runtime" "^7.23.8" + remove-accents "0.5.0" material-ui@^0.20.0: version "0.20.2" @@ -12341,11 +12636,21 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +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== + mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" @@ -12373,6 +12678,11 @@ memory-fs@^0.2.0: resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== +meow@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" + integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -12448,12 +12758,12 @@ micromatch@^3.1.10: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" microseconds@0.2.0: @@ -12461,11 +12771,16 @@ microseconds@0.2.0: resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -12520,6 +12835,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -12556,6 +12878,11 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" @@ -12759,10 +13086,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -12852,9 +13179,9 @@ nth-check@^2.0.1: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.12" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" + integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== oauth-sign@~0.9.0: version "0.9.0" @@ -12881,17 +13208,17 @@ object-hash@^3.0.0: integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.13.1, object-inspect@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.0.2, object-is@^1.1.2, object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" @@ -12924,7 +13251,7 @@ object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.5, object.fromentries@^2.0.7, object.fromentries@^2.0.8: +object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -12935,25 +13262,26 @@ object.fromentries@^2.0.5, object.fromentries@^2.0.7, object.fromentries@^2.0.8: es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.1.0: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" object.omit@^2.0.0: version "2.0.1" @@ -12970,7 +13298,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.5, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -13323,7 +13651,7 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.11.1: +path-scurry@^1.11.1, path-scurry@^1.6.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -13975,6 +14303,16 @@ postcss-replace-overflow-wrap@^4.0.0: resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== +postcss-resolve-nested-selector@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz#799bce8b8cfc46958020dc1335a146abf951cbf6" + integrity sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA== + +postcss-safe-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" + integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== + postcss-selector-not@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" @@ -13990,6 +14328,11 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-styled-jsx@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-styled-jsx/-/postcss-styled-jsx-1.0.1.tgz#07c17ca3bc574a06627103bb5dd475006c2d0d9e" + integrity sha512-508Vg2A0pHQstRxz8eoNYiT+RiCZdgE4EqN0x8oiPIZ/a6pp5q2NYefL39RRG8ORlxDehLHU3u/EOpux0kuATQ== + postcss-svgo@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" @@ -13998,6 +14341,11 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" +postcss-syntax@^0.36.2: + version "0.36.2" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" + integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== + postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" @@ -14018,10 +14366,10 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.4: - version "8.4.40" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8" - integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q== +postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.4, postcss@^8.4.40: + version "8.4.41" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" @@ -14122,13 +14470,16 @@ prompts@^2.0.1, prompts@^2.4.2: sisteransi "^1.0.5" prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + version "1.2.5" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.5.tgz#f275e7dc0d629c2f7414782e8189b3e2d2e9e158" + integrity sha512-wHDhA5TSSvU07gdzsdeT/FZg6zay94K4Y7swSK4YsRG3moWB0Qsp9g1Y5BBausP1HF8K4UeVe2Xt7ZFJByKp6A== dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + hasown "^2.0.2" + isarray "^2.0.5" + object.assign "^4.1.5" + reflect.ownkeys "^1.1.4" prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" @@ -14899,21 +15250,28 @@ reflect-metadata@0.1.13: integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +reflect.ownkeys@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-1.1.4.tgz#3cf21da448f2aff8aba63ca601f65c99482e692c" + integrity sha512-iUNmtLgzudssL+qnTUosCmnq3eczlrVd1wXrgx/GhiI/8FvwrTYWtCJ9PNvWIRX+4ftupj2WUfB5mu5s9t6LnA== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + es-set-tostringtag "^2.0.1" globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg== regenerate-unicode-properties@^10.1.0: version "10.1.1" @@ -15034,10 +15392,10 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== remove-accents@^0.4.2: version "0.4.4" @@ -15243,7 +15601,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -15292,9 +15650,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -15368,7 +15726,7 @@ rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.1.2: +safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -15509,7 +15867,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1, semver@^5.7.2: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.6.0, semver@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -15898,9 +16256,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -15911,9 +16269,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== spdy-transport@^3.0.0: version "3.0.0" @@ -16027,9 +16385,9 @@ stop-iteration-iterator@^1.0.0: internal-slot "^1.0.4" stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== strict-uri-encode@^2.0.0: version "2.0.0" @@ -16231,7 +16589,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -16288,9 +16646,9 @@ strip-json-comments@~2.0.1: integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-loader@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== styled-jsx@^4, styled-jsx@^4.0.1: version "4.0.1" @@ -16314,6 +16672,56 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +stylelint-use-logical@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/stylelint-use-logical/-/stylelint-use-logical-2.1.2.tgz#60296915cc27aa1292fbff9a29391c9a1d877563" + integrity sha512-4ffvPNk/swH4KS3izExWuzQOuzLmi0gb0uOhvxWJ20vDA5W5xKCjcHHtLoAj1kKvTIX6eGIN5xGtaVin9PD0wg== + +stylelint@^16.3.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.8.1.tgz#7d4b2d7922771dd0514446a66f04e954f1dfa444" + integrity sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA== + dependencies: + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/media-query-list-parser" "^2.1.13" + "@csstools/selector-specificity" "^3.1.1" + "@dual-bundle/import-meta-resolve" "^4.1.0" + balanced-match "^2.0.0" + colord "^2.9.3" + cosmiconfig "^9.0.0" + css-functions-list "^3.2.2" + css-tree "^2.3.1" + debug "^4.3.6" + fast-glob "^3.3.2" + fastest-levenshtein "^1.0.16" + file-entry-cache "^9.0.0" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.3.1" + ignore "^5.3.1" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.34.0" + mathml-tag-names "^2.1.3" + meow "^13.2.0" + micromatch "^4.0.7" + normalize-path "^3.0.0" + picocolors "^1.0.1" + postcss "^8.4.40" + postcss-resolve-nested-selector "^0.1.4" + postcss-safe-parser "^7.0.0" + postcss-selector-parser "^6.1.1" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + string-width "^4.2.3" + strip-ansi "^7.1.0" + supports-hyperlinks "^3.0.0" + svg-tags "^1.0.0" + table "^6.8.2" + write-file-atomic "^5.0.1" + stylis-rule-sheet@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -16371,6 +16779,14 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-hyperlinks@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" + integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -16381,6 +16797,11 @@ svg-parser@^2.0.2: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + svgo@^1.2.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -16433,10 +16854,10 @@ synthetic-dom@^1.4.0: resolved "https://registry.yarnpkg.com/synthetic-dom/-/synthetic-dom-1.4.0.tgz#d988d7a4652458e2fc8706a875417af913e4dd34" integrity sha512-mHv51ZsmZ+ShT/4s5kg+MGUIhY7Ltq4v03xpN1c8T1Krb5pScsh/lzEjyhrVD0soVDbThbd2e+4dD9vnDG4rhg== -table@^6.0.9: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== +table@^6.0.9, table@^6.8.2: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -16450,9 +16871,9 @@ taffydb@2.6.2: integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA== tailwindcss@^3.0.2: - version "3.4.7" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" - integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== + version "3.4.9" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.9.tgz#9e04cddce1924d530df62af37d3520f0e2a9d85e" + integrity sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -16573,9 +16994,9 @@ terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.1, terser-webpack-plugi terser "^5.26.0" terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: - version "5.26.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" - integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== + version "5.31.5" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.5.tgz#e48b7c65f32d2808e7dad803e4586a0bc3829b87" + integrity sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -16647,14 +17068,13 @@ throttleit@^1.0.0: integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.1.0.tgz#4a1b45d2b76b3ac93ec137951e372c268efc1a4e" + integrity sha512-VhZsTsfrIJjyUi6GeecnwcOJlmoqgIdGFDjqnV5ape+F1DN8GejfPO66XyIhoinxmxGImiUTrq9RwpTN5yszGA== dependencies: - through2 "~2.0.0" - xtend "~4.0.0" + through2 "^4.0.2" -through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: +through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -16670,7 +17090,7 @@ through2@^3.0.1: inherits "^2.0.4" readable-stream "2 || 3" -through2@^4.0.0: +through2@^4.0.0, through2@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== @@ -16693,9 +17113,9 @@ tiny-case@^1.0.3: integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" @@ -16710,11 +17130,9 @@ tmp@^0.0.33: os-tmpdir "~1.0.2" tmp@^0.2.1, tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== tmpl@1.0.5: version "1.0.5" @@ -16794,9 +17212,9 @@ toposort@^2.0.2: integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== tough-cookie@^4.0.0, tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -16871,9 +17289,9 @@ tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tslib@~2.1.0: version "2.1.0" @@ -17052,9 +17470,9 @@ typeson@^6.0.0, typeson@^6.1.0: integrity sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== ua-parser-js@^0.7.18, ua-parser-js@^0.7.30: - version "0.7.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.37.tgz#e464e66dac2d33a7a1251d7d7a99d6157ec27832" - integrity sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA== + version "0.7.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.38.tgz#f497d8a4dc1fec6e854e5caa4b2f9913422ef054" + integrity sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -17062,9 +17480,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + version "3.19.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.1.tgz#2d5df6a0872c43da43187968308d7741d44b8056" + integrity sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A== unbox-primitive@^1.0.2: version "1.0.2" @@ -17087,14 +17505,14 @@ underscore@1.12.1: integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== underscore@~1.13.2: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== undici@^5.25.4: version "5.28.4" @@ -17693,12 +18111,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -17707,25 +18125,25 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -18005,15 +18423,23 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + ws@^7.4.6: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== xdg-basedir@^3.0.0: version "3.0.0" @@ -18040,7 +18466,7 @@ xmlcreate@^2.0.4: resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== -xtend@~4.0.0, xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From 1ce3a7823fda076a9c6294bd6f9685938dc8949c Mon Sep 17 00:00:00 2001 From: henrikmv Date: Thu, 5 Dec 2024 10:26:53 +0100 Subject: [PATCH 13/19] Revert "Merge remote-tracking branch 'origin/master' into hv/feat/DHIS2-18017_AbilityToUnlinkEvent" This reverts commit e3284e970b1a833f2dfda06a00ed5e1095132496. --- CHANGELOG.md | 85 - .../EnrollmentAddEventPageForm.feature | 6 +- .../EnrollmentAddEventPageNavigation.feature | 2 +- .../e2e/EnrollmentAddEventPage/sharedSteps.js | 6 +- .../EnrollmentEditEventPageForm.feature | 36 +- .../EnrollmentEditEventPageForm.js | 20 +- .../EnrollmentEditEventPageNavigation.feature | 12 +- .../EnrollmentEditEventPageNavigation.js | 15 +- .../EnrollmentPageNavigation.js | 11 +- .../EnrollmentQuickActions.js | 8 +- cypress/e2e/EnrollmentPage/sharedSteps.js | 4 - cypress/e2e/NewPage/NewPage.js | 8 +- .../e2e/ScopeSelector/ScopeSelector.feature | 18 +- cypress/e2e/ScopeSelector/ScopeSelector.js | 12 +- .../e2e/TopBarActions/TopBarActions.feature | 4 +- cypress/e2e/TopBarActions/TopBarActions.js | 8 +- .../WidgetAssignee/index.js | 3 +- .../WidgetEventNote/index.js | 8 +- .../WidgetsForEnrollmentAddEventPage.js | 4 +- .../WidgetsForEnrollmentDashboard.js | 4 +- .../EventBulkActions/EventBulkAction.feature | 49 - .../EventBulkActions/EventBulkAction.js | 73 - .../EventWorkingListsUser.js | 20 +- .../TeiBulkActions/TeiBulkActions.feature | 92 - .../TeiBulkActions/TeiBulkActions.js | 284 -- cypress/e2e/WorkingLists/sharedSteps.js | 79 +- .../event-bulk-actions-selected-rows.png | Bin 126931 -> 0 bytes ...tity-bulk-actions-complete-enrollments.png | Bin 148631 -> 0 bytes ...entity-bulk-actions-delete-enrollments.png | Bin 159251 -> 0 bytes ...cked-entity-bulk-actions-selected-rows.png | Bin 128972 -> 0 bytes docs/user/using-the-capture-app.md | 42 - i18n/cs.po | 57 +- i18n/en.pot | 254 +- i18n/es.po | 25 +- i18n/es_419.po | 17 +- i18n/lo.po | 19 +- i18n/nb.po | 19 +- i18n/nl.po | 15 +- i18n/pt.po | 216 +- i18n/ru.po | 14 +- i18n/zh.po | 23 +- i18n/zh_CN.po | 10 +- package.json | 6 +- packages/rules-engine/package.json | 2 +- .../featuresSupport/support.js | 2 - .../EnrollmentBreadcrumb.js | 171 - .../hooks/useWorkingListLabel.js | 60 - .../Breadcrumbs/EnrollmentBreadcrumb/index.js | 3 - .../EventBreadcrumb/EventBreadcrumb.js | 106 - .../hooks/useWorkingListLabel.js | 40 - .../Breadcrumbs/EventBreadcrumb/index.js | 3 - .../Breadcrumbs/common/BreadcrumbItem.js | 47 - .../SingleEventRegistrationEntry.component.js | 1 + .../SingleEventRegistrationEntry.container.js | 3 +- .../Date/DateFilter.component.js | 142 +- .../Date/DateFilterManager.component.js | 12 +- .../FiltersForTypes/Date/End.component.js | 7 + .../FiltersForTypes/Date/From.component.js | 43 +- .../Date/RangeFilter.component.js | 6 + .../FiltersForTypes/Date/To.component.js | 46 +- .../Date/dateFilterDataGetter.js | 8 +- .../FiltersForTypes/Date/types/date.types.js | 6 - .../FiltersForTypes/Date/types/index.js | 2 +- .../Numeric/NumericFilter.component.js | 6 - .../DateAndTime/D2Date/D2Date.component.js | 207 +- .../D2Date/D2DateCalendar.component.js | 158 + .../D2Date/D2DatePopup.component.js | 94 + .../DateAndTime/D2Date/customStyles.css | 12 + .../DateAndTime/D2Date/d2DatePopup.const.js | 16 + .../FormFields/DateAndTime/D2Date/getTheme.js | 14 + .../FormFields/Options/FormGroup.component.js | 2 - .../List/OnlineList/OnlineList.component.js | 62 +- .../ListViewContextBuilder.component.js | 10 - .../ListView/Main/ListViewMain.component.js | 36 +- .../ListView/Main/listViewMain.types.js | 8 +- .../ListView/types/listView.types.js | 15 +- .../EnrollmentPageDefault.container.js | 29 +- .../EnrollmentPageDefault.types.js | 11 +- ...EnrollmentAddEventPageDefault.container.js | 23 +- .../EnrollmentAddEventPageDefault.types.js | 9 +- .../EnrollmentEditEventPage.component.js | 8 - .../EnrollmentEditEventPage.container.js | 28 +- .../EnrollmentEditEventPage.types.js | 7 +- .../PageLayout/DefaultPageLayout.constants.js | 4 + .../EventDetailsSection.component.js | 3 - .../EventDetailsSection.container.js | 1 - .../ViewEventComponent/ViewEvent.component.js | 68 +- .../ViewEventComponent/ViewEvent.container.js | 7 +- .../ViewEvent/ViewEventPage.component.js | 1 - .../DefaultEnrollmentLayout.constants.js | 8 + .../DefaultEnrollmentLayout.types.js | 1 + .../EnrollmentPageLayout.js | 56 +- .../WidgetEventEditWrapper.js | 24 +- .../Pagination/withDefaultNavigation.js | 9 +- .../Pagination/withRowsPerPageSelector.js | 4 +- .../ScopeSelector/hooks/useSetProgramId.js | 2 +- .../DataEntry/fieldValidators/index.js | 5 - .../orgUnit.validatorContainersGetter.js | 15 - .../EventChangelogWrapper.component.js | 3 +- .../EventChangelogWrapper.types.js | 1 - .../ViewEventDataEntry.component.js | 24 +- .../viewEventDataEntry.actions.js | 7 +- .../WidgetEventEdit.container.js | 216 +- .../WidgetHeader/WidgetHeader.container.js | 129 - .../WidgetHeader/WidgetHeader.types.js | 16 - .../WidgetEventEdit/WidgetHeader/index.js | 2 - .../OverflowMenu/OverflowMenu.component.js | 2 - .../OverflowMenu/OverflowMenu.container.js | 2 - .../OverflowMenu/OverflowMenu.types.js | 2 - ...TrackedEntityChangelogWrapper.component.js | 8 +- .../TrackedEntityChangelogWrapper.types.js | 1 - .../WidgetProfile/WidgetProfile.component.js | 1 - .../Stages/Stage/StageDetail/hooks/helpers.js | 7 +- .../WidgetHeader/WidgetHeader.container.js | 63 - .../WidgetHeader/WidgetHeader.types.js | 21 - .../WidgetHeader/index.js | 2 - .../WidgetTwoEventWorkspace.container.js | 110 +- .../WidgetTwoEventWorkspace.types.js | 12 +- .../WidgetTwoEventWorkspaceWrapper.const.js | 5 - .../WidgetWrapper/WidgetWrapper.container.js | 74 - .../WidgetWrapper/WidgetWrapper.types.js | 15 - .../WidgetWrapper/index.js | 2 - .../WidgetTwoEventWorkspace/index.js | 1 - .../WidgetEventChangelog.js | 3 - .../WidgetTrackedEntityChangelog.js | 3 - .../common/Changelog/Changelog.container.js | 30 +- .../ChangelogCells/ChangelogValueCell.js | 31 +- .../ChangelogTable/ChangelogTableRow.js | 4 +- .../WidgetsChangelog/common/hooks/index.js | 1 - .../common/hooks/useChangelogData.js | 92 +- .../common/hooks/useListDataValues.js | 177 - .../utils/getSubValueForChangelogData.js | 148 - ...ventWorkingListsReduxProvider.container.js | 4 +- .../eventWorkingListsReduxProvider.types.js | 2 +- ...ventWorkingListsUpdateTrigger.component.js | 7 +- ...ventWorkingListsViewMenuSetup.component.js | 50 +- .../EventWorkingListsViewMenuSetup.types.js | 7 - .../Actions/CompleteAction/CompleteAction.js | 169 - .../hooks/useBulkCompleteEvents.js | 141 - .../Actions/DeleteAction/DeleteAction.js | 102 - .../EventBulkActions/Actions/index.js | 4 - .../EventBulkActions/EventBulkActions.js | 47 - .../EventBulkActions/index.js | 3 - .../TeiWorkingListsReduxProvider.container.js | 4 +- .../teiWorkingListsReduxProvider.types.js | 2 +- .../Setup/TeiWorkingListsSetup.component.js | 10 +- .../Setup/teiWorkingListsSetup.types.js | 3 +- .../Actions/CompleteAction/CompleteAction.js | 239 - .../hooks/useCompleteBulkEnrollments.js | 267 -- .../Actions/CompleteAction/index.js | 3 - .../DeleteEnrollmentsAction.js | 56 - .../CustomCheckbox/CustomCheckbox.js | 80 - .../CustomCheckbox/index.js | 3 - .../EnrollmentDeleteModal.js | 188 - .../EnrollmentDeleteModal/index.js | 3 - .../hooks/useDeleteEnrollments.js | 159 - .../Actions/DeleteEnrollmentsAction/index.js | 3 - .../DeleteTeiAction/DeleteTeiAction.js | 87 - .../hooks/useCascadeDeleteTei.js | 51 - .../Actions/DeleteTeiAction/index.js | 3 - .../TrackedEntityBulkActions/Actions/index.js | 4 - .../TrackedEntityBulkActions.component.js | 51 - .../TrackedEntityBulkActions.container.js | 40 - .../TrackedEntityBulkActions.types.js | 17 - .../TrackedEntityBulkActions/index.js | 3 - ...ckerWorkingListsViewMenuSetup.component.js | 45 +- .../TrackerWorkingListsViewMenuSetup.types.js | 13 - .../BulkActionBar/BulkActionBar.component.js | 50 - .../BulkActionBar/BulkActionBar.container.js | 19 - .../BulkActionBar/BulkActionBar.types.js | 16 - .../BulkActionBar/hooks/index.js | 3 - .../hooks/useSelectedRowsController.js | 66 - .../WorkingListsBase/BulkActionBar/index.js | 4 - ...istViewBuilderContextProvider.component.js | 28 +- ...stsListViewBuilderContextProvider.types.js | 24 +- .../WorkingListsContextBuilder.component.js | 23 +- .../workingListsContextBuilder.types.js | 11 +- .../ListViewBuilder.component.js | 12 +- .../TemplateSelector.component.js | 3 - .../TemplateSelectorChip.component.js | 9 +- .../TemplatesLoader/templatesLoader.types.js | 5 - .../TemplatesManager.component.js | 10 +- .../workingListsBase.types.js | 30 +- .../useWorkingListsCommonStateManagement.js | 1 - .../capture-core/converters/clientToView.js | 8 +- .../utils/userInfo/useAuthority.js | 27 - yarn.lock | 4094 ++++++++--------- 187 files changed, 3282 insertions(+), 7507 deletions(-) delete mode 100644 cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature delete mode 100644 cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js delete mode 100644 cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature delete mode 100644 cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js delete mode 100644 docs/user/resources/images/event-bulk-actions-selected-rows.png delete mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png delete mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png delete mode 100644 docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js delete mode 100644 src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js create mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js create mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js create mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css create mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js create mode 100644 src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js delete mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js delete mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js delete mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js delete mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js delete mode 100644 src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js delete mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js delete mode 100644 src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js delete mode 100644 src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js delete mode 100644 src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js delete mode 100644 src/core_modules/capture-core/utils/userInfo/useAuthority.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 37492757dc..5ec4072b5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,88 +1,3 @@ -# [101.18.0](https://github.com/dhis2/capture-app/compare/v101.17.0...v101.18.0) (2024-11-28) - - -### Features - -* [DHIS2-16337] Org unit in view event page ([#3882](https://github.com/dhis2/capture-app/issues/3882)) ([c605e82](https://github.com/dhis2/capture-app/commit/c605e828622aa9f9b0c10f96359ba1b037c8e0ee)) - -# [101.17.0](https://github.com/dhis2/capture-app/compare/v101.16.7...v101.17.0) (2024-11-25) - - -### Features - -* [DHIS2-15463] Use dhis2 ui calendarInput component in working list ([#3712](https://github.com/dhis2/capture-app/issues/3712)) ([5f27455](https://github.com/dhis2/capture-app/commit/5f27455b136d6d994adea0788bf2d0683dfe5d06)) - -## [101.16.7](https://github.com/dhis2/capture-app/compare/v101.16.6...v101.16.7) (2024-11-25) - - -### Bug Fixes - -* [DHIS2-16801] events scheduled for today's date not showing today ([#3856](https://github.com/dhis2/capture-app/issues/3856)) ([d63e124](https://github.com/dhis2/capture-app/commit/d63e124d1c0702898b453be8cfbdd0a5f4620ba5)) - -## [101.16.6](https://github.com/dhis2/capture-app/compare/v101.16.5...v101.16.6) (2024-11-25) - - -### Bug Fixes - -* [DHIS2-17519] app crashing when opening new event from view event ([#3781](https://github.com/dhis2/capture-app/issues/3781)) ([93366ef](https://github.com/dhis2/capture-app/commit/93366ef504210cc9aa746f7d10a4cc7d6188586d)) -* [DHIS2-18150] user has to click out of range filter for update button to trigger ([#3855](https://github.com/dhis2/capture-app/issues/3855)) ([f70b205](https://github.com/dhis2/capture-app/commit/f70b2053f753388e994c89698677821fd8032f79)) - -## [101.16.5](https://github.com/dhis2/capture-app/compare/v101.16.4...v101.16.5) (2024-11-24) - - -### Bug Fixes - -* **translations:** sync translations from transifex (master) ([3098faf](https://github.com/dhis2/capture-app/commit/3098faf8b73dbfc0d894535cbdfd5539e80a24fe)) - -## [101.16.4](https://github.com/dhis2/capture-app/compare/v101.16.3...v101.16.4) (2024-11-20) - - -### Bug Fixes - -* [DHIS2-18019] related stages UI tweaks ([#3872](https://github.com/dhis2/capture-app/issues/3872)) ([7ea2240](https://github.com/dhis2/capture-app/commit/7ea2240b68408a0c4e8db624093c058f2b416584)) - -## [101.16.3](https://github.com/dhis2/capture-app/compare/v101.16.2...v101.16.3) (2024-11-20) - - -### Bug Fixes - -* [DHIS2-18444] stabilize possible duplicate modal cypress test ([#3886](https://github.com/dhis2/capture-app/issues/3886)) ([5b5b477](https://github.com/dhis2/capture-app/commit/5b5b477ed3a26c7eb04c4966802769fe973e1631)) - -## [101.16.2](https://github.com/dhis2/capture-app/compare/v101.16.1...v101.16.2) (2024-11-19) - - -### Bug Fixes - -* [DHIS2-16994] Image and File DE and TEA not Displayed in Changelog ([#3837](https://github.com/dhis2/capture-app/issues/3837)) ([9327210](https://github.com/dhis2/capture-app/commit/932721045126e02379f56a85af4f6586b836b4c0)) - -## [101.16.1](https://github.com/dhis2/capture-app/compare/v101.16.0...v101.16.1) (2024-11-17) - - -### Bug Fixes - -* **translations:** sync translations from transifex (master) ([37c32df](https://github.com/dhis2/capture-app/commit/37c32df3e7839e30b493ff8e8185de769c3e2fd4)) - -# [101.16.0](https://github.com/dhis2/capture-app/compare/v101.15.0...v101.16.0) (2024-11-13) - - -### Features - -* [DHIS2-18250] Breadcrumb for event & enrollment pages ([#3849](https://github.com/dhis2/capture-app/issues/3849)) ([d65882e](https://github.com/dhis2/capture-app/commit/d65882eacb711865d9f6a860c65d56a0f4d68157)) - -# [101.15.0](https://github.com/dhis2/capture-app/compare/v101.14.9...v101.15.0) (2024-11-12) - - -### Features - -* [DHIS2-15187][DHIS2-15190] Working list bulk actions ([#3773](https://github.com/dhis2/capture-app/issues/3773)) ([5a12722](https://github.com/dhis2/capture-app/commit/5a127229e984b744fa3ea486d9b5a2632603bcd4)) - -## [101.14.9](https://github.com/dhis2/capture-app/compare/v101.14.8...v101.14.9) (2024-11-10) - - -### Bug Fixes - -* **translations:** sync translations from transifex (master) ([00403fb](https://github.com/dhis2/capture-app/commit/00403fb596e08eba233fd4103c66c66f286a0881)) - ## [101.14.8](https://github.com/dhis2/capture-app/compare/v101.14.7...v101.14.8) (2024-11-05) diff --git a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature index e74ed7c4f8..869b837615 100644 --- a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature +++ b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageForm/EnrollmentAddEventPageForm.feature @@ -50,7 +50,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User should be asked to create new event after completing a stage and choose to cancel Given you land on the enrollment new event page by having typed #/enrollmentEventNew?enrollmentId=zRfAPUpjoG3&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=CWaAcQYKVpq&teiId=S3JjTA4QMNe - Then you see the new event form + Then you see the following Enrollment: New Event And you see the widget header Foci investigation & classification And you type 2022-01-01 in the input number 0 And you type x in the input number 20 @@ -62,7 +62,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User should be asked to create new event after completing a stage and choose to continue Given you land on the enrollment new event page by having typed #/enrollmentEventNew?enrollmentId=zRfAPUpjoG3&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=CWaAcQYKVpq&teiId=S3JjTA4QMNe - Then you see the new event form + Then you see the following Enrollment: New Event And you see the widget header Foci investigation & classification And you type 2022-01-01 in the input number 0 And you type x in the input number 20 @@ -74,7 +74,7 @@ Feature: User interacts with the Enrollment New Event Workspace Scenario: User is able to schedule an event with a note Given you land on the enrollment new event page by having typed /#/enrollmentEventNew?enrollmentId=qcFFRp7DpcX&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&stageId=edqlbukwRfQ&teiId=erqa3phUfpI - And you see the new event form + And you see the following Enrollment: New Event And you select the schedule tab When you add a note to the event And the events saves successfully diff --git a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature index de83e45d76..5364d08ec0 100644 --- a/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature +++ b/cypress/e2e/EnrollmentAddEventPage/EnrollmentAddEventPageNavigation/EnrollmentAddEventPageNavigation.feature @@ -1,7 +1,7 @@ Feature: User interacts with Enrollment Add event page Scenario: The user can land on the enrollment add event page. Given you land on the enrollment add event page by having typed /#/enrollmentEventNew?programId=IpHINAT79UW&orgUnitId=DiszpKrYNg8&teiId=tIJu6iqQxNV&enrollmentId=CCBLMntFuzb&stageId=A03MvHHogjR - Then you see the new event form + Then you see the following Enrollment: New Event And you see the widget header Birth And you see the following Report date And you see the add event form details diff --git a/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js b/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js index 354b982afa..9be509e28c 100644 --- a/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js +++ b/cypress/e2e/EnrollmentAddEventPage/sharedSteps.js @@ -1,4 +1,4 @@ -import { defineStep as And, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; Then(/^you see the following (.*)$/, (message) => { cy.contains(message); @@ -12,7 +12,3 @@ And(/^you see the widget header (.*)$/, (name) => { cy.contains(name).should('exist'); }); }); - -When('you see the new event form', () => { - cy.get('[data-test="new-enrollment-event-form"]').should('exist'); -}); diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature index 31ab0f99c8..594b821007 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.feature @@ -25,12 +25,12 @@ And the user see the following text: Yes Scenario: The user can enter and exit the edit mode. Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL -And the view enrollment event form is in view mode +And the user see the following text: Enrollment: View Event And the user see the following text: Apgar Score When the user clicks on the edit button -Then the view enrollment event form is in edit mode +Then the user see the following text: Enrollment: Edit Event When the user clicks on the cancel button -And the view enrollment event form is in view mode +And the user see the following text: Enrollment: View Event Scenario: The tracker program rules are triggered correctly for the Child Program. Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL @@ -53,58 +53,58 @@ Then the user don't see the following text: Low-dose acetylsalicylic acid given Scenario: User can modify and save the data in the form Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=V1CerIi3sdL -Then the view enrollment event form is in view mode +Then the user see the following text: Enrollment: View Event And the apgar score is 11 When the user clicks on the edit button And the user set the apgar score to 5 And the user clicks on the save button Then you are redirected to the enrollment dashboard And you open the Birth stage event -Then the view enrollment event form is in view mode +Then the user see the following text: Enrollment: View Event And the user see the following text: 5 When the user clicks on the edit button And the user set the apgar score to 11 And the user clicks on the save button Then you are redirected to the enrollment dashboard And you open the Birth stage event -Then the view enrollment event form is in view mode +Then the user see the following text: Enrollment: View Event And the user see the following text: 11 Scenario: User goes directly to Edit mode for scheduled events Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=RIrfCcEP8Uu&orgUnitId=DiszpKrYNg8 - Then the view enrollment event form is in edit mode + Then the user see the following text: Enrollment: Edit Event And the user see the following text: Infant Feeding When the user clicks on the cancel button - Then the user is navigated to the enrollment dashboard + Then the user see the following text: Enrollment Dashboard -Scenario: User can update schedule date for a scheduled event +Scenario: User can update schedule date for a scheduled event Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=RIrfCcEP8Uu&orgUnitId=DiszpKrYNg8 - Then the view enrollment event form is in edit mode + Then the user see the following text: Enrollment: Edit Event And the user see the following text: Infant Feeding When the user clicks switch tab to Schedule And the user selects another schedule date And the user clicks on the schedule button on widget-enrollment-event - Then the user is navigated to the enrollment dashboard + Then the user see the following text: Enrollment Dashboard Scenario: User can update schedule date if Hide due date is enabled Given you land on the enrollment event page with selected Focus area by having typed /#/enrollmentEventNew?enrollmentId=V8uPJuhvlL7&orgUnitId=DiszpKrYNg8&programId=M3xtLkYBlKI&stageId=uvMKOn1oWvd&tab=SCHEDULE&teiId=dNpxRu1mWG5 - Then the add event form is displayed + Then the user see the following text: Enrollment: New Event And the user see the following text: Foci response And the user see the schedule date and info box And the user clicks on the schedule button on add-event-enrollment-page-content - Then the user is navigated to the enrollment dashboard + Then the user see the following text: Enrollment Dashboard Scenario: User can see disabled scheduled date for active event Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=FV4JCI73wO2&orgUnitId=DiszpKrYNg8 - Then the view enrollment event form is in view mode + Then the user see the following text: Enrollment: View Event When the user clicks on the edit button - Then the view enrollment event form is in edit mode + Then the user see the following text: Enrollment: Edit Event Then the user see the schedule date field with tooltip: Scheduled date cannot be changed for Active events - + @user:trackerAutoTestRestricted Scenario: The user cannot enter edit mode for completed events Given you land on the enrollment event page with selected Person by having typed /#/enrollmentEventEdit?eventId=nUVwTLuQ6FT&orgUnitId=DiszpKrYNg8 - And the view enrollment event form is in view mode + And the user see the following text: Enrollment: View Event Then the edit button should be disabled Scenario: User can edit the event and complete the enrollment @@ -113,4 +113,4 @@ Scenario: User can edit the event and complete the enrollment And the user clicks on the edit button And the user completes the event And the user completes the enrollment - Then the user sees the enrollment status and recently edited event in Case outcome event status is completed + Then the user sees the enrollment status and recently edited event in Case outcome event status is completed \ No newline at end of file diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js index 93ab1beea1..70468a3a93 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageForm/EnrollmentEditEventPageForm.js @@ -1,4 +1,4 @@ -import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; import { getCurrentYear } from '../../../support/date'; const changeEnrollmentAndEventsStatus = () => ( @@ -61,7 +61,8 @@ Given(/^you land on the enrollment event page with selected (.*) by having typed When(/^the user clicks on the edit button/, () => cy .get('[data-test="widget-enrollment-event"]') - .find('[data-test="widget-enrollment-event-edit-button"]') + .find('[data-test="dhis2-uicore-button"]') + .eq(1) .click(), ); @@ -207,18 +208,7 @@ And('you open the Birth stage event', () => { Then('the edit button should be disabled', () => { cy.get('[data-test="widget-enrollment-event"]') - .find('[data-test="widget-enrollment-event-edit-button"]') + .find('[data-test="dhis2-uicore-button"]') + .eq(1) .should('be.disabled'); }); - -And('the add event form is displayed', () => { - cy.get('[data-test="add-event-enrollment-page-content"]').should('exist'); -}); - -And('the user is navigated to the enrollment dashboard', () => { - cy.get('[data-test="enrollment-overview-page"]').should('exist'); -}); - -And(/^the view enrollment event form is in (.*) mode$/, (mode) => { - cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); -}); diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature index 663543760e..118c8e4c14 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.feature @@ -2,18 +2,18 @@ Feature: User interacts with Enrollment event page Scenario: The user can land on the enrollment event page. Given you land on the enrollment event page by having typed #/enrollmentEventEdit?orgUnitId=DiszpKrYNg8&eventId=O7IACPx40nQ - Then the view enrollment event form is in view mode + Then you see the following Enrollment: View Event And you see the following Baby Postnatal - Scenario: User can navigate back and forward between the enrollment event edit page and the enrollment page + Scenario: User can navigate back and forward between the enrollment event edit page and the enrollment page Given you open the enrollment page which has multiple events and stages - Then the user is navigated to the enrollment dashboard + Then you see the following Enrollment Dashboard And the widgets are done rendering And the program stages should be displayed When the user clicks the first second antenatal care visit event - Then the view enrollment event form is in view mode + Then you see the following Enrollment: View Event And you see the following antenatal care visit And you see the following No ARV medication plan When the user clicks the "Back to all stages and events" button - Then the user is navigated to the enrollment dashboard - And the program stages should be displayed + Then you see the following Enrollment Dashboard + And the program stages should be displayed \ No newline at end of file diff --git a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js index d97e01569c..76fbb1915c 100644 --- a/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js +++ b/cypress/e2e/EnrollmentEditEventPage/EnrollmentEditEventPageNavigation/EnrollmentEditEventPageNavigation.js @@ -1,4 +1,4 @@ -import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you land on the enrollment event page by having typed (.*)$/, (url) => { cy.visit(url); @@ -21,7 +21,10 @@ When('the user clicks the first second antenatal care visit event', () => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy.get('[data-test="enrollment-edit-event-back-button"]') + cy + .get('[data-test="widget-enrollment-event"]') + .find('[data-test="dhis2-uicore-button"]') + .eq(0) .click(), ); @@ -36,11 +39,3 @@ Then('the program stages should be displayed', () => { cy.contains('Care at birth').should('exist'); }); }); - -And('the user is navigated to the enrollment dashboard', () => { - cy.get('[data-test="enrollment-overview-page"]').should('exist'); -}); - -And(/^the view enrollment event form is in (.*) mode$/, (mode) => { - cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); -}); diff --git a/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js b/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js index 46fe376da8..4d331734b9 100644 --- a/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js +++ b/cypress/e2e/EnrollmentPage/EnrollmentPageNavigation/EnrollmentPageNavigation.js @@ -1,8 +1,9 @@ -import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; Given('you are on an enrollment page', () => { cy.visit('/#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); And('you select the Inpatient morbidity program', () => { @@ -89,7 +90,8 @@ Then(/^you should be redirect to (.*)$/, (expectedUrl) => { Given('you land on the enrollment page by having typed only the enrollmentId in the url', () => { cy.visit('/#/enrollment?enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); cy.contains('[data-test="scope-selector"]', 'Carlos Cruz'); cy.contains('[data-test="scope-selector"]', 'Taninahun (Malen) CHP'); cy.contains('1 event'); @@ -117,7 +119,8 @@ When('you reset the org unit selection', () => { Then('you see the enrollment page but there is no org unit id in the url', () => { cy.url().should('not.include', 'orgUnitId'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); When('you reset the enrollment selection', () => { diff --git a/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js b/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js index ff2c76281f..a450af97d9 100644 --- a/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js +++ b/cypress/e2e/EnrollmentPage/EnrollmentQuickActions/EnrollmentQuickActions.js @@ -1,4 +1,4 @@ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you open the enrollment page by typing (.*)$/, url => cy.visit(url), @@ -6,12 +6,14 @@ Given(/^you open the enrollment page by typing (.*)$/, url => Given('you are on an enrollment page with stage available', () => { cy.visit('/#/enrollment?programId=ur1Edk5Oe2n&orgUnitId=UgYg0YW7ZIh&teiId=zmgVvEZ91Kg&enrollmentId=xRnBV5aJDeF'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); Given('you are on an enrollment page with no stage available', () => { cy.visit('/#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); When(/^you click the (.*) event-button/, (mode) => { diff --git a/cypress/e2e/EnrollmentPage/sharedSteps.js b/cypress/e2e/EnrollmentPage/sharedSteps.js index b21b9ec516..8f8e2992ca 100644 --- a/cypress/e2e/EnrollmentPage/sharedSteps.js +++ b/cypress/e2e/EnrollmentPage/sharedSteps.js @@ -7,7 +7,3 @@ Given('you open the enrollment page', () => { Given('you open the enrollment page which has multiples events and stages', () => { cy.visit('#/enrollment?enrollmentId=ek4WWAgXX5i'); }); - -Given('you are on the enrollment dashboard', () => { - cy.url().should('include', '/#/enrollment?'); -}); diff --git a/cypress/e2e/NewPage/NewPage.js b/cypress/e2e/NewPage/NewPage.js index a4a7579656..9ef6ab3440 100644 --- a/cypress/e2e/NewPage/NewPage.js +++ b/cypress/e2e/NewPage/NewPage.js @@ -469,14 +469,14 @@ And('you fill the WHO RMNCH program registration form with its required unique v }); And('you fill the WHO RMNCH program registration form with its required values', () => { - cy.get('[data-test="capture-ui-input"]') - .eq(3) - .type('Didriksson'); - cy.get('[data-test="capture-ui-input"]') .eq(2) .type('Ava'); + cy.get('[data-test="capture-ui-input"]') + .eq(3) + .type('Didriksson'); + cy.get('[data-test="capture-ui-input"]') .eq(9) .type('1985-10-01') diff --git a/cypress/e2e/ScopeSelector/ScopeSelector.feature b/cypress/e2e/ScopeSelector/ScopeSelector.feature index 5a06714422..ec80a5d2b0 100644 --- a/cypress/e2e/ScopeSelector/ScopeSelector.feature +++ b/cypress/e2e/ScopeSelector/ScopeSelector.feature @@ -144,14 +144,14 @@ Feature: User uses the ScopeSelector to navigate Examples: | url | state | message | - | /#/enrollment?enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?programId=IpHINAT79UW&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | - | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment dashboard | + | /#/enrollment?enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?programId=IpHINAT79UW&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | + | /#/enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 | all | Enrollment Dashboard | | /#/enrollment?orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ | teiAndOrgUnit | Choose a program to add new or see existing enrollments for Carlos Cruz | | /#/enrollment?programId=IpHINAT79UW&teiId=fhFQhO0xILJ | teiAndChildProgram | Choose an enrollment to view the dashboard. | | /#/enrollment?programId=qDkgAbB5Jlk&teiId=fhFQhO0xILJ | teiAndMalariaProgram | Carlos Cruz is a person and cannot be enrolled in the Malaria case diagnosis, treatment and investigation. Choose another program that allows person enrollment. Enroll a new malaria entity in this program.| @@ -184,8 +184,6 @@ Feature: User uses the ScopeSelector to navigate When you reset the program selection Then you see message explaining you need to select a program - # DHIS2-18326 - @skip Scenario: Enrollment event edit page > resetting the org unit Given you land on a enrollment page domain by having typed /#/enrollmentEventEdit?orgUnitId=UgYg0YW7ZIh&eventId=lQQyjR73hHk When you reset the org unit selection diff --git a/cypress/e2e/ScopeSelector/ScopeSelector.js b/cypress/e2e/ScopeSelector/ScopeSelector.js index c870644462..00b119713f 100644 --- a/cypress/e2e/ScopeSelector/ScopeSelector.js +++ b/cypress/e2e/ScopeSelector/ScopeSelector.js @@ -1,4 +1,4 @@ -import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; import { getCurrentYear } from '../../support/date'; Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { @@ -263,7 +263,8 @@ Then(/^you see the following (.*)$/, (message) => { And('you land on the enrollment page by having typed only the enrollmentId on the url', () => { cy.visit('/#/enrollment?enrollmentId=gPDueU02tn8'); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); And('you reset the tei selection', () => { @@ -287,7 +288,7 @@ And('you reset the org unit selection', () => { And('you see the enrollment event Edit page but there is no org unit id in the url', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollmentEventEdit?eventId=lQQyjR73hHk`); - cy.get('[data-test="widget-enrollment-event-view"]').should('exist'); + cy.contains('Enrollment: View Event'); }); And('you see the enrollment event New page but there is no org unit id in the url', () => { @@ -297,12 +298,13 @@ And('you see the enrollment event New page but there is no org unit id in the ur And('you see the enrollment event New page but there is no stage id in the url', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollmentEventNew?enrollmentId=gPDueU02tn8&orgUnitId=UgYg0YW7ZIh&programId=IpHINAT79UW&teiId=fhFQhO0xILJ`); - cy.contains('Choose a stage for a new event'); + cy.contains('Enrollment: New Event'); }); And('you see the enrollment page', () => { cy.url().should('eq', `${Cypress.config().baseUrl}/#/enrollment?enrollmentId=gPDueU02tn8&orgUnitId=UgYg0YW7ZIh&programId=IpHINAT79UW&teiId=fhFQhO0xILJ`); - cy.get('[data-test="enrollment-overview-page"]'); + cy.get('[data-test="enrollment-page-content"]') + .contains('Enrollment Dashboard'); }); And('you reset the enrollment selection', () => { diff --git a/cypress/e2e/TopBarActions/TopBarActions.feature b/cypress/e2e/TopBarActions/TopBarActions.feature index 25135c9328..20f8aa8f74 100644 --- a/cypress/e2e/TopBarActions/TopBarActions.feature +++ b/cypress/e2e/TopBarActions/TopBarActions.feature @@ -61,7 +61,7 @@ Feature: User uses the TopBarActions to navigate Given you land on a enrollment page domain by having typed /#/enrollmentEventEdit?orgUnitId=DwpbWkiqjMy&eventId=KNbStF7YTon And the user see the following text: Gestational age at visit When the user clicks on the edit button - And the view enrollment event form is in edit mode + And the user see the following text: Enrollment: Edit Event When the user clicks the element containing the text: Clear selections Then the user sees the warning popup @@ -88,7 +88,7 @@ Feature: User uses the TopBarActions to navigate Given you land on a enrollment page domain by having typed #/enrollmentEventNew?programId=WSGAb5XwJ3Y&orgUnitId=DwpbWkiqjMy&teiId=yFcOhsM1Yoa&enrollmentId=ek4WWAgXX5i&stageId=edqlbukwRfQ And the user see the following text: Clear selections When the user clicks the arrow button to see the dropdown - And the user clicks the element containing the text: Create new in another program... + And the user clicks the element containing the text: Create new in another program... Then the current url is /#/new?orgUnitId=DwpbWkiqjMy Scenario: Enrollment Event New page > You go to the new page inside the same program diff --git a/cypress/e2e/TopBarActions/TopBarActions.js b/cypress/e2e/TopBarActions/TopBarActions.js index 624ca1ac82..81d8cc996e 100644 --- a/cypress/e2e/TopBarActions/TopBarActions.js +++ b/cypress/e2e/TopBarActions/TopBarActions.js @@ -1,4 +1,4 @@ -import { defineStep as And, Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { cy.visit(url); @@ -6,7 +6,7 @@ Given(/^you land on a enrollment page domain by having typed (.*)$/, (url) => { }); When(/^the user clicks on the edit button/, () => - cy.get('[data-test="widget-enrollment-event"]').find('[data-test="widget-enrollment-event-edit-button"]').click(), + cy.get('[data-test="widget-enrollment-event"]').find('[data-test="dhis2-uicore-button"]').eq(1).click(), ); When('the user clicks the arrow button to see the dropdown', () => { @@ -24,7 +24,3 @@ When(/^the user set the WHOMCH Diastolic blood pressure to (.*)/, score => .type(score) .blur(), ); - -And(/^the view enrollment event form is in (.*) mode$/, (mode) => { - cy.get(`[data-test="widget-enrollment-event-${mode}"]`).should('exist'); -}); diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js index 07403f7566..9f45c31e2f 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetAssignee/index.js @@ -12,7 +12,8 @@ When('you assign the user Geetha in the view mode', () => { When('you assign the user Tracker demo User in the edit mode', () => { cy .get('[data-test="widget-enrollment-event"]') - .find('[data-test="widget-enrollment-event-edit-button"]') + .find('[data-test="dhis2-uicore-button"]') + .eq(1) .click(); cy.get('[data-test="widget-assignee"]').within(() => { diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js index aec7cc2c19..2a1c5200ef 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEventNote/index.js @@ -1,15 +1,13 @@ -import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { When, Then } from '@badeball/cypress-cucumber-preprocessor'; Then('the enrollment widget should be loaded', () => { cy.contains('The enrollment event data could not be found').should('not.exist'); }); When('you click edit mode', () => { - cy - .get('[data-test="widget-enrollment-event"]') - .find('[data-test="widget-enrollment-event-edit-button"]') + cy.contains('[data-test="dhis2-uicore-button"]', 'Edit event') .click(); - cy.get('[data-test="widget-enrollment-event-edit"]').should('exist'); + cy.contains('Enrollment: Edit Event').should('exist'); }); When(/^you fill in the note: (.*)$/, (note) => { diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js index 24f07d7593..ebb0f1293a 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentAddEventPage/WidgetsForEnrollmentAddEventPage.js @@ -16,7 +16,9 @@ Then('you can assign a user when scheduling the event', () => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy.get('[data-test="enrollment-edit-event-back-button"]') + cy + .get('[data-test="widget-enrollment-event"]') + .contains('Back to all stages and events') .click(), ); diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js index 96a583bd38..81034e2507 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetsForEnrollmentDashboard/WidgetsForEnrollmentDashboard.js @@ -51,7 +51,9 @@ Then(/^the scope selector list contains the text (.*)$/, (name) => { }); When(/^the user clicks the "Back to all stages and events" button/, () => - cy.get('[data-test="enrollment-edit-event-back-button"]') + cy + .get('[data-test="widget-enrollment-event"]') + .contains('Back to all stages and events') .click(), ); diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature deleted file mode 100644 index f44f8caa8d..0000000000 --- a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.feature +++ /dev/null @@ -1,49 +0,0 @@ -Feature: User facing tests for bulk actions on event working lists - - Scenario: the user should be able to select rows - Given you open the main page with Ngelehun and malaria case context - When you select the first 5 rows - Then the bulk action bar should say 5 selected - And the first 5 rows should be selected - - Scenario: the user should be able to deselect rows - Given you open the main page with Ngelehun and malaria case context - When you select the first 5 rows - And you deselect the first 3 rows - Then the bulk action bar should say 2 selected - - Scenario: the user should be able to select all rows - Given you open the main page with Ngelehun and malaria case context - When you select all rows - Then the bulk action bar should say 15 selected - And all rows should be selected - - Scenario: the user should be able to deselect all rows - Given you open the main page with Ngelehun and malaria case context - When you select all rows - And all rows should be selected - And you select all rows - Then the bulk action bar should not be present - And no rows should be selected - - Scenario: the filters should be disabled when rows are selected - Given you open the main page with Ngelehun and malaria case context - When you select the first 5 rows - Then the filters should be disabled - - @v<42 - Scenario: the user should be able to bulk complete events - Given you open the main page with Ngelehun and malaria case context - And you select the first 3 rows - And you click the bulk complete button - And the bulk complete modal should open - When you click the confirm complete events button - Then the bulk complete modal should close - - Scenario: the user should be able to bulk delete events - Given you open the main page with Ngelehun and malaria case context - And you select the first 3 rows - And you click the bulk Delete button - And the bulk delete modal should open - When you click the confirm delete events button - Then the bulk delete modal should close diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js b/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js deleted file mode 100644 index 3a89c95cba..0000000000 --- a/cypress/e2e/WorkingLists/EventWorkingLists/EventBulkActions/EventBulkAction.js +++ /dev/null @@ -1,73 +0,0 @@ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; -import '../../sharedSteps'; - -Given('you open the main page with Ngelehun and malaria case context', () => { - cy.visit('#/?programId=VBqh0ynB2wv&orgUnitId=DiszpKrYNg8'); -}); - -Then('the bulk complete modal should open', () => { - cy.get('[data-test="bulk-complete-events-dialog"]') - .should('exist'); -}); - -When('you click the confirm complete events button', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false**', - }, { - statusCode: 200, - body: {}, - }).as('completeEvents'); - - cy.get('[data-test="bulk-complete-events-dialog"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Complete').click(); - - cy.wait('@completeEvents') - .its('request.body') - .should(({ events }) => { - expect(events).to.have.length(3); - expect(events[0]).to.include({ status: 'COMPLETED' }); - expect(events[1]).to.include({ status: 'COMPLETED' }); - expect(events[2]).to.include({ status: 'COMPLETED' }); - }); -}); - -Then('the bulk complete modal should close', () => { - cy.get('[data-test="bulk-complete-events-dialog"]') - .should('not.exist'); -}); - -Then('the bulk delete modal should open', () => { - cy.get('[data-test="bulk-delete-events-dialog"]') - .should('exist'); -}); - -// you click the confirm delete events button -When('you click the confirm delete events button', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false**', - }, { - statusCode: 200, - body: {}, - }).as('deleteEvents'); - - cy.get('[data-test="bulk-delete-events-dialog"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Delete').click(); - - cy.wait('@deleteEvents') - .its('request.body') - .should(({ events }) => { - expect(events).to.have.length(3); - expect(events).to.deep.include({ event: 'a969f7a3bf1' }); - expect(events).to.deep.include({ event: 'a6f092d0d44' }); - expect(events).to.deep.include({ event: 'a5e67163090' }); - }); -}); - -Then('the bulk delete modal should close', () => { - cy.get('[data-test="bulk-delete-events-dialog"]') - .should('not.exist'); -}); diff --git a/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js b/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js index 019ba97970..b1a6158642 100644 --- a/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js +++ b/cypress/e2e/WorkingLists/EventWorkingLists/EventWorkingListsUser/EventWorkingListsUser.js @@ -1,7 +1,7 @@ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor'; import { v4 as uuid } from 'uuid'; import '../sharedSteps'; -import { combineDataAndYear, getCurrentYear } from '../../../../support/date'; +import { getCurrentYear, combineDataAndYear } from '../../../../support/date'; Given('you open the main page with Ngelehun and malaria case context', () => { cy.visit('#/?programId=VBqh0ynB2wv&orgUnitId=DiszpKrYNg8'); @@ -29,7 +29,7 @@ Then('the default working list should be displayed', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').eq(1).invoke('text') + cy.wrap($row).find('td').first().invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -185,7 +185,7 @@ Then('the list should display data for the second page', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').eq(1).invoke('text') + cy.wrap($row).find('td').first().invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -219,7 +219,7 @@ Then('the list should display 10 rows of data', () => { .should('have.length', 11) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').eq(1).invoke('text') + cy.wrap($row).find('td').first().invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -250,9 +250,9 @@ Then('the list should display data ordered descendingly by report date', () => { .click(); cy.get('input[placeholder="From"]') - .type(`${lastYear}-01-01`).blur(); + .type(`${lastYear}-01-01`); - cy.get('input[placeholder="To"]').click().blur(); + cy.get('input[placeholder="To"]').click(); cy.contains('Update') .click({ force: true }); @@ -278,7 +278,7 @@ Then('the list should display data ordered descendingly by report date', () => { .should('have.length', 16) .each(($row, index) => { if (index) { - cy.wrap($row).find('td').eq(1).invoke('text') + cy.wrap($row).find('td').first().invoke('text') .then((date) => { const firstArgs = rows[date].length > 1 ? new RegExp(`${rows[date].map(item => item.split(' ')[0]).join('|')}`, 'g') @@ -399,10 +399,10 @@ When('you set the date of admission filter', () => { cy.get('input[type="text"]') .then(($elements) => { cy.wrap($elements[0]) - .type('2018-01-01').blur(); + .type('2018-01-01'); cy.wrap($elements[1]) - .type('2018-12-31').blur(); + .type('2018-12-31'); }); cy.contains('Update') diff --git a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature deleted file mode 100644 index f79f4faf87..0000000000 --- a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.feature +++ /dev/null @@ -1,92 +0,0 @@ -Feature: User facing tests for bulk actions on Tracked Entity working lists - - Scenario: the user should be able to select rows - Given you open the main page with Ngelehun and child programe context - When you select the first 5 rows - Then the bulk action bar should say 5 selected - And the first 5 rows should be selected - - Scenario: the user should be able to deselect rows - Given you open the main page with Ngelehun and child programe context - When you select the first 5 rows - And you deselect the first 3 rows - Then the bulk action bar should say 2 selected - - Scenario: the user should be able to select all rows - Given you open the main page with Ngelehun and child programe context - When you select all rows - Then the bulk action bar should say 15 selected - And all rows should be selected - - Scenario: the user should be able to deselect all rows - Given you open the main page with Ngelehun and child programe context - When you select all rows - And all rows should be selected - And you select all rows - Then the bulk action bar should not be present - And no rows should be selected - - Scenario: the filters should be disabled when rows are selected - Given you open the main page with Ngelehun and child programe context - When you select the first 5 rows - Then the filters should be disabled - - Scenario: The user should see an error message when trying to bulk complete enrollments with errors - Given you open the main page with Ngelehun and Malaria focus investigation context - And you select the first 3 rows - And you click the bulk complete enrollments button - And the bulk complete enrollments modal should open - And the modal content should say: This action will complete 2 active enrollments in your selection. 1 enrollment already marked as completed will not be changed. - When you confirm 2 active enrollments with errors - Then an error dialog will be displayed to the user - And you close the error dialog - And the unsuccessful enrollments should still be selected - - Scenario: the user should be able to bulk complete enrollments and events - Given you open the main page with Ngelehun and Malaria focus investigation context - And you select the first 4 rows - And you click the bulk complete enrollments button - And the bulk complete enrollments modal should open - And the modal content should say: This action will complete 3 active enrollments in your selection. 1 enrollment already marked as completed will not be changed. - When you confirm 3 active enrollments successfully - Then the bulk complete enrollments modal should close - -#DHIS2-18447 -@skip - Scenario: the user should be able to bulk complete enrollments without completing events - Given you open the main page with Ngelehun and Malaria Case diagnosis context - And you select row number 1 - And you click the bulk complete enrollments button - And the bulk complete enrollments modal should open - And you deselect the complete events checkbox - And the modal content should say: This action will complete 1 active enrollment in your selection. - When you confirm 1 active enrollment without completing events successfully - Then the bulk complete enrollments modal should close - -#DHIS2-18447 -@skip - Scenario: the user should be able to bulk delete enrollments - Given you open the main page with Ngelehun and Malaria Case diagnosis context - And you select the first 3 rows - And you click the bulk delete enrollments button - And the bulk delete enrollments modal should open - When you confirm deleting 3 enrollments - Then the bulk delete enrollments modal should close - -#DHIS2-18447 -@skip - Scenario: the user should be able to bulk delete only active enrollments - Given you open the main page with Ngelehun and Malaria Case diagnosis context - And you select the first 3 rows - And you click the bulk delete enrollments button - And the bulk delete enrollments modal should open - When you deselect completed enrollments - And you confirm deleting 2 active enrollments - Then the bulk delete enrollments modal should close - - @user:trackerAutoTestRestricted - Scenario: a restricted user should not be able to bulk delete enrollments - Given you open the main page with Ngelehun and WHO RMNCH Tracker context - And you open the working lists - When you select the first 3 rows - Then the bulk delete enrollments button should not be visible diff --git a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js b/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js deleted file mode 100644 index 9a8931cc7f..0000000000 --- a/cypress/e2e/WorkingLists/TeiWorkingLists/TeiBulkActions/TeiBulkActions.js +++ /dev/null @@ -1,284 +0,0 @@ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; -import '../../sharedSteps'; - -Given('you open the main page with Ngelehun and child programe context', () => { - cy.visit('#/?programId=IpHINAT79UW&orgUnitId=DiszpKrYNg8'); -}); - -Given('you open the main page with Ngelehun and Malaria Case diagnosis context', () => { - cy.visit('#/?programId=qDkgAbB5Jlk&orgUnitId=DiszpKrYNg8'); -}); - -Given('you open the main page with Ngelehun and Malaria focus investigation context', () => { - cy.visit('#/?programId=M3xtLkYBlKI&orgUnitId=DiszpKrYNg8'); -}); - -Given('you open the main page with Ngelehun and WHO RMNCH Tracker context', () => { - cy.visit('#/?programId=WSGAb5XwJ3Y&orgUnitId=DiszpKrYNg8'); -}); - -// you open the working lists -Given('you open the working lists', () => { - cy.get('[data-test="template-selector-create-list"]') - .click(); -}); - -Then('the bulk complete enrollments modal should open', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .should('exist'); -}); - -When('it should say there are 2 active enrollments and 1 completed enrollment', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .contains('This action will complete 2 active enrollments in your selection.' + - ' 1 enrollment already marked as completed will not be changed.'); -}); - -Then('you confirm 3 active enrollments successfully', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', - }, { - statusCode: 200, - body: {}, - }).as('completeEnrollmentsDryRun'); - - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', - }, { - statusCode: 200, - body: {}, - }).as('completeEnrollments'); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('[data-test="bulk-complete-enrollments-confirm-button"]') - .click(); - - cy.wait('@completeEnrollmentsDryRun') - .then((interception) => { - expect(interception.response.statusCode).to.eq(200); - expect(interception.request.body.enrollments).to.have.length(3); - }); - - cy.wait('@completeEnrollments') - .its('request.body') - .should(({ enrollments }) => { - // Should be 3 enrollments - expect(enrollments).to.have.length(3); - - // Assert that all enrollments are completed - enrollments.forEach((enrollment) => { - expect(enrollment).to.include({ status: 'COMPLETED' }); - - enrollment.events.forEach((event) => { - expect(event).to.include({ status: 'COMPLETED' }); - }); - }); - }); -}); - -Then('the bulk complete enrollments modal should close', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .should('not.exist'); -}); - -When(/^you select row number (.*)$/, (rowNumber) => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .eq(rowNumber) - .find('[data-test="select-row-checkbox"]') - .click(); -}); - -Then(/^the modal content should say: (.*)$/, (content) => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .contains(content); -}); - -When('you deselect the complete events checkbox', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('[data-test="dhis2-uicore-checkbox"]') - .click(); -}); - -When('you confirm 1 active enrollment without completing events successfully', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', - }).as('completeEnrollmentsDryRun'); - - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', - }, { - statusCode: 200, - body: {}, - }).as('completeEnrollments'); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('[data-test="bulk-complete-enrollments-confirm-button"]') - .click(); - - cy.wait('@completeEnrollmentsDryRun') - .then((interception) => { - expect(interception.response.statusCode).to.eq(200); - expect(interception.request.body.enrollments).to.have.length(1); - }); - - cy.wait('@completeEnrollments') - .its('request.body') - .should(({ enrollments }) => { - // Should be 1 enrollment - expect(enrollments).to.have.length(1); - - // Assert that first enrollment is completed with one completed event - expect(enrollments[0]).to.include({ status: 'COMPLETED' }); - expect(enrollments[0].events).to.have.length(0); - }); -}); - -When('you confirm 2 active enrollments with errors', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', - }).as('completeEnrollmentsDryRun'); - - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', - }, { - statusCode: 200, - body: {}, - }).as('completeEnrollments'); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('[data-test="bulk-complete-enrollments-confirm-button"]') - .click(); - - cy.wait('@completeEnrollmentsDryRun') - .then((interception) => { - expect(interception.response.statusCode).to.eq(409); - expect(interception.request.body.enrollments).to.have.length(2); - }); - - cy.wait('@completeEnrollments') - .its('request.body') - .should(({ enrollments }) => { - // The bad data should be filtered out and not sent to the server - expect(enrollments).to.have.length(1); - - const enrollment = enrollments[0]; - expect(enrollment).to.include({ enrollment: 'MqSC9Vuckeh', status: 'COMPLETED' }); - }); -}); - -Then('an error dialog will be displayed to the user', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .contains('Error completing enrollments'); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .contains('Some enrollments were completed successfully, ' + - 'but there was an error while completing the rest. Please see the details below.'); - - cy.get('[data-test="widget-open-close-toggle-button"]') - .click(); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('li') - .should('have.length', 2); - - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('li') - .contains('Mandatory DataElement `fjdU9F6EngS` is not present'); -}); - -When('you close the error dialog', () => { - cy.get('[data-test="bulk-complete-enrollments-dialog"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Cancel'); -}); - -Then('the unsuccessful enrollments should still be selected', () => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .eq(0) - .should('have.class', 'selected'); - - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .eq(2) - .should('have.class', 'selected'); -}); - -Then('the bulk delete enrollments modal should open', () => { - cy.get('[data-test="bulk-delete-enrollments-dialog"]') - .should('exist'); - - cy.contains('Delete selected enrollments'); -}); - -When('you deselect completed enrollments', () => { - cy.get('[data-test="bulk-delete-enrollments-dialog"]') - .find('[data-test="bulk-delete-enrollments-completed-checkbox"]') - .click(); -}); - -When('you confirm deleting 2 active enrollments', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=DELETE', - }, { - statusCode: 200, - body: {}, - }).as('deleteEnrollments'); - - cy.get('[data-test="bulk-delete-enrollments-dialog"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Delete 2 enrollments') - .click(); - - cy.wait('@deleteEnrollments') - .its('request.body') - .should(({ enrollments }) => { - expect(enrollments).to.have.length(2); - expect(enrollments).to.deep.include({ enrollment: 'Rkx1QOZeBra' }); - expect(enrollments).to.deep.include({ enrollment: 'hDVHG1OavhE' }); - }); -}); - -Then('the bulk delete enrollments modal should close', () => { - cy.get('[data-test="bulk-delete-enrollments-dialog"]') - .should('not.exist'); -}); - -When('you confirm deleting 3 enrollments', () => { - cy.intercept({ - method: 'POST', - url: '**/tracker?async=false&importStrategy=DELETE', - }, { - statusCode: 200, - body: {}, - }).as('deleteEnrollments'); - - cy.get('[data-test="bulk-delete-enrollments-dialog"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Delete 3 enrollments') - .click(); - - cy.wait('@deleteEnrollments') - .its('request.body') - .should(({ enrollments }) => { - expect(enrollments).to.have.length(3); - expect(enrollments).to.deep.include({ enrollment: 'PvJFfKjNWbq' }); - expect(enrollments).to.deep.include({ enrollment: 'Rkx1QOZeBra' }); - expect(enrollments).to.deep.include({ enrollment: 'hDVHG1OavhE' }); - }); -}); - -Then('the bulk delete enrollments button should not be visible', () => { - cy.get('[data-test="bulk-action-bar"]') - .find('[data-test="dhis2-uicore-button"]') - .contains('Delete enrollments') - .should('not.exist'); -}); diff --git a/cypress/e2e/WorkingLists/sharedSteps.js b/cypress/e2e/WorkingLists/sharedSteps.js index 41c60e6159..dbe0bb9928 100644 --- a/cypress/e2e/WorkingLists/sharedSteps.js +++ b/cypress/e2e/WorkingLists/sharedSteps.js @@ -1,4 +1,4 @@ -import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { When, Then } from '@badeball/cypress-cucumber-preprocessor'; Then('for an event program the page navigation should show that you are on the first page', () => { cy.get('[data-test="event-working-lists"]') @@ -127,80 +127,3 @@ When('you change rows per page to 10', () => { .contains('10') .click(); }); - -When(/^you select the first (.*) rows$/, (rows) => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .each(($tr, index) => { - if (index < rows) { - cy.wrap($tr).find('[data-test="select-row-checkbox"]').click(); - } - }); -}); - -Then(/^the bulk action bar should say (.*) selected$/, (rows) => { - cy.get('[data-test="bulk-action-bar"]') - .contains(`${rows} selected`); -}); - -Then(/^the first (.*) rows should be selected$/, (rows) => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .each(($tr, index) => { - if (index < rows) { - cy.wrap($tr) - .should('have.class', 'selected') - .find('[data-test="select-row-checkbox"]'); - } - }); -}); - -When('you select all rows', () => { - cy.get('[data-test="select-all-rows-checkbox"]').click(); -}); - -Then('all rows should be selected', () => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .each(($tr) => { - cy.wrap($tr) - .should('have.class', 'selected') - .find('[data-test="select-row-checkbox"]'); - }); -}); - -Then('the bulk action bar should not be present', () => { - cy.get('[data-test="bulk-action-bar"]').should('not.exist'); -}); - -Then('no rows should be selected', () => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .each(($tr) => { - cy.wrap($tr).should('not.have.class', 'selected'); - }); -}); - -When(/^you deselect the first (.*) rows$/, (rows) => { - cy.get('[data-test="dhis2-uicore-tablebody"]') - .find('tr') - .each(($tr, index) => { - if (index < rows) { - cy.wrap($tr).find('[data-test="select-row-checkbox"]').click(); - } - }); -}); - -Then('the filters should be disabled', () => { - cy.get('[data-test="workinglist-template-selector-chip"]') - .each(($chip) => { - cy.wrap($chip).should('have.class', 'disabled'); - }); -}); - -When(/^you click the bulk (.*) button$/, (text) => { - cy.get('[data-test="bulk-action-bar"]') - .find('[data-test="dhis2-uicore-button"]') - .contains(text, { matchCase: false }) - .click(); -}); diff --git a/docs/user/resources/images/event-bulk-actions-selected-rows.png b/docs/user/resources/images/event-bulk-actions-selected-rows.png deleted file mode 100644 index 84c93e2626d7fb76da454d30ef759d96810e37c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126931 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 MNhOIwF~c|i1I@t#4gdfE diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png b/docs/user/resources/images/tracked-entity-bulk-actions-complete-enrollments.png deleted file mode 100644 index 84a094746f07739d5cb0f111b800c7202a362f5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148631 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≧)& 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 Q-KsQ~^^Gs0F4%_u2Res3(*OVf diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png b/docs/user/resources/images/tracked-entity-bulk-actions-selected-rows.png deleted file mode 100644 index 4999e4251876a862db6a0c6876fef6c9a125ac5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128972 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]|KKv`7z2b6u8eX7z>A& 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 kar(bI **Note** > You can download the tracked entities list in JSON or CSV formats. - -## Tracked entity bulk actions - -You can perform bulk actions on tracked entities and their enrollments in the tracked entity list. - -![](resources/images/tracked-entity-bulk-actions-selected-rows.png) - -### Completing active enrollments - -1. Select the tracked entities you want to perform the action on by clicking the checkbox to the left of the tracked entity. - -2. Click the **Complete enrollments** button. - 1. You can also choose if you want to complete all active events within the selected enrollments. - -3. Confirm the action in the dialog that appears. - -![](resources/images/tracked-entity-bulk-actions-complete-enrollments.png) - -### Deleting enrollments - -1. Select the tracked entities you want to perform the action on by clicking the checkbox to the left of the tracked entity. - -2. Click the **Delete enrollments** button. - -3. In the dialog that appears, select what enrollment statuses you want to delete and confirm the action. - 1. You can choose any combination of enrollment statuses to delete. - -4. Confirm the action in the dialog that appears. - -![](resources/images/tracked-entity-bulk-actions-delete-enrollments.png) - ## Tracker program stage working list You can show data elements from a single stage in a working list. Select the "Program stage" option from the "More filters" dropdown, then choose a program stage. diff --git a/i18n/cs.po b/i18n/cs.po index 39571615b5..496af4cba9 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jiří Podhorecký , 2024\n" "Language-Team: Czech (https://app.transifex.com/hisp-uio/teams/100509/cs/)\n" @@ -688,10 +688,8 @@ msgstr "Nejsou žádné aktivní zápisy." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Přidejte nový zápis pro {{teiDisplayName}} v tomto programu." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Žádný přístup k vlastníkovi programu." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} není v tomto programu zapsán." @@ -767,8 +765,6 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" -"Možnost kategorie není pro vybranou organizační jednotku platná. Vyberte " -"prosím platnou kombinaci." msgid "Please select {{category}}." msgstr "Vyberte prosím {{category}}." @@ -946,7 +942,7 @@ msgid "Loading" msgstr "načítání" msgid "An error occurred while loading the form" -msgstr "Při načítání formuláře došlo k chybě" +msgstr "" msgid "Possible duplicates found" msgstr "Byly nalezeny možné duplikáty" @@ -1096,8 +1092,8 @@ msgstr "Nejsou k dispozici žádné typy trasované entity" msgid "Assigned to" msgstr "Přiřazen k" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "Nemáte přístup k úpravám tohoto příjemce" msgid "Edit" msgstr "Upravit" @@ -1105,8 +1101,8 @@ msgstr "Upravit" msgid "No one is assigned to this event" msgstr "K této události není nikdo přiřazen" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "Nemáte přístup k přiřazení příjemce" msgid "Assign" msgstr "Přiřadit" @@ -1153,9 +1149,6 @@ msgstr "Označit jako zrušené" msgid "Mark incomplete" msgstr "Označit jako neúplné" -msgid "You do not have access to delete this enrollment" -msgstr "Nemáte přístup ke smazání tohoto zápisu." - msgid "Delete enrollment" msgstr "Smazat zápis" @@ -1246,7 +1239,7 @@ msgid "Started at{{escape}}" msgstr "" msgid "Owned by{{escape}}" -msgstr "Ve vlastnictví{{escape}}" +msgstr "" msgid "Cancelled" msgstr "Zrušeno" @@ -1303,7 +1296,7 @@ msgid "Event completed" msgstr "Událost dokončena" msgid "The event cannot be edited after it has been completed" -msgstr "Událost nelze upravovat po jejím dokončení." +msgstr "" msgid "Back to all stages and events" msgstr "Zpět ke všem fázím a událostem" @@ -1366,7 +1359,7 @@ msgid "Schedule date / Due date" msgstr "Datum plánu / Datum konce platnosti" msgid "Event notes" -msgstr "Poznámky k události" +msgstr "" msgid "Write a note about this scheduled event" msgstr "Napište poznámku o této plánované události" @@ -1468,7 +1461,7 @@ msgid "Please select a valid event" msgstr "Vyberte prosím platnou událost" msgid "You do not have access to create events in this stage" -msgstr "V této fázi nemáte přístup k vytváření událostí." +msgstr "" msgid "This stage can only have one event" msgstr "Tato fáze může mít pouze jednu událost" @@ -1477,17 +1470,15 @@ msgid "New {{ eventName }} event" msgstr "Nová událost {{ eventName }}" msgid "An error occurred while deleting the event" -msgstr "Při mazání události došlo k chybě" +msgstr "" msgid "" "Deleting an event is permanent and cannot be undone. Are you sure you want " "to delete this event?" msgstr "" -"Odstranění události je trvalé a nelze jej vrátit zpět. Opravdu chcete tuto " -"událost odstranit?" msgid "An error occurred when updating event status" -msgstr "Při aktualizaci stavu události došlo k chybě" +msgstr "" msgid "Unskip" msgstr "" @@ -1524,10 +1515,10 @@ msgid "Stages and Events" msgstr "Fáze a události" msgid "An error occurred while loading the widget." -msgstr "Při načítání widgetu došlo k chybě." +msgstr "" msgid "View linked event" -msgstr "Zobrazit propojenou událost" +msgstr "" msgid "Scheduled" msgstr "Naplánováno" @@ -1536,7 +1527,7 @@ msgid "Changelog" msgstr "Seznam změn" msgid "No changes to display" -msgstr "Žádné změny k zobrazení" +msgstr "" msgid "Updated" msgstr "Aktualizováno" @@ -1557,13 +1548,13 @@ msgid "Data item" msgstr "Datová položka" msgid "Change" -msgstr "Změna" +msgstr "" msgid "Value" -msgstr "Hodnota" +msgstr "" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "Nový vztah {{trackedEntityTypeName}} " +msgstr "" msgid "Missing implementation step" msgstr "Chybí krok implementace" @@ -1594,14 +1585,12 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" -"Odstranění vztahu je trvalé a nelze jej vrátit zpět. Opravdu chcete tento " -"vztah odstranit?" msgid "Yes, delete relationship" -msgstr "Ano, vymazat vztah" +msgstr "" msgid "An error occurred while deleting the relationship." -msgstr "Při odstraňování vztahu došlo k chybě." +msgstr "" msgid "To open this relationship, please wait until saving is complete" msgstr "Chcete-li otevřít tento vztah, počkejte na dokončení ukládání" @@ -1763,7 +1752,7 @@ msgid "Error editing the event, the changes made were not saved" msgstr "Chyba při úpravě události, provedené změny nebyly uloženy" msgid "Error updating the Assignee" -msgstr "Chyba při aktualizaci Příjemce" +msgstr "" msgid "Set coordinate" msgstr "Nastavit souřadnice" diff --git a/i18n/en.pot b/i18n/en.pot index fd3148ff95..f5f3c016f4 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-11-29T15:22:36.811Z\n" -"PO-Revision-Date: 2024-11-29T15:22:36.811Z\n" +"POT-Creation-Date: 2024-11-21T13:57:21.323Z\n" +"PO-Revision-Date: 2024-11-21T13:57:21.323Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -35,39 +35,6 @@ msgstr "" "(in the same domain). Please refresh this page if you would like to use " "this version again, but be aware that this will close other versions." -msgid "Enrollment dashboard" -msgstr "Enrollment dashboard" - -msgid "View event" -msgstr "View event" - -msgid "Edit event" -msgstr "Edit event" - -msgid "New event" -msgstr "New event" - -msgid "Active enrollments" -msgstr "Active enrollments" - -msgid "Completed enrollments" -msgstr "Completed enrollments" - -msgid "Cancelled enrollments" -msgstr "Cancelled enrollments" - -msgid "{{trackedEntityName}} list" -msgstr "{{trackedEntityName}} list" - -msgid "Search" -msgstr "Search" - -msgid "Working List" -msgstr "Working List" - -msgid "Event list" -msgstr "Event list" - msgid "More" msgstr "More" @@ -326,6 +293,9 @@ msgstr "Yes, discard changes" msgid "No, cancel" msgstr "No, cancel" +msgid "New event" +msgstr "New event" + msgid "You don't have access to create an event in the current selections" msgstr "You don't have access to create an event in the current selections" @@ -544,6 +514,9 @@ msgstr "Type to filter options" msgid "No match found" msgstr "No match found" +msgid "Search" +msgstr "Search" + msgid "Clear" msgstr "Clear" @@ -885,6 +858,9 @@ msgstr "event" msgid "You don't have access to edit this event" msgstr "You don't have access to edit this event" +msgid "Edit event" +msgstr "Edit event" + msgid "View changelog" msgstr "View changelog" @@ -922,6 +898,15 @@ msgstr "Event could not be loaded" msgid "Organisation unit could not be loaded" msgstr "Organisation unit could not be loaded" +msgid "Dashboard" +msgstr "Dashboard" + +msgid "Edit Event" +msgstr "Edit Event" + +msgid "View Event" +msgstr "View Event" + msgid "Selected program" msgstr "Selected program" @@ -948,9 +933,6 @@ msgstr "Loading" msgid "An error occurred while loading the form" msgstr "An error occurred while loading the form" -msgid "Back to all stages and events" -msgstr "Back to all stages and events" - msgid "Possible duplicates found" msgstr "Possible duplicates found" @@ -1291,9 +1273,6 @@ msgstr "Warning" msgid "stage not found in rules execution" msgstr "stage not found in rules execution" -msgid "Please provide an valid organisation unit" -msgstr "Please provide an valid organisation unit" - msgid "Delete event" msgstr "Delete event" @@ -1312,6 +1291,9 @@ msgstr "Event completed" msgid "The event cannot be edited after it has been completed" msgstr "The event cannot be edited after it has been completed" +msgid "Back to all stages and events" +msgstr "Back to all stages and events" + msgid "Notes about this event" msgstr "Notes about this event" @@ -1552,16 +1534,6 @@ msgstr "You do not have access to remove the link and delete the linked event" msgid "An error occurred while loading the widget." msgstr "An error occurred while loading the widget." -msgid "Linked event" -msgstr "Linked event" - -msgid "" -"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " -"the linked event details before entering data below" -msgstr "" -"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " -"the linked event details before entering data below" - msgid "Scheduled" msgstr "Scheduled" @@ -1595,12 +1567,6 @@ msgstr "Change" msgid "Value" msgstr "Value" -msgid "File" -msgstr "File" - -msgid "Image" -msgstr "Image" - msgid "New {{trackedEntityTypeName}} relationship" msgstr "New {{trackedEntityTypeName}} relationship" @@ -1662,45 +1628,6 @@ msgstr "Download data..." msgid "an error occurred loading working lists" msgstr "an error occurred loading working lists" -msgid "You do not have access to complete events" -msgstr "You do not have access to complete events" - -msgid "Complete events" -msgstr "Complete events" - -msgid "Are you sure you want to complete all active events in selection?" -msgstr "Are you sure you want to complete all active events in selection?" - -msgid "There are no active events to complete in the current selection." -msgstr "There are no active events to complete in the current selection." - -msgid "Error completing events" -msgstr "Error completing events" - -msgid "There was an error completing the events." -msgstr "There was an error completing the events." - -msgid "Details (Advanced)" -msgstr "Details (Advanced)" - -msgid "An unknown error occurred." -msgstr "An unknown error occurred." - -msgid "An error occurred while completing events" -msgstr "An error occurred while completing events" - -msgid "An error occurred while deleting the events" -msgstr "An error occurred while deleting the events" - -msgid "You do not have access to delete events" -msgstr "You do not have access to delete events" - -msgid "Delete events" -msgstr "Delete events" - -msgid "This cannot be undone. Are you sure you want to delete the selected events?" -msgstr "This cannot be undone. Are you sure you want to delete the selected events?" - msgid "Registration Date" msgstr "Registration Date" @@ -1716,129 +1643,14 @@ msgstr "Follow up" msgid "Choose a program stage to filter by {{label}}" msgstr "Choose a program stage to filter by {{label}}" -msgid "" -"Some enrollments were completed successfully, but there was an error while " -"completing the rest. Please see the details below." -msgstr "" -"Some enrollments were completed successfully, but there was an error while " -"completing the rest. Please see the details below." - -msgid "" -"There was an error while completing the enrollments. Please see the details " -"below." -msgstr "" -"There was an error while completing the enrollments. Please see the details " -"below." - -msgid "" -"An unexpected error occurred while fetching the enrollments. Please try " -"again." -msgstr "" -"An unexpected error occurred while fetching the enrollments. Please try " -"again." - -msgid "" -"There are currently no active enrollments in the selection. All enrollments " -"are already completed or cancelled." -msgstr "" -"There are currently no active enrollments in the selection. All enrollments " -"are already completed or cancelled." - -msgid "This action will complete {{count}} active enrollment in your selection." -msgid_plural "This action will complete {{count}} active enrollment in your selection." -msgstr[0] "This action will complete {{count}} active enrollment in your selection." -msgstr[1] "This action will complete {{count}} active enrollments in your selection." - -msgid "{{count}} enrollment already marked as completed will not be changed." -msgid_plural "{{count}} enrollment already marked as completed will not be changed." -msgstr[0] "{{count}} enrollment already marked as completed will not be changed." -msgstr[1] "{{count}} enrollments already marked as completed will not be changed." - -msgid "Mark all events within enrollments as complete" -msgstr "Mark all events within enrollments as complete" - -msgid "You do not have access to bulk complete enrollments" -msgstr "You do not have access to bulk complete enrollments" - -msgid "Complete enrollments" -msgstr "Complete enrollments" - -msgid "Error completing enrollments" -msgstr "Error completing enrollments" - -msgid "No active enrollments to complete" -msgstr "No active enrollments to complete" - -msgid "Complete {{count}} enrollment" -msgid_plural "Complete {{count}} enrollment" -msgstr[0] "Complete {{count}} enrollment" -msgstr[1] "Complete {{count}} enrollments" - -msgid "An error occurred when completing the enrollments" -msgstr "An error occurred when completing the enrollments" - -msgid "An unknown error occurred when completing enrollments" -msgstr "An unknown error occurred when completing enrollments" - -msgid "You do not have access to delete enrollments" -msgstr "You do not have access to delete enrollments" - -msgid "Delete enrollments" -msgstr "Delete enrollments" - -msgid "Delete selected enrollments" -msgstr "Delete selected enrollments" - -msgid "An error occurred while loading the selected enrollments. Please try again." -msgstr "An error occurred while loading the selected enrollments. Please try again." - -msgid "" -"This action will permanently delete the selected enrollments, including all " -"associated data and events." -msgstr "" -"This action will permanently delete the selected enrollments, including all " -"associated data and events." - -msgid "Active enrollments ({{count}})" -msgid_plural "Active enrollments ({{count}})" -msgstr[0] "Active enrollments ({{count}})" -msgstr[1] "Active enrollments ({{count}})" - -msgid "Completed enrollments ({{count}})" -msgid_plural "Completed enrollments ({{count}})" -msgstr[0] "Completed enrollments ({{count}})" -msgstr[1] "Completed enrollments ({{count}})" - -msgid "Cancelled enrollments ({{count}})" -msgid_plural "Cancelled enrollments ({{count}})" -msgstr[0] "Cancelled enrollments ({{count}})" -msgstr[1] "Cancelled enrollments ({{count}})" - -msgid "Delete {{count}} enrollment" -msgid_plural "Delete {{count}} enrollment" -msgstr[0] "Delete {{count}} enrollment" -msgstr[1] "Delete {{count}} enrollments" - -msgid "An error occurred when deleting enrollments" -msgstr "An error occurred when deleting enrollments" - -msgid "Delete {{ trackedEntityName }} with all enrollments" -msgstr "Delete {{ trackedEntityName }} with all enrollments" - -msgid "Delete {{count}} {{ trackedEntityName }}" -msgid_plural "Delete {{count}} {{ trackedEntityName }}" -msgstr[0] "Delete {{count}} {{ trackedEntityName }}" -msgstr[1] "Delete {{count}} {{ trackedEntityName }}" +msgid "Active enrollments" +msgstr "Active enrollments" -msgid "" -"Deleting records will also delete any associated enrollments and events. " -"This cannot be undone. Are you sure you want to delete?" -msgstr "" -"Deleting records will also delete any associated enrollments and events. " -"This cannot be undone. Are you sure you want to delete?" +msgid "Completed enrollments" +msgstr "Completed enrollments" -msgid "An error occurred while deleting the records" -msgstr "An error occurred while deleting the records" +msgid "Cancelled enrollments" +msgstr "Cancelled enrollments" msgid "Working list could not be updated" msgstr "Working list could not be updated" @@ -1849,14 +1661,6 @@ msgstr "an error occurred loading the working lists" msgid "an error occurred loading Tracked entity instance lists" msgstr "an error occurred loading Tracked entity instance lists" -msgid "{{count}} selected" -msgid_plural "{{count}} selected" -msgstr[0] "{{count}} selected" -msgstr[1] "{{count}} selected" - -msgid "Deselect all" -msgstr "Deselect all" - msgid "Update view" msgstr "Update view" diff --git a/i18n/es.po b/i18n/es.po index 301f636658..62ee25e726 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -7,6 +7,7 @@ # Prabhjot Singh, 2023 # Christian Atavillos, 2023 # Alison Andrade , 2024 +# Philip Larsen Donnelly, 2024 # Gabriela Rodriguez , 2024 # Janeth Cruz, 2024 # Enzo Nicolas Rossi , 2024 @@ -14,14 +15,13 @@ # Marta Vila , 2024 # Juan M Alcantara Acosta , 2024 # Manuel Silva , 2024 -# Philip Larsen Donnelly, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Philip Larsen Donnelly, 2024\n" +"Last-Translator: Manuel Silva , 2024\n" "Language-Team: Spanish (https://app.transifex.com/hisp-uio/teams/100509/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -712,10 +712,8 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Agregue una nueva inscripción para {{teiDisplayName}} en este programa." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Sin acceso al propietario del programa." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} no está inscrito en este programa." @@ -1128,8 +1126,8 @@ msgstr "No hay tipos de entidades rastreadas disponibles" msgid "Assigned to" msgstr "Asignado a" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "No tienes acceso para editar este asignado." msgid "Edit" msgstr "Editar" @@ -1137,8 +1135,8 @@ msgstr "Editar" msgid "No one is assigned to this event" msgstr "Nadie está asignado a este evento" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "No tienes acceso para asignar un asignado." msgid "Assign" msgstr "Asignar" @@ -1187,9 +1185,6 @@ msgstr "Marca como cancelado" msgid "Mark incomplete" msgstr "Marca como incompleto" -msgid "You do not have access to delete this enrollment" -msgstr "" - msgid "Delete enrollment" msgstr "Borrar inscripción" @@ -1607,7 +1602,7 @@ msgid "Change" msgstr "Cambio" msgid "Value" -msgstr "Valor" +msgstr "" msgid "New {{trackedEntityTypeName}} relationship" msgstr "Nueva relación de {{trackedEntityTypeName}}" diff --git a/i18n/es_419.po b/i18n/es_419.po index f996ede3ef..c94ef95e6a 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jaime Bosque , 2024\n" "Language-Team: Spanish (Latin America) (https://app.transifex.com/hisp-uio/teams/100509/es_419/)\n" @@ -700,10 +700,8 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Agregue una nueva inscripción para {{teiDisplayName}} en este programa." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Sin acceso al propietario del programa." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} no está inscrito en este programa." @@ -1100,7 +1098,7 @@ msgstr "" msgid "Assigned to" msgstr "" -msgid "You don't have access to edit the assigned user" +msgid "You don't have access to edit this assignee" msgstr "" msgid "Edit" @@ -1109,7 +1107,7 @@ msgstr "" msgid "No one is assigned to this event" msgstr "No hay nadie asignado a este evento." -msgid "You don't have access to assign a user to this event" +msgid "You don't have access to assign an assignee" msgstr "" msgid "Assign" @@ -1155,9 +1153,6 @@ msgstr "" msgid "Mark incomplete" msgstr "" -msgid "You do not have access to delete this enrollment" -msgstr "" - msgid "Delete enrollment" msgstr "" @@ -1539,7 +1534,7 @@ msgid "Change" msgstr "" msgid "Value" -msgstr "Valor" +msgstr "" msgid "New {{trackedEntityTypeName}} relationship" msgstr "" diff --git a/i18n/lo.po b/i18n/lo.po index 3137abc4f2..4decb60044 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Saysamone Sibounma, 2024\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" @@ -682,10 +682,8 @@ msgstr "ບໍ່ມີການລົງທະບຽນທີ່ເຄື່ອ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "ເພີ່ມການລົງທະບຽນໃໝ່ສຳລັບ {{teiDisplayName}} ໃນໂປແກຼມນີ້." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "ບໍ່ສາມາດເຂົ້າເຖິງເຈົ້າຂອງໂປແກຼມ." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} ບໍ່ໄດ້ລົງທະບຽນຢູ່ໃນໂປແກຼມນີ້." @@ -1079,8 +1077,8 @@ msgstr "ບໍ່ມີປະເພດບາຍບຸກຄົນທີ່ສາ msgid "Assigned to" msgstr "ມອບໝາຍໃຫ້" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "ທ່ານບໍ່ມີສິດໃນການແກ້ໄຂຂໍ້ມູນຜູ້ມອບໝາຍ" msgid "Edit" msgstr "ແກ້ໄຂ" @@ -1088,8 +1086,8 @@ msgstr "ແກ້ໄຂ" msgid "No one is assigned to this event" msgstr "ບໍ່ມີຜູ້ຖືກມອບໝາຍໃຫ້ກັບເຫດການນີ້" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "ທ່ານບໍ່ມີສິດໃນການມອບໝາຍ" msgid "Assign" msgstr "ມອບໝາຍ" @@ -1136,9 +1134,6 @@ msgstr "ໝາຍວ່າຖືກຍົກເລີກ" msgid "Mark incomplete" msgstr "ໝາຍວ່າບໍ່ຄົບຖ້ວນ" -msgid "You do not have access to delete this enrollment" -msgstr "" - msgid "Delete enrollment" msgstr "ລົບການລົງທະບຽນ" diff --git a/i18n/nb.po b/i18n/nb.po index 97ce9b28c4..6b566e538a 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Caroline Hesthagen Holen , 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" @@ -689,10 +689,8 @@ msgstr "Det er ingen aktive registreringer." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Legg til ny registrering for {{teiDisplayName}} i dette programmet." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Ingen tilgang til programeier." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} er ikke registrert i dette programmet." @@ -1092,8 +1090,8 @@ msgstr "Det er ingen sporbare enhetstyper tilgjengelig" msgid "Assigned to" msgstr "Tildelt til" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "Du har ikke tilgang til å redigere denne tildelte brukeren" msgid "Edit" msgstr "Rediger" @@ -1101,8 +1099,8 @@ msgstr "Rediger" msgid "No one is assigned to this event" msgstr "Ingen er tildelt denne hendelsen" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "Du har ikke tilgang til å tildele bruker" msgid "Assign" msgstr "Tildel" @@ -1151,9 +1149,6 @@ msgstr "Merk som kansellert" msgid "Mark incomplete" msgstr "Merk som ufullstendig" -msgid "You do not have access to delete this enrollment" -msgstr "" - msgid "Delete enrollment" msgstr "Slett registrering" diff --git a/i18n/nl.po b/i18n/nl.po index 6a73105036..9f88c8b400 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Rica, 2024\n" "Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" @@ -697,10 +697,8 @@ msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "" "Voeg een nieuwe inschrijving toe voor {{teiDisplayName}} in dit programma." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Geen toegang tot programma-eigenaar." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} is niet ingeschreven voor dit programma." @@ -1106,7 +1104,7 @@ msgstr "" msgid "Assigned to" msgstr "Toegewezen aan" -msgid "You don't have access to edit the assigned user" +msgid "You don't have access to edit this assignee" msgstr "" msgid "Edit" @@ -1115,7 +1113,7 @@ msgstr "Bewerk" msgid "No one is assigned to this event" msgstr "Er is niemand toegewezen aan dit evenement" -msgid "You don't have access to assign a user to this event" +msgid "You don't have access to assign an assignee" msgstr "" msgid "Assign" @@ -1166,9 +1164,6 @@ msgstr "Markeren als geannuleerd" msgid "Mark incomplete" msgstr "Markering onvolledig" -msgid "You do not have access to delete this enrollment" -msgstr "" - msgid "Delete enrollment" msgstr "Inschrijving verwijderen" diff --git a/i18n/pt.po b/i18n/pt.po index 7261e12ecb..1a05f44f6b 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -11,14 +11,13 @@ # Jason Pickering , 2024 # Helton Dias, 2024 # Shelsea Chumaio, 2024 -# Laurência Luís, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Laurência Luís, 2024\n" +"Last-Translator: Shelsea Chumaio, 2024\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -171,13 +170,13 @@ msgid "Complete event" msgstr "Evento completo" msgid "{{ stageName }} - Basic info" -msgstr "{{ stageName }} - Informações básicas" +msgstr "" msgid "{{ stageName }} - Assignee" -msgstr "{{ stageName }} - Atribuído" +msgstr "" msgid "{{ stageName }} - Status" -msgstr "{{ stageName }} - Estado" +msgstr "" msgid "Please select {{categoryName}}" msgstr "Por Favor Selecione {{categoryName}}" @@ -199,10 +198,10 @@ msgid "Metadata error. see log for details" msgstr "Erro de metadados. veja o log para detalhes" msgid "{{ stageName }} - Details" -msgstr "{{ stageName }} - Detalhes" +msgstr "" msgid "{{ stageName }} - {{ sectionName }}" -msgstr "{{ stageName }} - {{ sectionName }}" +msgstr "" msgid "Assigned user" msgstr "Utilizador atribuído" @@ -251,7 +250,7 @@ msgid "Completed" msgstr "Concluído" msgid "Please add or cancel note before saving the event" -msgstr "Adicionar ou cancelar a nota antes de guardar o evento" +msgstr "" msgid "Save and add another" msgstr "Gravar e adicionar outro" @@ -337,26 +336,26 @@ msgid "An error has occurred. See log for details" msgstr "Ocorreu um erro. Veja o log para detalhes" msgid "{{programStageName}} completed" -msgstr "{{programStageName}} Concluído" +msgstr "" msgid "" "Would you like to complete the enrollment and all active events as well?" -msgstr "Gostaria de completar a inscrição e todos os eventos activos?" +msgstr "" msgid "{{count}} event in {{programStageName}}" msgid_plural "{{count}} event in {{programStageName}}" -msgstr[0] "{{count}} evento em {{programStageName}}" -msgstr[1] "{{count}} eventos em {{programStageName}}" -msgstr[2] "{{count}} Eventos em {{programStageName}}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "Yes, complete enrollment and events" -msgstr "Sim, completar a inscrição e os eventos" +msgstr "" msgid "Complete enrollment only" -msgstr "Completar apenas a inscrição" +msgstr "" msgid "Would you like to complete the enrollment?" -msgstr "Gostaria de completar a inscrição?" +msgstr "" msgid "Complete enrollment" msgstr "Completar inscrição" @@ -392,10 +391,10 @@ msgid "validation failed" msgstr "falha na validação" msgid "No feedback for this event yet" -msgstr "Ainda não há feedback para este evento" +msgstr "" msgid "No indicator output for this event yet" -msgstr "Não existe nenhum resultado do indicador para este evento" +msgstr "" msgid "Generate new event" msgstr "Gerar novo evento" @@ -532,7 +531,7 @@ msgid "Select image" msgstr "Selecione a imagem" msgid "Type to filter options" -msgstr "Tipo de opções de filtros" +msgstr "" msgid "No match found" msgstr "Nenhuma correspondência encontrada" @@ -620,16 +619,15 @@ msgstr "Programa não existe" msgid "Selected program is invalid for selected organisation unit" msgstr "" -"O programa selecionado é inválido para a unidade organizacional selecionada" msgid "Add note" msgstr "Adicionar uma nota" msgid "You don't have access to write notes" -msgstr "Não tem acesso para escrever notas" +msgstr "" msgid "Write note" -msgstr "Escrever nota" +msgstr "" msgid "was blanked out and hidden by your last action" msgstr "foi apagado e escondido pela sua última ação" @@ -641,13 +639,13 @@ msgid "Close the notice" msgstr "Fechar o aviso" msgid "Enrollment with id \"{{enrollmentId}}\" does not exist" -msgstr "O registo com o id \"{{enrollmentId}}\" não existe" +msgstr "" msgid "Tracked entity instance with id \"{{teiId}}\" does not exist" msgstr "A instância de entidade rastreada com id \"{{teiId}}\" não existe" msgid "Program with id \"{{programId}}\" does not exist" -msgstr "O programa com o id \"{{programId}}\" não existe" +msgstr "" msgid "" "An error occurred while fetching enrollments. Please enter a valid url." @@ -703,12 +701,8 @@ msgstr "Não há inscrições ativas." msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "Adicione uma nova inscrição para {{teiDisplayName}} neste programa." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" -"Não tem permissões para aceder a este programa, unidade de registo, contacte" -" o seu administrador para mais informações." +msgid "No access to program owner." +msgstr "Sem acesso ao proprietário do programa." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "{{teiDisplayName}} não está inscrito neste programa." @@ -749,7 +743,7 @@ msgid "There was an error loading the page" msgstr "Ocorreu um erro ao carregar a página" msgid "Choose an organisation unit to start reporting" -msgstr "Selecionar uma unidade organizacional para iniciar o preenchimento " +msgstr "" msgid "Program stage is invalid" msgstr "O estagio do programa é inválida" @@ -764,7 +758,7 @@ msgid "Refer" msgstr "Referir" msgid "You can't add any more {{ programStageName }} events" -msgstr "Não é possível adicionar mais eventos {{ programStageName }} " +msgstr "" msgid "Cancel without saving" msgstr "Cancelar sem gravar" @@ -785,8 +779,6 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" -"A opção de categoria não é válida para a unidade organizacional selecionada." -" Por favor, selecione uma combinação válida." msgid "Please select {{category}}." msgstr "Selecione {{category}}." @@ -804,7 +796,6 @@ msgid "" "You don't have access to create a {{trackedEntityName}} in the current " "selections" msgstr "" -"Não tem acesso para criar um {{trackedEntityName}} nas selecções actuais" msgid "Choose the {{missingCategories}} to start reporting" msgstr "Escolha as {{missingCategories}} para começar a relatar" @@ -828,7 +819,7 @@ msgid "New Enrollment in program{{escape}} {{programName}}" msgstr "Nova Inscrição no programa{{escape}} {{programName}}" msgid "Save {{trackedEntityTypeName}}" -msgstr "Guardar {{trackedEntityTypeName}}" +msgstr "" msgid "Save {{trackedEntityName}}" msgstr "Gravar {{trackedEntityName}}" @@ -894,7 +885,7 @@ msgid "Edit event" msgstr "Editar evento" msgid "View changelog" -msgstr "Ver registo de alterações" +msgstr "" msgid "Event details" msgstr "Detalhes do evento" @@ -934,10 +925,10 @@ msgid "Dashboard" msgstr "Painel de Instrumentos" msgid "Edit Event" -msgstr "Editar evento" +msgstr "" msgid "View Event" -msgstr "Ver evento" +msgstr "" msgid "Selected program" msgstr "Programa selecionado" @@ -956,8 +947,6 @@ msgstr[2] "Preencha pelo menos {{count}} atributos para pesquisar" msgid "Could not retrieve metadata. Please try again later." msgstr "" -"Não foi possível recuperar os metadados. Por favor, tente novamente mais " -"tarde." msgid "The enrollment event data could not be found" msgstr "Os dados do evento de inscrição não foram encontrados" @@ -966,7 +955,7 @@ msgid "Loading" msgstr "Carregando.." msgid "An error occurred while loading the form" -msgstr "Ocorreu um erro ao carregar o formulário" +msgstr "" msgid "Possible duplicates found" msgstr "Possíveis duplicatas encontradas" @@ -987,7 +976,7 @@ msgid "No results found for " msgstr "Nenhum resultado encontrado para" msgid "Choose an organisation unit" -msgstr "Escolha uma unidade organizacional" +msgstr "" msgid "Clear selection" msgstr "Limpar seleção" @@ -1000,7 +989,6 @@ msgstr "Procurar um programa" msgid "Some programs are being filtered by the chosen organisation unit" msgstr "" -"Alguns programas estão a ser filtrados pela unidade organizacional escolhida" msgid "Show all programs" msgstr "Mostrar todos os programas" @@ -1105,7 +1093,7 @@ msgid "Create saved list" msgstr "Criar lista gravadas" msgid "Create new in another program" -msgstr "Criar novo noutro programa" +msgstr "" msgid "Create new event" msgstr "Criar um novo evento" @@ -1114,13 +1102,13 @@ msgid "Search for a {{trackedEntityName}} in {{programName}}" msgstr "Procure por um {{trackedEntityName}} em {{programName}}" msgid "No tracked entity types available" -msgstr "Não há tipos de entidades rastreadas disponíveis" +msgstr "" msgid "Assigned to" msgstr "Atribuído a" -msgid "You don't have access to edit the assigned user" -msgstr "Não tem acesso para editar o utilizador atribuído" +msgid "You don't have access to edit this assignee" +msgstr "" msgid "Edit" msgstr "Editar" @@ -1128,8 +1116,8 @@ msgstr "Editar" msgid "No one is assigned to this event" msgstr "Ninguém está atribuído a este evento" -msgid "You don't have access to assign a user to this event" -msgstr "Não tem acesso para atribuir um utilizador a este evento" +msgid "You don't have access to assign an assignee" +msgstr "" msgid "Assign" msgstr "Atribuir" @@ -1179,7 +1167,7 @@ msgid "Mark incomplete" msgstr "Marca incompleta" msgid "You do not have access to delete this enrollment" -msgstr "Não tem acesso para apagar este registo" +msgstr "" msgid "Delete enrollment" msgstr "Excluir inscrição" @@ -1204,12 +1192,10 @@ msgid "Transfer" msgstr "Transferir" msgid "An error occurred while transferring ownership" -msgstr "Ocorreu um erro durante a transferência de propriedade" +msgstr "" msgid "Existing dates for auto-generated events will not be updated." msgstr "" -"As datas existentes para eventos gerados automaticamente não serão " -"actualizadas." msgid "Latitude" msgstr "Latitude" @@ -1218,7 +1204,7 @@ msgid "Longitude" msgstr "Longitude" msgid "Set coordinates" -msgstr "Definir coordenadas" +msgstr "" msgid "Coordinates" msgstr "Coordenadas" @@ -1227,10 +1213,10 @@ msgid "Delete polygon" msgstr "Excluir polígono" msgid "Close without saving" -msgstr "Fechar sem guardar" +msgstr "" msgid "Finish drawing before saving" -msgstr "Terminar o desenho antes de o guardar" +msgstr "" msgid "Set area" msgstr "Definir área" @@ -1239,25 +1225,19 @@ msgid "" "Transferring enrollment ownership from {{ownerOrgUnit}} to " "{{newOrgUnit}}{{escape}}" msgstr "" -"Transferência da propriedade do registo de {{ownerOrgUnit}} para " -"{{newOrgUnit}}{{escape}}" msgid "" "You will lose access to the enrollment when transferring ownership to " "{{organisationUnit}}." msgstr "" -"O utilizador perderá o acesso ao registo quando transferir a propriedade " -"para {{organisationUnit}}." msgid "Transfer Ownership" -msgstr "Transferir a propriedade" +msgstr "" msgid "" "Choose the organisation unit to which enrollment ownership should be " "transferred." msgstr "" -"Selecionar a unidade organizacional para a qual a propriedade do registo " -"deve ser transferida." msgid "Enrollment date" msgstr "Data de inscrição" @@ -1274,22 +1254,22 @@ msgid "Follow-up" msgstr "Acompanhamento" msgid "Started at{{escape}}" -msgstr "Iniciado em{{escape}}" +msgstr "" msgid "Owned by{{escape}}" -msgstr "Propriedade de{{escape}}" +msgstr "" msgid "Cancelled" msgstr "Cancelado" msgid "Add coordinates" -msgstr "Adicionar coordenadas" +msgstr "" msgid "Add area" -msgstr "Adicionar área" +msgstr "" msgid "Please add or cancel the note before saving the event" -msgstr "Adicione ou cancele a nota antes de guardar o evento" +msgstr "" msgid "organisation unit could not be retrieved. Please try again later." msgstr "" @@ -1303,13 +1283,13 @@ msgid "program or stage is invalid" msgstr "programa ou estágio é inválido" msgid "Notes about this enrollment" -msgstr "Notas sobre este registo" +msgstr "" msgid "Write a note about this enrollment" -msgstr "Escrever uma nota sobre este registo" +msgstr "" msgid "This enrollment doesn't have any notes" -msgstr "Este registo não tem notas" +msgstr "" msgid "Error" msgstr "Erro" @@ -1336,19 +1316,19 @@ msgid "Event completed" msgstr "Evento concluído" msgid "The event cannot be edited after it has been completed" -msgstr "O evento não pode ser editado depois de ter sido concluído" +msgstr "" msgid "Back to all stages and events" msgstr "Voltar para todos os palcos e eventos" msgid "Notes about this event" -msgstr "Notas sobre este evento" +msgstr "" msgid "Write a note about this event" -msgstr "Escrever uma nota sobre este evento" +msgstr "" msgid "This event doesn't have any notes" -msgstr "Este evento não tem quaisquer notas" +msgstr "" msgid "Schedule date info" msgstr "Informação da data da programação" @@ -1394,10 +1374,10 @@ msgid "Schedule date / Due date" msgstr "Data de programação / Data de vencimento" msgid "Event notes" -msgstr "Notas do evento" +msgstr "" msgid "Write a note about this scheduled event" -msgstr "Escrever uma nota sobre este evento programado" +msgstr "" msgid "Save note" msgstr "Gravar notas" @@ -1438,25 +1418,22 @@ msgid "Fix errors in the form to continue." msgstr "Corrija os erros no formulário para continuar." msgid "You do not have access to delete this {{trackedEntityTypeName}}" -msgstr "Não tem acesso para apagar{{trackedEntityTypeName}}" +msgstr "" msgid "Delete {{trackedEntityTypeName}}" -msgstr "Apagar{{trackedEntityTypeName}}" +msgstr "" msgid "" "Are you sure you want to delete this {{trackedEntityTypeName}}? This will " "permanently remove the {{trackedEntityTypeName}} and all its associated " "enrollments and events in all programs." msgstr "" -"Tem a certeza de que pretende apagar {{trackedEntityTypeName}}? Isto irá " -"remover permanentemente o {{trackedEntityTypeName}} e todos os registos e " -"eventos associados em todos os programas." msgid "There was a problem deleting the {{trackedEntityTypeName}}" -msgstr "Houve um problema ao eliminar o ficheiro {{trackedEntityTypeName}}" +msgstr "" msgid "Yes, delete {{trackedEntityTypeName}}" -msgstr "Sim, apagar {{trackedEntityTypeName}}" +msgstr "" msgid "Profile widget could not be loaded. Please try again later" msgstr "" @@ -1464,31 +1441,31 @@ msgstr "" "tarde" msgid "{{trackedEntityTypeName}} profile" -msgstr "{{trackedEntityTypeName}} perfil" +msgstr "" msgid "tracked entity instance" msgstr "instância de entidade rastreada" msgid "Link to an existing {{linkableStageLabel}}" -msgstr "Ligar a um existente {{linkableStageLabel}}" +msgstr "" msgid "Choose a {{linkableStageLabel}}" -msgstr "Escolha um {{linkableStageLabel}}" +msgstr "" msgid "{{ linkableStageLabel }} is not repeatable" -msgstr "{{ linkableStageLabel }} Não é repetivo" +msgstr "" msgid "{{ linkableStageLabel }} has no linkable events" -msgstr "{{ linkableStageLabel }} Não tem eventos associados" +msgstr "" msgid "Ambiguous relationships, contact system administrator" -msgstr "Relacionamentos ambíguos, contacte o administrador do sistema" +msgstr "" msgid "Enter details now" -msgstr "Introduzir dados agora" +msgstr "" msgid "Link to an existing" -msgstr "Ligar a um existente " +msgstr "" msgid "Scheduled date" msgstr "Data agendada" @@ -1497,10 +1474,10 @@ msgid "Report date" msgstr "Data do relatório" msgid "Please select a valid event" -msgstr "Selecione um evento válido" +msgstr "" msgid "You do not have access to create events in this stage" -msgstr "Não tem acesso para criar eventos neste estágio" +msgstr "" msgid "This stage can only have one event" msgstr "Esta etapa só pode ter um evento" @@ -1509,20 +1486,18 @@ msgid "New {{ eventName }} event" msgstr "Novo evento de {{ eventName }}" msgid "An error occurred while deleting the event" -msgstr "Ocorreu um erro ao apagar o evento" +msgstr "" msgid "" "Deleting an event is permanent and cannot be undone. Are you sure you want " "to delete this event?" msgstr "" -"A eliminação de um evento é permanente e não pode ser anulada. Tem a certeza" -" de que pretende apagar este evento?" msgid "An error occurred when updating event status" -msgstr "Ocorreu um erro ao atualizar o estado do evento" +msgstr "" msgid "Unskip" -msgstr "Descompactar" +msgstr "" msgid "Skip" msgstr "Saltar" @@ -1544,9 +1519,9 @@ msgstr "" msgid "{{ count }} event" msgid_plural "{{ count }} event" -msgstr[0] "{{ count }} evento" -msgstr[1] "{{count}} eventos" -msgstr[2] "{{count}} Eventos" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" msgid "{{ overdueEvents }} overdue" msgstr "{{ overdueEvents }} em atraso" @@ -1558,10 +1533,10 @@ msgid "Stages and Events" msgstr "Fases e Eventos" msgid "An error occurred while loading the widget." -msgstr "Ocorreu um erro ao carregar o widget." +msgstr "" msgid "View linked event" -msgstr "Ver evento associado" +msgstr "" msgid "Scheduled" msgstr "Agendado" @@ -1570,7 +1545,7 @@ msgid "Changelog" msgstr "Registo de mudanças" msgid "No changes to display" -msgstr "Sem alterações no ecrã" +msgstr "" msgid "Updated" msgstr "Actualizado" @@ -1591,37 +1566,35 @@ msgid "Data item" msgstr "Item de dados" msgid "Change" -msgstr "Alterar" +msgstr "" msgid "Value" msgstr "Valor" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "Relacionamento {{trackedEntityTypeName}} " +msgstr "" msgid "Missing implementation step" -msgstr "Falta etapa de implementação" +msgstr "" msgid "Go back without saving relationship" -msgstr "Voltar atrás sem guardar o relacionamento" +msgstr "" msgid "New Relationship" -msgstr "Novo relacionamento" +msgstr "" msgid "Link to an existing {{tetName}}" -msgstr "Associar a um existente {{tetName}}" +msgstr "" msgid "An error occurred while adding the relationship" -msgstr "Ocorreu um erro ao adicionar o relacionamento" +msgstr "" msgid "" "Something went wrong while loading relationships. Please try again later." msgstr "" -"Algo correu mal ao carregar os relacionamento. Por favor, tente novamente " -"mais tarde." msgid "{{trackedEntityTypeName}} relationships" -msgstr "{{trackedEntityTypeName}} Relacionamentos" +msgstr "" msgid "Delete relationship" msgstr "Apagar relacionamento" @@ -1630,24 +1603,21 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" -"A eliminação da relação é permanente e não pode ser anulada. Tem a certeza " -"de que pretende eliminar este relacionamento?" msgid "Yes, delete relationship" -msgstr "Sim, apagar relacionamento" +msgstr "" msgid "An error occurred while deleting the relationship." -msgstr "Ocorreu um erro ao apagar o relacionamento." +msgstr "" msgid "To open this relationship, please wait until saving is complete" msgstr "" -"Para abrir este relacionamento, aguarde até que a gravação esteja concluída" msgid "Type" msgstr "Tipo" msgid "Created date" -msgstr "Data de criação" +msgstr "" msgid "Program stage name" msgstr "Nome do estágio do programa" @@ -1801,7 +1771,7 @@ msgid "Error editing the event, the changes made were not saved" msgstr "Erro ao editar o evento, as alterações feitas não foram gravadas" msgid "Error updating the Assignee" -msgstr "Erro ao atualizar o destinatário" +msgstr "" msgid "Set coordinate" msgstr "Definir coordenada" diff --git a/i18n/ru.po b/i18n/ru.po index 0d16b78d76..23d7e47cd1 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -701,10 +701,8 @@ msgstr "" "Создать новую регистрационную запись для объекта {{teiDisplayName}} в данной" " программе." -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "Нет доступа к владельцу программы." msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "Объект {{teiDisplayName}} не зарегистрирован в данной программе." @@ -1108,8 +1106,8 @@ msgstr "Нет доступных отслеживаемых типов объе msgid "Assigned to" msgstr "Назначено пользователю" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "У вас нет доступа к редактированию данного назначенного пользователя" msgid "Edit" msgstr "Редактировать" @@ -1117,8 +1115,8 @@ msgstr "Редактировать" msgid "No one is assigned to this event" msgstr "Никто не назначен для данного события" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "У вас нет доступа к назначению пользователя" msgid "Assign" msgstr "Назначить" diff --git a/i18n/zh.po b/i18n/zh.po index 68c558db1b..d18eb1bd0d 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-10-25T18:18:11.518Z\n" +"POT-Creation-Date: 2024-10-14T14:53:34.553Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: easylin , 2024\n" "Language-Team: Chinese (https://app.transifex.com/hisp-uio/teams/100509/zh/)\n" @@ -668,10 +668,8 @@ msgstr "没有有效的注册。" msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "在此计划中为 {{teiDisplayName}} 添加新注册。" -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "无法访问项目所有者。" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "该项目未报名{{teiDisplayName}} 。" @@ -1058,8 +1056,8 @@ msgstr "没有可跟踪的实体类型" msgid "Assigned to" msgstr "指派到" -msgid "You don't have access to edit the assigned user" -msgstr "" +msgid "You don't have access to edit this assignee" +msgstr "您无权编辑该受让人" msgid "Edit" msgstr "编辑" @@ -1067,8 +1065,8 @@ msgstr "编辑" msgid "No one is assigned to this event" msgstr "没有人被分配到的该事件" -msgid "You don't have access to assign a user to this event" -msgstr "" +msgid "You don't have access to assign an assignee" +msgstr "您无权指定受托人" msgid "Assign" msgstr "分配" @@ -1113,9 +1111,6 @@ msgstr "标记为已取消" msgid "Mark incomplete" msgstr "标记不完整" -msgid "You do not have access to delete this enrollment" -msgstr "您没有删除此注册登记的权限" - msgid "Delete enrollment" msgstr "删除报名" @@ -1197,10 +1192,10 @@ msgid "Follow-up" msgstr "后续" msgid "Started at{{escape}}" -msgstr "开始于{{escape}}" +msgstr "" msgid "Owned by{{escape}}" -msgstr "所有者{{escape}}" +msgstr "" msgid "Cancelled" msgstr "已取消" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index 6a0a80ee90..8d01178792 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -667,10 +667,8 @@ msgstr "没有活跃的注册。" msgid "Add new enrollment for {{teiDisplayName}} in this program." msgstr "在此计划中为 {{teiDisplayName}} 添加新注册。" -msgid "" -"You do not have permissions to access to this program, registering unit or " -"record, contact your administrator for more information." -msgstr "" +msgid "No access to program owner." +msgstr "无法访问程序所有者。" msgid "{{teiDisplayName}} is not enrolled in this program." msgstr "该项目未报名{{teiDisplayName}} 。" @@ -1057,7 +1055,7 @@ msgstr "" msgid "Assigned to" msgstr "指派到" -msgid "You don't have access to edit the assigned user" +msgid "You don't have access to edit this assignee" msgstr "" msgid "Edit" @@ -1066,7 +1064,7 @@ msgstr "编辑" msgid "No one is assigned to this event" msgstr "没有人被分配到的该事件" -msgid "You don't have access to assign a user to this event" +msgid "You don't have access to assign an assignee" msgstr "" msgid "Assign" diff --git a/package.json b/package.json index 4f75109c84..120562781a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.18.0", + "version": "101.14.8", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.18.0", + "@dhis2/rules-engine-javascript": "101.14.8", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", @@ -19,7 +19,6 @@ "@dhis2/d2-ui-rich-text": "^7.4.0", "@dhis2/d2-ui-sharing-dialog": "^7.3.3", "@dhis2/ui": "^9.10.1", - "@dhis2-ui/calendar": "10.0.3", "@joakim_sm/react-infinite-calendar": "^2.4.2", "@material-ui/core": "3.9.4", "@material-ui/icons": "3", @@ -137,7 +136,6 @@ "@dhis2/app-runtime": "^3.10.2", "@babel/preset-react": "7.16.7", "@dhis2/ui": "^9.10.1", - "@dhis2-ui/calendar": "10.0.3", "@js-temporal/polyfill": "0.4.3", "core-js": "2.5.7", "i18next": "^20.5.0" diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index ba125a9d60..5609a84908 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.18.0", + "version": "101.14.8", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { diff --git a/src/core_modules/capture-core-utils/featuresSupport/support.js b/src/core_modules/capture-core-utils/featuresSupport/support.js index ff5fb4f11a..103df995a5 100644 --- a/src/core_modules/capture-core-utils/featuresSupport/support.js +++ b/src/core_modules/capture-core-utils/featuresSupport/support.js @@ -10,7 +10,6 @@ export const FEATURES = Object.freeze({ trackerFileEndpoint: 'trackerFileEndpoint', trackedEntitiesCSV: 'trackedEntitiesCSV', newAocApiSeparator: 'newAocApiSeparator', - newEntityFilterQueryParam: 'newEntityFilterQueryParam', }); // The first minor version that supports the feature @@ -25,7 +24,6 @@ const MINOR_VERSION_SUPPORT = Object.freeze({ [FEATURES.changelogs]: 41, [FEATURES.trackedEntitiesCSV]: 40, [FEATURES.newAocApiSeparator]: 41, - [FEATURES.newEntityFilterQueryParam]: 41, }); export const hasAPISupportForFeature = (minorVersion: string | number, featureName: string) => diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js deleted file mode 100644 index 1387ce9209..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/EnrollmentBreadcrumb.js +++ /dev/null @@ -1,171 +0,0 @@ -// @flow -import type { ComponentType } from 'react'; -import React, { useCallback, useMemo, useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core/styles'; -import { colors, IconChevronRight16 } from '@dhis2/ui'; -import { useWorkingListLabel } from './hooks/useWorkingListLabel'; -import { BreadcrumbItem } from '../common/BreadcrumbItem'; -import { defaultDialogProps } from '../../Dialogs/DiscardDialog.constants'; -import { DiscardDialog } from '../../Dialogs/DiscardDialog.component'; -import { - EnrollmentPageKeys, -} from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; - -type Props = { - onBackToMainPage: () => void, - onBackToDashboard?: () => void, - onBackToViewEvent?: () => void, - displayFrontPageList: boolean, - programId: string, - userInteractionInProgress?: boolean, - trackedEntityName?: string, -}; - -export const EventStatuses = { - ACTIVE: 'ACTIVE', - COMPLETED: 'COMPLETED', - SKIPPED: 'SKIPPED', - SCHEDULE: 'SCHEDULE', - OVERDUE: 'OVERDUE', -}; - -const styles = { - container: { - display: 'flex', - alignItems: 'center', - }, -}; - -const pageKeys = Object.freeze({ - MAIN_PAGE: 'mainPage', - ...EnrollmentPageKeys, -}); - -const eventIsScheduled = eventStatus => [EventStatuses.SCHEDULE, EventStatuses.OVERDUE, EventStatuses.SKIPPED] - .includes(eventStatus); - -const BreadcrumbsPlain = ({ - onBackToMainPage, - onBackToDashboard, - onBackToViewEvent, - eventStatus, - programId, - trackedEntityName, - displayFrontPageList, - userInteractionInProgress = false, - page, - classes, -}) => { - const [openWarning, setOpenWarning] = useState(null); - - const { label } = useWorkingListLabel({ - trackedEntityName, - programId, - displayFrontPageList, - }); - - const handleNavigation = useCallback((callback, warningType) => { - if (userInteractionInProgress) { - setOpenWarning(warningType); - } else { - callback && callback(); - } - }, [userInteractionInProgress]); - - const breadcrumbItems = useMemo(() => ([ - { - key: pageKeys.MAIN_PAGE, - onClick: () => handleNavigation(onBackToMainPage, pageKeys.MAIN_PAGE), - label, - selected: false, - condition: true, - }, - { - key: pageKeys.OVERVIEW, - onClick: () => handleNavigation(onBackToDashboard, pageKeys.OVERVIEW), - label: i18n.t('Enrollment dashboard'), - selected: page === pageKeys.OVERVIEW, - condition: true, - }, - { - key: pageKeys.VIEW_EVENT, - onClick: () => handleNavigation(onBackToViewEvent, pageKeys.VIEW_EVENT), - label: i18n.t('View event'), - selected: page === pageKeys.VIEW_EVENT, - condition: page === pageKeys.VIEW_EVENT || - (page === pageKeys.EDIT_EVENT && !eventIsScheduled(eventStatus)), - }, - { - key: pageKeys.EDIT_EVENT, - onClick: () => {}, - label: i18n.t('Edit event'), - selected: page === pageKeys.EDIT_EVENT, - condition: page === pageKeys.EDIT_EVENT, - }, - { - key: pageKeys.NEW_EVENT, - onClick: () => {}, - label: i18n.t('New event'), - selected: page === pageKeys.NEW_EVENT, - condition: page === pageKeys.NEW_EVENT, - }, - ].filter(item => item.condition)), [ - label, - page, - eventStatus, - handleNavigation, - onBackToMainPage, - onBackToDashboard, - onBackToViewEvent, - ]); - - return ( -

- ); -}; - -export const EnrollmentBreadcrumb: ComponentType<$Diff> = withStyles(styles)(BreadcrumbsPlain); diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js deleted file mode 100644 index a151d169ed..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/hooks/useWorkingListLabel.js +++ /dev/null @@ -1,60 +0,0 @@ -// @flow -import i18n from '@dhis2/d2-i18n'; -import { useMemo } from 'react'; -import { useSelector } from 'react-redux'; - -type Props = { - programId: string, - displayFrontPageList: boolean, - trackedEntityName?: string, -} - -const DefaultFilterLabels = { - active: i18n.t('Active enrollments'), - complete: i18n.t('Completed enrollments'), - cancelled: i18n.t('Cancelled enrollments'), -}; - -export const useWorkingListLabel = ({ - programId, - trackedEntityName, - displayFrontPageList, -}: Props) => { - const workingListTemplates = useSelector(({ workingListsTemplates }) => workingListsTemplates?.teiList); - const workingListProgramId = useSelector(({ workingListsContext }) => workingListsContext?.teiList?.programIdView); - const { selectedTemplateId, loading: isLoadingTemplates, templates } = workingListTemplates ?? {}; - const selectedTemplate = templates?.find(({ id }) => id === selectedTemplateId); - const isSameProgram = workingListProgramId === programId; - - const label = useMemo(() => { - if (isLoadingTemplates) return '...'; - - if (isSameProgram) { - if (selectedTemplate && !selectedTemplate.isDefault) { - return selectedTemplate.name; - } - - if (selectedTemplateId && !selectedTemplate) { - return DefaultFilterLabels[selectedTemplateId]; - } - - if (selectedTemplate.name === 'default') { - return i18n.t('{{trackedEntityName}} list', { trackedEntityName }); - } - } - - if (!displayFrontPageList) return i18n.t('Search'); - return trackedEntityName ? i18n.t('{{trackedEntityName}} list', { trackedEntityName }) : i18n.t('Working List'); - }, [ - displayFrontPageList, - isLoadingTemplates, - isSameProgram, - selectedTemplate, - selectedTemplateId, - trackedEntityName, - ]); - - return { - label, - }; -}; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js b/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js deleted file mode 100644 index b4c1a29b6a..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EnrollmentBreadcrumb/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { EnrollmentBreadcrumb } from './EnrollmentBreadcrumb'; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js deleted file mode 100644 index 0665843c00..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/EventBreadcrumb.js +++ /dev/null @@ -1,106 +0,0 @@ -// @flow -import React, { type ComponentType, useCallback, useMemo, useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { colors, IconChevronRight16 } from '@dhis2/ui'; -import { withStyles } from '@material-ui/core/styles'; -import { BreadcrumbItem } from '../common/BreadcrumbItem'; -import { DiscardDialog } from '../../Dialogs/DiscardDialog.component'; -import { defaultDialogProps } from '../../Dialogs/DiscardDialog.constants'; -import { useWorkingListLabel } from './hooks/useWorkingListLabel'; - -export const pageKeys = Object.freeze({ - MAIN_PAGE: 'mainPage', - VIEW_EVENT: 'viewEvent', - EDIT_EVENT: 'editEvent', -}); - -type Props = { - page: string, - programId: string, - userInteractionInProgress?: boolean, - onBackToMainPage?: () => void, -}; - -const styles = { - container: { - display: 'flex', - alignItems: 'center', - }, -}; - - -const EventBreadcrumbPlain = ({ - page, - programId, - userInteractionInProgress, - onBackToMainPage, - classes, -}) => { - const [openWarning, setOpenWarning] = useState(null); - const { label } = useWorkingListLabel({ programId }); - - const handleNavigation = useCallback((callback, warningType) => { - if (userInteractionInProgress) { - setOpenWarning(warningType); - } else { - callback && callback(); - } - }, [userInteractionInProgress]); - - const breadcrumbItems = useMemo(() => ([ - { - key: pageKeys.MAIN_PAGE, - onClick: () => handleNavigation(onBackToMainPage, pageKeys.MAIN_PAGE), - label, - selected: page === pageKeys.MAIN_PAGE, - condition: true, - }, - { - key: pageKeys.VIEW_EVENT, - onClick: () => handleNavigation(null, pageKeys.VIEW_EVENT), - label: i18n.t('View event'), - selected: page === pageKeys.VIEW_EVENT, - condition: page === pageKeys.VIEW_EVENT || page === pageKeys.EDIT_EVENT, - }, - { - key: pageKeys.EDIT_EVENT, - onClick: () => {}, - label: i18n.t('Edit event'), - selected: page === pageKeys.EDIT_EVENT, - condition: page === pageKeys.EDIT_EVENT, - }, - ].filter(item => item.condition !== false)), [ - label, - handleNavigation, - onBackToMainPage, - page, - ]); - - return ( -
- {breadcrumbItems.map((button, index) => ( - - - {index < (breadcrumbItems.length - 1) && ( - - )} - - ))} - - setOpenWarning(null)} - onDestroy={onBackToMainPage} - {...defaultDialogProps} - /> -
- ); -}; - - -export const EventBreadcrumb: ComponentType<$Diff> = withStyles(styles)(EventBreadcrumbPlain); diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js deleted file mode 100644 index c2c7c461b9..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/hooks/useWorkingListLabel.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow -import { useMemo } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { useSelector } from 'react-redux'; - -type Props = { - programId: string, -} - -export const useWorkingListLabel = ({ programId }: Props) => { - const workingListTemplate = useSelector(({ workingListsTemplates }) => workingListsTemplates?.eventList); - const workingListProgramId = useSelector(({ workingListsContext }) => workingListsContext - ?.eventList - ?.programIdView, - ); - - - const { - selectedTemplateId, - templates, - loading: loadingTemplates, - } = workingListTemplate ?? {}; - const selectedTemplete = templates?.find(({ id }) => id === selectedTemplateId); - const isDefaultTemplate = selectedTemplete?.isDefault; - const isSameProgram = workingListProgramId === programId; - - const computedLabel = useMemo(() => { - if (loadingTemplates) return '...'; - - if (isSameProgram && !isDefaultTemplate && selectedTemplete) { - return selectedTemplete.name; - } - - return i18n.t('Event list'); - }, [isDefaultTemplate, isSameProgram, loadingTemplates, selectedTemplete]); - - return { - label: computedLabel, - }; -}; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js b/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js deleted file mode 100644 index 96d8ae0ea5..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/EventBreadcrumb/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { EventBreadcrumb } from './EventBreadcrumb'; diff --git a/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js b/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js deleted file mode 100644 index e122220bf9..0000000000 --- a/src/core_modules/capture-core/components/Breadcrumbs/common/BreadcrumbItem.js +++ /dev/null @@ -1,47 +0,0 @@ -// @flow -import React, { type ComponentType } from 'react'; -import cx from 'classnames'; -import { withStyles } from '@material-ui/core/styles'; -import { colors } from '@dhis2/ui'; - -type Props = { - label: string, - onClick: () => void, - selected: boolean, -}; - -const styles = { - button: { - // Reset button styles - background: 'none', - border: 'none', - cursor: 'pointer', - font: 'inherit', - - // Custom button styles - fontSize: '14px', - padding: '6px 4px', - color: colors.grey800, - borderRadius: '3px', - - '&:hover': { - textDecoration: 'underline', - color: 'black', - }, - '&.selected': { - color: 'black', - }, - }, -}; - -const BreadcrumbItemPlain = ({ label, onClick, selected, classes }) => ( - -); - -export const BreadcrumbItem: ComponentType<$Diff> = withStyles(styles)(BreadcrumbItemPlain); diff --git a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js index 24340325cb..90047ba753 100644 --- a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js +++ b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.component.js @@ -22,3 +22,4 @@ export const SingleEventRegistrationEntryComponent = ({ showAddRelationship, eve ); }; + diff --git a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js index 3d88627fb9..3c7d2d66d8 100644 --- a/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js +++ b/src/core_modules/capture-core/components/DataEntries/SingleEventRegistrationEntry/SingleEventRegistrationEntry.container.js @@ -13,14 +13,13 @@ import { defaultDialogProps as dialogConfig } from '../../Dialogs/DiscardDialog. import { getOpenDataEntryActions } from './DataEntryWrapper/DataEntry'; import type { ContainerProps, StateProps, MapStateToProps } from './SingleEventRegistrationEntry.types'; import { useCategoryCombinations } from '../../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; -import { itemId } from './DataEntryWrapper/DataEntry/helpers/constants'; const inEffect = (state: ReduxState) => dataEntryHasChanges(state, 'singleEvent-newEvent') || state.newEventPage.showAddRelationship; const makeMapStateToProps = (): MapStateToProps => { const eventAccessSelector = makeEventAccessSelector(); return (state: ReduxState, { id }: ContainerProps): StateProps => ({ - ready: state.dataEntries[id]?.itemId === itemId, + ready: state.dataEntries[id], showAddRelationship: !!state.newEventPage.showAddRelationship, eventAccess: eventAccessSelector(state), }); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js index c326e4477b..09ce95ce70 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilter.component.js @@ -7,16 +7,17 @@ import { isValidZeroOrPositiveInteger } from 'capture-core-utils/validators/form import { SelectBoxes, orientations } from '../../FormFields/Options/SelectBoxes'; import { OptionSet } from '../../../metaData/OptionSet/OptionSet'; import { Option } from '../../../metaData/OptionSet/Option'; -import type { UpdatableFilterContent } from '../types'; -import { type DateValue } from './types'; + import { FromDateFilter } from './From.component'; import { ToDateFilter } from './To.component'; +import { isValidDate } from '../../../utils/validators/form'; +import { parseDate } from '../../../utils/converters/date'; import { dataElementTypes } from '../../../metaData'; +import type { UpdatableFilterContent } from '../types'; import './calendarFilterStyles.css'; import { mainOptionKeys, mainOptionTranslatedTexts } from './options'; import { getDateFilterData } from './dateFilterDataGetter'; import { RangeFilter } from './RangeFilter.component'; -import { parseDate } from '../../../utils/converters/date'; const getStyles = (theme: Theme) => ({ fromToContainer: { @@ -28,7 +29,7 @@ const getStyles = (theme: Theme) => ({ width: 30, display: 'flex', justifyContent: 'center', - alignItems: 'start', + alignItems: 'center', paddingTop: theme.typography.pxToRem(6), fontSize: theme.typography.body1.fontSize, }, @@ -42,8 +43,8 @@ const getStyles = (theme: Theme) => ({ }); export type Value = ?{ - from?: ?DateValue, - to?: ?DateValue, + from?: ?string, + to?: ?string, main?: ?string, start?: ?string, end?: ?string, @@ -51,7 +52,9 @@ export type Value = ?{ type Props = { onCommitValue: (value: ?{ from?: ?string, to?: ?string }) => void, + onUpdate: (commitValue?: any) => void, value: Value, + type: $Keys, classes: { fromToContainer: string, inputContainer: string, @@ -66,33 +69,33 @@ type State = { submitAttempted: boolean, }; -// eslint-disable-next-line complexity -const getAbsoluteRangeErrors = (fromValue, toValue, submitAttempted) => { - const fromValueString = fromValue?.value; - const toValueString = toValue?.value; - const isFromValueValid = fromValue?.isValid; - const isToValueValid = toValue?.isValid; +const getAbsoluteRangeErrors = (fromValue, toValue, type, submitAttempted) => { + let errors = { + minValueError: null, + maxValueError: null, + dateLogicError: null, + }; - if (!fromValueString && !toValueString) { - return { - dateLogicError: submitAttempted - ? i18n.t(DateFilter.errorMessages.ABSOLUTE_RANGE_WITHOUT_VALUES) - : null, + if (!fromValue && !toValue) { + errors = { + ...errors, + dateLogicError: submitAttempted ? i18n.t(DateFilter.errorMessages.ABSOLUTE_RANGE_WITHOUT_VALUES) : null, + }; + } else { + const { isValid: isMinValueValid, error: minValueError } = DateFilter.validateField(fromValue, type); + const { isValid: isMaxValueValid, error: maxValueError } = DateFilter.validateField(toValue, type); + const hasDateLogicError = () => + isMinValueValid && isMaxValueValid && fromValue && toValue && DateFilter.isFromAfterTo(fromValue, toValue); + + errors = { + ...errors, + minValueError, + maxValueError, + dateLogicError: hasDateLogicError() ? i18n.t(DateFilter.errorMessages.FROM_GREATER_THAN_TO) : null, }; } - const hasDateLogicError = - fromValueString && - toValueString && - isFromValueValid && - isToValueValid && - DateFilter.isFromAfterTo(fromValueString, toValueString); - - return { - dateLogicError: hasDateLogicError - ? i18n.t(DateFilter.errorMessages.FROM_GREATER_THAN_TO) - : null, - }; + return errors; }; const getRelativeRangeErrors = (startValue, endValue, submitAttempted) => { @@ -107,8 +110,8 @@ const getRelativeRangeErrors = (startValue, endValue, submitAttempted) => { bufferLogicError: submitAttempted ? i18n.t(DateFilter.errorMessages.RELATIVE_RANGE_WITHOUT_VALUES) : null, }; } - const { error: startValueError } = DateFilter.validateRelativeRangeValue(startValue); - const { error: endValueError } = DateFilter.validateRelativeRangeValue(endValue); + const { error: startValueError } = DateFilter.validateField(startValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE); + const { error: endValueError } = DateFilter.validateField(endValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE); errors = { ...errors, startValueError, @@ -122,11 +125,18 @@ const isAbsoluteRangeFilterValid = (fromValue, toValue) => { return false; } - if ((fromValue && !fromValue.isValid) || (toValue && !toValue.isValid)) { + const parseResultFrom = fromValue ? parseDate(fromValue) : { isValid: true, moment: null }; + const parseResultTo = toValue ? parseDate(toValue) : { isValid: true, moment: null }; + + if (!(parseResultFrom.isValid && parseResultTo.isValid)) { return false; } + const isValidMomentDate = () => + parseResultFrom.momentDate && + parseResultTo.momentDate && + parseResultFrom.momentDate.isAfter(parseResultTo.momentDate); - return !DateFilter.isFromAfterTo(fromValue?.value, toValue?.value); + return !isValidMomentDate(); }; const isRelativeRangeFilterValid = (startValue, endValue) => { @@ -134,8 +144,8 @@ const isRelativeRangeFilterValid = (startValue, endValue) => { return false; } if ( - !DateFilter.validateRelativeRangeValue(startValue).isValid || - !DateFilter.validateRelativeRangeValue(endValue).isValid + !DateFilter.validateField(startValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE).isValid || + !DateFilter.validateField(endValue, dataElementTypes.INTEGER_ZERO_OR_POSITIVE).isValid ) { return false; } @@ -144,7 +154,7 @@ const isRelativeRangeFilterValid = (startValue, endValue) => { // $FlowFixMe[incompatible-variance] automated comment class DateFilterPlain extends Component implements UpdatableFilterContent { - static validateRelativeRangeValue(value: ?string) { + static validateField(value: ?string, type: $Keys) { if (!value) { return { isValid: true, @@ -152,18 +162,21 @@ class DateFilterPlain extends Component implements UpdatableFilter }; } - const isValid = isValidZeroOrPositiveInteger(value); + // $FlowFixMe dataElementTypes flow error + const typeValidator = DateFilter.validatorForTypes[type]; + const isValid = typeValidator(value); return { isValid, - error: isValid ? null : i18n.t(DateFilter.errorMessages[dataElementTypes.INTEGER_ZERO_OR_POSITIVE]), + // $FlowFixMe dataElementTypes flow error + error: isValid ? null : i18n.t(DateFilter.errorMessages[type]), }; } static isFilterValid( mainValue?: ?string, - fromValue?: ?DateValue, - toValue?: ?DateValue, + fromValue?: ?string, + toValue?: ?string, startValue?: ?string, endValue?: ?string, ) { @@ -186,19 +199,24 @@ class DateFilterPlain extends Component implements UpdatableFilter } toD2DateTextFieldInstance: any; - constructor(props: Props) { super(props); this.state = { submitAttempted: false }; } - static errorMessages = { ABSOLUTE_RANGE_WITHOUT_VALUES: 'Please specify a range', RELATIVE_RANGE_WITHOUT_VALUES: 'Please specify the number of days', FROM_GREATER_THAN_TO: "The From date can't be after the To date", + MIN_GREATER_THAN_MAX: 'Days in the past cannot be greater than days in the future', + [dataElementTypes.DATE]: 'Please provide a valid date', [dataElementTypes.INTEGER_ZERO_OR_POSITIVE]: 'Please provide zero or a positive integer', }; + static validatorForTypes = { + [dataElementTypes.DATE]: isValidDate, + [dataElementTypes.INTEGER_ZERO_OR_POSITIVE]: isValidZeroOrPositiveInteger, + }; + static mainOptionSet = new OptionSet('mainOptions', [ new Option((_this) => { _this.text = mainOptionTranslatedTexts[mainOptionKeys.TODAY]; @@ -233,14 +251,12 @@ class DateFilterPlain extends Component implements UpdatableFilter _this.value = mainOptionKeys.ABSOLUTE_RANGE; }), ]); - static optionSet = new OptionSet('mainOptions', [ new Option((_this) => { _this.text = mainOptionTranslatedTexts[mainOptionKeys.RELATIVE_RANGE]; _this.value = mainOptionKeys.RELATIVE_RANGE; }), ]); - onGetUpdateData(updatedValues?: Value) { const value = typeof updatedValues !== 'undefined' ? updatedValues : this.props.value; @@ -286,11 +302,23 @@ class DateFilterPlain extends Component implements UpdatableFilter } handleEnterKeyInFrom = () => { - this.toD2DateTextFieldInstance && this.toD2DateTextFieldInstance.focus(); + this.toD2DateTextFieldInstance.focus(); }; handleDateSelectedFromCalendarInFrom = () => { - this.toD2DateTextFieldInstance && this.toD2DateTextFieldInstance.focus(); + this.toD2DateTextFieldInstance.focus(); + }; + + handleEnterKeyInTo = (value: { [key: string]: string }) => { + // validate with updated values + const values = this.getUpdatedValue(value); + this.setState({ submitAttempted: true }); + + if (values && !DateFilter.isFilterValid(values.main, values.from, values.to, values.start, values.end)) { + this.props.onCommitValue(values); + } else { + this.props.onUpdate(values || null); + } }; handleFieldBlur = (value: { [key: string]: string }) => { @@ -314,6 +342,7 @@ class DateFilterPlain extends Component implements UpdatableFilter const toValue = values && values.to; const startValue = values && values.start; const endValue = values && values.end; + const type = this.props.type; const errors = { minValueError: null, maxValueError: null, @@ -324,7 +353,7 @@ class DateFilterPlain extends Component implements UpdatableFilter }; if (mainValue === mainOptionKeys.ABSOLUTE_RANGE) { - return { ...errors, ...getAbsoluteRangeErrors(fromValue, toValue, submitAttempted) }; + return { ...errors, ...getAbsoluteRangeErrors(fromValue, toValue, type, submitAttempted) }; } if (mainValue === mainOptionKeys.RELATIVE_RANGE) { @@ -335,11 +364,8 @@ class DateFilterPlain extends Component implements UpdatableFilter render() { const { value, classes, onFocusUpdateButton } = this.props; - const fromValue = value?.from; - const toValue = value?.to; - const { startValueError, endValueError, dateLogicError, bufferLogicError } = + const { minValueError, maxValueError, startValueError, endValueError, dateLogicError, bufferLogicError } = this.getErrors(); - return (
@@ -358,12 +384,12 @@ class DateFilterPlain extends Component implements UpdatableFilter {/* $FlowSuppress: Flow not working 100% with HOCs */} {/* $FlowFixMe[prop-missing] automated comment */}
{i18n.t('to')}
@@ -371,12 +397,13 @@ class DateFilterPlain extends Component implements UpdatableFilter {/* $FlowSuppress: Flow not working 100% with HOCs */} {/* $FlowFixMe[prop-missing] automated comment */}

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 <;F|a= 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 diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png b/docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png deleted file mode 100644 index b5a861fb26a2cc3f49baf2b1b49bd15e317a92c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159251 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

@@ -397,6 +424,7 @@ class DateFilterPlain extends Component implements UpdatableFilter startValueError={startValueError} endValueError={endValueError} handleFieldBlur={this.handleFieldBlur} + handleEnterKeyInTo={this.handleEnterKeyInTo} />
{dateLogicError}
diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js index 0971d33264..da08dcfca8 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/DateFilterManager.component.js @@ -28,14 +28,8 @@ export class DateFilterManager extends React.Component { static calculateAbsoluteRangeValueState(filter: DateFilterData) { return { main: mainOptionKeys.ABSOLUTE_RANGE, - from: filter.ge ? { - value: filter.ge && DateFilterManager.convertDateForEdit(filter.ge), - isValid: true, - } : undefined, - to: filter.le ? { - value: filter.le && DateFilterManager.convertDateForEdit(filter.le), - isValid: true, - } : undefined, + from: filter.ge && DateFilterManager.convertDateForEdit(filter.ge), + to: filter.le && DateFilterManager.convertDateForEdit(filter.le), }; } static calculateRelativeRangeValueState(filter: DateFilterData) { @@ -80,7 +74,7 @@ export class DateFilterManager extends React.Component { }; } - handleCommitValue = (value: ?Value) => { + handleCommitValue = (value: ?Object) => { this.setState({ value }); this.props.handleCommitValue && this.props.handleCommitValue(); }; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js index 444ba6b26d..cf5a698740 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/End.component.js @@ -22,6 +22,12 @@ class EndRangeFilterPlain extends Component { this.props.onBlur(EndRangeFilterPlain.getValueObject(value)); }; + handleKeyPress = (event: SyntheticKeyboardEvent) => { + if (event.key === 'Enter') { + this.props.onEnterKey(EndRangeFilterPlain.getValueObject(this.props.value || '')); + } + }; + render() { const { error, onBlur, onEnterKey, textFieldRef, errorClass, ...passOnProps } = this.props; return ( @@ -29,6 +35,7 @@ class EndRangeFilterPlain extends Component { {/* $FlowFixMe[cannot-spread-inexact] automated comment */} void, + onBlur: ({ from: string }) => void, + onEnterKey: () => void, + errorClass: string, }; class FromDateFilterPlain extends Component { - static getValueObject(value: DateValue) { - return { from: { ...value } }; + static getValueObject(value: string) { + return { from: value.trim() }; + } + displayOptions: Object; + constructor(props: Props) { + super(props); + this.displayOptions = { + showWeekdays: true, + showHeader: false, + }; } - handleBlur = (value: DateValue) => { + handleBlur = (value: string) => { this.props.onBlur(FromDateFilterPlain.getValueObject(value)); } + handleKeyPress = (event: SyntheticKeyboardEvent) => { + if (event.key === 'Enter') { + this.props.onEnterKey(); + } + } + render() { - const { error, errorClass, onBlur, ...passOnProps } = this.props; + const { error, errorClass, onBlur, onEnterKey, ...passOnProps } = this.props; return (
{/* $FlowFixMe[cannot-spread-inexact] automated comment */}
- {error ? i18n.t('Please provide a valid date') : error} + {error}
); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js index f74c382ff7..32dd4c6fd5 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/RangeFilter.component.js @@ -41,6 +41,7 @@ type RangeFilterData = ?{ type Props = { handleFieldBlur: (value: ?Value) => void, + handleEnterKeyInTo: (value: { [key: string]: ?string }) => void, value: RangeFilterData, startValueError?: ?string, endValueError?: ?string, @@ -72,6 +73,10 @@ class RangeFilterPlain extends Component { this.endD2TextFieldInstance.focus(); }; + handleEnterKeyInEnd = (value: { [key: string]: ?string }) => { + this.props.handleEnterKeyInTo && this.props.handleEnterKeyInTo(value); + }; + handleFieldBlur = (value: { [key: string]: ?string }) => { this.props.handleFieldBlur && this.props.handleFieldBlur(this.getUpdatedValue(value)); }; @@ -105,6 +110,7 @@ class RangeFilterPlain extends Component { error={endValueError} errorClass={classes.error} onBlur={this.handleFieldBlur} + onEnterKey={this.handleEnterKeyInEnd} textFieldRef={this.setEndD2TextFieldInstance} />
diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js index 29a97465ee..1a3a7405ef 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/To.component.js @@ -2,45 +2,69 @@ import React, { Component } from 'react'; import i18n from '@dhis2/d2-i18n'; import { D2Date } from '../../FormFields/DateAndTime/D2Date/D2Date.component'; +import { anchorPositions, modes, absoluteDirections } from '../../FormFields/DateAndTime/D2Date/d2DatePopup.const'; import { withInternalChangeHandler } from '../../FormFields/withInternalChangeHandler'; -import { type DateValue } from './types/date.types'; type Props = { - value: ?DateValue, + value: ?string, error: ?string, - errorClass: ?string, - onBlur: ({ to: DateValue }) => void, + onBlur: ({ to: string }) => void, + onEnterKey: ({ to: string }) => void, + textFieldRef: (instance: any) => void, + errorClass: string, onFocusUpdateButton: () => void, }; class ToDateFilterPlain extends Component { - static getValueObject(value: DateValue) { - return { to: { ...value } }; + static getValueObject(value: string) { + return { to: value.trim() }; } - handleBlur = (value: DateValue) => { + displayOptions: Object; + constructor(props: Props) { + super(props); + this.displayOptions = { + showWeekdays: true, + showHeader: false, + }; + } + + handleBlur = (value: string) => { this.props.onBlur(ToDateFilterPlain.getValueObject(value)); } + handleKeyPress = (event: SyntheticKeyboardEvent) => { + if (event.key === 'Enter') { + this.props.onEnterKey(ToDateFilterPlain.getValueObject(this.props.value || '')); + } + } + handleDateSelectedFromCalendar = () => { this.props.onFocusUpdateButton(); } render() { - const { error, errorClass, onBlur, onFocusUpdateButton, ...passOnProps } = this.props; + const { error, onBlur, onEnterKey, errorClass, onFocusUpdateButton, ...passOnProps } = this.props; return (
{/* $FlowFixMe[cannot-spread-inexact] automated comment */}
- {error ? i18n.t('Please provide a valid date') : error} + {error}
); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js index f7758cd1b1..550418e0d4 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/dateFilterDataGetter.js @@ -3,12 +3,12 @@ import { parseNumber } from 'capture-core-utils/parsers'; import { mainOptionKeys } from './options'; import { dateFilterTypes } from './constants'; import { parseDate } from '../../../utils/converters/date'; -import { type AbsoluteDateFilterData, type RelativeDateFilterData, type DateValue } from './types'; +import { type AbsoluteDateFilterData, type RelativeDateFilterData } from './types'; type Value = { main: string, - from?: ?DateValue, - to?: ?DateValue, + from?: ?string, + to?: ?string, start?: ?string, end?: ?string, }; @@ -53,7 +53,7 @@ function convertRelativeRange(value: Value) { function convertSelections(value: Value) { if (value.main === mainOptionKeys.ABSOLUTE_RANGE) { - return convertAbsoluteDate(value?.from?.value, value?.to?.value); + return convertAbsoluteDate(value.from, value.to); } if (value.main === mainOptionKeys.RELATIVE_RANGE) { return convertRelativeRange(value); diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js index b34381b58d..18324b9029 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/date.types.js @@ -13,10 +13,4 @@ export type RelativeDateFilterData = {| endBuffer?: number, |}; -export type DateValue = {| - value: ?string, - error?: ?string, - isValid: ?boolean, -|}; - export type DateFilterData = AbsoluteDateFilterData | RelativeDateFilterData; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js index 1e93bcf8de..d98412bd3f 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Date/types/index.js @@ -1,2 +1,2 @@ // @flow -export { AbsoluteDateFilterData, RelativeDateFilterData, DateFilterData, DateValue } from './date.types'; +export { AbsoluteDateFilterData, RelativeDateFilterData, DateFilterData } from './date.types'; diff --git a/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js b/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js index 7b9c48ba89..4450e1a539 100644 --- a/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js +++ b/src/core_modules/capture-core/components/FiltersForTypes/Numeric/NumericFilter.component.js @@ -153,10 +153,6 @@ class NumericFilterPlain extends Component implements UpdatableFilterCont this.props.onCommitValue(this.getUpdatedValue(value)); } - handleFieldChange = (value: {[key: string]: string}) => { - this.props.onCommitValue(this.getUpdatedValue(value)); - } - setMaxD2TextFieldInstance = (instance: any) => { this.maxD2TextFieldInstance = instance; } @@ -199,7 +195,6 @@ class NumericFilterPlain extends Component implements UpdatableFilterCont errorClass={classes.error} onBlur={this.handleFieldBlur} onEnterKey={this.handleEnterKeyInMin} - onChange={this.handleFieldChange} />
implements UpdatableFilterCont onBlur={this.handleFieldBlur} onEnterKey={this.handleEnterKeyInMax} textFieldRef={this.setMaxD2TextFieldInstance} - onChange={this.handleFieldChange} />
diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js index eacca0a466..2644c2e809 100644 --- a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2Date.component.js @@ -1,86 +1,207 @@ // @flow import * as React from 'react'; -import { CalendarInput } from '@dhis2/ui'; -import { systemSettingsStore } from '../../../../../capture-core/metaDataMemoryStores'; -import { type DateValue } from '../../../FiltersForTypes/Date/types/date.types'; +import { withStyles } from '@material-ui/core/styles'; +import { lowerCaseFirstLetter } from 'capture-core-utils/string/lowerCaseFirstLetter'; +import { D2TextField } from '../../Generic/D2TextField.component'; +import { D2DatePopup } from './D2DatePopup.component'; +import { D2DateCalendar } from './D2DateCalendar.component'; type Props = { - label?: ?string, + label: string, value: ?string, - calendar?: string, + width: number, calendarWidth?: ?number, + calendarHeight?: ?number, inputWidth?: ?number, - onBlur: (value: DateValue) => void, + onBlur: (value: string) => void, onFocus?: ?() => void, onDateSelectedFromCalendar?: () => void, - classes?: Object, - disabled?: boolean, + classes: Object, + textFieldRef?: (instance: D2TextField) => void, }; type State = { - date: ?string, + popoverOpen: boolean, }; -type Validation = {| - validationCode: string, - validationText: string, - error: boolean, - valid: boolean, -|}; +const styles = () => ({ + textField: { + width: '100%', + }, +}); -export class D2Date extends React.Component { - handleDateSelected: (value: {calendarDateString: string}) => void; +class D2DatePlain extends React.Component { + static splitPassOnProps(passOnProps: ?Object) { + const splittedProps = { + input: {}, + popup: {}, + calendar: {}, + }; + + if (!passOnProps) { + return splittedProps; + } + + return Object + .keys(passOnProps) + .reduce((accSplittedProps, propKey) => { + let propContainer; + if (propKey.startsWith(D2Date.propContainers.CALENDAR)) { + propContainer = D2Date.propContainers.CALENDAR; + } else if (propKey.startsWith(D2Date.propContainers.POPUP)) { + propContainer = D2Date.propContainers.POPUP; + } else { + propContainer = D2Date.propContainers.INPUT; + } + + const outputKey = lowerCaseFirstLetter(propKey.replace(propContainer, '')); + + accSplittedProps[propContainer][outputKey] = passOnProps[propKey]; + return accSplittedProps; + }, splittedProps); + } + + containerInstance: ?HTMLElement; + handleTextFieldFocus: () => void; + handleDateSelected: (value: string) => void; + handleTextFieldBlur: (value: string) => void; + hidePopover: () => void; + handleDocumentClick: (event: SyntheticEvent) => void; constructor(props: Props) { super(props); + + this.state = { + popoverOpen: false, + }; + + this.handleTextFieldFocus = this.handleTextFieldFocus.bind(this); this.handleDateSelected = this.handleDateSelected.bind(this); + this.handleTextFieldBlur = this.handleTextFieldBlur.bind(this); + this.hidePopover = this.hidePopover.bind(this); + this.handleDocumentClick = this.handleDocumentClick.bind(this); } - handleDateSelected(value: {calendarDateString: string, validation: Validation}) { - const { calendarDateString: selectedDate, validation } = value || {}; - if (selectedDate !== undefined) { - this.props.onBlur({ - value: selectedDate, - error: validation?.validationText, - isValid: validation?.valid, - }); - } + componentWillUnmount() { + // $FlowFixMe[incompatible-call] automated comment + document.removeEventListener('click', this.handleDocumentClick); + } + + static propContainers = { + CALENDAR: 'calendar', + POPUP: 'popup', + INPUT: 'input', + }; + + handleTextFieldFocus() { + // $FlowFixMe[incompatible-call] automated comment + document.removeEventListener('click', this.handleDocumentClick); + + this.setState({ + popoverOpen: true, + }); + + this.props.onFocus && this.props.onFocus(); + } + + handleDateSelected(value: string) { + this.props.onBlur(value); + this.hidePopover(); this.props.onDateSelectedFromCalendar && this.props.onDateSelectedFromCalendar(); + + // $FlowFixMe[incompatible-call] automated comment + document.removeEventListener('click', this.handleDocumentClick); + } + + handleDocumentClick(event) { + if ((event.target && event.target.className && + event.target.className.startsWith && + event.target.className.startsWith('Cal__')) || + (event.target && event.target.className && + event.target.className.baseVal && event.target.className.baseVal.startsWith('Cal__'))) { + return; + } + + this.hidePopover(); + + // $FlowFixMe[incompatible-call] automated comment + document.removeEventListener('click', this.handleDocumentClick); + } + + handleTextFieldBlur(value: string, event) { + this.props.onBlur(value); + + if (!event.relatedTarget || event.relatedTarget.className !== 'Cal__Container__root') { + this.hidePopover(); + } else { + // $FlowFixMe[incompatible-call] automated comment + document.addEventListener('click', this.handleDocumentClick); + } + } + + hidePopover() { + this.setState({ + popoverOpen: false, + }); } render() { const { - calendar, + width, calendarWidth, + calendarHeight, inputWidth, classes, onBlur, onFocus, onDateSelectedFromCalendar, - value, - disabled, + textFieldRef, ...passOnProps } = this.props; + const { popoverOpen } = this.state; - const calendarType = calendar || 'gregory'; - const format = systemSettingsStore.get().dateFormat; + const textFieldRefPropObject = textFieldRef ? { ref: textFieldRef } : null; + const calculatedInputWidth = inputWidth || width; + const calculatedCalendarWidth = calendarWidth || width; + const splittedPassOnProps = D2Date.splitPassOnProps(passOnProps); + const calculatedCalendarHeight = calendarHeight || 350; return ( -
- { this.containerInstance = containerInstance; }} + style={{ + width, + }} + > + {/* $FlowFixMe[incompatible-type] automated comment */} + + + +
); } } +export const D2Date = withStyles(styles)(D2DatePlain); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js new file mode 100644 index 0000000000..e20f89d12a --- /dev/null +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DateCalendar.component.js @@ -0,0 +1,158 @@ +// @flow +/* eslint-disable class-methods-use-this */ +import React, { Component } from 'react'; +import { withStyles, withTheme } from '@material-ui/core/styles'; +import InfiniteCalendar from '@joakim_sm/react-infinite-calendar'; +import { capitalizeFirstLetter } from 'capture-core-utils/string'; +import '@joakim_sm/react-infinite-calendar/styles.css'; +import './customStyles.css'; +import { parseDate, convertDateObjectToDateFormatString } from '../../../../utils/converters/date'; +import { CurrentLocaleData } from '../../../../utils/localeData/CurrentLocaleData'; +import { getTheme } from './getTheme'; + +type Props = { + onDateSelected: (value: any) => void, + value?: ?string, + minMoment?: ?Object, + maxMoment?: ?Object, + currentWidth: number, + height?: ?number, + classes: Object, + displayOptions?: ?Object, + theme: Object, +}; + +const styles = () => ({ + container: {}, +}); + +class D2DateCalendarPlain extends Component { + handleChange: (e: any, dates: ?Array) => void; + calendarLocaleData: Object; + theme: Object; + displayOptions: Object; + + constructor(props: Props) { + super(props); + this.handleChange = this.handleChange.bind(this); + + const projectLocaleData = CurrentLocaleData.get(); + const currentWidth = this.props.currentWidth; + + this.calendarLocaleData = { + locale: projectLocaleData.dateFnsLocale, + headerFormat: currentWidth >= 400 ? + projectLocaleData.calendarFormatHeaderLong : + projectLocaleData.calendarFormatHeaderShort, + weekdays: projectLocaleData.weekDaysShort.map(day => capitalizeFirstLetter(day)), + blank: projectLocaleData.selectDatesText, + todayLabel: { + long: projectLocaleData.todayLabelLong, + short: projectLocaleData.todayLabelShort, + }, + weekStartsOn: projectLocaleData.weekStartsOn, + }; + + this.theme = getTheme(this.props.theme); + + + this.displayOptions = { + ...D2DateCalendar.displayOptions, + ...this.props.displayOptions, + }; + } + + shouldComponentUpdate(nextProps: Props) { + // Selecting multiple dates, then updating the props to the infiniteCalendar makes the Component "jump" back to the first selected date + if (nextProps.currentWidth !== this.props.currentWidth) { + const projectLocaleData = CurrentLocaleData.get(); + if (nextProps.currentWidth < 400) { + this.calendarLocaleData.headerFormat = projectLocaleData.calendarFormatHeaderShort; + } else { + this.calendarLocaleData.headerFormat = projectLocaleData.calendarFormatHeaderLong; + } + return true; + } + return false; + } + + static displayOptions = { + showHeader: false, + }; + + handleChange(changeDate: Date) { + const dateFormatString = convertDateObjectToDateFormatString(changeDate); + this.props.onDateSelected(dateFormatString); + } + + getValue(inputValue: ?string) { + if (!inputValue) { + return null; + } + + const parseData = parseDate(inputValue); + if (!parseData.isValid) { + return null; + } + + // $FlowFixMe[incompatible-use] automated comment + return parseData.momentDate.toDate(); + } + + getMinMaxProps() { + const minMaxProps: {min?: Date, minDate?: Date, max?: Date, maxDate?: Date} = {}; + + const minMoment = this.props.minMoment; + const maxMoment = this.props.maxMoment; + + if (minMoment) { + const minDate = minMoment.toDate(); + minMaxProps.min = minDate; + minMaxProps.minDate = minDate; + } + + if (maxMoment) { + const maxDate = maxMoment.toDate(); + minMaxProps.max = maxDate; + minMaxProps.maxDate = maxDate; + } + return minMaxProps; + } + + render() { + const { + value, + classes, + currentWidth, + height, + minMoment, + maxMoment, + onDateSelected, + theme, + displayOptions, + ...passOnProps + } = this.props; + + return ( +
+ { /* $FlowFixMe */ } + +
+ ); + } +} + +export const D2DateCalendar = withTheme()(withStyles(styles)(D2DateCalendarPlain)); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js new file mode 100644 index 0000000000..311391c75b --- /dev/null +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/D2DatePopup.component.js @@ -0,0 +1,94 @@ +// @flow +import * as React from 'react'; +import { withStyles } from '@material-ui/core/styles'; +import { anchorPositions, modes, absoluteDirections } from './d2DatePopup.const'; + +const getStyles = () => ({ + containerAbsolute: { + position: 'relative', + }, + containerInline: {}, + calendarAbsolute: { + position: 'absolute', + zIndex: 201, + }, + calendarInline: {}, +}); + +type Props = { + open: boolean, + children: React.Node, + anchorPosition?: $Values, + mode?: $Values, + absoluteDirection: $Values, + inputWidth: number, + calendarWidth: number, + classes: { + containerAbsolute: string, + containerInline: string, + calendarAbsolute: string, + calendarInline: string, + }, + inputUsesFloatingLabel: boolean, +}; + +class D2DatePopupPlain extends React.Component { + getAbsoluteBottom() { + const inputUsesFloatingLabel = this.props.inputUsesFloatingLabel; + return inputUsesFloatingLabel ? 60 : 40; + } + getAbsoluteVerticalPosition() { + const absoluteDirection = this.props.absoluteDirection; + return absoluteDirection === absoluteDirections.UP ? { bottom: this.getAbsoluteBottom() } : { top: 0 }; + } + calculateMarginLeftInline() { + const { inputWidth, calendarWidth } = this.props; + return calendarWidth - inputWidth; + } + getPopupStyle() { + const { anchorPosition, mode } = this.props; + + let calendarStyle; + if (anchorPosition === anchorPositions.RIGHT) { + calendarStyle = mode === modes.INLINE ? + { marginLeft: `-${this.calculateMarginLeftInline()}px` } : + { ...this.getAbsoluteVerticalPosition(), right: 0 }; + } else { + calendarStyle = mode === modes.INLINE ? { } : { ...this.getAbsoluteVerticalPosition(), left: 0 }; + } + + return calendarStyle; + } + + render() { + const { + open, + mode, + classes, + children, + } = this.props; + + if (!open) { + return null; + } + + const containerClasses = mode === modes.INLINE ? classes.containerInline : classes.containerAbsolute; + const calendarClasses = mode === modes.INLINE ? classes.calendarInline : classes.calendarAbsolute; + const calendarStyle = this.getPopupStyle(); + + return ( +
+
+ {children} +
+
+ ); + } +} + +export const D2DatePopup = withStyles(getStyles)(D2DatePopupPlain); diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css new file mode 100644 index 0000000000..fdcb5d1cbb --- /dev/null +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/customStyles.css @@ -0,0 +1,12 @@ +.Cal__Today__root { + align-items: center; + justify-content: center; +} +.Cal__Today__root .Cal__Today__chevron { + position: unset; + top: unset; + margin-left: 5px; + margin-top: 0; + margin-bottom: 0; + margin-right: 0; +} \ No newline at end of file diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js new file mode 100644 index 0000000000..27d68de2ec --- /dev/null +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/d2DatePopup.const.js @@ -0,0 +1,16 @@ +// @flow + +export const anchorPositions = { + LEFT: 'left', + RIGHT: 'right', +}; + +export const absoluteDirections = { + UP: 'up', + DOWN: 'down', +}; + +export const modes = { + ABSOLUTE: 'absolute', + INLINE: 'inline', +}; diff --git a/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js new file mode 100644 index 0000000000..ad8c635647 --- /dev/null +++ b/src/core_modules/capture-core/components/FormFields/DateAndTime/D2Date/getTheme.js @@ -0,0 +1,14 @@ +// @flow + +export const getTheme = (theme: Theme) => ({ + accentColor: theme.palette.secondary.main, + floatingNav: { + background: 'rgba(0, 30, 64, 0.8)', + chevron: 'rgb(145, 203, 193)', + color: 'white', + }, + headerColor: theme.palette.primary.main, + todayColor: theme.palette.secondary.main, + selectionColor: theme.palette.primary.main, + weekdayColor: theme.palette.primary.main, +}); diff --git a/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js b/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js index 0fe8f70206..3241b9d7a0 100644 --- a/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js +++ b/src/core_modules/capture-core/components/FormFields/Options/FormGroup.component.js @@ -6,12 +6,10 @@ const styles = { formGroup: { display: 'flex', flexDirection: 'column', - width: 'fit-content', }, formGroupRow: { display: 'flex', flexDirection: 'row', - width: 'fit-content', }, }; diff --git a/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js b/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js index f511499c7f..21b085e8d0 100644 --- a/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js +++ b/src/core_modules/capture-core/components/List/OnlineList/OnlineList.component.js @@ -2,19 +2,11 @@ import * as React from 'react'; import i18n from '@dhis2/d2-i18n'; -import { - CheckboxField, - DataTable, - DataTableBody, - DataTableCell, - DataTableColumnHeader, - DataTableHead, - DataTableRow, -} from '@dhis2/ui'; +import { DataTableHead, DataTable, DataTableBody, DataTableRow, DataTableCell, DataTableColumnHeader } from '@dhis2/ui'; import classNames from 'classnames'; import { withStyles } from '@material-ui/core/styles'; -import type { OptionSet } from '../../../metaData'; import { dataElementTypes } from '../../../metaData'; +import type { OptionSet } from '../../../metaData'; const getStyles = () => ({ tableContainer: { @@ -42,13 +34,7 @@ type Props = { dataSource: Array, rowIdKey: string, columns: ?Array, - selectedRows: { [key: string]: boolean }, - onSelectAll: (ids: Array) => void, - onRowSelect: (id: string) => void, - allRowsAreSelected: boolean, - isSelectionInProgress: ?boolean, sortById: string, - showSelectCheckBox: ?boolean, sortByDirection: string, onSort: (id: string, direction: string) => void, updating?: ?boolean, @@ -100,7 +86,7 @@ class Index extends React.Component { }; renderHeaderRow(visibleColumns: Array) { - const { classes, sortById, sortByDirection, dataSource, onSelectAll, allRowsAreSelected } = this.props; + const { classes, sortById, sortByDirection } = this.props; const headerCells = visibleColumns.map(column => ( { )); - const checkboxCell = this.props.showSelectCheckBox ? ( - - onSelectAll(dataSource.map(({ id }) => id))} - /> - - ) : null; - return ( - {checkboxCell} {headerCells} {this.getCustomEndCellHeader()} @@ -147,7 +121,7 @@ class Index extends React.Component { } renderRows(visibleColumns: Array, columnsCount: number) { - const { dataSource, rowIdKey, selectedRows, onRowSelect, ...customEndCellBodyProps } = this.props; + const { dataSource, rowIdKey, ...customEndCellBodyProps } = this.props; if (!dataSource || dataSource.length === 0) { return ( @@ -162,37 +136,13 @@ class Index extends React.Component { { - if (this.props.isSelectionInProgress) { - onRowSelect(row[rowIdKey]); - return; - } - this.props.onRowClick(row); - }} + onClick={() => this.props.onRowClick(row)} > {row[column.id]} )); - - const rowId = row[rowIdKey]; return ( - - {this.props.showSelectCheckBox && ( - - onRowSelect(rowId)} - /> - - )} + {cells} {this.getCustomEndCellBody(row, customEndCellBodyProps)} diff --git a/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js b/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js index 16d19dfc2c..7b3ec7806a 100644 --- a/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js +++ b/src/core_modules/capture-core/components/ListView/ContextBuilder/ListViewContextBuilder.component.js @@ -9,11 +9,6 @@ import type { Props } from './listViewContextBuilder.types'; export const ListViewContextBuilder = ({ filters, - selectedRows, - allRowsAreSelected, - onRowSelect, - onSelectAll, - selectionInProgress, onChangePage, onChangeRowsPerPage, rowsPerPage, @@ -45,11 +40,6 @@ export const ListViewContextBuilder = ({ diff --git a/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js b/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js index 5460022419..87c71afbee 100644 --- a/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js +++ b/src/core_modules/capture-core/components/ListView/Main/ListViewMain.component.js @@ -39,20 +39,7 @@ const getStyles = (theme: Theme) => ({ class ListViewMainPlain extends React.PureComponent { renderTopBar = () => { - const { - classes, - filters, - columns, - customMenuContents, - onSetColumnOrder, - isSelectionInProgress, - bulkActionBarComponent, - } = this.props; - - if (isSelectionInProgress) { - return bulkActionBarComponent; - } - + const { classes, filters, columns, customMenuContents, onSetColumnOrder } = this.props; return (
{ > {filters}
-
+
{ } renderPager = () => { - const { classes, isSelectionInProgress } = this.props; + const classes = this.props.classes; return (
- +
); } @@ -93,11 +80,8 @@ class ListViewMainPlain extends React.PureComponent { classes, filters, updatingWithDialog, - onClickListRow, - onRowSelect, - onSelectAll, + onSelectRow, customRowMenuContents, - isSelectionInProgress, ...passOnProps } = this.props; @@ -108,12 +92,8 @@ class ListViewMainPlain extends React.PureComponent { return ( ); } diff --git a/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js b/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js index c164f94591..da7edd0124 100644 --- a/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js +++ b/src/core_modules/capture-core/components/ListView/Main/listViewMain.types.js @@ -1,6 +1,6 @@ // @flow import type { ListViewContextBuilderPassOnProps } from '../ContextBuilder'; -import type { Columns, CustomMenuContents, CustomRowMenuContents } from '../types'; +import type { CustomRowMenuContents, CustomMenuContents, Columns } from '../types'; type WithFilterPassOnProps = {| ...ListViewContextBuilderPassOnProps, @@ -14,11 +14,7 @@ type ComponentProps = {| rowIdKey: string, customMenuContents?: CustomMenuContents, customRowMenuContents?: CustomRowMenuContents, - onClickListRow: Function, - onRowSelect: Function, - onSelectAll: Function, - isSelectionInProgress: ?boolean, - bulkActionBarComponent: React$Node, + onSelectRow: Function, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/ListView/types/listView.types.js b/src/core_modules/capture-core/components/ListView/types/listView.types.js index c367075b4e..96f98f4c90 100644 --- a/src/core_modules/capture-core/components/ListView/types/listView.types.js +++ b/src/core_modules/capture-core/components/ListView/types/listView.types.js @@ -1,7 +1,10 @@ // @flow import { typeof dataElementTypes } from '../../../metaData'; -import type { FilterData, Options } from '../../FiltersForTypes'; +import type { + FilterData, + Options, +} from '../../FiltersForTypes'; export type Column = { id: string, @@ -100,7 +103,7 @@ export type InterfaceProps = $ReadOnly<{| onClearFilter: ClearFilter, onRemoveFilter: RemoveFilter, onSelectRestMenuItem: SelectRestMenuItem, - onClickListRow: SelectRow, + onSelectRow: SelectRow, onSetColumnOrder: SetColumnOrder, onSort: Sort, onUpdateFilter: UpdateFilter, @@ -111,13 +114,7 @@ export type InterfaceProps = $ReadOnly<{| stickyFilters: StickyFilters, updating: boolean, updatingWithDialog: boolean, - onRowSelect: (id: string) => void, - programStageId?: string, - selectedRows: { [key: string]: boolean }, - onSelectAll: (rows: Array) => void, - allRowsAreSelected: ?boolean, - selectionInProgress: ?boolean, - bulkActionBarComponent: React$Element, + programStageId?: string |}>; export type ListViewPassOnProps = $ReadOnly<{| diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js index 65050c4641..1259861683 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.container.js @@ -4,29 +4,34 @@ import i18n from '@dhis2/d2-i18n'; import moment from 'moment'; import log from 'loglevel'; import { errorCreator } from 'capture-core-utils'; +// $FlowFixMe import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { useTimeZoneConversion } from '@dhis2/app-runtime'; import { - commitEnrollmentAndEvents, - rollbackEnrollmentAndEvents, - showEnrollmentError, - updateEnrollmentAndEvents, + useCommonEnrollmentDomainData, + useRuleEffects, updateEnrollmentAttributeValues, updateEnrollmentDate, updateIncidentDate, - useCommonEnrollmentDomainData, - useRuleEffects, + showEnrollmentError, + updateEnrollmentAndEvents, + commitEnrollmentAndEvents, + rollbackEnrollmentAndEvents, } from '../../common/EnrollmentOverviewDomain'; import { - deleteEnrollment, updateEnrollmentDate as updateTopBarEnrollmentDate, + deleteEnrollment, updateTeiDisplayName, } from '../EnrollmentPage.actions'; import { useTrackerProgram } from '../../../../hooks/useTrackerProgram'; import { useCoreOrgUnit } from '../../../../metadataRetrieval/coreOrgUnit'; -import { DataStoreKeyByPage, EnrollmentPageLayout } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; -import { useHideWidgetByRuleLocations, useProgramMetadata, useProgramStages } from './hooks'; +import { EnrollmentPageLayout, DataStoreKeyByPage } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; +import { + useProgramMetadata, + useHideWidgetByRuleLocations, + useProgramStages, +} from './hooks'; import { buildUrlQueryString, useLocationQuery } from '../../../../utils/routing'; import { useFilteredWidgetData } from './hooks/useFilteredWidgetData'; import { useLinkedRecordClick } from '../../common/TEIRelationshipsWidget'; @@ -176,10 +181,6 @@ export const EnrollmentPageDefault = () => { dispatch(commitEnrollmentAndEvents()); }, [dispatch]); - const onBackToMainPage = useCallback(() => { - history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); - }, [history, orgUnitId, programId]); - if (isLoading) { return ( @@ -207,8 +208,6 @@ export const EnrollmentPageDefault = () => { onDelete={onDelete} onDeleteTrackedEntitySuccess={onDeleteTrackedEntitySuccess} onViewAll={onViewAll} - onBackToMainPage={onBackToMainPage} - trackedEntityName={program.trackedEntityType.name} onCreateNew={onCreateNew} widgetEffects={outputEffects} hideWidgets={hideWidgets} diff --git a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js index 572efeb874..543130c143 100644 --- a/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js +++ b/src/core_modules/capture-core/components/Pages/Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types.js @@ -2,12 +2,11 @@ import { typeof effectActions } from '@dhis2/rules-engine-javascript'; import type { TrackerProgram } from 'capture-core/metaData'; import type { Stage } from 'capture-core/components/WidgetStagesAndEvents/types/common.types'; -import type { HideWidgets, WidgetEffects } from '../../common/EnrollmentOverviewDomain'; +import type { WidgetEffects, HideWidgets } from '../../common/EnrollmentOverviewDomain'; import type { Event } from '../../common/EnrollmentOverviewDomain/useCommonEnrollmentDomainData'; import type { LinkedRecordClick } from '../../../WidgetsRelationship/WidgetTrackedEntityRelationship'; import type { - PageLayoutConfig, - WidgetConfig, + PageLayoutConfig, WidgetConfig, } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; import { EnrollmentPageKeys, @@ -23,11 +22,6 @@ export type Props = {| widgetEffects: ?WidgetEffects, hideWidgets: HideWidgets, orgUnitId: string, - onBackToMainPage: () => void, - onBackToDashboard?: () => void, - onBackToViewEvent?: () => void, - userInteractionInProgress?: boolean, - eventStatus?: string, onDelete: () => void, onAddNew: () =>void, onViewAll: (stageId: string) => void, @@ -47,7 +41,6 @@ export type Props = {| pageLayout: PageLayoutConfig, availableWidgets: $ReadOnly<{ [key: string]: WidgetConfig }>, onDeleteTrackedEntitySuccess: () => void, - trackedEntityName: string, |}; export type PlainProps = {| diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js index 01ee6a0347..88b39abb5d 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.container.js @@ -9,19 +9,20 @@ import { useHistory } from 'react-router-dom'; import { NoticeBox } from '@dhis2/ui'; import { buildUrlQueryString, useLocationQuery } from '../../../../utils/routing'; import { useProgramInfo } from '../../../../hooks/useProgramInfo'; -import { EnrollmentAddEventTopBar, useEnrollmentAddEventTopBar } from '../TopBar'; +import { useEnrollmentAddEventTopBar, EnrollmentAddEventTopBar } from '../TopBar'; import { deleteEnrollment, fetchEnrollments } from '../../Enrollment/EnrollmentPage.actions'; import { actions as RelatedStageModes } from '../../../WidgetRelatedStages/constants'; import { useWidgetDataFromStore } from '../hooks'; -import { useHideWidgetByRuleLocations } from '../../Enrollment/EnrollmentPageDefault/hooks'; import { - commitEnrollmentAndEvents, - rollbackEnrollmentAndEvents, - setExternalEnrollmentStatus, + useHideWidgetByRuleLocations, +} from '../../Enrollment/EnrollmentPageDefault/hooks'; +import { + updateOrAddEnrollmentEvents, showEnrollmentError, updateEnrollmentAndEvents, - updateOrAddEnrollmentEvents, + rollbackEnrollmentAndEvents, + setExternalEnrollmentStatus, commitEnrollmentAndEvents, } from '../../common/EnrollmentOverviewDomain'; import { dataEntryHasChanges as getDataEntryHasChanges } from '../../../DataEntry/common/dataEntryHasChanges'; import type { ContainerProps } from './EnrollmentAddEventPageDefault.types'; @@ -50,10 +51,6 @@ export const EnrollmentAddEventPageDefault = ({ history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); }, [history, orgUnitId, programId]); - const onBackToMainPage = useCallback(() => { - history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); - }, [history, orgUnitId, programId]); - const onUpdateEnrollmentStatus = useCallback((enrollmentToUpdate) => { dispatch(updateEnrollmentAndEvents(enrollmentToUpdate)); }, [dispatch]); @@ -116,7 +113,7 @@ export const EnrollmentAddEventPageDefault = ({ const outputEffects = useWidgetDataFromStore(widgetReducerName); const hideWidgets = useHideWidgetByRuleLocations(program?.programRules.concat(selectedProgramStage?.programRules ?? [])); // $FlowFixMe - const trackedEntityName = program?.trackedEntityType?.name ?? ''; + const trackedEntityName = program?.trackedEntityType?.name; const rulesExecutionDependencies = useMemo(() => ({ events: enrollment?.events, @@ -184,10 +181,6 @@ export const EnrollmentAddEventPageDefault = ({ orgUnitId={orgUnitId} teiId={teiId} enrollmentId={enrollmentId} - onBackToMainPage={onBackToMainPage} - onBackToDashboard={handleCancel} - trackedEntityName={trackedEntityName} - userInteractionInProgress={userInteractionInProgress} onSave={handleSave} onCancel={handleCancel} onDelete={handleDelete} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js index 99fe0e57e3..a8929f2b14 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentAddEvent/EnrollmentAddEventPageDefault/EnrollmentAddEventPageDefault.types.js @@ -1,9 +1,8 @@ // @flow -import type { HideWidgets, WidgetEffects } from '../../common/EnrollmentOverviewDomain'; +import type { WidgetEffects, HideWidgets } from '../../common/EnrollmentOverviewDomain'; import type { ExternalSaveHandler } from '../../../WidgetEnrollmentEventNew'; import type { - PageLayoutConfig, - WidgetConfig, + PageLayoutConfig, WidgetConfig, } from '../../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; import { Program } from '../../../../metaData'; @@ -15,10 +14,6 @@ export type Props = {| enrollmentId: string, onSave: ExternalSaveHandler, dataEntryHasChanges: boolean, - userInteractionInProgress: boolean, - trackedEntityName: string, - onBackToMainPage: () => void, - onBackToDashboard: () => void, onCancel: () => void, onDelete: () => void, onAddNew: () => void, diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js index 679bb616c4..d2acb94e3b 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.component.js @@ -40,9 +40,6 @@ export const EnrollmentEditEventPageComponent = ({ assignee, pageStatus, events, - onBackToDashboard, - onBackToMainPage, - onBackToViewEvent, onEnrollmentError, onEnrollmentSuccess, onUpdateEnrollmentStatus, @@ -76,11 +73,6 @@ export const EnrollmentEditEventPageComponent = ({ pageLayout={pageLayout} currentPage={mode === EnrollmentPageKeys.EDIT_EVENT ? EnrollmentPageKeys.EDIT_EVENT : EnrollmentPageKeys.VIEW_EVENT} availableWidgets={WidgetsForEnrollmentEventEdit} - userInteractionInProgress={mode === EnrollmentPageKeys.EDIT_EVENT} - trackedEntityName={trackedEntityName} - onBackToMainPage={onBackToMainPage} - onBackToDashboard={onBackToDashboard} - onBackToViewEvent={onBackToViewEvent} onSaveExternal={onSaveExternal} trackedEntityTypeId={trackedEntityTypeId} programStage={programStage} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js index f459cff54d..995fca5429 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.container.js @@ -1,18 +1,18 @@ // @flow -import React, { useCallback, useEffect } from 'react'; +import React, { useEffect, useCallback } from 'react'; import { useQueryClient } from 'react-query'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { dataEntryIds } from 'capture-core/constants'; import { useEnrollmentEditEventPageMode } from 'capture-core/hooks'; import { + useCommonEnrollmentDomainData, + showEnrollmentError, + updateEnrollmentEvent, + updateEnrollmentAndEvents, commitEnrollmentAndEvents, rollbackEnrollmentAndEvents, setExternalEnrollmentStatus, - showEnrollmentError, - updateEnrollmentAndEvents, - updateEnrollmentEvent, - useCommonEnrollmentDomainData, } from '../common/EnrollmentOverviewDomain'; import { useTeiDisplayName } from '../common/EnrollmentOverviewDomain/useTeiDisplayName'; import { useProgramInfo } from '../../../hooks/useProgramInfo'; @@ -26,7 +26,7 @@ import { changeEventFromUrl } from '../ViewEvent/ViewEventComponent/viewEvent.ac import { buildEnrollmentsAsOptions } from '../../ScopeSelector'; import { convertDateWithTimeForView, convertValue } from '../../../converters/clientToView'; import { dataElementTypes } from '../../../metaData/DataElement'; -import { useAssignedUserSaveContext, useAssignee, useEvent } from './hooks'; +import { useEvent, useAssignee, useAssignedUserSaveContext } from './hooks'; import type { Props } from './EnrollmentEditEventPage.types'; import { LoadingMaskForPage } from '../../LoadingMasks'; import { cleanUpDataEntry } from '../../DataEntry'; @@ -39,13 +39,11 @@ import { import { DataStoreKeyByPage } from '../common/EnrollmentOverviewDomain/EnrollmentPageLayout'; import { DefaultPageLayout } from './PageLayout/DefaultPageLayout.constants'; import { getProgramEventAccess } from '../../../metaData'; -import { rollbackAssignee, setAssignee } from './EnrollmentEditEventPage.actions'; +import { setAssignee, rollbackAssignee } from './EnrollmentEditEventPage.actions'; import { convertClientToServer } from '../../../converters'; import { CHANGELOG_ENTITY_TYPES } from '../../WidgetsChangelog'; import { ReactQueryAppNamespace } from '../../../utils/reactQueryHelpers'; import { statusTypes } from '../../../enrollment'; -import { cancelEditEventDataEntry } from '../../WidgetEventEdit/EditEventDataEntry/editEventDataEntry.actions'; -import { setCurrentDataEntry } from '../../DataEntry/actions/dataEntry.actions'; const getEventDate = (event) => { const eventDataConvertValue = convertDateWithTimeForView(event?.occurredAt || event?.scheduledAt); @@ -141,10 +139,6 @@ const EnrollmentEditEventPageWithContextPlain = ({ history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); }, [history, orgUnitId, programId]); - const onBackToMainPage = useCallback(() => { - history.push(`/?${buildUrlQueryString({ orgUnitId, programId })}`); - }, [history, orgUnitId, programId]); - const onDelete = () => { history.push(`/enrollment?${buildUrlQueryString({ orgUnitId, programId, teiId })}`); dispatch(deleteEnrollment({ enrollmentId })); @@ -198,11 +192,6 @@ const EnrollmentEditEventPageWithContextPlain = ({ history.push(`enrollment?${buildUrlQueryString({ enrollmentId })}`); }; - const onBackToViewEvent = () => { - dispatch(cancelEditEventDataEntry()); - dispatch(setCurrentDataEntry(dataEntryIds.ENROLLMENT_EVENT, pageKeys.VIEW_EVENT)); - }; - const { teiDisplayName } = useTeiDisplayName(teiId, programId); // $FlowFixMe const { name: trackedEntityName, id: trackedEntityTypeId } = program?.trackedEntityType; @@ -253,9 +242,6 @@ const EnrollmentEditEventPageWithContextPlain = ({ pageStatus={pageStatus} programStage={programStage} onGoBack={onGoBack} - onBackToMainPage={onBackToMainPage} - onBackToDashboard={onGoBack} - onBackToViewEvent={onBackToViewEvent} widgetEffects={outputEffects} hideWidgets={hideWidgets} teiId={teiId} diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js index 56e2d5c5de..7f48be3b24 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/EnrollmentEditEventPage.types.js @@ -1,12 +1,12 @@ // @flow import type { ProgramStage } from '../../../metaData'; -import { Program } from '../../../metaData'; -import type { HideWidgets, WidgetEffects } from '../common/EnrollmentOverviewDomain'; +import type { WidgetEffects, HideWidgets } from '../common/EnrollmentOverviewDomain'; import type { UserFormField } from '../../FormFields/UserField'; import type { LinkedRecordClick } from '../../WidgetsRelationship/WidgetTrackedEntityRelationship'; import type { PageLayoutConfig, } from '../common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types'; +import { Program } from '../../../metaData'; export type PlainProps = {| pageLayout: ?PageLayoutConfig, @@ -29,9 +29,6 @@ export type PlainProps = {| onDelete: () => void, onAddNew: () => void, onGoBack: () => void, - onBackToMainPage: () => void, - onBackToDashboard: () => void, - onBackToViewEvent: () => void, onLinkedRecordClick: LinkedRecordClick, onEnrollmentError: (message: string) => void, onEnrollmentSuccess: () => void, diff --git a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js index 0a8065a405..e4c0feb93d 100644 --- a/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js +++ b/src/core_modules/capture-core/components/Pages/EnrollmentEditEvent/PageLayout/DefaultPageLayout.constants.js @@ -22,6 +22,10 @@ export const WidgetsForEnrollmentEventEdit: $ReadOnly<{ [key: string]: WidgetCon export const DefaultPageLayout: PageLayoutConfig = { leftColumn: [ + { + type: WidgetTypes.COMPONENT, + name: 'TwoEventWorkspace', + }, { type: WidgetTypes.COMPONENT, name: 'EditEventWorkspace', diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js index 30af8fca67..70ee627719 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.component.js @@ -56,7 +56,6 @@ const getStyles = () => ({ type Props = { showEditEvent: ?boolean, eventId: string, - eventData: Object, onOpenEditEvent: (orgUnit: Object, programCategory: ?ProgramCategory) => void, programStage: ProgramStage, eventAccess: { read: boolean, write: boolean }, @@ -77,7 +76,6 @@ const EventDetailsSectionPlain = (props: Props) => { const { classes, eventId, - eventData, onOpenEditEvent, showEditEvent, programStage, @@ -202,7 +200,6 @@ const EventDetailsSectionPlain = (props: Props) => { diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js index 46c97da75d..e57972d6bc 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/EventDetailsSection/EventDetailsSection.container.js @@ -10,7 +10,6 @@ import type { ProgramCategory } from '../../../WidgetEventSchedule/CategoryOptio const mapStateToProps = (state: ReduxState) => ({ showEditEvent: state.viewEventPage.eventDetailsSection && state.viewEventPage.eventDetailsSection.showEditEvent, eventId: state.viewEventPage.eventId, - eventData: state.viewEventPage.loadedValues?.eventContainer?.values || {}, programId: state.currentSelections.programId, }); diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js index 76d7d1b2dd..ee5710e754 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventComponent/ViewEvent.component.js @@ -2,21 +2,16 @@ import React, { Component } from 'react'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core/styles'; -import { Button, IconChevronLeft24, spacers } from '@dhis2/ui'; +import { spacers, IconChevronLeft24, Button } from '@dhis2/ui'; import { EventDetails } from '../EventDetailsSection/EventDetailsSection.container'; import { RightColumnWrapper } from '../RightColumn/RightColumnWrapper.component'; import type { ProgramStage } from '../../../../metaData'; import { DiscardDialog } from '../../../Dialogs/DiscardDialog.component'; import { defaultDialogProps } from '../../../Dialogs/DiscardDialog.constants'; import type { UserFormField } from '../../../FormFields/UserField'; -import { EventBreadcrumb } from '../../../Breadcrumbs/EventBreadcrumb'; -import { pageKeys } from '../../../Breadcrumbs/EventBreadcrumb/EventBreadcrumb'; const getStyles = (theme: Theme) => ({ container: { - display: 'flex', - flexDirection: 'column', - gap: spacers.dp12, padding: theme.typography.pxToRem(24), paddingTop: theme.typography.pxToRem(10), }, @@ -41,14 +36,11 @@ const getStyles = (theme: Theme) => ({ }); type Props = { - programId: string, onBackToAllEvents: () => void, currentDataEntryKey: string, programStage: ProgramStage, eventAccess: { read: boolean, write: boolean }, isUserInteractionInProgress: boolean, - showEditEvent: boolean, - onBackToViewEvent: () => void, classes: { container: string, contentContainer: string, @@ -84,11 +76,7 @@ class ViewEventPlain extends Component { render() { const { classes, - programId, programStage, - showEditEvent, - onBackToViewEvent, - isUserInteractionInProgress, currentDataEntryKey, eventAccess, assignee, @@ -100,38 +88,28 @@ class ViewEventPlain extends Component { return (
- -
- -
- - -
+ +
+ +
{ assignee: state.viewEventPage.loadedValues?.eventContainer.event.assignee, getAssignedUserSaveContext: () => assignedUserContextSelector(state), eventId: state.viewEventPage.eventId, - showEditEvent: eventDetailsSection.showEditEvent, }; }; }; diff --git a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js index 21a1e71c2b..a137ffb1e7 100644 --- a/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js +++ b/src/core_modules/capture-core/components/Pages/ViewEvent/ViewEventPage.component.js @@ -37,7 +37,6 @@ export const ViewEventPageComponent = ({ isUserInteractionInProgress, showAddRel showAddRelationship ? : } diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js index e9edfb3234..b06c213045 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants.js @@ -1,4 +1,5 @@ // @flow +import i18n from '@dhis2/d2-i18n'; import { EnrollmentWidget, ErrorWidget, @@ -16,6 +17,13 @@ export const EnrollmentPageKeys = Object.freeze({ VIEW_EVENT: 'viewEvent', }); +export const DefaultPageTitle = { + OVERVIEW: i18n.t('Dashboard'), + NEW_EVENT: i18n.t('New Event'), + EDIT_EVENT: i18n.t('Edit Event'), + VIEW_EVENT: i18n.t('View Event'), +}; + // Default components are available across all Enrollment Pages export const DefaultWidgetsForEnrollmentOverview = { TrackedEntityRelationship, diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js index cbb1bea87a..922a2071fc 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js @@ -8,6 +8,7 @@ type DefaultComponents = 'QuickActions' | 'AssigneeWidget' | 'NewEventWorkspace' | 'EditEventWorkspace' + | 'TwoEventWorkspace' | 'EnrollmentNote' | 'EventNote' | 'TrackedEntityRelationship' diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js index b8af4f35f9..f6d821e872 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js @@ -1,11 +1,12 @@ // @flow import React, { useCallback, useMemo, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; import { colors, spacers, spacersNum } from '@dhis2/ui'; import { withStyles } from '@material-ui/core/styles'; import { useWidgetColumns } from './hooks/useWidgetColumns'; import { AddRelationshipRefWrapper } from './AddRelationshipRefWrapper'; import type { PlainProps } from '../../../Enrollment/EnrollmentPageDefault/EnrollmentPageDefault.types'; -import { EnrollmentBreadcrumb } from '../../../../Breadcrumbs/EnrollmentBreadcrumb'; +import { DefaultPageTitle, EnrollmentPageKeys } from './DefaultEnrollmentLayout.constants'; const getEnrollmentPageStyles = () => ({ container: { @@ -14,9 +15,6 @@ const getEnrollmentPageStyles = () => ({ }, contentContainer: { position: 'relative', - display: 'flex', - flexDirection: 'column', - gap: spacers.dp12, }, columns: { display: 'flex', @@ -43,23 +41,28 @@ const getEnrollmentPageStyles = () => ({ color: colors.grey900, fontWeight: 500, paddingTop: spacersNum.dp8, + paddingBottom: spacersNum.dp16, }, }); // Function to validate hex color const isValidHex = (color: string) => /^#[0-9A-F]{6}$/i.test(color); +const getTitle = (inputTitle, page) => { + const title = inputTitle || i18n.t('Enrollment'); + const titles = { + [EnrollmentPageKeys.OVERVIEW]: !inputTitle ? `${title} ${DefaultPageTitle.OVERVIEW}` : title, + [EnrollmentPageKeys.NEW_EVENT]: `${title}: ${DefaultPageTitle.NEW_EVENT}`, + [EnrollmentPageKeys.EDIT_EVENT]: `${title}: ${DefaultPageTitle.EDIT_EVENT}`, + [EnrollmentPageKeys.VIEW_EVENT]: `${title}: ${DefaultPageTitle.VIEW_EVENT}`, + }; + return titles[page] || title; +}; + const EnrollmentPageLayoutPlain = ({ pageLayout, availableWidgets, - program, - trackedEntityName, - userInteractionInProgress, - eventStatus, currentPage, - onBackToMainPage, - onBackToDashboard, - onBackToViewEvent, classes, ...passOnProps }: PlainProps) => { @@ -70,19 +73,10 @@ const EnrollmentPageLayoutPlain = ({ const allProps = useMemo(() => ({ ...passOnProps, - program, currentPage, - eventStatus, toggleVisibility, addRelationShipContainerElement, - }), [ - addRelationShipContainerElement, - currentPage, - eventStatus, - passOnProps, - program, - toggleVisibility, - ]); + }), [addRelationShipContainerElement, currentPage, passOnProps, toggleVisibility]); const { leftColumnWidgets, @@ -99,29 +93,13 @@ const EnrollmentPageLayoutPlain = ({ }, [pageLayout.backgroundColor]); return ( -
+
-
- -
+
{getTitle(pageLayout.title, currentPage)}
{pageLayout.leftColumn && !!leftColumnWidgets?.length && (
diff --git a/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js b/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js index aa99aae4e4..2968d8b1ef 100644 --- a/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js +++ b/src/core_modules/capture-core/components/Pages/common/WidgetEventEditWrapper/WidgetEventEditWrapper.js @@ -1,6 +1,5 @@ // @flow import React from 'react'; -import { IconArrowLeft24, Button } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; import { pageStatuses } from '../../EnrollmentEditEvent/EnrollmentEditEventPage.constants'; import { IncompleteSelectionsMessage } from '../../../IncompleteSelectionsMessage'; @@ -17,7 +16,6 @@ export const WidgetEventEditWrapper = ({ pageStatus, ...passOnProps }: WidgetPro const { programId, stageId, - onGoBack, } = passOnProps; const { @@ -58,20 +56,12 @@ export const WidgetEventEditWrapper = ({ pageStatus, ...passOnProps }: WidgetPro } return ( - <> -
- -
- - + ); }; diff --git a/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js b/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js index 980303faea..77fe10dafa 100644 --- a/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js +++ b/src/core_modules/capture-core/components/Pagination/withDefaultNavigation.js @@ -54,7 +54,6 @@ type Props = { nextPageButtonDisabled: boolean, currentPage: number, onChangePage: (pageNumber: number) => void, - disabled?: boolean, classes: { root: string, }, @@ -75,7 +74,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => }; renderNavigationElement() { - const { currentPage, disabled, classes, theme, nextPageButtonDisabled } = this.props; + const { currentPage, classes, theme, nextPageButtonDisabled } = this.props; return (
) => {theme.direction === 'rtl' ? : } @@ -92,7 +91,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => {theme.direction === 'rtl' ? : } @@ -100,7 +99,7 @@ const getNavigation = (InnerComponent: React.ComponentType) => {theme.direction === 'rtl' ? : } diff --git a/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js b/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js index 2d3edee629..46cbe2fe34 100644 --- a/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js +++ b/src/core_modules/capture-core/components/Pagination/withRowsPerPageSelector.js @@ -12,7 +12,6 @@ const OptionsSelectWithTranslations = withTranslations()(OptionsSelectVirtualize type Props = { rowsPerPage: number, onChangeRowsPerPage: (rowsPerPage: number) => void, - disabled?: boolean, }; const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => @@ -38,7 +37,7 @@ const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => } renderSelectorElement = () => { - const { rowsPerPage, disabled } = this.props; + const rowsPerPage = this.props.rowsPerPage; return (
@@ -47,7 +46,6 @@ const getRowsPerPageSelector = (InnerComponent: React.ComponentType) => options={this.options} value={rowsPerPage} nullable={false} - disabled={disabled} withoutUnderline searchable={false} /> diff --git a/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js b/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js index 575270becc..c373f3b688 100644 --- a/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js +++ b/src/core_modules/capture-core/components/ScopeSelector/hooks/useSetProgramId.js @@ -5,7 +5,7 @@ import { buildUrlQueryString, useLocationQuery } from '../../../utils/routing'; export const useSetProgramId = () => { const history = useHistory(); const { pathname } = useLocation(); - const { selectedTemplateId, ...restOfQueries } = useLocationQuery(); + const restOfQueries = useLocationQuery(); const setProgramId = (programId: string, pageToPush: string = pathname) => { diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js deleted file mode 100644 index 1d1e26c9a9..0000000000 --- a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow -export { getCategoryOptionsValidatorContainers } from './categoryOptions.validatorContainersGetter'; -export { getEventDateValidatorContainers } from './eventDate.validatorContainersGetter'; -export { getNoteValidatorContainers } from './note.validatorContainersGetter'; -export { getOrgUnitValidatorContainers } from './orgUnit.validatorContainersGetter'; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js b/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js deleted file mode 100644 index b438a4a494..0000000000 --- a/src/core_modules/capture-core/components/WidgetEventEdit/DataEntry/fieldValidators/orgUnit.validatorContainersGetter.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow -import { isValidOrgUnit } from 'capture-core-utils/validators/form'; -import i18n from '@dhis2/d2-i18n'; - -const validateOrgUnit = (value?: ?Object) => isValidOrgUnit(value); - -export const getOrgUnitValidatorContainers = () => { - const validatorContainers = [ - { - validator: validateOrgUnit, - message: i18n.t('Please provide an valid organisation unit'), - }, - ]; - return validatorContainers; -}; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js index e7041bdd74..d9f20c2e66 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.component.js @@ -5,7 +5,7 @@ import { dataElementTypes } from '../../../metaData'; import type { Props } from './EventChangelogWrapper.types'; import { WidgetEventChangelog } from '../../WidgetsChangelog'; -export const EventChangelogWrapper = ({ formFoundation, eventId, eventData, ...passOnProps }: Props) => { +export const EventChangelogWrapper = ({ formFoundation, eventId, ...passOnProps }: Props) => { const dataItemDefinitions = useMemo(() => { const elements = formFoundation.getElements(); const contextLabels = formFoundation.getLabels(); @@ -52,7 +52,6 @@ export const EventChangelogWrapper = ({ formFoundation, eventId, eventData, ...p ); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js index 58cb1d981f..274891017e 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/EventChangelogWrapper/EventChangelogWrapper.types.js @@ -10,5 +10,4 @@ type PassOnProps = {| export type Props = { ...PassOnProps, formFoundation: RenderFoundation, - eventData: Object, }; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js index eed050d621..550f589dc4 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/ViewEventDataEntry.component.js @@ -139,27 +139,6 @@ const buildReportDateSettingsFn = () => { return reportDateSettings; }; -const buildOrgUnitSettingsFn = () => { - const dataElement = new DataElement((o) => { - o.type = dataElementTypes.ORGANISATION_UNIT; - }); - - const orgUnitSettings = { - getComponent: () => viewModeComponent, - getComponentProps: (props: Object) => createComponentProps(props, { - label: i18n.t('Organisation unit'), - valueConverter: value => dataElement.convertValue(value, valueConvertFn), - }), - getPropName: () => 'orgUnitId', - getMeta: () => ({ - placement: placements.TOP, - section: dataEntrySectionNames.BASICINFO, - }), - }; - - return orgUnitSettings; -}; - const buildScheduleDateSettingsFn = () => { const dataElement = new DataElement((o) => { o.type = dataElementTypes.DATE; @@ -266,8 +245,7 @@ const AOCFieldBuilderHOC = withAOCFieldBuilder({})(withDataEntryFields(getCatego const CleanUpHOC = withCleanUp()(AOCFieldBuilderHOC); const GeometryField = withDataEntryFieldIfApplicable(buildGeometrySettingsFn())(CleanUpHOC); const ScheduleDateField = withDataEntryField(buildScheduleDateSettingsFn())(GeometryField); -const OrgUnitField = withDataEntryField(buildOrgUnitSettingsFn())(ScheduleDateField); -const ReportDateField = withDataEntryField(buildReportDateSettingsFn())(OrgUnitField); +const ReportDateField = withDataEntryField(buildReportDateSettingsFn())(ScheduleDateField); const CompletableDataEntry = withDataEntryField(buildCompleteFieldSettingsFn())(ReportDateField); const DataEntryWrapper = withBrowserBackWarning()(CompletableDataEntry); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js index 65b90ecf13..a3252ab790 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/ViewEventDataEntry/viewEventDataEntry.actions.js @@ -23,7 +23,7 @@ import type { EnrollmentData, AttributeValue, } from '../../Pages/common/EnrollmentOverviewDomain/useCommonEnrollmentDomainData'; -import { getEventDateValidatorContainers, getOrgUnitValidatorContainers } from '../DataEntry/fieldValidators'; +import { getEventDateValidatorContainers } from '../DataEntry/fieldValidators/eventDate.validatorContainersGetter'; import { getCachedSingleResourceFromKeyAsync } from '../../../metaDataMemoryStoreBuilders/baseBuilder/singleResourceFromKeyGetter'; import { userStores } from '../../../storageControllers/stores'; import { FEATURES, hasAPISupportForFeature } from '../../../../capture-core-utils'; @@ -67,11 +67,6 @@ export const loadViewEventDataEntry = type: 'DATE', validatorContainers: getEventDateValidatorContainers(), }, - { - id: 'orgUnitId', - type: 'ORGANISATION_UNIT', - validatorContainers: getOrgUnitValidatorContainers(), - }, { id: 'scheduledAt', type: 'DATE', diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js index 21b2e372ea..b39bb89c7c 100644 --- a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js +++ b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetEventEdit.container.js @@ -1,41 +1,40 @@ // @flow -import React, { type ComponentType, useEffect, useState } from 'react'; +import React, { type ComponentType, useState, useEffect } from 'react'; import { dataEntryIds, dataEntryKeys } from 'capture-core/constants'; -import { useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { spacersNum, + Button, colors, + IconEdit24, + IconArrowLeft24, + IconMore16, + FlyoutMenu, + MenuItem, spacers, } from '@dhis2/ui'; import { withStyles } from '@material-ui/core'; +import i18n from '@dhis2/d2-i18n'; +import { ConditionalTooltip } from 'capture-core/components/Tooltips/ConditionalTooltip'; import { useEnrollmentEditEventPageMode, useAvailableProgramStages } from 'capture-core/hooks'; import { useCoreOrgUnit } from 'capture-core/metadataRetrieval/coreOrgUnit'; import type { PlainProps, ComponentProps } from './widgetEventEdit.types'; +import { startShowEditEventDataEntry } from './WidgetEventEdit.actions'; import { Widget } from '../Widget'; import { EditEventDataEntry } from './EditEventDataEntry/'; import { ViewEventDataEntry } from './ViewEventDataEntry/'; import { LoadingMaskElementCenter } from '../LoadingMasks'; +import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; +import { getProgramEventAccess } from '../../metaData'; +import { useCategoryCombinations } from '../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; +import { OverflowButton } from '../Buttons'; import { EventChangelogWrapper } from './EventChangelogWrapper'; import { FEATURES, useFeature } from '../../../capture-core-utils'; import { inMemoryFileStore } from '../DataEntry/file/inMemoryFileStore'; -import { WidgetHeader } from './WidgetHeader'; -import { WidgetTwoEventWorkspace, WidgetTwoEventWorkspaceWrapperTypes } from '../WidgetTwoEventWorkspace'; +import { eventStatuses } from './constants/status.const'; +import { useAuthorities } from '../../utils/authority/useAuthorities'; const styles = { - container: { - backgroundColor: 'white', - borderRadius: 3, - borderStyle: 'solid', - borderColor: colors.grey400, - borderWidth: 1, - '& > div:nth-child(2)': { - margin: spacersNum.dp16, - borderRadius: 3, - borderStyle: 'solid', - borderColor: colors.grey400, - borderWidth: 1, - }, - }, header: { display: 'flex', alignItems: 'center', @@ -74,6 +73,7 @@ export const WidgetEventEditPlain = ({ initialScheduleDate, stage, formFoundation, + onGoBack, onCancelEditEvent, onHandleScheduleSave, onSaveExternal, @@ -90,98 +90,144 @@ export const WidgetEventEditPlain = ({ classes, }: PlainProps) => { useEffect(() => inMemoryFileStore.clear, []); + const dispatch = useDispatch(); const supportsChangelog = useFeature(FEATURES.changelogs); const { currentPageMode } = useEnrollmentEditEventPageMode(eventStatus); const { orgUnit, error } = useCoreOrgUnit(orgUnitId); const [changeLogIsOpen, setChangeLogIsOpen] = useState(false); + const [actionsIsOpen, setActionsIsOpen] = useState(false); // "Edit event"-button depends on loadedValues. Delay rendering component until loadedValues has been initialized. const loadedValues = useSelector(({ viewEventPage }) => viewEventPage.loadedValues); + const eventAccess = getProgramEventAccess(programId, stageId); + const { hasAuthority } = useAuthorities({ authorities: ['F_UNCOMPLETE_EVENT'] }); + const blockEntryForm = stage.blockEntryForm && !hasAuthority && eventStatus === eventStatuses.COMPLETED; + const disableEdit = !eventAccess?.write || blockEntryForm; + + const tooltipContent = blockEntryForm ? + i18n.t('The event cannot be edited after it has been completed') : + i18n.t('You don\'t have access to edit this event'); + const availableProgramStages = useAvailableProgramStages(stage, teiId, enrollmentId, programId); + const { programCategory } = useCategoryCombinations(programId); if (error) { return error.errorComponent; } + const { icon, name } = stage; return orgUnit && loadedValues ? ( -
- -
- - } - noncollapsible - borderless - > -
- {currentPageMode === dataEntryKeys.VIEW ? ( -
- -
- ) : ( -
+
+ + + {currentPageMode === dataEntryKeys.VIEW && ( +
+ +
+ )} +
+ + {icon && ( +
+
)} + {name}
- -
+ } + noncollapsible + > +
+ {currentPageMode === dataEntryKeys.VIEW ? ( + + ) : ( + + )} +
+
{supportsChangelog && changeLogIsOpen && ( )} diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js deleted file mode 100644 index 8e86f36fdc..0000000000 --- a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.container.js +++ /dev/null @@ -1,129 +0,0 @@ -// @flow -import React, { type ComponentType, useState, useEffect } from 'react'; -import { dataEntryKeys } from 'capture-core/constants'; -import { useDispatch } from 'react-redux'; -import { spacersNum, Button, IconEdit24, IconMore16, FlyoutMenu, MenuItem, spacers } from '@dhis2/ui'; -import { withStyles } from '@material-ui/core'; -import i18n from '@dhis2/d2-i18n'; -import { FEATURES, useFeature } from 'capture-core-utils'; -import { useAuthorities } from 'capture-core/utils/authority/useAuthorities'; -import { ConditionalTooltip } from 'capture-core/components/Tooltips/ConditionalTooltip'; -import { useEnrollmentEditEventPageMode } from 'capture-core/hooks'; -import { startShowEditEventDataEntry } from '../WidgetEventEdit.actions'; -import { NonBundledDhis2Icon } from '../../NonBundledDhis2Icon'; -import { getProgramEventAccess } from '../../../metaData'; -import { useCategoryCombinations } from '../../DataEntryDhis2Helpers/AOC/useCategoryCombinations'; -import { OverflowButton } from '../../Buttons'; -import { inMemoryFileStore } from '../../DataEntry/file/inMemoryFileStore'; -import { eventStatuses } from '../constants/status.const'; -import type { PlainProps, Props } from './WidgetHeader.types'; - -const styles = { - icon: { - paddingRight: spacersNum.dp8, - }, - menu: { - marginLeft: 'auto', - }, - menuActions: { - display: 'flex', - alignItems: 'center', - gap: spacers.dp4, - }, - tooltip: { - display: 'inline-flex', - }, -}; - -export const WidgetHeaderPlain = ({ - eventStatus, - stage, - programId, - orgUnit, - setChangeLogIsOpen, - classes, -}: Props) => { - useEffect(() => inMemoryFileStore.clear, []); - const dispatch = useDispatch(); - - const supportsChangelog = useFeature(FEATURES.changelogs); - const { currentPageMode } = useEnrollmentEditEventPageMode(eventStatus); - const [actionsIsOpen, setActionsIsOpen] = useState(false); - - const eventAccess = getProgramEventAccess(programId, stage.id); - const { hasAuthority } = useAuthorities({ authorities: ['F_UNCOMPLETE_EVENT'] }); - const blockEntryForm = stage.blockEntryForm && !hasAuthority && eventStatus === eventStatuses.COMPLETED; - const disableEdit = !eventAccess?.write || blockEntryForm; - - const tooltipContent = blockEntryForm - ? i18n.t('The event cannot be edited after it has been completed') - : i18n.t("You don't have access to edit this event"); - - const { programCategory } = useCategoryCombinations(programId); - - const { icon, name } = stage; - - return ( - <> - {icon && ( -
- -
- )} - {name} -
- {currentPageMode === dataEntryKeys.VIEW && ( -
- - - - - {supportsChangelog && ( - setActionsIsOpen(prev => !prev)} - icon={} - small - secondary - dataTest={'widget-event-edit-overflow-button'} - component={ - - { - setChangeLogIsOpen(true); - setActionsIsOpen(false); - }} - /> - - } - /> - )} -
- )} -
- - ); -}; - -export const WidgetHeader: ComponentType = withStyles(styles)(WidgetHeaderPlain); diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js deleted file mode 100644 index df70f89e0e..0000000000 --- a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/WidgetHeader.types.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow -import type { OrgUnit } from '@dhis2/rules-engine-javascript'; -import { ProgramStage } from '../../../metaData'; - -export type PlainProps = {| - eventStatus?: string, - stage: ProgramStage, - programId: string, - orgUnit: OrgUnit, - setChangeLogIsOpen: (toggle: boolean) => void, -|}; - -export type Props = {| - ...PlainProps, - ...CssClasses, -|}; diff --git a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js b/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js deleted file mode 100644 index efff17d3ce..0000000000 --- a/src/core_modules/capture-core/components/WidgetEventEdit/WidgetHeader/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export { WidgetHeader } from './WidgetHeader.container'; diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js index faf83dfe91..e711f1a1f7 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.component.js @@ -9,7 +9,6 @@ import { TrackedEntityChangelogWrapper } from './TrackedEntityChangelogWrapper'; export const OverflowMenuComponent = ({ trackedEntity, - trackedEntityData, trackedEntityTypeName, canWriteData, canCascadeDeleteTei, @@ -69,7 +68,6 @@ export const OverflowMenuComponent = ({ programAPI={programAPI} isOpen={changelogIsOpen} setIsOpen={setChangelogIsOpen} - trackedEntityData={trackedEntityData} /> )} diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js index 38d17ad0c0..031f7fd462 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.container.js @@ -8,7 +8,6 @@ export const OverflowMenu = ({ trackedEntityTypeName, canWriteData, trackedEntity, - trackedEntityData, onDeleteSuccess, displayChangelog, teiId, @@ -22,7 +21,6 @@ export const OverflowMenu = ({ canWriteData={canWriteData} canCascadeDeleteTei={hasAuthority} trackedEntity={trackedEntity} - trackedEntityData={trackedEntityData} onDeleteSuccess={onDeleteSuccess} displayChangelog={displayChangelog} teiId={teiId} diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js index 84ea57e86a..ad3cc687d4 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/OverflowMenu.types.js @@ -3,7 +3,6 @@ export type Props = {| trackedEntity: { trackedEntity: string }, trackedEntityTypeName: string, - trackedEntityData: Object, canWriteData: boolean, onDeleteSuccess?: () => void, displayChangelog: boolean, @@ -14,7 +13,6 @@ export type Props = {| export type PlainProps = {| trackedEntity: { trackedEntity: string }, trackedEntityTypeName: string, - trackedEntityData: Object, canWriteData: boolean, canCascadeDeleteTei: boolean, onDeleteSuccess?: () => void, diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js index 27db89634d..1dc3172af6 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.component.js @@ -5,14 +5,9 @@ import { useFormFoundation } from '../../DataEntry/hooks'; import { WidgetTrackedEntityChangelog } from '../../../WidgetsChangelog'; import type { Props } from './TrackedEntityChangelogWrapper.types'; -export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, trackedEntityData, ...passOnProps }: Props) => { +export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, ...passOnProps }: Props) => { const formFoundation: RenderFoundation = useFormFoundation(programAPI); - const transformedTrackedEntityData = trackedEntityData.reduce((acc, item) => { - acc[item.attribute] = item.value; - return acc; - }, {}); - const dataItemDefinitions = useMemo(() => { if (!Object.keys(formFoundation)?.length) return {}; const elements = formFoundation.getElements(); @@ -63,7 +58,6 @@ export const TrackedEntityChangelogWrapper = ({ programAPI, teiId, setIsOpen, tr close={() => setIsOpen(false)} programId={programAPI.id} dataItemDefinitions={dataItemDefinitions} - trackedEntityData={transformedTrackedEntityData} /> ); }; diff --git a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js index c2c5d726f4..e0bb62461f 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js +++ b/src/core_modules/capture-core/components/WidgetProfile/OverflowMenu/TrackedEntityChangelogWrapper/TrackedEntityChangelogWrapper.types.js @@ -5,7 +5,6 @@ type PassOnProps = {| teiId: string, isOpen: boolean, setIsOpen: (boolean | boolean => boolean) => void, - trackedEntityData: Object, |} export type Props = { diff --git a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js index f63800dd43..0204ac19a7 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js @@ -162,7 +162,6 @@ const WidgetProfilePlain = ({ trackedEntity={trackedEntity} onDeleteSuccess={onDeleteSuccess} displayChangelog={displayChangelog} - trackedEntityData={clientAttributesWithSubvalues} teiId={teiId} programAPI={program} /> diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js index 9d7f31f63f..74ae039f19 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/hooks/helpers.js @@ -1,7 +1,6 @@ // @flow import React from 'react'; import moment from 'moment'; -import i18n from '@dhis2/d2-i18n'; import { statusTypes, translatedStatusTypes } from 'capture-core/events/statusTypes'; import { convertMomentToDateFormatString } from '../../../../../../utils/converters/date'; import { getSubValues } from '../../getEventDataWithSubValue'; @@ -26,14 +25,10 @@ const getEventStatus = (event: ApiEnrollmentEvent) => { } if (event.status === statusTypes.SCHEDULE) { - if (!event.scheduledAt) { + if (!event.scheduledAt || !daysUntilDueDate) { return { status: statusTypes.SCHEDULE, options: undefined }; } - if (daysUntilDueDate === 0) { - return { status: statusTypes.SCHEDULE, options: i18n.t('Today') }; - } - if (daysUntilDueDate < 14) { return { status: statusTypes.SCHEDULE, options: dueDateFromNow }; } diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js deleted file mode 100644 index ccacd58885..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js +++ /dev/null @@ -1,63 +0,0 @@ -// @flow -import React, { type ComponentType } from 'react'; -import { spacersNum } from '@dhis2/ui'; -import { withStyles } from '@material-ui/core/'; -import { EnrollmentPageKeys } - from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; -import { NonBundledDhis2Icon } from '../../NonBundledDhis2Icon'; -import type { PlainProps, Props } from './WidgetHeader.types'; -import { OverflowMenuComponent } from '../OverflowMenu'; - -const styles = { - menu: { - marginLeft: 'auto', - }, - icon: { - marginRight: spacersNum.dp8, - }, -}; - - -const WidgetHeaderPlain = ({ - linkedStage, - linkedEvent, - orgUnitId, - currentPage, - eventId, - relationship, - relationshipType, - stage, - classes }: Props) => { - const { icon } = linkedStage; - return ( - <> - {icon && ( -
- -
- )} - {linkedStage.name} - {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( -
- -
- )} - - ); -}; - -export const WidgetHeader: ComponentType = withStyles(styles)(WidgetHeaderPlain); - diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js deleted file mode 100644 index 16d4b75138..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow -import { EnrollmentPageKeys } - from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; -import type { ProgramStage } from '../../../metaData'; - -export type PlainProps = {| - orgUnitId: string, - linkedEvent: { event: string }, - linkedStage: ProgramStage, - currentPage: $Values | string, - eventId: string, - relationship: string, - relationshipType: string, - stage: ProgramStage, -|}; - -export type Props = {| - ...PlainProps, - ...CssClasses, -|}; - diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js deleted file mode 100644 index efff17d3ce..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export { WidgetHeader } from './WidgetHeader.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index dc74e98476..37be7a7963 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -1,21 +1,49 @@ // @flow import React from 'react'; +import { colors, spacersNum } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core/'; import type { Props } from './WidgetTwoEventWorkspace.types'; import { useMetadataForProgramStage } from '../DataEntries/common/ProgramStage/useMetadataForProgramStage'; import { Widget } from '../Widget'; import { useLinkedEventByOriginId, useClientDataValues } from './hooks'; import { WidgetTwoEventWorkspaceComponent } from './WidgetTwoEventWorkspace.component'; -import { WidgetWrapper } from './WidgetWrapper'; -import { WidgetHeader } from './WidgetHeader'; +import { OverflowMenuComponent } from './OverflowMenu'; +import { + EnrollmentPageKeys, +} from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; -export const WidgetTwoEventWorkspace = ({ +const styles = { + menu: { + display: 'flex', + alignItems: 'center', + padding: spacersNum.dp8, + justifyContent: 'end', + background: colors.white, + borderTopLeftRadius: 3, + borderTopRightRadius: 3, + borderStyle: 'solid', + borderColor: colors.grey400, + borderWidth: 1, + borderBottomWidth: 0, + }, + header: { + display: 'flex', + alignItems: 'center', + padding: spacersNum.dp8, + }, + icon: { + marginRight: spacersNum.dp8, + }, +}; + +const WidgetTwoEventWorkspacePlain = ({ eventId, programId, orgUnitId, currentPage, - stage, - type, + classes, }: Props) => { const { linkedEvent, @@ -28,7 +56,7 @@ export const WidgetTwoEventWorkspace = ({ const { formFoundation, - stage: linkedStage, + stage, isLoading: isLoadingMetadata, isError: isMetadataError, } = useMetadataForProgramStage({ @@ -58,38 +86,54 @@ export const WidgetTwoEventWorkspace = ({ ); } - if (!linkedEvent || !formFoundation || !linkedStage) { + if (!linkedEvent || !formFoundation || !stage) { return null; } return ( - - } - noncollapsible - > - + {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( +
+ - - } - /> +
+ )} + + + {stage.icon && ( +
+ +
+ )} + {stage.name} +
+ } + noncollapsible + > + + +
); }; + +export const WidgetTwoEventWorkspace = withStyles( + styles, +)(WidgetTwoEventWorkspacePlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js index c79a68c5d5..52aff39ded 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js @@ -2,17 +2,13 @@ import { EnrollmentPageKeys, } from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; -import { WidgetTwoEventWorkspaceWrapperTypes } from './index'; -import type { ProgramStage } from '../../metaData'; -export type Props = {| +type PlainProps = {| programId: string, eventId: string, orgUnitId: string, stageId: string, - currentPage: $Values | string, - stage?: ProgramStage, - type?: $Values, + currentPage: $Values, |} export type LinkedEvent = {| @@ -22,3 +18,7 @@ export type LinkedEvent = {| orgUnit: string, |} +export type Props = {| + ...PlainProps, + ...CssClasses, +|} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js deleted file mode 100644 index 421d827ca5..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow - -export const WidgetTwoEventWorkspaceWrapperTypes = { - EDIT_EVENT: 'editEvent', -}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js deleted file mode 100644 index dcc0defdc9..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js +++ /dev/null @@ -1,74 +0,0 @@ -// @flow -import React from 'react'; -import { colors, spacersNum, IconLink16 } from '@dhis2/ui'; -import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core/'; -import type { Props } from './WidgetWrapper.types'; -import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; - -const styles = { - container: { - width: 'fit-content', - marginBottom: '16px', - margin: '16px', - }, - header: { - display: 'flex', - alignItems: 'center', - paddingBottom: spacersNum.dp16, - fontWeight: 500, - fontSize: 16, - color: colors.grey800, - }, - referalResponse: { - padding: spacersNum.dp16, - backgroundColor: colors.blue100, - borderRadius: '3px', - }, - linkedEvent: { - color: colors.blue900, - verticalAlign: 'middle', - display: 'flex', - fontSize: '16px', - fontWeight: '500', - }, - icon: { - marginRight: spacersNum.dp8, - }, - decription: { - margin: `${spacersNum.dp8}px 0`, - }, -}; - -const WidgetWrapperPlain = ({ widget, type, stage, linkedStage, classes }: Props) => { - if (type === WidgetTwoEventWorkspaceWrapperTypes.EDIT_EVENT) { - return ( -
-
{stage?.name}
-
-
- - - -
{i18n.t('Linked event')}
-
-
- {i18n.t( - 'This {{stageName}} event is linked to a {{linkedStageName}} event. Review the linked event details before entering data below', - { - linkedStageName: linkedStage?.name, - stageName: stage?.name, - interpolation: { escapeValue: false }, - }, - )} -
- {widget} -
-
- ); - } - - return <>{widget}; -}; - -export const WidgetWrapper = withStyles(styles)(WidgetWrapperPlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js deleted file mode 100644 index ae72f04aa3..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow -import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; -import type { ProgramStage } from '../../../metaData'; - -type PlainProps = {| - widget: any, - linkedStage: ProgramStage, - stage?: ProgramStage, - type?: $Values, -|}; - -export type Props = {| - ...PlainProps, - ...CssClasses, -|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js deleted file mode 100644 index adb87f9498..0000000000 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export { WidgetWrapper } from './WidgetWrapper.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js index b057d60b99..27320f9e8c 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js @@ -1,4 +1,3 @@ // @flow export { WidgetTwoEventWorkspace } from './WidgetTwoEventWorkspace.container'; -export { WidgetTwoEventWorkspaceWrapperTypes } from './WidgetTwoEventWorkspaceWrapper.const'; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js index aabb240e4a..86137d295e 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetEventChangelog/WidgetEventChangelog.js @@ -5,7 +5,6 @@ import { Changelog, CHANGELOG_ENTITY_TYPES } from '../common/Changelog'; type Props = { eventId: string, - eventData: Object, dataItemDefinitions: ItemDefinitions, isOpen: boolean, setIsOpen: (boolean | boolean => boolean) => void, @@ -13,7 +12,6 @@ type Props = { export const WidgetEventChangelog = ({ eventId, - eventData, setIsOpen, ...passOnProps }: Props) => ( @@ -21,7 +19,6 @@ export const WidgetEventChangelog = ({ {...passOnProps} close={() => setIsOpen(false)} entityId={eventId} - entityData={eventData} entityType={CHANGELOG_ENTITY_TYPES.EVENT} /> ); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js index a28370ea35..86e941142c 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/WidgetTrackedEntityChangelog/WidgetTrackedEntityChangelog.js @@ -9,20 +9,17 @@ type Props = { dataItemDefinitions: ItemDefinitions, isOpen: boolean, close: () => void, - trackedEntityData: Object, } export const WidgetTrackedEntityChangelog = ({ teiId, programId, close, - trackedEntityData, ...passOnProps }: Props) => ( , isOpen: boolean, close: () => void, dataItemDefinitions: ItemDefinitions, programId?: string, -}; +} export const Changelog = ({ entityId, - entityData, entityType, programId, isOpen, @@ -27,11 +25,9 @@ export const Changelog = ({ dataItemDefinitions, }: Props) => { const { - rawRecords, + records, pager, - isLoading: isChangelogLoading, - page, - pageSize, + isLoading, setPage, setPageSize, sortDirection, @@ -40,24 +36,10 @@ export const Changelog = ({ entityId, entityType, programId, - }); - - const { - processedRecords, - isLoading: isProcessingLoading, - } = useListDataValues({ - rawRecords, dataItemDefinitions, - entityId, - entityData, - entityType, - programId, - sortDirection, - page, - pageSize, }); - if (isChangelogLoading || isProcessingLoading) { + if (isLoading) { return ( @@ -69,7 +51,7 @@ export const Changelog = ({ (
-
{previousValue}
-
-
{currentValue}
+ {previousValue} + + {currentValue}
); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js index 3169194fc1..e93571cbf2 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/ChangelogTable/ChangelogTableRow.js @@ -13,11 +13,13 @@ type Props = { }, classes: { dataItemColumn: string, + valueColumn: string, }, }; const styles = { dataItemColumn: { wordWrap: 'break-word', hyphens: 'auto' }, + valueColumn: { wordWrap: 'break-word' }, }; const ChangelogTableRowPlain = ({ record, classes }: Props) => ( @@ -26,7 +28,7 @@ const ChangelogTableRowPlain = ({ record, classes }: Props) => ( {record.user} {record.dataItemLabel} - + ); diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js index d35467e5b7..af7f2f4226 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/index.js @@ -1,3 +1,2 @@ // @flow export { useChangelogData } from './useChangelogData'; -export { useListDataValues } from './useListDataValues'; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js index f9562cf4ac..bcf1c82a54 100644 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js +++ b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useChangelogData.js @@ -1,31 +1,48 @@ // @flow -import { useState } from 'react'; +import moment from 'moment'; +import { v4 as uuid } from 'uuid'; +import log from 'loglevel'; +import { errorCreator } from 'capture-core-utils'; +import { useMemo, useState } from 'react'; +import { useTimeZoneConversion } from '@dhis2/app-runtime'; import { useApiDataQuery } from '../../../../utils/reactQueryHelpers'; -import { - CHANGELOG_ENTITY_TYPES, - QUERY_KEYS_BY_ENTITY_TYPE, -} from '../Changelog/Changelog.constants'; -import type { - SortDirection, -} from '../Changelog/Changelog.types'; +import { CHANGELOG_ENTITY_TYPES, QUERY_KEYS_BY_ENTITY_TYPE } from '../Changelog/Changelog.constants'; +import type { Change, ChangelogRecord, ItemDefinitions, SortDirection } from '../Changelog/Changelog.types'; +import { convertServerToClient } from '../../../../converters'; +import { convert } from '../../../../converters/clientToList'; type Props = { entityId: string, programId?: string, entityType: $Values, -}; + dataItemDefinitions: ItemDefinitions, +} const DEFAULT_PAGE_SIZE = 10; const DEFAULT_SORT_DIRECTION = 'default'; +const getMetadataItemDefinition = ( + elementKey: string, + change: Change, + dataItemDefinitions: ItemDefinitions, +) => { + const { dataElement, attribute } = change; + const fieldId = dataElement ?? attribute; + const metadataElement = fieldId ? dataItemDefinitions[fieldId] : dataItemDefinitions[elementKey]; + + return { metadataElement, fieldId }; +}; + export const useChangelogData = ({ entityId, entityType, programId, + dataItemDefinitions, }: Props) => { - const [sortDirection, setSortDirection] = useState(DEFAULT_SORT_DIRECTION); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); + const [sortDirection, setSortDirection] = useState(DEFAULT_SORT_DIRECTION); + const { fromServerDate } = useTimeZoneConversion(); const handleChangePageSize = (newPageSize: number) => { setPage(1); @@ -33,7 +50,7 @@ export const useChangelogData = ({ }; const { data, isLoading, isError } = useApiDataQuery( - ['changelog', entityType, entityId, 'rawData', { sortDirection, page, pageSize, programId }], + ['changelog', entityType, entityId, { sortDirection, page, pageSize, programId }], { resource: `tracker/${QUERY_KEYS_BY_ENTITY_TYPE[entityType]}/${entityId}/changeLogs`, params: { @@ -50,15 +67,62 @@ export const useChangelogData = ({ }, ); + const records: ?Array = useMemo(() => { + if (!data) return undefined; + + return data.changeLogs.map((changelog) => { + const { change: apiChange, createdAt, createdBy } = changelog; + const elementKey = Object.keys(apiChange)[0]; + const change = apiChange[elementKey]; + + const { metadataElement, fieldId } = getMetadataItemDefinition( + elementKey, + change, + dataItemDefinitions, + ); + + if (!metadataElement) { + log.error(errorCreator('Could not find metadata for element')({ + ...changelog, + })); + return null; + } + + const { firstName, surname, username } = createdBy; + const { options } = metadataElement; + + const previousValue = convert( + convertServerToClient(change.previousValue, metadataElement.type), + metadataElement.type, + options, + ); + + const currentValue = convert( + convertServerToClient(change.currentValue, metadataElement.type), + metadataElement.type, + options, + ); + + return { + reactKey: uuid(), + date: moment(fromServerDate(createdAt)).format('YYYY-MM-DD HH:mm'), + user: `${firstName} ${surname} (${username})`, + dataItemId: fieldId, + changeType: changelog.type, + dataItemLabel: metadataElement.name, + previousValue, + currentValue, + }; + }).filter(Boolean); + }, [data, dataItemDefinitions, fromServerDate]); + return { - rawRecords: data, + records, pager: data?.pager, setPage, setPageSize: handleChangePageSize, sortDirection, setSortDirection, - page, - pageSize, isLoading, isError, }; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js deleted file mode 100644 index e94bf94a88..0000000000 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/hooks/useListDataValues.js +++ /dev/null @@ -1,177 +0,0 @@ -// @flow -import { useMemo } from 'react'; -import log from 'loglevel'; -import { useTimeZoneConversion, useConfig, useDataEngine } from '@dhis2/app-runtime'; -import { useQuery } from 'react-query'; -import { errorCreator, buildUrl, pipe } from 'capture-core-utils'; -import { ReactQueryAppNamespace } from 'capture-core/utils/reactQueryHelpers'; -import { dataElementTypes } from '../../../../metaData'; -import { CHANGELOG_ENTITY_TYPES } from '../Changelog/Changelog.constants'; -import type { Change, ItemDefinitions, SortDirection } from '../Changelog/Changelog.types'; -import { convertServerToClient } from '../../../../converters'; -import { convert as convertClientToList } from '../../../../converters/clientToList'; -import { RECORD_TYPE, subValueGetterByElementType } from '../utils/getSubValueForChangelogData'; -import { makeQuerySingleResource } from '../../../../utils/api'; -import { attributeOptionsKey } from '../../../DataEntryDhis2Helpers'; - - -type Props = { - rawRecords: Object, - dataItemDefinitions: ItemDefinitions, - entityId: string, - entityData: Object, - entityType: $Values, - programId?: string, - sortDirection: SortDirection, - page: number, - pageSize: number, -}; - -const fetchFormattedValues = async ({ - rawRecords, - dataItemDefinitions, - entityId, - entityData, - entityType, - programId, - absoluteApiPath, - querySingleResource, - fromServerDate, -}) => { - if (!rawRecords) return []; - - const getMetadataItemDefinition = ( - elementKey: string, - change: Change, - ) => { - const fieldId = change.dataElement || change.attribute; - if (!fieldId) { - log.error('Could not find fieldId in change:', change); - return { metadataElement: null, fieldId: null }; - } - const metadataElement = dataItemDefinitions[fieldId]; - return { metadataElement, fieldId }; - }; - - - const fetchedRecords = await Promise.all( - rawRecords.changeLogs.map(async (changelog) => { - const { change: apiChange, createdAt, createdBy, type } = changelog; - const elementKey = Object.keys(apiChange)[0]; - const change = apiChange[elementKey]; - - const { metadataElement, fieldId } = getMetadataItemDefinition( - elementKey, - change, - ); - - if (!metadataElement) { - log.error( - errorCreator('Could not find metadata for element')({ ...changelog }), - ); - return null; - } - - const getSubValue = subValueGetterByElementType[RECORD_TYPE[entityType]]?.[metadataElement.type]; - - const getValue = async (value, latestValue) => { - if (!getSubValue) { - return convertServerToClient(value, metadataElement.type); - } - if (entityType === RECORD_TYPE.trackedEntity) { - return getSubValue({ - trackedEntity: { teiId: entityId, value }, - programId, - attributeId: fieldId, - absoluteApiPath, - querySingleResource, - latestValue, - }); - } - if (entityType === RECORD_TYPE.event) { - return getSubValue({ - dataElement: { id: fieldId, value }, - eventId: entityId, - absoluteApiPath, - querySingleResource, - latestValue, - }); - } - return null; - }; - - const [previousValueClient, currentValueClient] = await Promise.all([ - change.previousValue ? getValue(change.previousValue, false) : null, - getValue(change.currentValue, entityData?.[change.attribute ?? change.dataElement]?.value === change.currentValue), - ]); - - const { firstName, surname, username } = createdBy; - const { options } = metadataElement; - - const previousValue = convertClientToList(previousValueClient, metadataElement.type, options); - const currentValue = convertClientToList(currentValueClient, metadataElement.type, options); - - return { - reactKey: fieldId ? `${createdAt}-${fieldId}` : attributeOptionsKey, - date: pipe(convertServerToClient, convertClientToList)(fromServerDate(createdAt), dataElementTypes.DATETIME), - user: `${firstName} ${surname} (${username})`, - changeType: type, - dataItemLabel: metadataElement.name, - previousValue, - currentValue, - }; - }), - ); - - return fetchedRecords.filter(Boolean); -}; - -export const useListDataValues = ({ - rawRecords, - dataItemDefinitions, - entityId, - entityData, - entityType, - programId, - sortDirection, - page, - pageSize, -}: Props) => { - const dataEngine = useDataEngine(); - const { baseUrl, apiVersion } = useConfig(); - const { fromServerDate } = useTimeZoneConversion(); - const absoluteApiPath = buildUrl(baseUrl, `api/${apiVersion}`); - - const querySingleResource = useMemo( - () => makeQuerySingleResource(dataEngine.query.bind(dataEngine)), - [dataEngine], - ); - - const queryKey = [ReactQueryAppNamespace, 'changelog', entityType, entityId, 'formattedData', { sortDirection, page, pageSize, programId }]; - - const { data: processedRecords, isError, isLoading } = useQuery( - queryKey, - () => fetchFormattedValues({ - rawRecords, - dataItemDefinitions, - entityId, - entityData, - entityType, - programId, - absoluteApiPath, - querySingleResource, - fromServerDate, - }), - { - enabled: !!rawRecords && !!dataItemDefinitions && !!entityId && !!entityType, - staleTime: Infinity, - cacheTime: Infinity, - }, - ); - - return { - processedRecords, - isError, - isLoading, - }; -}; diff --git a/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js b/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js deleted file mode 100644 index 85b13724e2..0000000000 --- a/src/core_modules/capture-core/components/WidgetsChangelog/common/utils/getSubValueForChangelogData.js +++ /dev/null @@ -1,148 +0,0 @@ -// @flow -import log from 'loglevel'; -import i18n from '@dhis2/d2-i18n'; -import { errorCreator } from 'capture-core-utils'; -import { dataElementTypes } from '../../../../metaData'; -import type { QuerySingleResource } from '../../../../utils/api'; - -type SubValueTEAProps = { - trackedEntity: Object, - attributeId: string, - programId: string, - absoluteApiPath: string, - querySingleResource: QuerySingleResource, - latestValue?: boolean, -}; - -type SubValuesDataElementProps = { - dataElement: Object, - querySingleResource: QuerySingleResource, - eventId: string, - absoluteApiPath: string, - latestValue?: boolean, -}; - -const buildTEAUrlByElementType: {| -[string]: Function, -|} = { - [dataElementTypes.FILE_RESOURCE]: async ({ - trackedEntity, - attributeId, - programId, - absoluteApiPath, - querySingleResource, - latestValue, - }: SubValueTEAProps) => { - const { teiId, value } = trackedEntity; - if (!value) return null; - try { - if (!latestValue) { - return i18n.t('File'); - } - - const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); - - return { - id, - name, - url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/file?program=${programId}`, - }; - } catch (error) { - log.error( - errorCreator('Error fetching file resource')({ error }), - ); - return null; - } - }, - [dataElementTypes.IMAGE]: async ({ - trackedEntity, - attributeId, - programId, - absoluteApiPath, - latestValue, - querySingleResource, - }: SubValueTEAProps) => { - const { teiId, value } = trackedEntity; - if (!value) return null; - try { - if (!latestValue) { - return i18n.t('Image'); - } - const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); - - return { - id, - name, - url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?program=${programId}`, - previewUrl: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?program=${programId}&dimension=small`, - }; - } catch (error) { - log.error( - errorCreator('Error fetching image resource')({ error }), - ); - return null; - } - }, -}; - -const buildDataElementUrlByElementType: {| -[string]: Function, -|} = { - [dataElementTypes.FILE_RESOURCE]: async ({ dataElement, querySingleResource, eventId, absoluteApiPath, latestValue }: SubValuesDataElementProps) => { - const { id: dataElementId, value } = dataElement; - if (!value) return null; - - try { - if (!latestValue) { - return i18n.t('File'); - } - - const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); - - return { - id, - name, - url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/file`, - }; - } catch (error) { - log.error( - errorCreator('Error fetching file resource')({ error }), - ); - return null; - } - }, - [dataElementTypes.IMAGE]: async ({ dataElement, querySingleResource, eventId, absoluteApiPath, latestValue }: SubValuesDataElementProps) => { - const { id: dataElementId, value } = dataElement; - if (!value) return null; - - try { - if (!latestValue) { - return i18n.t('Image'); - } - - const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); - - return { - id, - name, - url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/image`, - previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${dataElementId}/image?dimension=small`, - }; - } catch (error) { - log.error( - errorCreator('Error fetching image resource')({ error }), - ); - return null; - } - }, -}; - -export const RECORD_TYPE = Object.freeze({ - event: 'event', - trackedEntity: 'trackedEntity', -}); - -export const subValueGetterByElementType = Object.freeze({ - [RECORD_TYPE.trackedEntity]: buildTEAUrlByElementType, - [RECORD_TYPE.event]: buildDataElementUrlByElementType, -}); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js index bcb525bcc6..3bacc8df11 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/EventWorkingListsReduxProvider.container.js @@ -38,7 +38,7 @@ export const EventWorkingListsReduxProvider = ({ storeId, program, programStage, const downloadRequest = useSelector(({ workingLists }) => workingLists[storeId] && workingLists[storeId].currentRequest); // TODO: Remove when DownloadDialog is rewritten - const onClickListRow = useCallback(({ id }) => { + const onSelectListRow = useCallback(({ id }) => { window.scrollTo(0, 0); dispatch(openViewEventPage(id)); }, [dispatch]); @@ -98,7 +98,7 @@ export const EventWorkingListsReduxProvider = ({ storeId, program, programStage, currentTemplate={currentTemplate} templates={templates} lastIdDeleted={lastEventIdDeleted} - onClickListRow={onClickListRow} + onSelectListRow={onSelectListRow} onLoadView={injectDownloadRequestToLoadView} onUpdateList={injectDownloadRequestToUpdateList} onDeleteEvent={onDeleteEvent} diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js index 33a53d67a6..3be72bf3d8 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ReduxProvider/eventWorkingListsReduxProvider.types.js @@ -79,7 +79,7 @@ export type EventWorkingListsReduxOutputProps = {| onDeleteTemplate: DeleteTemplate, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js index 0b1954c4eb..d79f2af5d6 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/UpdateTrigger/EventWorkingListsUpdateTrigger.component.js @@ -6,7 +6,6 @@ import type { Props } from './eventWorkingListsUpdateTrigger.types'; export const EventWorkingListsUpdateTrigger = ({ lastTransaction, - customUpdateTrigger, lastIdDeleted, listDataRefreshTimestamp, lastTransactionOnListDataRefresh, @@ -17,6 +16,12 @@ export const EventWorkingListsUpdateTrigger = ({ const forceUpdateOnMount = moment().diff(moment(listDataRefreshTimestamp || 0), 'minutes') > 5 || lastTransaction !== lastTransactionOnListDataRefresh; + // Creating a string that will force an update of the list when it changes. + const customUpdateTrigger = [ + lastTransaction, + lastIdDeleted, + ].join('##'); + const injectCustomUpdateContextToLoadList = useCallback((selectedTemplate: Object, context: Object, meta: Object) => onLoadView(selectedTemplate, { ...context, lastTransaction }, meta), [onLoadView, lastTransaction]); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js index 79b1c6aa32..8ae6c0609c 100644 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/EventWorkingLists/ViewMenuSetup/EventWorkingListsViewMenuSetup.component.js @@ -1,33 +1,13 @@ // @flow -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useState, useMemo, useCallback } from 'react'; import i18n from '@dhis2/d2-i18n'; -import { v4 as uuid } from 'uuid'; import { EventWorkingListsRowMenuSetup } from '../RowMenuSetup'; import { DownloadDialog } from '../../WorkingListsCommon'; import type { CustomMenuContents } from '../../WorkingListsBase'; import type { Props } from './EventWorkingListsViewMenuSetup.types'; -import { useSelectedRowsController } from '../../WorkingListsBase/BulkActionBar'; -import { EventBulkActions } from '../../EventWorkingListsCommon/EventBulkActions'; -export const EventWorkingListsViewMenuSetup = ({ - downloadRequest, - program, - dataSource, - ...passOnProps -}: Props) => { +export const EventWorkingListsViewMenuSetup = ({ downloadRequest, program, ...passOnProps }: Props) => { const [downloadDialogOpen, setDownloadDialogOpenStatus] = useState(false); - const [customUpdateTrigger, setCustomUpdateTrigger] = useState(); - - const { - selectedRows, - clearSelection, - selectAllRows, - selectionInProgress, - toggleRowSelected, - allRowsAreSelected, - removeRowsFromSelection, - } = useSelectedRowsController({ recordIds: dataSource?.map(data => data.id) }); - const customListViewMenuContents: CustomMenuContents = useMemo(() => [{ key: 'downloadData', clickHandler: () => setDownloadDialogOpenStatus(true), @@ -38,38 +18,12 @@ export const EventWorkingListsViewMenuSetup = ({ setDownloadDialogOpenStatus(false); }, [setDownloadDialogOpenStatus]); - - const onUpdateList = useCallback((disableClearSelection?: boolean) => { - const id = uuid(); - setCustomUpdateTrigger(id); - !disableClearSelection && clearSelection(); - }, [clearSelection]); - - const eventBulkActions = ( - - ); - return ( void, - onSelectAll: (rows: Array) => void, - selectionInProgress: ?boolean, - selectedRows: { [key: string]: boolean }, - bulkActionBarComponent: React$Element, |}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js deleted file mode 100644 index 6c3fce11fa..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/CompleteAction.js +++ /dev/null @@ -1,169 +0,0 @@ -// @flow -import React, { type ComponentType, useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core'; -import { Button, ButtonStrip, colors, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; -import { useBulkCompleteEvents } from './hooks/useBulkCompleteEvents'; -import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; -import { Widget } from '../../../../../Widget'; - -type Props = {| - selectedRows: { [key: string]: boolean }, - disabled?: boolean, - onUpdateList: (disableClearSelections?: boolean) => void, - removeRowsFromSelection: (rows: Array) => void, -|} - -const styles = { - container: { - fontSize: '14px', - lineHeight: '19px', - color: colors.grey900, - display: 'flex', - flexDirection: 'column', - gap: '8px', - }, - errorContainer: { - padding: '0px 20px', - }, -}; - -const CompleteActionPlain = ({ - selectedRows, - disabled, - removeRowsFromSelection, - onUpdateList, - classes, -}) => { - const [isCompleteDialogOpen, setIsCompleteDialogOpen] = useState(false); - const [openAccordion, setOpenAccordion] = useState(false); - const { - eventCounts, - isLoading, - isCompletingEvents, - onCompleteEvents, - validationError, - } = useBulkCompleteEvents({ - selectedRows, - isCompleteDialogOpen, - setIsCompleteDialogOpen, - removeRowsFromSelection, - onUpdateList, - }); - - return ( - <> - - - - - {isCompleteDialogOpen && eventCounts && !validationError && ( - setIsCompleteDialogOpen(false)} - dataTest={'bulk-complete-events-dialog'} - > - - {i18n.t('Complete events')} - - - - - {eventCounts.active > 0 ? - i18n.t('Are you sure you want to complete all active events in selection?') - : - i18n.t('There are no active events to complete in the current selection.') - } - - - - - - - - - - - - - )} - - {isCompleteDialogOpen && validationError && ( - setIsCompleteDialogOpen(false)} - dataTest={'bulk-complete-events-dialog'} - > - - {i18n.t('Error completing events')} - - - - - {i18n.t('There was an error completing the events.')} - - setOpenAccordion(true)} - onClose={() => setOpenAccordion(false)} - borderless - header={i18n.t('Details (Advanced)')} - > - -
    - {validationError?.validationReport?.errorReports ? - validationError.validationReport.errorReports.map(errorReport => ( -
  • - {errorReport?.message} -
  • - )) : ( -
  • - {i18n.t('An unknown error occurred.')} -
  • - ) - } -
-
-
-
-
- - - - - - - -
- )} - - ); -}; - -export const CompleteAction: ComponentType<$Diff> = withStyles(styles)(CompleteActionPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js deleted file mode 100644 index 5c91e35cd7..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/CompleteAction/hooks/useBulkCompleteEvents.js +++ /dev/null @@ -1,141 +0,0 @@ -// @flow -import { useCallback, useEffect, useMemo } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { useMutation } from 'react-query'; -import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; -import { useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; -import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; -import { FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; - -type Props = {| - selectedRows: { [key: string]: boolean }, - isCompleteDialogOpen: boolean, - setIsCompleteDialogOpen: (isCompleteDialogOpen: boolean) => void, - onUpdateList: (disableClearSelection?: boolean) => void, - removeRowsFromSelection: (rows: Array) => void, -|} - -export const useBulkCompleteEvents = ({ - selectedRows, - isCompleteDialogOpen, - setIsCompleteDialogOpen, - removeRowsFromSelection, - onUpdateList, -}: Props) => { - const { serverVersion: { minor } } = useConfig(); - const dataEngine = useDataEngine(); - const { show: showAlert } = useAlert( - ({ message }) => message, - { critical: true }, - ); - - const { data: events, isLoading } = useApiDataQuery( - ['WorkingLists', 'BulkActionBar', 'CompleteAction', 'Events', selectedRows], - { - resource: 'tracker/events', - params: () => { - const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); - const filterQueryParam: string = supportForFeature ? 'events' : 'event'; - - return ({ - fields: '*,!completedAt,!completedBy,!dataValues,!relationships', - [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), - }); - }, - }, - { - enabled: Object.keys(selectedRows).length > 0 && isCompleteDialogOpen, - staleTime: 0, - cacheTime: 0, - select: (data: any) => { - const apiEvents = handleAPIResponse(REQUESTED_ENTITIES.events, data); - - return apiEvents.reduce((acc, event) => { - if (event.status === 'ACTIVE') { - acc.activeEvents.push(event); - } else { - acc.completedEvents.push(event); - } - - return acc; - }, { activeEvents: [], completedEvents: [] }); - }, - }, - ); - - const { - mutate: completeEvents, - isLoading: isCompletingEvents, - data: validationError, - error, - reset: resetCompleteEvents, - } = useMutation( - ({ payload }: any) => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=UPDATE&atomicMode=OBJECT', - type: 'create', - data: { - events: payload, - }, - }), - { - onError: () => { - showAlert({ message: i18n.t('An error occurred while completing events') }); - }, - onSuccess: (response, { payload }: any) => { - const errorReports = response?.validationReport?.errorReports; - if (errorReports && errorReports.length) { - const eventIds = payload.map(event => event.event); - const validEventIds = eventIds - .filter(eventId => !errorReports - .find(errorReport => errorReport.uid === eventId), - ); - - removeRowsFromSelection(validEventIds); - onUpdateList(true); - } else { - onUpdateList(); - setIsCompleteDialogOpen(false); - } - }, - }, - ); - - const onCompleteEvents = useCallback(() => { - if (!events) { - return; - } - - const serverPayload = events.activeEvents.map(event => ({ - ...event, - status: 'COMPLETED', - })); - - completeEvents({ payload: serverPayload }); - }, [completeEvents, events]); - - const eventCounts = useMemo(() => { - if (!events) { - return null; - } - - return { - active: events.activeEvents.length, - completed: events.completedEvents.length, - }; - }, [events]); - - useEffect(() => { - if (!isCompleteDialogOpen) { - resetCompleteEvents(); - } - }, [isCompleteDialogOpen, resetCompleteEvents]); - - return { - eventCounts, - error, - validationError, - onCompleteEvents, - isCompletingEvents, - isLoading, - }; -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js deleted file mode 100644 index e4d1df4b63..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/DeleteAction/DeleteAction.js +++ /dev/null @@ -1,102 +0,0 @@ -// @flow - -import React, { useState } from 'react'; -import log from 'loglevel'; -import i18n from '@dhis2/d2-i18n'; -import { Button, ButtonStrip, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; -import { useMutation } from 'react-query'; -import { useAlert, useDataEngine } from '@dhis2/app-runtime'; -import { errorCreator } from '../../../../../../../capture-core-utils'; -import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; - -type Props = { - selectedRows: { [id: string]: boolean }, - disabled?: boolean, - onUpdateList: () => void, -} - -export const DeleteAction = ({ - selectedRows, - disabled, - onUpdateList, -}: Props) => { - const [isModalOpen, setIsModalOpen] = useState(false); - const dataEngine = useDataEngine(); - const { show: showAlert } = useAlert( - ({ message }) => message, - { critical: true }, - ); - - const { mutate: deleteEvents, isLoading } = useMutation( - () => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=DELETE', - type: 'create', - data: { - events: Object - .keys(selectedRows) - .map(id => ({ event: id })), - }, - }), - { - onError: (error) => { - log.error(errorCreator('An error occurred while deleting the events')({ error })); - showAlert({ message: i18n.t('An error occurred while deleting the events') }); - }, - onSuccess: () => { - onUpdateList(); - setIsModalOpen(false); - }, - }, - ); - - return ( - <> - - - - - {isModalOpen && ( - setIsModalOpen(false)} - dataTest={'bulk-delete-events-dialog'} - > - - {i18n.t('Delete events')} - - - - {i18n.t('This cannot be undone. Are you sure you want to delete the selected events?')} - - - - - - - - - - )} - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js deleted file mode 100644 index d90e5aa2e7..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/Actions/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// @flow - -export { DeleteAction } from './DeleteAction/DeleteAction'; -export { CompleteAction } from './CompleteAction/CompleteAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js deleted file mode 100644 index 5311ca7780..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/EventBulkActions.js +++ /dev/null @@ -1,47 +0,0 @@ -// @flow -import React from 'react'; -import { BulkActionBar } from '../../WorkingListsBase/BulkActionBar'; -import { CompleteAction, DeleteAction } from './Actions'; -import type { ProgramStage } from '../../../../metaData'; - -type Props = {| - selectedRows: { [key: string]: boolean }, - onClearSelection: () => void, - stage: ProgramStage, - onUpdateList: (disableClearSelection?: boolean) => void, - removeRowsFromSelection: (rows: Array) => void, -|} - -export const EventBulkActions = ({ - selectedRows, - stage, - onClearSelection, - removeRowsFromSelection, - onUpdateList, -}: Props) => { - const selectedRowsCount = Object.keys(selectedRows).length; - - if (!selectedRowsCount) { - return null; - } - - return ( - - - - - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js b/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js deleted file mode 100644 index 492ab82c49..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/EventWorkingListsCommon/EventBulkActions/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { EventBulkActions } from './EventBulkActions'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js index cb10ad31d8..071103a706 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/TeiWorkingListsReduxProvider.container.js @@ -62,7 +62,7 @@ export const TeiWorkingListsReduxProvider = ({ } }, [selectedTemplateId, viewPreloaded, currentTemplateId, onSelectTemplate]); - const onClickListRow = useCallback(({ id }) => { + const onSelectListRow = useCallback(({ id }) => { const record = records[id]; const orgUnitIdParameter = orgUnitId || record.orgUnit?.id || record.programOwner; @@ -109,7 +109,7 @@ export const TeiWorkingListsReduxProvider = ({ currentTemplateId={currentTemplateId} viewPreloaded={viewPreloaded} templateSharingType={templateSharingType} - onClickListRow={onClickListRow} + onSelectListRow={onSelectListRow} onLoadTemplates={onLoadTemplates} program={program} programStageId={programStage} diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js index 0b9a66d3b4..f4637bf5cf 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ReduxProvider/teiWorkingListsReduxProvider.types.js @@ -66,7 +66,7 @@ export type TeiWorkingListsReduxOutputProps = {| onClearFilters: ClearFilters, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js index 24f6b4d333..b59d0233cd 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/TeiWorkingListsSetup.component.js @@ -1,14 +1,14 @@ // @flow -import React, { useCallback, useEffect, useMemo, useRef } from 'react'; +import React, { useCallback, useMemo, useEffect, useRef } from 'react'; import type { Props } from './teiWorkingListsSetup.types'; import { WorkingListsBase } from '../../WorkingListsBase'; import { useDefaultColumnConfig, + useStaticTemplates, useFiltersOnly, + useProgramStageFilters, useInjectDataFetchingMetaToLoadList, useInjectDataFetchingMetaToUpdateList, - useProgramStageFilters, - useStaticTemplates, } from './hooks'; import { useColumns, useDataSource, useViewHasTemplateChanges } from '../../WorkingListsCommon'; import type { TeiWorkingListsColumnConfigs } from '../types'; @@ -55,8 +55,6 @@ export const TeiWorkingListsSetup = ({ onUpdateTemplate, onDeleteTemplate, forceUpdateOnMount, - customUpdateTrigger, - bulkActionBarComponent, ...passOnProps }: Props) => { const prevProgramStageId = useRef(programStageId); @@ -191,7 +189,6 @@ export const TeiWorkingListsSetup = ({ {...passOnProps} forceUpdateOnMount={forceUpdateOnMount} currentTemplate={useCurrentTemplate(templates, currentTemplateId)} - customUpdateTrigger={customUpdateTrigger} templates={templates} columns={columns} onAddTemplate={injectArgumentsForAddTemplate} @@ -220,7 +217,6 @@ export const TeiWorkingListsSetup = ({ filters={filters} sortById={sortById} sortByDirection={sortByDirection} - bulkActionBarComponent={bulkActionBarComponent} /> ); }; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js index 426ab63241..963367d643 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/Setup/teiWorkingListsSetup.types.js @@ -12,7 +12,6 @@ import type { } from '../../WorkingListsCommon'; import type { FiltersData, WorkingListTemplates, SetTemplateSharingSettings } from '../../WorkingListsBase'; import type { LoadTeiView, TeiRecords } from '../types'; -import type { TrackerWorkingListsViewMenuSetupOutputProps } from '../ViewMenuSetup/TrackerWorkingListsViewMenuSetup.types'; type ExtractedProps = $ReadOnly<{| customColumnOrder?: CustomColumnOrder, @@ -36,7 +35,7 @@ type ExtractedProps = $ReadOnly<{| |}>; export type Props = $ReadOnly<{| - ...TrackerWorkingListsViewMenuSetupOutputProps, + ...TeiWorkingListsReduxOutputProps, ...ExtractedProps, |}>; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js deleted file mode 100644 index 73543ad15a..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/CompleteAction.js +++ /dev/null @@ -1,239 +0,0 @@ -// @flow - -import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core'; -import React, { type ComponentType, useState } from 'react'; -import { - Button, - ButtonStrip, - Checkbox, - CircularLoader, - colors, - Modal, - ModalActions, - ModalContent, - ModalTitle, -} from '@dhis2/ui'; -import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; -import { useCompleteBulkEnrollments } from './hooks/useCompleteBulkEnrollments'; -import { Widget } from '../../../../../Widget'; -import type { ProgramStage } from '../../../../../../metaData'; - -type Props = { - selectedRows: { [id: string]: any }, - programId: string, - stages: Map, - programDataWriteAccess: boolean, - onUpdateList: (disableClearSelections?: boolean) => void, - removeRowsFromSelection: (rows: Array) => void, -}; - -const styles = { - container: { - fontSize: '14px', - lineHeight: '19px', - color: colors.grey900, - display: 'flex', - flexDirection: 'column', - gap: '8px', - }, - spinner: { - display: 'flex', - justifyContent: 'center', - margin: '20px 0', - }, - errorContainer: { - padding: '0px 20px', - }, -}; - -const CompleteActionPlain = ({ - selectedRows, - programId, - stages, - programDataWriteAccess, - onUpdateList, - removeRowsFromSelection, - classes, -}) => { - const [modalIsOpen, setModalIsOpen] = useState(false); - const [completeEvents, setCompleteEvents] = useState(true); - const [openAccordion, setOpenAccordion] = useState(false); - const { - completeEnrollments, - enrollmentCounts, - isLoading, - validationError, - isCompleting, - hasPartiallyUploadedEnrollments, - isError: errorFetchingTrackedEntities, - } = useCompleteBulkEnrollments({ - selectedRows, - programId, - modalIsOpen, - stages, - onUpdateList, - removeRowsFromSelection, - }); - - const ModalTextContent = () => { - // If the data is still loading, show a spinner - if (!enrollmentCounts || isLoading) { - return ( -
- -
- ); - } - - // If there was an error importing the data, show an error message - if (validationError) { - const errors = (validationError: any)?.details?.validationReport?.errorReports; - return ( -
- - {hasPartiallyUploadedEnrollments ? - i18n.t('Some enrollments were completed successfully, but there was an error while completing the rest. Please see the details below.') : - i18n.t('There was an error while completing the enrollments. Please see the details below.') - } - - - setOpenAccordion(true)} - onClose={() => setOpenAccordion(false)} - borderless - header={i18n.t('Details (Advanced)')} - > - -
    - {errors ? errors.map(errorReport => ( -
  • - {errorReport?.message} -
  • - )) : ( -
  • - {i18n.t('An unknown error occurred.')} -
  • - )} -
-
-
-
- ); - } - - if (errorFetchingTrackedEntities) { - return ( -
- {i18n.t('An unexpected error occurred while fetching the enrollments. Please try again.')} -
- ); - } - - // If there are no active enrollments, show a message and disable the complete button - if (enrollmentCounts.active === 0) { - return ( -
- {i18n.t('There are currently no active enrollments in the selection. All enrollments are already completed or cancelled.')} -
- ); - } - - return ( -
- {i18n.t('This action will complete {{count}} active enrollment in your selection.', - { - count: enrollmentCounts.active, - defaultValue: 'This action will complete {{count}} active enrollment in your selection.', - defaultValue_plural: 'This action will complete {{count}} active enrollments in your selection.', - }) - } - - {' '} - - {enrollmentCounts.completed > 0 && - i18n.t('{{count}} enrollment already marked as completed will not be changed.', { - count: enrollmentCounts.completed, - defaultValue: '{{count}} enrollment already marked as completed will not be changed.', - defaultValue_plural: '{{count}} enrollments already marked as completed will not be changed.', - }) - } - - setCompleteEvents(prevState => !prevState)} - /> - -
- ); - }; - - return ( - <> - - - - - {modalIsOpen && ( - setModalIsOpen(false)} - loading={isLoading} - dataTest={'bulk-complete-enrollments-dialog'} - > - - {validationError ? i18n.t('Error completing enrollments') - : i18n.t('Complete enrollments')} - - - - - - - - - - {!validationError && ( - - - - )} - - - - )} - - ); -}; - -export const CompleteAction: ComponentType<$Diff> = withStyles(styles)(CompleteActionPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js deleted file mode 100644 index a1bcbf350d..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/hooks/useCompleteBulkEnrollments.js +++ /dev/null @@ -1,267 +0,0 @@ -// @flow - -import { useEffect, useMemo } from 'react'; -import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; -import { useMutation, useQueryClient } from 'react-query'; -import i18n from '@dhis2/d2-i18n'; -import log from 'loglevel'; -import { ReactQueryAppNamespace, useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; -import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; -import { errorCreator, FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; -import type { ProgramStage } from '../../../../../../../metaData'; - -type Props = { - selectedRows: { [id: string]: any }, - programId: string, - stages: Map, - modalIsOpen: boolean, - onUpdateList: (disableClearSelections?: boolean) => void, - removeRowsFromSelection: (rows: Array) => void, -} - -const validateEnrollments = async ({ dataEngine, enrollments }) => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=UPDATE&importMode=VALIDATE', - type: 'create', - data: () => ({ enrollments }), -}); - -const importValidEnrollments = async ({ dataEngine, enrollments }) => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=UPDATE&importMode=COMMIT', - type: 'create', - data: () => ({ enrollments }), -}); - -const formatServerPayload = (trackedEntities, completeEvents, stages) => { - const enrollments = trackedEntities?.activeEnrollments ?? []; - let updatedEnrollments; - - if (completeEvents) { - updatedEnrollments = enrollments.map(enrollment => ({ - ...enrollment, - status: 'COMPLETED', - events: enrollment.events - .filter((event) => { - const access = stages.get(event.programStage)?.access?.data?.write; - const isEventActive = event.status === 'ACTIVE'; - return access && isEventActive; - }) - .map(event => ({ ...event, status: 'COMPLETED' })), - })); - } else { - updatedEnrollments = enrollments.map(enrollment => ({ - ...enrollment, - status: 'COMPLETED', - events: [], - })); - } - - return updatedEnrollments; -}; - -const filterValidEnrollments = (enrollments, errors) => { - const invalidEnrollments = new Set(); - - errors.forEach((apiErrorMessage) => { - if (apiErrorMessage.trackerType === 'ENROLLMENT') { - invalidEnrollments.add(apiErrorMessage.uid); - } else if (apiErrorMessage.trackerType === 'EVENT') { - const invalidEnrollment = enrollments.find(enrollment => - enrollment.events.some(event => event.event === apiErrorMessage.uid), - ); - - if (invalidEnrollment) { - invalidEnrollments.add(invalidEnrollment.enrollment); - } - } - }); - - return enrollments.filter( - enrollment => !invalidEnrollments.has(enrollment.enrollment), - ); -}; - - -export const useCompleteBulkEnrollments = ({ - selectedRows, - programId, - stages, - modalIsOpen, - removeRowsFromSelection, - onUpdateList, -}: Props) => { - const { serverVersion: { minor } } = useConfig(); - const dataEngine = useDataEngine(); - const queryClient = useQueryClient(); - const { show: showAlert } = useAlert( - ({ message }) => message, - { critical: true }, - ); - - const removeQueries = () => { - queryClient.removeQueries( - [ - ReactQueryAppNamespace, - 'WorkingLists', - 'BulkActionBar', - 'CompleteAction', - 'trackedEntities', - ], - ); - }; - - const { - data: trackedEntities, - isError: isTrackedEntitiesError, - isLoading: isFetchingTrackedEntities, - } = useApiDataQuery( - ['WorkingLists', 'BulkActionBar', 'CompleteAction', 'trackedEntities', selectedRows], - { - resource: 'tracker/trackedEntities', - params: () => { - const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); - const filterQueryParam: string = supportForFeature ? 'trackedEntities' : 'trackedEntity'; - - return ({ - program: programId, - fields: 'trackedEntity,enrollments[*,!attributes,!completedBy,!completedAt,!relationships,events[*,!dataValues,!completedAt,!completedBy,!relationships]]', - [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), - }); - }, - }, - { - enabled: modalIsOpen && Object.keys(selectedRows).length > 0, - select: (data: any) => { - const apiTrackedEntities = handleAPIResponse(REQUESTED_ENTITIES.trackedEntities, data); - if (!apiTrackedEntities) return null; - - const { activeEnrollments, completedEnrollments } = apiTrackedEntities - .flatMap(trackedEntity => trackedEntity.enrollments) - .reduce((acc, enrollment) => { - if (enrollment.status === 'ACTIVE') { - acc.activeEnrollments.push(enrollment); - } else { - acc.completedEnrollments.push(enrollment); - } - - return acc; - }, { activeEnrollments: [], completedEnrollments: [] }); - - return { - activeEnrollments, - completedEnrollments, - }; - }, - }, - ); - - const { - mutate: importEnrollments, - isLoading: isImportingEnrollments, - } = useMutation( - ({ enrollments }: any) => importValidEnrollments({ dataEngine, enrollments }), - { - onSuccess: () => { - onUpdateList(); - removeQueries(); - }, - onError: (serverResponse, variables) => { - removeQueries(); - showAlert({ message: i18n.t('An error occurred when completing the enrollments') }); - log.error( - errorCreator('An error occurred when completing enrollments')({ - serverResponse, - variables, - }), - ); - }, - }, - ); - - const { - mutate: importPartialEnrollments, - isLoading: isImportingPartialEnrollments, - isSuccess: hasPartiallyUploadedEnrollments, - } = useMutation( - ({ enrollments }: any) => importValidEnrollments({ dataEngine, enrollments }), - { - onSuccess: (serverResponse, { enrollments }) => { - const enrollmentIds = enrollments.map(enrollment => enrollment.trackedEntity); - removeRowsFromSelection(enrollmentIds); - removeQueries(); - onUpdateList(true); - }, - onError: (serverResponse, variables) => { - showAlert({ message: i18n.t('An error occurred when completing the enrollments') }); - log.error( - errorCreator('An error occurred when completing enrollments')({ - serverResponse, - variables, - }), - ); - }, - }, - ); - - const { - mutate: onValidateEnrollments, - isLoading: isCompletingEnrollments, - error: validationError, - reset: resetCompleteEnrollments, - } = useMutation( - ({ enrollments }: any) => validateEnrollments({ - dataEngine, - enrollments, - }), - { - onSuccess: (serverResponse: any, { enrollments }: any) => { - importEnrollments({ enrollments }); - }, - onError: (serverResponse: any, { enrollments }: any) => { - const errors = serverResponse?.details?.validationReport?.errorReports; - if (!errors) { - log.error( - errorCreator('An unknown error occurred when completing enrollments', - )({ - serverResponse, - enrollments, - })); - showAlert({ message: i18n.t('An unknown error occurred when completing enrollments') }); - return; - } - const validEnrollments = filterValidEnrollments(enrollments, errors); - - if (validEnrollments.length === 0) { - return; - } - - importPartialEnrollments({ enrollments: validEnrollments }); - }, - }, - ); - - const enrollmentCounts = useMemo(() => ({ - active: trackedEntities?.activeEnrollments?.length ?? 0, - completed: trackedEntities?.completedEnrollments?.length ?? 0, - }), [trackedEntities]); - - useEffect(() => { - if (!modalIsOpen) { - resetCompleteEnrollments(); - } - }, [modalIsOpen, resetCompleteEnrollments]); - - const onStartCompleteEnrollments = ({ completeEvents }: { completeEvents: boolean }) => { - const enrollments = formatServerPayload(trackedEntities, completeEvents, stages); - onValidateEnrollments({ completeEvents, enrollments }); - }; - - return { - completeEnrollments: onStartCompleteEnrollments, - enrollmentCounts, - isLoading: isFetchingTrackedEntities, - isError: isTrackedEntitiesError, - validationError, - isCompleting: isImportingEnrollments || isImportingPartialEnrollments || isCompletingEnrollments, - hasPartiallyUploadedEnrollments, - }; -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js deleted file mode 100644 index 0c51a6978f..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/CompleteAction/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { CompleteAction } from './CompleteAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js deleted file mode 100644 index 7e0a4bcb68..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/DeleteEnrollmentsAction.js +++ /dev/null @@ -1,56 +0,0 @@ -// @flow -import React, { useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { Button } from '@dhis2/ui'; -import { useAuthority } from '../../../../../../utils/userInfo/useAuthority'; -import { EnrollmentDeleteModal } from './EnrollmentDeleteModal'; -import { ConditionalTooltip } from '../../../../../Tooltips/ConditionalTooltip'; - -type Props = { - selectedRows: { [id: string]: boolean }, - programDataWriteAccess: boolean, - programId: string, - onUpdateList: () => void, -} - -const CASCADE_DELETE_TEI_AUTHORITY = 'F_ENROLLMENT_CASCADE_DELETE'; - -export const DeleteEnrollmentsAction = ({ - selectedRows, - programDataWriteAccess, - programId, - onUpdateList, -}: Props) => { - const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); - const { hasAuthority } = useAuthority({ authority: CASCADE_DELETE_TEI_AUTHORITY }); - - if (!hasAuthority) { - return null; - } - - return ( - <> - - - - - {isDeleteDialogOpen && ( - - )} - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js deleted file mode 100644 index 4c1d5f255e..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/CustomCheckbox.js +++ /dev/null @@ -1,80 +0,0 @@ -// @flow -import type { ComponentType } from 'react'; -import React from 'react'; -import cx from 'classnames'; -import { withStyles } from '@material-ui/core'; -import { Checkbox } from '@dhis2/ui'; - -type Props = { - label: string, - checked: boolean, - disabled?: boolean, - id: string, - onChange: (status: string) => void, - dataTest?: string, -} - -const styles = { - checkboxButton: { - // Reset default browser styles - appearance: 'none', - background: 'none', - font: 'inherit', - cursor: 'pointer', - outline: 'inherit', - - // Custom styles - display: 'flex', - alignItems: 'center', - width: '100%', - padding: '16px', - border: '2px solid #E2E8F0', - borderRadius: '6px', - marginBottom: '8px', - transition: 'all 0.2s', - textAlign: 'left', - backgroundColor: 'white', - '&:hover': { - backgroundColor: '#F7FAFC', - }, - '&.checked': { - borderColor: '#38A169', - }, - '&.disabled': { - borderColor: '#E2E8F0', - backgroundColor: '#F7FAFC', - cursor: 'not-allowed', - }, - }, -}; - -const CustomCheckboxPlain = ({ - checked, - id, - onChange, - label, - disabled, - dataTest, - classes, -}) => ( - -); - -export const CustomCheckbox: ComponentType<$Diff> = withStyles(styles)(CustomCheckboxPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js deleted file mode 100644 index e981c34310..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/CustomCheckbox/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { CustomCheckbox } from './CustomCheckbox'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js deleted file mode 100644 index 4d00490f6e..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/EnrollmentDeleteModal.js +++ /dev/null @@ -1,188 +0,0 @@ -// @flow -import React from 'react'; -import { withStyles } from '@material-ui/core'; -import { Button, ButtonStrip, CircularLoader, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; -import i18n from '@dhis2/d2-i18n'; -import { useDeleteEnrollments } from '../hooks/useDeleteEnrollments'; -import { CustomCheckbox } from './CustomCheckbox'; - -type Props = { - selectedRows: { [id: string]: boolean }, - programId: string, - onUpdateList: () => void, - setIsDeleteDialogOpen: (open: boolean) => void, - classes: Object, -} - -const styles = { - modalContent: { - display: 'flex', - flexDirection: 'column', - gap: '10px', - fontSize: '16px', - }, - loadingContainer: { - display: 'flex', - justifyContent: 'center', - }, -}; - -const EnrollmentDeleteModalPlain = ({ - selectedRows, - programId, - onUpdateList, - setIsDeleteDialogOpen, - classes, -}: Props) => { - const { - deleteEnrollments, - isDeletingEnrollments, - enrollmentCounts, - isLoadingEnrollments, - statusToDelete, - updateStatusToDelete, - numberOfEnrollmentsToDelete, - isEnrollmentsError, - } = useDeleteEnrollments({ - selectedRows, - programId, - onUpdateList, - setIsDeleteDialogOpen, - }); - - if (isEnrollmentsError) { - return ( - setIsDeleteDialogOpen(false)} - small - > - - {i18n.t('Delete selected enrollments')} - - - -
- {i18n.t('An error occurred while loading the selected enrollments. Please try again.')} -
-
- - - - - - -
- ); - } - - if (isLoadingEnrollments || !enrollmentCounts) { - return ( - setIsDeleteDialogOpen(false)} - > - - {i18n.t('Delete selected enrollments')} - - - - - - - - - - - - - - - ); - } - - return ( - setIsDeleteDialogOpen(false)} - dataTest={'bulk-delete-enrollments-dialog'} - > - - {i18n.t('Delete selected enrollments')} - - - -
-
- {i18n.t('This action will permanently delete the selected enrollments, including all associated data and events.')} -
- -
- {i18n.t('Please select which enrollment statuses you want to delete:')} -
- -
- - - - - -
-
-
- - - - - - - - -
- ); -}; - -export const EnrollmentDeleteModal = withStyles(styles)(EnrollmentDeleteModalPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js deleted file mode 100644 index 7dbb8bad62..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/EnrollmentDeleteModal/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { EnrollmentDeleteModal } from './EnrollmentDeleteModal'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js deleted file mode 100644 index fa71ff5eb4..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/hooks/useDeleteEnrollments.js +++ /dev/null @@ -1,159 +0,0 @@ -// @flow -import { useCallback, useMemo, useState } from 'react'; -import log from 'loglevel'; -import i18n from '@dhis2/d2-i18n'; -import { useMutation, useQueryClient } from 'react-query'; -import { useAlert, useConfig, useDataEngine } from '@dhis2/app-runtime'; -import { handleAPIResponse, REQUESTED_ENTITIES } from '../../../../../../../utils/api'; -import { ReactQueryAppNamespace, useApiDataQuery } from '../../../../../../../utils/reactQueryHelpers'; -import { errorCreator, FEATURES, hasAPISupportForFeature } from '../../../../../../../../capture-core-utils'; - -type Props = { - selectedRows: { [id: string]: boolean }, - programId: string, - onUpdateList: () => void, - setIsDeleteDialogOpen: (open: boolean) => void, -} - -const QueryKey = ['WorkingLists', 'BulkActionBar', 'DeleteEnrollmentsAction', 'trackedEntities']; - -export const useDeleteEnrollments = ({ - selectedRows, - programId, - onUpdateList, - setIsDeleteDialogOpen, -}: Props) => { - const { serverVersion: { minor } } = useConfig(); - const queryClient = useQueryClient(); - const [statusToDelete, setStatusToDelete] = useState({ - active: true, - completed: true, - cancelled: true, - }); - const dataEngine = useDataEngine(); - const { show: showAlert } = useAlert( - ({ message }) => message, - { critical: true }, - ); - - const updateStatusToDelete = useCallback((status: string) => { - setStatusToDelete(prevStatus => ({ - ...prevStatus, - [status]: !prevStatus[status], - })); - }, []); - - const { - data: enrollments, - isLoading: isLoadingEnrollments, - isError: isEnrollmentsError, - } = useApiDataQuery( - [...QueryKey, selectedRows], - { - resource: 'tracker/trackedEntities', - params: () => { - const supportForFeature = hasAPISupportForFeature(minor, FEATURES.newEntityFilterQueryParam); - const filterQueryParam: string = supportForFeature ? 'trackedEntities' : 'trackedEntity'; - - return ({ - fields: 'trackedEntity,enrollments[enrollment,program,status]', - [filterQueryParam]: Object.keys(selectedRows).join(supportForFeature ? ',' : ';'), - program: programId, - }); - }, - }, - { - enabled: Object.keys(selectedRows).length > 0, - select: (data: any) => { - const apiTrackedEntities = handleAPIResponse(REQUESTED_ENTITIES.trackedEntities, data); - if (!apiTrackedEntities) return []; - - return apiTrackedEntities - .flatMap(apiTrackedEntity => apiTrackedEntity.enrollments); - }, - }, - ); - - const { mutate: deleteEnrollments, isLoading: isDeletingEnrollments } = useMutation( - () => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=DELETE', - type: 'create', - data: { - enrollments: enrollments - // $FlowFixMe - business logic dictates that enrollments is not undefined at this point - .filter(({ status }) => status && statusToDelete[status.toLowerCase()]) - .map(({ enrollment }) => ({ enrollment })), - }, - }), - { - onError: (error) => { - log.error(errorCreator('An error occurred when deleting enrollments')({ error })); - showAlert({ message: i18n.t('An error occurred when deleting enrollments') }); - }, - onSuccess: () => { - queryClient.removeQueries([ReactQueryAppNamespace, ...QueryKey]); - onUpdateList(); - setIsDeleteDialogOpen(false); - }, - }, - ); - - const enrollmentCounts = useMemo(() => { - if (!enrollments) { - return null; - } - - const { - activeEnrollments, - completedEnrollments, - cancelledEnrollments, - } = enrollments.reduce((acc, enrollment) => { - if (enrollment.status === 'ACTIVE') { - acc.activeEnrollments += 1; - } else if (enrollment.status === 'CANCELLED') { - acc.cancelledEnrollments += 1; - } else { - acc.completedEnrollments += 1; - } - - return acc; - }, { activeEnrollments: 0, completedEnrollments: 0, cancelledEnrollments: 0 }); - - return { - active: activeEnrollments, - completed: completedEnrollments, - cancelled: cancelledEnrollments, - total: enrollments.length, - }; - }, [enrollments]); - - const numberOfEnrollmentsToDelete = useMemo(() => { - if (!enrollments || !enrollmentCounts) { - return 0; - } - - let total = 0; - if (statusToDelete.active) { - total += enrollmentCounts.active; - } - if (statusToDelete.completed) { - total += enrollmentCounts.completed; - } - if (statusToDelete.cancelled) { - total += enrollmentCounts.cancelled; - } - - return total; - }, [enrollments, enrollmentCounts, statusToDelete]); - - return { - deleteEnrollments, - isDeletingEnrollments, - isLoadingEnrollments, - isEnrollmentsError, - enrollmentCounts, - statusToDelete, - updateStatusToDelete, - numberOfEnrollmentsToDelete, - }; -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js deleted file mode 100644 index 801079a513..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteEnrollmentsAction/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { DeleteEnrollmentsAction } from './DeleteEnrollmentsAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js deleted file mode 100644 index 12ffed180b..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/DeleteTeiAction.js +++ /dev/null @@ -1,87 +0,0 @@ -// @flow -import React, { useState } from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { Button, ButtonStrip, Modal, ModalActions, ModalContent, ModalTitle } from '@dhis2/ui'; -import { useAuthority } from '../../../../../../utils/userInfo/useAuthority'; -import { useCascadeDeleteTei } from './hooks/useCascadeDeleteTei'; - -type Props = { - selectedRows: { [id: string]: boolean }, - selectedRowsCount: number, - trackedEntityName: string, - onUpdateList: () => void, -} - -const CASCADE_DELETE_TEI_AUTHORITY = 'F_TEI_CASCADE_DELETE'; - - -// TODO - Add program and TEType access checks before adding action to prod -export const DeleteTeiAction = ({ - selectedRows, - selectedRowsCount, - trackedEntityName, - onUpdateList, -}: Props) => { - const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); - const { hasAuthority } = useAuthority({ authority: CASCADE_DELETE_TEI_AUTHORITY }); - const { deleteTeis, isLoading } = useCascadeDeleteTei({ - selectedRows, - setIsDeleteDialogOpen, - onUpdateList, - }); - - if (!hasAuthority) { - return null; - } - - return ( - <> - - - {isDeleteDialogOpen && ( - setIsDeleteDialogOpen(false)} - > - - {i18n.t('Delete {{count}} {{ trackedEntityName }}', { - count: selectedRowsCount, - trackedEntityName: trackedEntityName.toLowerCase(), - defaultValue: 'Delete {{count}} {{ trackedEntityName }}', - defaultValue_plural: 'Delete {{count}} {{ trackedEntityName }}', - })} - - - - {i18n.t('Deleting records will also delete any associated enrollments and events. This cannot be undone. Are you sure you want to delete?')} - - - - - - - - - - )} - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js deleted file mode 100644 index 1ae0862e9d..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/hooks/useCascadeDeleteTei.js +++ /dev/null @@ -1,51 +0,0 @@ -// @flow -import log from 'loglevel'; -import i18n from '@dhis2/d2-i18n'; -import { useAlert, useDataEngine } from '@dhis2/app-runtime'; -import { useMutation } from 'react-query'; -import { errorCreator } from '../../../../../../../../capture-core-utils'; - -type Props = { - selectedRows: { [id: string]: boolean }, - setIsDeleteDialogOpen: (open: boolean) => void, - onUpdateList: () => void, -} - -export const useCascadeDeleteTei = ({ - selectedRows, - setIsDeleteDialogOpen, - onUpdateList, -}: Props) => { - const dataEngine = useDataEngine(); - const { show: showAlert } = useAlert( - ({ message }) => message, - { critical: true }, - ); - - const { mutate: deleteTeis, isLoading } = useMutation( - () => dataEngine.mutate({ - resource: 'tracker?async=false&importStrategy=DELETE', - type: 'create', - data: { - trackedEntities: Object - .keys(selectedRows) - .map(id => ({ trackedEntity: id })), - }, - }), - { - onError: (error) => { - log.error(errorCreator('An error occurred while deleting the tracked entities')({ error })); - showAlert({ message: i18n.t('An error occurred while deleting the records') }); - }, - onSuccess: () => { - onUpdateList(); - setIsDeleteDialogOpen(false); - }, - }, - ); - - return { - deleteTeis, - isLoading, - }; -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js deleted file mode 100644 index e2522d77d4..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/DeleteTeiAction/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { DeleteTeiAction } from './DeleteTeiAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js deleted file mode 100644 index d8e44d744b..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/Actions/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// @flow - -export { CompleteAction } from './CompleteAction'; -export { DeleteTeiAction } from './DeleteTeiAction'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js deleted file mode 100644 index 2b2002ce53..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.component.js +++ /dev/null @@ -1,51 +0,0 @@ -// @flow -import React from 'react'; -import { BulkActionBar } from '../../WorkingListsBase/BulkActionBar'; -import { CompleteAction } from './Actions'; -import type { Props } from './TrackedEntityBulkActions.types'; -import { DeleteEnrollmentsAction } from './Actions/DeleteEnrollmentsAction'; - -export const TrackedEntityBulkActionsComponent = ({ - selectedRows, - programId, - stages, - programDataWriteAccess, - onClearSelection, - onUpdateList, - removeRowsFromSelection, -}: Props) => { - const selectedRowsCount = Object.keys(selectedRows).length; - - if (!selectedRowsCount) { - return null; - } - - return ( - - - - - - {/* */} - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js deleted file mode 100644 index 3cd769eb56..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.container.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow -import React from 'react'; -import log from 'loglevel'; -import { EventBulkActions } from '../../EventWorkingListsCommon/EventBulkActions'; -import { TrackedEntityBulkActionsComponent } from './TrackedEntityBulkActions.component'; -import type { ContainerProps } from './TrackedEntityBulkActions.types'; -import { errorCreator } from '../../../../../capture-core-utils'; - -export const TrackedEntityBulkActions = ({ - programStageId, - stages, - programDataWriteAccess, - programId, - ...passOnProps -}: ContainerProps) => { - if (programStageId) { - const stage = stages.get(programStageId); - - if (!stage) { - log.error(errorCreator('Program stage not found')({ programStageId, stages })); - throw new Error('Program stage not found'); - } - - return ( - - ); - } - - return ( - - ); -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js deleted file mode 100644 index 37f18324fa..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/TrackedEntityBulkActions.types.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow -import type { ProgramStage } from '../../../../metaData'; - -export type Props = {| - selectedRows: { [key: string]: boolean }, - programId: string, - stages: Map, - onClearSelection: () => void, - programDataWriteAccess: boolean, - onUpdateList: () => void, - removeRowsFromSelection: (rows: Array) => void, -|} - -export type ContainerProps = {| - ...Props, - programStageId: ?string, -|} diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js deleted file mode 100644 index 47f38f1e9a..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/TrackedEntityBulkActions/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { TrackedEntityBulkActions } from './TrackedEntityBulkActions.container'; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js index ca74b7a97c..ba35786506 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/ViewMenuSetup/TrackerWorkingListsViewMenuSetup.component.js @@ -1,6 +1,5 @@ // @flow -import React, { useCallback, useMemo, useState } from 'react'; -import { v4 as uuid } from 'uuid'; +import React, { useState, useMemo, useCallback } from 'react'; import { useSelector } from 'react-redux'; import { useDataEngine } from '@dhis2/app-runtime'; import { makeQuerySingleResource } from 'capture-core/utils/api'; @@ -12,29 +11,15 @@ import { DownloadDialog } from '../../WorkingListsCommon'; import { computeDownloadRequest } from './downloadRequest'; import { convertToClientConfig } from '../helpers/TEIFilters'; import { FEATURES, useFeature } from '../../../../../capture-core-utils'; -import { useSelectedRowsController } from '../../WorkingListsBase/BulkActionBar'; -import { TrackedEntityBulkActions } from '../TrackedEntityBulkActions'; export const TrackerWorkingListsViewMenuSetup = ({ onLoadView, onUpdateList, storeId, - program, programStageId, orgUnitId, - recordsOrder, ...passOnProps }: Props) => { - const [customUpdateTrigger, setCustomUpdateTrigger] = useState(); - const { - selectedRows, - clearSelection, - selectAllRows, - selectionInProgress, - toggleRowSelected, - allRowsAreSelected, - removeRowsFromSelection, - } = useSelectedRowsController({ recordIds: recordsOrder }); const hasCSVSupport = useFeature(FEATURES.trackedEntitiesCSV); const downloadRequest = useSelector( ({ workingLists }) => workingLists[storeId] && workingLists[storeId].currentRequest, @@ -102,43 +87,15 @@ export const TrackerWorkingListsViewMenuSetup = ({ [onUpdateList, storeId], ); - const handleCustomUpdateTrigger = useCallback((disableClearSelection?: boolean) => { - const id = uuid(); - setCustomUpdateTrigger(id); - !disableClearSelection && clearSelection(); - }, [clearSelection]); - - const TrackedEntityBulkActionsComponent = useMemo(() => ( - - ), [program, programStageId, selectedRows, clearSelection, handleCustomUpdateTrigger, removeRowsFromSelection]); - return ( <> void, - onSelectAll: (rows: Array) => void, - selectionInProgress: ?boolean, - bulkActionBarComponent: React$Element, -|}; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js deleted file mode 100644 index a100abb1f6..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.component.js +++ /dev/null @@ -1,50 +0,0 @@ -// @flow -import React from 'react'; -import { Button, colors } from '@dhis2/ui'; -import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core/styles'; -import type { ComponentProps } from './BulkActionBar.types'; - -const styles = { - container: { - background: colors.teal100, - height: '60px', - border: `2px solid ${colors.teal400}`, - width: '100%', - padding: '8px', - fontSize: '14px', - gap: '8px', - display: 'flex', - alignItems: 'center', - }, -}; - -export const BulkActionBarComponentPlain = ({ - selectedRowsCount, - onClearSelection, - children, - classes, -}: ComponentProps) => ( -
- - {i18n.t('{{count}} selected', { count: selectedRowsCount })} - - - {children} - - -
-); - -export const BulkActionBarComponent = withStyles( - styles, -)(BulkActionBarComponentPlain); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js deleted file mode 100644 index 604e5133d2..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.container.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import React from 'react'; -import { BulkActionBarComponent } from './BulkActionBar.component'; -import type { ContainerProps } from './BulkActionBar.types'; - -export const BulkActionBar = ({ - onClearSelection, - selectedRowsCount, - children, -}: ContainerProps) => ( - <> - - {children} - - -); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js deleted file mode 100644 index 140806a1fe..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/BulkActionBar.types.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow - -type SharedProps = {| - onClearSelection: () => void, - selectedRowsCount: number, - children: React$Node, -|} - -export type ContainerProps = {| - ...SharedProps, -|} - -export type ComponentProps = {| - ...SharedProps, - ...CssClasses, -|} diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js deleted file mode 100644 index 41247da8ff..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export { useSelectedRowsController } from './useSelectedRowsController'; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js deleted file mode 100644 index bf7aff3de0..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/hooks/useSelectedRowsController.js +++ /dev/null @@ -1,66 +0,0 @@ -// @flow -import { useCallback, useMemo, useState } from 'react'; - -type Props = { - recordIds: ?Array, -} - -export const useSelectedRowsController = ({ recordIds }: Props) => { - const [selectedRows, setSelectedRows] = useState({}); - - const allRowsAreSelected = useMemo( - () => recordIds && recordIds.length > 0 && recordIds.every(rowId => selectedRows[rowId]), - [recordIds, selectedRows]); - - const toggleRowSelected = useCallback((rowId: string) => { - setSelectedRows((prevSelectedRows) => { - const newSelectedRows = { ...prevSelectedRows }; - if (newSelectedRows[rowId]) { - delete newSelectedRows[rowId]; - } else { - newSelectedRows[rowId] = true; - } - return newSelectedRows; - }); - }, []); - - const selectAllRows = useCallback((rows: Array) => { - if (allRowsAreSelected) { - setSelectedRows({}); - return; - } - - setSelectedRows(rows.reduce((acc, rowId) => { - acc[rowId] = true; - return acc; - }, {})); - }, [allRowsAreSelected]); - - const clearSelection = useCallback(() => { - setSelectedRows({}); - }, []); - - const selectionInProgress = useMemo( - () => Object.keys(selectedRows).length > 0, - [selectedRows]); - - const removeRowsFromSelection = useCallback((rows: Array) => { - setSelectedRows((prevSelectedRows) => { - const newSelectedRows = { ...prevSelectedRows }; - rows.forEach((rowId) => { - delete newSelectedRows[rowId]; - }); - return newSelectedRows; - }); - }, []); - - return { - selectedRows, - toggleRowSelected, - allRowsAreSelected, - selectAllRows, - selectionInProgress, - clearSelection, - removeRowsFromSelection, - }; -}; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js deleted file mode 100644 index f40a1d152b..0000000000 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/BulkActionBar/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// @flow - -export { BulkActionBar } from './BulkActionBar.container'; -export { useSelectedRowsController } from './hooks'; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js index e1aafab6da..655b2b30ca 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/WorkingListsListViewBuilderContextProvider.component.js @@ -1,18 +1,15 @@ // @flow import React, { useMemo } from 'react'; -import { ListViewBuilderContext } from '../../workingListsBase.context'; +import { + ListViewBuilderContext, +} from '../../workingListsBase.context'; import type { Props } from './workingListsListViewBuilderContextProvider.types'; export const WorkingListsListViewBuilderContextProvider = ({ updating, updatingWithDialog, - selectedRows, - allRowsAreSelected, - selectionInProgress, dataSource, - onClickListRow, - onRowSelect, - onSelectAll, + onSelectListRow, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -24,19 +21,13 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, - bulkActionBarComponent, children, }: Props) => { const listViewBuilderContextData = useMemo(() => ({ updating, updatingWithDialog, dataSource, - selectedRows, - allRowsAreSelected, - selectionInProgress, - onClickListRow, - onRowSelect, - onSelectAll, + onSelectListRow, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -48,17 +39,11 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, - bulkActionBarComponent, }), [ updating, updatingWithDialog, dataSource, - selectedRows, - allRowsAreSelected, - selectionInProgress, - onClickListRow, - onRowSelect, - onSelectAll, + onSelectListRow, onSortList, onSetListColumnOrder, customRowMenuContents, @@ -70,7 +55,6 @@ export const WorkingListsListViewBuilderContextProvider = ({ onChangeRowsPerPage, stickyFilters, programStageId, - bulkActionBarComponent, ]); return ( diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js index a82e67aab6..96db7de391 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/ContextProviders/workingListsListViewBuilderContextProvider.types.js @@ -1,24 +1,24 @@ // @flow import type { - ChangePage, - ChangeRowsPerPage, - ClearFilter, - CustomRowMenuContents, DataSource, - RemoveFilter, - SelectRestMenuItem, SelectRow, - SetColumnOrder, Sort, - StickyFilters, + SetColumnOrder, + CustomRowMenuContents, UpdateFilter, + ClearFilter, + RemoveFilter, + SelectRestMenuItem, + ChangePage, + ChangeRowsPerPage, + StickyFilters, } from '../../../../ListView'; export type Props = $ReadOnly<{| updating: boolean, updatingWithDialog: boolean, dataSource?: DataSource, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSortList: Sort, onSetListColumnOrder: SetColumnOrder, customRowMenuContents?: CustomRowMenuContents, @@ -30,11 +30,5 @@ export type Props = $ReadOnly<{| onChangeRowsPerPage: ChangeRowsPerPage, stickyFilters?: StickyFilters, programStageId?: string, - onRowSelect: (id: string) => void, - onSelectAll: (rows: Array) => void, - selectedRows: { [key: string]: boolean }, - allRowsAreSelected: ?boolean, - selectionInProgress: ?boolean, - bulkActionBarComponent: React$Element, children: React$Node, |}>; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js index 2a6e4e6004..5c43c5324f 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/WorkingListsContextBuilder.component.js @@ -1,11 +1,11 @@ // @flow -import React, { useEffect, useMemo, useRef } from 'react'; +import React, { useMemo, useRef, useEffect } from 'react'; import { - WorkingListsListViewBuilderContextProvider, + WorkingListsManagerContextProvider, WorkingListsListViewConfigContextProvider, WorkingListsListViewLoaderContextProvider, WorkingListsListViewUpdaterContextProvider, - WorkingListsManagerContextProvider, + WorkingListsListViewBuilderContextProvider, } from './ContextProviders'; import { TemplatesLoader } from '../TemplatesLoader'; import type { Props } from './workingListsContextBuilder.types'; @@ -15,9 +15,6 @@ export const WorkingListsContextBuilder = (props: Props) => { const { templates: allTemplates, currentTemplate, - selectedRows, - selectionInProgress, - allRowsAreSelected, onSelectTemplate, onLoadView, loadViewError, @@ -36,9 +33,7 @@ export const WorkingListsContextBuilder = (props: Props) => { categories, loadedContext, dataSource, - onClickListRow, - onRowSelect, - onSelectAll, + onSelectListRow, sortById, sortByDirection, onSortList, @@ -59,7 +54,6 @@ export const WorkingListsContextBuilder = (props: Props) => { customUpdateTrigger, forceUpdateOnMount, programStageId, - bulkActionBarComponent, ...passOnProps } = props; @@ -131,15 +125,10 @@ export const WorkingListsContextBuilder = (props: Props) => { loadedOrgUnitId={loadedContextDefined.orgUnitId} > { onChangeRowsPerPage={onChangeRowsPerPage} stickyFilters={stickyFilters} programStageId={programStageId} - bulkActionBarComponent={bulkActionBarComponent} > { dirtyTemplates={!!dirtyTemplatesStateFirstRunRef.current} loadedProgramIdForTemplates={loadedProgramIdForTemplates} programStageId={programStageId} - selectionInProgress={selectionInProgress} /> diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js index e882b5910d..481cfb721c 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ContextBuilder/workingListsContextBuilder.types.js @@ -12,18 +12,18 @@ import type { UnloadingContext, UpdateList, UpdateTemplate, - WorkingListsOutputProps, - WorkingListTemplate, WorkingListTemplates, + WorkingListTemplate, + WorkingListsOutputProps, } from '../workingListsBase.types'; import type { ChangePage, ChangeRowsPerPage, ClearFilter, - CustomRowMenuContents, + RemoveFilter, DataSource, + CustomRowMenuContents, FiltersData, - RemoveFilter, SelectRestMenuItem, SelectRow, SetColumnOrder, @@ -56,7 +56,7 @@ type ExtractedProps = $ReadOnly<{| onDeleteTemplate?: DeleteTemplate, onLoadView: LoadView, onUpdateFilter: UpdateFilter, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, @@ -74,7 +74,6 @@ type ExtractedProps = $ReadOnly<{| updatingWithDialog: boolean, templates?: WorkingListTemplates, viewPreloaded?: boolean, - bulkActionBarComponent: React$Node, |}>; type OptionalExtractedProps = {| diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js index c33d6e6cb5..a5c7a86516 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/ListViewBuilder/ListViewBuilder.component.js @@ -16,11 +16,7 @@ export const ListViewBuilder = ({ customListViewMenuContents, ...passOnProps }: const { dataSource, - onClickListRow, - onRowSelect, - onSelectAll, - selectedRows, - allRowsAreSelected, + onSelectListRow, onSortList, onSetListColumnOrder, stickyFilters, @@ -40,11 +36,7 @@ export const ListViewBuilder = ({ customListViewMenuContents, ...passOnProps }: {...passOnProps} {...passOnContext} dataSource={dataSource} - selectedRows={selectedRows} - allRowsAreSelected={allRowsAreSelected} - onClickListRow={onClickListRow} - onRowSelect={onRowSelect} - onSelectAll={onSelectAll} + onSelectRow={onSelectListRow} onSort={onSortList} onSetColumnOrder={onSetListColumnOrder} customMenuContents={customListViewMenuContents} diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js index b6b91b495d..95ce24415b 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelector.component.js @@ -54,7 +54,6 @@ type Props = { currentTemplateId: string, currentListIsModified: boolean, onSelectTemplate: Function, - selectionInProgress: boolean, classes: Object, }; @@ -64,7 +63,6 @@ const TemplateSelectorPlain = (props: Props) => { currentTemplateId, currentListIsModified, onSelectTemplate, - selectionInProgress, classes, } = props; @@ -113,7 +111,6 @@ const TemplateSelectorPlain = (props: Props) => { currentTemplateId={currentTemplateId} onSelectTemplate={onSelectTemplate} currentListIsModified={currentListIsModified} - disabled={selectionInProgress} />
); diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js index 81ca6c10a1..238423ef2c 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplateSelectorChip.component.js @@ -15,7 +15,6 @@ type Props = { currentTemplateId: string, onSelectTemplate: Function, maxCharacters?: number, - disabled?: boolean, }; export const TemplateSelectorChip = (props: Props) => { @@ -23,18 +22,14 @@ export const TemplateSelectorChip = (props: Props) => { template, currentTemplateId, onSelectTemplate, - disabled, maxCharacters = 30, ...passOnProps } = props; const { name, id } = template; const selectTemplateHandler = React.useCallback(() => { - if (!disabled) { - onSelectTemplate(template); - } + onSelectTemplate(template); }, [ - disabled, onSelectTemplate, template, ]); @@ -54,14 +49,12 @@ export const TemplateSelectorChip = (props: Props) => { marginRight={0} dataTest="workinglist-template-selector-chip" selected={id === currentTemplateId} - disabled={disabled} > diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js index 5ad89c8434..437e5330a7 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesLoader/templatesLoader.types.js @@ -12,14 +12,9 @@ type ExtractedProps = {| |}; type OptionalExtractedProps = { - allRowsAreSelected: boolean, - selectedRows: { [key: string]: boolean }, loadTemplatesError: string, onCancelLoadTemplates: Function, loadedProgramIdForTemplates: string, - onRowSelect: Function, - onSelectAll: Function, - bulkActionBarComponent: React$Element, }; type RestProps = $Rest; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js index 180e0634c9..17dacb39f3 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/TemplatesManager/TemplatesManager.component.js @@ -1,16 +1,18 @@ // @flow -import React, { type ComponentType, useCallback, useContext } from 'react'; +import React, { useContext, useCallback, type ComponentType } from 'react'; import log from 'loglevel'; import { errorCreator } from 'capture-core-utils'; import { ListViewConfig } from '../ListViewConfig'; import { TemplateSelector } from '../TemplateSelector.component'; import { ManagerContext } from '../workingListsBase.context'; import { withBorder } from '../borderHOC'; -import type { WorkingListTemplate } from '../workingListsBase.types'; +import type { + WorkingListTemplate, +} from '../workingListsBase.types'; import type { Props } from './templatesManager.types'; const TemplatesManagerPlain = (props: Props) => { - const { templates, selectionInProgress, ...passOnProps } = props; + const { templates, ...passOnProps } = props; const { currentTemplate, onSelectTemplate, @@ -40,7 +42,6 @@ const TemplatesManagerPlain = (props: Props) => { return ( { @@ -50,7 +51,6 @@ const TemplatesManagerPlain = (props: Props) => { currentTemplateId={currentTemplate.id} currentListIsModified={currentListIsModified} onSelectTemplate={handleSelectTemplate} - selectionInProgress={selectionInProgress} /> ) } diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js index 046c59d246..f6b8f82ef9 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsBase/workingListsBase.types.js @@ -1,22 +1,22 @@ // @flow import { typeof dataElementTypes } from '../../../metaData'; import type { - AdditionalFilters, - ChangePage, - ChangeRowsPerPage, - ClearFilter, CustomMenuContents, CustomRowMenuContents, DataSource, FiltersData, FiltersOnly, + AdditionalFilters, + StickyFilters, + ChangePage, + ChangeRowsPerPage, + ClearFilter, RemoveFilter, + UpdateFilter, SelectRestMenuItem, - SelectRow, SetColumnOrder, + SelectRow, Sort, - StickyFilters, - UpdateFilter, } from '../../ListView'; export type WorkingListTemplate = { @@ -141,7 +141,7 @@ export type ListViewBuilderContextData = {| updating: boolean, updatingWithDialog: boolean, dataSource?: DataSource, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSortList: Sort, onSetListColumnOrder: SetColumnOrder, customRowMenuContents?: CustomRowMenuContents, @@ -153,12 +153,6 @@ export type ListViewBuilderContextData = {| onChangeRowsPerPage: ChangeRowsPerPage, stickyFilters?: StickyFilters, programStageId?: string, - onRowSelect: (id: string) => void, - onSelectAll: (rows: Array) => void, - selectedRows: { [key: string]: boolean }, - selectionInProgress: ?boolean, - allRowsAreSelected: ?boolean, - bulkActionBarComponent: React$Element, |}; export type SharingSettings = {| @@ -206,7 +200,7 @@ export type InterfaceProps = $ReadOnly<{| onDeleteTemplate?: DeleteTemplate, onLoadView: LoadView, onLoadTemplates: LoadTemplates, - onClickListRow: SelectRow, + onSelectListRow: SelectRow, onSelectRestMenuItem: SelectRestMenuItem, onSelectTemplate: SelectTemplate, onSetListColumnOrder: SetColumnOrder, @@ -230,12 +224,6 @@ export type InterfaceProps = $ReadOnly<{| viewPreloaded?: boolean, programStageId?: string, templateSharingType: string, - allRowsAreSelected: ?boolean, - onRowSelect: (id: string) => void, - onSelectAll: (rows: Array) => void, - selectionInProgress: ?boolean, - selectedRows: { [key: string]: boolean }, - bulkActionBarComponent: React$Element, |}>; export type WorkingListsOutputProps = InterfaceProps; diff --git a/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js b/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js index 7f50dd459f..8e53fd7e01 100644 --- a/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js +++ b/src/core_modules/capture-core/components/WorkingLists/WorkingListsCommon/hooks/useWorkingListsCommonStateManagement.js @@ -189,7 +189,6 @@ const useView = ( const nextFilters = useSelector(({ workingListsMeta }) => workingListsMeta[storeId] && workingListsMeta[storeId].next && workingListsMeta[storeId].next.filters); - const filtersState = useMemo(() => ({ ...appliedFilters, ...nextFilters }), [ appliedFilters, nextFilters, diff --git a/src/core_modules/capture-core/converters/clientToView.js b/src/core_modules/capture-core/converters/clientToView.js index fb7728f723..2849a02b01 100644 --- a/src/core_modules/capture-core/converters/clientToView.js +++ b/src/core_modules/capture-core/converters/clientToView.js @@ -52,11 +52,13 @@ function convertImageForDisplay(clientValue: ImageClientValue) { return ; } -function convertOrgUnitForDisplay(clientValue: { id: string } | string) { - const orgUnitId = typeof clientValue === 'string' ? clientValue : clientValue.id; - return ; +function convertOrgUnitForDisplay(clientValue: { id: string }) { + return ( + + ); } + const valueConvertersForType = { [dataElementTypes.NUMBER]: stringifyNumber, [dataElementTypes.INTEGER]: stringifyNumber, diff --git a/src/core_modules/capture-core/utils/userInfo/useAuthority.js b/src/core_modules/capture-core/utils/userInfo/useAuthority.js deleted file mode 100644 index fdf2c62539..0000000000 --- a/src/core_modules/capture-core/utils/userInfo/useAuthority.js +++ /dev/null @@ -1,27 +0,0 @@ -// @flow - -import { useApiMetadataQuery } from '../reactQueryHelpers'; - -type Props = { - authority: string, -} - -export const useAuthority = ({ authority }: Props) => { - const queryKey = ['authorities']; - const queryFn = { - resource: 'me.json', - params: { - fields: 'authorities', - }, - }; - const queryOptions = { - select: ({ authorities }) => - authorities && - authorities.some(apiAuthority => apiAuthority === 'ALL' || apiAuthority === authority), - }; - const { data } = useApiMetadataQuery(queryKey, queryFn, queryOptions); - - return { - hasAuthority: Boolean(data), - }; -}; diff --git a/yarn.lock b/yarn.lock index f96f6e61a3..5c8b6775b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,9 +11,9 @@ uuid "^8.3.2" "@actions/http-client@^2.0.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" - integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.0.tgz#f8239f375be6185fcd07765efdcf0031ad5df1a0" + integrity sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg== dependencies: tunnel "^0.0.6" undici "^5.25.4" @@ -24,12 +24,12 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -47,34 +47,34 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" - integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.17.8", "@babel/core@^7.6.2", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -90,68 +90,69 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.7.2", "@babel/generator@^7.7.4": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" - integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2", "@babel/generator@^7.7.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.25.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.24.7" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" - integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.0" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -159,165 +160,172 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== - dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" - -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== - dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5", "@babel/parser@^7.9.4": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/types" "^7.25.2" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" + "@babel/types" "^7.22.5" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5", "@babel/parser@^7.9.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.8.3": version "7.18.6" @@ -328,13 +336,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" - integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz#1d827902cbd3d9054e54fb2f2056cdd1eaa0e368" + integrity sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-decorators" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.23.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-decorators" "^7.23.3" "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.18.6" @@ -375,12 +383,12 @@ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-proposal-throw-expressions@^7.7.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.24.7.tgz#8a386bcb77965d82f5b926508b27919d9ac9450f" - integrity sha512-Rh4WoHyWKgsxvdkEMqDEZtKuGnZw+JwicMCvcZaIjYaQ3fK+a8JZYLhgcac9dKcL47Xqf+SG3MopTx+8BACdrQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.23.3.tgz#acb23c5ffc0cae31d5a52b26e678d1b9a69dbc5b" + integrity sha512-aAQebpCm3+qUMJ3ug9B5G26Z5VsaE955lGWrZMhAIPFhK/Cv7bL9GbWgdEXmel/jlHTRvwcYRnfzJS2prsPdVg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-throw-expressions" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-throw-expressions" "^7.23.3" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -410,12 +418,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" - integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== +"@babel/plugin-syntax-decorators@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" + integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -431,26 +439,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.24.7", "@babel/plugin-syntax-flow@^7.7.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" - integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== +"@babel/plugin-syntax-flow@^7.23.3", "@babel/plugin-syntax-flow@^7.7.4": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" + integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" - integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -473,12 +481,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== +"@babel/plugin-syntax-jsx@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -529,12 +537,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-throw-expressions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.24.7.tgz#30887b54c478120831bc95881e73ec1984584930" - integrity sha512-b1bdlAmUTy9VQ/g2cnBuJFwd7jeARNW2F65c9Gcn8qyNYGuVy/cYyqpiSL6SVmUAJTDbIYL2FzlZ8nH1qUCBXA== +"@babel/plugin-syntax-throw-expressions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.23.3.tgz#46077241577243b00ddd465f627242c492bf935c" + integrity sha512-P7zUpjwebv09kxTCG0Gp0TMa8luPG4t2Q5gylayLeRHHwfUR4jgjYgx/X9DYPF81/W5aYpYOzX2kQnChAFFp8Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" @@ -543,12 +551,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== +"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -558,492 +566,484 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" - integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== +"@babel/plugin-transform-async-generator-functions@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" + integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" - integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" - integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" - -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.16.0", "@babel/plugin-transform-flow-strip-types@^7.16.7", "@babel/plugin-transform-flow-strip-types@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz#b3aa251db44959b7a7c82abcd6b4225dec7d2258" - integrity sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg== +"@babel/plugin-transform-flow-strip-types@^7.16.0", "@babel/plugin-transform-flow-strip-types@^7.16.7", "@babel/plugin-transform-flow-strip-types@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" + integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-flow" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.23.3" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== +"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" - integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz#71a665ed16ce618067d05f4a98130207349d82ae" - integrity sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" + integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" "@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" + integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.16.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" - integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.1" - babel-plugin-polyfill-regenerator "^0.6.1" + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz#52bbd20054855beb9deae3bee9ceb05289c343e6" + integrity sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== +"@babel/plugin-transform-typescript@^7.23.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" + integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" - integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.14.7", "@babel/preset-env@^7.16.11", "@babel/preset-env@^7.16.4": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" - integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== - dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" + integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1055,70 +1055,69 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.0" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.24.7" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.0" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.7" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" + core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-flow@^7.0.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.7.tgz#eef5cb8e05e97a448fc50c16826f5612fe512c06" - integrity sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" + integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-flow-strip-types" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-flow-strip-types" "^7.23.3" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -1142,20 +1141,20 @@ "@babel/plugin-transform-react-pure-annotations" "^7.16.7" "@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.6.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" + integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-typescript" "^7.23.3" "@babel/register@^7.0.0": - version "7.24.6" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" - integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" + integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1168,32 +1167,35 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" - integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" - integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.3" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.2" +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.7", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2", "@babel/traverse@^7.7.4": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" debug "^4.3.1" globals "^11.1.0" @@ -1205,23 +1207,23 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" - integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@badeball/cypress-configuration@^6.0.0": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@badeball/cypress-configuration/-/cypress-configuration-6.1.1.tgz#9772173061d2c71c0e79823a5312ec43651f98cb" - integrity sha512-0IcJFMiCRo33Ofrvxxojt5QRJWyxApymHuuy981FeXnOGz4UsWKgr/hRupeXkw2cKXvah+j+880kXliygxPOSQ== + version "6.1.0" + resolved "https://registry.yarnpkg.com/@badeball/cypress-configuration/-/cypress-configuration-6.1.0.tgz#26141be2395089a3d79fd886da489ac366a070d6" + integrity sha512-30M6frVmhP8MUKscg8CEWnPbDLYDRHswUdny1ajRJlW/kdlMZ5da+eDnzMW3qUW73JfqLRk1pteejwlcZOt0GQ== dependencies: "@babel/parser" "^7.18.8" debug "^4.3.2" - esbuild "^0.19.4" + esbuild "^0.14.23" glob "^7.1.6" minimatch "^3.0.4" node-hook "^1.0.0" @@ -1400,21 +1402,6 @@ dependencies: chalk "^4.0.0" -"@csstools/css-parser-algorithms@^2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" - integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== - -"@csstools/css-tokenizer@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" - integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== - -"@csstools/media-query-list-parser@^2.1.13": - version "2.1.13" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" - integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== - "@csstools/normalize.css@*": version "12.1.1" resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.1.1.tgz#f0ad221b7280f3fc814689786fd9ee092776ef8f" @@ -1526,11 +1513,6 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@csstools/selector-specificity@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" - integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== - "@cucumber/ci-environment@9.2.0": version "9.2.0" resolved "https://registry.yarnpkg.com/@cucumber/ci-environment/-/ci-environment-9.2.0.tgz#3942f39d6a7595295256d97a88d39d02469ba50f" @@ -1687,9 +1669,9 @@ uuid "^8.3.2" "@cypress/webpack-preprocessor@^6.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.2.tgz#58a96aa4dbff7433dd37d24ed47e413aa3d3fabb" - integrity sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA== + version "6.0.1" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.1.tgz#5369527c063b2f4718a125ddbd163c5775086e06" + integrity sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA== dependencies: bluebird "3.7.1" debug "^4.3.4" @@ -1703,795 +1685,647 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@dhis2-ui/alert@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.11.0.tgz#01456616ad601b9c5ff5d71dfb5db102f46e5743" - integrity sha512-jka/E26RkLJexYhi934yj8hpIvdI/mOnFzjwca0kDxnCaJ9JCz/j6x0BklrzRFFt/gGJ9aldG1mVX7fGtIEEvw== +"@dhis2-ui/alert@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.10.1.tgz#c15d851cdf6e15b1a6240c5af9f4308817e7c126" + integrity sha512-jSS+RDM8HLtlHx/SOMDAn50Te+mafevUuM2Emt4z/Lwb3wslps7LYjdwfI9yE+OLML9yjmJQWEhgChMIvwNNfg== dependencies: - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-10.0.3.tgz#2a2885d3d27449963d56bdff7d3185c031ac447c" - integrity sha512-lGMkAWRwKUNwTe71sAlcsieUozRbEdBT9tyVJjkm4Ldp9DsgtvKfOSaevHMGo0hLMPkbrJg7a2A5xOyAeUzGdQ== +"@dhis2-ui/box@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.10.1.tgz#67c311156b762c4ecd39532ec36713e229f2ba27" + integrity sha512-MwjhsiXGVLV2D7BmRlc5npK7MLJZsEcR62Fw/YWln0lIXd2GP5EA6vtXaabWV0XC/ZZFjdE9KetNZsgr1amkrQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.11.0.tgz#92391d2d8bbdb3bdd2714d93e7d519dc041f1db9" - integrity sha512-/ds/LWG8P995QRDHhkVvCS8ao6tOpssAwqFY2PiaRIl2J39b6bmfIVfIQldldiKO1IK05oJmRSCmCx8TfHE9ig== +"@dhis2-ui/button@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.10.1.tgz#ccdedc218a966db70d1bf723cdd224d8e6b3e93f" + integrity sha512-Xa52rE9aiXt/6w2ElbqermFq2P+0V+isyNz7wELtFmGI9G+ASvqr0aIO4ePG2/qu/qknhLO1U3SA4RmlrkFLpw== dependencies: + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/popper" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-10.0.3.tgz#d797a8aa8f9f8ad9555522393ab22cf6b9d22f10" - integrity sha512-0bKWNWMbSuvXR48VGc2sl92bF3lCSZKY1E9xkknNBkPoHaXnepRGWcd2tNYmHPVp59CEHgOME2YCiEazn2pKng== - dependencies: - "@dhis2-ui/layer" "10.0.3" - "@dhis2-ui/loader" "10.0.3" - "@dhis2-ui/popper" "10.0.3" +"@dhis2-ui/calendar@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-9.10.1.tgz#7683f05fef63b6841403f746f32a52891e323d64" + integrity sha512-tzFJWHMqdvvOsGTLttyqfAWMWH6aabt/4nIfRYJyCGvEIOdZLx62S2tZZjjtFwUpVtIN06+cunaGv8XHwmvlxQ== + dependencies: + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2/multi-calendar-dates" "^1.2.3" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - "@dhis2/ui-icons" "10.0.3" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.11.0.tgz#ee6a5dec0e44da72a654c546a6c685dbcdc33245" - integrity sha512-b5cA+v0uv+5Dj6CXPiFavOUSgiNLKXRBg6OjeZatUTIsoO59UpOxQoVp4cCo8/kZkBBUyuwsMYO2AHuIarTucQ== +"@dhis2-ui/card@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.10.1.tgz#d4814458245444f95bc0a6c1fd88679e1ffba01c" + integrity sha512-Aj9ZvKJbRoDy3DqhYO9/phOiX/bC+gCyk4E0leMxtJx7he7pfdGCfpRHNyxEuy7tEi8WaVaMzfnb8lNzsv/nUw== dependencies: - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/calendar@10.0.3", "@dhis2-ui/calendar@9.11.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-10.0.3.tgz#726560825eb0919db8018097608075a46bd9b638" - integrity sha512-yxLESkgO+PlCdkREqzCKGq5KXmKtUjMkRWb6LY3hkpYZ0DmHCrqUpIHGqm/cxA3xo812km2SwpoKgVbmP+T6YA== - dependencies: - "@dhis2-ui/button" "10.0.3" - "@dhis2-ui/card" "10.0.3" - "@dhis2-ui/input" "10.0.3" - "@dhis2-ui/layer" "10.0.3" - "@dhis2-ui/popper" "10.0.3" - "@dhis2/multi-calendar-dates" "2.0.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - "@dhis2/ui-icons" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/card@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-10.0.3.tgz#968ccada671eb351c225a9fc5ee18bca6be1a23c" - integrity sha512-ldMyDmDSWztubwgP/4IKjXFP4YgMIfFI1gRuMkvLJYx5CcpcqnZqULeunHM6+47d6mP2oD7a38Mly1+GPbjY6A== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/card@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.11.0.tgz#17b40d55240a1fb5c34345b0d16e63ab984cfdb6" - integrity sha512-phjsyukZfmxKqqtRxVRuFJdc30S7XfEkEmQv11wWnAjGVl2YxIWKm8SAGShpu0gC8susJg0GBhY7Ts+h5cRvQg== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/center@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.11.0.tgz#f3d5a302fb2227a78a8430a706a90a43eae92665" - integrity sha512-LEAW1wlpArkA63sko/24H8C4AHYTGFolIMYjcAFX1GR2xBcFpj/4VQRQFK6P9POtrSv+syVlfw51g9zBfhYi9A== +"@dhis2-ui/center@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.10.1.tgz#5628692b2aeff42870c0e0619aafac5dcab0777d" + integrity sha512-pmASts6pNktt0NKetShhTMje3ZKBD1k7xr4dx6fhhNfw96PgM2fYxXCn8vNQK9HkKyY0K65tX/u8Q1oegXMFKw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/checkbox@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.11.0.tgz#05d59ac1403a93c44bee2e2e04b008f1851ebeb7" - integrity sha512-jPn/3DCUNLar8EEgUI01h100POtob6GxkcpTkMsRqngN4f+QTAPZGVORVFjd+2nAAG/msHXaqnNqmfwkaKPsaA== +"@dhis2-ui/checkbox@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.10.1.tgz#4ee2112c3972beca38a9897ecb82dfd3b307710e" + integrity sha512-sNERu2S3rrmxl8wnWoNDSq5jv5D43ncYu2prbG8mP27yaZ5Jx+9cy5seLVOh719zZvC0cQiADjXoFt8Lslj/eA== dependencies: - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/required" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/chip@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.11.0.tgz#1e8b4276872b8737ed1607588867d0f6d9800e13" - integrity sha512-jc/CCohXhbTT91AagWIxieybSyAR9Mo91vMjRHbe8qzVua40WezAazhjLCd82ynGjEzHWMryaK7om1VK5hbM9A== +"@dhis2-ui/chip@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.10.1.tgz#b530093e9ef2c6bfa85f556512a1b43a9b0c9e77" + integrity sha512-VZ4+WM63wZPVWF8J2gpw2IQXI04VlEsijwd7aBeux4JUhTv0rJkyUfGWYR2PSSDh2xAZWsJHmkOiwS+Bguv31w== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/cover@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.11.0.tgz#ea8280dfcb2444111cd0e1da87c566d5813dc1c3" - integrity sha512-mwb15H2gJNOO9ZDZEQclfrvKbb0TvLn3n7BMErR8+Z9oE9j8ycMI/Ks6Itov94dIX2Es+1cHZFMDLJUOTtI+yg== +"@dhis2-ui/cover@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.10.1.tgz#c668649399b4b9e9aaffb0209cfa98c868c3b986" + integrity sha512-sU9s3dOQd1kfClZcwPVjG6zBW0l4i91xZvJSODqbFtSX0Tz7OmNwWAC23xYoXl6TaizCk+1iKG5iB2aiay9yuQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/css@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.11.0.tgz#4540c4795b146b3c92feae5ccbca99b198d66fb2" - integrity sha512-TsLR1Jw7fjTqszrybAdw1ouAdV3hPX9v3JJE/iWqTKPHfTSxtEj201jHAqpNWjxiIgEzPJ2AG61fUh44+Iiibw== +"@dhis2-ui/css@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.10.1.tgz#d94b659e3f00c7d353b9f53ab786ebd0dc6fc4cb" + integrity sha512-ZJWv9zRVzl5/08s5WMHPV1WZLhVYDekMvmQNSoBRkLDoitZOtxfTx5ytsgStBpjWPK6lxwCKhh4D7ArI0gQCqA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/divider@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.11.0.tgz#af514387024824102dbdb352058809f1d54c8901" - integrity sha512-zDFjs2BZF3Dra8cpYypYmvYTnFgItHoFOAGs1JfVlvTcWGpaggf1ah8BcxqFSxOg7rgL0CGtF9uLujGNdbla5g== +"@dhis2-ui/divider@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.10.1.tgz#a6fa0af3b02cc28d35180b784cc53ccd5d710173" + integrity sha512-o1OAah4EQMX72cXV/A0dfcORqKDbbbzcSW5jWuFIreAuqC0XRutoDUOaF2NWi2mc4AJsI37o7M1+0w8MCjtOOA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-10.0.3.tgz#e2721efbcaaec159774f046d96ebcade8129fccf" - integrity sha512-Lh7VyFCCCycR0DIygWcDvff1/4c0RMfQFp8svfFRYbC8jscaeBsqqbR082wFjbvwVn9uUYB45eu+1HJLKwDviQ== +"@dhis2-ui/field@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.10.1.tgz#732d289d274c11f853c8fc399de9703ccb0da327" + integrity sha512-7VOU28pkqkPlcTfD1FWSOLRcmIi4DMSo0ElPA8HwPE8eiBj52XPUQ1LMCuBiosS5sCAeUC74108dNQidTgY+OQ== dependencies: - "@dhis2-ui/box" "10.0.3" - "@dhis2-ui/help" "10.0.3" - "@dhis2-ui/label" "10.0.3" + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/help" "9.10.1" + "@dhis2-ui/label" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.11.0.tgz#c57c623ea4ad32a6440062ed4ee81e2130d80f75" - integrity sha512-pVFNqiKVgsefxpgfMnrM6mU9ZM1qZtRAZsDjzooYIlh1r0nUQt01GKgn0TTdyICIoqO3lNLxvxNA5SXv9QRqfQ== +"@dhis2-ui/file-input@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.10.1.tgz#f1c38080c4f65a35b8383508a22b34bfd0596b05" + integrity sha512-VyXsOs+JSK7P+QFf1byGFWDjs2bIbD2XF1FhbVlEsAwPJ9gLYnwYqkyRNI3VcSg8vbTw1VgYmEd4ODjbQjGMOw== dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/help" "9.11.0" - "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/label" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/status-icon" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/file-input@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.11.0.tgz#77735de2a87f734a4041f4a397911313dc816df6" - integrity sha512-CWp34b6hMc67V5KJow5orPzLTVJzFnudouXYQEiPd3fUHJa4xRYW+GvbL+uY46VvF+GSB82eP5+z4PTgicZWxA== - dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/label" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" +"@dhis2-ui/header-bar@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.10.1.tgz#a3b75bb45630f0576bfa411719749eff928fdc24" + integrity sha512-9rDwuL2fO1Zo25Zc2aTjG/h6+k55kPsduh7jvJEqQ1440silP3PrKygPBLvJMxJFHGfhwIsDPa6JC4sONOne3g== + dependencies: + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/center" "9.10.1" + "@dhis2-ui/divider" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/logo" "9.10.1" + "@dhis2-ui/menu" "9.10.1" + "@dhis2-ui/modal" "9.10.1" + "@dhis2-ui/user-avatar" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/header-bar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.11.0.tgz#aeac3955e407e4c398daa81ae3231b52bcd18870" - integrity sha512-1NRznu2gluvAc1Kd5Ogt7K7rlfvvlvouUYGC9kn+mLYHj/h6T+eeTOS8Y0uEJLgmfuuklm2omZ+ASUIY3A7+iA== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/logo" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" moment "^2.29.1" prop-types "^15.7.2" -"@dhis2-ui/help@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-10.0.3.tgz#2d7782499e9ba4135f1dd1650e35ddc03b90610b" - integrity sha512-iNQRXfzDq5z9GGcnA01y5VxLXzWHzG+hRf/L/l0tZCV2xqRwirHwFi1KVazVKShQxYvXBGMMr2GwqpiRg9I7oA== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/help@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.11.0.tgz#071ed4ff473cbc423b7a1f51c7217b6bbf057974" - integrity sha512-/n1bnolladI44ZVSzxKvt6SnsAlVK9G76uT1pTMNyMRDHCIpZc8070HADv+2GGD5YbwSpltClgy+3U4xPz14/A== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/input@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-10.0.3.tgz#b57f3b7659156163e3641a8927fa6633c57d0468" - integrity sha512-MhtjU9OMKXl1YXwMlQKUsuG+641a994GzKiFR0RcYsEW0/yVaFwyOEfnRBwzZhGwSnnSl2KE24MTPqSotBAQLg== - dependencies: - "@dhis2-ui/box" "10.0.3" - "@dhis2-ui/field" "10.0.3" - "@dhis2-ui/input" "10.0.3" - "@dhis2-ui/loader" "10.0.3" - "@dhis2-ui/status-icon" "10.0.3" - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - "@dhis2/ui-icons" "10.0.3" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/input@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.11.0.tgz#4dd6efc15c82605468a3e1211f0b182bd5c66a08" - integrity sha512-jx3scjWkhO3s7SzaTfYUOYpOacGfS9317fGEshrirdkh6+jzLF+qbWLM9BX/hf63JfU4iPZC4cZzr0yWgxohDg== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/intersection-detector@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.11.0.tgz#cad6dc8095cdfc9db133fd8a46d19e90130e4f07" - integrity sha512-Dr1WUDvcWbKFFu2DoCwfLwokM/d1oQApEkbAmUBSkAv9uWx61VgLlH/Z3I/Pr/VSJuBR3zWSpmVbduLlFs1Avg== +"@dhis2-ui/help@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.10.1.tgz#e4d9999a15c95e070f78a5bc9cb8f1534859d8d2" + integrity sha512-Ky7ry3KlQBYGY/3Yi2kb3vLq55FYO0ZI9NDBfALtHBsYa/E6ql5Adc2SsL6+1kVSxjXZ5H5Rvg9eg62rz/Rhrg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-10.0.3.tgz#1787ff36b0f5ab0aa362b2809a5af4029f326099" - integrity sha512-HFo5Onguwx/sv+Iz6hFJ1xiKiwXLdH0BCpJXBgYaNyKFLkgbprEHaBW9ZOM/e9cVX5jlodE5z5b9hIdgjzw9Yg== +"@dhis2-ui/input@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.10.1.tgz#b683732e6b1b0672516c7927f23c87090cc72f11" + integrity sha512-yfZfIlvDfuWpM9YNtB2J6toRjbrzdcKefIExyOIBdgmTamFzp8fCCVUnSUfO3VEdBCM4fqWcHBLDA6/hU5iQpA== dependencies: - "@dhis2-ui/required" "10.0.3" + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/status-icon" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.11.0.tgz#286e9b1b79ef7cf45d500a893b4c0fd6b11eeaec" - integrity sha512-wOlHjghmey9nbytOKHHfwzaUzxqgXcmTzy7ntkRBsmqVMdJ07+pL7iFId4EFNdGz2aGPGPAs1qmMEqDJPoz3eA== +"@dhis2-ui/intersection-detector@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.10.1.tgz#767227650e4436262c91d9d670aa279aca998d3f" + integrity sha512-42RMPz5evHh9Uyu6XleYPGu5PiwkXCN9ZnQhlL1kyAksOtxVxwWyHNk5n7XRjyo9X50CAwcZGtRlXgKavcQ9Nw== dependencies: - "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-10.0.3.tgz#1066f606ce7b44bff365f2937d4432f8353f729f" - integrity sha512-qOygPIbQRthhigtQH+uebq4PRLtkvYHRAzYt8YxtKo4rwTbLWqAmfwZ03rbogLTzkPortZonPcczLoOzR+tskw== +"@dhis2-ui/label@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.10.1.tgz#b4d9de56e9e209d94937c09e83f356bab717a6b3" + integrity sha512-v/bJCTK+zw0tzQ0S1gHFXhxgfbREKcFaEWQKJpn94Woh/ws/uMo+UNd3BIf7iCylCXz/V5/MVCgJhjDjJnB/Ww== dependencies: - "@dhis2-ui/portal" "10.0.3" + "@dhis2-ui/required" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.11.0.tgz#ffc80120cf38236ec04291e1bb992549c4e685fd" - integrity sha512-jCrgn2n4QlxTY7GRhwgrDqTbMaju7SDUGrrqOTBZXg8bCoVBazqh3dgUUWogOVJ8UH6ob+tycfXvbUf0lJClNg== +"@dhis2-ui/layer@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.10.1.tgz#8f7867ccb62af0b0af5b8a25767e693ee585d38f" + integrity sha512-fV98uG359y1LqKjulStTrc8MJClQ7Ub3RUJ8DgXe/mrps12Ads9SyqN68bPX1Mr++2Ks4IbtC88vRM+XmW0wyA== dependencies: - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/legend@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.11.0.tgz#f8c8201ae9da75c815810715d3aca38e03fb585d" - integrity sha512-MxpJbao+t1qhUrStLhLAn2+Xt2G2gyoiHEf7BeF85opf5HsY+9Xbki1RemP69ixe906czCKD2gieZxNNpdQYBw== +"@dhis2-ui/legend@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.10.1.tgz#8521c229fa46e1926cb9587a6b0c6c5482f6bcf0" + integrity sha512-w/RrHS6yvi+W872lTw9NZqJMbuYz1FmyP7d3E4uAOxGM7n7dEnfKWgRQhG+GYG935mYLl+aYv0szS36uDgCusg== dependencies: - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/required" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-10.0.3.tgz#56fe040123db30e822221e45d3fd384f18c5fbca" - integrity sha512-4ENjQrUO1jM2p/+gRjTqaliOpXjSo8pTv9YvZHyOA6HGptWudk+s5NXSNyqUkDwJB2pnAMxKFs4Rd5JOKHdujg== +"@dhis2-ui/loader@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.10.1.tgz#1a48b05a9e8c31d7819f66d22b27288a076cfc02" + integrity sha512-lMlmtyGQGxu48oBVhZGT9USOB5yEqzgSAkTZg/vd+byHm5oMM2m8KNJTH7RT2HHg2Du24E4L2n9+W6ZSAwhMyA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.11.0.tgz#f0a2f8f0646efd9bce632194eb68bba0f1512c2e" - integrity sha512-98M8KmGYYeROkGE/rZ8e3BHQKgfk7ZsZmYrhr6JyEYUWoW+rDHeR/a5bprbMmie//+ePdOx2UxZUJKIDUZEPvw== +"@dhis2-ui/logo@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.10.1.tgz#b4bd80780786c35a85c1fe2d7888862df3e97213" + integrity sha512-hW1PJGG+l6fHI9XHjOH9565LwUpWaYhELgi+Gjutbcyil0xY4DHO/Nd6YxTui2V5RwnZsFNHEbOJlJRG1oXNbQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/logo@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.11.0.tgz#2ff0058cc6dffcb0dcf6182e70429d0fa710dcd4" - integrity sha512-R0nebCjwHeYbq0+N2xje1NOTI6bcUB16riSNBBimyZAQXqEWUyiuqxISf49UUG+Ed7UjkcMnJe6AmL+Yoemfug== +"@dhis2-ui/menu@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.10.1.tgz#e9d7ef056680ceb3b385940d433d88be02ed6c77" + integrity sha512-Wy2z3FIIX1vhReQucG3aLUtEmjFgCtNDf09U8a+JUjXLmrKH41fcMVvz4mkzmGy4jQf60Przp4tXOpmLwehkHA== dependencies: + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/divider" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/menu@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.11.0.tgz#33b5f74e193d36dd4a13175bfeaafdaa6ae8373d" - integrity sha512-613Yb3IK2JQGrOTP6caCRkSTqqrOkL0K1Frsv0Uzhts066bZQaIT7drL0T+vIFv0+sgRSGyfBSfTrYQofxnKYQ== +"@dhis2-ui/modal@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.10.1.tgz#63453611171a61541d3bb07df9b78697e40ec1aa" + integrity sha512-tvpyQPKqjP42mRJE+Nm33YxgCQkVwDHkLsxkxdaKUj9cMAkQs2hcvD3+QlzuHLf3uVtwPrfKxUM6L79AJIo4RA== dependencies: - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/center" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/modal@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.11.0.tgz#c16b04787641e9f64d385c55959fa8f5537f1acf" - integrity sha512-GDg7uad+/eLvadJEXjVoHTlEfrd639QmVVdjEcvC+RtHOOXKjlR3wpm+FvgUSbw7zhXpcZ68LNdga9X9bjn14Q== +"@dhis2-ui/node@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.10.1.tgz#d70d639edec02dffd1a7fbd3871c10b9463b30e2" + integrity sha512-AvsVsoclCVTq6MFwTejDLDhk+mehOkL8XdpJAWxZ7G0vcS+/xqukHxuVQXgEGOyCpZNPDaIgvz+BPRS+Qf38cA== dependencies: - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/loader" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/node@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.11.0.tgz#d4cc2b0ca1b653247bf3bf90a9e4152780f61253" - integrity sha512-GfI9ecBzJGeZnS6fLiS19eAg+w9hIXOC5sk69S5NOEKDbCU+CWR97GSpb71RBiq9QZuNBtNEZU7Vqa01+G041Q== +"@dhis2-ui/notice-box@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.10.1.tgz#0bc013d64da1f1e523c7bcd167987cbe94770947" + integrity sha512-I8n/4qfDlRaoOVpaFEtPwYRx/h6Ee9k+C9Kr3fxflD+lPMfm2O7b6UkoOoY0lKpAQyO1zHkMbIzgJ1o09s9akA== dependencies: - "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/notice-box@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.11.0.tgz#2bd5c4a13a9d021c2d694f94ee6520276ccc533f" - integrity sha512-xEfsxFVoiMxVjqvf9QyB7w83cwraS+aS1HaOXTySvseOd+jSk7YlYAQJ2RQbGmik7rsSlyNMXbWoJ9TaJ8Y/pg== +"@dhis2-ui/organisation-unit-tree@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.10.1.tgz#8798f023cd9c14e8b586b1249fca92d27d31b3c5" + integrity sha512-Yk6jzVQ36LP+sRXDYA2c+IUGAKS1lO5A8tx79EUQZfMfBnh1TSUAMN7BPtg4BrZmL2Hp+LrKQs32RZLmR6sa8A== dependencies: + "@dhis2-ui/checkbox" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/node" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/organisation-unit-tree@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.11.0.tgz#c626c71cac19ba93241a6e36fad2d261f3307c32" - integrity sha512-2mYpgBPjmNlkCnCLrDmmPtC1rs07uxlEeqULTCiqRcbbWzEYL2S+fAao5IiOrlzXR9JIVlG7P8htMYNfj48tJQ== +"@dhis2-ui/pagination@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.10.1.tgz#8ae88b47642d8a0a87cdeb99d6a0607f9185ad8b" + integrity sha512-wmMYYrquaZp5EgUugGIJCyUQ1h6BMHMfFXM4g7KTpvh5n6o9vnElQeWy58EPaL8QDAqk//zsyQMEAXm/YwSbyg== dependencies: - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/node" "9.11.0" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/select" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/pagination@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.11.0.tgz#6967b1241ec3c36855e4570125e202752a6db577" - integrity sha512-HllIE5IVsNK1vM9wxRDfrLtxrrMWOxDEV+8B6QKG9qLXubfoFZL6+b5MGHo/mzDzY+7LxxBpiowoYaj52QMFYQ== +"@dhis2-ui/popover@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.10.1.tgz#edc06a2208a14a9cf69b1217fd9d4bb9f8f3be4a" + integrity sha512-LHxCXotEkqAoBQcax3DICyo/AotLG/gaNzc9iPwan4/hHOiwy5ciwMNh9RycyT90WqtPmTtDBDJFS90BRv5sxw== dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/popper" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popover@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.11.0.tgz#c6af553735f6c441c59514841f732f3f3ec86371" - integrity sha512-jad3kEqIyvhKQ4YBUGIbvcnFinED9ywgIfp0AG7sP3t80S15/aso+kTPyZ06Tgt/Slk6o6vHEuUy5SSpgnaLcw== +"@dhis2-ui/popper@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.10.1.tgz#841ac08c79f81b6cbf3761c1a6aea261e1612f6e" + integrity sha512-kTfXQsiYcqw2/gRmxbFuFSiYL2giGMxebgHsP/ikONcsM+QNBBtVwEu70uEdfoNMTKrevjssAnhUjB8mPgjwuA== dependencies: - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/popper@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-10.0.3.tgz#fc161b1d00c199b71bd562af693faa5ac7a6002c" - integrity sha512-X8Cd8NqRTCl9RqwpX4tK0vhnYB3GMUQWZ5LrFo507M6zqOk8MldOb/x7ThnhFB7TCH4aK+95qLj2p+Jm8KB7yA== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" react-popper "^2.2.5" resize-observer-polyfill "^1.5.1" -"@dhis2-ui/popper@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.11.0.tgz#6b08e1f32588384b408cb6fdc6ba65369fd0e392" - integrity sha512-RIUSd0qmV0gCE1aTX9kUv8hYbat/5wUECFAhMF/0mqkDZAqTGpyQDFHFTPwAc37wNaxOXb8z6dDMozaNn5OpQA== +"@dhis2-ui/portal@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.10.1.tgz#fd3d45eecbf73281cfc682b4d9c0c7ed47b2fe39" + integrity sha512-0qkHHrOAkyH1mV3C1kAV6SA9c632yfE2DsMb48kTii4wuKqWvXAXoGsqQ12SqyLgvRHgrxaEd0nt1Ap/C8gRQA== dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" - react-popper "^2.2.5" - resize-observer-polyfill "^1.5.1" -"@dhis2-ui/portal@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-10.0.3.tgz#0f88544145f45d6c4f1e61166b2609e05defd5fd" - integrity sha512-5pY2RfkTxntYzNeG88+2CQDPXZCxXl4aafYM+bBrmcgG9JSAtn5rLaKGtlKzK9GA0H849ce6W9mSDICMA/w2Sw== - dependencies: - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/portal@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.11.0.tgz#4a3e874d701f1a5b872e717abcad645e073efc16" - integrity sha512-z0hhTMtUK8pQvA9cl6VU2QYvlEFPamxPT3MWGKcfhUTkPj/zrA0ovKWRZwrcEN0AoXb3bqc6TsS6szJL0ohi1Q== - dependencies: - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/radio@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.11.0.tgz#e9fbdcfd3fc8e6cbc0107c00606c275fe19d56b6" - integrity sha512-YAI/uow1R+LwANKfMOdOqXYBrrRowf23fQDgZNDvdxVAYU3BxHBoCKhx/14qyslcHv6/pwDLghvDUw0un5suOA== - dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/required@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-10.0.3.tgz#4820ba88c1770c50823b2b2a53a63702e92cec90" - integrity sha512-8Vl/Zx/XtRN1o2KeULQTdbeOP31qfYJLQtkQbiHxfWJFf+c7KPdI1rcxthopRIMGzOacKgO4352pSrAo5qbawA== +"@dhis2-ui/radio@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.10.1.tgz#c44f0df810b246758b166988e91cc3e5ac4eabb8" + integrity sha512-VWpR+i4wIVK4SCYrBkA1V6bJaePBVqSvPimPQ22bIhxxWpmK9eOrn3+nSnZi3Fx5HT+UF/axg1Ez49HFPgPulw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/required@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.11.0.tgz#71f2dc7cdbb5b9bd412316af5ccb611caf261484" - integrity sha512-2fThUG/+wdOeQeuZD52M/TdMTCRSdxPxt2IIdkc9MUC+MmvMieJOFjYTzaHaItSqy0huNnOEvmaHEOTcERae/Q== +"@dhis2-ui/required@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.10.1.tgz#0755f646334eb6425c67bbb20c47b89e79025691" + integrity sha512-vhMUNxaVYfpniR5iofy579sR29m+H/qHkaCscKE2p7B7FmhEGWwN2H+N/CVOAMsAVSgHaMHoGgfM9r44Va0ClA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/segmented-control@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.11.0.tgz#97b80b28543039a7c75914df9fe8147d9141b6d3" - integrity sha512-Ejv6/zCa7o9PFK9BvroSio0DgSZt2Ue7Q89MkJYee7yH5dAe6uuCcZ8/lrtpOWOoqEQtDpsrAF6bU5LVjSsAng== +"@dhis2-ui/segmented-control@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.10.1.tgz#ca4daf18d46d43d1cb46a40204430d85c5bd5dc4" + integrity sha512-LPf2Zrf2aGRxvsmI0lE3+hbE+pZC+ujoT+E+4M8OO+Xue9ssbJf5yLv6t6jqAjpRT8IoGSGTZA2rckl29at6sg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/select@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.11.0.tgz#8f09f3500a37d9ad63d9bdb58ec9cfe224626fff" - integrity sha512-sfOZMR+7LaxfLseYyyqrGKBiZEuUCI/IDJXvakIaCqQGhSjjkY5Y8FC6LMZl/0TQUP8yCIjKaqBaUukLZxN6jQ== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/chip" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" +"@dhis2-ui/select@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.10.1.tgz#c8e7083632e44c26874ff9e4d2ca05db80028989" + integrity sha512-eHr1zkVBjjC1mLPnYUKjMdxqQteXGIA4L0viKq7ab34GttZVu3fuuVhg+cV0XjZm03YWex0nmwbSlk00oDjnJQ== + dependencies: + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/checkbox" "9.10.1" + "@dhis2-ui/chip" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/status-icon" "9.10.1" + "@dhis2-ui/tooltip" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/selector-bar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.11.0.tgz#a9ef657f0ecacce87e67e343ccbe60813067186c" - integrity sha512-7VqBu0GSk9By+5Z4B6R2lNEPHUyXjOWWV2fgD29jH8zj7Z65XffJS/A1da8M33uSFX3sstOkpyZVHo71vx0cAA== - dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" +"@dhis2-ui/selector-bar@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.10.1.tgz#6dbc1759ed17fb487b704e2f0d177601844b4cc8" + integrity sha512-K9z/rJML4owFYkrZ6uzpOAvtuJXQ5Thyo4Pb3vQGCM8ORbGKme4QewU8UA9AP4aiU5zDDJjZF1+K0ft+7ugITQ== + dependencies: + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" "@testing-library/react" "^12.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/sharing-dialog@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.11.0.tgz#9adf070335b45b99c718642a887e6f3bc8e3bcad" - integrity sha512-5LSZhO13dXZ5jOSpN2GlAlBfcZmRBrgye13cKvYgEWy+n1CWe4nJwQLYtfYoH5rItCBsjfS4/ouAFu6/koOPcg== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/notice-box" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/tab" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" +"@dhis2-ui/sharing-dialog@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.10.1.tgz#d73a7b2f013719b7abfc958078369d6c596c4d41" + integrity sha512-yvvF3zav5b8a5ZCTtWX0Clped4dvlR9OXnnurgZPLGcELFIQRnW1ttusVhBNGHIJfItCeX3vRYhB0a/j1sXAmw== + dependencies: + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/divider" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/menu" "9.10.1" + "@dhis2-ui/modal" "9.10.1" + "@dhis2-ui/notice-box" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/select" "9.10.1" + "@dhis2-ui/tab" "9.10.1" + "@dhis2-ui/tooltip" "9.10.1" + "@dhis2-ui/user-avatar" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" "@react-hook/size" "^2.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-10.0.3.tgz#4d772fdfc35c8e3d559afeaeff5a07015e5364bb" - integrity sha512-LZC+ALg1qYx4Zxl5uvlib0nGJ+eRihRULycUQasQq1UT+nIL/Dyf4Y7GJwQ3rdIy2gq9Sr4eDIhYsn+OBIhi9w== +"@dhis2-ui/status-icon@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.10.1.tgz#e23274968cd304d23770dca9970d5036c758ce53" + integrity sha512-l9H5eplY9Q/02ItoEDKG70z06lODG9Rc5jgOBQN8WS9K0U67Ux/BYcJuyXUGz77ai8C+LQru1A9Bq7Kug7zr6w== dependencies: - "@dhis2-ui/loader" "10.0.3" + "@dhis2-ui/loader" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.0.3" - "@dhis2/ui-icons" "10.0.3" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.11.0.tgz#2387a0ed48ecd9d09a76fd30ed249efa6df9ee00" - integrity sha512-EUEwH+Q3Z+Y0bdra94NmyqDyUz3gSOijEhIX3BPfk7mesvY9mLp87PvBaSfHJIHf1xywTI/Py067Et6MLPUR2w== +"@dhis2-ui/switch@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.10.1.tgz#886cb5955274526331e6fa07127c4d8f236403f7" + integrity sha512-ZcbCJJlv9VG8BuQQ0Hhw2JueJjbFuIm5tXozmC9GaTd2F2v1FDHsMJpIenY+RcgK/SWRbCF6iYdyONBw2nn29g== dependencies: - "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/required" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/switch@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.11.0.tgz#2eb848cbf0471375912ee48849d1beb949eedf45" - integrity sha512-norlPc5z/YCNVIHTqU/BpKii+c6biSAXV1Sv+wlfh2eXTa78+lFUNOG8RoO5lQCUmOC1bZd5+L1BjUwh6MlOVw== +"@dhis2-ui/tab@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.10.1.tgz#8e9b6d1b7610617981bbc24a02ff87b150a00c8d" + integrity sha512-SghJvw5EImrFB7yOlOtBqQX0N8w8y8OAivSIsqScF/ejTR8m7dSRrWXLBBawfo0ht6dOs9l0Fje3Ej0MU+40yA== dependencies: - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/tooltip" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tab@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.11.0.tgz#4e475d915aec266919d4c4fc73f58a6144312901" - integrity sha512-ijjxbxOeFe6iOQEZ/bICEjTDnq9PNkBSnO74rR/PImrPvsHUU+d2ZOSYWkh3TwFL9QQ76Vb9NwcAo6eSOGdVOw== +"@dhis2-ui/table@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.10.1.tgz#51c8e4973c1174edcf94627b3a5513340be85b12" + integrity sha512-nWSWN16EHnF1Q6UGP36P5xmYxxhcKPl706XLcBbNGbSULY4a90hXQJnCcuWAoulSgZtC7D7XhiwcD8diNY2Q1w== dependencies: - "@dhis2-ui/tooltip" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/table@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.11.0.tgz#4c37dc4f334ceb49e1d11a3c9839ee229f2e9bd9" - integrity sha512-qc2OtBe9LqDCci3wJM7y4JSA5S3AfubxnySMMJPPEo7jilb6aAEheYFKjfmRXdUP+GxMUdOh4hCUQ22LAG1i9A== +"@dhis2-ui/tag@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.10.1.tgz#8bad6d9e6f9ef3aa761bc98c3cbed9455261e633" + integrity sha512-iiZu51CQSBOWkkYk56iiVuzieFbHjUC55YDkJpHHb2QhgU+6LzacTltP3vOBWIw/BKaMWLkQjvf/XyjWHJd3/Q== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tag@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.11.0.tgz#f1c292d72a84e6e04cdbe4ae16d16ff95f28579a" - integrity sha512-FMN/1NmHyKUdFNdw2E7Bc1UnAFhyljGTwD3DXegY5ncEYBafWQjzLXyQtHJTlu58VfdBwwQ/nIG9qChJj6w2zQ== +"@dhis2-ui/text-area@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.10.1.tgz#b4e54872f85fa3825d8bfea0d2c7772e6a3b5c65" + integrity sha512-kTOXmANxFYR2+FO4ZrUnxOSxuQXcNcVSUTa/Em/X7cOzoqeDK5VeQ0HB3PnppFEMk3cBnbHTOlixlm8EwQQJ9Q== dependencies: + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/status-icon" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-icons" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/text-area@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.11.0.tgz#e3568e70f9b0ecd45f4e92820f59184db5fdda4b" - integrity sha512-UPTK0PKiicU0OjfyMcNCN8znlrGicUyMY2MoSC1n2Tck2S0JUaCbG4Daski8uCMdss/2ZIra/k6vlP/KWzlHzw== +"@dhis2-ui/tooltip@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.10.1.tgz#598008b4c8eedf397ad76c313f1c6ab121af6a84" + integrity sha512-2kbvbo319mR5NHbfwcL4cVndwE97VQXgsllOFXe++0ywGwwCqvo/uQDbA6Fpzdc5CfiFnGshMPbz4HAGiHB+9g== dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/portal" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tooltip@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.11.0.tgz#53095be4ebe458f0b8e22c55f50ddef7fea28255" - integrity sha512-zyGF3J0bpUC3JJM8WK9C+lm5x7fNGnzH0xrgYRP1TbcI/2RJNzlNsWr/pfNfHNqRqSwseai7Q2ssQWyADkuqPQ== +"@dhis2-ui/transfer@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.10.1.tgz#1c70b0a9be82d3b60202e3ff872ecb1456106df9" + integrity sha512-v09uS4XwOUBz/taPxA3R5lCIGQAVRDb1DFmZqTlSAA2/UES3SsyjFoEdITO0LGpJilSc8Zw7wVlsVbMRDC7JbA== dependencies: - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/intersection-detector" "9.10.1" + "@dhis2-ui/loader" "9.10.1" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/transfer@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.11.0.tgz#f5d445ea46ecad95c47f90ab61648b1b1082cbc7" - integrity sha512-sSmhqSKcuCZSXG4pgLTPNJuY/K8oSGg92x7sHXQfrLFbrnsSenD6ckJjnMt4hWXNHW3xPbG5jVlB+CHWKCLrYQ== +"@dhis2-ui/user-avatar@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.10.1.tgz#c0998148e52dedbe8f0da00e886c09726a4946c5" + integrity sha512-uGLzEl7C3/fjJ9A1/t5+Rw4fKaj7sh7tAMXGSKytBYOMHkTPEXCRK1jGrGGKP4+dJVJPqRBvyBGGd7bd7ZwGvQ== dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/intersection-detector" "9.11.0" - "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "9.10.1" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/user-avatar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.11.0.tgz#82bf405f33d912961ae7447820140e510907fa57" - integrity sha512-4mK1eYYwe54rCsoDxxEqHlSMDYm0G6Ls5UXKmgi07nGvUL9QM2gUEW8J/FPmQDgFcXiBKAZpAbu5yc7d48lIbg== +"@dhis2/app-adapter@10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-adapter/-/app-adapter-10.4.0.tgz#befb3e9ee09a4f2d064a6dc0c590bffaf5a7ca7c" + integrity sha512-dqjrK8FtshofMp4LzMV6J1Oj3c2/pyl6m+gOYx65Ynr7FPk20QybMNPEWnpmeWQbhI1iMf/OV/O6MzTiezfUfQ== dependencies: - "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2/app-adapter@10.5.0": - version "10.5.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-adapter/-/app-adapter-10.5.0.tgz#f27d6905e93a392ba2dfe5d31ec22e745f4d82ff" - integrity sha512-cPqY21QrcnSi8Kicn+TuP7HWPFMgKJ1BLMZOvPOSW/zpjzm2udZvp7LCO8qmsgCKvuMilvwVcL9Oeo/Sk9ISSA== - dependencies: - "@dhis2/pwa" "10.5.0" + "@dhis2/pwa" "10.4.0" moment "^2.24.0" -"@dhis2/app-runtime@^3.10.2", "@dhis2/app-runtime@^3.9.3": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.10.6.tgz#10add0b8a2e1de06777e6e78c681a3a8f15ba058" - integrity sha512-WfC+AHkw0V3V3/wyLPHoTyAf8i4btLl/R2nMBVs3NEXLwA9mekG/gXs7AEPnK2/p6FVoqXMDwJHEH2b8Iw4UFw== +"@dhis2/app-runtime@^3.10.0-alpha.2", "@dhis2/app-runtime@^3.10.2", "@dhis2/app-runtime@^3.9.3": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.10.2.tgz#e82639bd68234bdeaf2f6d3c256dcdfcdd267da2" + integrity sha512-GiftKk8ZTXlPElXAgVJn41Vj6E1vEGTPGrjrqU7j41ZTYsg+tUcCkISNt1woe5l7E+8+y+9Fy4bgqSsBOAEUvg== dependencies: - "@dhis2/app-service-alerts" "3.10.6" - "@dhis2/app-service-config" "3.10.6" - "@dhis2/app-service-data" "3.10.6" - "@dhis2/app-service-offline" "3.10.6" - "@dhis2/app-service-plugin" "3.10.6" + "@dhis2/app-service-alerts" "3.10.2" + "@dhis2/app-service-config" "3.10.2" + "@dhis2/app-service-data" "3.10.2" + "@dhis2/app-service-offline" "3.10.2" + "@dhis2/app-service-plugin" "3.10.2" -"@dhis2/app-service-alerts@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.10.6.tgz#47e65d7ed57a4bd801a513b0f71d0ed2839ea363" - integrity sha512-2r9IUBp5Z5zuSqjTEWpt+rx7tP5AqrtkPJ8ZVOKW5YBn1DB4bQ5ti9GOevHM4othr7Mrmt22UADPgfEkfc7XzQ== +"@dhis2/app-service-alerts@3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.10.2.tgz#0e07c3530606f81ab998a20f2c478600b6027a77" + integrity sha512-2IqaawnlOzYVJLBF2AKVQJ4cuxJNZD7FK0XE0XOv1WwFs70h6bp23MQueIJ/QHxLo7lamE0FC22m4diM4P0CuA== -"@dhis2/app-service-config@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.10.6.tgz#bf952156329ab48d6da407522c6e06072fdf896a" - integrity sha512-Z/rSBjCc8kP78QYhKNyGoCafGfwpqMDg8mV2x/H6CavgEicOa+qHX3bkKV6+fC9Sw2FnsWHRemxYRkgbW/BD3g== +"@dhis2/app-service-config@3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.10.2.tgz#be52676068e31cdb1fe3f8ddabb8153e1cd6e3e6" + integrity sha512-Crw7Tx4yg4qWw3qYxNCIye77IaY2HUYyDmDKPVVWzgmrcSGxpunv/NtsUg12pxrVfVLnqlH9L6AF9A6hO0afmw== -"@dhis2/app-service-data@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.10.6.tgz#2f3f522b4a5a8c8d531f8901cca502323e566042" - integrity sha512-9RH3Dn0shcVdF7itgKy9cK3yMEcyP5xXjNzYPGzWf+3q9aGlzjh22pHE4p+C9OV+SeVO2q+5GcNOk7rdZvS+Cg== +"@dhis2/app-service-data@3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.10.2.tgz#e94d45d87cab5e156decfe9e92e3153e5df68ba0" + integrity sha512-+ESLrVEDQKXBaQmpaCq78RonkqJM2BliykaO4QBeOc4ilWohaqYajue1Ntg4uV2KrdkCylBdMDwGYjsak0G7hg== dependencies: react-query "^3.13.11" -"@dhis2/app-service-offline@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.10.6.tgz#e1d83520bb292fc51b24eab65d05e1c9fa1e2ad6" - integrity sha512-179QXdUOFgPPIOhY5HD+C6GzzJDvhR8GW7jXT4LtjCeO/4EbA3r9sycyrYpLZL66GtpGHkeV5g4slxM1t+63cw== +"@dhis2/app-service-offline@3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.10.2.tgz#082279b7045e702c2eecda751d762225313156b0" + integrity sha512-bTp+CCRbyKt/0QADj0O6wLNWhi+6QDkjt2+sfpv3M8oKcftjaQDqedVoypZRA0nqvSdVL2ehtTzqMrrxu6jtZQ== dependencies: lodash "^4.17.21" -"@dhis2/app-service-plugin@3.10.6": - version "3.10.6" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.10.6.tgz#1c6792b6d051c4b3301d76d083c3364424140a83" - integrity sha512-um4ONieW+xpWfagt+QNF4ZtzzFpm8KeA9tlBomamOfhGIpi9mkCWtaY0Mw2IUWO+d0Uh4cfmeQV6w6jOX6xJzw== +"@dhis2/app-service-plugin@3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.10.2.tgz#09de64ee59017c86c8dab96a0d2ca0d915ae9d31" + integrity sha512-FqR6ILmvAXT2n1SzCZknT+5jJRdajg1dBegWAu3xqZXAntsM4wvFLCx6EtjS5LO2Kga9VZ+TJmVr2UFX1330CQ== dependencies: post-robot "^10.0.46" -"@dhis2/app-shell@10.5.0": - version "10.5.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-shell/-/app-shell-10.5.0.tgz#d8d56352147aee008bae2cbeeb4ede5e5936d80f" - integrity sha512-zXUPH/Frbq7gsd+XJ9lTwla9cTb1oUOwmakJyN+nteTPY4IihpNR9qpwixpH/J9qSW68owhl8NR+ZLLm3dHtsw== +"@dhis2/app-shell@10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-shell/-/app-shell-10.4.0.tgz#66cf2148bc2e92f741f7ef0dd08ef955f2c40707" + integrity sha512-XROGP/co8IZJF//xHUY/m6EZhIh+6g4Wk/ItTgrkYnBbz69JWXB2Zo/M/b2nx3TKOKbz9FeVXVeH7liWHKkaug== dependencies: - "@dhis2/app-adapter" "10.5.0" - "@dhis2/app-runtime" "^3.10.2" + "@dhis2/app-adapter" "10.4.0" + "@dhis2/app-runtime" "^3.10.0-alpha.2" "@dhis2/d2-i18n" "^1.1.1" - "@dhis2/pwa" "10.5.0" + "@dhis2/pwa" "10.4.0" "@dhis2/ui" "^8.12.3" classnames "^2.2.6" moment "^2.29.1" @@ -2506,9 +2340,9 @@ typescript "^3.6.3" "@dhis2/cli-app-scripts@^10.4.0": - version "10.5.0" - resolved "https://registry.yarnpkg.com/@dhis2/cli-app-scripts/-/cli-app-scripts-10.5.0.tgz#d967963a9ea6fecfc64944c575fb5e1916ef7b5c" - integrity sha512-3FSFLLLWYQVsDGx4EsdwwiOgtbBO1+RYacvuElTUbXsgUsqs8cZafb3kBmXeb/08jANLpynJGs0xtWic+90iIQ== + version "10.4.0" + resolved "https://registry.yarnpkg.com/@dhis2/cli-app-scripts/-/cli-app-scripts-10.4.0.tgz#3a80ccc7c10b0804e8d76f7df40ece48d30d5f17" + integrity sha512-QMx+5UEEEb0AELzeZ5oZcxb8dv0hpzHS3/ily67oRchVdGB1K1stl0MwQF7CdbCS4ejGtU+2c5ODWFoBD0cWFA== dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-class-properties" "^7.8.3" @@ -2517,7 +2351,7 @@ "@babel/preset-env" "^7.14.7" "@babel/preset-react" "^7.0.0" "@babel/preset-typescript" "^7.6.0" - "@dhis2/app-shell" "10.5.0" + "@dhis2/app-shell" "10.4.0" "@dhis2/cli-helpers-engine" "^3.2.0" "@jest/core" "^27.0.6" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.4" @@ -2575,9 +2409,9 @@ yargs "^13.1.0" "@dhis2/cli-helpers-engine@^3.0.0", "@dhis2/cli-helpers-engine@^3.2.0", "@dhis2/cli-helpers-engine@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-3.2.2.tgz#e3ab24d3da46c7ecb79a31cb332548ebdac72d1c" - integrity sha512-zMBm33WzYbjmb/eqIfpZS1ZZWbFaRHoHZoVhKWvOX0TDAEmdPtEmfG5fc5keV3CU9lDBIyXCfmca0KJeNvs5/w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-3.2.1.tgz#80d3f5b50ae223e5ed3f91550c81c30c3d7741a7" + integrity sha512-8VRM7KMuiGudogiKmpD7dfjp4Y9aSmmh1dGnTq57kdIQLw/o3CqGqz61BSw41SN/t9hxZvYAy8fBaujPAgL1sQ== dependencies: chalk "^3.0.0" cross-spawn "^7.0.3" @@ -2590,9 +2424,9 @@ yargs "^13.1.0" "@dhis2/cli-style@^10.4.1": - version "10.7.3" - resolved "https://registry.yarnpkg.com/@dhis2/cli-style/-/cli-style-10.7.3.tgz#38cd2b6672fca44d9e72c64583ce7550e123686a" - integrity sha512-uqlJwV2hegPNgxpoqWH5nZhqBSvPH2GJ0Uoeaw7OpiHKFauOFUTuUiy6MGwUZqtgEAbmcq0DbyDexNQ/UqHQLQ== + version "10.5.1" + resolved "https://registry.yarnpkg.com/@dhis2/cli-style/-/cli-style-10.5.1.tgz#cf2df63b5eb203e3e3cec867bb9ba53b0d6f2ed6" + integrity sha512-epMQFxX+A7HzivXMqX5pHSJqP/CRw94HHWOZ+ab8Ug930Y3gF8YG1QtXgfvdMFz7u+LfQlLujj+DgVa/6W5GTQ== dependencies: "@commitlint/cli" "^12.1.4" "@commitlint/config-conventional" "^13.1.0" @@ -2603,20 +2437,14 @@ eslint-config-prettier "^8.3.0" eslint-plugin-import "^2.22.1" eslint-plugin-react "^7.31.10" - eslint-plugin-react-hooks "^4.6.2" fast-glob "^3.2.5" find-up "^5.0.0" fs-extra "^10.0.0" husky "^7.0.2" micromatch "^4.0.4" perfy "^1.1.5" - postcss "^8.4.38" - postcss-styled-jsx "^1.0.1" - postcss-syntax "^0.36.2" prettier "^2.4.1" semver "^7.3.5" - stylelint "^16.3.1" - stylelint-use-logical "^2.1.2" yargs "^16.2.0" "@dhis2/cli-utils-cypress@^9.0.2": @@ -2629,16 +2457,16 @@ jscodeshift "^0.11.0" "@dhis2/cypress-commands@^10.0.3": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-commands/-/cypress-commands-10.0.6.tgz#2ef6a5bc0a737703993f63b9465d00727a1d0ff6" - integrity sha512-TNmOO5sKcz20BVcx/lEAJU0WiKX7OUZbKfAJfPzAPo875RU247YTH91FheCEPoG0o1dZrQ6IMNDhurdBV+daHQ== + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2/cypress-commands/-/cypress-commands-10.0.3.tgz#dae315cc839ff57965f307c2d2d34277c19592d4" + integrity sha512-K+GJtnzZGg62Qe67d/5Fl662s5VXnvhB55TTDoTcL/7Euawxyo1FC7ZrLXJExM2C1z0ic5WfZ7MH6EUsS6OfqQ== dependencies: jscodeshift "^0.11.0" "@dhis2/cypress-plugins@^10.0.3": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-plugins/-/cypress-plugins-10.0.6.tgz#d405f96d0de2c58b77931ef5fd212c7c263cfd49" - integrity sha512-7NjQrXPT2K6OiabVu58+ljrGpdOOe78yL1LclQlmIJRs9gT2dcWB9RrgeGSSXaY5KCeuXYG/unkF15a1u1FKbw== + version "10.0.3" + resolved "https://registry.yarnpkg.com/@dhis2/cypress-plugins/-/cypress-plugins-10.0.3.tgz#83403aca333e2b356f7ea92c272d3ca00d00276d" + integrity sha512-MYIkWI/kCR4hoqvD+spmbXcdoNL/EFX3HZuyRCGUErj5ChJmyWX7jQtDq/twd7GFRma0IqwTtOwaiKAxLRv/Nw== "@dhis2/d2-i18n@^1.1.0", "@dhis2/d2-i18n@^1.1.1", "@dhis2/d2-i18n@^1.1.3": version "1.1.3" @@ -2718,10 +2546,10 @@ recompose "^0.26.0" rxjs "^5.5.7" -"@dhis2/multi-calendar-dates@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@dhis2/multi-calendar-dates/-/multi-calendar-dates-2.0.0.tgz#febf04f873670960804d38c9ebaa1cadf8050db3" - integrity sha512-pxu81kkkh70tB+CyAub41ulpNJPHyxDGwH2pdcc+NUqrKu4OTQr5ScdCBL2MndShrEKj9J6qj9zKVagvvymH5w== +"@dhis2/multi-calendar-dates@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@dhis2/multi-calendar-dates/-/multi-calendar-dates-1.2.3.tgz#ef36bc80b34eaaa7f7cefa51b443528c019ff2d2" + integrity sha512-K3E9yAH/SPXi1O7RWuK7bznYTa1v3x4Ys0ihpMWnKH++OLMx76yK/1H1m9v7NgQvMry29ATQMJh0n/vJSg+EpA== dependencies: "@dhis2/d2-i18n" "^1.1.3" "@js-temporal/polyfill" "0.4.3" @@ -2732,10 +2560,10 @@ resolved "https://registry.yarnpkg.com/@dhis2/prop-types/-/prop-types-3.1.2.tgz#65b8ad2da8cd2f72bc8b951049a6c9d1b97af3e9" integrity sha512-eM0jjLOWvtXWqSFp5YC4DHFpkP8Y1D2eUwGV7MBWjni+o27oesVan+oT7WHeOeLdlAd4acRJrnaaAyB4Ck1wGQ== -"@dhis2/pwa@10.5.0": - version "10.5.0" - resolved "https://registry.yarnpkg.com/@dhis2/pwa/-/pwa-10.5.0.tgz#356193d8fb3b151ec4e258b544c75b8a8b20cf80" - integrity sha512-+Yzm5us8rDbRCtsziriWAGLhzm+ADEqg96MMaCBbzkxYJ6L4axB3f24Y/pHMlgeXM7xtG8grHAHqo/kbz5LFSA== +"@dhis2/pwa@10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@dhis2/pwa/-/pwa-10.4.0.tgz#1b21b79b1a8c85aed9c73e4655e1bb1f4d3d3d95" + integrity sha512-iNq4imbSBnIv2YBkrtljsAHV/Q934ZxZVfUiffGWAAiS9gqhrD1iQ9dhCRl4nq/X71sIRR28aK7CDlwql31OrQ== dependencies: idb "^6.0.0" workbox-core "^6.1.5" @@ -2743,110 +2571,93 @@ workbox-routing "^6.1.5" workbox-strategies "^6.1.5" -"@dhis2/ui-constants@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-10.0.3.tgz#c2703847dc94d727a0e7d7bb03f4f3de29f1d543" - integrity sha512-c2j2JPF/ipyg/S4yPbPa5giU01J9hNulRio9KKJ7TuAufiv7lkwy2mFRnJhHYBPD4jEKVtkSSKl1DTcKAgkeaA== +"@dhis2/ui-constants@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.10.1.tgz#f9491b1a5af1483b85aa43b120e4f782e15eb33d" + integrity sha512-FB1AgraRWC35lpEPAZvuJJmFqi69xwJBe3gIwHaFs8LHA9bah4yt67E8VRHvQWDrGQgyUU8uirXmG9jLQ/Fm3Q== dependencies: prop-types "^15.7.2" -"@dhis2/ui-constants@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.11.0.tgz#0f41339dca04c95d026c278d17ff795cbe500020" - integrity sha512-uN0vH+HXtnVYmFGj0fARrsouKxMTEKHmq1aGuIbxK49+AcnMtxUirqXwuYx6wc/lJTl+MqdHKGqwTgJvEJ3TGQ== - dependencies: - prop-types "^15.7.2" - -"@dhis2/ui-forms@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.11.0.tgz#4b71be63e5e671dff29a49a9cf906375d2d7ce2d" - integrity sha512-A/gL3QJByckMHeSAnLCpU5FcvBp3l+H16YpJXhNYYHXistaxPfSCwzO+VITl+MBJCi30umbe4hN/rVWjiTw60Q== - dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/file-input" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/radio" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/switch" "9.11.0" - "@dhis2-ui/text-area" "9.11.0" +"@dhis2/ui-forms@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.10.1.tgz#52cfc6c8d0feab615749217a37b882eea70eeeff" + integrity sha512-9LEECuQaVG6IEj4TJRgV1DvCTFZYMd20uoAn0aA8Zz1kBU+agk4OwSXlBR04A/tovD8tK32AyFEUZalkRN2oEA== + dependencies: + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/checkbox" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/file-input" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/radio" "9.10.1" + "@dhis2-ui/select" "9.10.1" + "@dhis2-ui/switch" "9.10.1" + "@dhis2-ui/text-area" "9.10.1" "@dhis2/prop-types" "^3.1.2" classnames "^2.3.1" final-form "^4.20.2" prop-types "^15.7.2" react-final-form "^6.5.3" -"@dhis2/ui-icons@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.0.3.tgz#70666c96943fdcafed99afaaaae00a16debc2e3a" - integrity sha512-ax7b+UDdGhkY2MJ/dndEs18N0qxi4IzFlu6VTF8OoGTvBflyf4KkG6jHLQY4nfdHzM5O5uY2jCETdfwWFVoUNg== - -"@dhis2/ui-icons@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.11.0.tgz#f9ca73d12b26ba3dd1a1ccb381cc3fc39ec15044" - integrity sha512-1XTls+m5xyQKDTgsQ+ehtLOgUdHqIAmKuwSkTf9/LtFpa/Wt2t9waKI7KIZYUL1MhPXSd0d9k2eEClPhseH+4Q== +"@dhis2/ui-icons@9.10.1": + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.10.1.tgz#d930ecf48e17969ba51617ff2880133266a77a46" + integrity sha512-OUnShRkXRewIfEq0EPEXR1Phc1PTZOMDATkNUiYr+6Zy1IOxENa1dmeN58mAXlZIxxFH6Fd5wQIqax/iqz40PQ== "@dhis2/ui@^8.12.3", "@dhis2/ui@^9.10.1": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.11.0.tgz#da8d4791ca7bc6ceb7d681ce6b743f51dc8987a3" - integrity sha512-vO1GhzbhOHJBVPLjFHyxH4JTbcf5z8xas5iyoRry+tUzDB81CGRB4Hz9C73w8Kw6lyOicrDP/B/keKk9LpDLSQ== - dependencies: - "@dhis2-ui/alert" "9.11.0" - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/calendar" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/chip" "9.11.0" - "@dhis2-ui/cover" "9.11.0" - "@dhis2-ui/css" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/file-input" "9.11.0" - "@dhis2-ui/header-bar" "9.11.0" - "@dhis2-ui/help" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/intersection-detector" "9.11.0" - "@dhis2-ui/label" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/legend" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/logo" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/node" "9.11.0" - "@dhis2-ui/notice-box" "9.11.0" - "@dhis2-ui/organisation-unit-tree" "9.11.0" - "@dhis2-ui/pagination" "9.11.0" - "@dhis2-ui/popover" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" - "@dhis2-ui/radio" "9.11.0" - "@dhis2-ui/required" "9.11.0" - "@dhis2-ui/segmented-control" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/selector-bar" "9.11.0" - "@dhis2-ui/sharing-dialog" "9.11.0" - "@dhis2-ui/switch" "9.11.0" - "@dhis2-ui/tab" "9.11.0" - "@dhis2-ui/table" "9.11.0" - "@dhis2-ui/tag" "9.11.0" - "@dhis2-ui/text-area" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" - "@dhis2-ui/transfer" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-forms" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + version "9.10.1" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.10.1.tgz#66b8384f22eb44313fd1f34c76c8615ec5b91e76" + integrity sha512-Zb5cwoNEfi5VGySow8WA+3LE1VD9mdDMK35Fj4Wg+Q3nL9JknxUUl2cLafZaTqjytyHE2AIel/n5RyqlYtun+Q== + dependencies: + "@dhis2-ui/alert" "9.10.1" + "@dhis2-ui/box" "9.10.1" + "@dhis2-ui/button" "9.10.1" + "@dhis2-ui/calendar" "9.10.1" + "@dhis2-ui/card" "9.10.1" + "@dhis2-ui/center" "9.10.1" + "@dhis2-ui/checkbox" "9.10.1" + "@dhis2-ui/chip" "9.10.1" + "@dhis2-ui/cover" "9.10.1" + "@dhis2-ui/css" "9.10.1" + "@dhis2-ui/divider" "9.10.1" + "@dhis2-ui/field" "9.10.1" + "@dhis2-ui/file-input" "9.10.1" + "@dhis2-ui/header-bar" "9.10.1" + "@dhis2-ui/help" "9.10.1" + "@dhis2-ui/input" "9.10.1" + "@dhis2-ui/intersection-detector" "9.10.1" + "@dhis2-ui/label" "9.10.1" + "@dhis2-ui/layer" "9.10.1" + "@dhis2-ui/legend" "9.10.1" + "@dhis2-ui/loader" "9.10.1" + "@dhis2-ui/logo" "9.10.1" + "@dhis2-ui/menu" "9.10.1" + "@dhis2-ui/modal" "9.10.1" + "@dhis2-ui/node" "9.10.1" + "@dhis2-ui/notice-box" "9.10.1" + "@dhis2-ui/organisation-unit-tree" "9.10.1" + "@dhis2-ui/pagination" "9.10.1" + "@dhis2-ui/popover" "9.10.1" + "@dhis2-ui/popper" "9.10.1" + "@dhis2-ui/portal" "9.10.1" + "@dhis2-ui/radio" "9.10.1" + "@dhis2-ui/required" "9.10.1" + "@dhis2-ui/segmented-control" "9.10.1" + "@dhis2-ui/select" "9.10.1" + "@dhis2-ui/selector-bar" "9.10.1" + "@dhis2-ui/sharing-dialog" "9.10.1" + "@dhis2-ui/switch" "9.10.1" + "@dhis2-ui/tab" "9.10.1" + "@dhis2-ui/table" "9.10.1" + "@dhis2-ui/tag" "9.10.1" + "@dhis2-ui/text-area" "9.10.1" + "@dhis2-ui/tooltip" "9.10.1" + "@dhis2-ui/transfer" "9.10.1" + "@dhis2-ui/user-avatar" "9.10.1" + "@dhis2/ui-constants" "9.10.1" + "@dhis2/ui-forms" "9.10.1" + "@dhis2/ui-icons" "9.10.1" prop-types "^15.7.2" -"@dual-bundle/import-meta-resolve@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" - integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== - "@emotion/is-prop-valid@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -2859,231 +2670,121 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -3132,9 +2833,9 @@ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" @@ -3432,42 +3133,42 @@ react-transition-group "^1.1.3" recompose "^0.22.0" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: - "@jridgewell/set-array" "^1.2.1" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -3481,9 +3182,9 @@ tslib "^2.3.1" "@jsdoc/salty@^0.2.1": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.8.tgz#8d29923a9429694a437a50ab75004b576131d597" - integrity sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg== + version "0.2.7" + resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.7.tgz#98ddce519fd95d7bee605a658fabf6e8cbf7556d" + integrity sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg== dependencies: lodash "^4.17.21" @@ -3493,9 +3194,9 @@ integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== "@ls-lint/ls-lint@^1.10.0": version "1.11.2" @@ -3951,9 +3652,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" @@ -3995,15 +3696,7 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" - integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/eslint@^7.29.0 || ^8.4.1": +"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": version "8.56.11" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" integrity sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q== @@ -4022,9 +3715,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -4067,9 +3760,9 @@ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.15" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" - integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== dependencies: "@types/node" "*" @@ -4116,9 +3809,9 @@ indefinite-observable "^1.0.1" "@types/linkify-it@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" - integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" + integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== "@types/markdown-it@^12.2.3": version "12.2.3" @@ -4129,9 +3822,14 @@ "@types/mdurl" "*" "@types/mdurl@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" - integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" + integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== "@types/mime@^1": version "1.3.5" @@ -4151,16 +3849,16 @@ "@types/node" "*" "@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== + version "20.10.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.7.tgz#40fe8faf25418a75de9fe68a8775546732a3a901" + integrity sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg== dependencies: - undici-types "~6.13.0" + undici-types "~5.26.4" "@types/node@^16.18.39": - version "16.18.104" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.104.tgz#33d5f4886c54133af0ff02445e57c5254025ee53" - integrity sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ== + version "16.18.70" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.70.tgz#d4c819be1e9f8b69a794d6f2fd929d9ff76f6d4b" + integrity sha512-8eIk20G5VVVQNZNouHjLA2b8utE2NvGybLjMaF4lyhA9uhGwnmXF8o+icdXKGSQSNANJewXva/sFUoZLwAaYAg== "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -4178,9 +3876,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/q@^1.5.1": version "1.5.8" @@ -4188,9 +3886,9 @@ integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/range-parser@*": version "1.2.7" @@ -4222,20 +3920,21 @@ "@types/react" "*" "@types/react@*": - 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== + version "18.2.47" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" + integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== dependencies: "@types/prop-types" "*" + "@types/scheduler" "*" csstype "^3.0.2" "@types/react@^17": - version "17.0.80" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" - integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== + version "17.0.74" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.74.tgz#ea93059a55e5cfc7a76e7712fe8db5317dd29ee3" + integrity sha512-nBtFGaeTMzpiL/p73xbmCi00SiCQZDTJUk9ZuHOLtil3nI+y7l269LHkHIAYpav99ZwGnPJzuJsJpfLXjiQ52g== dependencies: "@types/prop-types" "*" - "@types/scheduler" "^0.16" + "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -4250,7 +3949,7 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@^0.16": +"@types/scheduler@*": version "0.16.8" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== @@ -4276,13 +3975,13 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: "@types/http-errors" "*" + "@types/mime" "*" "@types/node" "*" - "@types/send" "*" "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -4322,9 +4021,9 @@ integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== "@types/ws@^8.5.5": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" @@ -4341,9 +4040,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" @@ -4859,14 +4558,14 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.0, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" + fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" + uri-js "^4.2.2" ansi-align@^3.0.0: version "3.0.1" @@ -5105,27 +4804,25 @@ array-unique@^0.3.2: integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.filter@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz#bef83fde8a36a14d3de988c43563e0f5249962bf" - integrity sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-array-method-boxes-properly "^1.0.0" - es-object-atoms "^1.0.0" is-string "^1.0.7" array.prototype.find@^2.1.1, array.prototype.find@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.2.3.tgz#675a233dbcd9b65ecf1fb3f915741aebc45461e6" - integrity sha512-fO/ORdOELvjbbeIfZfzrXFMhYHGofRGqd+am9zm3tZ4GlJINj/pA2eITyfd65Vg6+ZbHd/Cys7stpoRSWtQFdA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.2.2.tgz#e862cf891e725d8f2a10e5e42d750629faaabd32" + integrity sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" array.prototype.findlast@^1.2.5: version "1.2.5" @@ -5140,16 +4837,15 @@ array.prototype.findlast@^1.2.5: es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -5172,16 +4868,14 @@ array.prototype.flatmap@^1.3.2: es-shim-unscopables "^1.0.0" array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + version "1.0.6" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" + integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" is-string "^1.0.7" array.prototype.tosorted@^1.1.4: @@ -5305,15 +4999,15 @@ author-regex@^1.0.0: integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== autoprefixer@^10.4.13: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.0.0" postcss-value-parser "^4.2.0" autosuggest-highlight@^3.3.4: @@ -5336,9 +5030,9 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.1.tgz#bb5f8b8a20739f6ae1caeaf7eea2c7913df8048e" - integrity sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== axe-core@^4.9.1: version "4.10.0" @@ -5353,11 +5047,11 @@ axios@^0.25.0: follow-redirects "^1.14.7" axios@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.3.tgz#a1125f2faf702bc8e8f2104ec3a76fab40257d85" - integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: - follow-redirects "^1.15.6" + follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -5500,44 +5194,44 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-module-resolver@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz#cdeac5d4aaa3b08dd1ac23ddbf516660ed2d293e" - integrity sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg== + version "5.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" + integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== dependencies: - find-babel-config "^2.1.1" - glob "^9.3.3" + find-babel-config "^2.0.0" + glob "^8.0.3" pkg-up "^3.1.0" reselect "^4.1.7" - resolve "^1.22.8" + resolve "^1.22.1" babel-plugin-named-asset-import@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== +babel-plugin-polyfill-corejs2@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== +babel-plugin-polyfill-corejs3@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== +babel-plugin-polyfill-regenerator@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" babel-plugin-react-require@^3.1.3: version "3.1.3" @@ -5664,11 +5358,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -balanced-match@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" - integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== - base64-arraybuffer-es6@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz#dbe1e6c87b1bf1ca2875904461a7de40f21abc86" @@ -5735,9 +5424,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3: version "4.1.0" @@ -5853,12 +5542,12 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - fill-range "^7.1.1" + fill-range "^7.0.1" brcast@^3.0.1: version "3.0.2" @@ -5884,14 +5573,14 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" update-browserslist-db "^1.1.0" bser@2.1.1: @@ -6040,10 +5729,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: + version "1.0.30001644" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz#bcd4212a7a03bdedba1ea850b8a72bfe4bec2395" + integrity sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw== capital-case@^1.0.4: version "1.0.4" @@ -6168,9 +5857,9 @@ cheerio@^1.0.0-rc.3: parse5-htmlparser2-tree-adapter "^7.0.0" chokidar@^3.3.0, chokidar@^3.4.2, chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -6188,9 +5877,9 @@ chownr@^1.1.4: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -6203,9 +5892,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== class-autobind@^0.1.4: version "0.1.4" @@ -6256,7 +5945,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@0.6.3: +cli-table3@0.6.3, cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== @@ -6265,15 +5954,6 @@ cli-table3@0.6.3: optionalDependencies: "@colors/colors" "1.5.0" -cli-table3@~0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - cli-table@^0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" @@ -6431,7 +6111,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.9.1, colord@^2.9.3: +colord@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== @@ -6691,17 +6371,17 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" - integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" + integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== dependencies: - browserslist "^4.23.3" + browserslist "^4.22.2" core-js-pure@^3.23.3: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.38.0.tgz#bc802cd152e33d5b0ec733b656c71cb847cac701" - integrity sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ== + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.0.tgz#4660033304a050215ae82e476bd2513a419fbb34" + integrity sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew== core-js@2.5.7, core-js@^1.0.0, core-js@^2.4.0, core-js@^3.19.2, core-js@^3.6.4: version "2.5.7" @@ -6750,16 +6430,6 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: parse-json "^5.2.0" path-type "^4.0.0" -cosmiconfig@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -6836,11 +6506,6 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== -css-functions-list@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" - integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== - css-has-pseudo@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" @@ -6949,14 +6614,6 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-tree@^2.3.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-vendor@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" @@ -7232,9 +6889,9 @@ date-fns@^2.30.0: "@babel/runtime" "^7.21.0" dayjs@^1.10.4: - version "1.11.12" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" - integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== debounce@^1.1.0: version "1.2.1" @@ -7248,10 +6905,10 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -7449,9 +7106,9 @@ detect-port-alt@^1.1.6: debug "^2.6.0" detect-port@^1.3.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" - integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== dependencies: address "^1.0.1" debug "4" @@ -7817,10 +7474,10 @@ ejs@^3.1.5, ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz#03bfdf422bdd2c05ee2657efedde21264a1a566b" - integrity sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA== +electron-to-chromium@^1.4.820: + version "1.5.3" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz#032bbb8661c0449656fd896e805c8f7150229a0f" + integrity sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA== emittery@^0.10.2: version "0.10.2" @@ -7931,45 +7588,40 @@ entities@~2.1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - enzyme-adapter-react-16@^1.15.6: - version "1.15.8" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.8.tgz#1aecb5daadaae33d32c5b8b78566d7cf45dc49d8" - integrity sha512-uYGC31eGZBp5nGsr4nKhZKvxGQjyHGjS06BJsUlWgE29/hvnpgCsT1BJvnnyny7N3GIIVyxZ4O9GChr6hy2WQA== + version "1.15.7" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz#a737e6d8e2c147e9da5acf957755be7634f76201" + integrity sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw== dependencies: - enzyme-adapter-utils "^1.14.2" - enzyme-shallow-equal "^1.0.7" - hasown "^2.0.0" - object.assign "^4.1.5" - object.values "^1.1.7" + enzyme-adapter-utils "^1.14.1" + enzyme-shallow-equal "^1.0.5" + has "^1.0.3" + object.assign "^4.1.4" + object.values "^1.1.5" prop-types "^15.8.1" react-is "^16.13.1" react-test-renderer "^16.0.0-0" - semver "^5.7.2" + semver "^5.7.0" -enzyme-adapter-utils@^1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.2.tgz#1d012e6261accbe7d406db098bb4d8dfdce8c003" - integrity sha512-1ZC++RlsYRaiOWE5NRaF5OgsMt7F5rn/VuaJIgc7eW/fmgg8eS1/Ut7EugSPPi7VMdWMLcymRnMF+mJUJ4B8KA== +enzyme-adapter-utils@^1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz#f30db15dafc22e0ccd44f5acc8d93be29218cdcf" + integrity sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ== dependencies: airbnb-prop-types "^2.16.0" - function.prototype.name "^1.1.6" - hasown "^2.0.0" - object.assign "^4.1.5" - object.fromentries "^2.0.7" + function.prototype.name "^1.1.5" + has "^1.0.3" + object.assign "^4.1.4" + object.fromentries "^2.0.5" prop-types "^15.8.1" - semver "^6.3.1" + semver "^5.7.1" -enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz#4e3aa678022387a68e6c47aff200587851885b5e" - integrity sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg== +enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz#5528a897a6ad2bdc417c7221a7db682cd01711ba" + integrity sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg== dependencies: - hasown "^2.0.0" + has "^1.0.3" object-is "^1.1.5" enzyme@^3.11.0: @@ -8024,7 +7676,7 @@ error-stack-parser@^2.0.6, error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -8129,9 +7781,9 @@ es-iterator-helpers@^1.0.19: safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== es-object-atoms@^1.0.0: version "1.0.0" @@ -8140,7 +7792,7 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.1, es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -8165,6 +7817,133 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.23: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + esbuild@^0.17.18: version "0.17.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" @@ -8193,35 +7972,6 @@ esbuild@^0.17.18: "@esbuild/win32-ia32" "0.17.19" "@esbuild/win32-x64" "0.17.19" -esbuild@^0.19.4: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -8361,9 +8111,9 @@ eslint-import-resolver-webpack@^0.13.2: semver "^5.7.2" eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -8448,7 +8198,7 @@ eslint-plugin-jsx-a11y@^6.5.1: safe-regex-test "^1.0.3" string.prototype.includes "^2.0.0" -eslint-plugin-react-hooks@4.6.2, eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.2: +eslint-plugin-react-hooks@4.6.2, eslint-plugin-react-hooks@^4.3.0: version "4.6.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== @@ -8929,7 +8679,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: +fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -8950,20 +8700,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== - -fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== dependencies: reusify "^1.0.4" @@ -9034,13 +8774,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-entry-cache@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.0.0.tgz#4478e7ceaa5191fa9676a2daa7030211c31b1e7e" - integrity sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw== - dependencies: - flat-cache "^5.0.0" - file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -9087,10 +8820,10 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" @@ -9119,12 +8852,12 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-babel-config@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.1.1.tgz#93703fc8e068db5e4c57592900c5715dd04b7e5b" - integrity sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA== +find-babel-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" + integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== dependencies: - json5 "^2.2.3" + json5 "^2.1.1" path-exists "^4.0.0" find-cache-dir@^2.0.0: @@ -9197,18 +8930,10 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flat-cache@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-5.0.0.tgz#26c4da7b0f288b408bb2b506b2cb66c240ddf062" - integrity sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ== - dependencies: - flatted "^3.3.1" - keyv "^4.5.4" - -flatted@^3.2.9, flatted@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== flow-bin@^0.132.0: version "0.132.0" @@ -9216,9 +8941,9 @@ flow-bin@^0.132.0: integrity sha512-S1g/vnAyNaLUdajmuUHCMl30qqye12gS6mr4LVyswf1k+JDF4efs6SfKmptuvnpitF3LGCVf0TIffChP8ljwnw== flow-parser@0.*: - version "0.243.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.243.0.tgz#4a55047035a4fa0fa7215348b9d7b4ea276abb04" - integrity sha512-HCDBfH+kZcY5etWYeAqatjW78gkIryzb9XixRsA8lGI1uyYc7aCpElkkO4H+KIpoyQMiY0VAZPI4cyac3wQe8w== + version "0.226.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.226.0.tgz#d552ab6762342e0e2b112fc937dd70b59e5e5d05" + integrity sha512-YlH+Y/P/5s0S7Vg14RwXlJMF/JsGfkG7gcKB/zljyoqaPNX9YVsGzx+g6MLTbhZaWbPhs4347aTpmSb9GgiPtw== flush-write-stream@^1.0.2: version "1.1.1" @@ -9228,7 +8953,7 @@ flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.15.6: +follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.15.4: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -9253,9 +8978,9 @@ for-own@^0.1.4: for-in "^1.0.1" foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -9382,9 +9107,9 @@ fs-mkdirp-stream@^1.0.0: through2 "^2.0.3" fs-monkey@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" - integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" + integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== fs.realpath@^1.0.0: version "1.0.0" @@ -9401,7 +9126,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.2, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.2, function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -9454,7 +9179,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -9629,15 +9354,16 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.3.3: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" glob@~7.1.1: version "7.1.7" @@ -9699,12 +9425,11 @@ globals@^9.18.0: integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" + define-properties "^1.1.3" globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: version "11.1.0" @@ -9718,11 +9443,6 @@ globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== - globule@^1.0.0: version "1.3.4" resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" @@ -10005,9 +9725,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== html-escaper@^2.0.0: version "2.0.2" @@ -10027,11 +9747,6 @@ html-minifier-terser@^6.0.2: relateurl "^0.2.7" terser "^5.10.0" -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - html-webpack-plugin@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" @@ -10187,9 +9902,9 @@ husky@^8.0.1: integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436" - integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== i18next-conv@^9: version "9.2.1" @@ -10282,10 +9997,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +ignore@^5.1.8, ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== immer@^9.0.7: version "9.0.21" @@ -10316,9 +10031,9 @@ import-lazy@^2.1.0: integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -10427,9 +10142,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-absolute@^1.0.0: version "1.0.0" @@ -10521,11 +10236,11 @@ is-ci@^3.0.0: ci-info "^3.2.0" is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - hasown "^2.0.2" + hasown "^2.0.0" is-data-descriptor@^1.0.1: version "1.0.1" @@ -10679,10 +10394,10 @@ is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-map@^2.0.2, is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-module@^1.0.0: version "1.0.0" @@ -10774,11 +10489,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -10819,10 +10529,10 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.2, is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" @@ -10901,10 +10611,10 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== is-weakref@^1.0.2: version "1.0.2" @@ -10913,13 +10623,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -11036,9 +10746,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -11064,9 +10774,9 @@ jackspeak@^3.1.2: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" @@ -11561,9 +11271,9 @@ jiti@^1.20.0, jiti@^1.21.0: integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== joi@^17.11.0: - version "17.13.3" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" - integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + version "17.12.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" + integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -11780,7 +11490,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: +json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -12046,7 +11756,7 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -keyv@^4.5.3, keyv@^4.5.4: +keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -12089,11 +11799,6 @@ klona@^2.0.4, klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== -known-css-properties@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.34.0.tgz#ccd7e9f4388302231b3f174a8b1d5b1f7b576cea" - integrity sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ== - knuth-shuffle-seeded@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz#01f1b65733aa7540ee08d8b0174164d22081e4e1" @@ -12102,9 +11807,9 @@ knuth-shuffle-seeded@^1.0.6: seed-random "~2.2.0" language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.9: version "1.0.9" @@ -12121,9 +11826,9 @@ latest-version@^5.0.0: package-json "^6.3.0" launch-editor@^2.6.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" - integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -12256,9 +11961,9 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: json5 "^2.1.2" loader-utils@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" - integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== locate-path@^2.0.0: version "2.0.0" @@ -12607,12 +12312,12 @@ marked@^4.0.10: integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== match-sorter@^6.0.2: - version "6.3.4" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" - integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== + version "6.3.1" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" + integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== dependencies: - "@babel/runtime" "^7.23.8" - remove-accents "0.5.0" + "@babel/runtime" "^7.12.5" + remove-accents "0.4.2" material-ui@^0.20.0: version "0.20.2" @@ -12636,21 +12341,11 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -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== - mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" @@ -12678,11 +12373,6 @@ memory-fs@^0.2.0: resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== -meow@^13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" - integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== - meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -12758,12 +12448,12 @@ micromatch@^3.1.10: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.3" + braces "^3.0.2" picomatch "^2.3.1" microseconds@0.2.0: @@ -12771,16 +12461,11 @@ microseconds@0.2.0: resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-db@>= 1.43.0 < 2": - version "1.53.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== - mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -12835,13 +12520,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -12878,11 +12556,6 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" @@ -13086,10 +12759,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -13179,9 +12852,9 @@ nth-check@^2.0.1: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.12" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" - integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== oauth-sign@~0.9.0: version "0.9.0" @@ -13208,17 +12881,17 @@ object-hash@^3.0.0: integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.13.1, object-inspect@^1.7.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.0.2, object-is@^1.1.2, object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" + call-bind "^1.0.2" + define-properties "^1.1.3" object-keys@^1.1.1: version "1.1.1" @@ -13251,7 +12924,7 @@ object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7, object.fromentries@^2.0.8: +object.fromentries@^2.0.5, object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -13262,26 +12935,25 @@ object.fromentries@^2.0.7, object.fromentries@^2.0.8: es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.1.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + version "2.1.7" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" + integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== dependencies: array.prototype.reduce "^1.0.6" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + safe-array-concat "^1.0.0" object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" object.omit@^2.0.0: version "2.0.1" @@ -13298,7 +12970,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.5, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -13651,7 +13323,7 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.11.1, path-scurry@^1.6.1: +path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -14303,16 +13975,6 @@ postcss-replace-overflow-wrap@^4.0.0: resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== -postcss-resolve-nested-selector@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz#799bce8b8cfc46958020dc1335a146abf951cbf6" - integrity sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA== - -postcss-safe-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" - integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== - postcss-selector-not@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" @@ -14328,11 +13990,6 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-styled-jsx@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-styled-jsx/-/postcss-styled-jsx-1.0.1.tgz#07c17ca3bc574a06627103bb5dd475006c2d0d9e" - integrity sha512-508Vg2A0pHQstRxz8eoNYiT+RiCZdgE4EqN0x8oiPIZ/a6pp5q2NYefL39RRG8ORlxDehLHU3u/EOpux0kuATQ== - postcss-svgo@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" @@ -14341,11 +13998,6 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== - postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" @@ -14366,10 +14018,10 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.4, postcss@^8.4.40: - version "8.4.41" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== +postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.4: + version "8.4.40" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8" + integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" @@ -14470,16 +14122,13 @@ prompts@^2.0.1, prompts@^2.4.2: sisteransi "^1.0.5" prop-types-exact@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.5.tgz#f275e7dc0d629c2f7414782e8189b3e2d2e9e158" - integrity sha512-wHDhA5TSSvU07gdzsdeT/FZg6zay94K4Y7swSK4YsRG3moWB0Qsp9g1Y5BBausP1HF8K4UeVe2Xt7ZFJByKp6A== + version "1.2.0" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" + integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - hasown "^2.0.2" - isarray "^2.0.5" - object.assign "^4.1.5" - reflect.ownkeys "^1.1.4" + has "^1.0.3" + object.assign "^4.1.0" + reflect.ownkeys "^0.2.0" prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" @@ -15250,28 +14899,21 @@ reflect-metadata@0.1.13: integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.1" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -reflect.ownkeys@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-1.1.4.tgz#3cf21da448f2aff8aba63ca601f65c99482e692c" - integrity sha512-iUNmtLgzudssL+qnTUosCmnq3eczlrVd1wXrgx/GhiI/8FvwrTYWtCJ9PNvWIRX+4ftupj2WUfB5mu5s9t6LnA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" + get-intrinsic "^1.2.1" globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +reflect.ownkeys@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" + integrity sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg== regenerate-unicode-properties@^10.1.0: version "10.1.1" @@ -15392,10 +15034,10 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== -remove-accents@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" - integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== remove-accents@^0.4.2: version "0.4.4" @@ -15601,7 +15243,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.22.8: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -15650,9 +15292,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -15726,7 +15368,7 @@ rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.1.2: +safe-array-concat@^1.0.0, safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -15867,7 +15509,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.6.0, semver@^5.7.2: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1, semver@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -16256,9 +15898,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -16269,9 +15911,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== spdy-transport@^3.0.0: version "3.0.0" @@ -16385,9 +16027,9 @@ stop-iteration-iterator@^1.0.0: internal-slot "^1.0.4" stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^2.0.0: version "2.0.0" @@ -16589,7 +16231,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -16646,9 +16288,9 @@ strip-json-comments@~2.0.1: integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-loader@^3.3.1: - version "3.3.4" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" - integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== + version "3.3.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" + integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== styled-jsx@^4, styled-jsx@^4.0.1: version "4.0.1" @@ -16672,56 +16314,6 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylelint-use-logical@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/stylelint-use-logical/-/stylelint-use-logical-2.1.2.tgz#60296915cc27aa1292fbff9a29391c9a1d877563" - integrity sha512-4ffvPNk/swH4KS3izExWuzQOuzLmi0gb0uOhvxWJ20vDA5W5xKCjcHHtLoAj1kKvTIX6eGIN5xGtaVin9PD0wg== - -stylelint@^16.3.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.8.1.tgz#7d4b2d7922771dd0514446a66f04e954f1dfa444" - integrity sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA== - dependencies: - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/media-query-list-parser" "^2.1.13" - "@csstools/selector-specificity" "^3.1.1" - "@dual-bundle/import-meta-resolve" "^4.1.0" - balanced-match "^2.0.0" - colord "^2.9.3" - cosmiconfig "^9.0.0" - css-functions-list "^3.2.2" - css-tree "^2.3.1" - debug "^4.3.6" - fast-glob "^3.3.2" - fastest-levenshtein "^1.0.16" - file-entry-cache "^9.0.0" - global-modules "^2.0.0" - globby "^11.1.0" - globjoin "^0.1.4" - html-tags "^3.3.1" - ignore "^5.3.1" - imurmurhash "^0.1.4" - is-plain-object "^5.0.0" - known-css-properties "^0.34.0" - mathml-tag-names "^2.1.3" - meow "^13.2.0" - micromatch "^4.0.7" - normalize-path "^3.0.0" - picocolors "^1.0.1" - postcss "^8.4.40" - postcss-resolve-nested-selector "^0.1.4" - postcss-safe-parser "^7.0.0" - postcss-selector-parser "^6.1.1" - postcss-value-parser "^4.2.0" - resolve-from "^5.0.0" - string-width "^4.2.3" - strip-ansi "^7.1.0" - supports-hyperlinks "^3.0.0" - svg-tags "^1.0.0" - table "^6.8.2" - write-file-atomic "^5.0.1" - stylis-rule-sheet@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -16779,14 +16371,6 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -supports-hyperlinks@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" - integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -16797,11 +16381,6 @@ svg-parser@^2.0.2: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - svgo@^1.2.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -16854,10 +16433,10 @@ synthetic-dom@^1.4.0: resolved "https://registry.yarnpkg.com/synthetic-dom/-/synthetic-dom-1.4.0.tgz#d988d7a4652458e2fc8706a875417af913e4dd34" integrity sha512-mHv51ZsmZ+ShT/4s5kg+MGUIhY7Ltq4v03xpN1c8T1Krb5pScsh/lzEjyhrVD0soVDbThbd2e+4dD9vnDG4rhg== -table@^6.0.9, table@^6.8.2: - version "6.8.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== +table@^6.0.9: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -16871,9 +16450,9 @@ taffydb@2.6.2: integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA== tailwindcss@^3.0.2: - version "3.4.9" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.9.tgz#9e04cddce1924d530df62af37d3520f0e2a9d85e" - integrity sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg== + version "3.4.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" + integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -16994,9 +16573,9 @@ terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.1, terser-webpack-plugi terser "^5.26.0" terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: - version "5.31.5" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.5.tgz#e48b7c65f32d2808e7dad803e4586a0bc3829b87" - integrity sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q== + version "5.26.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" + integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -17068,13 +16647,14 @@ throttleit@^1.0.0: integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through2-filter@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.1.0.tgz#4a1b45d2b76b3ac93ec137951e372c268efc1a4e" - integrity sha512-VhZsTsfrIJjyUi6GeecnwcOJlmoqgIdGFDjqnV5ape+F1DN8GejfPO66XyIhoinxmxGImiUTrq9RwpTN5yszGA== + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== dependencies: - through2 "^4.0.2" + through2 "~2.0.0" + xtend "~4.0.0" -through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: +through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -17090,7 +16670,7 @@ through2@^3.0.1: inherits "^2.0.4" readable-stream "2 || 3" -through2@^4.0.0, through2@^4.0.2: +through2@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== @@ -17113,9 +16693,9 @@ tiny-case@^1.0.3: integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== tiny-invariant@^1.0.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" @@ -17130,9 +16710,11 @@ tmp@^0.0.33: os-tmpdir "~1.0.2" tmp@^0.2.1, tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" tmpl@1.0.5: version "1.0.5" @@ -17212,9 +16794,9 @@ toposort@^2.0.2: integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== tough-cookie@^4.0.0, tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -17289,9 +16871,9 @@ tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tslib@~2.1.0: version "2.1.0" @@ -17470,9 +17052,9 @@ typeson@^6.0.0, typeson@^6.1.0: integrity sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== ua-parser-js@^0.7.18, ua-parser-js@^0.7.30: - version "0.7.38" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.38.tgz#f497d8a4dc1fec6e854e5caa4b2f9913422ef054" - integrity sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA== + version "0.7.37" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.37.tgz#e464e66dac2d33a7a1251d7d7a99d6157ec27832" + integrity sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -17480,9 +17062,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.19.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.1.tgz#2d5df6a0872c43da43187968308d7741d44b8056" - integrity sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A== + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" @@ -17505,14 +17087,14 @@ underscore@1.12.1: integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== underscore@~1.13.2: - version "1.13.7" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" - integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== + version "1.13.6" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.25.4: version "5.28.4" @@ -18111,12 +17693,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== dependencies: - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -18125,25 +17707,25 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-collection "^1.0.1" + which-typed-array "^1.1.9" -which-collection@^1.0.1, which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -18423,23 +18005,15 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - ws@^7.4.6: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xdg-basedir@^3.0.0: version "3.0.0" @@ -18466,7 +18040,7 @@ xmlcreate@^2.0.4: resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== -xtend@~4.0.1: +xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From 1a3db3ff8102afd2a1ff74ac4e7c0f8c84cc0e1e Mon Sep 17 00:00:00 2001 From: henrikmv Date: Thu, 5 Dec 2024 11:58:24 +0100 Subject: [PATCH 14/19] fix: merge conflict --- i18n/en.pot | 14 ++- .../WidgetHeader/WidgetHeader.container.js | 62 ++++++++++ .../WidgetHeader/WidgetHeader.types.js | 20 +++ .../WidgetHeader/index.js | 2 + .../WidgetTwoEventWorkspace.container.js | 115 ++++++------------ .../WidgetTwoEventWorkspace.types.js | 13 +- .../WidgetTwoEventWorkspaceWrapper.const.js | 5 + .../WidgetWrapper/WidgetWrapper.container.js | 74 +++++++++++ .../WidgetWrapper/WidgetWrapper.types.js | 15 +++ .../WidgetWrapper/index.js | 2 + .../WidgetTwoEventWorkspace/index.js | 1 + 11 files changed, 235 insertions(+), 88 deletions(-) create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js create mode 100644 src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js diff --git a/i18n/en.pot b/i18n/en.pot index f5f3c016f4..7a83dc3b8a 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-11-21T13:57:21.323Z\n" -"PO-Revision-Date: 2024-11-21T13:57:21.323Z\n" +"POT-Creation-Date: 2024-12-05T10:53:07.214Z\n" +"PO-Revision-Date: 2024-12-05T10:53:07.214Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1534,6 +1534,16 @@ msgstr "You do not have access to remove the link and delete the linked event" msgid "An error occurred while loading the widget." msgstr "An error occurred while loading the widget." +msgid "Linked event" +msgstr "Linked event" + +msgid "" +"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " +"the linked event details before entering data below" +msgstr "" +"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " +"the linked event details before entering data below" + msgid "Scheduled" msgstr "Scheduled" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js new file mode 100644 index 0000000000..cc52138727 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js @@ -0,0 +1,62 @@ +// @flow +import React, { type ComponentType } from 'react'; +import { spacersNum } from '@dhis2/ui'; +import { withStyles } from '@material-ui/core/'; +import { EnrollmentPageKeys } + from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import { NonBundledDhis2Icon } from '../../NonBundledDhis2Icon'; +import type { PlainProps, Props } from './WidgetHeader.types'; +import { OverflowMenuComponent } from '../OverflowMenu'; + +const styles = { + menu: { + marginLeft: 'auto', + }, + icon: { + marginRight: spacersNum.dp8, + }, +}; + +const WidgetHeaderPlain = ({ + linkedStage, + linkedEvent, + orgUnitId, + currentPage, + relationship, + relationshipType, + stage, + eventId, + classes, +}: Props) => { + const { icon } = linkedStage; + return ( + <> + {icon && ( +
+ +
+ )} + {linkedStage.name} + {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( +
+ +
+ )} + + ); +}; + +export const WidgetHeader: ComponentType = withStyles(styles)(WidgetHeaderPlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js new file mode 100644 index 0000000000..383251fdbb --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.types.js @@ -0,0 +1,20 @@ +// @flow +import { EnrollmentPageKeys } + from '../../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import type { ProgramStage } from '../../../metaData'; + +export type PlainProps = {| + orgUnitId: string, + linkedEvent: { event: string }, + linkedStage: ProgramStage, + currentPage: $Values | string, + relationship: string, + relationshipType: string, + stage: ProgramStage, + eventId: string, +|}; + +export type Props = {| + ...PlainProps, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js new file mode 100644 index 0000000000..efff17d3ce --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/index.js @@ -0,0 +1,2 @@ +// @flow +export { WidgetHeader } from './WidgetHeader.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js index 37be7a7963..1851fb8d7b 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.container.js @@ -1,54 +1,27 @@ // @flow import React from 'react'; -import { colors, spacersNum } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; -import { withStyles } from '@material-ui/core/'; import type { Props } from './WidgetTwoEventWorkspace.types'; import { useMetadataForProgramStage } from '../DataEntries/common/ProgramStage/useMetadataForProgramStage'; import { Widget } from '../Widget'; -import { useLinkedEventByOriginId, useClientDataValues } from './hooks'; +import { useLinkedEventByOriginId } from './hooks/useLinkedEventByOriginId'; import { WidgetTwoEventWorkspaceComponent } from './WidgetTwoEventWorkspace.component'; -import { OverflowMenuComponent } from './OverflowMenu'; -import { - EnrollmentPageKeys, -} from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; -import { NonBundledDhis2Icon } from '../NonBundledDhis2Icon'; +import { useClientDataValues } from './hooks/useClientDataValues'; +import { WidgetWrapper } from './WidgetWrapper'; +import { WidgetHeader } from './WidgetHeader'; -const styles = { - menu: { - display: 'flex', - alignItems: 'center', - padding: spacersNum.dp8, - justifyContent: 'end', - background: colors.white, - borderTopLeftRadius: 3, - borderTopRightRadius: 3, - borderStyle: 'solid', - borderColor: colors.grey400, - borderWidth: 1, - borderBottomWidth: 0, - }, - header: { - display: 'flex', - alignItems: 'center', - padding: spacersNum.dp8, - }, - icon: { - marginRight: spacersNum.dp8, - }, -}; - -const WidgetTwoEventWorkspacePlain = ({ +export const WidgetTwoEventWorkspace = ({ eventId, programId, orgUnitId, currentPage, - classes, + stage, + type, }: Props) => { const { linkedEvent, - relationship, dataValues, + relationship, relationshipType, isError: isLinkedEventError, isLoading: isLinkedEventLoading, @@ -56,7 +29,7 @@ const WidgetTwoEventWorkspacePlain = ({ const { formFoundation, - stage, + stage: linkedStage, isLoading: isLoadingMetadata, isError: isMetadataError, } = useMetadataForProgramStage({ @@ -86,54 +59,38 @@ const WidgetTwoEventWorkspacePlain = ({ ); } - if (!linkedEvent || !formFoundation || !stage) { + if (!linkedEvent || !formFoundation || !linkedStage) { return null; } return ( -
- {currentPage === EnrollmentPageKeys.VIEW_EVENT && ( -
- + } + noncollapsible + > + -
- )} - - - {stage.icon && ( -
- -
- )} - {stage.name} -
- } - noncollapsible - > - - -
+ + } + /> ); }; - -export const WidgetTwoEventWorkspace = withStyles( - styles, -)(WidgetTwoEventWorkspacePlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js index 52aff39ded..71bc0471fa 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspace.types.js @@ -2,13 +2,17 @@ import { EnrollmentPageKeys, } from '../Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.constants'; +import { WidgetTwoEventWorkspaceWrapperTypes } from './index'; +import type { ProgramStage } from '../../metaData'; -type PlainProps = {| +export type Props = {| programId: string, eventId: string, orgUnitId: string, stageId: string, - currentPage: $Values, + currentPage: $Values | string, + stage?: ProgramStage, + type?: $Values, |} export type LinkedEvent = {| @@ -17,8 +21,3 @@ export type LinkedEvent = {| occurredAt: string, orgUnit: string, |} - -export type Props = {| - ...PlainProps, - ...CssClasses, -|} diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js new file mode 100644 index 0000000000..421d827ca5 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetTwoEventWorkspaceWrapper.const.js @@ -0,0 +1,5 @@ +// @flow + +export const WidgetTwoEventWorkspaceWrapperTypes = { + EDIT_EVENT: 'editEvent', +}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js new file mode 100644 index 0000000000..dcc0defdc9 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.container.js @@ -0,0 +1,74 @@ +// @flow +import React from 'react'; +import { colors, spacersNum, IconLink16 } from '@dhis2/ui'; +import i18n from '@dhis2/d2-i18n'; +import { withStyles } from '@material-ui/core/'; +import type { Props } from './WidgetWrapper.types'; +import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; + +const styles = { + container: { + width: 'fit-content', + marginBottom: '16px', + margin: '16px', + }, + header: { + display: 'flex', + alignItems: 'center', + paddingBottom: spacersNum.dp16, + fontWeight: 500, + fontSize: 16, + color: colors.grey800, + }, + referalResponse: { + padding: spacersNum.dp16, + backgroundColor: colors.blue100, + borderRadius: '3px', + }, + linkedEvent: { + color: colors.blue900, + verticalAlign: 'middle', + display: 'flex', + fontSize: '16px', + fontWeight: '500', + }, + icon: { + marginRight: spacersNum.dp8, + }, + decription: { + margin: `${spacersNum.dp8}px 0`, + }, +}; + +const WidgetWrapperPlain = ({ widget, type, stage, linkedStage, classes }: Props) => { + if (type === WidgetTwoEventWorkspaceWrapperTypes.EDIT_EVENT) { + return ( +
+
{stage?.name}
+
+
+ + + +
{i18n.t('Linked event')}
+
+
+ {i18n.t( + 'This {{stageName}} event is linked to a {{linkedStageName}} event. Review the linked event details before entering data below', + { + linkedStageName: linkedStage?.name, + stageName: stage?.name, + interpolation: { escapeValue: false }, + }, + )} +
+ {widget} +
+
+ ); + } + + return <>{widget}; +}; + +export const WidgetWrapper = withStyles(styles)(WidgetWrapperPlain); diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js new file mode 100644 index 0000000000..ae72f04aa3 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/WidgetWrapper.types.js @@ -0,0 +1,15 @@ +// @flow +import { WidgetTwoEventWorkspaceWrapperTypes } from '../index'; +import type { ProgramStage } from '../../../metaData'; + +type PlainProps = {| + widget: any, + linkedStage: ProgramStage, + stage?: ProgramStage, + type?: $Values, +|}; + +export type Props = {| + ...PlainProps, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js new file mode 100644 index 0000000000..adb87f9498 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetWrapper/index.js @@ -0,0 +1,2 @@ +// @flow +export { WidgetWrapper } from './WidgetWrapper.container'; diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js index 27320f9e8c..b057d60b99 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/index.js @@ -1,3 +1,4 @@ // @flow export { WidgetTwoEventWorkspace } from './WidgetTwoEventWorkspace.container'; +export { WidgetTwoEventWorkspaceWrapperTypes } from './WidgetTwoEventWorkspaceWrapper.const'; From 91430531e64855c0c8b191a47893f5a9dbd0584b Mon Sep 17 00:00:00 2001 From: henrikmv Date: Thu, 5 Dec 2024 12:39:03 +0100 Subject: [PATCH 15/19] fix: dublicate code --- i18n/en.pot | 17 ++--------------- .../WidgetHeader/WidgetHeader.container.js | 1 - 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index fe5ff162fe..2f414dc91a 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-12-05T10:53:07.214Z\n" -"PO-Revision-Date: 2024-12-05T10:53:07.214Z\n" +"POT-Creation-Date: 2024-12-05T11:39:04.447Z\n" +"PO-Revision-Date: 2024-12-05T11:39:04.447Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1498,19 +1498,6 @@ msgstr "Yes, unlink event" msgid "View linked event" msgstr "View linked event" -msgid "An error occurred while loading the widget." -msgstr "An error occurred while loading the widget." - -msgid "Linked event" -msgstr "Linked event" - -msgid "" -"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " -"the linked event details before entering data below" -msgstr "" -"This {{stageName}} event is linked to a {{linkedStageName}} event. Review " -"the linked event details before entering data below" - msgid "You do not have access to remove the link between these events" msgstr "You do not have access to remove the link between these events" diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js index 822b500299..cc52138727 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/WidgetHeader/WidgetHeader.container.js @@ -28,7 +28,6 @@ const WidgetHeaderPlain = ({ eventId, classes, }: Props) => { -const WidgetHeaderPlain = ({ linkedStage, linkedEvent, orgUnitId, currentPage, classes }: Props) => { const { icon } = linkedStage; return ( <> From a0c848f4e8325bd18286799eebf30e72ff9ca448 Mon Sep 17 00:00:00 2001 From: henrikmv Date: Fri, 6 Dec 2024 09:02:24 +0100 Subject: [PATCH 16/19] feat: update dhis ui --- package.json | 8 +- yarn.lock | 942 +++++++++++++++++++++++---------------------------- 2 files changed, 433 insertions(+), 517 deletions(-) diff --git a/package.json b/package.json index 508cea0cfd..ec45384da3 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.19.1", + "@dhis2-ui/calendar": "^10.0.3", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", @@ -18,8 +18,8 @@ "@dhis2/d2-ui-org-unit-tree": "^7.3.3", "@dhis2/d2-ui-rich-text": "^7.4.0", "@dhis2/d2-ui-sharing-dialog": "^7.3.3", - "@dhis2/ui": "^9.10.1", - "@dhis2-ui/calendar": "^10.0.3", + "@dhis2/rules-engine-javascript": "101.19.1", + "@dhis2/ui": "^10.1.1", "@joakim_sm/react-infinite-calendar": "^2.4.2", "@material-ui/core": "3.9.4", "@material-ui/icons": "3", @@ -136,7 +136,7 @@ "@dhis2/cli-app-scripts": "^10.4.0", "@dhis2/app-runtime": "^3.10.2", "@babel/preset-react": "7.16.7", - "@dhis2/ui": "^9.10.1", + "@dhis2/ui": "^10.1.1", "@dhis2-ui/calendar": "^10.0.3", "@js-temporal/polyfill": "0.4.3", "core-js": "2.5.7", diff --git a/yarn.lock b/yarn.lock index 4c2c7b3910..20e24541cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1703,15 +1703,15 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@dhis2-ui/alert@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.11.0.tgz#01456616ad601b9c5ff5d71dfb5db102f46e5743" - integrity sha512-jka/E26RkLJexYhi934yj8hpIvdI/mOnFzjwca0kDxnCaJ9JCz/j6x0BklrzRFFt/gGJ9aldG1mVX7fGtIEEvw== +"@dhis2-ui/alert@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-10.1.7.tgz#259e1fb999be78e0bca02729f3c16cd5d0960d11" + integrity sha512-wLMdedCBWyXl0DZHkHRfDn7l0jz4ZbmRv1PXVeNdd+EPpYSIvacK9rp01SA/WNyD3lMvq4APmJER64ZraIdeBQ== dependencies: - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/portal" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -1725,13 +1725,13 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.11.0.tgz#92391d2d8bbdb3bdd2714d93e7d519dc041f1db9" - integrity sha512-/ds/LWG8P995QRDHhkVvCS8ao6tOpssAwqFY2PiaRIl2J39b6bmfIVfIQldldiKO1IK05oJmRSCmCx8TfHE9ig== +"@dhis2-ui/box@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-10.1.7.tgz#bdffb97d9ffe8c8004e71876d07c8f16265773c4" + integrity sha512-C7B5ICSgChOSVZfJiTCjPa958mI3/CFmGizGdWaBP2twEHDt9tUm4Rva/oPW18zAT28gkmWFpvYzBP5dtz/WAA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -1749,21 +1749,21 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.11.0.tgz#ee6a5dec0e44da72a654c546a6c685dbcdc33245" - integrity sha512-b5cA+v0uv+5Dj6CXPiFavOUSgiNLKXRBg6OjeZatUTIsoO59UpOxQoVp4cCo8/kZkBBUyuwsMYO2AHuIarTucQ== +"@dhis2-ui/button@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-10.1.7.tgz#beb3900428df11c65ed183b1e2f12559d855d95b" + integrity sha512-TXFHe+zuEQ4JY6zMcYSaFqCSMxqiH420AiM3QGot4zx3aemUDhG4Xkufx2e0fBeaOw3p/1WIGECdB0GaLa/l1A== dependencies: - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/popper" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/calendar@9.11.0", "@dhis2-ui/calendar@^10.0.3": +"@dhis2-ui/calendar@10.1.7", "@dhis2-ui/calendar@^10.0.3": version "10.0.3" resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-10.0.3.tgz#726560825eb0919db8018097608075a46bd9b638" integrity sha512-yxLESkgO+PlCdkREqzCKGq5KXmKtUjMkRWb6LY3hkpYZ0DmHCrqUpIHGqm/cxA3xo812km2SwpoKgVbmP+T6YA== @@ -1790,75 +1790,75 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/card@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.11.0.tgz#17b40d55240a1fb5c34345b0d16e63ab984cfdb6" - integrity sha512-phjsyukZfmxKqqtRxVRuFJdc30S7XfEkEmQv11wWnAjGVl2YxIWKm8SAGShpu0gC8susJg0GBhY7Ts+h5cRvQg== +"@dhis2-ui/card@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-10.1.7.tgz#21ffe67492cb8f6672d686d79c7d3fa2849f0bb2" + integrity sha512-9zG5Uj+Zqc/zLoe7QU0V9NA7u4AJWUcUii69jUkYNd7qDkxnXDKAwsYji6wvq4tUIXw/J040NO3xKUDIsshj2w== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/center@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.11.0.tgz#f3d5a302fb2227a78a8430a706a90a43eae92665" - integrity sha512-LEAW1wlpArkA63sko/24H8C4AHYTGFolIMYjcAFX1GR2xBcFpj/4VQRQFK6P9POtrSv+syVlfw51g9zBfhYi9A== +"@dhis2-ui/center@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-10.1.7.tgz#837f3f2344c9c948576942783625418f3ab4590b" + integrity sha512-422wqUrGs9iESVDgUiFCRgLTydysfCOzLphkB8LRN8YMnRqrYgq4rhtze5otaZ4DBi3nTBCcUFglEgxfSN/pYg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/checkbox@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.11.0.tgz#05d59ac1403a93c44bee2e2e04b008f1851ebeb7" - integrity sha512-jPn/3DCUNLar8EEgUI01h100POtob6GxkcpTkMsRqngN4f+QTAPZGVORVFjd+2nAAG/msHXaqnNqmfwkaKPsaA== +"@dhis2-ui/checkbox@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-10.1.7.tgz#959cb05212fdad3539c0f1a3f9cd5d28510b36a4" + integrity sha512-OQiO3c2SIa1BRPWOJxuFjgQYdf05IGqnHgJo1mUa8n6cSpzGgmeX2rm6CWBCYc9T6g/yeCxZD3c5ToHO6rVYLw== dependencies: - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/required" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/chip@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.11.0.tgz#1e8b4276872b8737ed1607588867d0f6d9800e13" - integrity sha512-jc/CCohXhbTT91AagWIxieybSyAR9Mo91vMjRHbe8qzVua40WezAazhjLCd82ynGjEzHWMryaK7om1VK5hbM9A== +"@dhis2-ui/chip@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-10.1.7.tgz#f60038a16012f7f028d6a49041867130f6299717" + integrity sha512-RTF/iiMj8SPOhw4Z0IoUE7JFqpCanoJxPrVDtpFlIpm67o0s+Q+rYaj7skwfA/0ObSIM5NaNegzIal1MHpw0Gw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/cover@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.11.0.tgz#ea8280dfcb2444111cd0e1da87c566d5813dc1c3" - integrity sha512-mwb15H2gJNOO9ZDZEQclfrvKbb0TvLn3n7BMErR8+Z9oE9j8ycMI/Ks6Itov94dIX2Es+1cHZFMDLJUOTtI+yg== +"@dhis2-ui/cover@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-10.1.7.tgz#07fcfb03baeb0b97535c88e24049149357ba80e5" + integrity sha512-JHaWuuWN4hiBj6JcfMvKhF51IRx1EXSiyGyUl/S14pkKSfs8YaS+GF+p/v0LD/shd4yFsH2yKSVnh7TtPq0r9Q== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/css@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.11.0.tgz#4540c4795b146b3c92feae5ccbca99b198d66fb2" - integrity sha512-TsLR1Jw7fjTqszrybAdw1ouAdV3hPX9v3JJE/iWqTKPHfTSxtEj201jHAqpNWjxiIgEzPJ2AG61fUh44+Iiibw== +"@dhis2-ui/css@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-10.1.7.tgz#0c4113de70932f9080144d52702b54755f6a514a" + integrity sha512-c4Yb9XFTKhQfPSaxeXGBxn3fGrbPNdbiBnjPqWjNrQpMY03lsicwtF/SL7yBRm4GoH8b9Ag1epmBQmc5DqDQ0w== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/divider@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.11.0.tgz#af514387024824102dbdb352058809f1d54c8901" - integrity sha512-zDFjs2BZF3Dra8cpYypYmvYTnFgItHoFOAGs1JfVlvTcWGpaggf1ah8BcxqFSxOg7rgL0CGtF9uLujGNdbla5g== +"@dhis2-ui/divider@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-10.1.7.tgz#f45f538c150fb52b3b11350e42c67567fb9b9eac" + integrity sha512-96stq34cvDFCgopneFqIMwCx+KZZPcASC4ReuFTzFzO254mjrEY9uJPonFhNBuk5f17RDAKrG/oNDOkB644TCw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -1875,55 +1875,55 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.11.0.tgz#c57c623ea4ad32a6440062ed4ee81e2130d80f75" - integrity sha512-pVFNqiKVgsefxpgfMnrM6mU9ZM1qZtRAZsDjzooYIlh1r0nUQt01GKgn0TTdyICIoqO3lNLxvxNA5SXv9QRqfQ== +"@dhis2-ui/field@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-10.1.7.tgz#5b8f3b90acf7997c55186d151396083064e4ce8c" + integrity sha512-azpbsC+HnHmLOeqMPs8YacVM1GHAG/uD75gtxcumvrpU/4XyI/sJheAx3qlbwmRetneyJ+AfCqAHsNEwuwuSVw== dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/help" "9.11.0" - "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/help" "10.1.7" + "@dhis2-ui/label" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/file-input@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.11.0.tgz#77735de2a87f734a4041f4a397911313dc816df6" - integrity sha512-CWp34b6hMc67V5KJow5orPzLTVJzFnudouXYQEiPd3fUHJa4xRYW+GvbL+uY46VvF+GSB82eP5+z4PTgicZWxA== +"@dhis2-ui/file-input@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-10.1.7.tgz#5da82cf2a1395ca0a4ae1d8573b39f3347215974" + integrity sha512-TJGFj3iPtcWWNjM5dLqH/rCnNVnW92kD0NhvVDPR+7G7ricV2WpnbG6Bs1ntr3fKCPHZRZLfimNiXTwbltn3Qg== dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/label" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/label" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/status-icon" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/header-bar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.11.0.tgz#aeac3955e407e4c398daa81ae3231b52bcd18870" - integrity sha512-1NRznu2gluvAc1Kd5Ogt7K7rlfvvlvouUYGC9kn+mLYHj/h6T+eeTOS8Y0uEJLgmfuuklm2omZ+ASUIY3A7+iA== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/logo" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" +"@dhis2-ui/header-bar@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-10.1.7.tgz#6d0d205ae7da93def21d1e5e9851d34b62b1af91" + integrity sha512-Uh/r0Yx03f+FH59k40IFn49BqNTUFgM91VVk4zbHzJSjjKp6bDkvSHXnJ1qnjmuHFX9mAQePosMNndtC+jhbIQ== + dependencies: + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/center" "10.1.7" + "@dhis2-ui/divider" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/logo" "10.1.7" + "@dhis2-ui/menu" "10.1.7" + "@dhis2-ui/modal" "10.1.7" + "@dhis2-ui/user-avatar" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" moment "^2.29.1" prop-types "^15.7.2" @@ -1938,13 +1938,13 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/help@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.11.0.tgz#071ed4ff473cbc423b7a1f51c7217b6bbf057974" - integrity sha512-/n1bnolladI44ZVSzxKvt6SnsAlVK9G76uT1pTMNyMRDHCIpZc8070HADv+2GGD5YbwSpltClgy+3U4xPz14/A== +"@dhis2-ui/help@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-10.1.7.tgz#e2d8dad46084d1a899897b3ebb0df9538b778d42" + integrity sha512-/495qpKQrmgf6DUSeyBEHagnHNM8duw8ZY4FgoQ2p2W14wKhd4WLn1ZSLHONqhRVj/rMqlWA8dmT1i9mB1AZeg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -1964,29 +1964,29 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/input@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.11.0.tgz#4dd6efc15c82605468a3e1211f0b182bd5c66a08" - integrity sha512-jx3scjWkhO3s7SzaTfYUOYpOacGfS9317fGEshrirdkh6+jzLF+qbWLM9BX/hf63JfU4iPZC4cZzr0yWgxohDg== +"@dhis2-ui/input@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-10.1.7.tgz#653b775f8163f5a734bae7450784cabafaa150c8" + integrity sha512-kbHnJPRmDMX2Dnbv5qk6Kj0OsycyxU0pB3b2BrjRUHg85eIpq48qCGb9zlvyMiwp2MQJ+0/RU5jElzvofLrZpA== dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/status-icon" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/intersection-detector@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.11.0.tgz#cad6dc8095cdfc9db133fd8a46d19e90130e4f07" - integrity sha512-Dr1WUDvcWbKFFu2DoCwfLwokM/d1oQApEkbAmUBSkAv9uWx61VgLlH/Z3I/Pr/VSJuBR3zWSpmVbduLlFs1Avg== +"@dhis2-ui/intersection-detector@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-10.1.7.tgz#3341c1a96b5f1e4bcb38fa952154c34fdeb8d7b7" + integrity sha512-vI/NGCbPlkpzgKrpYKQA3PR+kY+duAJrl7KJnLMLwFKiIyhoeixxvsNiCy2L7OPfDdlEWM8Jqv3ODc3H1p9fCg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2001,14 +2001,14 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.11.0.tgz#286e9b1b79ef7cf45d500a893b4c0fd6b11eeaec" - integrity sha512-wOlHjghmey9nbytOKHHfwzaUzxqgXcmTzy7ntkRBsmqVMdJ07+pL7iFId4EFNdGz2aGPGPAs1qmMEqDJPoz3eA== +"@dhis2-ui/label@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-10.1.7.tgz#705d5d5b288e0b06b6eee81e52a007808e7e0810" + integrity sha512-os6KDWXccquyI25DKgohttRFg/0OuCYqpJ/EIWAL6VGaNaZh0w3FOi/5trNjl6AVacMKkIdVFN0L3QArk8u4Qw== dependencies: - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/required" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2023,25 +2023,25 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.11.0.tgz#ffc80120cf38236ec04291e1bb992549c4e685fd" - integrity sha512-jCrgn2n4QlxTY7GRhwgrDqTbMaju7SDUGrrqOTBZXg8bCoVBazqh3dgUUWogOVJ8UH6ob+tycfXvbUf0lJClNg== +"@dhis2-ui/layer@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-10.1.7.tgz#09ea0be4f3e0446c3423f04693ea605932c4cf89" + integrity sha512-L+cXOxttiM47YZp+JOA1gUWqhESN69UaELEj7xBE0oMcIbDMzM/QDL4KlhLdqzvLRK787xtBr75GvRby2lfDkw== dependencies: - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/portal" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/legend@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.11.0.tgz#f8c8201ae9da75c815810715d3aca38e03fb585d" - integrity sha512-MxpJbao+t1qhUrStLhLAn2+Xt2G2gyoiHEf7BeF85opf5HsY+9Xbki1RemP69ixe906czCKD2gieZxNNpdQYBw== +"@dhis2-ui/legend@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-10.1.7.tgz#00a095dafb995667071287b10007389e472a0ee0" + integrity sha512-LlM+SpqRCa4vMu6aAiVyfrAL4v7026IOLnCNV7dnizHeBAGcbtTcXKXHuyuE7QEXqs2cmDi2ZudZY0yAjAMF4g== dependencies: - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/required" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2055,114 +2055,115 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.11.0.tgz#f0a2f8f0646efd9bce632194eb68bba0f1512c2e" - integrity sha512-98M8KmGYYeROkGE/rZ8e3BHQKgfk7ZsZmYrhr6JyEYUWoW+rDHeR/a5bprbMmie//+ePdOx2UxZUJKIDUZEPvw== +"@dhis2-ui/loader@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-10.1.7.tgz#113e20647451abd3f583e122f2b0fedc55b75a24" + integrity sha512-iivxY9J1OMEuVEGxWyT7PhMmIXM630q1WQvfZwJ/saLihueVlQxmEjStpdD7vnQBiGs/CkT0GP4KDCHP35mVhw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/logo@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.11.0.tgz#2ff0058cc6dffcb0dcf6182e70429d0fa710dcd4" - integrity sha512-R0nebCjwHeYbq0+N2xje1NOTI6bcUB16riSNBBimyZAQXqEWUyiuqxISf49UUG+Ed7UjkcMnJe6AmL+Yoemfug== +"@dhis2-ui/logo@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-10.1.7.tgz#91ff7e826a4572e89e7775380d44e7a22d343563" + integrity sha512-5FTSBjNf0R35MmpEX9nl+syb9Q/GyocZSXVxyhCe8tH/KXEd+AreB9LpFmDAaG8Y9QqBVWKgAhTCBZZxFFpMKQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/menu@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.11.0.tgz#33b5f74e193d36dd4a13175bfeaafdaa6ae8373d" - integrity sha512-613Yb3IK2JQGrOTP6caCRkSTqqrOkL0K1Frsv0Uzhts066bZQaIT7drL0T+vIFv0+sgRSGyfBSfTrYQofxnKYQ== +"@dhis2-ui/menu@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-10.1.7.tgz#704beac1ae165693191c0c49ae7e2b2a124794f1" + integrity sha512-okq9+ZzOXQ5sJKgeaKHZ0qewS9yrNY4vq11iabqBFc76ZkPKCe/bJo8pOxHyIUSEx/VpJCD/8yrBBOkgUQx9fA== dependencies: - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/divider" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/portal" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/modal@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.11.0.tgz#c16b04787641e9f64d385c55959fa8f5537f1acf" - integrity sha512-GDg7uad+/eLvadJEXjVoHTlEfrd639QmVVdjEcvC+RtHOOXKjlR3wpm+FvgUSbw7zhXpcZ68LNdga9X9bjn14Q== +"@dhis2-ui/modal@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-10.1.7.tgz#3de7ea33ac2299d33670beac8dc5a442976b053d" + integrity sha512-mJXtdjQ2JN01EPnvlxFkue3N0RuKig+Un/fOEGz6hGWvIuW+9wxbIs0+e2gZIr4GaN2m4on1XBMwDVGlwc6MAA== dependencies: - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/center" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/portal" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/node@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.11.0.tgz#d4cc2b0ca1b653247bf3bf90a9e4152780f61253" - integrity sha512-GfI9ecBzJGeZnS6fLiS19eAg+w9hIXOC5sk69S5NOEKDbCU+CWR97GSpb71RBiq9QZuNBtNEZU7Vqa01+G041Q== +"@dhis2-ui/node@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-10.1.7.tgz#f98fe0f06e0ddf0fbe51244d6101e7d6464a6eb4" + integrity sha512-hIw5pOoAYRL10BaQa0xlQyv/CU3dp38J6OHQp9jGdpvBKfv3j5vYVCzjs7XgDP2B/4bXzb1Cd/j6EYEHeXDJyg== dependencies: - "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/loader" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/notice-box@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.11.0.tgz#2bd5c4a13a9d021c2d694f94ee6520276ccc533f" - integrity sha512-xEfsxFVoiMxVjqvf9QyB7w83cwraS+aS1HaOXTySvseOd+jSk7YlYAQJ2RQbGmik7rsSlyNMXbWoJ9TaJ8Y/pg== +"@dhis2-ui/notice-box@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-10.1.7.tgz#0b872251fa2792314357fd6409bf1c8cb50af4c4" + integrity sha512-4e64DfNhSILQnsTY0DK2l8JGJ6sxakbjUhSrG1bOV3Vs6tzT/cEQVRn0PCYHBFuGMT17HEqU9eA/koDNM83kvQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/organisation-unit-tree@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.11.0.tgz#c626c71cac19ba93241a6e36fad2d261f3307c32" - integrity sha512-2mYpgBPjmNlkCnCLrDmmPtC1rs07uxlEeqULTCiqRcbbWzEYL2S+fAao5IiOrlzXR9JIVlG7P8htMYNfj48tJQ== +"@dhis2-ui/organisation-unit-tree@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-10.1.7.tgz#274ee0044e0901bd896ef0374301c905f7c05c6d" + integrity sha512-jbVh6Fx94hMiyYrf2Ajyw7WVyFzbKJ8k96nJIZ0PxdzR/4CE21GIyWmmk+h8ie36hrcw+l4uffx/V/Rx2M4Asg== dependencies: - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/node" "9.11.0" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/checkbox" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/node" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/pagination@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.11.0.tgz#6967b1241ec3c36855e4570125e202752a6db577" - integrity sha512-HllIE5IVsNK1vM9wxRDfrLtxrrMWOxDEV+8B6QKG9qLXubfoFZL6+b5MGHo/mzDzY+7LxxBpiowoYaj52QMFYQ== +"@dhis2-ui/pagination@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-10.1.7.tgz#55d5f328489a8a8af608fa53bfcfdba39851d041" + integrity sha512-dC24hpJYBFFx/bsmR8QNSkQ+df96ucflH5toKKLH46R2F2jnVC+BSWjFFBJTMgLdlt77LeOU+Sk0Mo8QFzkFMA== dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/select" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popover@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.11.0.tgz#c6af553735f6c441c59514841f732f3f3ec86371" - integrity sha512-jad3kEqIyvhKQ4YBUGIbvcnFinED9ywgIfp0AG7sP3t80S15/aso+kTPyZ06Tgt/Slk6o6vHEuUy5SSpgnaLcw== +"@dhis2-ui/popover@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-10.1.7.tgz#00fea909d6fd8f591a313860760b6a7250a92199" + integrity sha512-JdcOSC/0uB9z+UAoBfoLctdOtnq0NVK3vyK3MyXkIYcwI/Dg0Ooj7eDBl3MSxB+1cNzDi39WjebZNym2yDRu8w== dependencies: - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/popper" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2179,13 +2180,13 @@ react-popper "^2.2.5" resize-observer-polyfill "^1.5.1" -"@dhis2-ui/popper@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.11.0.tgz#6b08e1f32588384b408cb6fdc6ba65369fd0e392" - integrity sha512-RIUSd0qmV0gCE1aTX9kUv8hYbat/5wUECFAhMF/0mqkDZAqTGpyQDFHFTPwAc37wNaxOXb8z6dDMozaNn5OpQA== +"@dhis2-ui/popper@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-10.1.7.tgz#6f1301bf199a4168b9472cd8b65913b90280b098" + integrity sha512-txyPI976vIEmMYqrUVM9dG4ellj1vdx5FUPKK7vN12cSFpISXwv/A44JGz6v6LIFxdNhX7nrNrS32Z90LwaxHw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" @@ -2200,21 +2201,21 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/portal@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.11.0.tgz#4a3e874d701f1a5b872e717abcad645e073efc16" - integrity sha512-z0hhTMtUK8pQvA9cl6VU2QYvlEFPamxPT3MWGKcfhUTkPj/zrA0ovKWRZwrcEN0AoXb3bqc6TsS6szJL0ohi1Q== +"@dhis2-ui/portal@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-10.1.7.tgz#0604c29605f37b5cfde483c64c44256f02df3bea" + integrity sha512-XouvZGebTbO7s0EtuuZ1u2a2DXdF5sest883FsYlU8d+SinRrSYu3dLD241KRArkkXiXSvg2yRtV3qG9gsgxLw== dependencies: classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/radio@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.11.0.tgz#e9fbdcfd3fc8e6cbc0107c00606c275fe19d56b6" - integrity sha512-YAI/uow1R+LwANKfMOdOqXYBrrRowf23fQDgZNDvdxVAYU3BxHBoCKhx/14qyslcHv6/pwDLghvDUw0un5suOA== +"@dhis2-ui/radio@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-10.1.7.tgz#fbb379cd40dad877177201721b6021226341dd9b" + integrity sha512-9EDugtL0aUfe6fUBq4OR4qn3eYbMPgcnIq67zSekNB8D0rNCxi5WuOVKH99WIPy4OxBdXiHQeJOnc8qT3edl+g== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2228,86 +2229,85 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/required@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.11.0.tgz#71f2dc7cdbb5b9bd412316af5ccb611caf261484" - integrity sha512-2fThUG/+wdOeQeuZD52M/TdMTCRSdxPxt2IIdkc9MUC+MmvMieJOFjYTzaHaItSqy0huNnOEvmaHEOTcERae/Q== +"@dhis2-ui/required@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-10.1.7.tgz#5be095b167e3a2f6d9b6e9225aa1aa553619538b" + integrity sha512-tqho75ulRijnd4irWwdCXvSeHNsKxvB+4Yxbuvb2fWuIQLD0KQZr9pvqSyV5Tec0EkFUmTKerjUi7VEzFw9xPA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/segmented-control@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.11.0.tgz#97b80b28543039a7c75914df9fe8147d9141b6d3" - integrity sha512-Ejv6/zCa7o9PFK9BvroSio0DgSZt2Ue7Q89MkJYee7yH5dAe6uuCcZ8/lrtpOWOoqEQtDpsrAF6bU5LVjSsAng== +"@dhis2-ui/segmented-control@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-10.1.7.tgz#15e27b9f2099409064e060e0c1df7fe4f7a32a7c" + integrity sha512-UWM/urmX2CGgAemJgLz4eLkClpi9d91fNjhq0XWNAB4JyE0Gl26G3Be6sY5XQFNGIbiuQSxXW2RgwYLbegUK1g== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/select@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.11.0.tgz#8f09f3500a37d9ad63d9bdb58ec9cfe224626fff" - integrity sha512-sfOZMR+7LaxfLseYyyqrGKBiZEuUCI/IDJXvakIaCqQGhSjjkY5Y8FC6LMZl/0TQUP8yCIjKaqBaUukLZxN6jQ== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/chip" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" +"@dhis2-ui/select@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-10.1.7.tgz#ae9ff1ddedefefd39acc11eac8e660c53df80341" + integrity sha512-5I3hzN0wFJx71dTqOrWkw6dyUNWnjHX0Eih+6Dh2+3IU5aOcTb1q3bHPsH3RksmOSWy1mCOCut3sobPJAlk78Q== + dependencies: + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/checkbox" "10.1.7" + "@dhis2-ui/chip" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/status-icon" "10.1.7" + "@dhis2-ui/tooltip" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/selector-bar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.11.0.tgz#a9ef657f0ecacce87e67e343ccbe60813067186c" - integrity sha512-7VqBu0GSk9By+5Z4B6R2lNEPHUyXjOWWV2fgD29jH8zj7Z65XffJS/A1da8M33uSFX3sstOkpyZVHo71vx0cAA== - dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" - "@testing-library/react" "^12.1.2" +"@dhis2-ui/selector-bar@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-10.1.7.tgz#8cbcfa3ce367f9828fc5aa4a08cb4d7b314b5590" + integrity sha512-kWoiyrv1w3YQoZD6ZfTPcaTOcsHuCuLm/zQEfjQnUAxQsJVbEuifZMsPIrfyi18jvbYdl8iavGh5fI2JxgV6gg== + dependencies: + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/popper" "10.1.7" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/sharing-dialog@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.11.0.tgz#9adf070335b45b99c718642a887e6f3bc8e3bcad" - integrity sha512-5LSZhO13dXZ5jOSpN2GlAlBfcZmRBrgye13cKvYgEWy+n1CWe4nJwQLYtfYoH5rItCBsjfS4/ouAFu6/koOPcg== - dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/notice-box" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/tab" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" +"@dhis2-ui/sharing-dialog@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-10.1.7.tgz#9b78ea4d12e4b910ecf2e3f796f43a67b5dbf14b" + integrity sha512-c799n47jhGft8XjnB323yrcNMzUuPUdxy1C/33Jod7lL/VHvzr5FVuaKxeHmY4bcBXCVITlZHXTHLWgrHldTxw== + dependencies: + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/divider" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/menu" "10.1.7" + "@dhis2-ui/modal" "10.1.7" + "@dhis2-ui/notice-box" "10.1.7" + "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/select" "10.1.7" + "@dhis2-ui/tab" "10.1.7" + "@dhis2-ui/tooltip" "10.1.7" + "@dhis2-ui/user-avatar" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" "@react-hook/size" "^2.1.2" classnames "^2.3.1" prop-types "^15.7.2" @@ -2324,112 +2324,112 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.11.0.tgz#2387a0ed48ecd9d09a76fd30ed249efa6df9ee00" - integrity sha512-EUEwH+Q3Z+Y0bdra94NmyqDyUz3gSOijEhIX3BPfk7mesvY9mLp87PvBaSfHJIHf1xywTI/Py067Et6MLPUR2w== +"@dhis2-ui/status-icon@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-10.1.7.tgz#d95fdfe72c01c3ea12438259d2fd50aa880e4462" + integrity sha512-4tYj6HnLN4o8BXRs17rcO/ENexivFJNtQi1NV+X3IPUVhEPVxPF5maNy+T5ihNghWF9gGokhVCdrOrf9r0w0Zw== dependencies: - "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/loader" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/switch@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.11.0.tgz#2eb848cbf0471375912ee48849d1beb949eedf45" - integrity sha512-norlPc5z/YCNVIHTqU/BpKii+c6biSAXV1Sv+wlfh2eXTa78+lFUNOG8RoO5lQCUmOC1bZd5+L1BjUwh6MlOVw== +"@dhis2-ui/switch@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-10.1.7.tgz#16bd202f092545ecba6b1762edf0d5cf715e255a" + integrity sha512-x7W0syi7QC/WpXd7HVWEtYvccrx9c/72Nj6AQQ0vc0pVA1PWcG6cFzfXm9xyLElmWpttNtxBzlBdNyb8pD6qJw== dependencies: - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/required" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tab@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.11.0.tgz#4e475d915aec266919d4c4fc73f58a6144312901" - integrity sha512-ijjxbxOeFe6iOQEZ/bICEjTDnq9PNkBSnO74rR/PImrPvsHUU+d2ZOSYWkh3TwFL9QQ76Vb9NwcAo6eSOGdVOw== +"@dhis2-ui/tab@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-10.1.7.tgz#0dae4075afff658177ba4e28d6493714296c68b8" + integrity sha512-NHdfKDocEn1g+aiEzVGe1/jwApdRkgojxJBA53V/mvBPiGO1WwYQaIXPrndZVE5Tqu6OxAHDmDtu8cM0SWWrUA== dependencies: - "@dhis2-ui/tooltip" "9.11.0" + "@dhis2-ui/tooltip" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/table@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.11.0.tgz#4c37dc4f334ceb49e1d11a3c9839ee229f2e9bd9" - integrity sha512-qc2OtBe9LqDCci3wJM7y4JSA5S3AfubxnySMMJPPEo7jilb6aAEheYFKjfmRXdUP+GxMUdOh4hCUQ22LAG1i9A== +"@dhis2-ui/table@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-10.1.7.tgz#47cec234cdfddbc9ef6bf4587b8a2f110a27cdd6" + integrity sha512-6FPSw3SJbXkI4Qk8INxu+3lwDbt/HVrhpN73uzt9q60F6s4EbyoH+DVlUcXPbWvWw0oW68mpX9l8npMD25n1Ow== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tag@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.11.0.tgz#f1c292d72a84e6e04cdbe4ae16d16ff95f28579a" - integrity sha512-FMN/1NmHyKUdFNdw2E7Bc1UnAFhyljGTwD3DXegY5ncEYBafWQjzLXyQtHJTlu58VfdBwwQ/nIG9qChJj6w2zQ== +"@dhis2-ui/tag@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-10.1.7.tgz#80b73d0274a51f87b82c31af6d175ab3341a7dcb" + integrity sha512-c0pw3IlTukkcDc03S99BJMg+ZZyGAXP993WFnWvzBfBdyUQFLiDVVj9wyUHTv45Aa/U3PHPDJltMIqvDXtq28w== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/text-area@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.11.0.tgz#e3568e70f9b0ecd45f4e92820f59184db5fdda4b" - integrity sha512-UPTK0PKiicU0OjfyMcNCN8znlrGicUyMY2MoSC1n2Tck2S0JUaCbG4Daski8uCMdss/2ZIra/k6vlP/KWzlHzw== +"@dhis2-ui/text-area@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-10.1.7.tgz#6377db5d125471882b248aa9dbb2d1d57fc68bbd" + integrity sha512-8dvUo8WqKah79WhaDxEAcSI5vByywFkaAYudR8qoDBk3fh9mF+IrtcPXGpU81F2VxN7NqFZdG8l8YM7QXijxVg== dependencies: - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/status-icon" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-icons" "9.11.0" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-icons" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tooltip@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.11.0.tgz#53095be4ebe458f0b8e22c55f50ddef7fea28255" - integrity sha512-zyGF3J0bpUC3JJM8WK9C+lm5x7fNGnzH0xrgYRP1TbcI/2RJNzlNsWr/pfNfHNqRqSwseai7Q2ssQWyADkuqPQ== +"@dhis2-ui/tooltip@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-10.1.7.tgz#738673450fe6eedf73aff13231905f7faa1a5752" + integrity sha512-CE0s8gU1gxRkJkx8Aw/98KJOkRud5icnN1VOF16aHiSGUDMzAG/AUpCgG+dKZMr3ImBbt3xbvzgNTn0ORqJF1Q== dependencies: - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/portal" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/transfer@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.11.0.tgz#f5d445ea46ecad95c47f90ab61648b1b1082cbc7" - integrity sha512-sSmhqSKcuCZSXG4pgLTPNJuY/K8oSGg92x7sHXQfrLFbrnsSenD6ckJjnMt4hWXNHW3xPbG5jVlB+CHWKCLrYQ== +"@dhis2-ui/transfer@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-10.1.7.tgz#1797ba682a738d4c2077b193f2eaa86cc711a418" + integrity sha512-WqhZfeofVXCcBNsld9RZo5W2Xj2Yw8eT+Vjpy+vTVJtEpVmtXBzISM8/c5vrso9+nGzYzli4CYb6B09RIMJJJw== dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/intersection-detector" "9.11.0" - "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/intersection-detector" "10.1.7" + "@dhis2-ui/loader" "10.1.7" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/user-avatar@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.11.0.tgz#82bf405f33d912961ae7447820140e510907fa57" - integrity sha512-4mK1eYYwe54rCsoDxxEqHlSMDYm0G6Ls5UXKmgi07nGvUL9QM2gUEW8J/FPmQDgFcXiBKAZpAbu5yc7d48lIbg== +"@dhis2-ui/user-avatar@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-10.1.7.tgz#da816edecc527c043bcdae7b4bc79f293ed81454" + integrity sha512-bPRkejqPh0QZOGU5qm/hAjBAzFCI4YHBRRqMdZjsCn66rIZg6BcEc1UNX1nIV1XwrxP5hD0pGdM3dH/34OnpVQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-constants" "10.1.7" classnames "^2.3.1" prop-types "^15.7.2" @@ -2750,27 +2750,27 @@ dependencies: prop-types "^15.7.2" -"@dhis2/ui-constants@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.11.0.tgz#0f41339dca04c95d026c278d17ff795cbe500020" - integrity sha512-uN0vH+HXtnVYmFGj0fARrsouKxMTEKHmq1aGuIbxK49+AcnMtxUirqXwuYx6wc/lJTl+MqdHKGqwTgJvEJ3TGQ== +"@dhis2/ui-constants@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-10.1.7.tgz#040704928bdccc7c077810e766db32647276a964" + integrity sha512-0aeGNhp0A6LoNWG8FrYgBhHhPtQ71pCJF2GXndTemMur2oNIemhrh3GfQElIqjIe9lmYvWps6ZxMSBbzppDuPA== dependencies: prop-types "^15.7.2" -"@dhis2/ui-forms@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.11.0.tgz#4b71be63e5e671dff29a49a9cf906375d2d7ce2d" - integrity sha512-A/gL3QJByckMHeSAnLCpU5FcvBp3l+H16YpJXhNYYHXistaxPfSCwzO+VITl+MBJCi30umbe4hN/rVWjiTw60Q== - dependencies: - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/file-input" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/radio" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/switch" "9.11.0" - "@dhis2-ui/text-area" "9.11.0" +"@dhis2/ui-forms@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-10.1.7.tgz#6c87f8479857cec852420156eb19758dace82ffa" + integrity sha512-UuspkJrPCzLFWu4TzZGakcuozAETXJBnSqATK4Wv0mLe+EZTkzRbz28x9/3ezFLNSdHzQSK3mLXrA2qA7tifMQ== + dependencies: + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/checkbox" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/file-input" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/radio" "10.1.7" + "@dhis2-ui/select" "10.1.7" + "@dhis2-ui/switch" "10.1.7" + "@dhis2-ui/text-area" "10.1.7" "@dhis2/prop-types" "^3.1.2" classnames "^2.3.1" final-form "^4.20.2" @@ -2782,64 +2782,64 @@ resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.0.3.tgz#70666c96943fdcafed99afaaaae00a16debc2e3a" integrity sha512-ax7b+UDdGhkY2MJ/dndEs18N0qxi4IzFlu6VTF8OoGTvBflyf4KkG6jHLQY4nfdHzM5O5uY2jCETdfwWFVoUNg== -"@dhis2/ui-icons@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.11.0.tgz#f9ca73d12b26ba3dd1a1ccb381cc3fc39ec15044" - integrity sha512-1XTls+m5xyQKDTgsQ+ehtLOgUdHqIAmKuwSkTf9/LtFpa/Wt2t9waKI7KIZYUL1MhPXSd0d9k2eEClPhseH+4Q== - -"@dhis2/ui@^8.12.3", "@dhis2/ui@^9.10.1": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.11.0.tgz#da8d4791ca7bc6ceb7d681ce6b743f51dc8987a3" - integrity sha512-vO1GhzbhOHJBVPLjFHyxH4JTbcf5z8xas5iyoRry+tUzDB81CGRB4Hz9C73w8Kw6lyOicrDP/B/keKk9LpDLSQ== - dependencies: - "@dhis2-ui/alert" "9.11.0" - "@dhis2-ui/box" "9.11.0" - "@dhis2-ui/button" "9.11.0" - "@dhis2-ui/calendar" "9.11.0" - "@dhis2-ui/card" "9.11.0" - "@dhis2-ui/center" "9.11.0" - "@dhis2-ui/checkbox" "9.11.0" - "@dhis2-ui/chip" "9.11.0" - "@dhis2-ui/cover" "9.11.0" - "@dhis2-ui/css" "9.11.0" - "@dhis2-ui/divider" "9.11.0" - "@dhis2-ui/field" "9.11.0" - "@dhis2-ui/file-input" "9.11.0" - "@dhis2-ui/header-bar" "9.11.0" - "@dhis2-ui/help" "9.11.0" - "@dhis2-ui/input" "9.11.0" - "@dhis2-ui/intersection-detector" "9.11.0" - "@dhis2-ui/label" "9.11.0" - "@dhis2-ui/layer" "9.11.0" - "@dhis2-ui/legend" "9.11.0" - "@dhis2-ui/loader" "9.11.0" - "@dhis2-ui/logo" "9.11.0" - "@dhis2-ui/menu" "9.11.0" - "@dhis2-ui/modal" "9.11.0" - "@dhis2-ui/node" "9.11.0" - "@dhis2-ui/notice-box" "9.11.0" - "@dhis2-ui/organisation-unit-tree" "9.11.0" - "@dhis2-ui/pagination" "9.11.0" - "@dhis2-ui/popover" "9.11.0" - "@dhis2-ui/popper" "9.11.0" - "@dhis2-ui/portal" "9.11.0" - "@dhis2-ui/radio" "9.11.0" - "@dhis2-ui/required" "9.11.0" - "@dhis2-ui/segmented-control" "9.11.0" - "@dhis2-ui/select" "9.11.0" - "@dhis2-ui/selector-bar" "9.11.0" - "@dhis2-ui/sharing-dialog" "9.11.0" - "@dhis2-ui/switch" "9.11.0" - "@dhis2-ui/tab" "9.11.0" - "@dhis2-ui/table" "9.11.0" - "@dhis2-ui/tag" "9.11.0" - "@dhis2-ui/text-area" "9.11.0" - "@dhis2-ui/tooltip" "9.11.0" - "@dhis2-ui/transfer" "9.11.0" - "@dhis2-ui/user-avatar" "9.11.0" - "@dhis2/ui-constants" "9.11.0" - "@dhis2/ui-forms" "9.11.0" - "@dhis2/ui-icons" "9.11.0" +"@dhis2/ui-icons@10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.1.7.tgz#15cd3e6d30637651602070f2f316faecd4ebb8d8" + integrity sha512-Qps+P17FkbPKRkrKM4uj7ia6LX5sPhH8W0zgWvov3BudSKEIQsg5gVaqjiOGn2mN1q03i7fF1rXhYPbGOtPkAA== + +"@dhis2/ui@^10.1.1", "@dhis2/ui@^8.12.3": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-10.1.7.tgz#3a03feef72192ef08d43131b40589a76c81ad8b7" + integrity sha512-6Cej1A/pBB90T0aEcMBUtTwwmb5+eomltGgrKV4TEZHUHe3MUfcHd8c5m8csRhNS9mCBRcRgQro+ei0DyG8gCw== + dependencies: + "@dhis2-ui/alert" "10.1.7" + "@dhis2-ui/box" "10.1.7" + "@dhis2-ui/button" "10.1.7" + "@dhis2-ui/calendar" "10.1.7" + "@dhis2-ui/card" "10.1.7" + "@dhis2-ui/center" "10.1.7" + "@dhis2-ui/checkbox" "10.1.7" + "@dhis2-ui/chip" "10.1.7" + "@dhis2-ui/cover" "10.1.7" + "@dhis2-ui/css" "10.1.7" + "@dhis2-ui/divider" "10.1.7" + "@dhis2-ui/field" "10.1.7" + "@dhis2-ui/file-input" "10.1.7" + "@dhis2-ui/header-bar" "10.1.7" + "@dhis2-ui/help" "10.1.7" + "@dhis2-ui/input" "10.1.7" + "@dhis2-ui/intersection-detector" "10.1.7" + "@dhis2-ui/label" "10.1.7" + "@dhis2-ui/layer" "10.1.7" + "@dhis2-ui/legend" "10.1.7" + "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/logo" "10.1.7" + "@dhis2-ui/menu" "10.1.7" + "@dhis2-ui/modal" "10.1.7" + "@dhis2-ui/node" "10.1.7" + "@dhis2-ui/notice-box" "10.1.7" + "@dhis2-ui/organisation-unit-tree" "10.1.7" + "@dhis2-ui/pagination" "10.1.7" + "@dhis2-ui/popover" "10.1.7" + "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/radio" "10.1.7" + "@dhis2-ui/required" "10.1.7" + "@dhis2-ui/segmented-control" "10.1.7" + "@dhis2-ui/select" "10.1.7" + "@dhis2-ui/selector-bar" "10.1.7" + "@dhis2-ui/sharing-dialog" "10.1.7" + "@dhis2-ui/switch" "10.1.7" + "@dhis2-ui/tab" "10.1.7" + "@dhis2-ui/table" "10.1.7" + "@dhis2-ui/tag" "10.1.7" + "@dhis2-ui/text-area" "10.1.7" + "@dhis2-ui/tooltip" "10.1.7" + "@dhis2-ui/transfer" "10.1.7" + "@dhis2-ui/user-avatar" "10.1.7" + "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-forms" "10.1.7" + "@dhis2/ui-icons" "10.1.7" prop-types "^15.7.2" "@dual-bundle/import-meta-resolve@^4.1.0": @@ -3886,29 +3886,6 @@ resolved "https://registry.yarnpkg.com/@teppeis/multimaps/-/multimaps-2.0.0.tgz#2114ee964b702f9777d0e07899087ad9cd89a0de" integrity sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w== -"@testing-library/dom@^8.0.0": - version "8.20.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" - integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/react@^12.1.2": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3919,11 +3896,6 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -4197,13 +4169,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@<18.0.0": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.25.tgz#e0e5b3571e1069625b3a3da2b279379aa33a0cb5" - integrity sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA== - dependencies: - "@types/react" "^17" - "@types/react-redux@^7.1.20": version "7.1.33" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" @@ -4229,15 +4194,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@^17": - version "17.0.80" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" - integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "^0.16" - csstype "^3.0.2" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -4250,11 +4206,6 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@^0.16": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - "@types/semver@^7.3.12": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -5022,13 +4973,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.1.3, aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - aria-query@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" @@ -5037,6 +4981,13 @@ aria-query@^0.7.0: ast-types-flow "0.0.7" commander "^2.11.0" +aria-query@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -7544,11 +7495,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -12514,11 +12460,6 @@ luxon@3.2.1: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.2.1.tgz#14f1af209188ad61212578ea7e3d518d18cee45f" integrity sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg== -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -14423,7 +14364,7 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -pretty-format@^27.0.2, pretty-format@^27.5.1: +pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -16429,7 +16370,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", 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== @@ -16455,15 +16396,6 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -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== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -16558,14 +16490,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"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.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.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== @@ -18358,7 +18283,7 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.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== @@ -18385,15 +18310,6 @@ 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" From 93579fa72be218000058f343123819444a42baba Mon Sep 17 00:00:00 2001 From: henrikmv Date: Tue, 10 Dec 2024 10:00:28 +0100 Subject: [PATCH 17/19] fix: merge error in package json --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 775decc004..dea4895ae9 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "@dhis2/d2-ui-org-unit-tree": "^7.3.3", "@dhis2/d2-ui-rich-text": "^7.4.0", "@dhis2/d2-ui-sharing-dialog": "^7.3.3", - "@dhis2/rules-engine-javascript": "101.19.1", "@dhis2/ui": "^10.1.1", "@joakim_sm/react-infinite-calendar": "^2.4.2", "@material-ui/core": "3.9.4", From 6b7dd5fb3a3dd3b9e57d284e06d5940a843501cc Mon Sep 17 00:00:00 2001 From: henrikmv Date: Tue, 17 Dec 2024 10:50:32 +0100 Subject: [PATCH 18/19] Revert "feat: update dhis ui" This reverts commit a0c848f4e8325bd18286799eebf30e72ff9ca448. --- package.json | 7 +- yarn.lock | 942 ++++++++++++++++++++++++++++----------------------- 2 files changed, 517 insertions(+), 432 deletions(-) diff --git a/package.json b/package.json index b15177f985..69e87cc539 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.19.4", + "@dhis2/rules-engine-javascript": "101.19.1", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", @@ -18,7 +18,8 @@ "@dhis2/d2-ui-org-unit-tree": "^7.3.3", "@dhis2/d2-ui-rich-text": "^7.4.0", "@dhis2/d2-ui-sharing-dialog": "^7.3.3", - "@dhis2/ui": "^10.1.1", + "@dhis2/ui": "^9.10.1", + "@dhis2-ui/calendar": "^10.0.3", "@joakim_sm/react-infinite-calendar": "^2.4.2", "@material-ui/core": "3.9.4", "@material-ui/icons": "3", @@ -135,7 +136,7 @@ "@dhis2/cli-app-scripts": "^10.4.0", "@dhis2/app-runtime": "^3.10.2", "@babel/preset-react": "7.16.7", - "@dhis2/ui": "^10.1.1", + "@dhis2/ui": "^9.10.1", "@dhis2-ui/calendar": "^10.0.3", "@js-temporal/polyfill": "0.4.3", "core-js": "2.5.7", diff --git a/yarn.lock b/yarn.lock index 20e24541cb..4c2c7b3910 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1703,15 +1703,15 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@dhis2-ui/alert@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-10.1.7.tgz#259e1fb999be78e0bca02729f3c16cd5d0960d11" - integrity sha512-wLMdedCBWyXl0DZHkHRfDn7l0jz4ZbmRv1PXVeNdd+EPpYSIvacK9rp01SA/WNyD3lMvq4APmJER64ZraIdeBQ== +"@dhis2-ui/alert@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.11.0.tgz#01456616ad601b9c5ff5d71dfb5db102f46e5743" + integrity sha512-jka/E26RkLJexYhi934yj8hpIvdI/mOnFzjwca0kDxnCaJ9JCz/j6x0BklrzRFFt/gGJ9aldG1mVX7fGtIEEvw== dependencies: - "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -1725,13 +1725,13 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-10.1.7.tgz#bdffb97d9ffe8c8004e71876d07c8f16265773c4" - integrity sha512-C7B5ICSgChOSVZfJiTCjPa958mI3/CFmGizGdWaBP2twEHDt9tUm4Rva/oPW18zAT28gkmWFpvYzBP5dtz/WAA== +"@dhis2-ui/box@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.11.0.tgz#92391d2d8bbdb3bdd2714d93e7d519dc041f1db9" + integrity sha512-/ds/LWG8P995QRDHhkVvCS8ao6tOpssAwqFY2PiaRIl2J39b6bmfIVfIQldldiKO1IK05oJmRSCmCx8TfHE9ig== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -1749,21 +1749,21 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-10.1.7.tgz#beb3900428df11c65ed183b1e2f12559d855d95b" - integrity sha512-TXFHe+zuEQ4JY6zMcYSaFqCSMxqiH420AiM3QGot4zx3aemUDhG4Xkufx2e0fBeaOw3p/1WIGECdB0GaLa/l1A== +"@dhis2-ui/button@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.11.0.tgz#ee6a5dec0e44da72a654c546a6c685dbcdc33245" + integrity sha512-b5cA+v0uv+5Dj6CXPiFavOUSgiNLKXRBg6OjeZatUTIsoO59UpOxQoVp4cCo8/kZkBBUyuwsMYO2AHuIarTucQ== dependencies: - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/popper" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/calendar@10.1.7", "@dhis2-ui/calendar@^10.0.3": +"@dhis2-ui/calendar@9.11.0", "@dhis2-ui/calendar@^10.0.3": version "10.0.3" resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-10.0.3.tgz#726560825eb0919db8018097608075a46bd9b638" integrity sha512-yxLESkgO+PlCdkREqzCKGq5KXmKtUjMkRWb6LY3hkpYZ0DmHCrqUpIHGqm/cxA3xo812km2SwpoKgVbmP+T6YA== @@ -1790,75 +1790,75 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/card@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-10.1.7.tgz#21ffe67492cb8f6672d686d79c7d3fa2849f0bb2" - integrity sha512-9zG5Uj+Zqc/zLoe7QU0V9NA7u4AJWUcUii69jUkYNd7qDkxnXDKAwsYji6wvq4tUIXw/J040NO3xKUDIsshj2w== +"@dhis2-ui/card@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.11.0.tgz#17b40d55240a1fb5c34345b0d16e63ab984cfdb6" + integrity sha512-phjsyukZfmxKqqtRxVRuFJdc30S7XfEkEmQv11wWnAjGVl2YxIWKm8SAGShpu0gC8susJg0GBhY7Ts+h5cRvQg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/center@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-10.1.7.tgz#837f3f2344c9c948576942783625418f3ab4590b" - integrity sha512-422wqUrGs9iESVDgUiFCRgLTydysfCOzLphkB8LRN8YMnRqrYgq4rhtze5otaZ4DBi3nTBCcUFglEgxfSN/pYg== +"@dhis2-ui/center@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.11.0.tgz#f3d5a302fb2227a78a8430a706a90a43eae92665" + integrity sha512-LEAW1wlpArkA63sko/24H8C4AHYTGFolIMYjcAFX1GR2xBcFpj/4VQRQFK6P9POtrSv+syVlfw51g9zBfhYi9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/checkbox@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-10.1.7.tgz#959cb05212fdad3539c0f1a3f9cd5d28510b36a4" - integrity sha512-OQiO3c2SIa1BRPWOJxuFjgQYdf05IGqnHgJo1mUa8n6cSpzGgmeX2rm6CWBCYc9T6g/yeCxZD3c5ToHO6rVYLw== +"@dhis2-ui/checkbox@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.11.0.tgz#05d59ac1403a93c44bee2e2e04b008f1851ebeb7" + integrity sha512-jPn/3DCUNLar8EEgUI01h100POtob6GxkcpTkMsRqngN4f+QTAPZGVORVFjd+2nAAG/msHXaqnNqmfwkaKPsaA== dependencies: - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/required" "10.1.7" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/chip@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-10.1.7.tgz#f60038a16012f7f028d6a49041867130f6299717" - integrity sha512-RTF/iiMj8SPOhw4Z0IoUE7JFqpCanoJxPrVDtpFlIpm67o0s+Q+rYaj7skwfA/0ObSIM5NaNegzIal1MHpw0Gw== +"@dhis2-ui/chip@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.11.0.tgz#1e8b4276872b8737ed1607588867d0f6d9800e13" + integrity sha512-jc/CCohXhbTT91AagWIxieybSyAR9Mo91vMjRHbe8qzVua40WezAazhjLCd82ynGjEzHWMryaK7om1VK5hbM9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/cover@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-10.1.7.tgz#07fcfb03baeb0b97535c88e24049149357ba80e5" - integrity sha512-JHaWuuWN4hiBj6JcfMvKhF51IRx1EXSiyGyUl/S14pkKSfs8YaS+GF+p/v0LD/shd4yFsH2yKSVnh7TtPq0r9Q== +"@dhis2-ui/cover@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.11.0.tgz#ea8280dfcb2444111cd0e1da87c566d5813dc1c3" + integrity sha512-mwb15H2gJNOO9ZDZEQclfrvKbb0TvLn3n7BMErR8+Z9oE9j8ycMI/Ks6Itov94dIX2Es+1cHZFMDLJUOTtI+yg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/css@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-10.1.7.tgz#0c4113de70932f9080144d52702b54755f6a514a" - integrity sha512-c4Yb9XFTKhQfPSaxeXGBxn3fGrbPNdbiBnjPqWjNrQpMY03lsicwtF/SL7yBRm4GoH8b9Ag1epmBQmc5DqDQ0w== +"@dhis2-ui/css@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.11.0.tgz#4540c4795b146b3c92feae5ccbca99b198d66fb2" + integrity sha512-TsLR1Jw7fjTqszrybAdw1ouAdV3hPX9v3JJE/iWqTKPHfTSxtEj201jHAqpNWjxiIgEzPJ2AG61fUh44+Iiibw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/divider@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-10.1.7.tgz#f45f538c150fb52b3b11350e42c67567fb9b9eac" - integrity sha512-96stq34cvDFCgopneFqIMwCx+KZZPcASC4ReuFTzFzO254mjrEY9uJPonFhNBuk5f17RDAKrG/oNDOkB644TCw== +"@dhis2-ui/divider@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.11.0.tgz#af514387024824102dbdb352058809f1d54c8901" + integrity sha512-zDFjs2BZF3Dra8cpYypYmvYTnFgItHoFOAGs1JfVlvTcWGpaggf1ah8BcxqFSxOg7rgL0CGtF9uLujGNdbla5g== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -1875,55 +1875,55 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-10.1.7.tgz#5b8f3b90acf7997c55186d151396083064e4ce8c" - integrity sha512-azpbsC+HnHmLOeqMPs8YacVM1GHAG/uD75gtxcumvrpU/4XyI/sJheAx3qlbwmRetneyJ+AfCqAHsNEwuwuSVw== +"@dhis2-ui/field@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.11.0.tgz#c57c623ea4ad32a6440062ed4ee81e2130d80f75" + integrity sha512-pVFNqiKVgsefxpgfMnrM6mU9ZM1qZtRAZsDjzooYIlh1r0nUQt01GKgn0TTdyICIoqO3lNLxvxNA5SXv9QRqfQ== dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/help" "10.1.7" - "@dhis2-ui/label" "10.1.7" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/help" "9.11.0" + "@dhis2-ui/label" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/file-input@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-10.1.7.tgz#5da82cf2a1395ca0a4ae1d8573b39f3347215974" - integrity sha512-TJGFj3iPtcWWNjM5dLqH/rCnNVnW92kD0NhvVDPR+7G7ricV2WpnbG6Bs1ntr3fKCPHZRZLfimNiXTwbltn3Qg== +"@dhis2-ui/file-input@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.11.0.tgz#77735de2a87f734a4041f4a397911313dc816df6" + integrity sha512-CWp34b6hMc67V5KJow5orPzLTVJzFnudouXYQEiPd3fUHJa4xRYW+GvbL+uY46VvF+GSB82eP5+z4PTgicZWxA== dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/label" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/status-icon" "10.1.7" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/header-bar@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-10.1.7.tgz#6d0d205ae7da93def21d1e5e9851d34b62b1af91" - integrity sha512-Uh/r0Yx03f+FH59k40IFn49BqNTUFgM91VVk4zbHzJSjjKp6bDkvSHXnJ1qnjmuHFX9mAQePosMNndtC+jhbIQ== - dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/center" "10.1.7" - "@dhis2-ui/divider" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/logo" "10.1.7" - "@dhis2-ui/menu" "10.1.7" - "@dhis2-ui/modal" "10.1.7" - "@dhis2-ui/user-avatar" "10.1.7" +"@dhis2-ui/header-bar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.11.0.tgz#aeac3955e407e4c398daa81ae3231b52bcd18870" + integrity sha512-1NRznu2gluvAc1Kd5Ogt7K7rlfvvlvouUYGC9kn+mLYHj/h6T+eeTOS8Y0uEJLgmfuuklm2omZ+ASUIY3A7+iA== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/logo" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" moment "^2.29.1" prop-types "^15.7.2" @@ -1938,13 +1938,13 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/help@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-10.1.7.tgz#e2d8dad46084d1a899897b3ebb0df9538b778d42" - integrity sha512-/495qpKQrmgf6DUSeyBEHagnHNM8duw8ZY4FgoQ2p2W14wKhd4WLn1ZSLHONqhRVj/rMqlWA8dmT1i9mB1AZeg== +"@dhis2-ui/help@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.11.0.tgz#071ed4ff473cbc423b7a1f51c7217b6bbf057974" + integrity sha512-/n1bnolladI44ZVSzxKvt6SnsAlVK9G76uT1pTMNyMRDHCIpZc8070HADv+2GGD5YbwSpltClgy+3U4xPz14/A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -1964,29 +1964,29 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/input@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-10.1.7.tgz#653b775f8163f5a734bae7450784cabafaa150c8" - integrity sha512-kbHnJPRmDMX2Dnbv5qk6Kj0OsycyxU0pB3b2BrjRUHg85eIpq48qCGb9zlvyMiwp2MQJ+0/RU5jElzvofLrZpA== +"@dhis2-ui/input@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.11.0.tgz#4dd6efc15c82605468a3e1211f0b182bd5c66a08" + integrity sha512-jx3scjWkhO3s7SzaTfYUOYpOacGfS9317fGEshrirdkh6+jzLF+qbWLM9BX/hf63JfU4iPZC4cZzr0yWgxohDg== dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/status-icon" "10.1.7" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/intersection-detector@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-10.1.7.tgz#3341c1a96b5f1e4bcb38fa952154c34fdeb8d7b7" - integrity sha512-vI/NGCbPlkpzgKrpYKQA3PR+kY+duAJrl7KJnLMLwFKiIyhoeixxvsNiCy2L7OPfDdlEWM8Jqv3ODc3H1p9fCg== +"@dhis2-ui/intersection-detector@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.11.0.tgz#cad6dc8095cdfc9db133fd8a46d19e90130e4f07" + integrity sha512-Dr1WUDvcWbKFFu2DoCwfLwokM/d1oQApEkbAmUBSkAv9uWx61VgLlH/Z3I/Pr/VSJuBR3zWSpmVbduLlFs1Avg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2001,14 +2001,14 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-10.1.7.tgz#705d5d5b288e0b06b6eee81e52a007808e7e0810" - integrity sha512-os6KDWXccquyI25DKgohttRFg/0OuCYqpJ/EIWAL6VGaNaZh0w3FOi/5trNjl6AVacMKkIdVFN0L3QArk8u4Qw== +"@dhis2-ui/label@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.11.0.tgz#286e9b1b79ef7cf45d500a893b4c0fd6b11eeaec" + integrity sha512-wOlHjghmey9nbytOKHHfwzaUzxqgXcmTzy7ntkRBsmqVMdJ07+pL7iFId4EFNdGz2aGPGPAs1qmMEqDJPoz3eA== dependencies: - "@dhis2-ui/required" "10.1.7" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2023,25 +2023,25 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-10.1.7.tgz#09ea0be4f3e0446c3423f04693ea605932c4cf89" - integrity sha512-L+cXOxttiM47YZp+JOA1gUWqhESN69UaELEj7xBE0oMcIbDMzM/QDL4KlhLdqzvLRK787xtBr75GvRby2lfDkw== +"@dhis2-ui/layer@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.11.0.tgz#ffc80120cf38236ec04291e1bb992549c4e685fd" + integrity sha512-jCrgn2n4QlxTY7GRhwgrDqTbMaju7SDUGrrqOTBZXg8bCoVBazqh3dgUUWogOVJ8UH6ob+tycfXvbUf0lJClNg== dependencies: - "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/legend@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-10.1.7.tgz#00a095dafb995667071287b10007389e472a0ee0" - integrity sha512-LlM+SpqRCa4vMu6aAiVyfrAL4v7026IOLnCNV7dnizHeBAGcbtTcXKXHuyuE7QEXqs2cmDi2ZudZY0yAjAMF4g== +"@dhis2-ui/legend@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.11.0.tgz#f8c8201ae9da75c815810715d3aca38e03fb585d" + integrity sha512-MxpJbao+t1qhUrStLhLAn2+Xt2G2gyoiHEf7BeF85opf5HsY+9Xbki1RemP69ixe906czCKD2gieZxNNpdQYBw== dependencies: - "@dhis2-ui/required" "10.1.7" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2055,115 +2055,114 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-10.1.7.tgz#113e20647451abd3f583e122f2b0fedc55b75a24" - integrity sha512-iivxY9J1OMEuVEGxWyT7PhMmIXM630q1WQvfZwJ/saLihueVlQxmEjStpdD7vnQBiGs/CkT0GP4KDCHP35mVhw== +"@dhis2-ui/loader@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.11.0.tgz#f0a2f8f0646efd9bce632194eb68bba0f1512c2e" + integrity sha512-98M8KmGYYeROkGE/rZ8e3BHQKgfk7ZsZmYrhr6JyEYUWoW+rDHeR/a5bprbMmie//+ePdOx2UxZUJKIDUZEPvw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/logo@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-10.1.7.tgz#91ff7e826a4572e89e7775380d44e7a22d343563" - integrity sha512-5FTSBjNf0R35MmpEX9nl+syb9Q/GyocZSXVxyhCe8tH/KXEd+AreB9LpFmDAaG8Y9QqBVWKgAhTCBZZxFFpMKQ== +"@dhis2-ui/logo@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.11.0.tgz#2ff0058cc6dffcb0dcf6182e70429d0fa710dcd4" + integrity sha512-R0nebCjwHeYbq0+N2xje1NOTI6bcUB16riSNBBimyZAQXqEWUyiuqxISf49UUG+Ed7UjkcMnJe6AmL+Yoemfug== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/menu@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-10.1.7.tgz#704beac1ae165693191c0c49ae7e2b2a124794f1" - integrity sha512-okq9+ZzOXQ5sJKgeaKHZ0qewS9yrNY4vq11iabqBFc76ZkPKCe/bJo8pOxHyIUSEx/VpJCD/8yrBBOkgUQx9fA== +"@dhis2-ui/menu@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.11.0.tgz#33b5f74e193d36dd4a13175bfeaafdaa6ae8373d" + integrity sha512-613Yb3IK2JQGrOTP6caCRkSTqqrOkL0K1Frsv0Uzhts066bZQaIT7drL0T+vIFv0+sgRSGyfBSfTrYQofxnKYQ== dependencies: - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/divider" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/popper" "10.1.7" - "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/modal@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-10.1.7.tgz#3de7ea33ac2299d33670beac8dc5a442976b053d" - integrity sha512-mJXtdjQ2JN01EPnvlxFkue3N0RuKig+Un/fOEGz6hGWvIuW+9wxbIs0+e2gZIr4GaN2m4on1XBMwDVGlwc6MAA== +"@dhis2-ui/modal@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.11.0.tgz#c16b04787641e9f64d385c55959fa8f5537f1acf" + integrity sha512-GDg7uad+/eLvadJEXjVoHTlEfrd639QmVVdjEcvC+RtHOOXKjlR3wpm+FvgUSbw7zhXpcZ68LNdga9X9bjn14Q== dependencies: - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/center" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/node@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-10.1.7.tgz#f98fe0f06e0ddf0fbe51244d6101e7d6464a6eb4" - integrity sha512-hIw5pOoAYRL10BaQa0xlQyv/CU3dp38J6OHQp9jGdpvBKfv3j5vYVCzjs7XgDP2B/4bXzb1Cd/j6EYEHeXDJyg== +"@dhis2-ui/node@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.11.0.tgz#d4cc2b0ca1b653247bf3bf90a9e4152780f61253" + integrity sha512-GfI9ecBzJGeZnS6fLiS19eAg+w9hIXOC5sk69S5NOEKDbCU+CWR97GSpb71RBiq9QZuNBtNEZU7Vqa01+G041Q== dependencies: - "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/notice-box@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-10.1.7.tgz#0b872251fa2792314357fd6409bf1c8cb50af4c4" - integrity sha512-4e64DfNhSILQnsTY0DK2l8JGJ6sxakbjUhSrG1bOV3Vs6tzT/cEQVRn0PCYHBFuGMT17HEqU9eA/koDNM83kvQ== +"@dhis2-ui/notice-box@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.11.0.tgz#2bd5c4a13a9d021c2d694f94ee6520276ccc533f" + integrity sha512-xEfsxFVoiMxVjqvf9QyB7w83cwraS+aS1HaOXTySvseOd+jSk7YlYAQJ2RQbGmik7rsSlyNMXbWoJ9TaJ8Y/pg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/organisation-unit-tree@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-10.1.7.tgz#274ee0044e0901bd896ef0374301c905f7c05c6d" - integrity sha512-jbVh6Fx94hMiyYrf2Ajyw7WVyFzbKJ8k96nJIZ0PxdzR/4CE21GIyWmmk+h8ie36hrcw+l4uffx/V/Rx2M4Asg== +"@dhis2-ui/organisation-unit-tree@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.11.0.tgz#c626c71cac19ba93241a6e36fad2d261f3307c32" + integrity sha512-2mYpgBPjmNlkCnCLrDmmPtC1rs07uxlEeqULTCiqRcbbWzEYL2S+fAao5IiOrlzXR9JIVlG7P8htMYNfj48tJQ== dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/checkbox" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/node" "10.1.7" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/node" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/pagination@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-10.1.7.tgz#55d5f328489a8a8af608fa53bfcfdba39851d041" - integrity sha512-dC24hpJYBFFx/bsmR8QNSkQ+df96ucflH5toKKLH46R2F2jnVC+BSWjFFBJTMgLdlt77LeOU+Sk0Mo8QFzkFMA== +"@dhis2-ui/pagination@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.11.0.tgz#6967b1241ec3c36855e4570125e202752a6db577" + integrity sha512-HllIE5IVsNK1vM9wxRDfrLtxrrMWOxDEV+8B6QKG9qLXubfoFZL6+b5MGHo/mzDzY+7LxxBpiowoYaj52QMFYQ== dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/select" "10.1.7" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/select" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popover@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-10.1.7.tgz#00fea909d6fd8f591a313860760b6a7250a92199" - integrity sha512-JdcOSC/0uB9z+UAoBfoLctdOtnq0NVK3vyK3MyXkIYcwI/Dg0Ooj7eDBl3MSxB+1cNzDi39WjebZNym2yDRu8w== +"@dhis2-ui/popover@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.11.0.tgz#c6af553735f6c441c59514841f732f3f3ec86371" + integrity sha512-jad3kEqIyvhKQ4YBUGIbvcnFinED9ywgIfp0AG7sP3t80S15/aso+kTPyZ06Tgt/Slk6o6vHEuUy5SSpgnaLcw== dependencies: - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/popper" "10.1.7" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2180,13 +2179,13 @@ react-popper "^2.2.5" resize-observer-polyfill "^1.5.1" -"@dhis2-ui/popper@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-10.1.7.tgz#6f1301bf199a4168b9472cd8b65913b90280b098" - integrity sha512-txyPI976vIEmMYqrUVM9dG4ellj1vdx5FUPKK7vN12cSFpISXwv/A44JGz6v6LIFxdNhX7nrNrS32Z90LwaxHw== +"@dhis2-ui/popper@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.11.0.tgz#6b08e1f32588384b408cb6fdc6ba65369fd0e392" + integrity sha512-RIUSd0qmV0gCE1aTX9kUv8hYbat/5wUECFAhMF/0mqkDZAqTGpyQDFHFTPwAc37wNaxOXb8z6dDMozaNn5OpQA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" "@popperjs/core" "^2.10.1" classnames "^2.3.1" prop-types "^15.7.2" @@ -2201,21 +2200,21 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/portal@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-10.1.7.tgz#0604c29605f37b5cfde483c64c44256f02df3bea" - integrity sha512-XouvZGebTbO7s0EtuuZ1u2a2DXdF5sest883FsYlU8d+SinRrSYu3dLD241KRArkkXiXSvg2yRtV3qG9gsgxLw== +"@dhis2-ui/portal@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.11.0.tgz#4a3e874d701f1a5b872e717abcad645e073efc16" + integrity sha512-z0hhTMtUK8pQvA9cl6VU2QYvlEFPamxPT3MWGKcfhUTkPj/zrA0ovKWRZwrcEN0AoXb3bqc6TsS6szJL0ohi1Q== dependencies: classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/radio@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-10.1.7.tgz#fbb379cd40dad877177201721b6021226341dd9b" - integrity sha512-9EDugtL0aUfe6fUBq4OR4qn3eYbMPgcnIq67zSekNB8D0rNCxi5WuOVKH99WIPy4OxBdXiHQeJOnc8qT3edl+g== +"@dhis2-ui/radio@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.11.0.tgz#e9fbdcfd3fc8e6cbc0107c00606c275fe19d56b6" + integrity sha512-YAI/uow1R+LwANKfMOdOqXYBrrRowf23fQDgZNDvdxVAYU3BxHBoCKhx/14qyslcHv6/pwDLghvDUw0un5suOA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2229,85 +2228,86 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/required@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-10.1.7.tgz#5be095b167e3a2f6d9b6e9225aa1aa553619538b" - integrity sha512-tqho75ulRijnd4irWwdCXvSeHNsKxvB+4Yxbuvb2fWuIQLD0KQZr9pvqSyV5Tec0EkFUmTKerjUi7VEzFw9xPA== +"@dhis2-ui/required@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.11.0.tgz#71f2dc7cdbb5b9bd412316af5ccb611caf261484" + integrity sha512-2fThUG/+wdOeQeuZD52M/TdMTCRSdxPxt2IIdkc9MUC+MmvMieJOFjYTzaHaItSqy0huNnOEvmaHEOTcERae/Q== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/segmented-control@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-10.1.7.tgz#15e27b9f2099409064e060e0c1df7fe4f7a32a7c" - integrity sha512-UWM/urmX2CGgAemJgLz4eLkClpi9d91fNjhq0XWNAB4JyE0Gl26G3Be6sY5XQFNGIbiuQSxXW2RgwYLbegUK1g== +"@dhis2-ui/segmented-control@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.11.0.tgz#97b80b28543039a7c75914df9fe8147d9141b6d3" + integrity sha512-Ejv6/zCa7o9PFK9BvroSio0DgSZt2Ue7Q89MkJYee7yH5dAe6uuCcZ8/lrtpOWOoqEQtDpsrAF6bU5LVjSsAng== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/select@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-10.1.7.tgz#ae9ff1ddedefefd39acc11eac8e660c53df80341" - integrity sha512-5I3hzN0wFJx71dTqOrWkw6dyUNWnjHX0Eih+6Dh2+3IU5aOcTb1q3bHPsH3RksmOSWy1mCOCut3sobPJAlk78Q== - dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/checkbox" "10.1.7" - "@dhis2-ui/chip" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/popper" "10.1.7" - "@dhis2-ui/status-icon" "10.1.7" - "@dhis2-ui/tooltip" "10.1.7" +"@dhis2-ui/select@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.11.0.tgz#8f09f3500a37d9ad63d9bdb58ec9cfe224626fff" + integrity sha512-sfOZMR+7LaxfLseYyyqrGKBiZEuUCI/IDJXvakIaCqQGhSjjkY5Y8FC6LMZl/0TQUP8yCIjKaqBaUukLZxN6jQ== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/chip" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/selector-bar@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-10.1.7.tgz#8cbcfa3ce367f9828fc5aa4a08cb4d7b314b5590" - integrity sha512-kWoiyrv1w3YQoZD6ZfTPcaTOcsHuCuLm/zQEfjQnUAxQsJVbEuifZMsPIrfyi18jvbYdl8iavGh5fI2JxgV6gg== - dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/popper" "10.1.7" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" +"@dhis2-ui/selector-bar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.11.0.tgz#a9ef657f0ecacce87e67e343ccbe60813067186c" + integrity sha512-7VqBu0GSk9By+5Z4B6R2lNEPHUyXjOWWV2fgD29jH8zj7Z65XffJS/A1da8M33uSFX3sstOkpyZVHo71vx0cAA== + dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" + "@testing-library/react" "^12.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/sharing-dialog@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-10.1.7.tgz#9b78ea4d12e4b910ecf2e3f796f43a67b5dbf14b" - integrity sha512-c799n47jhGft8XjnB323yrcNMzUuPUdxy1C/33Jod7lL/VHvzr5FVuaKxeHmY4bcBXCVITlZHXTHLWgrHldTxw== - dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/divider" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/menu" "10.1.7" - "@dhis2-ui/modal" "10.1.7" - "@dhis2-ui/notice-box" "10.1.7" - "@dhis2-ui/popper" "10.1.7" - "@dhis2-ui/select" "10.1.7" - "@dhis2-ui/tab" "10.1.7" - "@dhis2-ui/tooltip" "10.1.7" - "@dhis2-ui/user-avatar" "10.1.7" +"@dhis2-ui/sharing-dialog@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.11.0.tgz#9adf070335b45b99c718642a887e6f3bc8e3bcad" + integrity sha512-5LSZhO13dXZ5jOSpN2GlAlBfcZmRBrgye13cKvYgEWy+n1CWe4nJwQLYtfYoH5rItCBsjfS4/ouAFu6/koOPcg== + dependencies: + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/notice-box" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/tab" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" "@react-hook/size" "^2.1.2" classnames "^2.3.1" prop-types "^15.7.2" @@ -2324,112 +2324,112 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-10.1.7.tgz#d95fdfe72c01c3ea12438259d2fd50aa880e4462" - integrity sha512-4tYj6HnLN4o8BXRs17rcO/ENexivFJNtQi1NV+X3IPUVhEPVxPF5maNy+T5ihNghWF9gGokhVCdrOrf9r0w0Zw== +"@dhis2-ui/status-icon@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.11.0.tgz#2387a0ed48ecd9d09a76fd30ed249efa6df9ee00" + integrity sha512-EUEwH+Q3Z+Y0bdra94NmyqDyUz3gSOijEhIX3BPfk7mesvY9mLp87PvBaSfHJIHf1xywTI/Py067Et6MLPUR2w== dependencies: - "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/switch@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-10.1.7.tgz#16bd202f092545ecba6b1762edf0d5cf715e255a" - integrity sha512-x7W0syi7QC/WpXd7HVWEtYvccrx9c/72Nj6AQQ0vc0pVA1PWcG6cFzfXm9xyLElmWpttNtxBzlBdNyb8pD6qJw== +"@dhis2-ui/switch@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.11.0.tgz#2eb848cbf0471375912ee48849d1beb949eedf45" + integrity sha512-norlPc5z/YCNVIHTqU/BpKii+c6biSAXV1Sv+wlfh2eXTa78+lFUNOG8RoO5lQCUmOC1bZd5+L1BjUwh6MlOVw== dependencies: - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/required" "10.1.7" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/required" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tab@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-10.1.7.tgz#0dae4075afff658177ba4e28d6493714296c68b8" - integrity sha512-NHdfKDocEn1g+aiEzVGe1/jwApdRkgojxJBA53V/mvBPiGO1WwYQaIXPrndZVE5Tqu6OxAHDmDtu8cM0SWWrUA== +"@dhis2-ui/tab@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.11.0.tgz#4e475d915aec266919d4c4fc73f58a6144312901" + integrity sha512-ijjxbxOeFe6iOQEZ/bICEjTDnq9PNkBSnO74rR/PImrPvsHUU+d2ZOSYWkh3TwFL9QQ76Vb9NwcAo6eSOGdVOw== dependencies: - "@dhis2-ui/tooltip" "10.1.7" + "@dhis2-ui/tooltip" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/table@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-10.1.7.tgz#47cec234cdfddbc9ef6bf4587b8a2f110a27cdd6" - integrity sha512-6FPSw3SJbXkI4Qk8INxu+3lwDbt/HVrhpN73uzt9q60F6s4EbyoH+DVlUcXPbWvWw0oW68mpX9l8npMD25n1Ow== +"@dhis2-ui/table@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.11.0.tgz#4c37dc4f334ceb49e1d11a3c9839ee229f2e9bd9" + integrity sha512-qc2OtBe9LqDCci3wJM7y4JSA5S3AfubxnySMMJPPEo7jilb6aAEheYFKjfmRXdUP+GxMUdOh4hCUQ22LAG1i9A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tag@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-10.1.7.tgz#80b73d0274a51f87b82c31af6d175ab3341a7dcb" - integrity sha512-c0pw3IlTukkcDc03S99BJMg+ZZyGAXP993WFnWvzBfBdyUQFLiDVVj9wyUHTv45Aa/U3PHPDJltMIqvDXtq28w== +"@dhis2-ui/tag@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.11.0.tgz#f1c292d72a84e6e04cdbe4ae16d16ff95f28579a" + integrity sha512-FMN/1NmHyKUdFNdw2E7Bc1UnAFhyljGTwD3DXegY5ncEYBafWQjzLXyQtHJTlu58VfdBwwQ/nIG9qChJj6w2zQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/text-area@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-10.1.7.tgz#6377db5d125471882b248aa9dbb2d1d57fc68bbd" - integrity sha512-8dvUo8WqKah79WhaDxEAcSI5vByywFkaAYudR8qoDBk3fh9mF+IrtcPXGpU81F2VxN7NqFZdG8l8YM7QXijxVg== +"@dhis2-ui/text-area@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.11.0.tgz#e3568e70f9b0ecd45f4e92820f59184db5fdda4b" + integrity sha512-UPTK0PKiicU0OjfyMcNCN8znlrGicUyMY2MoSC1n2Tck2S0JUaCbG4Daski8uCMdss/2ZIra/k6vlP/KWzlHzw== dependencies: - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/status-icon" "10.1.7" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/status-icon" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-icons" "10.1.7" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-icons" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tooltip@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-10.1.7.tgz#738673450fe6eedf73aff13231905f7faa1a5752" - integrity sha512-CE0s8gU1gxRkJkx8Aw/98KJOkRud5icnN1VOF16aHiSGUDMzAG/AUpCgG+dKZMr3ImBbt3xbvzgNTn0ORqJF1Q== +"@dhis2-ui/tooltip@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.11.0.tgz#53095be4ebe458f0b8e22c55f50ddef7fea28255" + integrity sha512-zyGF3J0bpUC3JJM8WK9C+lm5x7fNGnzH0xrgYRP1TbcI/2RJNzlNsWr/pfNfHNqRqSwseai7Q2ssQWyADkuqPQ== dependencies: - "@dhis2-ui/popper" "10.1.7" - "@dhis2-ui/portal" "10.1.7" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/transfer@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-10.1.7.tgz#1797ba682a738d4c2077b193f2eaa86cc711a418" - integrity sha512-WqhZfeofVXCcBNsld9RZo5W2Xj2Yw8eT+Vjpy+vTVJtEpVmtXBzISM8/c5vrso9+nGzYzli4CYb6B09RIMJJJw== +"@dhis2-ui/transfer@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.11.0.tgz#f5d445ea46ecad95c47f90ab61648b1b1082cbc7" + integrity sha512-sSmhqSKcuCZSXG4pgLTPNJuY/K8oSGg92x7sHXQfrLFbrnsSenD6ckJjnMt4hWXNHW3xPbG5jVlB+CHWKCLrYQ== dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/intersection-detector" "10.1.7" - "@dhis2-ui/loader" "10.1.7" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/intersection-detector" "9.11.0" + "@dhis2-ui/loader" "9.11.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/user-avatar@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-10.1.7.tgz#da816edecc527c043bcdae7b4bc79f293ed81454" - integrity sha512-bPRkejqPh0QZOGU5qm/hAjBAzFCI4YHBRRqMdZjsCn66rIZg6BcEc1UNX1nIV1XwrxP5hD0pGdM3dH/34OnpVQ== +"@dhis2-ui/user-avatar@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.11.0.tgz#82bf405f33d912961ae7447820140e510907fa57" + integrity sha512-4mK1eYYwe54rCsoDxxEqHlSMDYm0G6Ls5UXKmgi07nGvUL9QM2gUEW8J/FPmQDgFcXiBKAZpAbu5yc7d48lIbg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "10.1.7" + "@dhis2/ui-constants" "9.11.0" classnames "^2.3.1" prop-types "^15.7.2" @@ -2750,27 +2750,27 @@ dependencies: prop-types "^15.7.2" -"@dhis2/ui-constants@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-10.1.7.tgz#040704928bdccc7c077810e766db32647276a964" - integrity sha512-0aeGNhp0A6LoNWG8FrYgBhHhPtQ71pCJF2GXndTemMur2oNIemhrh3GfQElIqjIe9lmYvWps6ZxMSBbzppDuPA== +"@dhis2/ui-constants@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.11.0.tgz#0f41339dca04c95d026c278d17ff795cbe500020" + integrity sha512-uN0vH+HXtnVYmFGj0fARrsouKxMTEKHmq1aGuIbxK49+AcnMtxUirqXwuYx6wc/lJTl+MqdHKGqwTgJvEJ3TGQ== dependencies: prop-types "^15.7.2" -"@dhis2/ui-forms@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-10.1.7.tgz#6c87f8479857cec852420156eb19758dace82ffa" - integrity sha512-UuspkJrPCzLFWu4TzZGakcuozAETXJBnSqATK4Wv0mLe+EZTkzRbz28x9/3ezFLNSdHzQSK3mLXrA2qA7tifMQ== - dependencies: - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/checkbox" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/file-input" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/radio" "10.1.7" - "@dhis2-ui/select" "10.1.7" - "@dhis2-ui/switch" "10.1.7" - "@dhis2-ui/text-area" "10.1.7" +"@dhis2/ui-forms@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.11.0.tgz#4b71be63e5e671dff29a49a9cf906375d2d7ce2d" + integrity sha512-A/gL3QJByckMHeSAnLCpU5FcvBp3l+H16YpJXhNYYHXistaxPfSCwzO+VITl+MBJCi30umbe4hN/rVWjiTw60Q== + dependencies: + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/file-input" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/radio" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/switch" "9.11.0" + "@dhis2-ui/text-area" "9.11.0" "@dhis2/prop-types" "^3.1.2" classnames "^2.3.1" final-form "^4.20.2" @@ -2782,64 +2782,64 @@ resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.0.3.tgz#70666c96943fdcafed99afaaaae00a16debc2e3a" integrity sha512-ax7b+UDdGhkY2MJ/dndEs18N0qxi4IzFlu6VTF8OoGTvBflyf4KkG6jHLQY4nfdHzM5O5uY2jCETdfwWFVoUNg== -"@dhis2/ui-icons@10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.1.7.tgz#15cd3e6d30637651602070f2f316faecd4ebb8d8" - integrity sha512-Qps+P17FkbPKRkrKM4uj7ia6LX5sPhH8W0zgWvov3BudSKEIQsg5gVaqjiOGn2mN1q03i7fF1rXhYPbGOtPkAA== - -"@dhis2/ui@^10.1.1", "@dhis2/ui@^8.12.3": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-10.1.7.tgz#3a03feef72192ef08d43131b40589a76c81ad8b7" - integrity sha512-6Cej1A/pBB90T0aEcMBUtTwwmb5+eomltGgrKV4TEZHUHe3MUfcHd8c5m8csRhNS9mCBRcRgQro+ei0DyG8gCw== - dependencies: - "@dhis2-ui/alert" "10.1.7" - "@dhis2-ui/box" "10.1.7" - "@dhis2-ui/button" "10.1.7" - "@dhis2-ui/calendar" "10.1.7" - "@dhis2-ui/card" "10.1.7" - "@dhis2-ui/center" "10.1.7" - "@dhis2-ui/checkbox" "10.1.7" - "@dhis2-ui/chip" "10.1.7" - "@dhis2-ui/cover" "10.1.7" - "@dhis2-ui/css" "10.1.7" - "@dhis2-ui/divider" "10.1.7" - "@dhis2-ui/field" "10.1.7" - "@dhis2-ui/file-input" "10.1.7" - "@dhis2-ui/header-bar" "10.1.7" - "@dhis2-ui/help" "10.1.7" - "@dhis2-ui/input" "10.1.7" - "@dhis2-ui/intersection-detector" "10.1.7" - "@dhis2-ui/label" "10.1.7" - "@dhis2-ui/layer" "10.1.7" - "@dhis2-ui/legend" "10.1.7" - "@dhis2-ui/loader" "10.1.7" - "@dhis2-ui/logo" "10.1.7" - "@dhis2-ui/menu" "10.1.7" - "@dhis2-ui/modal" "10.1.7" - "@dhis2-ui/node" "10.1.7" - "@dhis2-ui/notice-box" "10.1.7" - "@dhis2-ui/organisation-unit-tree" "10.1.7" - "@dhis2-ui/pagination" "10.1.7" - "@dhis2-ui/popover" "10.1.7" - "@dhis2-ui/popper" "10.1.7" - "@dhis2-ui/portal" "10.1.7" - "@dhis2-ui/radio" "10.1.7" - "@dhis2-ui/required" "10.1.7" - "@dhis2-ui/segmented-control" "10.1.7" - "@dhis2-ui/select" "10.1.7" - "@dhis2-ui/selector-bar" "10.1.7" - "@dhis2-ui/sharing-dialog" "10.1.7" - "@dhis2-ui/switch" "10.1.7" - "@dhis2-ui/tab" "10.1.7" - "@dhis2-ui/table" "10.1.7" - "@dhis2-ui/tag" "10.1.7" - "@dhis2-ui/text-area" "10.1.7" - "@dhis2-ui/tooltip" "10.1.7" - "@dhis2-ui/transfer" "10.1.7" - "@dhis2-ui/user-avatar" "10.1.7" - "@dhis2/ui-constants" "10.1.7" - "@dhis2/ui-forms" "10.1.7" - "@dhis2/ui-icons" "10.1.7" +"@dhis2/ui-icons@9.11.0": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.11.0.tgz#f9ca73d12b26ba3dd1a1ccb381cc3fc39ec15044" + integrity sha512-1XTls+m5xyQKDTgsQ+ehtLOgUdHqIAmKuwSkTf9/LtFpa/Wt2t9waKI7KIZYUL1MhPXSd0d9k2eEClPhseH+4Q== + +"@dhis2/ui@^8.12.3", "@dhis2/ui@^9.10.1": + version "9.11.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.11.0.tgz#da8d4791ca7bc6ceb7d681ce6b743f51dc8987a3" + integrity sha512-vO1GhzbhOHJBVPLjFHyxH4JTbcf5z8xas5iyoRry+tUzDB81CGRB4Hz9C73w8Kw6lyOicrDP/B/keKk9LpDLSQ== + dependencies: + "@dhis2-ui/alert" "9.11.0" + "@dhis2-ui/box" "9.11.0" + "@dhis2-ui/button" "9.11.0" + "@dhis2-ui/calendar" "9.11.0" + "@dhis2-ui/card" "9.11.0" + "@dhis2-ui/center" "9.11.0" + "@dhis2-ui/checkbox" "9.11.0" + "@dhis2-ui/chip" "9.11.0" + "@dhis2-ui/cover" "9.11.0" + "@dhis2-ui/css" "9.11.0" + "@dhis2-ui/divider" "9.11.0" + "@dhis2-ui/field" "9.11.0" + "@dhis2-ui/file-input" "9.11.0" + "@dhis2-ui/header-bar" "9.11.0" + "@dhis2-ui/help" "9.11.0" + "@dhis2-ui/input" "9.11.0" + "@dhis2-ui/intersection-detector" "9.11.0" + "@dhis2-ui/label" "9.11.0" + "@dhis2-ui/layer" "9.11.0" + "@dhis2-ui/legend" "9.11.0" + "@dhis2-ui/loader" "9.11.0" + "@dhis2-ui/logo" "9.11.0" + "@dhis2-ui/menu" "9.11.0" + "@dhis2-ui/modal" "9.11.0" + "@dhis2-ui/node" "9.11.0" + "@dhis2-ui/notice-box" "9.11.0" + "@dhis2-ui/organisation-unit-tree" "9.11.0" + "@dhis2-ui/pagination" "9.11.0" + "@dhis2-ui/popover" "9.11.0" + "@dhis2-ui/popper" "9.11.0" + "@dhis2-ui/portal" "9.11.0" + "@dhis2-ui/radio" "9.11.0" + "@dhis2-ui/required" "9.11.0" + "@dhis2-ui/segmented-control" "9.11.0" + "@dhis2-ui/select" "9.11.0" + "@dhis2-ui/selector-bar" "9.11.0" + "@dhis2-ui/sharing-dialog" "9.11.0" + "@dhis2-ui/switch" "9.11.0" + "@dhis2-ui/tab" "9.11.0" + "@dhis2-ui/table" "9.11.0" + "@dhis2-ui/tag" "9.11.0" + "@dhis2-ui/text-area" "9.11.0" + "@dhis2-ui/tooltip" "9.11.0" + "@dhis2-ui/transfer" "9.11.0" + "@dhis2-ui/user-avatar" "9.11.0" + "@dhis2/ui-constants" "9.11.0" + "@dhis2/ui-forms" "9.11.0" + "@dhis2/ui-icons" "9.11.0" prop-types "^15.7.2" "@dual-bundle/import-meta-resolve@^4.1.0": @@ -3886,6 +3886,29 @@ resolved "https://registry.yarnpkg.com/@teppeis/multimaps/-/multimaps-2.0.0.tgz#2114ee964b702f9777d0e07899087ad9cd89a0de" integrity sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w== +"@testing-library/dom@^8.0.0": + version "8.20.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" + integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/react@^12.1.2": + version "12.1.5" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" + integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.0.0" + "@types/react-dom" "<18.0.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3896,6 +3919,11 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -4169,6 +4197,13 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== +"@types/react-dom@<18.0.0": + version "17.0.25" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.25.tgz#e0e5b3571e1069625b3a3da2b279379aa33a0cb5" + integrity sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA== + dependencies: + "@types/react" "^17" + "@types/react-redux@^7.1.20": version "7.1.33" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" @@ -4194,6 +4229,15 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^17": + version "17.0.80" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" + integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "^0.16" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -4206,6 +4250,11 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/scheduler@^0.16": + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + "@types/semver@^7.3.12": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -4973,6 +5022,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@5.1.3, aria-query@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + aria-query@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" @@ -4981,13 +5037,6 @@ aria-query@^0.7.0: ast-types-flow "0.0.7" commander "^2.11.0" -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -7495,6 +7544,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -12460,6 +12514,11 @@ luxon@3.2.1: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.2.1.tgz#14f1af209188ad61212578ea7e3d518d18cee45f" integrity sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -14364,7 +14423,7 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -pretty-format@^27.5.1: +pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -16370,7 +16429,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"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== @@ -16396,6 +16455,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -16490,7 +16558,14 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"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.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== @@ -18283,7 +18358,7 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"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== @@ -18310,6 +18385,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" From df83ca122340fb534094a87a8411432bec34a204 Mon Sep 17 00:00:00 2001 From: henrikmv <110386561+henrikmv@users.noreply.github.com> Date: Tue, 17 Dec 2024 10:54:34 +0100 Subject: [PATCH 19/19] fix: revert changes in version after dhis2 ui update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 69e87cc539..5dd305999e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.19.1", + "@dhis2/rules-engine-javascript": "101.19.4", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1",

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 <;F|a= z{S^Fi6H)bMCn8j@?AP~*=KRf{gVZ90O@7^L3G#QhtbKS zPojmu-g4~^9fkP{i^#JqK6)C)%`T4vIwT_7zJ5_qcTZZ#4?>CMI<*5J6q+le2l{Iv zH*(|RwJ^qBT3@^yA5VAVT6KK4X-ct|aluT2Q@Q0Qxg`CuRGN*}9S|cf^262s3d?X6 zMBAI@&g-H>JIFD&_LBIx+hDM75mI(1ieh5ie0Q`wtLijS1k={07lECuBGgi|i?Kho zdR4+Qt)Cy&80hKvt^(OC9Q{G!2iW0{t?b&~ckE0Q?T?dR$+-EHC9CiIrefMp66ykZ|gG0^3Dj?C0s1J4yO zVUl+tOsFt}iHjWa(kgE{2z8O$w}9Lil`~c;Nvo6}?1=Ey7Ne#| z*zi!tnWoMLHVfAXxmhK7x|$ob@vDT7=vAnmB#KhS_;hEu9tFuDR!z-cUlghbJL{t2 z7WT61d`R(%UhWXj5TJJv5*pu{M|1Exj^7 z!;>$&rcw;9dDM5D@PZvHXY0ipXX~N5Xx1f0(72OS!p%al3#(!Jn;uF*A;YO%{HwbS z*^NzX763zRTj(!WjN~9EOqn+CF(f@az#-$5fck-CHVo3)eE)$xHjv8y&Pe zKI(DYwbP211pj(Z7s_mM`$6Ab!7wLRP2KI*BUKGlq61{Ur?3R&2ntmF5&!TC!*?^f8%>_PmyVV39dj4bdew!+8Fon?*>2R5Q2nwl25VkJNab_73dSH*iDtuwU=M6PnV2pTBk7WnA55_ z&5{-Py>tr-Ss`4zXD}HlHT+U*FCh3Y3$1RyYO~aa{}|BK9Vfa%3Hq3HgGB-LFMT?( zZwyxy`LnrUU2Bpz2^&F@G;6|Rfa1G6=>BW zS9~*9&(HU!LGArO`a*Qx;bD9|@#*7(`(QgUgL8^fsGbYEuWc(<7JV3iSr zp7xnQ9MoI+dGNXUtcBzVhYSXtb4U}5ajJMoeqoY|Ct z>{Ht&&9#nR-w94lV~<%6A4*(cUN+LhSVPwewc z*Pa$IZQGr1hos0p;=I*msa7Pxz zK$f5$XM$@%rM$UiYaZa+UI$gYCn9Z5xcl$Y(&U-;)u7$5nKF*#-$04pl_v2scFz0l z#o+8Y*+EDD$nz>j?sL$)Ns~LOx_!0n*cjYY9o1`(u$BD_XK`~DqhcFz)q;>j3a(#| z{CO!=X4R+!ghS-6#$`PaOOob}DCKvKUZ592^HQ?fKWLLmcvBEgOD}>c1ri_7;MRX3uAO<%^Jj@=Z;I7yUOrXo|c=^ox?XTm<9SV+~ z&XQL!XDTK`@<6}vJ7n4TiaA-OBms7is=^OOB$uF zl~Lg}KAMYk??m25V7q4K2fIqPVS184^qZLMIDdeIdt$Bwt`6h|rAU~%f7tt-OrF?X zTG983eCj~HX@Iq(=Q>`CA|ASVJy%{W)H4Xk-_D*lmHuEX`T8ErwO}Rgnv^^&s_=$h z$^9o>xI3`hLj%?HA`P_9!Os!2aXBuX=>|U6GX--X|yxIgcDNazy+wsTqg68Id}`*ho}i-zGF=}a8P~GRUmn9V)<6hVPrr2 zAcjm?cTQxwdyu=^B%Lp`X+`F;n>qIXA@9xOp?u%CZ{!==gbEcZO0s3oUMWkqBKsP~ zE;9BpX!)kB*~U7i!bsWIEQ3;HCL{Y!VwxCChM6&DdoK06fA@3W|2(hfzx#PT{ioTk z>pHjN{2cGkaq53TC3qe;O1LAeV!$_Ym^6!yThYnPC2o%3)l%1XeQYPNNs*BmzdbaG zJ3l&YZn;;b_&5tv2h9^e_>asd5FoyEDm1d+1P`bDqZE^Rq(q7ijBk;Q6GWBd9m5LA z55sDOK=pc(djCNo_o>bNpE*O-fC898iHlt@EsMM~d^YjUJsR(2MALZ_E69I>&&>{Q z5quMbJ>+|ls6G3lm_Zth`o)n77Uy75f@*lhmGPRKfXtHo`kv)JUBo^(&k?RA)#0Uk z(vV4aC=z-04Yo&s{}@AJ>sz<>qo}A$`j#f=fd>BY+arD3makUgmTnMV>DK%{v?Bj( z%Bn|9g^I9i5r^a(6GcZZ0SLcXdi___!+I>e)1C?vbl0YcCqcpSZwi#9AJMl<&&$~6 z&iRmTv~8;&7jozRj3F!mL}36dav3^b7dZ|6Zf|D&NzMFr_27%TIz1wX?1gS%qzDcJ zbDB=L82wC$(Yd_P>#bgG8Zag!ovkt8+IT7EeuJ*018?OWY{g?*3hDY$40qo2!D_Yn zdq&@L+!ca!9`&XaxHtYId5ZT|d`3>{uB3EH^~*q|wqzN-F7~SmY=3n)@}{Szq?X9% z+K`*($yeq3e(d@*3R|BPto%7Gp&xYrWO2@UG#97aG-53adZ+6$DgVy5Mn#jicckkT za2w7P=c`ck7iF}F31P*d6Q z6F_u)Tz5M|kJ%jA0fx~niaE3+R%46!pGzUn{?z-3dj9G7$eVfvBEq$^^q zeuIhLFa7W{^C|I0pYSv%pcQ!jE@A+Kz7MY*T3sS-3vf|WX3Q^ght}}B>-3>!JegZg z_J3U@U$>lAlwj98rTn_|&sS5)4qwLBH+?P0MG>XA7!j=q|BjYK_P%+`VHrq5z7F`> zNmn)9n2jMY%ux5k!SVAuA0VQ>zqg24skwmuMpTIk)RDT(*3t#j4~q%wjwf+KP2@Kd zfN0CIb3+vOMu*ezclxsGwcS`?V%qPXeSm*}`?O4QJgX9%;(G7EML};`k0#wG3@z-k zTP8d8SOo!?L-gjAu5uN+R_f%bkWbOQ-K2V=zTrPFc3jo5OmJz7kj^}K8o{yuVGlX^VovVi>Y18) zEiXs}5x-mNV$vtg^*PHsdp^jBqwvl>=k~DXGcq?dUkywG8~nVJsTRj@LDwlp+SyZl z#@=;`(}-wg5rTi@4ODL>S9bnzJG9z}*&Ea7vQl}?C+$A-snPF3fx$r2+PqNXc39-L zz#HiV?5|V+?X5U3=pMGZ^V)L(h$BXVtTl#ze%1CKdXQA{J~1snbN?a4QS#~Ma!B%p zd%e4f>A9=8VY;#~k~I}0)%~lMtV!>px@7wyuam-t9 z9ShRp&11Hg6o>kswB-O@n#*cKW^0!J*L!6!i?k*hc`t0^wMCiv9tgB%k9u8l5N~Ui zaHm}5M-Jr3V9Q$a4ZXfE+A(A?Wd*I?kcFj4mR@6Be%lNB)HfyTCB0kpyr62(dWd0( zQayP^kzEMKB>6rT7IHUJGyRC*K3OCC^07?NgES2FyJq_+mZg;XHSGf`y8mrzgdPwC zu0Q>gF$~@xpS8D%9#r8v%y3=32T?q^#r=`*8;jL6$3#B->w)X;;wu=*g5Qy( zDaQ$loQbmh4*xVond4bPIm`LPh;SW?{*hGwmG1PO+N--bl)lovDCD=Yn(D`dxeQn< z)(6c!EU8#j9m&^AjXd;CTV4Oc$c0SCIldRtN3SSu@N_Ig1|NE^Sd17%)2P|=s@2+$ zjLb^HXuWf`6K5YbPbG_t+22aQ;T~7as%DI;v4@xY|5 zOaF6j-SfPRjnW(pIz~qtV`-R|6T*D8kIi*w(79bf43}Tm>^i=X2J@zC|CQDk<~mtM zydJDSF3*2Ao3dGtF(tan=xdl%-GQMofeMQ4w4R7Gh`C;>UnkV{!q%YUMi=gGsZNw| zOFV^UIY3p4`-yS{<3RfQ5qe^t4_sD)0^YG?6+F=v$YYnr#|C8&4$j!Q7TX)1QAF%s zbaRy}m5+?F_aTAJezVmGR1kN=jZpkei z345{#FEV@lRhth}E|m+Ye3-qwZJeOH<#0w8e)t(*!^lrKj|Z9)c{@sTVz>fqXB9qP zTig|hBBC;+D#TvTeQ3N+PcJf#oUvCh$-H!`j#H~eIrS28$kCxeZESSo7Lfe?bSw== zz#B)Xxptf+E`yHc^#iC`soh@A9tCiG2KkW*=J_bO!&LwL>ZRk!yL;~Uk00zGIF`Wo+N;G>gN+dv{pp2&UB>ty)Q2v~eCs$=Z!8~EkBsW;cI5+s#e+i1Jw#_r4 zYJlIcYlAz_`pkb{KpnJrX#an>h4O!=aQ5_G>%sNaXOaw)Yd_;)Oy|K7fh z)*dVdh$za0VY2qhHcfVAxfQcAYI-G_66)U(B|q0mg-U%yQ)T`KTC&~wAM!z}W_*0S zOv(CZS%#2L`MssLBfmGhsvGAkRUiEP5w<}(ob_KH>&j!GUG~O;xL#aA^SGFq=Y>Jj z+~8T7Ia{d`LYSvkcw;tHD`HG2!JQaPu%by&f4PG^+j)3~{QZuf|1xRtZ)YFP{0n9k z0^G{mnRq!U8!#%u*e9_Mp(%x(m(^5VlPZp3CZe6L;DCyO(i^uVc}zACoGT1ymzv?aT-G?axvoXVDyXP14ZFbac` zeu#i(beveGMLwOn>>3;oe~|SpG`jI-pBm9>@ z;rL$&6yoQF9~(Uq!%wTi{XV^4@v|RmY>Zi=tPvS+XdcNN2F=(yU;-Q-D+I_P4awhF zW$|w{b8WdN6lzQi`pis#okh6|J+1NmZ9etcudJ>JK(%`3-`qSIDW38^f)F=tYlj%W zKRtBLy_=<}cMS?#?*~eW`#1$IfG?-!--SQ*>T|0N3~B>p)OX#S@e92N?M9YYZ?1f= z8>xCED7Bsj*UG(Mfk0Rw+68Bp);Gr__@j&NqOK%ata5PNP%yc1 z?XLUHwm5oRkzG&z!72QfhiI=wJ{;cDwv%=m%m%_PXG(M@bF#l-m=xYrm%`kFJJ>pR zJ|JvFM(Dl?4LOX^g2(_Febq?{=3bj-Ey|g@8`##Duo7#mILF;iXi8pxhE^Eb_U^PmPx3xAhT2ua6TNntv|& zYODj;dcf9Kzo88W)IBF~d&qjPnEdq3z%F`s-6Sj~n7;AYFKXOYOf$}Vx;`Kt!)<3f z-|US@J*_W!SWH{3YN}Qj5^=Ff^V&?{RKav*poNK0eH-a^PySEJ35?&n`l6sMN}wyN z#5`)n@NIFI&UE3d^pVq=Qyseah}WAQv)UKwLOycOB0!zY9wW;VX8!{RJ>7Thez_;8 zgPmB=pmace#FcfUnMZpaNAK7kxM&URI^)H(SgZZ-C@(mc9s&rE+RDtv<8vI>GAjVy zVlP)ZU{U}iDa$x}q)QdGsiyICq@7myMrdFz&%viD#hJT@PvxoyEeKspQ`91-mLB_X z02$+4@9(*)84|X;^KPSp`ci3t@A3{RaMZ&CT37=N)zn5Ckz9Ol*Jr9)ePv3sR1~L%&P5pi_A4QHa)p9&eUZ~ z?-nLMlhi&M{OkR8a6C(ST|ZWtE3eXEcq6L@QrfQ~Y*_2Dy7oEaJJ4~iZO^-OMceHz z7ZwX#0nxGpX{5E&w6yK-@LXolo=7%O)YZ`#JN_CewJ>tEwg~_vc;ospd{BKW3 zpV_Q&Xg%j=dakvK+g|*xEdLMi+?E4NMR6pkN@%9b11H%O>AVp3dxwxaH(a{A z`eA>JRRCE%2e|S%u3^PX1~g){L-h7?xw?>h<-&Me60SBj|E|d!h;7XROph?BZC=<= z+B(-5ItK$xL7jz7AvU{hgalR3`TCy`{OihSjv(o24``yTT1)a|vDZ=hd~>@VbgV4i zu`v|tSkNTz7d(u-biS|HJE*>GJGxKL&u{#K)bl?c!wB0GTlF^~4c0Yh{esrhRD&p) z0CvvWW8o%?mn_lKF>na~0M^H@aX}9-RZbU+Wl`n<@!1;4zK^`&Q?Xu8Lk(@v8x3k2 ziAV7iQ~xW_vwPOY=JbF3wy@BQ!4#h3Z{rM3ae94jW z!>k2FL=usFNyW?<=z&(}fthQMd^sy}l`E-qbi8eMyT_7ktj}VkM_p#CL!Ry7c16Mu zy8)c24=)8az9k^%GX<3xK6Vs zXD>x+gg5STeR75sAbnv76p2)hFRzw-_C(|1dbPrWeaAJ3dS(j|r}AJmGpF$bv<7j$ ziluU_2HSi}qU3GcwrBx7o^71HCvu6LsF{7CMHPqX5l1z+=yGSL#Oms zU%0vGS>JfM_HhY)CL~+BnwF-^Q%1v#8`2+Ve4(jl3&E`WaP*ft0^D5>@YhBQ_wE}| zZXGbY_`W05U@Bj3kV7+;+GQ#hmc`2BBc{(%0S_Lm}s?TJy z{pxgrC&JfNKVb^d5}*d z(|Y!xxDV!v^mK^Sz!l-?`qK#LkZT8&NH-3VM`NiED7uMW)P0@WRAHD~>jP=%P^;T? zV~}Ozy_Rt?)PCgCuYLvS({hU`H4Doq zv_!wH;0M(HwC8>WA`fXREvR!>j9P!3L}ll^dn=Q2`*bnDtO)8ZtbAZqZ`ceMTA3w? zDWvRw)wAzf0M~4G6Tr`ugQrkB{NpMECm+TFmX6u=Z{QH_YM!*bJb-`{vObW-;TaDg zBB{ISZEvh=tQ@3hDc4Fal-+Z18G6LI$;(U-Tnhc-0Qz@gTcZH<%b^Ly{Kxs=Dm{`3Jp}B8_#xYSy%-BXYJGgl8ck7BUaN zWTz_K8u(L5rIi2KA04SiqVGao1NF9nnP?A?K<4^P^%4ktqaX9uhD(k(W%1H;f+aa* z-AR1$mX~r|NLOc8<-EBQU#)%d`s4YAp!40K02dXv_TwOyRy5>c)^BX-u7}s*yJ%7E zn#X%78`&&#zS}-dgU&AJA^tc{D4{BjjHpU?*MmLc<7t348!CBw2;BV!8Tl+HGqfY| zNALnAg&8+i=C-OI8#{6=ql|5d&6kPc^{x#z>~-mg(T3%6>F(QyN^;PXNN#7$C@S>TFi^s0Yy8Z8t=ine2E_TDJ$FPOStlY^U7G ztCMb9gE+`6Wve5V}1R*sGA)~7tVy#BT| z*|sk(*qeM?Pxmam-q?Le>3Jxo{k=$C6X4IzYs>bloA6$r0#FqrAO7hasoFg8&9DCk zY--bA>KeCp?!}7>NkGMj=z+UQDZhR8bD+WVKTCqXw1!mAs_ckI7hWb-ehw9MZEw)Z zkvT!znB|##%6%52NewTI_(W}uA-IC!=)qHw;st*y==>>u9s9ARoD5P+g@Pia_ZL!7kc?pxoJt4efk|2ZYN{) zx#*oMj}CJih;a6(10glC)1dEW?bgS!LV=VD{g~I9b-kl0-12-y-?H+#PvEa*CV74X zN8)znm7u5l)&cpw<1`b1*utBtBkbN*%!%?P8T489@p2jp#Zq_5cTQD(O>=9925Uh! zV;G0|niZT~J--=rtxgEKXO};elvbC9h{8>1XRmyrcf3~@O}&0KGl0gTTK3%`KJn7U_ZfXweKfRkQC2ZPW8<0fP}HWsRJCuUvW+?@#g8*Ocnyn6 z^lUs2N{-yhkV76RaSq>5lhTTM5#^yO%GUq@i|Rq~8e|D|JwfA+u5_)`-Hgy)6>bc$ ztkiYPyz@-|pmZx)MsTW_`tZ)+1Bvf*?|b^p1ICKWn5N|!#rq7)9S+(y`gd(TA8%4t(YfxcnfPh*m@?R- z2Y?l_X_7UR#jAJO|H&B!03*RXp@KG2HBr~JFq-PRD<)9__8p-BS>h?;_xa0-M`GNP zD>Ty|DHXvUNqqnc4uFK`Ui51Uc6hO4`xxi(+$JjmUmxsLHWo!bVd}2ybw_Wf${dzF zdJ)xD~$BUUzW-|NFy;~fqU!S7PZQO)(nqk;o|qnP=PGb#7Wd|8Ea?H%E53n z#75+Su}AV9d8tIcX555h?pkC_w~(*blY?|gfvYbv&gklrfcgN?Ea~oxfOVi6u=Jl! z@f#JHdm!`9$lgNiJ@wmWln*~q@LaSS6q}jnpDN{0A^CafqG_dez#`f>;m(GLXs@xy zqg72UgUif|GcU4{t}(82(l$v}?G>XN{WCYU>thm|$8e|2-nqme{O33B9XrvlENBxg zcqv#|$uS90a^Y?+^6XbM58<->SzKbXAd&vsqCIxWVq`nXdU!ei;F9yC{s?~rQA1hK zHrsR+4eU*BJbJ!-g6@H~!WKR`6?9|O5UnGLsMyyB>QiXyzeQgLuYSr9@^17W48^8+ zm!w$2QKdF6{c)DS#1# zOxp67<+R<^o_{9e!>dy({*eC>4;+&FNR;*u9VzHuq^KK_Kb^X4B`)Uui5FC3azF#%m#C$Y2w?cEl&@z5LWx2z)DV*7~j{w zXwHAjp;X1dk9$%v^Ws;p0E@E+_>@>g}*h!u&lJ0yNgm zm`~G8sp6~`KyaV0x85E03}7fi%ogbm<3~y>N!sDUeVv(b9zqI2OA*=j6Ylm^&^DFOWbWL&B zx#?`&x=x(NpOR@S27f7MLRNa_>s)Oj>)aRfqwYPhxy?91q#s&h13;#6oI87UemDQuXSsbS&noF+;XqmYaY`&8lT&x20^FZsmf5yDZ% znS_s{kLwu2WZoAqW<73QceTJO85awDDeY6HyVr~z>0aHY@(elE}J6XexQ>H(np5cI#qW-!MB`*Cbg6FE3*6zKO#%urk8}<$V zBYvq*N%$KdpK=cYHEf>crr~uT@EtI#b`>c>8qZ#4nw7g66uKQ?1=112uaB3xZUIyO z=ew$s(s~-a##h}p(d2>tvy=~a)#G=a`gm23V18$D?6bDQT}u=}k>78V!XJsH+?K5U zK%s?>gLY44Msr_~xJg_r7jQrOQaN^Z+gRcEbqcWk{j3}a7?>#i%E*zk*NzgyzQF3- zGUFJ!`JLt4X-(Hwz7LITQkS(a51g<*mnkCo61|XEank(quZfU>jSBr@7U^b7p4IcK zQ-F=E?2emd{Bw6n6HsR35)zwwMx4)9uuIOZ=^n&+X0QE~9NUoUT)DHtdbBp5Y^4{I zAnx;=W;K>5%lEkw+R+L~8J*D(Wb4N3Lz~!__dJok#Mu^6QFE@q`AoHc6Bt>%q>)$m z04(^I!p*dQ=5bdCCm7e4rLSEVyonhfM;1)OGmI~>^(u{i1QI_i4OlN^EBYLpdRQXu zB&OY`WPAkI*Gd1K`0GJeG``dL25vmKD&Y7i$MZd~yrd;K`dZS7E{M!;ny1u0zR9C+7AHUBA{!74bCId$d!{bi zG2RFO&b!n{2FtYDt}I#vQy7ktFYX3Xk(qvVP>MEZ z3|h_FK*=%NbF;XMM3S^ouJ$o3_(X&AAuN1wC#8V zQ9pBz5KzKe6wAs+#A?!CqprGqxLca)K=Y(`uo{;h&kH;EHA;$_cK`zQ#e<)zy^s6^ z{DgcrWR7cPkx3KUAE12Rt0*zy#CKN79Xn+g&j<8aIMjiLoBhRoovvs(3s`K=PZyfiFe?XIwdrtbub$aq2YUL- zX^o)Z)}o=w)6|fj{K>cxiqHDkVW-G)pukqkn?zH5l+>#4Dw)((18ApGsPwt>2<7RmUxTgTBD&uH39o%$eGN>X3uyfh9Zlj}yMcFLwkdB><3mNsf; zwpLW;pzje#HkGoDFcl&*rmHbfxT&*wtF5dEK8VC9stK3$!h)OY`#{Fi1R zE3)u|#F+ei#Ds==DZiFX>~D9)GC*`{2FQn;3Mc}9L#8}Ip{7ngicrK_rOyB`~yn-w~Rh|(7q02`CP zgh$e+JgtFcAQ23FdYAyL_j|7DtCk_ZJ?>NJp|=Q~zr?uzeDU5Jh$?@RWB;wE`sbqm zKVFaZ|0$WcXXW3TFWK4mKl7^VXaDbcRXreO|Mw9MYhSJI<(_0tz&XGNZv6ev6?QOD zuYLKVpc*GT2}SoKVw+TYE~juFJ~R(`BIL@o$gO|Hw(4RltmxU6V zc>j-lVK#}=eql-iolmSb8*iQF7y5g_rN9Nx-r}@xMw|&)SS+p&qCTt#D!0{>l>?_* zYt|+qZ%z}}491Doe@>L=aBtjuza!^lt8&oz57LiQLYRX~^NNF=TAiLBK_YI&1O^>F zBay31Plu^ozx?MnzN<@e1hm?4)v7Eo?SIOm7aQWXO&H&FKhpSe&7kXPga8Bjo=zC`e;%5snLd!m5}F&FNs)dIrmLjS$gI9gLqmppoW- z=_Xtyp3-!5X3i<}@(P&ntL5j7`yU$sEhZ;A*)9h-RJY^IRZ}KrBJk2+*Y5r3wblvr zPI`GZ)5zjb%6rp%nyGEBkM=s2MAgr?-E$kY{~N}~uYP~V zrMFY*)!HOD5Pr>X&5Xh>x411P$=)ZrIg6yR>M?-62j8+`~V0MRu{WPdeEglGu?i^W~>{r2!wdl(QXb?rV zJ^w|fX|ot14o&xFUJ^H1WcunZZGMnc?i$;Wa*A!DN$*+UY2y3SDrf(;iVi)1346z1 zbN^osxyA7mO;a?nPsb4%*Yq-0Jt(4eX^=l>>R>KE!%DYCB5oB&YHycNU_&R|Fli_r zMcx;#@zkZzg_6Ns&4YH?8q%?j8y)zJlgnPr;*o{y^b7Ge8_?xe5+ZWmNj!@2`QeL; zMnu z!;v~WpG$Z>XJuv|TiClyD6WbsowF%nSrr6V4Y$=CmstSs&YWbZ(J9}v zJOgg$?S{@a6ZLMhq865LO_6$+l3_Kn!71!g2E~#emO4Wj&F}`inTnASX)8PF$WfeP z2gQ}vgGwL6e+=h|3Q^Kr5d6rZv7|9w%!scvLIay#swq5!qqogt2-)fHP#?ODVc__! zG!#x>YhfwaBJZvqJJdpy3Iq>SIK*KixYY+|Btfg|`()X5v9N_G#@ih_;KiIxCoR30 zWfyQ%(q0*|)nF3IMJsMy4OMdSyJaotQ*em4P=cC%hwt>*D6}p>C0u=G#T7=O)X=xm zZx(1N22Okn-#gu7_99p93C_vi{SU4TL7Jahj`%1l;Ny0EXso{YY?Bf1vD?z{@Rc)# zJ5$@Fv5qpel-)U9{#-bIUu|PF0Sm=ZJ;h}TBV%1U*((xc6wtFuI#^hvChK7KVlips zQ$GmcE^&`d++aM#QGRDQOy^cA2cNxFJJppNTWUT_$9 zMT+4x=Vz({pIx(_OF(>tI4;j~{JZFQ^w4g;ABQ&d2*CwWQ>IeKWA$PNn9yq6-fJe&e+H`Yi&fP+!+xJ(4xR zyf9&dl*a0wErD!ND^wP8powV{XXFSty%!MQjmI<8({J=$zoeTK0B3SI7(&-ILmJbr z-mgIrD#a4Ys)64-l1-?g&selm!Z#uz=#1j|hY-i{)LDLwz&RU2AY0;G4H%A(%ZpGW zgB&&p5bgDTNW0d|tvSALi3f&&R_3_Ry|*?8?nr$?s~8I&C=*)yN@aGb4idtClu0Up zhLvF5-T)noOKX=n$=fY>6d=Dl({xPm&S?Q!^W_81_K%ChYH_HO;>_*A-FLg(*Vp~H z=rcnS3ZU&tYenYigqvEM!wz}ME7@i~-)q>vuQLCMTXn080Lza^XoXLA1_dAf(!9Qb zxOF+m62COZuVZsU!OiJ0io#pV%^{kRgUf%d^l*ChFkqQW05#enZOx3lwTx%rFZKly z*Jeun8Ul8{al2H_tRMd{b&?ab~3QEw`dsw-AbcDk+?8TW8og>`taCH=u<%3%w?wHOYwEJ|dw2zOpPO&(qd%x~iF6Dha_1wKNotp1yO!4s@L!Es)4iKky!Ni7oV}i=w2yNVnyzQJ zu|BI3iulT}7TPtio2(VC&N-EZl#?Q7PJ# z?c)Qw+uuCLv%39gB_;k>f1NP5i`}V&GUvExgv@c3oA-+QGi7+%_r0!E0V)$sw=Sfx zZb^G+v4k8!%j5kj3u7E|L0?tg*JGDgw$PG;9gZyx#1PBF-2gr2iY+Gaf3dAva73uU zEI!WB(?{{oQloeB4^a8udLdc_WXblHBL2t$VN#@)azikmWLs{}=TaeENm+>) zz|TNk=MO(Qq66N*X)F+(t@XoUY(U*WuMAcE+gjaz#=*KTNp@O9Y{-k& z!6C#|EL3K2=_^X^TExapzK@VDO}ow_)SI+J0m#c1zu`U(Kj$Oft#@ePV)%-S$IY8k4M^r4g z`|X@bOdW?DyjV0Riz!Z>?+bT;L{qfIay2Q@5hDXy{37|G@}Rb%l$4@|kel$~%O%F4 z;?my+Gz+miMQ$q>CFs3Rv}`=KQfd{w6)N#TV+6#8WqDu3XBgY?s!VmN?x+N#V;}SA`On&ZKyc{3RA~{fIu#wl1 z4wcl+UFJ7^+c(kHtGT5Z}j!f1{)2sTaZw z?$Ba~P>SdrQMzYq7+SU!G6!?XJ=9%~-2~!YX;%?DZ4nhN`9WVliY7tgO3Z5pxeiZI zwI9%HPCw{uhHX#z`9+1e7q&)|K5M)!@9VTNm=*=YMmgjb3R^b>BXFA6`O?Ag37_3? zEY2)353D44Q#@`LM;gM9{Np}r+qSRvr_r(2t`z7JbGPS3tOh<&V1T!F7NLytjk}sb zki)5P$x&Zp4tJ9nwTvjKvyRnEDI6A4qjNel%7e=o<7FPiX(yu;AZi%PpTAtQrSsJ+ zJ+C4q9sWyp#9QIbL^K#NpsPgPh?S0o{>uBaxqpxQv(QW!t@~<6Bfq-Uw>>pn2{FAm zCdV%0sLXij`=fLvyx>C^xB3Tr_O6|H0*GmZfHrmP>^_N!1;RuGXo-SqDgj7LGwYoe zt+_>Aeq9&jpzEjuE4>ZA8(3ulxDC-;mZW!#8h&v_Ak|s9XbYqsv!7*9sp3~`jgoOw zJ}V+cU0ycu>CG@aBj)AE{HBC?)#BCSbl6JS@Q11Su2)>O7b+pRDt@$zVwX!#O=C-R zv%S!j3%;kR8-2`s^R0-Pd1&A(Cv46GBGjsk@pE2vse6>QJtYcd0Hnfd?oq z60H?G?+jv!l2<;l2epY+gQcctV0TjUPs&RQ01aR<%{ke-&MbkbxO~Tt;9=}FXAMlD z&nle1n{=plR!Diw*U<830b1q52{{+1nu^^+wHV%Rl37iQUf$ifT|B#L5c`!WO|6)f z3?=6M?jLpB2xc?l)w;0_Z5BnW=2)eGJ19HvZ2R%K(N;wk9!?#jFH+Lh`T$OapsTdN zSJSCmr$Y&3-|c#*v7H`vB4O{8`j!KKgFVoUMC|TOvFBmLp26{>mAY0k!&Ai;D0Um6 zv)*&?;X{r}w%sNQSN4E7;Re?yeU)uesTPYP*RZYkcG${DYxZZZ+KG8uEo-=QCDyWi zJb21sUz3qG`KPE%d>gx8%kk|LMbfg%iZv0>uF%RZF6GC3EmcC z5pTV*i}4KKw!i+UazV~=iW?MNjRqpU0Fj(|xTsF)BrZ^WhSb zzRN{(k#EWwKhybP4qLe{N9}R5v$f%NVgq@%HN?pItSz^AXk@-J)OCH?0v~Ibw>*mh zKNTky{jM84#lV(pJ!!a ziXALhl-n|o$N)+@XfJ5QRYN2c5m2S_c_+&0D^^BN&bvdZ!TPi#&(a~pBBeOd1*DK{JwQL>qzq} zbZJlQRDpRDxLQ*Hq75{JlWp~kRk_FN3e)=w)Px3ileh$gb~PjFhnsY|x-GS*7adm7 zzbbWRe5b$u8}46$j9oSHag8(Ak6&5k1Pj-^6=Tnxb$-;6LueV5Io_^V%78LP^Xoer z;(5~HrvcoGI3Hj7)Y}c~a97);olr$@1|(-*O9YLE(g{9a5;#0H)fhCNIY!Q<(Qqu7 znA=3N+xu9XAOkG<^b959<&blF^iLP0E4~og4j@v3Fj??6lcKxds-)k6#Ff_5e%)a zq;`f^5tKpT8jC4FYfv=RUf<}~Eolu7hvDNGxV6vlX8D>K3`!0&(mdO@_4oyn(HqpB z*wL~#0%w6^bYV_19H;2xMxdT?)=Fkuu3K7I$a#(cealtveu~NgLas%v9HwSG@lqDl zPiwL*SFIq!c8;h~pdQwRAS<7foxvJ6QtDY1``GGVKBxJpT&koq-%ql})_t_`)H(3Vce+s;^Rl z{*L;4yq|MMkFF28Q?eY>j55NEXLt<`)q5^%PV2|LF_O^Ku*81wQsb(fUp(BMhR_0! z@f_Rxk%Sq$g%&*eVM#gWNcARI%at}q88aezn(+MHeo^`tS?z7pn*-U|Sd_J3OE zK5|=DLMNi_t4m#lKI7!;uT|B=wbpw4_f6$^+zICLEO18k3C_I@F9(N)^==OTX>FT* zwJZUf$C%kwe|_3wv2rlZ`+s|17RRBdiT`ce?g1%|$BTgADez~t1a{7R-R@C;f||eA zZpL+4p{xdMrig#<8iajtemHIZ?7W1+gjLsnzhn0PE|wL-$t=*w-8);evk;0Mzx{K6 zaKnSw#K5We?Yo+@Big4To(oEeH{)0PHj^2#i+Mqn1cV!-Mn{Eh4)CrG8{yylpW>89!t#3k~A!Gf&Hd( z?mhVtYv7gPbXeC0tDV^fncIj^eR@e_ls-oY%Vn4CzMevCP-h5XH5zxJ2087v6~xee zwMcWHPWppy_1+SRyKB`gfrJ=t_o+e9yYU>mUX;r`{ri$~+z)9SoKFH~V%;gnleT>* z7HI&rO{L&xPz(?JO)0OLW&%OklfsCBS30)%eOZdrRpXq@Zhhx}adeL5_;al_bZt3b zIerYL9F0u^ItomARbG6@vEgoCP6WuF- zM_l|jXZ7d4iSeoxUyIsnw~JWFr@UERJ8z#J5XB8Y;iU6RDAJFJof7fOs!vRVSH@4I ztqP&`L0_)~=tgaSx;iC?xd@Md28o)0*Sy^1b34aI=eDcVXZ**5uO|n}#^VMbpW;X;?x=vfo%L1lsSgKbk?j2Sso?UA&`CcZnvKPyL2mJ{d5t`;1yP|aS^ zf7F79>K|ILjAzO%5H@;+TBzMHk}zlv8KhA;*ha~6>*J8)ysMWS%M$&NcUg`;!);GX zX&Y>%_#l=>ilo;;w6(&min)!^45~gOEOgF-YiW$2u@K5R`S0QcP@Q8Duv0I7~O zOJwp_`iRfKJ5XYS;+1fhOB|;8r|Ibz%w>X6)N9e}1Cbakif2F9OBXkZN+M3hp(8fj zq1NkW&=#&y1*8!4J7zB2c@TKOL0tW@`!#*QM{rvv`LSv1UrgTpjLcfd%q3vOu;Y0I~NxS##Aoj7skqNI=DX|qD5_Wk?$p4ID=_zLC$ zgMNy#feiy zvp26M(M_ias!@Cq%3N>wk_5v7XWJS&c6+te0s{=MpXcrG^gcEUKriD0{(MiY6mSi4 zAHLXuPmD56oZRA=Rc#A=r24?2dK+?hnvGB!E>G>OJ9QJ~SU~{BIw0(ic1!o^_to%q z*IQ2EV=eg9OGNp|ruC>N2aRH4wAn}G2SHkKtA*DH5iP`+{q8iK(CTIIYzLHjH7|cq z>eX`Q@qpD%{MOg#0;*6!Cu>*m*)f75ATM*SXDL{d7da$8 z5#{SL%-VJJ(s}QfO1c#hT2z*45ePfjAU2U!KqQK60wM$<2@WB$1Zdd?!X~EG zk$s1-$-adEVX=WgSf&LM2(3Xv62P_!Y^>0JD|B9! zmMG$UDQQK&i+DqSy)f`XH=5Zhz%$df)seF+1ANv&=9JcOf3Fy3Xf?M@|BepdmI>C& z&adCAIe<=?tA@}#wI{|}b)pL3L58Jdu@csaT1^LjtwzoH#VTAYSANR-U87+T_1T~+ zrPFFbz^8mN@{wy}H2;C2y5@^#AquZwkN?6@7)>#Wa5;wvkm<1jwnf?RmKLyDTHHH z#zp3EH&rlShP`5O1NDa4p3h9%xkbl~Pj4s0Tk=s>byGMaP{2_C(WOQx}XxsDH# zE$0JwgBklmENv#v_Cp4Svq(U|u+n!`vWM>e3w#4?Ou{7>(Bj`9->3Q&Vqr;byaJkk zGeC;wgkpp%k-;9LSzy9dKz&Gyc{Sr-IW?D-L_n)k?K&e;$b^S;Qo(OE%i{#CcwSPGVa%j)?_89#9fC za*x^2zKOvYL9W?H_f$81hmrnDMc$&7;0Ed7vJ9cF0~a94da^nq&TDw-(`BxS7PA)9 z>GSV{W9t|Gj@Kp|0E~6({%yQiSF=9C7Nx?cPV%XK%rmKkpaIp_UV`dqi1%QF5q{JJ|{aN0? zbOYfVPKan80f8{)fwdcpYbk&hPZrD$|Hv>=o2TD=Qf0*AmUYIj&|f1mTd>BtA9PE4 zC|Zly+lWj_ZH81a24AI%8|*Lk)iiZm!5OZD(@UGh&uC|Zx)g~I`Oi>}m} zExmhCVUG3VdQ4xz*9BGSH`I%+!@~`VOz2SM$K|@`6s_n@>u_mL%oUqiD`Q_gLX;5S zXWg)``3T%uYNq#L!;0J#ElzE4=jkG9koEO6L8i zR|(Fu5zh}Lp+4rICT1I2CBTZT_oekbOEc|Ze)g~~-}f?w0FK-u1}{Y=I`)ha+z`5b z+V0-Wd=gKA+>B}GZ0csTBBRuSxT4GTIDFFKYQD?iQ@Q zx~a;Itey)fDYZ(?Vq~dtuh>n^hypvel&5M+U3#&V6T>`YotsmrkgdUMPX)ojWJMaS zQuuP!XioJhqw<;HDjbI4c0rrw$Zzc_%nY*A`aqo-Aai0}(4O@@-*PEuDx&{xht)4R zDgX4R>K8qHVC^c{Db)C79*t+k^ z6H3rTBDZA+&L*R4w{lQ5WWx<_`d3{{>0N|2ZU})&jSQlw5zcE44k-BNcdIr-;w=k$ zW&XB7tf1)U z6O5}*-aMlFKl$3pzx@|2{Ihg##_7^H%jvz=>zj#rh7M~N zqWK*urQ56%Gh9URm|s~7{d}n>Avw?%2$>8xgpR~UpA34lqf~U2kvNoRS}u*X;Jsng zh{(zcfr4V^rHJB(sK6}$>bk3UV)~|&XsZ@=@@MxbO!lpD7`%(w|_#RaTN}lX>=Ed0UYad;ed%siweRGcr181xE zoAypR{^3sJPrEziC^ANVpi1w4+fla2+f>+_) zPU7sgW(JB&>lU}t2h})sdZi1lUWRULu$-V^LCne*-Fduc9-0_*aXcB&N`1F)HOovQ uXUXkq-`mC0)4Q4Cum7ySI7o7Vp^EnTp?dZ$NmR_mKn_e literal 0 HcmV?d00001 diff --git a/docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png b/docs/user/resources/images/tracked-entity-bulk-actions-delete-enrollments.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a861fb26a2cc3f49baf2b1b49bd15e317a92c0 GIT binary patch literal 159251 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