From 27f4b6533688586313fd7a8918c532205acc2c48 Mon Sep 17 00:00:00 2001 From: Edoardo Sabadelli Date: Thu, 9 Jan 2025 10:45:33 +0100 Subject: [PATCH 1/2] feat: display type and definitions in data item selector (DHIS2-14774) (#1713) --- i18n/en.pot | 250 +++- package.json | 8 +- src/__demo__/DataDimension.stories.js | 53 + src/api/dimensions.js | 3 +- src/api/expression.js | 8 +- .../Calculation/CalculationModal.js | 4 +- src/components/DataDimension/DataDimension.js | 4 +- .../DataDimension/Info/CalculationInfo.js | 113 ++ .../DataDimension/Info/DataElementInfo.js | 125 ++ .../Info/DataElementOperandInfo.js | 227 ++++ .../DataDimension/Info/DataSetInfo.js | 92 ++ .../DataDimension/Info/EventDataItemInfo.js | 91 ++ .../DataDimension/Info/IndicatorInfo.js | 188 +++ .../DataDimension/Info/InfoPopover.js | 78 ++ .../DataDimension/Info/InfoTable.js | 234 ++++ .../Info/ProgramIndicatorInfo.js | 217 ++++ .../Info/styles/InfoPopover.style.js | 83 ++ src/components/DataDimension/ItemSelector.js | 37 +- .../DataDimension/TransferOption.js | 113 ++ .../styles/TransferOption.style.js | 135 +++ .../__snapshots__/DimensionItem.spec.js.snap | 20 - .../OrgUnitDimension.spec.js.snap | 5 - .../FixedPeriodSingleSelect.spec.js.snap | 12 - .../__snapshots__/PeriodSelector.spec.js.snap | 13 +- .../styles/DimensionSelector.style.js | 3 + src/index.js | 28 +- src/modules/dimensionListItem.js | 2 +- src/modules/dimensionSelectorHelper.js | 4 +- src/modules/valueTypes.js | 60 +- yarn.lock | 1003 ++++++++--------- 30 files changed, 2583 insertions(+), 630 deletions(-) create mode 100644 src/__demo__/DataDimension.stories.js create mode 100644 src/components/DataDimension/Info/CalculationInfo.js create mode 100644 src/components/DataDimension/Info/DataElementInfo.js create mode 100644 src/components/DataDimension/Info/DataElementOperandInfo.js create mode 100644 src/components/DataDimension/Info/DataSetInfo.js create mode 100644 src/components/DataDimension/Info/EventDataItemInfo.js create mode 100644 src/components/DataDimension/Info/IndicatorInfo.js create mode 100644 src/components/DataDimension/Info/InfoPopover.js create mode 100644 src/components/DataDimension/Info/InfoTable.js create mode 100644 src/components/DataDimension/Info/ProgramIndicatorInfo.js create mode 100644 src/components/DataDimension/Info/styles/InfoPopover.style.js create mode 100644 src/components/DataDimension/TransferOption.js create mode 100644 src/components/DataDimension/styles/TransferOption.style.js diff --git a/i18n/en.pot b/i18n/en.pot index 8f0bb1884..63cedf1b2 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-11T12:49:26.846Z\n" -"PO-Revision-Date: 2024-10-11T12:49:26.847Z\n" +"POT-Creation-Date: 2024-12-19T10:28:15.132Z\n" +"PO-Revision-Date: 2024-12-19T10:28:15.132Z\n" msgid "view only" msgstr "view only" @@ -168,6 +168,150 @@ msgstr "Disaggregation" msgid "No data" msgstr "No data" +msgid "Expression description" +msgstr "Expression description" + +msgid "Error loading value" +msgstr "Error loading value" + +msgid "None" +msgstr "None" + +msgid "Data set(s)" +msgstr "Data set(s)" + +msgid "Zero is significant" +msgstr "Zero is significant" + +msgid "True" +msgstr "True" + +msgid "False" +msgstr "False" + +msgid "Value type" +msgstr "Value type" + +msgid "Aggregation type" +msgstr "Aggregation type" + +msgid "Category combo" +msgstr "Category combo" + +msgid "Option set" +msgstr "Option set" + +msgid "Group membership" +msgstr "Group membership" + +msgid "Legend set(s)" +msgstr "Legend set(s)" + +msgid "Category option name" +msgstr "Category option name" + +msgid "Category combo name" +msgstr "Category combo name" + +msgid "Categories name" +msgstr "Categories name" + +msgid "Period type" +msgstr "Period type" + +msgid "Indicators" +msgstr "Indicators" + +msgid "Expiry days" +msgstr "Expiry days" + +msgid "Type" +msgstr "Type" + +msgid "Data element" +msgstr "Data element" + +msgid "Tracked entity attribute" +msgstr "Tracked entity attribute" + +msgid "Numerator description" +msgstr "Numerator description" + +msgid "Numerator expression" +msgstr "Numerator expression" + +msgid "Denominator description" +msgstr "Denominator description" + +msgid "Denominator expression" +msgstr "Denominator expression" + +msgid "Annualized" +msgstr "Annualized" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Indicator type" +msgstr "Indicator type" + +msgid "Decimals in output" +msgstr "Decimals in output" + +msgid "There was a problem loading information for this data item." +msgstr "There was a problem loading information for this data item." + +msgid "Name" +msgstr "Name" + +msgid "Description" +msgstr "Description" + +msgid "Code" +msgstr "Code" + +msgid "ID" +msgstr "ID" + +msgid "Last updated date" +msgstr "Last updated date" + +msgid "Created date" +msgstr "Created date" + +msgid "Created by" +msgstr "Created by" + +msgid "Custom" +msgstr "Custom" + +msgid "Program" +msgstr "Program" + +msgid "Analytics type" +msgstr "Analytics type" + +msgid "Enrollment" +msgstr "Enrollment" + +msgid "Event" +msgstr "Event" + +msgid "Analytics period boundaries" +msgstr "Analytics period boundaries" + +msgid "{{ offsetPeriodType }} × {{ offsetPeriods }}" +msgstr "{{ offsetPeriodType }} × {{ offsetPeriods }}" + +msgid "Expression" +msgstr "Expression" + +msgid "Filter" +msgstr "Filter" + msgid "Search by data item name" msgstr "Search by data item name" @@ -322,12 +466,6 @@ msgstr "Close" msgid "Rename {{fileType}}" msgstr "Rename {{fileType}}" -msgid "Name" -msgstr "Name" - -msgid "Description" -msgstr "Description" - msgid "Rename" msgstr "Rename" @@ -436,9 +574,6 @@ msgstr "Enter interpretation text" msgid "Not available offline" msgstr "Not available offline" -msgid "Created by" -msgstr "Created by" - msgid "Anyone" msgstr "Anyone" @@ -460,9 +595,6 @@ msgstr "Created" msgid "Last updated" msgstr "Last updated" -msgid "Type" -msgstr "Type" - msgid "Clear filters" msgstr "Clear filters" @@ -627,9 +759,6 @@ msgstr "Select a group" msgid "Deselect all" msgstr "Deselect all" -msgid "Period type" -msgstr "Period type" - msgid "Year" msgstr "Year" @@ -927,9 +1056,6 @@ msgstr "Series" msgid "Category" msgstr "Category" -msgid "Filter" -msgstr "Filter" - msgid "Columns" msgstr "Columns" @@ -954,15 +1080,9 @@ msgstr "Actual reports on time" msgid "Expected reports" msgstr "Expected reports" -msgid "Program" -msgstr "Program" - msgid "Select a program" msgstr "Select a program" -msgid "Indicators" -msgstr "Indicators" - msgid "Indicator group" msgstr "Indicator group" @@ -981,9 +1101,6 @@ msgstr "Loading indicator groups" msgid "Data element group" msgstr "Data element group" -msgid "Data element" -msgstr "Data element" - msgid "No data element groups found" msgstr "No data element groups found" @@ -1140,6 +1257,81 @@ msgstr "Organisation unit" msgid "Assigned Categories" msgstr "Assigned Categories" +msgid "Text" +msgstr "Text" + +msgid "Long text" +msgstr "Long text" + +msgid "Multi text" +msgstr "Multi text" + +msgid "Letter" +msgstr "Letter" + +msgid "Phone number" +msgstr "Phone number" + +msgid "Email" +msgstr "Email" + +msgid "Yes/No" +msgstr "Yes/No" + +msgid "Yes Only" +msgstr "Yes Only" + +msgid "Date" +msgstr "Date" + +msgid "Date & Time" +msgstr "Date & Time" + +msgid "Time" +msgstr "Time" + +msgid "Unit interval" +msgstr "Unit interval" + +msgid "Percentage" +msgstr "Percentage" + +msgid "Integer" +msgstr "Integer" + +msgid "Positive Integer" +msgstr "Positive Integer" + +msgid "Negative Integer" +msgstr "Negative Integer" + +msgid "Positive or Zero Integer" +msgstr "Positive or Zero Integer" + +msgid "Tracker Associate" +msgstr "Tracker Associate" + +msgid "Username" +msgstr "Username" + +msgid "Coordinate" +msgstr "Coordinate" + +msgid "Reference" +msgstr "Reference" + +msgid "Age" +msgstr "Age" + +msgid "URL" +msgstr "URL" + +msgid "Image" +msgstr "Image" + +msgid "GeoJSON" +msgstr "GeoJSON" + msgid "Pivot table" msgstr "Pivot table" diff --git a/package.json b/package.json index 2389f5bdd..3af3cb869 100644 --- a/package.json +++ b/package.json @@ -30,11 +30,11 @@ "validate-push": "yarn test" }, "devDependencies": { - "@dhis2/app-runtime": "^3.9.0", + "@dhis2/app-runtime": "^3.11.3", "@dhis2/cli-app-scripts": "^11.7.4", "@dhis2/cli-style": "^10.7.4", "@dhis2/d2-i18n": "^1.1.0", - "@dhis2/ui": "^9.4.4", + "@dhis2/ui": "^10.1.9", "@mihkeleidast/storybook-addon-source": "^1.0.1", "@storybook/preset-create-react-app": "^8.3.6", "@storybook/react": "^8.3.6", @@ -52,7 +52,7 @@ "peerDependencies": { "@dhis2/app-runtime": "^3", "@dhis2/d2-i18n": "^1.1", - "@dhis2/ui": "^9.2.0", + "@dhis2/ui": "^10", "prop-types": "^15", "react": "^16.3", "react-dom": "^16.3", @@ -76,7 +76,7 @@ "resize-observer-polyfill": "^1.5.1" }, "resolutions": { - "@dhis2/ui": "^9.2.0", + "@dhis2/ui": "^10.1.9", "eslint": "^7.32.0" }, "files": [ diff --git a/src/__demo__/DataDimension.stories.js b/src/__demo__/DataDimension.stories.js new file mode 100644 index 000000000..8e1062624 --- /dev/null +++ b/src/__demo__/DataDimension.stories.js @@ -0,0 +1,53 @@ +import { DataProvider } from '@dhis2/app-runtime' +import { ConfigProvider } from '@dhis2/app-service-config' +import React, { useState } from 'react' +import DataDimension from '../components/DataDimension/DataDimension.js' + +const Wrapper = (story) => ( + + + {story()} + + +) + +export default { + title: 'DataDimension', + decorators: [Wrapper], +} + +export const NoneSelected = () => { + const [selected, setSelected] = useState([]) + + return ( + setSelected(response.items)} + /> + ) +} + +NoneSelected.story = { + name: 'None selected', +} + +export const WithInfoBoxMessage = () => { + const [selected, setSelected] = useState([]) + + return ( + setSelected(response.items)} + infoBoxMessage={'Test message showing in the info box'} + /> + ) +} + +WithInfoBoxMessage.story = { + name: 'With info box message', +} diff --git a/src/api/dimensions.js b/src/api/dimensions.js index 3a657fc43..d14b89a11 100644 --- a/src/api/dimensions.js +++ b/src/api/dimensions.js @@ -175,7 +175,8 @@ export const dataElementOperandsQuery = { filter?.group === DIMENSION_TYPE_ALL ? 'id' : 'dimensionItem~rename(id)' - const filters = [] + + const filters = ['categoryOptionCombo.name:ne:default'] if (filter?.group && filter.group !== DIMENSION_TYPE_ALL) { filters.push(`dataElement.dataElementGroups.id:eq:${filter.group}`) diff --git a/src/api/expression.js b/src/api/expression.js index 64bb61c30..373fbccfa 100644 --- a/src/api/expression.js +++ b/src/api/expression.js @@ -1,9 +1,15 @@ -export const validateExpressionMutation = { +export const validateIndicatorExpressionMutation = { type: 'create', resource: 'indicators/expression/description', data: ({ expression }) => expression, } +export const validateProgramIndicatorExpressionMutation = { + type: 'create', + resource: 'programIndicators/expression/description', + data: ({ expression }) => expression, +} + export const createCalculationMutation = { type: 'create', resource: 'expressionDimensionItems', diff --git a/src/components/DataDimension/Calculation/CalculationModal.js b/src/components/DataDimension/Calculation/CalculationModal.js index 6fdcf8119..7a7cc812b 100644 --- a/src/components/DataDimension/Calculation/CalculationModal.js +++ b/src/components/DataDimension/Calculation/CalculationModal.js @@ -15,7 +15,7 @@ import { createCalculationMutation, deleteCalculationMutation, updateCalculationMutation, - validateExpressionMutation, + validateIndicatorExpressionMutation, } from '../../../api/expression.js' import i18n from '../../../locales/index.js' import { @@ -57,7 +57,7 @@ const CalculationModal = ({ const [deleteCalculation, { loading: isDeletingCalculation }] = useDataMutation(deleteCalculationMutation, mutationParams) const [doBackendValidation, { loading: isValidating }] = useDataMutation( - validateExpressionMutation, + validateIndicatorExpressionMutation, { onError: (error) => showError(error), } diff --git a/src/components/DataDimension/DataDimension.js b/src/components/DataDimension/DataDimension.js index 2ed618b35..f4c8f35a9 100644 --- a/src/components/DataDimension/DataDimension.js +++ b/src/components/DataDimension/DataDimension.js @@ -17,6 +17,7 @@ import ItemSelector from './ItemSelector.js' const DataDimensionCtx = createContext({}) const DataDimension = ({ + currentUser, onSelect, selectedDimensions, displayNameProp, @@ -61,7 +62,7 @@ const DataDimension = ({ ) return ( - + ({ value: item.id, @@ -94,6 +95,7 @@ DataDimension.propTypes = { }) ).isRequired, onSelect: PropTypes.func.isRequired, + currentUser: PropTypes.object, enabledDataTypes: PropTypes.array, infoBoxMessage: PropTypes.string, visType: PropTypes.string, diff --git a/src/components/DataDimension/Info/CalculationInfo.js b/src/components/DataDimension/Info/CalculationInfo.js new file mode 100644 index 000000000..e98f3e789 --- /dev/null +++ b/src/components/DataDimension/Info/CalculationInfo.js @@ -0,0 +1,113 @@ +import { useConfig, useDataMutation, useDataEngine } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React, { useCallback, useEffect, useState } from 'react' +import { validateIndicatorExpressionMutation } from '../../../api/expression.js' +import i18n from '../../../locales/index.js' +import { + getCommonFields, + renderHumanReadableExpression, + InfoTable, +} from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const calculationQuery = { + calculation: { + resource: 'expressionDimensionItems', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields(displayNameProp)},expression`, + }), + }, +} + +export const CalculationInfo = ({ type, id, displayNameProp }) => { + const [data, setData] = useState() + const [error, setError] = useState() + const [expressionError, setExpressionError] = useState() + const [loading, setLoading] = useState(true) + + const { baseUrl, apiVersion } = useConfig() + + const engine = useDataEngine() + const [getHumanReadableExpression] = useDataMutation( + validateIndicatorExpressionMutation, + { onError: setExpressionError } + ) + + const fetchData = useCallback(async () => { + const { calculation } = await engine.query(calculationQuery, { + variables: { id, displayNameProp }, + onError: setError, + }) + + if (calculation.expression) { + const result = await getHumanReadableExpression({ + expression: calculation.expression, + }) + + if (result) { + calculation.humanReadableExpression = result + } + } + + // inject href as it is not returned from the API + calculation.href = new URL( + `${calculationQuery.calculation.resource}/${id}`, + new URL( + `api/${apiVersion}/`, + baseUrl === '..' + ? window.location.href.split('dhis-web-data-visualizer/')[0] + : `${baseUrl}/` + ) + ).href + + setData({ calculation }) + setLoading(false) + }, [ + displayNameProp, + engine, + getHumanReadableExpression, + id, + apiVersion, + baseUrl, + ]) + + useEffect(() => { + fetchData() + }, [fetchData]) + + return ( + <> + + + {i18n.t('Expression description')} + + {data?.calculation.humanReadableExpression ? ( + renderHumanReadableExpression( + data.calculation.humanReadableExpression + ) + ) : ( + + {expressionError + ? i18n.t('Error loading value') + : i18n.t('None')} + + )} + + + + + + ) +} + +CalculationInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/DataElementInfo.js b/src/components/DataDimension/Info/DataElementInfo.js new file mode 100644 index 000000000..bee71c049 --- /dev/null +++ b/src/components/DataDimension/Info/DataElementInfo.js @@ -0,0 +1,125 @@ +import { useDataQuery } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React from 'react' +import i18n from '../../../locales/index.js' +import { valueTypeDisplayNames } from '../../../modules/valueTypes.js' +import { + getCommonFields, + renderDataSets, + renderLegendSets, + renderGroupMemberships, + InfoTable, +} from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const dataElementQuery = { + dataElement: { + resource: 'dataElements', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},aggregationType,categoryCombo[displayName,categories[id,displayName]],dataElementGroups[id,displayName],dataSetElements[dataSet[id,displayName]],legendSets[id,displayName],optionSet[displayName],valueType,zeroIsSignificant`, + }), + }, +} + +export const DataElementInfo = ({ type, id, displayNameProp }) => { + const { loading, error, data } = useDataQuery(dataElementQuery, { + variables: { id, displayNameProp }, + }) + + return ( + <> + + + {i18n.t('Data set(s)')} + + {data?.dataElement.dataSetElements && + renderDataSets( + data.dataElement.dataSetElements.map( + ({ dataSet }) => dataSet + ) + )} + + + + {i18n.t('Zero is significant')} + + {data?.dataElement.zeroIsSignificant + ? i18n.t('True') + : i18n.t('False')} + + + + {i18n.t('Value type')} + + {valueTypeDisplayNames[data?.dataElement.valueType]} + + + + {i18n.t('Aggregation type')} + {data?.dataElement.aggregationType} + + + {i18n.t('Category combo')} + + {data?.dataElement.categoryCombo.displayName === + 'default' ? ( + {i18n.t('None')} + ) : ( +
+ + { + data?.dataElement.categoryCombo + .displayName + } + +
    + {data?.dataElement.categoryCombo.categories.map( + ({ id, displayName }) => ( +
  • {displayName}
  • + ) + )} +
+
+ )} + + + {data?.dataElement.optionSet && ( + + {i18n.t('Option set')} + {data.dataElement.optionSet.displayName} + + )} + + {i18n.t('Group membership')} + + {data?.dataElement.dataElementGroups && + renderGroupMemberships( + data.dataElement.dataElementGroups + )} + + + {Boolean(data?.dataElement.legendSets.length) && ( + + {i18n.t('Legend set(s)')} + {renderLegendSets(data.dataElement.legendSets)} + + )} +
+ + + ) +} + +DataElementInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/DataElementOperandInfo.js b/src/components/DataDimension/Info/DataElementOperandInfo.js new file mode 100644 index 000000000..66ee152e7 --- /dev/null +++ b/src/components/DataDimension/Info/DataElementOperandInfo.js @@ -0,0 +1,227 @@ +import { useConfig, useDataEngine } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React, { useCallback, useEffect, useState } from 'react' +import i18n from '../../../locales/index.js' +import { valueTypeDisplayNames } from '../../../modules/valueTypes.js' +import { + getCommonFields, + renderDataSets, + renderGroupMemberships, + renderLegendSets, + InfoTable, +} from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const dataElementOperandsQuery = { + dataElementOperands: { + resource: 'dataElementOperands', + params: ({ displayNameProp, id }) => ({ + filter: `id:eq:${id}`, + fields: [ + `${getCommonFields(displayNameProp)}`, + 'categoryOptionCombo[categoryCombo[categories[displayName,id],displayName],displayName]', + `dataElement[${getCommonFields( + displayNameProp + )},aggregationType,categoryCombo[displayName,categories[id,displayName]],dataElementGroups[id,displayName],dataSetElements[dataSet[id,displayName]],legendSets[id,displayName],optionSet[displayName],valueType,zeroIsSignificant]`, + 'displayName,id', + ], + }), + }, +} + +export const DataElementOperandInfo = ({ type, id, displayNameProp }) => { + const [data, setData] = useState() + const [error, setError] = useState() + const [loading, setLoading] = useState(true) + + const { baseUrl, apiVersion } = useConfig() + + const engine = useDataEngine() + + const fetchData = useCallback(async () => { + const { dataElementOperands } = await engine.query( + dataElementOperandsQuery, + { + variables: { id, displayNameProp }, + onError: setError, + } + ) + + const dataElementOperand = dataElementOperands.dataElementOperands[0] + + // copy some common fields from dataElement + ;[ + 'code', + 'created', + 'createdBy', + 'displayDescription', + 'lastUpdated', + ].forEach( + (key) => + (dataElementOperand[key] = dataElementOperand.dataElement[key]) + ) + + // inject href as it is not returned from the API + dataElementOperand.href = new URL( + `${ + dataElementOperandsQuery.dataElementOperands.resource + }?${new URLSearchParams({ filter: `id:eq:${id}` })}`, + new URL( + `api/${apiVersion}/`, + baseUrl === '..' + ? window.location.href.split('dhis-web-data-visualizer/')[0] + : `${baseUrl}/` + ) + ).href + + setData({ dataElementOperand }) + setLoading(false) + }, [displayNameProp, engine, id]) + + useEffect(() => { + fetchData() + }, [fetchData]) + + return ( + <> + + + {i18n.t('Data set(s)')} + + {data?.dataElementOperand.dataElement.dataSetElements && + renderDataSets( + data.dataElementOperand.dataElement.dataSetElements.map( + ({ dataSet }) => dataSet + ) + )} + + + + {i18n.t('Zero is significant')} + + {data?.dataElementOperand.dataElement.zeroIsSignificant + ? i18n.t('True') + : i18n.t('False')} + + + + {i18n.t('Value type')} + + { + valueTypeDisplayNames[ + data?.dataElementOperand.dataElement.valueType + ] + } + + + + {i18n.t('Aggregation type')} + + {data?.dataElementOperand.dataElement.aggregationType} + + + + {i18n.t('Category combo')} + + {data?.dataElementOperand.dataElement.categoryCombo + .displayName === 'default' ? ( + {i18n.t('None')} + ) : ( +
+ + { + data?.dataElementOperand.dataElement + .categoryCombo.displayName + } + +
    + {data?.dataElementOperand.dataElement.categoryCombo.categories.map( + ({ id, displayName }) => ( +
  • {displayName}
  • + ) + )} +
+
+ )} + + + {data?.dataElementOperand.dataElement.optionSet && ( + + {i18n.t('Option set')} + + { + data.dataElementOperand.dataElement.optionSet + .displayName + } + + + )} + + {i18n.t('Group membership')} + + {data?.dataElementOperand.dataElement + .dataElementGroups && + renderGroupMemberships( + data.dataElementOperand.dataElement + .dataElementGroups + )} + + + {Boolean( + data?.dataElementOperand.dataElement.legendSets.length + ) && ( + + {i18n.t('Legend set(s)')} + + {renderLegendSets( + data.dataElementOperand.dataElement.legendSets + )} + + + )} + + {i18n.t('Category option name')} + + { + data?.dataElementOperand.categoryOptionCombo + .displayName + } + + + + {i18n.t('Category combo name')} + + { + data?.dataElementOperand.categoryOptionCombo + .categoryCombo.displayName + } + + + + {i18n.t('Categories name')} + +
    + {data?.dataElementOperand.categoryOptionCombo.categoryCombo.categories.map( + ({ id, displayName }) => ( +
  • {displayName}
  • + ) + )} +
+ + +
+ + + ) +} + +DataElementOperandInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/DataSetInfo.js b/src/components/DataDimension/Info/DataSetInfo.js new file mode 100644 index 000000000..e95ae3d78 --- /dev/null +++ b/src/components/DataDimension/Info/DataSetInfo.js @@ -0,0 +1,92 @@ +import { useDataQuery } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React from 'react' +import i18n from '../../../locales/index.js' +import { getCommonFields, InfoTable } from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const dataSetQuery = { + dataSet: { + resource: 'dataSets', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},dataSetElements[dataElement[id,displayName]],expiryDays,indicators[id,displayName],periodType,`, + }), + }, +} + +export const DataSetInfo = ({ type, id, displayNameProp }) => { + const { loading, error, data } = useDataQuery(dataSetQuery, { + variables: { id, displayNameProp }, + }) + + return ( + <> + + + {i18n.t('Period type')} + {data?.dataSet.periodType} + + + {i18n.t('Data elements')} + + {data?.dataSet.dataSetElements.length === 1 ? ( + data.dataSet.dataSetElements[0].dataElement + .displayName + ) : ( +
+
    + {data?.dataSet.dataSetElements.map( + ({ dataElement }) => ( +
  • + {dataElement.displayName} +
  • + ) + )} +
+
+ )} + + + + {i18n.t('Indicators')} + + {data?.dataSet.indicators.length === 1 ? ( + data.dataSet.indicators[0].displayName + ) : data?.dataSet.indicators.length > 1 ? ( +
+
    + {data.dataSet.indicators.map( + ({ id, displayName }) => ( +
  • {displayName}
  • + ) + )} +
+
+ ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Expiry days')} + {data?.dataSet.expiryDays} + +
+ + + ) +} + +DataSetInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/EventDataItemInfo.js b/src/components/DataDimension/Info/EventDataItemInfo.js new file mode 100644 index 000000000..dbe02cb16 --- /dev/null +++ b/src/components/DataDimension/Info/EventDataItemInfo.js @@ -0,0 +1,91 @@ +import { useDataQuery } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React from 'react' +import i18n from '../../../locales/index.js' +import { DIMENSION_TYPE_PROGRAM_DATA_ELEMENT } from '../../../modules/dataTypes.js' +import { valueTypeDisplayNames } from '../../../modules/valueTypes.js' +import { getCommonFields, renderLegendSets, InfoTable } from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const programDataElementQuery = { + programDataElement: { + resource: 'dataElements', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},aggregationType,dimensionItemType,legendSets[id,displayName],optionsSet[displayName],valueType,zeroIsSignificant`, + }), + }, +} + +const programAttributeQuery = { + programAttribute: { + resource: 'trackedEntityAttributes', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},aggregationType,dimensionItemType,legendSets[id,displayName],optionsSet[displayName],valueType,zeroIsSignificant`, + }), + }, +} + +export const EventDataItemInfo = ({ type, id, displayNameProp }) => { + const { loading, error, data } = useDataQuery( + type === DIMENSION_TYPE_PROGRAM_DATA_ELEMENT + ? programDataElementQuery + : programAttributeQuery, + { + // strip program id (if present) + variables: { id: id.split('.').reverse()[0], displayNameProp }, + } + ) + + const renderInfoTable = (data) => ( + <> + + + {i18n.t('Type')} + + {type === DIMENSION_TYPE_PROGRAM_DATA_ELEMENT + ? i18n.t('Data element') + : i18n.t('Tracked entity attribute')} + + + + {i18n.t('Value type')} + {valueTypeDisplayNames[data?.valueType]} + + {data?.optionSet && ( + + {i18n.t('Option set')} + {data.optionSet.displayName} + + )} + {Boolean(data?.legendSets.length) && ( + + {i18n.t('Legend set(s)')} + {renderLegendSets(data.legendSets)} + + )} + + + + ) + + return type === DIMENSION_TYPE_PROGRAM_DATA_ELEMENT + ? renderInfoTable(data?.programDataElement) + : renderInfoTable(data?.programAttribute) +} + +EventDataItemInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/IndicatorInfo.js b/src/components/DataDimension/Info/IndicatorInfo.js new file mode 100644 index 000000000..0f6312fd9 --- /dev/null +++ b/src/components/DataDimension/Info/IndicatorInfo.js @@ -0,0 +1,188 @@ +import { useDataMutation, useDataEngine } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React, { useCallback, useEffect, useState } from 'react' +import { validateIndicatorExpressionMutation } from '../../../api/expression.js' +import i18n from '../../../locales/index.js' +import { + getCommonFields, + renderGroupMemberships, + renderHumanReadableExpression, + renderLegendSets, + InfoTable, +} from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const indicatorQuery = { + indicator: { + resource: 'indicators', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},annualized,dataSets[id,displayName],decimals,denominator,displayDenominatorDescription,displayNumeratorDescription,indicatorGroups[id,displayName],indicatorType[displayName,factor],legendSets[id,displayName],numerator`, + }), + }, +} + +export const IndicatorInfo = ({ type, id, displayNameProp }) => { + const [data, setData] = useState() + const [error, setError] = useState() + const [loading, setLoading] = useState(true) + + const engine = useDataEngine() + const [getHumanReadableExpression] = useDataMutation( + validateIndicatorExpressionMutation, + { onError: setError } + ) + + const fetchData = useCallback(async () => { + const { indicator } = await engine.query(indicatorQuery, { + variables: { id, displayNameProp }, + onError: setError, + }) + + if (indicator.denominator) { + const result = await getHumanReadableExpression({ + expression: indicator.denominator, + }) + + if (result) { + indicator.humanReadableDenominatorExpression = result + } + } + + if (indicator.numerator) { + const result = await getHumanReadableExpression({ + expression: indicator.numerator, + }) + + if (result) { + indicator.humanReadableNumeratorExpression = result + } + } + + setData({ indicator }) + setLoading(false) + }, [displayNameProp, engine, getHumanReadableExpression, id]) + + useEffect(() => { + fetchData() + }, [fetchData]) + + return ( + <> + + + {i18n.t('Numerator description')} + + {data?.indicator.displayNumeratorDescription ? ( + data.indicator.displayNumeratorDescription + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Numerator expression')} + + {data?.indicator.humanReadableNumeratorExpression ? ( + renderHumanReadableExpression( + data.indicator.humanReadableNumeratorExpression + ) + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Denominator description')} + + {data?.indicator.displayDenominatorDescription ? ( + data.indicator.displayDenominatorDescription + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Denominator expression')} + + {data?.indicator.humanReadableDenominatorExpression ? ( + renderHumanReadableExpression( + data.indicator + .humanReadableDenominatorExpression + ) + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Annualized')} + + {data?.indicator.annualized + ? i18n.t('Yes') + : i18n.t('No')} + + + + {i18n.t('Indicator type')} + {`${data?.indicator.indicatorType.displayName}, ${data?.indicator.indicatorType.factor}`} + + {data?.indicator.decimals && ( + + {i18n.t('Decimals in output')} + {data.indicator.decimals} + + )} + {Boolean(data?.indicator.dataSets.length) && ( + + {i18n.t('Data set(s)')} + + {data.indicator.dataSets.length === 1 ? ( + data.indicator.dataSets[0].displayName + ) : ( +
+
    + {data.indicator.dataSets.map( + ({ id, displayName }) => ( +
  • {displayName}
  • + ) + )} +
+
+ )} + + + )} + + {i18n.t('Group membership')} + + {data?.indicator.indicatorGroups && + renderGroupMemberships( + data.indicator.indicatorGroups + )} + + + {Boolean(data?.indicator.legendSets.length) && ( + + {i18n.t('Legend set(s)')} + {renderLegendSets(data.indicator.legendSets)} + + )} +
+ + + ) +} + +IndicatorInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/InfoPopover.js b/src/components/DataDimension/Info/InfoPopover.js new file mode 100644 index 000000000..11a77b0cd --- /dev/null +++ b/src/components/DataDimension/Info/InfoPopover.js @@ -0,0 +1,78 @@ +import { Popover } from '@dhis2/ui' +import PropTypes from 'prop-types' +import React from 'react' +import { REPORTING_RATE } from '../../../modules/dataSets.js' // data sets +import { + DIMENSION_TYPE_DATA_ELEMENT, + DIMENSION_TYPE_DATA_ELEMENT_OPERAND, + DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM, // calculation + DIMENSION_TYPE_INDICATOR, + DIMENSION_TYPE_PROGRAM_ATTRIBUTE, // event data items + DIMENSION_TYPE_PROGRAM_DATA_ELEMENT, // event data items + DIMENSION_TYPE_PROGRAM_INDICATOR, +} from '../../../modules/dataTypes.js' +import { CalculationInfo } from './CalculationInfo.js' +import { DataElementInfo } from './DataElementInfo.js' +import { DataElementOperandInfo } from './DataElementOperandInfo.js' +import { DataSetInfo } from './DataSetInfo.js' +import { EventDataItemInfo } from './EventDataItemInfo.js' +import { IndicatorInfo } from './IndicatorInfo.js' +import { ProgramIndicatorInfo } from './ProgramIndicatorInfo.js' +import styles from './styles/InfoPopover.style.js' + +export const InfoPopover = ({ reference, onClose, dataTest, ...props }) => { + const type = props.item.type + + const infoProps = { + type, + id: props.item.id, + displayNameProp: props.displayNameProp, + } + + return ( + <> + +
+ {type === DIMENSION_TYPE_DATA_ELEMENT && ( + + )} + {type === DIMENSION_TYPE_DATA_ELEMENT_OPERAND && ( + + )} + {type === DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM && ( + + )} + {type === REPORTING_RATE /* TODO: verify this! */ && ( + + )} + {type === DIMENSION_TYPE_INDICATOR && ( + + )} + {[ + DIMENSION_TYPE_PROGRAM_ATTRIBUTE, + DIMENSION_TYPE_PROGRAM_DATA_ELEMENT, + ].includes(type) && } + {type === DIMENSION_TYPE_PROGRAM_INDICATOR && ( + + )} +
+
+ + + ) +} + +InfoPopover.propTypes = { + dataTest: PropTypes.string, + displayNameProp: PropTypes.string, + item: PropTypes.object, + reference: PropTypes.object, + onClose: PropTypes.func, +} diff --git a/src/components/DataDimension/Info/InfoTable.js b/src/components/DataDimension/Info/InfoTable.js new file mode 100644 index 000000000..05ae568c1 --- /dev/null +++ b/src/components/DataDimension/Info/InfoTable.js @@ -0,0 +1,234 @@ +import { useTimeZoneConversion } from '@dhis2/app-runtime' +import { Center, CircularLoader } from '@dhis2/ui' +import moment from 'moment' +import PropTypes from 'prop-types' +import React from 'react' +import i18n from '../../../locales/index.js' +import { + DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM, // calculation +} from '../../../modules/dataTypes.js' +import styles from './styles/InfoPopover.style.js' + +export const getCommonFields = (displayNameProp) => + `attributeValues[attribute[id,displayName],value],code,created,createdBy,${displayNameProp}~rename(displayName),displayDescription,href,id,lastUpdated` + +export const capitalizeText = (text) => + text && text.charAt(0).toUpperCase() + text.slice(1).toLowerCase() + +export const sentenceCaseText = (text) => + text && capitalizeText(text.replaceAll('_', ' ').toLowerCase()) + +export const renderDataSets = (dataSets) => { + if (dataSets.length === 0) { + return ( + <> + {i18n.t('None')} + + + ) + } else if (dataSets.length === 1) { + return dataSets[0].displayName + } else { + return ( + <> +
+
    + {dataSets.map(({ id, displayName }) => ( +
  • {displayName}
  • + ))} +
+
+ + + ) + } +} + +export const renderGroupMemberships = (groups) => { + if (groups.length === 0) { + return ( + <> + {i18n.t('None')} + + + ) + } else if (groups.length === 1) { + return groups[0].displayName + } else { + return ( + <> +
+
    + {groups.map(({ id, displayName }) => ( +
  • {displayName}
  • + ))} +
+
+ + + ) + } +} + +export const renderHumanReadableExpression = (expressionData) => ( + <> + {expressionData.status === 'ERROR' ? ( + {expressionData.message} + ) : ( + {expressionData.description} + )} + + +) + +export const renderLegendSets = (legendSets) => { + return legendSets.length === 1 ? ( + legendSets[0].displayName + ) : ( + <> +
+
    + {legendSets.map(({ id, displayName }) => ( +
  • {displayName}
  • + ))} +
+
+ + + ) +} + +export const InfoTable = ({ dataType, data, error, loading, children }) => { + const { fromServerDate } = useTimeZoneConversion() + + return ( + <> + {loading && ( +
+
+ +
+
+ )} + {error && ( +
+ + {i18n.t( + 'There was a problem loading information for this data item.' + )} + +
+ )} + {data && ( + <> + + + + + + + {children} + {dataType !== + DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM ? ( + + + + + ) : ( + data.displayDescription && ( + + + + + ) + )} + {dataType !== + DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM ? ( + + + + + ) : ( + data.code && ( + + + + + ) + )} + + + + + + + + + + + + + + + + + {data.attributeValues.map( + ({ attribute, value }) => ( + + + + + ) + )} + +
{i18n.t('Name')}{data.displayName}
{i18n.t('Description')} + {data.displayDescription ? ( +
+ {data.displayDescription} +
+ ) : ( + + {i18n.t('None')} + + )} +
{i18n.t('Description')} +
+ {data.displayDescription} +
+
{i18n.t('Code')} + {data.code ? ( + data.code + ) : ( + + {i18n.t('None')} + + )} +
{i18n.t('Code')}{data.code}
{i18n.t('ID')} + {data.id} +
{i18n.t('Last updated date')} + {`${moment( + fromServerDate(data.lastUpdated) + ).fromNow()} (${moment( + fromServerDate(data.lastUpdated) + ).format('YYYY-MM-DD')})`} +
{i18n.t('Created date')} + {`${moment( + fromServerDate(data.created) + ).fromNow()} (${moment( + fromServerDate(data.created) + ).format('YYYY-MM-DD')})`} +
{i18n.t('Created by')}{`${data.createdBy.displayName}, ${data.createdBy.username}`}
{attribute.displayName}{value}
+ + )} + + + ) +} + +InfoTable.propTypes = { + children: PropTypes.node, + data: PropTypes.object, + dataType: PropTypes.string, + error: PropTypes.string, + loading: PropTypes.bool, +} diff --git a/src/components/DataDimension/Info/ProgramIndicatorInfo.js b/src/components/DataDimension/Info/ProgramIndicatorInfo.js new file mode 100644 index 000000000..ba996c1ad --- /dev/null +++ b/src/components/DataDimension/Info/ProgramIndicatorInfo.js @@ -0,0 +1,217 @@ +import { useDataMutation, useDataEngine } from '@dhis2/app-runtime' +import PropTypes from 'prop-types' +import React, { useCallback, useEffect, useState } from 'react' +import { validateProgramIndicatorExpressionMutation } from '../../../api/expression.js' +import i18n from '../../../locales/index.js' +import { + getCommonFields, + renderHumanReadableExpression, + renderLegendSets, + sentenceCaseText, + InfoTable, +} from './InfoTable.js' +import styles from './styles/InfoPopover.style.js' + +const programIndicatorQuery = { + programIndicator: { + resource: 'programIndicators', + id: ({ id }) => id, + params: ({ displayNameProp }) => ({ + fields: `${getCommonFields( + displayNameProp + )},aggregationType,analyticsPeriodBoundaries[analyticsPeriodBoundaryType,boundaryTarget,id,offsetPeriodType,offsetPeriods],analyticsType,decimals,expression,filter,legendSets[id,displayName],program[displayName]`, + }), + }, +} + +export const ProgramIndicatorInfo = ({ type, id, displayNameProp }) => { + const [data, setData] = useState() + const [error, setError] = useState() + const [loading, setLoading] = useState(true) + + const engine = useDataEngine() + const [getHumanReadableExpression] = useDataMutation( + validateProgramIndicatorExpressionMutation, + { + onError: setError, + } + ) + + const fetchData = useCallback(async () => { + const { programIndicator } = await engine.query(programIndicatorQuery, { + variables: { id, displayNameProp }, + onError: setError, + }) + + if (programIndicator.expression) { + const result = await getHumanReadableExpression({ + expression: programIndicator.expression, + }) + + if (result) { + programIndicator.humanReadableExpression = result + } + } + + if (programIndicator.filter) { + const result = await getHumanReadableExpression({ + expression: programIndicator.filter, + }) + + if (result) { + programIndicator.humanReadableFilter = result + } + } + + programIndicator.analyticsPeriodBoundaries.forEach( + ({ boundaryTarget }, index) => { + programIndicator.analyticsPeriodBoundaries[ + index + ].boundaryTarget = [ + 'ENROLLMENT_DATE', + 'EVENT_DATE', + 'INCIDENT_DATE', + ].includes(boundaryTarget) + ? sentenceCaseText(boundaryTarget) + : i18n.t('Custom') + } + ) + + setData({ programIndicator }) + setLoading(false) + }, [displayNameProp, engine, id, getHumanReadableExpression]) + + useEffect(() => { + fetchData() + }, [fetchData]) + + return ( + <> + + + {i18n.t('Program')} + {data?.programIndicator.program.displayName} + + + {i18n.t('Analytics type')} + + {data?.programIndicator.analyticsType === 'ENROLLMENT' + ? i18n.t('Enrollment') + : i18n.t('Event')} + + + + {i18n.t('Analytics period boundaries')} + +
+
    + {data?.programIndicator.analyticsPeriodBoundaries.map( + ({ + analyticsPeriodBoundaryType, + boundaryTarget, + id, + offsetPeriodType, + offsetPeriods, + }) => ( +
  • + + + {i18n.t('Type:')}  + + {sentenceCaseText( + analyticsPeriodBoundaryType + )} + +
    + + + {i18n.t('Target:')}  + + {boundaryTarget} + + {Boolean(offsetPeriods) && + Boolean(offsetPeriodType) && ( + <> +
    + + + {i18n.t( + 'Offset:' + )} +   + + {i18n.t( + '{{ offsetPeriodType }} × {{ offsetPeriods }}', + { + offsetPeriodType, + offsetPeriods, + } + )} + + + )} +
  • + ) + )} +
+
+ + + + {i18n.t('Expression')} + + {data?.programIndicator.humanReadableExpression ? ( + renderHumanReadableExpression( + data.programIndicator.humanReadableExpression + ) + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Filter')} + + {data?.programIndicator.humanReadableFilter ? ( + renderHumanReadableExpression( + data.programIndicator.humanReadableFilter + ) + ) : ( + {i18n.t('None')} + )} + + + + {i18n.t('Aggregation type')} + {data?.programIndicator.aggregationType} + + {data?.programIndicator && 'decimals' in data.programIndicator && ( + + {i18n.t('Decimals in output')} + {data.programIndicator.decimals} + + )} + {Boolean(data?.programIndicator.legendSets.length) && ( + + {i18n.t('Legend set(s)')} + + {renderLegendSets(data.programIndicator.legendSets)} + + + )} +
+ + + ) +} + +ProgramIndicatorInfo.propTypes = { + displayNameProp: PropTypes.string, + id: PropTypes.string, + type: PropTypes.string, +} diff --git a/src/components/DataDimension/Info/styles/InfoPopover.style.js b/src/components/DataDimension/Info/styles/InfoPopover.style.js new file mode 100644 index 000000000..4a1a6adf3 --- /dev/null +++ b/src/components/DataDimension/Info/styles/InfoPopover.style.js @@ -0,0 +1,83 @@ +import { colors, spacers } from '@dhis2/ui' +import css from 'styled-jsx/css' + +export default css` + .popover { + width: 480px; + height: 360px; + border: 1px solid ${colors.grey400}; + overflow-x: hidden; + overflow-y: auto; + } + .loader { + height: 100%; + width: 100%; + } + .error { + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; + color: ${colors.grey700}; + } + .data-table { + display: table; + width: 100%; + border-collapse: collapse; + font-size: 13px; + line-height: 17px; + margin: ${spacers.dp4} 0 0 0; + color: ${colors.grey900}; + } + .data-table th { + text-align: left; + font-weight: 500; + padding: 8px 0 8px 12px; + width: 128px; + vertical-align: top; + } + .data-table td { + padding: 8px 4px 8px 16px; + vertical-align: top; + } + .data-table .content-wrap { + max-height: 240px; + overflow-y: auto; + } + .data-table tr:hover { + background: ${colors.grey100}; + } + + ul { + margin: 0; + padding: 0 0 0 ${spacers.dp16}; + list-style-position: outside; + } + li + li { + margin: ${spacers.dp4} 0 0 0; + } + + details ul { + margin: ${spacers.dp4} 0 0 ${spacers.dp16}; + } + + .data-table .code { + font-size: 11px; + line-height: 15px; + display: inline-block; + border-radius: 2px; + background-color: ${colors.grey200}; + // Use outline to give illusion of padding while keeping text aligned vertically with other values + outline: 3px solid ${colors.grey200}; + color: ${colors.grey900}; + font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, + Consolas, 'DejaVu Sans Mono', monospace; + font-weight: normal; + } + + .data-table .none, + .data-table .label { + color: ${colors.grey600}; + } +` diff --git a/src/components/DataDimension/ItemSelector.js b/src/components/DataDimension/ItemSelector.js index 5c36b478a..126fbf496 100644 --- a/src/components/DataDimension/ItemSelector.js +++ b/src/components/DataDimension/ItemSelector.js @@ -1,7 +1,7 @@ import { useDataEngine } from '@dhis2/app-runtime' import { Transfer, InputField, IconInfo16, Button, IconAdd24 } from '@dhis2/ui' import PropTypes from 'prop-types' -import React, { useState } from 'react' +import React, { useRef, useState } from 'react' import { apiFetchOptions } from '../../api/dimensions.js' import i18n from '../../locales/index.js' import { DATA_SETS_CONSTANTS, REPORTING_RATE } from '../../modules/dataSets.js' @@ -15,7 +15,7 @@ import { TOTALS, DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM, } from '../../modules/dataTypes.js' -import { getIcon, getTooltipText } from '../../modules/dimensionListItem.js' +import { getIcon, getDimensionType } from '../../modules/dimensionListItem.js' import { TRANSFER_HEIGHT, TRANSFER_OPTIONS_WIDTH, @@ -23,10 +23,11 @@ import { } from '../../modules/dimensionSelectorHelper.js' import { useDebounce, useDidUpdateEffect } from '../../modules/utils.js' import styles from '../styles/DimensionSelector.style.js' -import { TransferOption } from '../TransferOption.js' import CalculationModal from './Calculation/CalculationModal.js' import DataTypeSelector from './DataTypeSelector.js' import GroupSelector from './GroupSelector.js' +import { InfoPopover } from './Info/InfoPopover.js' +import { TransferOption } from './TransferOption.js' const LeftHeader = ({ searchTerm, @@ -232,6 +233,8 @@ const ItemSelector = ({ dataTest, onEDISave, }) => { + const itemsRef = useRef(new Map()) + const [state, setState] = useState({ searchTerm: '', dataTypes, @@ -253,10 +256,13 @@ const ItemSelector = ({ .includes(DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM), }) const [currentCalculation, setCurrentCalculation] = useState() + const [currentDataItem, setCurrentDataItem] = useState() + + const debouncedSearchTerm = useDebounce(state.searchTerm, 500) const dataEngine = useDataEngine() + const setSearchTerm = (searchTerm) => setState((state) => ({ ...state, searchTerm })) - const debouncedSearchTerm = useDebounce(state.searchTerm, 500) const fetchItems = async (page) => { setState((state) => ({ @@ -446,7 +452,7 @@ const ItemSelector = ({ })) return ( - <> +
onChange(selected)} selected={selectedItems.map((item) => item.value)} @@ -504,12 +510,14 @@ const ItemSelector = ({ /* eslint-disable react/prop-types */ {...props} active={isActive(props.value)} + showingInfo={currentDataItem?.id === props.value} icon={getIcon(getItemType(props.value))} - tooltipText={getTooltipText({ + dimensionType={getDimensionType({ type: getItemType(props.value), expression: props.expression, })} dataTest={`${dataTest}-transfer-option`} + itemsRef={itemsRef} onEditClick={ getItemType(props.value) === DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM && @@ -523,6 +531,12 @@ const ItemSelector = ({ }) : undefined } + onInfoClick={() => + setCurrentDataItem({ + id: props.value, + type: getItemType(props.value), + }) + } /* eslint-enable react/prop-types */ /> )} @@ -537,8 +551,17 @@ const ItemSelector = ({ displayNameProp={displayNameProp} /> )} + {currentDataItem && ( + setCurrentDataItem()} + displayNameProp={displayNameProp} + /> + )} - +
) } diff --git a/src/components/DataDimension/TransferOption.js b/src/components/DataDimension/TransferOption.js new file mode 100644 index 000000000..e1fefa057 --- /dev/null +++ b/src/components/DataDimension/TransferOption.js @@ -0,0 +1,113 @@ +import { IconEdit16, IconInfo16 } from '@dhis2/ui' +import cx from 'classnames' +import PropTypes from 'prop-types' +import React from 'react' +import styles from './styles/TransferOption.style.js' + +export const TransferOption = ({ + disabled, + label, + highlighted, + selected, + onClick, + onDoubleClick, + value, + icon, + active, + dimensionType, + dataTest, + itemsRef, + showingInfo, + onEditClick, + onInfoClick, +}) => { + const renderContent = () => ( +
{ + if (disabled) { + return + } + onClick({ label, value }, event) + }} + onDoubleClick={(event) => { + if (disabled) { + return + } + onDoubleClick({ label, value }, event) + }} + > +
+ {icon} + {label} + {onEditClick && ( + { + e.stopPropagation() + onEditClick() + }} + data-test={`${dataTest}-edit-button`} + > + + + )} +
+
+ {dimensionType} + { + node + ? itemsRef.current.set(value, node) + : itemsRef.current.delete(value) + }} + // avoid moving items when toggling the info popover + // sometimes a double click event is fired + onDoubleClick={(e) => e.stopPropagation()} + onClick={(e) => { + e.stopPropagation() + onInfoClick() + }} + data-test={`${dataTest}-info-button`} + > + + +
+ + +
+ ) + + return ( +
+ {renderContent()} +
+ ) +} + +TransferOption.propTypes = { + label: PropTypes.string.isRequired, + value: PropTypes.string.isRequired, + active: PropTypes.bool, + dataTest: PropTypes.string, + dimensionType: PropTypes.string, + disabled: PropTypes.bool, + highlighted: PropTypes.bool, + icon: PropTypes.node, + itemsRef: PropTypes.object, + selected: PropTypes.bool, + showingInfo: PropTypes.bool, + onClick: PropTypes.func, + onDoubleClick: PropTypes.func, + onEditClick: PropTypes.func, + onInfoClick: PropTypes.func, +} diff --git a/src/components/DataDimension/styles/TransferOption.style.js b/src/components/DataDimension/styles/TransferOption.style.js new file mode 100644 index 000000000..1cb434b8a --- /dev/null +++ b/src/components/DataDimension/styles/TransferOption.style.js @@ -0,0 +1,135 @@ +import { colors, spacers, theme } from '@dhis2/ui' +import css from 'styled-jsx/css' + +export default css` + .wrapper:last-child { + margin-bottom: ${spacers.dp4}; + } + .item { + display: flex; + justify-content: space-between; + align-items: center; + background: ${colors.white}; + font-size: 14px; + line-height: 16px; + border-bottom: 1px solid ${colors.grey300}; + user-select: none; + } + + .item:hover { + background: ${colors.grey100}; + } + + .disabled { + opacity: 0.3; + cursor: not-allowed; + } + + .inactive { + opacity: 0.3; + } + + .labelGroup { + display: inline-flex; + margin: 6px 4px; + } + + .typeGroup { + display: inline-flex; + margin: 0; + align-self: stretch; + align-items: center; + } + + .nowrap { + flex-shrink: 0; + } + + .icon, + .label { + line-height: 18px; + } + + .icon { + margin-right: ${spacers.dp4}; + display: inline-flex; + vertical-align: text-bottom; + } + + .label { + font-size: 14px; + color: ${colors.grey900}; + } + + .type { + font-size: 10px; + letter-spacing: -0.2px; + color: ${colors.grey600}; + font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, + Consolas, 'DejaVu Sans Mono', monospace; + font-weight: normal; + } + + .edit, + .info { + height: 16px; + margin-top: 1px; + margin-left: ${spacers.dp8}; + cursor: pointer; + color: ${colors.grey600}; + } + + .info { + margin: 0 0 0 ${spacers.dp4}; + height: 100%; + padding: 0 6px; + display: flex; + align-items: center; + } + .info.active { + background-color: ${colors.grey300}; + color: ${colors.grey900}; + } + + .highlighted { + background: ${theme.secondary700}; + } + .highlighted:hover { + background: ${theme.secondary800}; + } + + .highlighted .label { + color: ${colors.white}; + } + + .highlighted .type { + color: ${theme.secondary050}; + } + + .highlighted .info { + color: ${theme.secondary050}; + } + + .highlighted :global(.icon path) { + fill: ${colors.teal050}; + } + + .highlighted .type { + color: ${colors.teal050}; + } + + .edit:hover, + .info:hover { + background-color: ${colors.grey200}; + border-radius: 0px; + } + + .highlighted .info.active { + background-color: ${theme.secondary900}; + } + + .highlighted .edit:hover, + .highlighted .info:hover { + background-color: ${theme.secondary900}; + } +` diff --git a/src/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap b/src/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap index f58b07faa..dc5be2f59 100644 --- a/src/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +++ b/src/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap @@ -4,10 +4,6 @@ exports[`DimensionItem matches the snapshot 1`] = `
  • @@ -78,12 +75,10 @@ exports[`The OrgUnitDimension component matches the snapshot 1`] = ` className="deselectButton" > diff --git a/src/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap b/src/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap index 65f0939ba..e05ade43f 100644 --- a/src/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +++ b/src/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap @@ -28,73 +28,61 @@ exports[`The Fixed Period Single Select component matches the snapshot 1`] = ` selected="201405" > - + } - maxSelections={Infinity} onChange={[Function]} options={ Array [ @@ -74,7 +67,7 @@ exports[`The Period Selector component matches the snapshot 1`] = ` }, ] } - optionsWidth="420px" + optionsWidth="520px" renderOption={[Function]} rightFooter={} rightHeader={} @@ -91,6 +84,6 @@ exports[`The Period Selector component matches the snapshot 1`] = ` } - selectedWidth="298px" + selectedWidth="520px" /> `; diff --git a/src/components/styles/DimensionSelector.style.js b/src/components/styles/DimensionSelector.style.js index e142718b8..477cb06f2 100644 --- a/src/components/styles/DimensionSelector.style.js +++ b/src/components/styles/DimensionSelector.style.js @@ -2,6 +2,9 @@ import { spacers, colors } from '@dhis2/ui' import css from 'styled-jsx/css' export default css` + .transfer-container { + min-width: 800px; + } .filterContainer { display: flex; margin-bottom: ${spacers.dp12}; diff --git a/src/index.js b/src/index.js index 1202981b5..7f4c2f2eb 100644 --- a/src/index.js +++ b/src/index.js @@ -125,27 +125,35 @@ export { layoutHasPeriodDimension } from './modules/layout/layoutHasPeriodDimens // Modules: valueTypes export { - VALUE_TYPE_NUMBER, - VALUE_TYPE_UNIT_INTERVAL, - VALUE_TYPE_PERCENTAGE, - VALUE_TYPE_INTEGER, - VALUE_TYPE_INTEGER_POSITIVE, - VALUE_TYPE_INTEGER_NEGATIVE, - VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE, VALUE_TYPE_TEXT, VALUE_TYPE_LONG_TEXT, + VALUE_TYPE_MULTI_TEXT, VALUE_TYPE_LETTER, VALUE_TYPE_PHONE_NUMBER, VALUE_TYPE_EMAIL, - VALUE_TYPE_USERNAME, - VALUE_TYPE_URL, VALUE_TYPE_BOOLEAN, VALUE_TYPE_TRUE_ONLY, VALUE_TYPE_DATE, - VALUE_TYPE_TIME, VALUE_TYPE_DATETIME, + VALUE_TYPE_TIME, + VALUE_TYPE_NUMBER, + VALUE_TYPE_UNIT_INTERVAL, + VALUE_TYPE_PERCENTAGE, + VALUE_TYPE_INTEGER, + VALUE_TYPE_INTEGER_POSITIVE, + VALUE_TYPE_INTEGER_NEGATIVE, + VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE, + VALUE_TYPE_TRACKER_ASSOCIATE, + VALUE_TYPE_USERNAME, + VALUE_TYPE_COORDINATE, VALUE_TYPE_ORGANISATION_UNIT, + VALUE_TYPE_REFERENCE, VALUE_TYPE_AGE, + VALUE_TYPE_URL, + VALUE_TYPE_FILE_RESOURCE, + VALUE_TYPE_IMAGE, + VALUE_TYPE_GEOJSON, + valueTypeDisplayNames, } from './modules/valueTypes.js' export { diff --git a/src/modules/dimensionListItem.js b/src/modules/dimensionListItem.js index 38d02103b..3566fc86e 100644 --- a/src/modules/dimensionListItem.js +++ b/src/modules/dimensionListItem.js @@ -22,7 +22,7 @@ import { DIMENSION_TYPE_PROGRAM_INDICATOR, } from './dataTypes.js' -export const getTooltipText = ({ type, expression }) => { +export const getDimensionType = ({ type, expression }) => { if (type === DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM && expression) { return dataTypes[DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM].getItemName() } diff --git a/src/modules/dimensionSelectorHelper.js b/src/modules/dimensionSelectorHelper.js index c127b3175..7355e0feb 100644 --- a/src/modules/dimensionSelectorHelper.js +++ b/src/modules/dimensionSelectorHelper.js @@ -1,5 +1,5 @@ -export const TRANSFER_OPTIONS_WIDTH = '420px' +export const TRANSFER_OPTIONS_WIDTH = '520px' -export const TRANSFER_SELECTED_WIDTH = '298px' +export const TRANSFER_SELECTED_WIDTH = '520px' export const TRANSFER_HEIGHT = '512px' diff --git a/src/modules/valueTypes.js b/src/modules/valueTypes.js index 1097ac84f..050b17dcc 100644 --- a/src/modules/valueTypes.js +++ b/src/modules/valueTypes.js @@ -2,27 +2,67 @@ https://github.com/dhis2/dhis2-core/blob/master/dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/ValueType.java */ -export const VALUE_TYPE_NUMBER = 'NUMBER' -export const VALUE_TYPE_UNIT_INTERVAL = 'UNIT_INTERVAL' -export const VALUE_TYPE_PERCENTAGE = 'PERCENTAGE' -export const VALUE_TYPE_INTEGER = 'INTEGER' -export const VALUE_TYPE_INTEGER_POSITIVE = 'INTEGER_POSITIVE' -export const VALUE_TYPE_INTEGER_NEGATIVE = 'INTEGER_NEGATIVE' -export const VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE = 'INTEGER_ZERO_OR_POSITIVE' +import i18n from '../locales/index.js' + export const VALUE_TYPE_TEXT = 'TEXT' export const VALUE_TYPE_LONG_TEXT = 'LONG_TEXT' +export const VALUE_TYPE_MULTI_TEXT = 'MULTI_TEXT' export const VALUE_TYPE_LETTER = 'LETTER' export const VALUE_TYPE_PHONE_NUMBER = 'PHONE_NUMBER' export const VALUE_TYPE_EMAIL = 'EMAIL' -export const VALUE_TYPE_USERNAME = 'USERNAME' -export const VALUE_TYPE_URL = 'URL' export const VALUE_TYPE_BOOLEAN = 'BOOLEAN' export const VALUE_TYPE_TRUE_ONLY = 'TRUE_ONLY' export const VALUE_TYPE_DATE = 'DATE' -export const VALUE_TYPE_TIME = 'TIME' export const VALUE_TYPE_DATETIME = 'DATETIME' +export const VALUE_TYPE_TIME = 'TIME' +export const VALUE_TYPE_NUMBER = 'NUMBER' +export const VALUE_TYPE_UNIT_INTERVAL = 'UNIT_INTERVAL' +export const VALUE_TYPE_PERCENTAGE = 'PERCENTAGE' +export const VALUE_TYPE_INTEGER = 'INTEGER' +export const VALUE_TYPE_INTEGER_POSITIVE = 'INTEGER_POSITIVE' +export const VALUE_TYPE_INTEGER_NEGATIVE = 'INTEGER_NEGATIVE' +export const VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE = 'INTEGER_ZERO_OR_POSITIVE' +export const VALUE_TYPE_TRACKER_ASSOCIATE = 'TRACKER_ASSOCIATE' +export const VALUE_TYPE_USERNAME = 'USERNAME' +export const VALUE_TYPE_COORDINATE = 'COORDINATE' export const VALUE_TYPE_ORGANISATION_UNIT = 'ORGANISATION_UNIT' +export const VALUE_TYPE_REFERENCE = 'REFERENCE' export const VALUE_TYPE_AGE = 'AGE' +export const VALUE_TYPE_URL = 'URL' +export const VALUE_TYPE_FILE_RESOURCE = 'FILE_RESOURCE' +export const VALUE_TYPE_IMAGE = 'IMAGE' +export const VALUE_TYPE_GEOJSON = 'GEOJSON' + +export const valueTypeDisplayNames = { + [VALUE_TYPE_TEXT]: i18n.t('Text'), + [VALUE_TYPE_LONG_TEXT]: i18n.t('Long text'), + [VALUE_TYPE_MULTI_TEXT]: i18n.t('Multi text'), + [VALUE_TYPE_LETTER]: i18n.t('Letter'), + [VALUE_TYPE_PHONE_NUMBER]: i18n.t('Phone number'), + [VALUE_TYPE_EMAIL]: i18n.t('Email'), + [VALUE_TYPE_BOOLEAN]: i18n.t('Yes/No'), + [VALUE_TYPE_TRUE_ONLY]: i18n.t('Yes Only'), + [VALUE_TYPE_DATE]: i18n.t('Date'), + [VALUE_TYPE_DATETIME]: i18n.t('Date & Time'), + [VALUE_TYPE_TIME]: i18n.t('Time'), + [VALUE_TYPE_NUMBER]: i18n.t('Number'), + [VALUE_TYPE_UNIT_INTERVAL]: i18n.t('Unit interval'), + [VALUE_TYPE_PERCENTAGE]: i18n.t('Percentage'), + [VALUE_TYPE_INTEGER]: i18n.t('Integer'), + [VALUE_TYPE_INTEGER_POSITIVE]: i18n.t('Positive Integer'), + [VALUE_TYPE_INTEGER_NEGATIVE]: i18n.t('Negative Integer'), + [VALUE_TYPE_INTEGER_ZERO_OR_POSITIVE]: i18n.t('Positive or Zero Integer'), + [VALUE_TYPE_TRACKER_ASSOCIATE]: i18n.t('Tracker Associate'), + [VALUE_TYPE_USERNAME]: i18n.t('Username'), + [VALUE_TYPE_COORDINATE]: i18n.t('Coordinate'), + [VALUE_TYPE_ORGANISATION_UNIT]: i18n.t('Organisation unit'), + [VALUE_TYPE_REFERENCE]: i18n.t('Reference'), + [VALUE_TYPE_AGE]: i18n.t('Age'), + [VALUE_TYPE_URL]: i18n.t('URL'), + [VALUE_TYPE_FILE_RESOURCE]: i18n.t('File'), + [VALUE_TYPE_IMAGE]: i18n.t('Image'), + [VALUE_TYPE_GEOJSON]: i18n.t('GeoJSON'), +} const NUMERIC_VALUE_TYPES = [ VALUE_TYPE_NUMBER, diff --git a/yarn.lock b/yarn.lock index be96f5b14..2c11f7d29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ 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.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.8.3": +"@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.16.7", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.8.3": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -80,7 +80,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.22.5", "@babel/generator@^7.23.6", "@babel/generator@^7.25.9", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": +"@babel/generator@^7.25.9", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== @@ -106,7 +106,7 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== @@ -150,26 +150,6 @@ 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.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-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/types" "^7.22.5" - "@babel/helper-member-expression-to-functions@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" @@ -186,7 +166,7 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.25.9": +"@babel/helper-module-transforms@^7.25.9": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== @@ -241,19 +221,12 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@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", "@babel/helper-string-parser@^7.25.9": +"@babel/helper-string-parser@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5", "@babel/helper-validator-identifier@^7.25.9": +"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== @@ -272,7 +245,7 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helpers@^7.22.5", "@babel/helpers@^7.25.9": +"@babel/helpers@^7.25.9": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== @@ -280,7 +253,7 @@ "@babel/template" "^7.25.9" "@babel/types" "^7.26.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4", "@babel/highlight@^7.25.9": +"@babel/highlight@^7.10.4": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== @@ -290,7 +263,7 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.5", "@babel/parser@^7.23.6", "@babel/parser@^7.25.9", "@babel/parser@^7.26.2", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.2", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== @@ -1112,7 +1085,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.25.9", "@babel/template@^7.3.3", "@babel/template@^7.4.0": +"@babel/template@^7.25.9", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== @@ -1121,7 +1094,7 @@ "@babel/parser" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.22.5", "@babel/traverse@^7.25.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.18.9", "@babel/traverse@^7.25.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== @@ -1142,7 +1115,7 @@ "@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.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== @@ -1436,584 +1409,585 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz#7dfccb9df5499e627e7bfdbb4021a06813a45dba" integrity sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ== -"@dhis2-ui/alert@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-9.4.4.tgz#4045882cb5bc5e6763897e4eca3d779e54f64d71" - integrity sha512-v3TjIQEDqUtAqcUsH62/TYqQLehzqRPOwqdw6LDa3Yldqf9iMJ6v66DBESO2QsYd33ZWPj0+ZWw8BDtAP/SubQ== +"@dhis2-ui/alert@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-10.1.9.tgz#f8c662995a5d19d00a8cb1a0c39e718898f52d22" + integrity sha512-1dmk2mM5xhfvNHhuFlpcolbfox1VwdDuzOf6wF3wY3UxTN8L/sRulYYHrn++IaOiin5+yezX/eKNw7AAbbzXxQ== dependencies: - "@dhis2-ui/portal" "9.4.4" + "@dhis2-ui/portal" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/box@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-9.4.4.tgz#646cdb3b30708ba2332d249eae47fa03a1e6d309" - integrity sha512-xTkjLlcKm7Z6gESys2QLkgYWZSKyvKXcU4GHDJMZ+HXjiSxLfGSmbKDJfBkGuOsCGYlgCMdM1jMBUQjT7zp/Fg== +"@dhis2-ui/box@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-10.1.9.tgz#15cc135c804d14f3866796699f80e364b2fbd931" + integrity sha512-+VVA6j1TJhrYB2NPyQ2qf0yyth5ZLErhOAsW1JvJXn6bcBuMkoKxy/uNFPu4JfPYp9Ttuh/oF31EL9+I4ucLdA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/button@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-9.4.4.tgz#5fa1765e6b7a26fdeca875bf3114a5039deab8f0" - integrity sha512-U0JNzTcQkOlSm0GJsSPGRLDXMA5czS33SkaaL0S7kkNLcsTceZX/4cO6ldTuAJWPJLiuNsR8e/Rklos9xospLg== +"@dhis2-ui/button@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-10.1.9.tgz#ddfc8dc8860459a5d735864d35f81665e35dbea7" + integrity sha512-dkoPdAiAmeYekRTTqbalChwQtK5/mCKa1m/rETi6WYn/Dgq7VaTRaL7cwuecNDBAO1o0R2yQLwq/y6nbnDBj0A== dependencies: - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/popper" "9.4.4" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/popper" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/calendar@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-9.4.4.tgz#3b5147a42ffbefaab77824f5c95e755508d2291f" - integrity sha512-wBzWhJdnCyGJuNYFhLiLh2cwiSm2iSa/JNud449+atCK6O/XygBel96eaLUh63GWgKmM5RE9PIoHWm1xYfn5XA== - dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2/multi-calendar-dates" "^1.1.1" +"@dhis2-ui/calendar@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/calendar/-/calendar-10.1.9.tgz#6ba8b0a49c58d85036bc67c5f4abb767d1889163" + integrity sha512-30OiM7KsaHCfcZW4hddfIVZsJ2wTW/x/YyKgKVxImoZD3jSWbZDQ2XWDk1mPzPqPyJVCi3xmrHR1lzbJ2fHpiQ== + dependencies: + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2/multi-calendar-dates" "2.0.0" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/card@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-9.4.4.tgz#8bb0ca90f5eef4421beef9506b2c244041f1c1ef" - integrity sha512-ZquXjtHeY+/zt5ojXmB8ZeqD5pnEriw7/8LHGi2TYGZovCbw0rN76pTIgL+9X7V2WcVbSQinxUpdlcXex8heGQ== +"@dhis2-ui/card@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-10.1.9.tgz#ec8067b596f40244103bf05459824c89c0481d83" + integrity sha512-kNrK59ZaeeFQCWnxRXEMTi81SUX+kVFE/QhODRX8l8ExqaWQy/RbEFYBPMqruenEDLQEU3cSTkzXXZgqPNGQew== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/center@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-9.4.4.tgz#c62c32bbe83aa20278845ec22cfcb5cc3a394d26" - integrity sha512-I+d1ByUcemZDYCPauiXY/EOjUDjoLPXTzpzAF3AboZNvGjo2+1AgHKNkAMp5WgBBQRaGoAiNLRhhgGEX6f9DhQ== +"@dhis2-ui/center@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-10.1.9.tgz#330e303c23d830af46450a84ca1c62abf5ab1447" + integrity sha512-2f7TkAtJsoUmctJ6XkWRg2v/CjYuen9uEDSXZfEOOpspCWW2JBrZDbneu8BVFeAQu3HraO7YStRHjF2uBLkEBw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/checkbox@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-9.4.4.tgz#61b75fa7d1773e1d9a11b95126c44a465ac59eaa" - integrity sha512-i26bv/lBynQ1AeOhMmRJ4rQJr5HOFXe4VNCaQhq/+1q+g2dewyf0gIygJnjYMzcX48eyfQsBDU5JBYhuSz6kWw== +"@dhis2-ui/checkbox@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-10.1.9.tgz#5dd753476694713745f91ae89b71aa9596c2fd84" + integrity sha512-1V293uSYAKJjL98u/qvOe9NB0u3CGbkjc1XS2cFm4uO4aVGodpPLBPLUSuTip+NIUMHHucmCufyyLXyE+2oWWw== dependencies: - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/required" "9.4.4" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/required" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/chip@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-9.4.4.tgz#f1b151e0bc091aca4e288ed7f4889a38bf1f74c6" - integrity sha512-+2FLdWcDGNOQmrCU0sKve+JRD1hwCd53sQ0D/OCI4zFCrJwJ5C7Pet5Y3Ys0hv8lAu4hCdwklSyKuwlIjYntjg== +"@dhis2-ui/chip@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-10.1.9.tgz#5fff442894373005c52609cf0a3fa7af3eff9ea7" + integrity sha512-TxNsow8CNXlhIn3EkB32TibyGy3Pw4DVnw2aosgjo+ZbTGpb9Ku+qKwOivbE6XCPaF4G8YMYGBmM49wz4LG0Aw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/cover@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-9.4.4.tgz#89ed8113be5ba541d7250e32a828c5e2046369e7" - integrity sha512-JAywkI+Hebyn4EkiSf3li2E2+iDUvBwcgHH4AW5QkkRaM8YGqgluNnsn+AOL1Igs6lXh3jzGrsiN3xZSoGO6ww== +"@dhis2-ui/cover@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-10.1.9.tgz#ad29b51e1e4ce153f5da64f70e8091614a8c5d51" + integrity sha512-UFKdKwqCE6PW2dXxxcYxJmEQq7asFv2xosrU3b/r5Dm8S6HGrQXtQRyp+OWHvNT04M1kUm3aMNgCM62zymcIlA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/css@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-9.4.4.tgz#c46af291af86eec008f60205c7c46e100ef8188a" - integrity sha512-VBmYcTKet0YDEguptZ0+Yc789HmNiaMDTu3iUnJKuvurhYSaFGD/oK7d2Sr6bIo0KTQ+/XpcOL68+wRLktGgwQ== +"@dhis2-ui/css@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-10.1.9.tgz#c68de1471d5b07ff6a0ecd9b7b6aed7184190faa" + integrity sha512-lBLlQLnA7t/1yYSnXGYwodyDTYzeYAUV/9RWw9EzoinUoHlQMSgRcblv6Ans7MqXAhLNY6LcWIj1n29XK0nH0g== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/divider@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-9.4.4.tgz#d904282c0bc8552180923e36189b421dfb4d3853" - integrity sha512-YjERDzyV4aznyKpREUDhh5QgykRAhNE6xr7rO5LiCNeFx2MpZY1Xq6AFoPZSuy966iAEU0KmOK+8Ow0NGg/9GA== +"@dhis2-ui/divider@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-10.1.9.tgz#8be1257545a10325ba7445178d0a1d1b7466351e" + integrity sha512-A9f12mOruxPzOcfz2yPbUrSFXdbrTXvHLuqQRWQLf/Hl1QOHtfBYyAb5zDes350gW+C6HlRKco4PVlfenBP9OA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/field@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-9.4.4.tgz#80753ca3bc2c419dc1066e5e6d662b18ddaec032" - integrity sha512-07O3Npth26D0+kOHYdsfoF3fZm8SXfmtonKyOIOpRAmIX1TJZRNO9LuI5S9+z5vh0++x3Y+c9hIFmac0Vvm9aQ== +"@dhis2-ui/field@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-10.1.9.tgz#b80774c0f520053ccff2a6f235974b663dc8ac35" + integrity sha512-o/kx5Qb4k85B/nocXMyJINiDieqmW/55zvTGC6tXnml4FKRMojjSV+hWm22Q1AaZ64Mb3MeP+DogZnwjNpkhMA== dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/help" "9.4.4" - "@dhis2-ui/label" "9.4.4" + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/help" "10.1.9" + "@dhis2-ui/label" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/file-input@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-9.4.4.tgz#02878069f9f4db33a14dba9e18642d8e85f6d2e9" - integrity sha512-GS89r/FxYfd9GlXUqscUXjzh1f190mo9qwJN6GrrzeK+gSGwtFDtGHDCyES7qQ8MdtvgDlC8Dgdjl5EU7YP6tQ== +"@dhis2-ui/file-input@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-10.1.9.tgz#676aae3e4d178c0dc5a417751bd80ef3c91b5f3c" + integrity sha512-Vh93jnjlmEF3gislvkfksamQtsSPmt73xlfGJyVrR4OXEg3JkpGQ5ngCZ0M5GS96dZKX6igB6+6iDWUJTApzDQ== dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/label" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/status-icon" "9.4.4" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/label" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/status-icon" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/header-bar@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-9.4.4.tgz#7c26955ea968bb25cac6766e549402ccde34d8c3" - integrity sha512-IA6yFbFFimWMYyHSD9idCLCamnWtAgRuoD3FG/8kKvOurTEwUcb0qYaecnQAstwWwZ8C+ZIKiTB0796WXj/SDg== - dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/center" "9.4.4" - "@dhis2-ui/divider" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/logo" "9.4.4" - "@dhis2-ui/menu" "9.4.4" - "@dhis2-ui/modal" "9.4.4" - "@dhis2-ui/user-avatar" "9.4.4" +"@dhis2-ui/header-bar@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-10.1.9.tgz#b2e340ceeeaee31496cbcc353908f47c2a5451ec" + integrity sha512-0GIGDstDshi5KhmGJb4si8AK9stX0EUk3y40uAkO02lo9um2ftNTYZpNO0LNoGMw4Hqhn06ikGl5jnpUteLj/A== + dependencies: + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/center" "10.1.9" + "@dhis2-ui/divider" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/logo" "10.1.9" + "@dhis2-ui/menu" "10.1.9" + "@dhis2-ui/modal" "10.1.9" + "@dhis2-ui/user-avatar" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" moment "^2.29.1" prop-types "^15.7.2" -"@dhis2-ui/help@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-9.4.4.tgz#6b3df94b6b8c0f7269dde3c90602dbb6dac889fa" - integrity sha512-V/ZNC/QwlN+444rb2wBAzEkqeLToafHQOEWCUUvcYEgC2Vxdh2bXEqBl6w4Bv2Xmh563k+AdxvXZtVL4zLA/og== +"@dhis2-ui/help@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-10.1.9.tgz#de342480298faa17aa9ea582bec401f6ca8b178d" + integrity sha512-mYztRj5x2gqz455XW2N6GJFCP2/OsOpJH1aoE0lSUO0I/oCENmWQaQ9+ttvjgFbafswlxTusROs7y82+mq/2eA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/input@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-9.4.4.tgz#621eab6b8d535fcb111094f660415ff4136cb156" - integrity sha512-F6GEeRUQXFxjhoY3+CuaZWrkS2D54vTuP429uCL77/Wn2HdqYWnDMz3ILubIR+T1C5otmAH5cqW3IinRGlOq+Q== +"@dhis2-ui/input@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-10.1.9.tgz#e813d1f1618a6e5ab2387526a1dfb3748239f664" + integrity sha512-mYu6tOnhg/0HvQuxRsDmbJlTjjAOcXJUmAQx2Eg1+odNMbWqHFbxasOOihEegUZS0rMTTYrJKVurWUr5wXe7Rw== dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/status-icon" "9.4.4" + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/status-icon" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/intersection-detector@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-9.4.4.tgz#1ad2a7b47a84aeb674274272d362302f4b23ba56" - integrity sha512-+DhDX7/Y0uKZnTy4r4qTt6kQtdlYxJVnlx42CwAO4KWAJirOISDyepzKUii9ZFMLCcxQgQ2uddiCwdjPqLqiAQ== +"@dhis2-ui/intersection-detector@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-10.1.9.tgz#74e640b3eec2fe5e9df5c57930c13565f067e22c" + integrity sha512-WNckq8bYvBo/guJp5XPm9ikUgXFwUXXF0hOagNNFNJ2ID3KAVsDcgbWjMEvAIf05jiz05haXJqdVTRvPgAQENw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/label@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-9.4.4.tgz#107e21bcc7a8d29e8355d54d5e475c96364fc78d" - integrity sha512-uoYpozTDR1kxM+g8tWvvCV9Z4KT9+t4t4IKULICJLwEW8JfwXQxZnVmCvCc3Zv2fHZlmUN9XXGVt00VG1ldWsg== +"@dhis2-ui/label@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-10.1.9.tgz#2fb83a0c820974895c4fd5cd72f51726c555d816" + integrity sha512-gPYsFuDs5cw1YAJ7xpXhG9AnoUBCWppQHZrvL13jb5y3hPinI4niH7MgpHi/fNK7sAXS/mbBoSg//++avUnJVA== dependencies: - "@dhis2-ui/required" "9.4.4" + "@dhis2-ui/required" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/layer@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-9.4.4.tgz#980a9e397468b9418937202a0afaae868bed4b4b" - integrity sha512-PLqcBHfUB1EV24trWbkDv2m1viU3ijVYZQa13htxa5r800ei+ze6K4x15hnvI9qtCbNAvBv/N1Axxui4Xwjkdg== +"@dhis2-ui/layer@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-10.1.9.tgz#7299e4b6104225b03cfd089dc7ca0c07f69ef2b4" + integrity sha512-2Ib4V0u4f6NFV+UmbySjnJQAq+lzQSHlpqyUqkoIAPu3N8zDmirZXiD+WMIa95sj5mf21fJ9BQ1Kd2b5JcbIoQ== dependencies: - "@dhis2-ui/portal" "9.4.4" + "@dhis2-ui/portal" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/legend@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-9.4.4.tgz#5476cfa7937ca9bbac3b9e64e991b17d51e9ced1" - integrity sha512-uqxHCFYMfP8yxV0lOyOgKbOUYRP3TNoO+fHyo78y2OGhjrsanHolZMPokf+POgZAFmBvQDtibOoyp2J7jq1Qog== +"@dhis2-ui/legend@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-10.1.9.tgz#560629ea352de4942b86760636bc79cc5e1b0d60" + integrity sha512-RM0U8QI36fp1oIREiiiAkpGBJiSl3xSQItiLxKHtqY9VbBRSjr5CGzNF2q7r4koH7MT3uR740+sCJSWFJiy2Pw== dependencies: - "@dhis2-ui/required" "9.4.4" + "@dhis2-ui/required" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/loader@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-9.4.4.tgz#2bd268cba9310db47c0a9dda04cff760380fc6b0" - integrity sha512-2B9PZ/iQIuCWbPIQFihrmX+1YHW5vZlOv+rsJT1SipSIj5sLWy4KYtjvm89lSu+Or60jnrNAJ8Iix5bnlb+dWw== +"@dhis2-ui/loader@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-10.1.9.tgz#18ff91fb6e3d80d45026d03b4d6c468bc0744200" + integrity sha512-2zY+o8Fjm+2Ih0p5YQ9UKzfwdIamgDcaHjVxKF/KJCftC2iCMzf7fqYiGh2tGwXzOCVWovRqyBX8i2CXNsMdqA== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/logo@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-9.4.4.tgz#a0050a56aabafe33ef4c232a116980d289fbcc34" - integrity sha512-Nps/U5rCBaO8X8/A0gbd8SuGRdd1ymCRnXv5FuUvciQ8CcoQnjE8aVi0TMY1h/A8XDrLWZXyAnm3WbmA0GnOvw== +"@dhis2-ui/logo@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-10.1.9.tgz#c26a4f1870968b3e801515769f7db8452449eb46" + integrity sha512-NSnuFEnIGTJmBTZ/IR4v8/ZBGeaeJlxyG6soCgMk6wa0sYTRu3QWjky0EY22A/ALYy8WYJPTkQHpStX/t5LRWg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/menu@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-9.4.4.tgz#a25fe07705d8e14e97390d8b59e7330d7fdc335e" - integrity sha512-TSIPM9vNswIo59yxPEZN30KTWbxQNXC2BLu6Fkd0FpgLO8ZxnAtG7qbgay8Y3c+9FIAt+Be/N41d+5VlSG8WtA== +"@dhis2-ui/menu@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-10.1.9.tgz#00f17603429f1b4f3ddfaa6b18fa4f585cbf6f1b" + integrity sha512-mkVa4NTtSf4epo53keibfsjxo8bIQFkLtAz7FLpxe+RQKZQ3lTo5xu9imKgu+jpRK52e2uqyzBz3DNcA34RBkg== dependencies: - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/divider" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2-ui/portal" "9.4.4" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/divider" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2-ui/portal" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/modal@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-9.4.4.tgz#3edbc8e3bb942aba2c8377aadd79514fe2fa7930" - integrity sha512-Ny9y9hxinbrnSQxoDCFh902BNozGjHdp1YG5w+sxyg4gfUjP2gh+OyoLILvw8LqvrjoukI7anfmikNoAEwjanw== +"@dhis2-ui/modal@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-10.1.9.tgz#b89d35041a0bc4107ce2cba7c9953ad08600d889" + integrity sha512-7fNoKa9O7XTelIHAeQoU3yd+qnuv6Qybk0OiF4r1JIuHgJUMOyg3RczXTYdjmy+SlrGBdxkKPBSbMOylU1mtEw== dependencies: - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/center" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/portal" "9.4.4" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/center" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/portal" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/node@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-9.4.4.tgz#3c13b7424a172564a0d52893b4d1ac8a7d9ceac3" - integrity sha512-8kyvwqFc/cx1U50AhDymUnKR3OvWy6/EBnt8IOGrdFGrIRTk6P+JiRFUMfQ2aRubhtLMsDTpQ3LOMeHeP7/87w== +"@dhis2-ui/node@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-10.1.9.tgz#585176b3162adf6c9607f750cc8890cf5c7419c1" + integrity sha512-JksZZKqpaL1867LUL7BV1wmrpVhE5pPM5Aj8Yu5zbhe5YzxpjB8rn4FnPvb5Spi11GOpqIV74kdjOvUL85ukwg== dependencies: - "@dhis2-ui/loader" "9.4.4" + "@dhis2-ui/loader" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/notice-box@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-9.4.4.tgz#c333a0ffa0cddc20431071ec56f0521fa3dbcb5d" - integrity sha512-u7zcrq4EqCwCOszyl1FlfpeQj+Tn/UJ/J6mZ3v44+7gCTNMrEfT7Hf/drmTVLmFNquqDUP/ppr1uxwtQOResyA== +"@dhis2-ui/notice-box@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-10.1.9.tgz#c60c664dce966e7242605d3c4839db5d65794047" + integrity sha512-wI1fstczbMCKPEBkbI/A3eBcvk0Yv5tLiWCX73FxaBJCAbHhFRMlUXxMyceZxJTY2iSka+WgKsqwHtvmvE8Hng== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/organisation-unit-tree@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-9.4.4.tgz#3e952d2fe0fd045d6bc2a6a92872ef8e83a6e7f2" - integrity sha512-qUDsQIHPE2QQVizfs+bomsrlPKVrPi8L2MtKVkma2P1/GlDnZaOoLYB70zzLLbqH90dUbwMlGF3ZXnbIhi+A6g== +"@dhis2-ui/organisation-unit-tree@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-10.1.9.tgz#dddabad065c95edfbdd38a404a08391848549733" + integrity sha512-nezj0QiI+3aTj6WaZRuWV01oHB2tQaCGoELfBWoY5Ff1OGLKdWUdxyFQXCQzmfcMNgdf7R7n//3B3HOKSOgzhA== dependencies: - "@dhis2-ui/checkbox" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/node" "9.4.4" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/checkbox" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/node" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/pagination@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-9.4.4.tgz#35d4ab7e35a0a37d998fe51394ac1bda26b7052f" - integrity sha512-WnruI7k/wcXzZF84fWRcFhfA131p23NwkeUUbt45cm/36+SnDoYAl6Nbh1elEQpYu2jqMWVk2w82u37MT/usxg== +"@dhis2-ui/pagination@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-10.1.9.tgz#4a03db4e32dc9e9826eca4eaa0a294142c33f330" + integrity sha512-+2FPiSorErHLIGiQ3dfrlVl+diiMFinwoKS2JViw3zoKoviIEJ1cKAe4BakLwOGvS3X1onAQBOeqUF7tMRsggg== dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/select" "9.4.4" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/select" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popover@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-9.4.4.tgz#547dbffefbfdd838bf401a5a44e1e524ab028440" - integrity sha512-UosiUkknLNl3h+IuqNiEcLuGSskP8SV55BOUHEHIyE5HacRVjzyeKyK6ak/g0L8FyscYdpPvAAUqFRq7pnByzg== +"@dhis2-ui/popover@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-10.1.9.tgz#08b93345578bb95675aebb255381be31384665c5" + integrity sha512-YSpavwoTl4dTfmY//UcnnHnkjxYo3BY6jVaz+7qz63OkeN4n05E4AD518rOcAIOo6GdM4vMKv/phKTYMQOh9Ew== dependencies: - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/popper" "9.4.4" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/popper" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/popper@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-9.4.4.tgz#84d3e2155d93bc54cebdf1430dc7b2f207d681ae" - integrity sha512-avSwb0Ty25mE7BkoV/dWvwxZFLEWOOkEXSa2z5F/YNfec8gvCODiVGcHU6CEBfDXk7y4dqv7QtLEfaeoa8cpnA== +"@dhis2-ui/popper@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-10.1.9.tgz#67bc60df24291df0e92e77fc05006163ccf6399e" + integrity sha512-2UeaAA4SDudbj5EBk5lPjYgHJAuQjAMv5RPa/XbC157TRu6MSRGkbVk61qGp1fHiyj7cWCoqsk7A6zsF6IqeiQ== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" "@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.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-9.4.4.tgz#8de12cd6c0e975b47cd19caae8acc1500034f206" - integrity sha512-HSXWzWFlSy9layr9zmxQcITiOIsse9y7bK0kPRlqjqEtSSfF57iGcFSAOTwX4HBW0xE/lQ8n4UfHoGOU76LF0Q== +"@dhis2-ui/portal@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-10.1.9.tgz#8ebc4ada9dcbb4e3e252bd977c979915e5299993" + integrity sha512-3zdgYLlOLLM6Oq8DzGGGx12fj/XhwpqLj55sEDlHEGKWG+VTQnHp9eGRjQVOxN3Hkva1rrdP8UDRR6xztDmchw== dependencies: classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/radio@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-9.4.4.tgz#5654713ad8646aac31909ff6009b189975b3eaf5" - integrity sha512-JAqnlbX9arPASFNHJw8leeDs0FGKWvIOQDZeye9ApG8Xnl2vdu4Oa/8GfDPSPYHIGdvhx5VVH0D+PzAFLBeIUA== +"@dhis2-ui/radio@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-10.1.9.tgz#f311dbc98b05d97d5920a1ce2ce838bb7192b120" + integrity sha512-bk9GwtTZKXWiGSgx6pjnjDQiXvqxBUg7/mjs4r3VX/7OMMLeEXYV15AQq1HyaRuTnOu3t9WKv54KcTLcify/Hw== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/required@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-9.4.4.tgz#fc167134d435a7ee4a86966887f282653e87f9f3" - integrity sha512-jwLwL+6y7Wp0IWiXyj28xmBpOsZOdyJlBUpdfmur7akVK46jMMTlugz36SpygU7f9dzExl2hJgDu01X8q/kdng== +"@dhis2-ui/required@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-10.1.9.tgz#35f7bab2ea45995184d3add86f52f3a06aa135a3" + integrity sha512-tkD0/J00gxt02nwBM9GewlyLDQ8n243DDK5FXBAo0sV5eNK2EG9EBmMWRl4Z1/F4L/nIkDBgMRFVYSWCtBli2A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/segmented-control@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-9.4.4.tgz#8f4b756b913f5162f7523c4044be80a068584649" - integrity sha512-A8p8VxRea3VV4G9yWc+zTfQarW/ZDIfkEWzKzsmyQEuqIWlTVPf7Hcva9I7Lx1CiDpScJdJbK5vGlglj4PKj5g== +"@dhis2-ui/segmented-control@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-10.1.9.tgz#eee9aac87067348352550fd165a7ad34dddfa624" + integrity sha512-8/Yo+6l72YCif1OvcWhd3875aZvT+NyKiaaI4s9bKhAswAk7c94TVg+Nnv/4gxiKDfXUOwin4NLkgjuMJRmW8A== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/select@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-9.4.4.tgz#39e566dc565a07c783ca9c3be0ad15de2484eec4" - integrity sha512-qIJunqROPGcP9Ys/yx4D/jUS20DE8ORxT3W1l+r/RnL/z8gPlyBAYeYB914nxualIhoUYXr7UjhgyJZfQbIafQ== - dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/checkbox" "9.4.4" - "@dhis2-ui/chip" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2-ui/status-icon" "9.4.4" - "@dhis2-ui/tooltip" "9.4.4" +"@dhis2-ui/select@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-10.1.9.tgz#726bb3715d78a58ec821ade6bdcf7ad3d1d3de8f" + integrity sha512-CNU1LgzJo6Z3tTFpWI6nSSnQE0QOnKrasP7mT9NnzgnjhP7OyRSWMpAwkKrvHlf/Cs1F0PUATEzZPneyfghaQQ== + dependencies: + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/checkbox" "10.1.9" + "@dhis2-ui/chip" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2-ui/status-icon" "10.1.9" + "@dhis2-ui/tooltip" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/selector-bar@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-9.4.4.tgz#79513f90bdc1f4a2c6270cb8f2083dd14d4b11d9" - integrity sha512-9Z9dyrFU6XAEu0KLIa4TDQR/E8KJvjqMeaxWWpSrjnyM2Lmlfn9gH+qZ27TJSUMKqY/mdFJpSSr45aIQGgg2Rw== - dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" - "@testing-library/react" "^12.1.2" +"@dhis2-ui/selector-bar@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-10.1.9.tgz#93ecc5d852130b5c2ad33a97ec50c03ed9d09eff" + integrity sha512-ik0BsTYEO+0CFtO+NMlB12vgs9Qmd6OWslegpSvpnOCkC+RdPMI4GNNc6wLtOzrkMpHaRyeCfwQiMoGwcp6llw== + dependencies: + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/sharing-dialog@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-9.4.4.tgz#dcb9aa7436cd037e59f02231eeece7fbf6d82414" - integrity sha512-pYhMR+HXu4gvpFTfwWIe1XtW7+m4DxVzWPHGmHKi7ZbVh42csi466mlpJ29qid8KBo/KmsNASt+R6Vp0I3Dq5w== - dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/divider" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/menu" "9.4.4" - "@dhis2-ui/modal" "9.4.4" - "@dhis2-ui/notice-box" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2-ui/select" "9.4.4" - "@dhis2-ui/tab" "9.4.4" - "@dhis2-ui/tooltip" "9.4.4" - "@dhis2-ui/user-avatar" "9.4.4" +"@dhis2-ui/sharing-dialog@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-10.1.9.tgz#0e9006d87e7f0dd2c5dde18e8a0525330f25bf4f" + integrity sha512-266sK8kWrG5Y1k0+7z/CIRbQ06dLAEwf4PsEKWi4YxEl4uuQ3jc10o5Lqk4TrkZoYmbn+JdAIi6Ik3yFSMU0MA== + dependencies: + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/divider" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/menu" "10.1.9" + "@dhis2-ui/modal" "10.1.9" + "@dhis2-ui/notice-box" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2-ui/select" "10.1.9" + "@dhis2-ui/tab" "10.1.9" + "@dhis2-ui/tooltip" "10.1.9" + "@dhis2-ui/user-avatar" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" "@react-hook/size" "^2.1.2" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/status-icon@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-9.4.4.tgz#ab44a615aee73a6f4edae6c2eeee017e9970b6c9" - integrity sha512-Hh/UueN9wrbpfrxegT7/712YlhZPlQ+fYDvPOty1GbAALDdPiMUg0F0YqonNXCeZUAuzX+mzxcxOoHk446GVaA== +"@dhis2-ui/status-icon@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-10.1.9.tgz#e3bca583f7530a84d51c03c41db56651823fe164" + integrity sha512-nFnQUaNyefA4DPfi5I4Mz0cGl6i6bng2CITbg0bzZCDOhUWEtHTtA/eWmhNCh7KJRgWlMDaqBBrilNZ7h+wKFQ== dependencies: - "@dhis2-ui/loader" "9.4.4" + "@dhis2-ui/loader" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/switch@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-9.4.4.tgz#181df81c21f369752bacabd62088b9531248ae13" - integrity sha512-MH3h3+EPtR9ZSq+fsFQSJkCxuKyzLZolcGCBPX2u+8sVmV+7AZ2P6yJ6YiAUGI9udMwZokLjPZSgp3QWwKEQQg== +"@dhis2-ui/switch@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-10.1.9.tgz#02064376e5a326316e1035d67ca92b1b3f48530f" + integrity sha512-sKp3j3/9A+vKm3pUoYPvljFlqwJTFJqkwjd6kF490Fxi3HagC+OOsNjJZ2byecJWse5s3ygffQybMeGzprP5ug== dependencies: - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/required" "9.4.4" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/required" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tab@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-9.4.4.tgz#66ef74adf7e01c8a2f68327e0616795da1b7b064" - integrity sha512-2DqkH+IhiV4uFdvMg9aVJoao2D+U3s4kP+EsUlPPvRxvf2c7P6vjcitvACVgmDBnc2EWGw0jh02QhvOgQezhLA== +"@dhis2-ui/tab@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-10.1.9.tgz#c90c707ef07c799f55369f1c6b50e2b9288ed4a6" + integrity sha512-3250TNiqZDZ1cXRAbPrk1/NmKBwM4exSYsqGG7MpYpkHl8rtU2GZTLcqkTxYTT7XJw5c5dW224iGYF5zESXfxQ== dependencies: + "@dhis2-ui/tooltip" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/table@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-9.4.4.tgz#b93c9ea878914df7dd3147f067c00ea946602fc4" - integrity sha512-i3f8go7JE/+7OyjWXN/ePlRduOC4Pc+9w4P+Sq3VOTFgYnMEPyVpZmz9/dgNtAGTto1Lh54ISU/wxwC+TXfRxw== +"@dhis2-ui/table@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-10.1.9.tgz#cfead0c7cba6aff11c530739cc86a4195e27dcc4" + integrity sha512-6woSOSDtsLJbuzq22EMNyiNgT7pJnSC0pXgAHiSVQDYuUKDjkX6EsbEw0tjfw3KU7SqHqnHE8WYyRxU4qsUglg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tag@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-9.4.4.tgz#493a2369f384cb12f1104b18e34b54d516bce740" - integrity sha512-YMKndGKVXdQo5plKYy5RsN8AD233BbGZ9uzd/zmf7u2xs9C/DcK0JL+5UCZwVX++4swXTXbuSblE3Kl26a4U9Q== +"@dhis2-ui/tag@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-10.1.9.tgz#293f1763d4769d84ff9ac87e04f0f4215d01778a" + integrity sha512-6LBh0Pt6EqjJPxVM4cR3x+bBTgGgl3ygGMnsXu6FUxlgWVt7H14bixX5MQ6f9ncULt+cKwTbGcAwf46+iRVH7w== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/text-area@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-9.4.4.tgz#f5d6ee3fab9c2f71b129ea6ce4b3f7d7b36e3bf5" - integrity sha512-vphcZ42dqr2kXpAbJZPyJpr911B/3dAHM/PmUIIF07CzNs3daiEiIELm38KQ1cs0Na5oqXgrdw3HZyhAo02vsw== +"@dhis2-ui/text-area@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-10.1.9.tgz#114d8ebcdaae4c65ba65899201997a78ec5bd640" + integrity sha512-kiFR9J8cejLPkacvwWjragsMgYu1XeV8amm35MGkLL/775BJxvik4tuTbL1dAFfBQs7Pi6XX7SmpHHfmp7tbJw== dependencies: - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/status-icon" "9.4.4" + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/status-icon" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-icons" "9.4.4" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-icons" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/tooltip@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-9.4.4.tgz#268c4d0a395669522d45dd0a5720c18589887929" - integrity sha512-qCHsGMuzL9YV3OnWw0j+tK0p5e+tzUd5g7CXbHPsrhtsctgKO5u/VWYnFaJlFh2cbctqvFPpS+buLMe1jndpjw== +"@dhis2-ui/tooltip@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-10.1.9.tgz#8d6366d4eca6fef89cd4818f396bb9edb17e950b" + integrity sha512-0N3WQQR74mtfoe8CKzLU4Wt+JzpYuS3u774+aixlw4COqRGGQx3Vj3MiNPMEoZxuewrRJSDJjEplGVndZ2NXIw== dependencies: - "@dhis2-ui/popper" "9.4.4" - "@dhis2-ui/portal" "9.4.4" + "@dhis2-ui/popper" "10.1.9" + "@dhis2-ui/portal" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/transfer@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-9.4.4.tgz#d3f45a4a41eb35363c3f6ac57f8d499dd0ac198b" - integrity sha512-JMw2VWbybqOx5+4Sh1C9cPeiWN8xS6+ZNUivEwxOpKv/TBpeRBowOV7q0QEfzE1fGC9qyJqVxevBQhcp+2aUaA== +"@dhis2-ui/transfer@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-10.1.9.tgz#67ee3445c83df2f6ac239838e8bfc33783b16320" + integrity sha512-cZOsSIeHDH0q1YXCbFYHiv2RXaO1T48qhx/M2YmKhI6Gvu3dTefVPfz4crKf3/LMG6kQkb0PJVgRehfEgrRPvw== dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/intersection-detector" "9.4.4" - "@dhis2-ui/loader" "9.4.4" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/intersection-detector" "10.1.9" + "@dhis2-ui/loader" "10.1.9" "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2-ui/user-avatar@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-9.4.4.tgz#cb97b581e288c9d6a99d5f98a66fa3c63a6b27be" - integrity sha512-GILxEnNh0KwTKEMf5RCIvwV/BOv9GUKstuyLt9o5lX7YhT8QfMC0Uwn+IMOHtV6RoaewLbn0zyZF30NlZGohwg== +"@dhis2-ui/user-avatar@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-10.1.9.tgz#ea3c03d8c4fe71a0935e897f5fc8b3f30f5cc258" + integrity sha512-76tsA34Lunc/jbvLfzk864EirwtKgfbryhVJrZ0Up2jAMK4sFEpBYrq+CEPmw/6JL3rprfWSPdmHQzLUjzhVgg== dependencies: "@dhis2/prop-types" "^3.1.2" - "@dhis2/ui-constants" "9.4.4" + "@dhis2/ui-constants" "10.1.9" classnames "^2.3.1" prop-types "^15.7.2" @@ -2025,45 +1999,45 @@ "@dhis2/pwa" "11.7.4" moment "^2.24.0" -"@dhis2/app-runtime@^3.10.6", "@dhis2/app-runtime@^3.9.0": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.11.2.tgz#410ecb2f84a74f41eaaf89ace0f1ee44b8b0818d" - integrity sha512-JXxJKw3tkSyYLXsjZcRLjqZF/VPbCFrr60VHvs4nfMWpjTEsqEVyXoPR/G+HaJvAih2OAVr2INdUFwpUehYDCA== +"@dhis2/app-runtime@^3.10.6", "@dhis2/app-runtime@^3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-3.11.3.tgz#90fe7459e5314f234967b0b08a490498dfe19df0" + integrity sha512-QcRFqIP1NbBY9Uqq7GzjPPVIHaqo0SJMUWEjvRAZAoIC3eNR6QrGG95vv874kIgy+nk5p1jvU9zsRkNSQjOghQ== dependencies: - "@dhis2/app-service-alerts" "3.11.2" - "@dhis2/app-service-config" "3.11.2" - "@dhis2/app-service-data" "3.11.2" - "@dhis2/app-service-offline" "3.11.2" - "@dhis2/app-service-plugin" "3.11.2" + "@dhis2/app-service-alerts" "3.11.3" + "@dhis2/app-service-config" "3.11.3" + "@dhis2/app-service-data" "3.11.3" + "@dhis2/app-service-offline" "3.11.3" + "@dhis2/app-service-plugin" "3.11.3" -"@dhis2/app-service-alerts@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.11.2.tgz#c5a013b524facfc79a0be6e83870a4c593c686cb" - integrity sha512-MLkDhrka66cO7lAOE4RaN/m+4l4NwagUxw4j3qhh4YXEihIJmH+kticEHCvuqYT3ySYPjkC74jrjl7CID08Yiw== +"@dhis2/app-service-alerts@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-3.11.3.tgz#01d2b4c56bc9b32bc8439d074d594704018c0763" + integrity sha512-6RwaG5Ham9Q0irwxs9LVyru9tK8REOThtOQZIc/UY1vebMUxVoycCSPpsOsU4mAx7g75mAQnR6tHgPzQ2iIsJg== -"@dhis2/app-service-config@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.11.2.tgz#c8bcd95b4f97668d96dc8b8e2b225eac9cf91b5d" - integrity sha512-ik184s/zlUJ1y92EK2IfkYduauDnUj2mX97SKLIfrTAEAJXzGirdpgjCTuB4pEEO+fjHV7hjXRZbNlWKCT4bbQ== +"@dhis2/app-service-config@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-3.11.3.tgz#782a832b51af550a507de84f8ca52f134c2f2893" + integrity sha512-Brm6XKA3+XclnOaRCO72qHh7EuCoU5xGPR6VpekdstbOLcJqmwWQMjUGyR43HlG09Zm8qyK5A7XtKQC9nupHOg== -"@dhis2/app-service-data@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.11.2.tgz#207970c8aebcf772b37cd430b3280687a0a78252" - integrity sha512-psS5NntXtZ/RDRvUvYTTHMyPeG/9/Qi0t1NrZByVq6WgDjy3gxsceQVct1tRh+62h0ukIPzh4eBa0a/2tyC8+w== +"@dhis2/app-service-data@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-3.11.3.tgz#03d7e8a0b8feaece5b42578acb7ded2ce1510762" + integrity sha512-2qIV7JyX8tiYrwyYt/LEKFjTlGb+b3qPvP3cukKC8oOH0e1458bHrXkdhsqf1eVXNBg0L+K1JaLkZw4sOKrOEg== dependencies: react-query "^3.13.11" -"@dhis2/app-service-offline@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.11.2.tgz#97cbb520935226d8e394d77d64d97a65085e2f4a" - integrity sha512-ZFgdEey/bz3SGCn1TEDbQJZHwPNwLsfMGfSHjDUz+xdmo3qITV2e6scLD0NhPNWPwBSQtwSdwej5WlHmDzn6TQ== +"@dhis2/app-service-offline@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-offline/-/app-service-offline-3.11.3.tgz#ae19c79ef781e9eb1cd55639c1aba02d0700cd5d" + integrity sha512-4NWPU99VvXwMDUUOO0fN9/5UeRvr1lrl7At0kAoxH6UI9RpxRynwTskh7iKOFhgyHhUTwBrpZqUk2R3GJkDtZw== dependencies: lodash "^4.17.21" -"@dhis2/app-service-plugin@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.11.2.tgz#c966c0576be6da88fa41d02cd0767cb9f1a7df80" - integrity sha512-8zAEhDaqq7OQvxbpJF7rkkQt6/0iCF1EqWkA9q3ssngTp7kMZ55EGye4g1VoupcSV30atUost+9LDsBouxqW7w== +"@dhis2/app-service-plugin@3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-plugin/-/app-service-plugin-3.11.3.tgz#3cb6264848d474ec644546399dcf05c59f46378f" + integrity sha512-NhpZjcUSzw8TVu+KIAM9OekBFWqvnFZabwFmfkz0PdkBJSZKjmS33Xd9HKqwl/1RCcbJQEtvPXvARkelNSiE/w== dependencies: post-robot "^10.0.46" @@ -2198,7 +2172,16 @@ i18next "^10.3" moment "^2.24.0" -"@dhis2/multi-calendar-dates@^1.1.1", "@dhis2/multi-calendar-dates@^1.2.2": +"@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" + classnames "^2.3.2" + +"@dhis2/multi-calendar-dates@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@dhis2/multi-calendar-dates/-/multi-calendar-dates-1.2.2.tgz#c34e5172474ddc73ad829515ed4c489fb8023669" integrity sha512-Bl4y2+oDMJLZwtQ1Djfd+wJxOkGixBl6SCuLNH08B3RJSTwF/HcwgtY0vv7tcKUs63SwS7fK6ittXphyB4HJjQ== @@ -2223,91 +2206,91 @@ workbox-routing "^6.1.5" workbox-strategies "^6.1.5" -"@dhis2/ui-constants@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-9.4.4.tgz#4fe728f96fe92752b4a033b03f2fdb1313eafeb3" - integrity sha512-O+jHTT/S3jgcHP7gxcZenpMyOfBktvoB9MVGzoVaAW5rRbYe0cCSe1Zh70h25VMVhwxBTCTIR7G3uvDWcdb5Ww== +"@dhis2/ui-constants@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-10.1.9.tgz#6e424cf1336317fbaf9c3cc987577633c4de4caf" + integrity sha512-c3Z8FXur3M9XEk8UzKvoR0FdyukDBuY5rIHjwTJNped+oM4Ittp9lR9IZd9JHi/zkdlJitxezj6sNyAd0F1GyA== dependencies: prop-types "^15.7.2" -"@dhis2/ui-forms@9.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-9.4.4.tgz#9104665d2a57429df89caac720c59ad509328515" - integrity sha512-4QU4NXlExBqHWfoWnKIpDHB3wahDnJYO1CdZ64UcVurjdGKQdiAbX/WbrFYSpWuk8gO/DqQ8AC7JkTtpXXF9Lg== - dependencies: - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/checkbox" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/file-input" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/radio" "9.4.4" - "@dhis2-ui/select" "9.4.4" - "@dhis2-ui/switch" "9.4.4" - "@dhis2-ui/text-area" "9.4.4" +"@dhis2/ui-forms@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-10.1.9.tgz#90b39bf47b78689f51f7ff5748e269bad67ac4b5" + integrity sha512-ZoLdNAGg8yb9dRvkZnluKXvUdWfBLOppfL5aeTAmu1puuXv1/WL7BS4Jie8ZQttuLDFQ1MQ6rUzMEKkDWauILA== + dependencies: + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/checkbox" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/file-input" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/radio" "10.1.9" + "@dhis2-ui/select" "10.1.9" + "@dhis2-ui/switch" "10.1.9" + "@dhis2-ui/text-area" "10.1.9" "@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.4.4": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-9.4.4.tgz#c4f488496389687ebd47266e93e0aacf27054ef3" - integrity sha512-AGt+aYqpqb7f/2IH5quZ1bJoSz/WB3p7I1CdZHUPk/XP6rQpO2W7mqoLxiZYOHCiNlTU+sjfXcYauHaWZSTdjw== - -"@dhis2/ui@^9.2.0", "@dhis2/ui@^9.4.4", "@dhis2/ui@^9.8.9": - version "9.4.4" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-9.4.4.tgz#ae7961d42753d72e209f7d11b160b3179e6a6452" - integrity sha512-w1NMZy/S5tNbXGt7F5J5OM1P8qgq1Bo1ifV34YV3Cs+8rJYkHHsFOokUN+wSTdXUWqIKxOGrRoQkmgmjQ19WlA== - dependencies: - "@dhis2-ui/alert" "9.4.4" - "@dhis2-ui/box" "9.4.4" - "@dhis2-ui/button" "9.4.4" - "@dhis2-ui/calendar" "9.4.4" - "@dhis2-ui/card" "9.4.4" - "@dhis2-ui/center" "9.4.4" - "@dhis2-ui/checkbox" "9.4.4" - "@dhis2-ui/chip" "9.4.4" - "@dhis2-ui/cover" "9.4.4" - "@dhis2-ui/css" "9.4.4" - "@dhis2-ui/divider" "9.4.4" - "@dhis2-ui/field" "9.4.4" - "@dhis2-ui/file-input" "9.4.4" - "@dhis2-ui/header-bar" "9.4.4" - "@dhis2-ui/help" "9.4.4" - "@dhis2-ui/input" "9.4.4" - "@dhis2-ui/intersection-detector" "9.4.4" - "@dhis2-ui/label" "9.4.4" - "@dhis2-ui/layer" "9.4.4" - "@dhis2-ui/legend" "9.4.4" - "@dhis2-ui/loader" "9.4.4" - "@dhis2-ui/logo" "9.4.4" - "@dhis2-ui/menu" "9.4.4" - "@dhis2-ui/modal" "9.4.4" - "@dhis2-ui/node" "9.4.4" - "@dhis2-ui/notice-box" "9.4.4" - "@dhis2-ui/organisation-unit-tree" "9.4.4" - "@dhis2-ui/pagination" "9.4.4" - "@dhis2-ui/popover" "9.4.4" - "@dhis2-ui/popper" "9.4.4" - "@dhis2-ui/portal" "9.4.4" - "@dhis2-ui/radio" "9.4.4" - "@dhis2-ui/required" "9.4.4" - "@dhis2-ui/segmented-control" "9.4.4" - "@dhis2-ui/select" "9.4.4" - "@dhis2-ui/selector-bar" "9.4.4" - "@dhis2-ui/sharing-dialog" "9.4.4" - "@dhis2-ui/switch" "9.4.4" - "@dhis2-ui/tab" "9.4.4" - "@dhis2-ui/table" "9.4.4" - "@dhis2-ui/tag" "9.4.4" - "@dhis2-ui/text-area" "9.4.4" - "@dhis2-ui/tooltip" "9.4.4" - "@dhis2-ui/transfer" "9.4.4" - "@dhis2-ui/user-avatar" "9.4.4" - "@dhis2/ui-constants" "9.4.4" - "@dhis2/ui-forms" "9.4.4" - "@dhis2/ui-icons" "9.4.4" +"@dhis2/ui-icons@10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-10.1.9.tgz#ae488592b1700f2e9687151366bc130f659eebb0" + integrity sha512-Cp5qzQeOsbKAHv10D7Qak2QTyobIz6b9XyVFYYkU2f5se4C+0vOnoVy1g+e0kvRcxUhjFml/tltsbwGqrEMZHQ== + +"@dhis2/ui@^10.1.9", "@dhis2/ui@^9.8.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-10.1.9.tgz#08c31283c058970443d1b408d48e518e7831c059" + integrity sha512-9Z3+7fAppisS36Hv+waWjSXtK+JsQkVabzJAKdZYJnWn2aO3GHUKAnxsJ8PuiDnd/quvd9pbRksyE0BrtPASSA== + dependencies: + "@dhis2-ui/alert" "10.1.9" + "@dhis2-ui/box" "10.1.9" + "@dhis2-ui/button" "10.1.9" + "@dhis2-ui/calendar" "10.1.9" + "@dhis2-ui/card" "10.1.9" + "@dhis2-ui/center" "10.1.9" + "@dhis2-ui/checkbox" "10.1.9" + "@dhis2-ui/chip" "10.1.9" + "@dhis2-ui/cover" "10.1.9" + "@dhis2-ui/css" "10.1.9" + "@dhis2-ui/divider" "10.1.9" + "@dhis2-ui/field" "10.1.9" + "@dhis2-ui/file-input" "10.1.9" + "@dhis2-ui/header-bar" "10.1.9" + "@dhis2-ui/help" "10.1.9" + "@dhis2-ui/input" "10.1.9" + "@dhis2-ui/intersection-detector" "10.1.9" + "@dhis2-ui/label" "10.1.9" + "@dhis2-ui/layer" "10.1.9" + "@dhis2-ui/legend" "10.1.9" + "@dhis2-ui/loader" "10.1.9" + "@dhis2-ui/logo" "10.1.9" + "@dhis2-ui/menu" "10.1.9" + "@dhis2-ui/modal" "10.1.9" + "@dhis2-ui/node" "10.1.9" + "@dhis2-ui/notice-box" "10.1.9" + "@dhis2-ui/organisation-unit-tree" "10.1.9" + "@dhis2-ui/pagination" "10.1.9" + "@dhis2-ui/popover" "10.1.9" + "@dhis2-ui/popper" "10.1.9" + "@dhis2-ui/portal" "10.1.9" + "@dhis2-ui/radio" "10.1.9" + "@dhis2-ui/required" "10.1.9" + "@dhis2-ui/segmented-control" "10.1.9" + "@dhis2-ui/select" "10.1.9" + "@dhis2-ui/selector-bar" "10.1.9" + "@dhis2-ui/sharing-dialog" "10.1.9" + "@dhis2-ui/switch" "10.1.9" + "@dhis2-ui/tab" "10.1.9" + "@dhis2-ui/table" "10.1.9" + "@dhis2-ui/tag" "10.1.9" + "@dhis2-ui/text-area" "10.1.9" + "@dhis2-ui/tooltip" "10.1.9" + "@dhis2-ui/transfer" "10.1.9" + "@dhis2-ui/user-avatar" "10.1.9" + "@dhis2/ui-constants" "10.1.9" + "@dhis2/ui-forms" "10.1.9" + "@dhis2/ui-icons" "10.1.9" prop-types "^15.7.2" "@dnd-kit/accessibility@^3.0.0": @@ -2880,7 +2863,7 @@ 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.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -3404,7 +3387,7 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^12.1.2", "@testing-library/react@^12.1.5": +"@testing-library/react@^12.1.5": 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== @@ -5199,7 +5182,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001503, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: version "1.0.30001678" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001678.tgz#b930b04cd0b295136405634aa32ad540d7eeb71e" integrity sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw== @@ -5221,7 +5204,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6576,7 +6559,7 @@ ejs@^3.0.1, ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.431, electron-to-chromium@^1.5.41: +electron-to-chromium@^1.5.41: version "1.5.52" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz#2bed832c95a56a195504f918150e548474687da8" integrity sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ== @@ -10069,11 +10052,6 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - jsesc@^3.0.2, jsesc@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" @@ -10975,11 +10953,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -11115,7 +11088,7 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-releases@^2.0.12, node-releases@^2.0.18: +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== @@ -15064,7 +15037,7 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.11, update-browserslist-db@^1.1.1: +update-browserslist-db@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== From ede2fd5e0c4f12550dfd5b1ea7cfefa4b30c43df Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Thu, 9 Jan 2025 09:47:48 +0000 Subject: [PATCH 2/2] chore(release): cut 26.10.0 [skip ci] # [26.10.0](https://github.com/dhis2/analytics/compare/v26.9.6...v26.10.0) (2025-01-09) ### Features * display type and definitions in data item selector (DHIS2-14774) ([#1713](https://github.com/dhis2/analytics/issues/1713)) ([27f4b65](https://github.com/dhis2/analytics/commit/27f4b6533688586313fd7a8918c532205acc2c48)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bad1ed4f..8cc8da8c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [26.10.0](https://github.com/dhis2/analytics/compare/v26.9.6...v26.10.0) (2025-01-09) + + +### Features + +* display type and definitions in data item selector (DHIS2-14774) ([#1713](https://github.com/dhis2/analytics/issues/1713)) ([27f4b65](https://github.com/dhis2/analytics/commit/27f4b6533688586313fd7a8918c532205acc2c48)) + ## [26.9.6](https://github.com/dhis2/analytics/compare/v26.9.5...v26.9.6) (2024-12-22) diff --git a/package.json b/package.json index 3af3cb869..a6c4def9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/analytics", - "version": "26.9.6", + "version": "26.10.0", "main": "./build/cjs/index.js", "module": "./build/es/index.js", "exports": {