From 06ba231ce6136b013038f63d94c0f70d2d79370f Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:24:52 -0500 Subject: [PATCH 01/34] updated terra-application-base --- .../src/application-base/ApplicationBase.jsx | 69 +++++++--------- .../src/application-base/Base.scss | 39 +++++++++ .../src/application-base/baseStyles.js | 11 +++ .../clinical-lowlight-theme/Base.scss | 18 +++++ .../orion-fusion-theme/Base.scss | 18 +++++ .../private/getBrowserLocale.js | 1 - .../application-base/private/i18nLoader.js | 52 ++++++++++++ .../application-base/private/intlLoaders.js | 78 ++++++++++++++++++ .../private/loadLocaleData.js | 80 +++++++++++++++++++ .../private/translationsLoaders.js | 61 ++++++++++++++ 10 files changed, 384 insertions(+), 43 deletions(-) create mode 100644 packages/terra-application/src/application-base/Base.scss create mode 100644 packages/terra-application/src/application-base/baseStyles.js create mode 100644 packages/terra-application/src/application-base/clinical-lowlight-theme/Base.scss create mode 100644 packages/terra-application/src/application-base/orion-fusion-theme/Base.scss create mode 100644 packages/terra-application/src/application-base/private/i18nLoader.js create mode 100644 packages/terra-application/src/application-base/private/intlLoaders.js create mode 100644 packages/terra-application/src/application-base/private/loadLocaleData.js create mode 100644 packages/terra-application/src/application-base/private/translationsLoaders.js diff --git a/packages/terra-application/src/application-base/ApplicationBase.jsx b/packages/terra-application/src/application-base/ApplicationBase.jsx index eaf1430d0..e61a56397 100644 --- a/packages/terra-application/src/application-base/ApplicationBase.jsx +++ b/packages/terra-application/src/application-base/ApplicationBase.jsx @@ -1,15 +1,15 @@ /* global TERRA_THEME_CONFIG */ import React, { - useRef, useEffect, Suspense, useMemo, + useRef, useEffect, Suspense, useMemo, useState, } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -// eslint-disable-next-line import/no-extraneous-dependencies -import Base from 'terra-base'; import ThemeProvider from 'terra-theme-provider'; import { ActiveBreakpointProvider } from 'terra-breakpoints'; import ThemeContextProvider from 'terra-theme-context/lib/ThemeContextProvider'; +import { IntlProvider } from 'react-intl'; +import i18nLoader from './private/i18nLoader'; import ApplicationErrorBoundary from '../application-error-boundary'; import { ApplicationIntlProvider } from '../application-intl'; @@ -18,8 +18,10 @@ import { ApplicationStatusOverlayProvider } from '../application-status-overlay' import { NavigationPromptCheckpoint } from '../navigation-prompt'; import getBrowserLocale from './private/getBrowserLocale'; import useTestOverrides from './private/useTestOverrides'; +import Logger from '../utils/logger'; import './private/initializeInert'; +import './baseStyles'; import styles from './ApplicationBase.module.scss'; @@ -41,34 +43,10 @@ const propTypes = { * If the `locale` prop is not provided, the preferred language from the browser will be used. */ locale: PropTypes.string, - /** - * Custom translations for the current locale. - */ - customTranslatedMessages: (props, propName, componentName) => { - if (!props[propName]) { - return null; - } - - if (Object.keys(props[propName]).length !== 0 && props.locale === undefined) { - return new Error(`Missing locale prop for ${propName} in ${componentName} props`); - } - - return null; - }, - /** - * The component to render while the translation files are being retrieved. - * NOTE: Absolutely no locale-dependent logic should be - * utilized in this placeholder. - */ - translationsLoadingPlaceholder: PropTypes.node, /** * The name of the theme to apply to the application using terra-theme-provider. */ themeName: PropTypes.string, - /** - * The density of the theme to apply to the application using terra-theme-provider. - */ - themeDensity: PropTypes.string, /** * By default, the elements rendered by ApplicationBase are fit to the Application's parent using 100% height. * If `fitToParentIsDisabled` is provided, the Application will render at its intrinsic content height and @@ -86,13 +64,13 @@ const propTypes = { * When set to true scroll will be disabled. internal prop to be used by Mpages for terra-tabs in Powerchart. */ noScroll: PropTypes.bool, - }; const ApplicationBase = ({ - locale, customTranslatedMessages, translationsLoadingPlaceholder, themeName, themeDensity, fitToParentIsDisabled, children, unloadPromptIsDisabled, noScroll, + locale, themeName, fitToParentIsDisabled, children, unloadPromptIsDisabled, noScroll, }) => { const registeredPromptsRef = useRef(); + const [messages, setMessages] = useState(); useEffect(() => { if (unloadPromptIsDisabled) { @@ -122,27 +100,34 @@ const ApplicationBase = ({ const { localeOverride, themeOverride } = useTestOverrides(); // Allows us to test deployed applications in different locales. - let density = themeDensity || themeConfig?.density; - if (themeName === 'redwood-theme' && !density) { - density = 'comfortable'; - } + const finalLocale = localeOverride || locale || browserLocale; + + useEffect(() => { + if (finalLocale !== undefined) { + i18nLoader(finalLocale).then(translationsModule => setMessages(translationsModule.default)).catch((error) => { + // eslint-disable-next-line no-console + Logger.error(error); + throw error; + }); + } + }, [finalLocale]); const theme = useMemo(() => ({ // If the theme class name is undefined or an empty string, that indicates we have the root theme and should apply the root theme name. name: themeOverride || themeName || rootThemeName, className: themeOverride || themeName, - density, - }), [themeOverride, themeName, density]); + }), [themeOverride, themeName]); + + if (messages === undefined) return null; return (
- + - @@ -163,7 +148,7 @@ const ApplicationBase = ({ - +
diff --git a/packages/terra-application/src/application-base/Base.scss b/packages/terra-application/src/application-base/Base.scss new file mode 100644 index 000000000..115c09f19 --- /dev/null +++ b/packages/terra-application/src/application-base/Base.scss @@ -0,0 +1,39 @@ +// Themes +@import './clinical-lowlight-theme/Base'; +@import './orion-fusion-theme/Base'; + +html { + background-attachment: var(--terra-application-base-background-attachment); + background-color: var(--terra-application-base-background-color, #fff); + background-image: var(--terra-application-base-background-image); + background-position: var(--terra-application-base-background-position); + background-repeat: var(--terra-application-base-background-repeat); + background-size: var(--terra-application-base-background-size); + // Normalize box-sizing. + // More info: https://css-tricks.com/box-sizing/#article-header-id-6 + box-sizing: border-box; + font-family: var(--terra-application-base-font-family, 'Helvetica Neue', Helvetica, Arial, sans-serif); + font-size: var(--terra-application-base-font-size, 87.5%); + height: var(--terra-application-base-html-height, 100%); + margin: var(--terra-application-base-html-margin, 0); + text-size-adjust: 100%; +} + +body { + color: var(--terra-application-base-color, #1c1f21); + font-size: 1rem; + height: var(--terra-application-base-body-height, 100%); + line-height: var(--terra-application-base-line-height, 1.4285714285714286); + margin: var(--terra-application-base-body-margin, 0); + + @media print { + background-color: transparent !important; + color: #000 !important; + } +} + +*, +*::before, +*::after { + box-sizing: inherit; +} diff --git a/packages/terra-application/src/application-base/baseStyles.js b/packages/terra-application/src/application-base/baseStyles.js new file mode 100644 index 000000000..a85675852 --- /dev/null +++ b/packages/terra-application/src/application-base/baseStyles.js @@ -0,0 +1,11 @@ +import './Base.scss'; +import Logger from '../utils/logger'; + +// Checks to run when not in production +if (process.env.NODE_ENV !== 'production') { + // Check to ensure dir attribute is set on html element + if (!document.documentElement.hasAttribute('dir')) { + // eslint-disable-next-line + Logger.warn('The html element is missing the dir attribute. For terra directionality based styles to render correctly, add dir="ltr" or dir="rtl" to the html element.'); + } +} diff --git a/packages/terra-application/src/application-base/clinical-lowlight-theme/Base.scss b/packages/terra-application/src/application-base/clinical-lowlight-theme/Base.scss new file mode 100644 index 000000000..12f33a66f --- /dev/null +++ b/packages/terra-application/src/application-base/clinical-lowlight-theme/Base.scss @@ -0,0 +1,18 @@ +:global { + .clinical-lowlight-theme { + --terra-application-base-background-attachment: none; + --terra-application-base-background-color: #222a2e; + --terra-application-base-background-image: none; + --terra-application-base-background-position: none; + --terra-application-base-background-repeat: none; + --terra-application-base-background-size: none; + --terra-application-base-font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + --terra-application-base-font-size: 87.5%; // root: 16px, base: 12px + --terra-application-base-html-height: 100%; + --terra-application-base-html-margin: 0; + --terra-application-base-color: #b2b5b6; + --terra-application-base-body-height: 100%; + --terra-application-base-line-height: 1.4285694285714286; + --terra-application-base-body-margin: 0; + } +} diff --git a/packages/terra-application/src/application-base/orion-fusion-theme/Base.scss b/packages/terra-application/src/application-base/orion-fusion-theme/Base.scss new file mode 100644 index 000000000..f196d03f1 --- /dev/null +++ b/packages/terra-application/src/application-base/orion-fusion-theme/Base.scss @@ -0,0 +1,18 @@ +:global { + .orion-fusion-theme { + --terra-application-base-background-attachment: scroll; + --terra-application-base-background-color: rgba(255, 255, 255, 1); + --terra-application-base-background-image: none; + --terra-application-base-background-position: none; + --terra-application-base-background-repeat: none; + --terra-application-base-background-size: auto; + --terra-application-base-font-family: Tahoma, Geneva, Verdana, Trebuchet MS, sans-serif; + --terra-application-base-font-size: 75%; // root: 16px, base: 14px + --terra-application-base-html-height: 100%; + --terra-application-base-html-margin: 0; + --terra-application-base-color: #1c1f21; + --terra-application-base-body-height: 100%; + --terra-application-base-line-height: 1.4285694285714286; + --terra-application-base-body-margin: 0; + } +} diff --git a/packages/terra-application/src/application-base/private/getBrowserLocale.js b/packages/terra-application/src/application-base/private/getBrowserLocale.js index ddc0fc6c7..3ea880a7f 100644 --- a/packages/terra-application/src/application-base/private/getBrowserLocale.js +++ b/packages/terra-application/src/application-base/private/getBrowserLocale.js @@ -49,7 +49,6 @@ const getBrowserLocale = () => { if (preferredLocale) { return preferredLocale; } - /* for IE support, as languages and language in IE return undefined, and userLanguage and browserLanguage return "en-US" */ if (isSupported(navigator.systemLanguage)) { return navigator.systemLanguage; diff --git a/packages/terra-application/src/application-base/private/i18nLoader.js b/packages/terra-application/src/application-base/private/i18nLoader.js new file mode 100644 index 000000000..85a26947e --- /dev/null +++ b/packages/terra-application/src/application-base/private/i18nLoader.js @@ -0,0 +1,52 @@ +/* eslint-disable global-require, import/no-named-as-default */ +import { shouldPolyfill } from '@formatjs/intl-relativetimeformat/should-polyfill'; +import loadIntl from './intlLoaders'; +import loadTranslations from './translationsLoaders'; + +const i18nLoader = (locale) => { + /** + * Use try-catch to check if Intl is provided by the browser. In some instances checking Intl will throw an + * error and crash the page with little information. + * + * Reference: https://github.com/cerner/terra-core/issues/2820 + */ + let hasIntl; + try { + hasIntl = typeof (Intl) === 'object' && typeof (Intl.DateTimeFormat) === 'function' && typeof (Intl.NumberFormat) === 'function' && typeof (Intl.PluralRules) === 'function'; + } catch (error) { + hasIntl = false; + } + + if (!hasIntl) { + require('intl'); + } + + if (shouldPolyfill()) { + require('@formatjs/intl-relativetimeformat/polyfill'); + } + + if (global.IntlPolyfill) { + /** + * Intl polyfill attempts to cache and restore static RegExp properties before executing any regular expressions in order + * to comply with ECMA-402. There are times this results in regex syntax error so we are disabling this feature. + * + * Reference: https://github.com/andyearnshaw/Intl.js#regexp-cache--restore + */ + /* eslint-disable no-underscore-dangle */ + if (Intl.__disableRegExpRestore && typeof Intl.__disableRegExpRestore === 'function') { + Intl.__disableRegExpRestore(); + } + /* eslint-enable no-underscore-dangle */ + + loadIntl(locale, 'intl'); + } + + if (global.Intl && Intl.RelativeTimeFormat && Intl.RelativeTimeFormat.polyfilled) { + loadIntl(locale, 'relativetimeformat'); + } + + return loadTranslations(locale); +}; + +export default i18nLoader; +/* eslint-enable global-require */ diff --git a/packages/terra-application/src/application-base/private/intlLoaders.js b/packages/terra-application/src/application-base/private/intlLoaders.js new file mode 100644 index 000000000..b8d45b436 --- /dev/null +++ b/packages/terra-application/src/application-base/private/intlLoaders.js @@ -0,0 +1,78 @@ +import hasIntlData from 'intl-locales-supported'; +import loadLocaleData from './loadLocaleData'; +import logger from '../../utils/logger'; + +const supportedIntlConstructors = (polyfill) => { + /** + * Use try-catch to check if Intl is provided by the browser. In some instances checking Intl will throw an + * error and crash the page with little information. + * + * Reference: https://github.com/cerner/terra-core/issues/2820 + */ + let constructors; + try { + if (polyfill === 'intl') { + if (typeof (Intl) === 'object' && typeof (Intl.DateTimeFormat) === 'function' && typeof (Intl.NumberFormat) === 'function' && typeof (Intl.PluralRules) === 'function') { + /** + * intl-locales-supported accesses the 'supportedLocalesOf' property of each of these constructors. + * When certain polyfills are used, the polyfill may not have the 'supportedLocalesOf' property. + * For example, when using the date-time-format-timezone Intl.DateTimeFormat becomes Intl.DateTimeFormatPolyfill which does not support this property. + * + * Reference: https://github.com/cerner/terra-core/issues/2914 + */ + if (Object.prototype.hasOwnProperty.call(Intl.DateTimeFormat, 'supportedLocalesOf') && Object.prototype.hasOwnProperty.call(Intl.NumberFormat, 'supportedLocalesOf') && Object.prototype.hasOwnProperty.call(Intl.PluralRules, 'supportedLocalesOf')) { + constructors = [ + Intl.DateTimeFormat, + Intl.NumberFormat, + Intl.PluralRules, + ]; + } else { + constructors = []; + } + } + } else if (typeof (Intl) === 'object' && typeof (Intl.RelativeTimeFormat) === 'function') { + if (Object.prototype.hasOwnProperty.call(Intl.RelativeTimeFormat, 'supportedLocalesOf')) { + constructors = [ + Intl.RelativeTimeFormat, + ]; + } else { + constructors = []; + } + } + } catch (error) { + constructors = []; + } + + return constructors; +}; + +const loadIntl = (locale, polyfill) => { + const fallbackLocale = locale.split('-').length > 1 ? locale.split('-')[0] : false; + + if (!hasIntlData([locale], supportedIntlConstructors(polyfill))) { + return loadLocaleData(locale, polyfill).catch((error) => { + if (fallbackLocale) { + logger.warn(`${error.message} Using ${fallbackLocale} data as the fallback locale data.`); + if (!hasIntlData([fallbackLocale], supportedIntlConstructors(polyfill))) { + return loadLocaleData(fallbackLocale, polyfill); + } + } else { + return Promise.reject(error); + } + + return Promise.resolve(); + }).catch((error) => { + logger.warn(`${error.message} Using en data as the fallback locale data.`); + + if (!hasIntlData(['en'], supportedIntlConstructors(polyfill))) { + return loadLocaleData('en', polyfill); + } + + return Promise.resolve(); + }); + } + + return Promise.resolve(); +}; + +export default loadIntl; diff --git a/packages/terra-application/src/application-base/private/loadLocaleData.js b/packages/terra-application/src/application-base/private/loadLocaleData.js new file mode 100644 index 000000000..2ce1a29ab --- /dev/null +++ b/packages/terra-application/src/application-base/private/loadLocaleData.js @@ -0,0 +1,80 @@ +/* eslint-disable import/extensions */ +const loadLocaleData = (locale, polyfill) => { + if (polyfill === 'intl') { + switch (locale) { + case 'en': + return import('intl/locale-data/jsonp/en.js'); + case 'en-AU': + return import('intl/locale-data/jsonp/en-AU.js'); + case 'en-CA': + return import('intl/locale-data/jsonp/en-CA.js'); + case 'en-US': + return import('intl/locale-data/jsonp/en-US.js'); + case 'en-GB': + return import('intl/locale-data/jsonp/en-GB.js'); + case 'es': + return import('intl/locale-data/jsonp/es.js'); + case 'es-US': + return import('intl/locale-data/jsonp/es-US.js'); + case 'es-ES': + return import('intl/locale-data/jsonp/es-ES.js'); + case 'de': + return import('intl/locale-data/jsonp/de.js'); + case 'fr': + return import('intl/locale-data/jsonp/fr.js'); + case 'fr-FR': + return import('intl/locale-data/jsonp/fr-FR.js'); + case 'nl': + return import('intl/locale-data/jsonp/nl.js'); + case 'nl-BE': + return import('intl/locale-data/jsonp/nl-BE.js'); + case 'pt': + return import('intl/locale-data/jsonp/pt.js'); + case 'pt-BR': + return import('intl/locale-data/jsonp/pt-BR.js'); + case 'sv': + return import('intl/locale-data/jsonp/sv.js'); + case 'sv-SE': + return import('intl/locale-data/jsonp/sv-SE.js'); + default: + return Promise.reject(Error(`Locale data for ${polyfill} was not supplied for the ${locale} locale.`)); + } + } else { + switch (locale) { + case 'en': + return import('@formatjs/intl-relativetimeformat/locale-data/en.js'); + case 'en-AU': + return import('@formatjs/intl-relativetimeformat/locale-data/en-AU.js'); + case 'en-CA': + return import('@formatjs/intl-relativetimeformat/locale-data/en-CA.js'); + case 'en-US': + return import('@formatjs/intl-relativetimeformat/locale-data/en-US.js'); + case 'en-GB': + return import('@formatjs/intl-relativetimeformat/locale-data/en-GB.js'); + case 'es': + case 'es-ES': + return import('@formatjs/intl-relativetimeformat/locale-data/es.js'); + case 'es-US': + return import('@formatjs/intl-relativetimeformat/locale-data/es-US.js'); + case 'de': + return import('@formatjs/intl-relativetimeformat/locale-data/de.js'); + case 'fr': + case 'fr-FR': + return import('@formatjs/intl-relativetimeformat/locale-data/fr.js'); + case 'nl': + return import('@formatjs/intl-relativetimeformat/locale-data/nl.js'); + case 'nl-BE': + return import('@formatjs/intl-relativetimeformat/locale-data/nl-BE.js'); + case 'pt': + case 'pt-BR': + return import('@formatjs/intl-relativetimeformat/locale-data/pt.js'); + case 'sv': + case 'sv-SE': + return import('@formatjs/intl-relativetimeformat/locale-data/sv.js'); + default: + return Promise.reject(Error(`Locale data for ${polyfill} was not supplied for the ${locale} locale.`)); + } + } +}; + +export default loadLocaleData; diff --git a/packages/terra-application/src/application-base/private/translationsLoaders.js b/packages/terra-application/src/application-base/private/translationsLoaders.js new file mode 100644 index 000000000..3445704e8 --- /dev/null +++ b/packages/terra-application/src/application-base/private/translationsLoaders.js @@ -0,0 +1,61 @@ +/* eslint-disable import/no-unresolved */ +import logger from '../../utils/logger'; + +const loadTranslationsFile = (locale) => { + switch (locale) { + case 'en': + return import(/* webpackChunkName: "en-translations" */ 'en.js'); + case 'en-AU': + return import(/* webpackChunkName: "en-AU-translations" */ 'en-AU.js'); + case 'en-CA': + return import(/* webpackChunkName: "en-CA-translations" */ 'en-CA.js'); + case 'en-US': + return import(/* webpackChunkName: "en-US-translations" */ 'en-US.js'); + case 'en-GB': + return import(/* webpackChunkName: "en-GB-translations" */ 'en-GB.js'); + case 'es': + return import(/* webpackChunkName: "es-translations" */ 'es.js'); + case 'es-ES': + return import(/* webpackChunkName: "es-ES-translations" */ 'es-ES.js'); + case 'de': + return import(/* webpackChunkName: "de-translations" */ 'de.js'); + case 'fr': + return import(/* webpackChunkName: "fr-translations" */ 'fr.js'); + case 'fr-FR': + return import(/* webpackChunkName: "fr-FR-translations" */ 'fr-FR.js'); + case 'nl': + return import(/* webpackChunkName: "nl-translations" */ 'nl.js'); + case 'nl-BE': + return import(/* webpackChunkName: "nl-BE-translations" */ 'nl-BE.js'); + case 'pt': + return import(/* webpackChunkName: "pt-translations" */ 'pt.js'); + case 'pt-BR': + return import(/* webpackChunkName: "pt-BR-translations" */ 'pt-BR.js'); + case 'sv': + return import(/* webpackChunkName: "sv-translations" */ 'sv.js'); + case 'sv-SE': + return import(/* webpackChunkName: "sv-SE-translations" */ 'sv-SE.js'); + default: + return Promise.reject(Error(`Translations were not supplied for the ${locale} locale.`)); + } +}; + +const loadTranslations = (locale) => { + const fallbackLocale = locale.split('-').length > 1 ? locale.split('-')[0] : false; + + return loadTranslationsFile(locale).catch((error) => { + logger.warn(`${error.message} Using ${fallbackLocale} data as the fallback locale.`); + + if (fallbackLocale) { + return loadTranslationsFile(fallbackLocale); + } + + return Promise.reject(error); + }).catch((error) => { + logger.warn(`${error.message} Using en as the fallback locale.`); + + return loadTranslationsFile('en'); + }); +}; + +export default loadTranslations; From 2f8e6ea3a0d7827300efe4d2587cd4a9e353f2c7 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:26:45 -0500 Subject: [PATCH 02/34] updated remaining terra-application source files --- .../ApplicationErrorBoundary.jsx | 7 ++- .../ApplicationIntlContext.jsx | 4 -- .../ApplicationIntlProvider.jsx | 44 +++++++++++++++++-- .../src/application-intl/index.js | 4 +- .../ApplicationNavigation.jsx | 4 +- .../private/ApplicationNavigation.jsx | 2 - .../private/common/_PopupMenu.jsx | 23 +--------- .../private/common/_PopupMenuUser.jsx | 29 +++++------- .../private/drawer-menu/_DrawerMenu.jsx | 18 +------- .../private/drawer-menu/_DrawerMenuUser.jsx | 32 +++++--------- .../private/utility-menu/_UtilityMenu.jsx | 10 +---- .../workspace-layout/WorkspaceLayout.jsx | 4 +- .../src/workspace/Workspace.jsx | 4 +- 13 files changed, 78 insertions(+), 107 deletions(-) diff --git a/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx b/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx index da9c7b0f7..f1b099427 100644 --- a/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx +++ b/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import StatusView from 'terra-status-view'; -import { injectIntl, intlShape } from 'react-intl'; +import { injectIntl } from 'react-intl'; import logger from '../utils/logger'; const propTypes = { @@ -15,7 +15,7 @@ const propTypes = { * @private * Intl object for translations. */ - intl: intlShape, + intl: PropTypes.shape({ formatMessage: PropTypes.func }), }; /** @@ -89,8 +89,7 @@ class ApplicationErrorBoundary extends React.Component { const activeError = this.state.error || this.errorRef.current; if (activeError) { - const errorDetails = activeError.message.toString(); - const errorText = intl.formatMessage({ id: 'terraApplication.errorBoundary.defaultErrorMessage' }, { errorDetails }); + const errorText = intl.formatMessage({ id: 'terraApplication.errorBoundary.defaultErrorMessage' }, { errorDetails: activeError.message.toString() }); return ( ( diff --git a/packages/terra-application/src/application-intl/index.js b/packages/terra-application/src/application-intl/index.js index a0a9905c4..d5d67410e 100644 --- a/packages/terra-application/src/application-intl/index.js +++ b/packages/terra-application/src/application-intl/index.js @@ -1,4 +1,4 @@ -import ApplicationIntlContext, { contextShape } from './ApplicationIntlContext'; +import ApplicationIntlContext from './ApplicationIntlContext'; import ApplicationIntlProvider from './ApplicationIntlProvider'; -export { ApplicationIntlContext, contextShape, ApplicationIntlProvider }; +export { ApplicationIntlContext, ApplicationIntlProvider }; diff --git a/packages/terra-application/src/application-navigation/ApplicationNavigation.jsx b/packages/terra-application/src/application-navigation/ApplicationNavigation.jsx index be9f8ddc2..d81a8a36a 100644 --- a/packages/terra-application/src/application-navigation/ApplicationNavigation.jsx +++ b/packages/terra-application/src/application-navigation/ApplicationNavigation.jsx @@ -3,6 +3,7 @@ import React, { } from 'react'; import PropTypes from 'prop-types'; import { v4 as uuidv4 } from 'uuid'; +import { useIntl } from 'react-intl'; import TerraApplicationNavigation from './private/ApplicationNavigation'; import { titleConfigPropType, navigationItemsPropType, extensionItemsPropType, utilityItemsPropType, userConfigPropType, userActionConfigPropType, @@ -12,7 +13,6 @@ import ApplicationErrorBoundary from '../application-error-boundary'; import ApplicationLoadingOverlay, { ApplicationLoadingOverlayProvider } from '../application-loading-overlay'; import { ApplicationStatusOverlayProvider } from '../application-status-overlay'; import { NavigationPromptCheckpoint, navigationPromptResolutionOptionsShape, getUnsavedChangesPromptOptions } from '../navigation-prompt'; -import { ApplicationIntlContext } from '../application-intl'; import ApplicationNavigationWorkspace from './private/workspace-layout/ApplicationNavigationWorkspace'; const propTypes = { @@ -156,7 +156,7 @@ const ApplicationNavigation = ({ workspace, userActionConfig, }) => { - const applicationIntl = React.useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const navigationPromptCheckpointRef = useRef(); const idRef = React.useRef(`navigation-${uuidv4()}`); diff --git a/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx b/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx index c18330b24..f3c5b2dfa 100644 --- a/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx +++ b/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx @@ -238,7 +238,6 @@ const ApplicationNavigation = ({ className={cx('drawer-menu-focus-trap-container')} > { const listRef = useRef(); const buttonRef = useRef(); @@ -228,7 +209,7 @@ const PopupMenu = ({ {customContent} ) : undefined} - {userConfig ? : null} + {userConfig ? : null}
    {menuItems.map(item => ( { +const PopupMenuUser = ({ userConfig, userActionConfig, id }) => { const theme = React.useContext(ThemeContext); return ( @@ -52,15 +43,15 @@ const PopupMenuUser = ({
    {userConfig.name}
    {userConfig.detail ?
    {userConfig.detail}
    : null} { userActionConfig && ( - + )} diff --git a/packages/terra-application/src/application-navigation/private/utility-menu/_UtilityMenu.jsx b/packages/terra-application/src/application-navigation/private/utility-menu/_UtilityMenu.jsx index f3cd0e0f5..00ec93a23 100644 --- a/packages/terra-application/src/application-navigation/private/utility-menu/_UtilityMenu.jsx +++ b/packages/terra-application/src/application-navigation/private/utility-menu/_UtilityMenu.jsx @@ -61,13 +61,6 @@ const propTypes = { * A configuration object to render an action button for user Config. */ userActionConfig: userActionConfigPropType, - /** - * @private - * Given a callback function, menuClosingCallback will return a new function - * that will ensure that the various menu states are reset before the callback function - * is executed. - */ - menuClosingCallback: PropTypes.func, }; const defaultProps = { @@ -78,7 +71,7 @@ const utilityMenuSettingsKey = 'terra-application-navigation.utility-menu.settin const utilityMenuHelpKey = 'terra-application-navigation.utility-menu.help'; const UtilityMenu = ({ - userConfig, hero, onSelectSettings, onSelectHelp, menuClosingCallback, onSelectLogout, utilityItems, id, onSelectUtilityItem, isHeightBounded, intl, userActionConfig, + userConfig, hero, onSelectSettings, onSelectHelp, onSelectLogout, utilityItems, id, onSelectUtilityItem, isHeightBounded, intl, userActionConfig, }) => { let menuItems = []; menuItems = utilityItems.map(item => ({ @@ -116,7 +109,6 @@ const UtilityMenu = ({ title={intl.formatMessage({ id: 'terraApplication.navigation.utilityMenu.headerTitle' })} footerText={intl.formatMessage({ id: 'terraApplication.navigation.utilityMenu.logout' })} onSelectFooterItem={onSelectLogout} - menuClosingCallback={menuClosingCallback} userConfig={userConfig} userActionConfig={userActionConfig} customContent={hero} diff --git a/packages/terra-application/src/application-navigation/private/workspace-layout/WorkspaceLayout.jsx b/packages/terra-application/src/application-navigation/private/workspace-layout/WorkspaceLayout.jsx index 478dfba08..c25417d43 100644 --- a/packages/terra-application/src/application-navigation/private/workspace-layout/WorkspaceLayout.jsx +++ b/packages/terra-application/src/application-navigation/private/workspace-layout/WorkspaceLayout.jsx @@ -6,9 +6,9 @@ import IconPanelRight from 'terra-icon/lib/icon/IconPanelRight'; import IconPanelLeft from 'terra-icon/lib/icon/IconPanelLeft'; import ThemeContext from 'terra-theme-context'; +import { useIntl } from 'react-intl'; import { ActiveBreakpointContext } from '../../../breakpoints'; import ResizeHandle from './ResizeHandle'; -import { ApplicationIntlContext } from '../../../application-intl'; import ApplicationNavigationActionsContext from '../../ApplicationNavigationActionsContext'; import styles from './WorkspaceLayout.module.scss'; @@ -111,7 +111,7 @@ const WorkspaceLayout = ({ skipToCallback, }) => { const activeBreakpoint = React.useContext(ActiveBreakpointContext); - const applicationIntl = React.useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = React.useContext(ThemeContext); const layoutContainerRef = React.useRef(); diff --git a/packages/terra-application/src/workspace/Workspace.jsx b/packages/terra-application/src/workspace/Workspace.jsx index 2e26f571d..d1ec5a643 100644 --- a/packages/terra-application/src/workspace/Workspace.jsx +++ b/packages/terra-application/src/workspace/Workspace.jsx @@ -7,13 +7,13 @@ import IconSettings from 'terra-icon/lib/icon/IconSettings'; import IconPanelRight from 'terra-icon/lib/icon/IconPanelRight'; import Popup from 'terra-popup'; +import { useIntl } from 'react-intl'; import ActionMenu, { ActionMenuDivider, ActionMenuItem, ActionMenuGroup, ActionMenuRadio, } from '../action-menu'; -import { ApplicationIntlContext } from '../application-intl'; import usePortalManager, { getPortalElement } from './shared/usePortalManager'; import WorkspaceButton from './subcomponents/_WorkspaceButton'; @@ -118,7 +118,7 @@ const Workspace = ({ }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const theme = React.useContext(ThemeContext); - const intl = React.useContext(ApplicationIntlContext); + const intl = useIntl(); const sizeMenuRef = useRef(); const [workspaceContainerRef, workspacePortalsRef] = usePortalManager(activeItemKey); From 14db96a6fa1602a0cbea4de29e595dd7f3a9a84b Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:33:19 -0500 Subject: [PATCH 03/34] updated examples --- .../terra-dev-site/app/Application.1.app.mdx | 4 +- .../app/components.2/ApplicationBase.app.mdx | 8 +-- .../ApplicationNavigation.app.mdx | 2 +- .../app/components.2/ModalManager.app.mdx | 58 +++++++++++++++++++ .../NavigationPromptCheckpoint.app.mdx | 4 +- .../example/ApplicationBaseExample.jsx | 6 +- .../DisclosureManagerContext.app.mdx | 4 ++ .../src/terra-dev-site/app/demo/AppPage.jsx | 4 +- .../app/demo/ModalPresenter.jsx | 4 +- .../how-to.3/use-translated-strings.app.mdx | 9 +-- .../ApplicationBaseTest.test.jsx | 4 +- .../private/testOverridesTest.test.jsx | 4 +- ...tionNavigationDisabledPromptsTest.test.jsx | 6 +- .../ApplicationNavigationTest.test.jsx | 6 +- .../ApplicationNavigation.test.jsx | 12 ++-- 15 files changed, 97 insertions(+), 38 deletions(-) diff --git a/packages/terra-application/src/terra-dev-site/app/Application.1.app.mdx b/packages/terra-application/src/terra-dev-site/app/Application.1.app.mdx index 625aa8aac..fbc5bf1fe 100644 --- a/packages/terra-application/src/terra-dev-site/app/Application.1.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/Application.1.app.mdx @@ -98,9 +98,9 @@ Many applications respond to the current active breakpoint to adjust for screen ### Internationalization -Terra applications must work for many locales, The Application Intl Context provides access to the frameworks i18n APIs. +Terra applications must work for many locales, `react-intl` should be utilized for i18n api's. -- [Application Intl Context API](/application/terra-application/contexts/application-intl-context) +- [react-intl](https://formatjs.io/) ### Theming diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationBase.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationBase.app.mdx index 6bf2b01f1..66755eef3 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationBase.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationBase.app.mdx @@ -20,9 +20,7 @@ import ApplicationBase from 'terra-application/lib/application-base'; ### I18n -ApplicationBase exposes a prop to define the application's locale and dynamically retrieve the translated strings for that locale. Children of ApplicationBase can access translated strings by using [react-intl's](https://github.com/formatjs/formatjs/blob/master/website/docs/react-intl/components.md) provided components or by using the [ApplicationIntlContext](/application/terra-application/contexts/application-intl-context). - -Consumers of ApplicationBase should review Terra's [translation aggregation](https://engineering.cerner.com/terra-ui/guides/terra-ui/internationalization/aggregate-translations) instructions to ensure ApplicationBase can retrieve the application's translations successfully. +ApplicationBase exposes a prop to define the application's locale and dynamically retrieve the translated strings for that locale. Children of ApplicationBase can access translated strings by using react-intl's provided [components](https://formatjs.io/docs/react-intl/components), react-intl's [imperitive API](https://formatjs.io/docs/react-intl/api) or by using the [ApplicationIntlContext](/application/cerner-terra-application/contexts/application-intl-context). ### Theming @@ -30,6 +28,8 @@ ApplicationBase exposes props to define the application's theme. ApplicationBase renders a theme context provider around its children. Children can access the current theme by using the [ThemeContext](/application/terra-application/contexts/theme-context). + + ### Breakpoints ApplicationBase renders an [ActiveBreakpointContext.Provider](/application/terra-application/contexts/active-breakpoint-context) around its children. Children can access the current active breakpoint value by using the [ActiveBreakpointContext](/application/terra-application/contexts/active-breakpoint-context). @@ -59,4 +59,4 @@ ApplicationNavigation renders a [Suspense](https://reactjs.org/docs/code-splitti ### Modal Presentation -ApplicationBase renders a [ModalManager](/application/terra-application/components/modal-manager) around its children. Children can access modal disclosure APIs by using the [DisclosureManagerContext](/application/terra-application/contexts/disclosure-manager-context). +ApplicationBase renders a [ModalManager](/application/terra-application/components/modal-manager) around its children. Children can access modal disclosure APIs by using the [DisclosureManagerContext](/application/terra-application/contexts/disclosure-manager-context). \ No newline at end of file diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationNavigation.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationNavigation.app.mdx index 29427ee5d..aae19b9a8 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationNavigation.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationNavigation.app.mdx @@ -20,7 +20,7 @@ import ApplicationNavigation from 'terra-application/lib/application-navigation' ApplicationNavigation requires values from the following Contexts: -* [ApplicationIntlContext](/application/terra-application/contexts/application-intl-context) +* [react-intl](https://formatjs.io/docs/react-intl/api) ## Props diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ModalManager.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ModalManager.app.mdx index 403baa569..3363210c7 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ModalManager.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ModalManager.app.mdx @@ -82,6 +82,64 @@ The provided component will be rendered below the standard ActionHeader and abov provide additional context to every disclosed component. This component is provided once to the ModalManager instance, not on a per-disclosure basis, and each component in the disclosure stack will be decorated with the same accessory component. +### Static Height vs. Dynamic Height + +ModalManager was intentionally designed to have static preset heights in order to work in conjunction with Terra content that can adjust responsively using the [terra-responsive-element](https://engineering.cerner.com/terra-ui/components/cerner-terra-core-docs/responsive-element/about), as well as any conditionally positioned UI elements like a [popup](https://engineering.cerner.com/terra-ui/components/cerner-terra-framework-docs/popup/popup), [multi-select dropdown](https://engineering.cerner.com/terra-ui/components/cerner-terra-core-docs/form-select/multi-select), or [date picker](https://engineering.cerner.com/terra-ui/components/cerner-terra-framework-docs/date-picker/date-picker). Having static preset heights allows for Terra to quickly present modal content without requiring extensive browser multiple-render drawing calculations that results in poor application performance. + +Some may be used to other libraries that commonly offer simple modals that can adjust the modal's height dynamically based on the content provided, but those situations only work well for when content is designed for a single presentation (i.e. is not responsive), and ones that have no higher z-index layers that require position calculation relative to the base content (i.e. no popups with pointers). + +### Creating Modal Content + +The ModalManager is intended for content which has regularly composed & designed layouts, including responsive variations. It is very grid-based, so it comes with standard heights and widths to accommodate the highly-structured assembly of content. + +When the preset size of the modal's width or height is _larger_ than the available device-screen or viewport (e.g. if you shrink down your window smaller than what the modal size was set to be), at that point the ModalManager will then "stick" near to the edge of the viewport as it's outer size and not flow offscreen. It is recommended to build the inner content with a responsive design, so when the modal is smaller than it’s preset size, the content will then know to adapt and adjust to alternate layouts accordingly to the new maximum available height and/or width as the outer size. If content is not built responsively, or if you intentionally build the content to overflow in one direction, it will then force scrolling inside of the modal. Scrolling is perfectly acceptable, but should be limited to one direction, preferably vertical-only. + +The key thing to remember is that the ModalManager, similar to a page layout, works based on the "**outside-in**" layout principal, which allows the _inside_ content to respond when the _outside_ container changes in size. The ModalManager unfortunately cannot simultaneously also follow the "**inside-out**" layout principal, which would mean the _outside_ container height grows or shrinks based on the _inside_ content size. The reason is that the inside content cannot dictate what size it would like to be at the same as as listening for when it no longer has any space remaining, which is required in order to be able to change itself to a new layout, and cannot do both (or at least not without attempting many redraws). Designers are encouraged to create structured and grid based layout designs that work well for the modal layout size options that best utilize space, similar to designing base pages within applications. + +### Sizing: Height & Width Options + +The ModalManager has two methods of setting the preferred modal height & width. The first method is by choosing from a list of easy shorthand size options that combine a predefined height and width pair, which works standard application screen ratios. The second method is more advanced and provides the ability to choose from a list of grid-based dimensions to set the height and width independently. _(Note: all values used for ModalManager are true pixels and not rem, relative em units.)_ + +Using the `size` prop within the [disclose argument API](/application/terra-application/contexts/disclosure-manager-context#disclosure-props) allows the consumer to provide a simpler implementation to set the modal preferred dimension, and typically might be used for common application disclosures of similarly sized content. _(Note: `size` should not be provided if `dimensions` are specified.)_ + +|`size` prop: Shorthand options|pixel dimensions| +|---|---| +|`tiny`| w: 320px, h: 240px | +|`small`| w: 640px, h: 420px | +|`medium`| w: 960px, h: 600px | +|**default**| w: 1120px, h: 690px _(modal size if no other details are provided)_ | +|`large`| w: 1280px, h: 870px | +|`huge`| w: 1600px, h: 960px | +|`fullscreen`| w: screen width less ~10px, h: screen height less ~10px | + +For application content that needs more specific dimensional control of modal sizes, using the `dimension` prop within the [disclose argument API](/application/terra-application/contexts/disclosure-manager-context#disclose-props) will be the implementation to choose. Consumers supply a simple object that contains both height wand width values: `{ height: '480', width: '600' }`. _(Note: `dimensions` should not be provided if a `size` is specified.)_ + +|`dimensions` prop: Width options|pixel dimensions| +|---|---| +|`width: '320'`| w: 320px, h: -- | +|`width: '480'`| w: 480px, h: -- | +|`width: '560'`| w: 560px, h: -- | +|`width: '640'`| w: 640px, h: -- | +|`width: '800'`| w: 800px, h: -- | +|`width: '960'`| w: 960px, h: -- | +|`width: '1120'`| w: 1120px, h: -- | +|`width: '1280'`| w: 1280px, h: -- | +|`width: '1440'`| w: 1440px, h: -- | +|`width: '1600'`| w: 1600px, h: -- | +|`width: '1760'`| w: 1760px, h: -- | +|`width: '1920'`| w: 1920px, h: -- | + +|`dimensions` prop: Height options|pixel dimensions| +|---|---| +|`height: '240'`| w: --, h: 240px | +|`height: '420'`| w: --, h: 420px | +|`height: '600'`| w: --, h: 600px | +|`height: '690'`| w: --, h: 690px | +|`height: '780'`| w: --, h: 780px | +|`height: '870'`| w: --, h: 870px | +|`height: '960'`| w: --, h: 960px | +|`height: '1140'`| w: --, h: 1140px | + ### Example ```jsx diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPromptCheckpoint.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPromptCheckpoint.app.mdx index 5d28cae53..45cbcbde6 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPromptCheckpoint.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPromptCheckpoint.app.mdx @@ -62,12 +62,12 @@ to match the prompt messaging provided by the components within `terra-applicati ```jsx import React, { useContext, useRef } from 'react'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { NavigationPromptCheckpoint, getUnsavedChangesPromptOptions } from 'terra-application/lib/navigation-prompt'; const ExampleComponent = () => { const checkpointRef = useRef(); - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); function resolvePrompts() { checkpointRef.current.resolvePrompts(getUnsavedChangesPromptOptions(applicationIntl)).then(() => { ... }); diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationBaseExample.jsx b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationBaseExample.jsx index 1c1131692..7ec14beb6 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationBaseExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationBaseExample.jsx @@ -1,5 +1,5 @@ import React, { useState, useContext } from 'react'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { ThemeContext } from 'terra-application/lib/theme'; import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; @@ -12,7 +12,7 @@ const ApplicationContentExample = () => { const [blockUnload, setBlockUnload] = useState(false); const activeBreakpoint = useContext(ActiveBreakpointContext); - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); if (throwError) { throw new Error("Testing ApplicationBase's error boundary..."); @@ -82,7 +82,7 @@ const ApplicationContentExample = () => { }; const ApplicationBaseExample = () => { - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = React.useContext(ThemeContext); return ( diff --git a/packages/terra-application/src/terra-dev-site/app/contexts.2/DisclosureManagerContext.app.mdx b/packages/terra-application/src/terra-dev-site/app/contexts.2/DisclosureManagerContext.app.mdx index 02cc76dd8..5316db8a9 100644 --- a/packages/terra-application/src/terra-dev-site/app/contexts.2/DisclosureManagerContext.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/contexts.2/DisclosureManagerContext.app.mdx @@ -99,6 +99,8 @@ disclosureManager.disclose({ }) ``` +### Disclose props + `disclose` Argument API: |Key|Is Required|Value| @@ -108,6 +110,8 @@ disclosureManager.disclose({ |`dimensions`|optional|An Object containing explicit `height` and `width` values for the disclosure. These values may not be honored due to the disclosure type or the available viewport size. `dimensions` should not be provided if a `size` is specified.
    Supported `height` values include: `'240'`, `'420'`, `'600'`, `'690'`, `'780'`, `'870'`, `'960'`, `'1140'`.
    Supported `width` values include: `'320'`, `'480'`, `'560'`, `'640'`, `'800'`, `'960'`, `'1120'`, `'1280'`, `'1440'`, `'1600'`, `'1760'`, `'1920'`.| |`content`|**required**|An Object containing a key and a component describing the component to be disclosed. See the `content` API below.| +### Content props + `content` Object API: |Key|Is Required|Value| diff --git a/packages/terra-application/src/terra-dev-site/app/demo/AppPage.jsx b/packages/terra-application/src/terra-dev-site/app/demo/AppPage.jsx index 1c53187cb..a6893f4f1 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/AppPage.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/AppPage.jsx @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { ThemeContext } from 'terra-application/lib/theme'; import { ApplicationNavigationActionsContext } from 'terra-application/lib/application-navigation'; @@ -23,7 +23,7 @@ const AppPage = ({ pageName }) => { const [isInitialized, setIsInitialized] = useState(false); const activeBreakpoint = useContext(ActiveBreakpointContext); - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = React.useContext(ThemeContext); const [hasError, setHasError] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/demo/ModalPresenter.jsx b/packages/terra-application/src/terra-dev-site/app/demo/ModalPresenter.jsx index 9c56f1866..80152a4d8 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/ModalPresenter.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/ModalPresenter.jsx @@ -7,7 +7,7 @@ import classNames from 'classnames/bind'; import Scroll from 'terra-scroll'; import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/lib/disclosure-manager'; import PendingActionToggle from './PendingActionToggle'; @@ -17,7 +17,7 @@ const cx = classNames.bind(styles); const ModalContent = ({ name, onSubmit }) => { const activeBreakpoint = useContext(ActiveBreakpointContext); - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const disclosureManager = useContext(DisclosureManagerContext); const [hasError, setHasError] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-translated-strings.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-translated-strings.app.mdx index dd4a1240f..d36195c00 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-translated-strings.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-translated-strings.app.mdx @@ -7,15 +7,12 @@ Every child of [ApplicationBase](/application/terra-application/components/appli application's translated strings. Please review Terra's [recommended consumption guides](https://engineering.cerner.com/terra-ui/guides/terra-ui/internationalization/building-components-which-include-translations) for more information. -Additionally, ApplicateBase provides react-intl's APIs through the [ApplicationIntlContext](/application/terra-application/contexts/application-intl-context) -for consumers seeking a modern Context implementation. - ```jsx import React, { useContext } from 'react'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; const ExampleComponent = () => { - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); return (
    @@ -33,4 +30,4 @@ export default ExampleComponent; ``` > Accessing react-intl's [legacy context value](https://reactjs.org/docs/legacy-context.html) directly is **not recommended**. -> This API is deprecated and not provided by react-intl v3.x. Terra's recommended usage patterns are supported by versions 2.x and 3.x of react-intl. +> This API is deprecated and not provided by react-intl v3.x. Terra's recommended usage patterns are supported by versions 5.x of react-intl. diff --git a/packages/terra-application/src/terra-dev-site/test/application-base/ApplicationBaseTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-base/ApplicationBaseTest.test.jsx index 4365833ce..f675e1564 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-base/ApplicationBaseTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-base/ApplicationBaseTest.test.jsx @@ -4,7 +4,7 @@ import ApplicationLoadingOverlay from 'terra-application/lib/application-loading import ApplicationStatusOverlay from 'terra-application/lib/application-status-overlay'; import ApplicationBase from 'terra-application/lib/application-base'; import NavigationPrompt from 'terra-application/lib/navigation-prompt'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { ThemeContext } from 'terra-application/lib/theme'; const ApplicationContentTest = () => { @@ -14,7 +14,7 @@ const ApplicationContentTest = () => { const [showStatusOverlay, setShowStatusOverlay] = useState(false); const activeBreakpoint = useContext(ActiveBreakpointContext); - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = useContext(ThemeContext); if (throwError) { diff --git a/packages/terra-application/src/terra-dev-site/test/application-base/private/testOverridesTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-base/private/testOverridesTest.test.jsx index e74eec9e1..602ca5457 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-base/private/testOverridesTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-base/private/testOverridesTest.test.jsx @@ -1,9 +1,9 @@ import React, { useContext } from 'react'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import { ThemeContext } from 'terra-application/lib/theme'; const TestOverrideTest = () => { - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = useContext(ThemeContext); return (
    diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationDisabledPromptsTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationDisabledPromptsTest.test.jsx index 6c102d6ad..efc375831 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationDisabledPromptsTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationDisabledPromptsTest.test.jsx @@ -1,7 +1,7 @@ -import React, { useState, useContext } from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { ThemeContext } from 'terra-application/lib/theme'; -import { ApplicationIntlContext } from '../../../application-intl'; +import { useIntl } from 'react-intl'; import ApplicationBase from '../../../application-base'; import ApplicationNavigation from '../../../application-navigation'; import NavigationPrompt from '../../../navigation-prompt'; @@ -35,7 +35,7 @@ PageContent.propTypes = { }; const ApplicationNavigationDisabledPromptsTest = () => { - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = React.useContext(ThemeContext); const [activeNavItem, setActiveNavItem] = useState('page_1'); const [loggedOut, setLoggedOut] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationTest.test.jsx index 67fe745ae..b7ee683b3 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/ApplicationNavigationTest.test.jsx @@ -1,11 +1,11 @@ -import React, { useState, useContext } from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { ThemeContext } from 'terra-application/lib/theme'; import ApplicationNavigation, { ApplicationNavigationActionsContext, } from 'terra-application/lib/application-navigation'; +import { useIntl } from 'react-intl'; import { WorkspaceContent } from '../../../workspace'; -import { ApplicationIntlContext } from '../../../application-intl'; import ApplicationBase from '../../../application-base'; import NavigationPrompt from '../../../navigation-prompt'; @@ -119,7 +119,7 @@ const workspace = ( ); const ApplicationNavigationTest = () => { - const applicationIntl = useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); const theme = React.useContext(ThemeContext); const [activeNavItem, setActiveNavItem] = useState('page_1'); const [loggedOut, setLoggedOut] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx index 1499d643b..f2a1360fe 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx @@ -14,6 +14,12 @@ const userConfig = { initials: 'TN', }; +const userActionConfig = { + text: 'Edit Photo', + // eslint-disable-next-line no-console + userActionCallback: () => console.log('Button Clicked'), +}; + const extensionItems = [ { icon: , @@ -135,12 +141,6 @@ function ApplicationNavigationTest() { const [isDrawerOpen, setDrawerOpen] = useState(false); const [functionType, setFunctionType] = useState(''); - const userActionConfig = { - text: 'Edit Photo', - // eslint-disable-next-line no-alert - userActionCallback: () => setFunctionType('userActionButton was clicked'), - }; - /* eslint-disable no-alert */ const handleItemSelection = (key, metaData) => { alert(`itemKey: ${key}, metaData: ${metaData.test}`); From 64ab7ad72a83c46bd7983882808b1dceeece237f Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:39:47 -0500 Subject: [PATCH 04/34] updated tests --- .../application-base/ApplicationBase.test.jsx | 46 +--- .../private/i18nloader.test.js | 201 +++++++++++++++ .../private/intlLoaders.test.js | 239 ++++++++++++++++++ .../private/loadLocaleData.test.js | 83 ++++++ .../private/translationsLoaders.test.js | 157 ++++++++++++ .../ApplicationNavigation.test.jsx | 13 +- .../tests/jest/workspace/Workspace.test.jsx | 12 + 7 files changed, 711 insertions(+), 40 deletions(-) create mode 100644 packages/terra-application/tests/jest/application-base/private/i18nloader.test.js create mode 100644 packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js create mode 100644 packages/terra-application/tests/jest/application-base/private/loadLocaleData.test.js create mode 100644 packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js diff --git a/packages/terra-application/tests/jest/application-base/ApplicationBase.test.jsx b/packages/terra-application/tests/jest/application-base/ApplicationBase.test.jsx index 0ad12d119..f7e8690f2 100644 --- a/packages/terra-application/tests/jest/application-base/ApplicationBase.test.jsx +++ b/packages/terra-application/tests/jest/application-base/ApplicationBase.test.jsx @@ -3,7 +3,7 @@ import ApplicationBase from '../../../src/application-base/ApplicationBase'; describe('ApplicationBase', () => { it('should render with minimal props', () => { - const wrapper = enzyme.shallow(( + const wrapper = enzymeIntl.mountWithIntl((
    content
    @@ -12,14 +12,11 @@ describe('ApplicationBase', () => { }); it('should render with all props', () => { - const wrapper = enzyme.shallow(( + const wrapper = enzymeIntl.mountWithIntl(( placeholder
    } + unloadPromptIsDisabled themeName="test-theme" - themeIsGlobal - fitToParentIsDisabled >
    content
    @@ -27,50 +24,21 @@ describe('ApplicationBase', () => { expect(wrapper).toMatchSnapshot(); }); - it('should render with the preferred browser local', () => { - const wrapper = enzyme.shallow(( + it('should render with the preferred browser locale', () => { + const wrapper = enzymeIntl.mountWithIntl((
    content
    )); expect(wrapper).toMatchSnapshot(); }); + it('should render without scroll', () => { - const wrapper = enzyme.shallow(( + const wrapper = enzymeIntl.mountWithIntl((
    content
    )); expect(wrapper).toMatchSnapshot(); }); - - it('should render with theme and density', () => { - const wrapper = enzyme.shallow(( - -
    content
    -
    - )); - - const themeProvider = wrapper.find('ThemeProvider'); - expect(themeProvider.props().themeName).toBe('test-theme'); - expect(themeProvider.props().density).toBe('compact'); - - const themeContext = wrapper.find('ThemeContextProvider'); - expect(themeContext.props().theme).toStrictEqual({ name: 'test-theme', className: 'test-theme', density: 'compact' }); - }); - - it('should render with density', () => { - const wrapper = enzyme.shallow(( - -
    content
    -
    - )); - - const themeProvider = wrapper.find('ThemeProvider'); - expect(themeProvider.props().themeName).toBeUndefined(); - expect(themeProvider.props().density).toBe('compact'); - - const themeContext = wrapper.find('ThemeContextProvider'); - expect(themeContext.props().theme).toStrictEqual({ name: 'terra-default-theme', className: undefined, density: 'compact' }); - }); }); diff --git a/packages/terra-application/tests/jest/application-base/private/i18nloader.test.js b/packages/terra-application/tests/jest/application-base/private/i18nloader.test.js new file mode 100644 index 000000000..95ce26954 --- /dev/null +++ b/packages/terra-application/tests/jest/application-base/private/i18nloader.test.js @@ -0,0 +1,201 @@ +/* eslint-disable no-console, import/no-unresolved */ +import * as relativetimeformatPolyfill from '@formatjs/intl-relativetimeformat/should-polyfill'; +import i18nLoader from '../../../../src/application-base/private/i18nLoader'; +import defaultLoadIntl from '../../../../src/application-base/private/intlLoaders'; +import loadTranslations from '../../../../src/application-base/private/translationsLoaders'; + +jest.mock('../../../../src/application-base/private/intlLoaders'); +jest.mock('../../../../src/application-base/private/translationsLoaders'); +jest.mock('@formatjs/intl-relativetimeformat/should-polyfill'); + +global.console.warn = jest.fn(); + +describe('i18nLoader', () => { + beforeEach(() => { + console.warn.mockClear(); + }); + + describe('when intl is provided by browser', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + global.Intl = { DateTimeFormat: jest.fn(), NumberFormat: jest.fn(), PluralRules: jest.fn() }; + relativetimeformatPolyfill.shouldPolyfill = jest.fn().mockReturnValue(false); + i18nLoader('en'); + }); + afterAll(() => { global.Intl = undefined; }); + + it('does not add the intl polyfill ', () => { + expect(global.IntlPolyfill).not.toBeDefined(); + }); + + it('does not load intl data', () => { + expect(defaultLoadIntl).not.toHaveBeenCalled(); + }); + }); + + describe('when Intl.RelativeTimeFormat is not defined', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + loadTranslations.mockClear(); + global.Intl = { DateTimeFormat: jest.fn(), NumberFormat: jest.fn(), PluralRules: jest.fn() }; + relativetimeformatPolyfill.shouldPolyfill = jest.fn().mockReturnValue(true); + }); + afterAll(() => { global.Intl = undefined; }); + + it('loads en locale', () => { + i18nLoader('en'); + + // adds the intl polyfill + expect(global.Intl).toBeDefined(); + + // loads the locale data + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'en', 'relativetimeformat'); + + // loads translations + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'en'); + }); + + it('loads es locale', () => { + i18nLoader('es'); + + // loads the new locale data on sequential load + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'es', 'relativetimeformat'); + + // loads the new translation data on sequential load + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'es'); + }); + }); + + describe('when intl is not defined', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + loadTranslations.mockClear(); + relativetimeformatPolyfill.shouldPolyfill = jest.fn().mockReturnValue(false); + global.Intl = undefined; + }); + afterAll(() => { global.Intl = undefined; }); + + it('loads en locale', () => { + i18nLoader('en'); + + // adds the intl polyfill + expect(global.Intl).toBeDefined(); + expect(global.IntlPolyfill).toBeDefined(); + + // loads the locale data + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'en', 'intl'); + + // loads translations + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'en'); + }); + + it('loads es locale', () => { + i18nLoader('es'); + + // loads the new locale data on sequential load + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'es', 'intl'); + + // loads the new translation data on sequential load + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'es'); + }); + }); + + describe('when Intl.DataTimeFormat is not defined', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + loadTranslations.mockClear(); + global.Intl = { DateTimeFormat: undefined }; + }); + afterAll(() => { global.Intl = undefined; }); + + it('loads en locale', () => { + i18nLoader('en'); + + // adds the intl polyfill + expect(global.Intl).toBeDefined(); + expect(global.IntlPolyfill).toBeDefined(); + + // loads the locale data + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'en', 'intl'); + + // loads translations + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'en'); + }); + + it('loads es locale', () => { + i18nLoader('es'); + + // loads the new locale data on sequential load + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'es', 'intl'); + + // loads the new translation data on sequential load + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'es'); + }); + }); + + describe('when Intl.NumberFormat is not defined', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + loadTranslations.mockClear(); + global.Intl = { DateTimeFormat: jest.fn() }; + }); + afterAll(() => { global.Intl = undefined; }); + + it('loads en locale', () => { + i18nLoader('en'); + + // adds the intl polyfill + expect(global.Intl).toBeDefined(); + expect(global.IntlPolyfill).toBeDefined(); + + // loads the locale data + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'en', 'intl'); + + // loads translations + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'en'); + }); + + it('loads es locale', () => { + i18nLoader('es'); + + // loads the new locale data on sequential load + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'es', 'intl'); + + // loads the new translation data on sequential load + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'es'); + }); + }); + + describe('when Intl.PluralRules is not defined', () => { + beforeAll(() => { + defaultLoadIntl.mockClear(); + loadTranslations.mockClear(); + global.Intl = { DateTimeFormat: jest.fn(), NumberFormat: jest.fn() }; + }); + afterAll(() => { global.Intl = undefined; }); + + it('loads en locale', () => { + i18nLoader('en'); + + // adds the intl polyfill + expect(global.Intl).toBeDefined(); + expect(global.IntlPolyfill).toBeDefined(); + + // loads the locale data + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'en', 'intl'); + + // loads translations + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'en'); + }); + + it('loads es locale', () => { + i18nLoader('es'); + + // loads the new locale data on sequential load + expect(defaultLoadIntl).toHaveBeenNthCalledWith(1, 'es', 'intl'); + + // loads the new translation data on sequential load + expect(loadTranslations).toHaveBeenNthCalledWith(1, 'es'); + }); + }); +}); diff --git a/packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js b/packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js new file mode 100644 index 000000000..e4f58298b --- /dev/null +++ b/packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js @@ -0,0 +1,239 @@ +import hasIntlData from 'intl-locales-supported'; +import * as loadLocaleData from '../../../../src/application-base/private/loadLocaleData'; +import loadIntl from '../../../../src/application-base/private/intlLoaders'; +import logger from '../../../../src/utils/logger'; + +jest.mock('intl-locales-supported'); +jest.mock('../../../../src/application-base/private/loadLocaleData'); +jest.mock('../../../../src/utils/logger', () => ({ + warn: jest.fn(), +})); + +const supportedIntlConstructors = [ + Intl.DateTimeFormat, + Intl.NumberFormat, + Intl.PluralRules, +]; + +describe('intlLoaders', () => { + beforeAll(() => { + hasIntlData.mockReturnValue(false); + }); + + afterAll(() => { + window.Intl.mockReset(); + }); + + describe('dev environment', () => { + beforeEach(() => { + logger.warn.mockClear(); + }); + + it('logs a warning when the regional locale is not provided and locale fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data was not supplied for the es-US locale.')); + } + return Promise.resolve(); + }); + expect.assertions(4); + return loadIntl('es-US', 'intl').then(() => { + expect(logger.warn).toBeCalledWith('Locale data was not supplied for the es-US locale. Using es data as the fallback locale data.'); + expect(loadLocaleData.default).toHaveBeenCalledTimes(2); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(2, 'es', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + }); + }); + + it('logs a warning when the locale is not provided and en fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es') { + return Promise.reject(Error('Locale data was not supplied for the es locale.')); + } + return Promise.resolve(); + }); + expect.assertions(3); + return loadIntl('es', 'intl').then(() => { + expect(logger.warn).toBeCalledWith('Locale data was not supplied for the es locale. Using en data as the fallback locale data.'); + expect(loadLocaleData.default).toHaveBeenCalledTimes(2); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(2, 'en', 'intl'); + }); + }); + + it('logs a warning when the regional locale and locale are not provided and en fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data was not supplied for the es-US locale.')); + } + if (locale === 'es') { + return Promise.reject(Error('Locale data was not supplied for the es locale.')); + } + return Promise.resolve(); + }); + expect.assertions(4); + return loadIntl('es-US', 'intl').then(() => { + expect(logger.warn).toBeCalledWith('Locale data was not supplied for the es-US locale. Using es data as the fallback locale data.'); + expect(logger.warn).toBeCalledWith('Locale data was not supplied for the es locale. Using en data as the fallback locale data.'); + expect(loadLocaleData.default).toHaveBeenCalledTimes(3); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(3, 'en', 'intl'); + }); + }); + + it('throws an error when the regional locale and en fallback are not provided', () => { + loadLocaleData.default = jest.fn(() => Promise.reject(Error('Test no locale data'))); + return expect(loadIntl('es-US', 'intl')).rejects.toThrow('Test no locale data'); + }); + + it('throws an error when the locale and en fallback are not provided', () => { + loadLocaleData.default = jest.fn(() => Promise.reject(Error('Test no locale data'))); + return expect(loadIntl('es', 'intl')).rejects.toThrow('Test no locale data'); + }); + }); + + describe('production environment', () => { + beforeEach(() => { + process.env.NODE_ENV = 'production'; + logger.warn.mockClear(); + }); + + afterEach(() => { + delete process.env.NODE_ENV; + }); + + it('only fallbacks when the regional locale is not provided and locale fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data was not supplied for the es-US locale.')); + } + return Promise.resolve(); + }); + expect.assertions(3); + return loadIntl('es-US', 'intl').then(() => { + expect(loadLocaleData.default).toHaveBeenCalledTimes(2); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(2, 'es', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + }); + }); + + it('only fallbacks when the regional locale and locale are not provided and en fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es') { + return Promise.reject(Error('Locale data was not supplied for the es locale.')); + } + return Promise.resolve(); + }); + expect.assertions(2); + return loadIntl('es', 'intl').then(() => { + expect(loadLocaleData.default).toHaveBeenCalledTimes(2); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(2, 'en', 'intl'); + }); + }); + + it('only fallbacks when the locale is not provided and en fallback is used', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data was not supplied for the es-US locale.')); + } + if (locale === 'es') { + return Promise.reject(Error('Locale data was not supplied for the es locale.')); + } + return Promise.resolve(); + }); + expect.assertions(2); + return loadIntl('es-US', 'intl').then(() => { + expect(loadLocaleData.default).toHaveBeenCalledTimes(3); + expect(loadLocaleData.default).toHaveBeenNthCalledWith(3, 'en', 'intl'); + }); + }); + + it('still throws an error when the locale and en fallback are not provided', () => { + loadLocaleData.default = jest.fn(() => Promise.reject(Error('Test no locale data'))); + return expect(loadIntl('es-US', 'intl')).rejects.toThrow('Test no locale data'); + }); + + it('still throws an error when the regional locale and en fallback are not provided', () => { + loadLocaleData.default = jest.fn(() => Promise.reject(Error('Test no locale data'))); + return expect(loadIntl('es', 'intl')).rejects.toThrow('Test no locale data'); + }); + }); + describe('loads locale data as needed', () => { + beforeEach(() => { + hasIntlData.mockClear(); + loadLocaleData.default = jest.fn(() => Promise.resolve()); + }); + + it('loads locale data', () => { + hasIntlData.mockReturnValue(false); + expect.assertions(3); + return loadIntl('es', 'intl').then(() => { + expect(loadLocaleData.default).toHaveBeenCalledWith('es', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + expect(hasIntlData).toBeCalledWith(['es'], supportedIntlConstructors); + }); + }); + + it('does not re-load locale data when it has already been loaded', () => { + hasIntlData.mockReturnValue(true); + expect.assertions(3); + return loadIntl('es', 'intl').then(() => { + expect(loadLocaleData.default).not.toHaveBeenCalledWith('es', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + expect(hasIntlData).toBeCalledWith(['es'], supportedIntlConstructors); + }); + }); + + it('does load new locale data', () => { + hasIntlData.mockReturnValue(false); + expect.assertions(3); + return loadIntl('pt', 'intl').then(() => { + expect(loadLocaleData.default).toHaveBeenCalledWith('pt', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + expect(hasIntlData).toBeCalledWith(['pt'], supportedIntlConstructors); + }); + }); + + it('does not re-load region locale data if regional local has already been loaded', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data not provided for es-US locale.')); + } + + return Promise.resolve(); + }); + hasIntlData.mockReturnValue(true); + expect.assertions(3); + return loadIntl('es-US', 'intl').then(() => { + expect(loadLocaleData.default).not.toHaveBeenCalledWith('es', 'intl'); + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + expect(hasIntlData).toHaveBeenNthCalledWith(1, ['es-US'], supportedIntlConstructors); + }); + }); + + it('does not fallback locale data if fallback has already been loaded', () => { + loadLocaleData.default = jest.fn(locale => { + if (locale === 'es-US') { + return Promise.reject(Error('Locale data not provided for es-US locale.')); + } + if (locale === 'es') { + return Promise.reject(Error('Locale data not provided for es locale.')); + } + + return Promise.resolve(); + }); + hasIntlData.mockReturnValue(false).mockReturnValueOnce(true); + expect.assertions(2); + return loadIntl('es-US', 'intl').then(() => { + expect(loadLocaleData.default).not.toHaveBeenCalledWith('en', 'intl'); + expect(hasIntlData).toHaveBeenNthCalledWith(1, ['es-US'], supportedIntlConstructors); + }); + }); + + it('does not add supported Intl constructors if supportedLocalesOf property does not exist', () => { + delete Intl.DateTimeFormat.supportedLocalesOf; + delete Intl.NumberFormat.supportedLocalesOf; + return loadIntl('en', 'intl').then(() => { + expect(hasIntlData).toHaveBeenNthCalledWith(1, ['en'], []); + }); + }); + }); +}); diff --git a/packages/terra-application/tests/jest/application-base/private/loadLocaleData.test.js b/packages/terra-application/tests/jest/application-base/private/loadLocaleData.test.js new file mode 100644 index 000000000..7aefba5e4 --- /dev/null +++ b/packages/terra-application/tests/jest/application-base/private/loadLocaleData.test.js @@ -0,0 +1,83 @@ +import loadLocaleData from '../../../../src/application-base/private/loadLocaleData'; + +const locales = ['en', 'en-AU', 'en-CA', 'en-US', 'en-GB', 'es', 'es-US', 'es-ES', 'de', 'fr', 'fr-FR', 'nl', 'nl-BE', 'pt', 'pt-BR', 'sv', 'sv-SE']; + +describe('loadLocaleData', () => { + beforeEach(() => { + jest.resetModules(); + }); + + locales.forEach((locale) => { + it(`loads ${locale} intl data`, () => { + jest.doMock(`intl/locale-data/jsonp/${locale}.js`, () => ({ + localeData: `${locale} included`, + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl').then((module) => { + expect(module.localeData).toEqual(`${locale} included`); + }); + }); + + if (locale === 'es-ES') { + it('loads es intl-relativetimeformat data for es-ES locale', () => { + jest.doMock('@formatjs/intl-relativetimeformat/locale-data/es.js', () => ({ + localeData: 'es included', + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl-relativetimeformat').then((module) => { + expect(module.localeData).toEqual('es included'); + }); + }); + } else if (locale === 'fr-FR') { + it('loads fr intl-relativetimeformat data for fr-FR locale', () => { + jest.doMock('@formatjs/intl-relativetimeformat/locale-data/fr.js', () => ({ + localeData: 'fr included', + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl-relativetimeformat').then((module) => { + expect(module.localeData).toEqual('fr included'); + }); + }); + } else if (locale === 'sv-SE') { + it('loads sv intl-relativetimeformat data for sv-SE locale', () => { + jest.doMock('@formatjs/intl-relativetimeformat/locale-data/sv.js', () => ({ + localeData: 'sv included', + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl-relativetimeformat').then((module) => { + expect(module.localeData).toEqual('sv included'); + }); + }); + } else if (locale === 'pt-BR') { + it('loads pt intl-relativetimeformat data for pt-BR locale', () => { + jest.doMock('@formatjs/intl-relativetimeformat/locale-data/pt.js', () => ({ + localeData: 'pt included', + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl-relativetimeformat').then((module) => { + expect(module.localeData).toEqual('pt included'); + }); + }); + } else { + it(`loads ${locale} intl-relativetimeformat data`, () => { + jest.doMock(`@formatjs/intl-relativetimeformat/locale-data/${locale}.js`, () => ({ + localeData: `${locale} included`, + })); + expect.assertions(1); + return loadLocaleData(locale, 'intl-relativetimeformat').then((module) => { + expect(module.localeData).toEqual(`${locale} included`); + }); + }); + } + }); + + it('throws error when intl locale data does not exist', () => { + expect.assertions(1); + return expect(loadLocaleData('fake', 'intl')).rejects.toThrow(); + }); + + it('throws error when intl-relativetimeformat locale data does not exist', () => { + expect.assertions(1); + return expect(loadLocaleData('fake', 'intl-relativetimeformat')).rejects.toThrow(); + }); +}); diff --git a/packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js b/packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js new file mode 100644 index 000000000..7f58b718c --- /dev/null +++ b/packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js @@ -0,0 +1,157 @@ +import loadTranslations from '../../../../src/application-base/private/translationsLoaders'; +import Logger from '../../../../src/utils/logger'; + +describe('translationsLoaders', () => { + beforeEach(() => { + jest.resetModules(); + }); + + it('loads en translation file', async () => { + jest.doMock('en.js', () => ({ + test: 'test', + })); + expect.assertions(1); + await loadTranslations('en').then(messages => { + expect(messages.test).toEqual('test'); + }); + }); + + it('logs a warning when the regional locale is not provided and locale fallback is used', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + jest.doMock('es.js', () => ({ + test: 'test-es', + })); + expect.assertions(1); + await loadTranslations('es-US').then(() => { + expect(spy).toBeCalledWith(expect.stringContaining('Translations were not supplied for the es-US locale. Using es data as the fallback locale.')); + spy.mockRestore(); + }); + }); + + it('logs a warning when the locale is not provided and en fallback is used', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + + let callCount = 0; + + // this doMock actually mocks both 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the es locale.'); + } + return ({ + test: 'test', + }); + }); + + await loadTranslations('es').then((messages) => { + expect(messages.test).toEqual('test'); + expect(spy).toBeCalledWith(expect.stringContaining('Translations were not supplied for the es locale. Using en as the fallback locale.')); + spy.mockRestore(); + }); + }); + + it('logs a warning when the regional locale and locale are not provided and en fallback is used', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + + let callCount = 0; + + // this doMock actually mocks 'es-ES.js' 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the es-ES locale.'); + } + if (callCount === 1) { + callCount += 1; + throw new Error('Translations were not supplied for the es locale.'); + } + return ({ + test: 'test', + }); + }); + await loadTranslations('es-ES').then((messages) => { + expect(messages.test).toEqual('test'); + expect(spy).toHaveBeenNthCalledWith(1, expect.stringContaining('Translations were not supplied for the es-ES locale. Using es data as the fallback locale.')); + expect(spy).toHaveBeenNthCalledWith(2, expect.stringContaining('Translations were not supplied for the es locale. Using en as the fallback locale.')); + spy.mockRestore(); + }); + }); + + it('throws an error when the locale and en fallback are not provided', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + let callCount = 0; + + // this doMock actually mocks both 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the es locale.'); + } + throw new Error('Translations were not supplied for the en locale.'); + }); + + await expect(loadTranslations('es')).rejects.toThrow('Translations were not supplied for the en locale.'); + spy.mockRestore(); + }); + + it('throws an error when the regional locale and en fallback are not provided', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + let callCount = 0; + + // this doMock actually mocks both 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the en-US locale.'); + } + throw new Error('Translations were not supplied for the en locale.'); + }); + + await expect(loadTranslations('en-US')).rejects.toThrow('Translations were not supplied for the en locale.'); + spy.mockRestore(); + }); + + describe('production environment', () => { + beforeEach(() => { + process.env.NODE_ENV = 'production'; + }); + + afterEach(() => { + delete process.env.NODE_ENV; + }); + + it('still throws an error when the locale and en fallback are not provided', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + let callCount = 0; + + // this doMock actually mocks both 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the es locale.'); + } + throw new Error('Translations were not supplied for the en locale.'); + }); + + await expect(loadTranslations('es')).rejects.toThrow('Translations were not supplied for the en locale.'); + spy.mockRestore(); + }); + + it('still throws an error when the regional locale and en fallback are not provided', async () => { + const spy = jest.spyOn(Logger, 'warn').mockImplementation(() => {}); + let callCount = 0; + + // this doMock actually mocks both 'en.js' and 'es.js' due to the module name mapper mapping the en and es files to the same file. + jest.doMock('en.js', () => { + if (callCount === 0) { + callCount += 1; + throw new Error('Translations were not supplied for the en-US locale.'); + } + throw new Error('Translations were not supplied for the en locale.'); + }); + await expect(loadTranslations('en-US')).rejects.toThrow('Translations were not supplied for the en locale.'); + spy.mockRestore(); + }); + }); +}); diff --git a/packages/terra-application/tests/jest/application-navigation/ApplicationNavigation.test.jsx b/packages/terra-application/tests/jest/application-navigation/ApplicationNavigation.test.jsx index e69423df2..4de579d21 100644 --- a/packages/terra-application/tests/jest/application-navigation/ApplicationNavigation.test.jsx +++ b/packages/terra-application/tests/jest/application-navigation/ApplicationNavigation.test.jsx @@ -1,7 +1,18 @@ import React from 'react'; - import ApplicationNavigation from '../../../src/application-navigation/ApplicationNavigation'; +jest.mock('react-intl', () => { + const reactIntl = jest.requireActual('react-intl'); + const intl = reactIntl.createIntl({ + locale: 'en', + }); + + return { + ...reactIntl, + useIntl: () => intl, + }; +}); + describe('ApplicationNavigation', () => { it('should render default element', () => { const shallowComponent = enzyme.shallow( diff --git a/packages/terra-application/tests/jest/workspace/Workspace.test.jsx b/packages/terra-application/tests/jest/workspace/Workspace.test.jsx index cc32cee10..b7da0f7ab 100644 --- a/packages/terra-application/tests/jest/workspace/Workspace.test.jsx +++ b/packages/terra-application/tests/jest/workspace/Workspace.test.jsx @@ -10,6 +10,18 @@ import MockApplication from '../MockApplication'; const testMetaData1 = { data: 1 }; const testMetaData2 = { data: 1 }; +jest.mock('react-intl', () => { + const reactIntl = jest.requireActual('react-intl'); + const intl = reactIntl.createIntl({ + locale: 'en', + }); + + return { + ...reactIntl, + useIntl: () => intl, + }; +}); + const TestWorkspace = (props) => ( Date: Thu, 25 Apr 2024 09:45:54 -0500 Subject: [PATCH 05/34] updated dependencies --- package-lock.json | 281 +++++++++++++++++++++++++++++++++++++++++----- package.json | 4 +- 2 files changed, 257 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c4231c9f..522f13768 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,6 +95,7 @@ "@cerner/package-json-lint-config-terra": "2", "@cerner/stylelint-config-terra": "5", "@cerner/terra-cli": "1", + "@cerner/terra-enzyme-intl": "4", "@cerner/terra-functional-testing": "4", "@cerner/terra-open-source-scripts": "1", "@cerner/webpack-config-terra": "3", @@ -115,7 +116,6 @@ "react-dom": "16", "react-intl": "2", "stylelint": "15", - "terra-enzyme-intl": "3", "webpack": "5", "webpack-cli": "4", "webpack-dev-server": "4", @@ -128,7 +128,7 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2" + "react-intl": "5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2462,6 +2462,105 @@ "react-dom": "^16.8.5" } }, + "node_modules/@cerner/terra-enzyme-intl": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@cerner/terra-enzyme-intl/-/terra-enzyme-intl-4.9.0.tgz", + "integrity": "sha512-UwaTKsGTh1nYxZyFfIz7t3Lx50HptFbwTctCZg5kg6i0j3TeSpv/Ztl0bTA6XYxpVjwuQULDCYzpFAperIKAMA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "prop-types": "^15.7.2", + "react-intl": "^5.25.1" + }, + "engines": { + "node": "10 || 12 || 14", + "npm": "6 || 9" + }, + "peerDependencies": { + "enzyme": "^3.9.0", + "react": "^16.8.5", + "react-dom": "^16.8.5" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/intl-messageformat": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@cerner/terra-enzyme-intl/node_modules/react-intl": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz", + "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-messageformat-parser": "2.1.0", + "@formatjs/intl": "2.2.1", + "@formatjs/intl-displaynames": "5.4.3", + "@formatjs/intl-listformat": "6.5.3", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "9.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.3.0 || 17 || 18", + "typescript": "^4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@cerner/terra-functional-testing": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/@cerner/terra-functional-testing/-/terra-functional-testing-4.8.0.tgz", @@ -2793,6 +2892,15 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", + "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/icu-messageformat-parser": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.15.tgz", @@ -2814,6 +2922,29 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", + "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "@formatjs/intl-displaynames": "5.4.3", + "@formatjs/intl-listformat": "6.5.3", + "intl-messageformat": "9.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "typescript": "^4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@formatjs/intl-datetimeformat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-5.0.2.tgz", @@ -2841,6 +2972,36 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl-displaynames": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz", + "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl-getcanonicallocales": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.9.2.tgz", @@ -2849,6 +3010,36 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl-listformat": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", + "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl-locale": { "version": "2.4.47", "resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-2.4.47.tgz", @@ -2902,6 +3093,58 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl/node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl/node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl/node_modules/intl-messageformat": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", + "dev": true, + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/ts-transformer": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.7.0.tgz", @@ -11023,9 +11266,9 @@ "optional": true }, "node_modules/aws-sdk": { - "version": "2.1605.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1605.0.tgz", - "integrity": "sha512-/wtOuF7WgkbN6YL3xJ+FB54kvIAfnP/DQVDaE6rSYv6ft0xr01Si94NgQWhb5OcFkFfRAC4auZX8PiFNtOi9xQ==", + "version": "2.1606.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1606.0.tgz", + "integrity": "sha512-Sg1y0p93XI0ce86D9mi402sKMiH7LDoq6k3YzMja9yA0i3i0Pg3py4jjZ7p3HlKNOsDUF0t+9DLdCjtbTbuM6w==", "dev": true, "hasInstallScript": true, "optional": true, @@ -14872,9 +15115,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.747", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz", - "integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==" + "version": "1.4.748", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz", + "integrity": "sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A==" }, "node_modules/email-addresses": { "version": "3.1.0", @@ -15236,14 +15479,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -32754,20 +32997,6 @@ "terra-theme-provider": "^4.16.0" } }, - "node_modules/terra-enzyme-intl": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/terra-enzyme-intl/-/terra-enzyme-intl-3.4.0.tgz", - "integrity": "sha512-rgr0/vNg8GPc/r7mDu/hDSp5/y6rxEpYxiPK4RnG6H+mFAUeW5o/LNzPnSA5aAxKLC1MzAPQDF/riGg8zrRIdQ==", - "dev": true, - "engines": { - "node": ">=8.9.2" - }, - "peerDependencies": { - "enzyme": "3.x", - "react": "16.x", - "react-intl": ">= 2.7" - } - }, "node_modules/terra-form-checkbox": { "version": "4.26.0", "resolved": "https://registry.npmjs.org/terra-form-checkbox/-/terra-form-checkbox-4.26.0.tgz", diff --git a/package.json b/package.json index 9d4bbb148..1aa064f45 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2" + "react-intl": "5" }, "devDependencies": { "@babel/cli": "7", @@ -54,6 +54,7 @@ "@cerner/package-json-lint-config-terra": "2", "@cerner/stylelint-config-terra": "5", "@cerner/terra-cli": "1", + "@cerner/terra-enzyme-intl": "4", "@cerner/terra-functional-testing": "4", "@cerner/terra-open-source-scripts": "1", "@cerner/webpack-config-terra": "3", @@ -74,7 +75,6 @@ "react-dom": "16", "react-intl": "2", "stylelint": "15", - "terra-enzyme-intl": "3", "webpack": "5", "webpack-cli": "4", "webpack-dev-server": "4", From 471b397de0f7bb4f72364e8f7637d12ee2f26f86 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:53:55 -0500 Subject: [PATCH 06/34] updated CHANGELOGS --- packages/terra-application-docs/CHANGELOG.md | 17 +++++++++++ packages/terra-application/CHANGELOG.md | 30 ++++++++++++++++++++ packages/terra-dev-site/CHANGELOG.md | 26 +++++++++++++++++ packages/terra-polyfill/CHANGELOG.md | 11 +++++++ 4 files changed, 84 insertions(+) diff --git a/packages/terra-application-docs/CHANGELOG.md b/packages/terra-application-docs/CHANGELOG.md index 4bce095db..10bc23d98 100644 --- a/packages/terra-application-docs/CHANGELOG.md +++ b/packages/terra-application-docs/CHANGELOG.md @@ -2,6 +2,23 @@ ## Unreleased +## 3.1.0 - (June 22, 2022) + +* Changed + * Minor dependency version bump + +## 3.0.1 - (June 8, 2022) + +* Changed + * Minor dependency bump. + +## 3.0.0 - (May 31, 2022) + +* Breaking + * Dropped v2-v4 react-intl support + +--- + ## 2.14.0 - (April 23, 2024) * Changed diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index 3d14cc501..c616cdb59 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -2,6 +2,36 @@ ## Unreleased +* Changed + * Updated `getBrowserLocale` method for IE. + * Updated jest snapshots for terra-icon and terra-button changes. + * Updated size explanations for ModalManager managed by DisclosureManagerContext. + * Locked `uuid` dependency to `3.4.0`. + +* Added + * Added user action utility button. + * Added `noScroll` prop to remove scroll in powerchart. + +## 2.1.0 - (June 22, 2022) + +* Changed + * updated condition statement added to check `inert` polyfill is required. + * updated `wicg-inert` to latest version. + +## 2.0.1 - (June 8, 2022) + +* Minor dependency bump + +## 2.0.0 - (May 31, 2022) + +* Breaking + * Dropped v2-v4 react-intl support ([Upgrade Guide](https://engineering.cerner.com/terra-application/dev_tools/cerner-terra-application-docs/terra-dev-site/upgrade-guides/application-v-2)). + * `customTranslatedMessages` prop removed, thus dropping support for the ability of consumers to provide translations for an unsupported locale. + * `contextShape` will not be provided by `ApplicationIntlContext` anymore since `intlShape` is no longer exported by `react-intl`. + * `translationsLoadingPlaceholder` prop removed. + +--- + ## 1.58.0 - (April 23, 2024) * Added diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index f92f6ce7c..c26369b80 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -2,6 +2,32 @@ ## Unreleased +* Fixed + * Fixed clipping issue of test pages on dev-site. + * Fixed scroll issue of doc pages with longer content. + +* Changed + * Updated jest snapshot for terra-icon and terra-button changes. + * Updated wdio snapshot to fix build. + * Locked `uuid` dependency to `3.4.0`. + +## 8.1.0 - (June 22, 2022) + +* Changed + * Minor dependency version bump + +## 8.0.1 - (June 7, 2022) + +* Changed + * updated `terra-application` version in peer dependency. + +## 8.0.0 - (May 31, 2022) + +* Breaking + * Dropped v2-v4 react-intl support + +--- + ## 7.13.0 - (April 23, 2024) * Added diff --git a/packages/terra-polyfill/CHANGELOG.md b/packages/terra-polyfill/CHANGELOG.md index 64d252b0b..bc89e0a7c 100644 --- a/packages/terra-polyfill/CHANGELOG.md +++ b/packages/terra-polyfill/CHANGELOG.md @@ -2,6 +2,17 @@ ## Unreleased +## 1.4.0 - (June 22, 2022) + +* Changed + * updated condition statement added to check `inert` polyfill is required. + * updated `wicg-inert` to latest version. + +## 1.3.0 - (June 7, 2022) + +* Added + * Added `@formatjs/intl-datetimeformat` polyfill to support date-time functions in ie 10. + ## 1.2.0 - (February 14, 2022) * Changed From 9ba9803c6b44711c038e1f63cb1ef83c6e34e0ef Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:55:58 -0500 Subject: [PATCH 07/34] updated terra-application-docs package.json --- packages/terra-application-docs/package.json | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/terra-application-docs/package.json b/packages/terra-application-docs/package.json index 6dcbc05ba..d5ff044f6 100644 --- a/packages/terra-application-docs/package.json +++ b/packages/terra-application-docs/package.json @@ -1,6 +1,6 @@ { "name": "@cerner/terra-application-docs", - "version": "2.14.0", + "version": "3.1.0", "description": "Contains documentation for packages in the terra-application monorepo", "author": "Cerner Corporation", "repository": { @@ -22,7 +22,7 @@ "access": "public" }, "engines": { - "node": ">=10.13.0" + "node": "14" }, "main": "index.js", "files": [ @@ -44,11 +44,8 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2 || 3 || 4 || 5", - "terra-application": "1" - }, - "devDependencies": { - "terra-application": "^1.58.0" + "react-intl": "5", + "terra-application": "2" }, "scripts": { "compile": "babel --root-mode upward src --out-dir lib --copy-files", From 6f054a3499164d3d76a3cf4edaf557d1c086709e Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:56:30 -0500 Subject: [PATCH 08/34] updated terra-application-docs package.json --- packages/terra-application-docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/terra-application-docs/package.json b/packages/terra-application-docs/package.json index d5ff044f6..098bbef65 100644 --- a/packages/terra-application-docs/package.json +++ b/packages/terra-application-docs/package.json @@ -30,7 +30,7 @@ "src" ], "dependencies": { - "@cerner/terra-dev-site": "^7.13.0", + "@cerner/terra-dev-site": "8", "@cerner/terra-docs": "1", "classnames": "2", "prop-types": "15", From a8b047e033eebcc14e9d0f0dbfacbfa40d4dbad7 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 10:00:05 -0500 Subject: [PATCH 09/34] updated terra-application package.json --- packages/terra-application/package.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/terra-application/package.json b/packages/terra-application/package.json index 1f64f87a3..761b6252e 100644 --- a/packages/terra-application/package.json +++ b/packages/terra-application/package.json @@ -1,6 +1,6 @@ { "name": "terra-application", - "version": "1.58.0", + "version": "2.1.0", "description": "A framework to support application development with Terra components", "author": "Cerner Corporation", "repository": { @@ -30,9 +30,12 @@ ], "dependencies": { "@cerner/terra-docs": "1", + "@formatjs/intl-relativetimeformat": "8", "classnames": "2", "eventemitter3": "4", "focus-trap-react": "6", + "intl": "1", + "intl-locales-supported": ">=1.8.4 <1.8.12 || ^1.8.13", "keycode-js": "3", "lodash.debounce": "4", "mutationobserver-shim": "<=0.3.3", @@ -43,7 +46,6 @@ "terra-action-footer": "2", "terra-action-header": "2", "terra-avatar": "3", - "terra-base": "5", "terra-breakpoints": "2", "terra-button": "3", "terra-collapsible-menu-view": "6", @@ -69,7 +71,7 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2" + "react-intl": "5" }, "scripts": { "compile": "babel --root-mode upward src --out-dir lib --copy-files", From 67d6d5cc43351844620caebd5508598995a21613 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 10:02:14 -0500 Subject: [PATCH 10/34] updated examples --- .../secondary-navigation-layout/side-nav/SideNavHeader.jsx | 4 ++-- packages/terra-dev-site/src/pages/page/PageHeader.jsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/SideNavHeader.jsx b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/SideNavHeader.jsx index 07f88b6ff..53b1ed209 100644 --- a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/SideNavHeader.jsx +++ b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/SideNavHeader.jsx @@ -4,7 +4,7 @@ import classNames from 'classnames/bind'; import Button, { ButtonVariants } from 'terra-button'; import IconLeft from 'terra-icon/lib/icon/IconLeft'; import { ThemeContext } from 'terra-application/lib/theme'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import styles from './SideNavHeader.module.scss'; @@ -26,7 +26,7 @@ const SideNavHeader = ({ onRequestClose, label, }) => { const theme = React.useContext(ThemeContext); - const applicationIntl = React.useContext(ApplicationIntlContext); + const applicationIntl = useIntl(); return (
    diff --git a/packages/terra-dev-site/src/pages/page/PageHeader.jsx b/packages/terra-dev-site/src/pages/page/PageHeader.jsx index 0c5f08557..c7579b6d8 100644 --- a/packages/terra-dev-site/src/pages/page/PageHeader.jsx +++ b/packages/terra-dev-site/src/pages/page/PageHeader.jsx @@ -7,7 +7,7 @@ import Popup from 'terra-popup'; import ThemeContext from 'terra-theme-context'; import ActionMenu, { ActionMenuItem } from 'terra-application/lib/action-menu'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; +import { useIntl } from 'react-intl'; import useElementSize, { breakpointFilter } from '../../shared/useElementSize'; import PageContainerContext from '../../layouts/page-container/PageContainerContext'; @@ -37,7 +37,7 @@ const propTypes = { const PageHeader = ({ actions, label, onSelectBack, }) => { - const intl = React.useContext(ApplicationIntlContext); + const intl = useIntl(); const pageContainerContext = React.useContext(PageContainerContext); const theme = React.useContext(ThemeContext); From 8a3e1f8537c46969a3c3e376565611b3efec117b Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 10:46:13 -0500 Subject: [PATCH 11/34] update package-lock --- package-lock.json | 57 ++++++---------------------- packages/terra-dev-site/package.json | 4 +- 2 files changed, 14 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 26a9adb78..36a806655 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36389,13 +36389,16 @@ } }, "packages/terra-application": { - "version": "1.58.0", + "version": "2.1.0", "license": "Apache-2.0", "dependencies": { "@cerner/terra-docs": "1", + "@formatjs/intl-relativetimeformat": "8", "classnames": "2", "eventemitter3": "4", "focus-trap-react": "6", + "intl": "1", + "intl-locales-supported": ">=1.8.4 <1.8.12 || ^1.8.13", "keycode-js": "3", "lodash.debounce": "4", "mutationobserver-shim": "<=0.3.3", @@ -36406,7 +36409,6 @@ "terra-action-footer": "2", "terra-action-header": "2", "terra-avatar": "3", - "terra-base": "5", "terra-breakpoints": "2", "terra-button": "3", "terra-collapsible-menu-view": "6", @@ -36435,15 +36437,15 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2" + "react-intl": "5" } }, "packages/terra-application-docs": { "name": "@cerner/terra-application-docs", - "version": "2.14.0", + "version": "3.1.0", "license": "Apache-2.0", "dependencies": { - "@cerner/terra-dev-site": "^7.13.0", + "@cerner/terra-dev-site": "8", "@cerner/terra-docs": "1", "classnames": "2", "prop-types": "15", @@ -36454,54 +36456,19 @@ "terra-mixins": "1", "terra-toolbar": "1" }, - "devDependencies": { - "terra-application": "^1.58.0" - }, "engines": { - "node": ">=10.13.0" + "node": "14" }, "peerDependencies": { "react": "16", "react-dom": "16", - "react-intl": "2 || 3 || 4 || 5", - "terra-application": "1" - } - }, - "packages/terra-application/node_modules/terra-base": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/terra-base/-/terra-base-5.53.0.tgz", - "integrity": "sha512-hIXcwrUfwI2dWxrsIRxwKxQ2FJI2/d69DULxBOx3eOtDkMdL1kHg8zHq/y2ImJNa2fcMSppF2T7u3hWnRk1gdg==", - "dependencies": { - "classnames": "^2.2.5", - "prop-types": "^15.5.8", - "terra-i18n": "^4.42.0" - }, - "peerDependencies": { - "react": "^16.8.5", - "react-dom": "^16.8.5", - "react-intl": "^2.8.0", - "terra-theme-provider": "^4.16.0" - } - }, - "packages/terra-application/node_modules/terra-base/node_modules/terra-i18n": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/terra-i18n/-/terra-i18n-4.42.0.tgz", - "integrity": "sha512-HkJr7nClsMvL9NttL7FGeNziFIJ4Syvwi/rqTHY93ZoVS/7Luu5sk45AwQci4Nnx/jTJ919LW5QaeKP6/KJRvQ==", - "dependencies": { - "classnames": "^2.2.5", - "intl": "^1.2.5", - "intl-locales-supported": ">=1.8.4 <1.8.12 || ^1.8.13", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^16.8.5", - "react-dom": "^16.8.5", - "react-intl": "^2.8.0" + "react-intl": "5", + "terra-application": "2" } }, "packages/terra-dev-site": { "name": "@cerner/terra-dev-site", - "version": "7.13.0", + "version": "8.1.0", "license": "Apache-2.0", "dependencies": { "@cerner/terra-polyfill": "^1.3.0", @@ -36549,7 +36516,7 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "terra-application": "1", + "terra-application": "2", "webpack": "4 || 5" } }, diff --git a/packages/terra-dev-site/package.json b/packages/terra-dev-site/package.json index fa392e318..bf559ffd1 100644 --- a/packages/terra-dev-site/package.json +++ b/packages/terra-dev-site/package.json @@ -1,6 +1,6 @@ { "name": "@cerner/terra-dev-site", - "version": "7.13.0", + "version": "8.1.0", "description": "Dynamically builds a react-hash-routed site based on site configuration, navigation configuration and component configuration.", "author": "Cerner Corporation", "repository": { @@ -74,7 +74,7 @@ "peerDependencies": { "react": "16", "react-dom": "16", - "terra-application": "1", + "terra-application": "2", "webpack": "4 || 5" }, "scripts": { From e2e39ce7fc3513deed54d004c63d9729dc48620a Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:44:47 -0500 Subject: [PATCH 12/34] fix enzyme import --- jest.enzymeSetup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.enzymeSetup.js b/jest.enzymeSetup.js index 98fff39c0..fea2b5170 100644 --- a/jest.enzymeSetup.js +++ b/jest.enzymeSetup.js @@ -2,7 +2,7 @@ /* eslint-disable import/no-extraneous-dependencies */ /* eslint-disable object-curly-newline */ import Enzyme, { mount, render, shallow } from 'enzyme'; -import { mockIntl, mountWithIntl, renderWithIntl, shallowWithIntl } from 'terra-enzyme-intl'; +import { mockIntl, mountWithIntl, renderWithIntl, shallowWithIntl } from '@cerner/terra-enzyme-intl'; import Adapter from 'enzyme-adapter-react-16'; Enzyme.configure({ adapter: new Adapter() }); From 0b8bf4a39273fc7c1f5c8b70296a017047ef66cc Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:51:59 -0500 Subject: [PATCH 13/34] updated snapshots --- ...SelectLogout_called_on_clicking_logout.png | Bin 20931 -> 33257 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/terra-application/tests/wdio/application-navigation/private/__snapshots__/reference/terra-default-theme/en/chrome_large/application-navigation-spec/utilities_display_properly_and_onSelectLogout_called_on_clicking_logout.png b/packages/terra-application/tests/wdio/application-navigation/private/__snapshots__/reference/terra-default-theme/en/chrome_large/application-navigation-spec/utilities_display_properly_and_onSelectLogout_called_on_clicking_logout.png index 44b123fd1f675845887576ecadc5acd0e5124f61..677c71b0bbd3a5efa857538860a518ea2c1c8cbf 100644 GIT binary patch literal 33257 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 QV6$s7l8P^i#0}p6570i0m;e9( From 2c7b0e1fef39351bd55f1f84f61569799ecdb213 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 13:52:30 -0500 Subject: [PATCH 14/34] linter ixes --- packages/terra-application/tests/jest/MockApplication.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/terra-application/tests/jest/MockApplication.jsx b/packages/terra-application/tests/jest/MockApplication.jsx index 184841909..70791ce0e 100644 --- a/packages/terra-application/tests/jest/MockApplication.jsx +++ b/packages/terra-application/tests/jest/MockApplication.jsx @@ -1,6 +1,5 @@ import React from 'react'; import { IntlProvider } from 'react-intl'; -import { mockIntl } from 'terra-enzyme-intl'; import { ApplicationIntlContext } from '../../src/application-intl'; /* eslint-disable react/prop-types */ From 78ca6129efec2045bccf140b3eff661dd27c44b2 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 13:53:04 -0500 Subject: [PATCH 15/34] linter fixes --- packages/terra-application/tests/jest/MockApplication.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/terra-application/tests/jest/MockApplication.jsx b/packages/terra-application/tests/jest/MockApplication.jsx index 70791ce0e..5aef5450e 100644 --- a/packages/terra-application/tests/jest/MockApplication.jsx +++ b/packages/terra-application/tests/jest/MockApplication.jsx @@ -6,7 +6,7 @@ import { ApplicationIntlContext } from '../../src/application-intl'; const MockApplication = ({ children }) => ( // eslint-disable-next-line compat/compat property })}> - + {children} From c31326f4f18fe56d7cbe512ce93a89f70c611830 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 14:03:32 -0500 Subject: [PATCH 16/34] fixed tests --- .../ApplicationErrorBoundary.test.jsx | 13 +++++++------ .../private/utility-menu/UtilityMenu.test.jsx | 14 +++++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx b/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx index e07fde3b6..c1f22c667 100644 --- a/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx +++ b/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx @@ -1,23 +1,24 @@ import React from 'react'; +import { shallowWithIntl, mountWithIntl } from '@cerner/terra-enzyme-intl'; import ApplicationErrorBoundary from '../../../src/application-error-boundary/ApplicationErrorBoundary'; import Logger from '../../../src/utils/logger'; describe('ApplicationErrorBoundary', () => { describe('Snapshots', () => { it('should render with minimal props', () => { - const wrapper = enzymeIntl.shallowWithIntl(( + const wrapper = shallowWithIntl(( - )); + )).dive(); expect(wrapper).toMatchSnapshot(); }); it('should render with children', () => { - const wrapper = enzymeIntl.shallowWithIntl(( + const wrapper = shallowWithIntl((

    Test child
    - )); + )).dive(); expect(wrapper).toMatchSnapshot(); }); @@ -26,7 +27,7 @@ describe('ApplicationErrorBoundary', () => { const spy = jest.spyOn(Logger, 'error').mockImplementation(() => {}); const ErrorComponent = () =>
    ; - const wrapper = enzymeIntl.mountWithIntl(( + const wrapper = mountWithIntl(( @@ -42,7 +43,7 @@ describe('ApplicationErrorBoundary', () => { /** * After rendering the component again, the error view should no longer be rendered. */ - wrapper.instance().forceUpdate(); + wrapper.setProps({}); expect(wrapper).toMatchSnapshot(); expect(spy).toHaveBeenCalledTimes(1); spy.mockRestore(); diff --git a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx index ee52353bf..a7b8063b7 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx +++ b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx @@ -1,20 +1,20 @@ import React from 'react'; /* eslint-disable-next-line import/no-extraneous-dependencies */ +import { mountWithIntl } from '@cerner/terra-enzyme-intl'; import UtilityMenu from '../../../../../src/application-navigation/private/utility-menu/_UtilityMenu'; describe('UtilityMenu', () => { it('should render default element', () => { - const mountComponent = enzymeIntl.mountWithIntl( - , + const mountComponent = mountWithIntl( + , ); expect(mountComponent).toMatchSnapshot(); }); it('should render with function callbacks', () => { - const mountComponent = enzymeIntl.mountWithIntl( - jest.fn()} + const mountComponent = mountWithIntl( + my test hero
    } userConfig={{ name: 'user-name', @@ -42,8 +42,8 @@ describe('UtilityMenu', () => { it('should render with skip callback', () => { const mockCallBack = jest.fn(); - const mountComponent = enzymeIntl.mountWithIntl( - , ); From a3f1666619a628bb6f9d74c3a1ac36e69251cddf Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 14:04:21 -0500 Subject: [PATCH 17/34] updated snapshots --- .../__snapshots__/ActionMenu.test.jsx.snap | 2 +- .../_ActionMenuHeader.test.jsx.snap | 131 +- .../ApplicationBase.test.jsx.snap | 229 +- .../ApplicationErrorBoundary.test.jsx | 7 +- .../ApplicationErrorBoundary.test.jsx.snap | 292 +-- .../ApplicationIntlProvider.test.jsx.snap | 58 +- .../ApplicationNavigation.test.jsx.snap | 8 +- .../ApplicationNavigation.test.jsx.snap | 117 +- .../__snapshots__/PopupMenu.test.jsx.snap | 6 +- .../__snapshots__/PopupMenuUser.test.jsx.snap | 2 +- .../DrawerMenuUser.test.jsx.snap | 15 +- .../__snapshots__/CompactHeader.test.jsx.snap | 403 ++- .../header/__snapshots__/Header.test.jsx.snap | 616 +++-- .../tabs/__snapshots__/Tab.test.jsx.snap | 2 +- .../__snapshots__/TabRollup.test.jsx.snap | 2 +- .../tabs/__snapshots__/Tabs.test.jsx.snap | 172 +- .../private/utility-menu/UtilityMenu.test.jsx | 7 +- .../__snapshots__/UtilityMenu.test.jsx.snap | 2312 +++++++++-------- .../UtilityMenuHeaderButton.test.jsx.snap | 202 +- .../DisclosureContainer.test.jsx.snap | 6 +- 20 files changed, 2195 insertions(+), 2394 deletions(-) diff --git a/packages/terra-application/tests/jest/action-menu/__snapshots__/ActionMenu.test.jsx.snap b/packages/terra-application/tests/jest/action-menu/__snapshots__/ActionMenu.test.jsx.snap index e9a4b7a78..b8e81bd79 100644 --- a/packages/terra-application/tests/jest/action-menu/__snapshots__/ActionMenu.test.jsx.snap +++ b/packages/terra-application/tests/jest/action-menu/__snapshots__/ActionMenu.test.jsx.snap @@ -6,7 +6,7 @@ exports[`ActionMenu should render with all props 1`] = ` className="action-container" fill={true} header={ - diff --git a/packages/terra-application/tests/jest/action-menu/__snapshots__/_ActionMenuHeader.test.jsx.snap b/packages/terra-application/tests/jest/action-menu/__snapshots__/_ActionMenuHeader.test.jsx.snap index 8625adc13..8ebdcb5ef 100644 --- a/packages/terra-application/tests/jest/action-menu/__snapshots__/_ActionMenuHeader.test.jsx.snap +++ b/packages/terra-application/tests/jest/action-menu/__snapshots__/_ActionMenuHeader.test.jsx.snap @@ -1,53 +1,92 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ActionMenuHeader should render with all props 1`] = ` -
    -
    - test label -
    -
    -
    -
    + `; exports[`ActionMenuHeader should render with minimal props 1`] = ` -
    -
    - test label -
    -
    -
    + `; diff --git a/packages/terra-application/tests/jest/application-base/__snapshots__/ApplicationBase.test.jsx.snap b/packages/terra-application/tests/jest/application-base/__snapshots__/ApplicationBase.test.jsx.snap index 6f1611cba..1f5b0718e 100644 --- a/packages/terra-application/tests/jest/application-base/__snapshots__/ApplicationBase.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-base/__snapshots__/ApplicationBase.test.jsx.snap @@ -1,228 +1,23 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ApplicationBase should render with all props 1`] = ` -
    - - - - placeholder -
    - } - > - - - - - - - - } - > -
    - content -
    -
    -
    -
    -
    -
    -
    -
    - - - -
    + `; exports[`ApplicationBase should render with minimal props 1`] = ` -
    - - - - - - - - - - - } - > -
    - content -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    + `; -exports[`ApplicationBase should render with the preferred browser local 1`] = ` -
    - - - - - - - - - - - } - > -
    - content -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -`; +exports[`ApplicationBase should render with the preferred browser locale 1`] = ``; exports[`ApplicationBase should render without scroll 1`] = ` -
    - - - - - - - - - - - } - > -
    - content -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    + `; diff --git a/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx b/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx index c1f22c667..996c2992f 100644 --- a/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx +++ b/packages/terra-application/tests/jest/application-error-boundary/ApplicationErrorBoundary.test.jsx @@ -1,12 +1,11 @@ import React from 'react'; -import { shallowWithIntl, mountWithIntl } from '@cerner/terra-enzyme-intl'; import ApplicationErrorBoundary from '../../../src/application-error-boundary/ApplicationErrorBoundary'; import Logger from '../../../src/utils/logger'; describe('ApplicationErrorBoundary', () => { describe('Snapshots', () => { it('should render with minimal props', () => { - const wrapper = shallowWithIntl(( + const wrapper = enzymeIntl.shallowWithIntl(( )).dive(); @@ -14,7 +13,7 @@ describe('ApplicationErrorBoundary', () => { }); it('should render with children', () => { - const wrapper = shallowWithIntl(( + const wrapper = enzymeIntl.shallowWithIntl((
    Test child
    @@ -27,7 +26,7 @@ describe('ApplicationErrorBoundary', () => { const spy = jest.spyOn(Logger, 'error').mockImplementation(() => {}); const ErrorComponent = () =>
    ; - const wrapper = mountWithIntl(( + const wrapper = enzymeIntl.mountWithIntl(( diff --git a/packages/terra-application/tests/jest/application-error-boundary/__snapshots__/ApplicationErrorBoundary.test.jsx.snap b/packages/terra-application/tests/jest/application-error-boundary/__snapshots__/ApplicationErrorBoundary.test.jsx.snap index 14c0d3fa2..e5a6841c3 100644 --- a/packages/terra-application/tests/jest/application-error-boundary/__snapshots__/ApplicationErrorBoundary.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-error-boundary/__snapshots__/ApplicationErrorBoundary.test.jsx.snap @@ -1,61 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ApplicationErrorBoundary Snapshots should render error view when an error is detected 1`] = ` - + @@ -63,65 +47,49 @@ exports[`ApplicationErrorBoundary Snapshots should render error view when an err
    - + `; exports[`ApplicationErrorBoundary Snapshots should render error view when an error is detected 2`] = ` - + @@ -156,11 +124,8 @@ exports[`ApplicationErrorBoundary Snapshots should render error view when an err > - - Terra.status-view.error - + Terra.status-view.error

    - + `; exports[`ApplicationErrorBoundary Snapshots should render error view when an error is detected 3`] = ` - + - -
    -
    -
    -
    -
    -
    -

    - - - Terra.status-view.error - - -

    -
    - -
    -
    -
    -

    - terraApplication.errorBoundary.defaultErrorMessage -

    -
    -
    -
    - + +
    + - + `; exports[`ApplicationErrorBoundary Snapshots should render with children 1`] = ` @@ -348,29 +254,41 @@ exports[`ApplicationErrorBoundary Snapshots should render with minimal props 1`] diff --git a/packages/terra-application/tests/jest/application-intl/__snapshots__/ApplicationIntlProvider.test.jsx.snap b/packages/terra-application/tests/jest/application-intl/__snapshots__/ApplicationIntlProvider.test.jsx.snap index 6d9e64fa3..b41d61f10 100644 --- a/packages/terra-application/tests/jest/application-intl/__snapshots__/ApplicationIntlProvider.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-intl/__snapshots__/ApplicationIntlProvider.test.jsx.snap @@ -1,61 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ApplicationIntlProvider Snapshots should render an ApplicationIntlContext.Provider 1`] = ` - + @@ -63,5 +47,5 @@ exports[`ApplicationIntlProvider Snapshots should render an ApplicationIntlConte Test Component
    - + `; diff --git a/packages/terra-application/tests/jest/application-navigation/__snapshots__/ApplicationNavigation.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/__snapshots__/ApplicationNavigation.test.jsx.snap index 4e0d1b117..fb48bf3af 100644 --- a/packages/terra-application/tests/jest/application-navigation/__snapshots__/ApplicationNavigation.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/__snapshots__/ApplicationNavigation.test.jsx.snap @@ -9,7 +9,7 @@ exports[`ApplicationNavigation should render default element 1`] = ` - + } /> - + @@ -99,7 +99,7 @@ exports[`ApplicationNavigation should render with all props 1`] = ` - + - + diff --git a/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap index e52c97759..276ddcacc 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap @@ -1,38 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ApplicationNavigation correctly applies the theme context className 1`] = ` - + -
    - +
    - - + @@ -306,7 +307,7 @@ exports[`ApplicationNavigation should render default element 1`] = `
    - - @@ -380,7 +380,7 @@ exports[`ApplicationNavigation should render with prop data at large breakpoint
    - - my test hero
    } - menuClosingCallback={[Function]} onSelectHelp={[Function]} onSelectLogout={[Function]} onSelectSettings={[Function]} @@ -562,14 +561,13 @@ exports[`ApplicationNavigation should render with prop data at medium breakpoint
    - my test hero
    } - menuClosingCallback={[Function]} navigationItems={ Array [ Object { @@ -619,7 +617,7 @@ exports[`ApplicationNavigation should render with prop data at medium breakpoint
    - - my test hero
    } - menuClosingCallback={[Function]} onSelectHelp={[Function]} onSelectLogout={[Function]} onSelectSettings={[Function]} diff --git a/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenu.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenu.test.jsx.snap index 325abee4e..baa3c3205 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenu.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenu.test.jsx.snap @@ -6,7 +6,7 @@ exports[`PopupMenu should render default element 1`] = ` fill={false} footer={} header={ - } @@ -51,7 +51,7 @@ exports[`PopupMenu should render prop data 1`] = ` /> } header={ - @@ -111,7 +111,7 @@ exports[`PopupMenu should render with height bounded 1`] = ` fill={true} footer={} header={ - diff --git a/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenuUser.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenuUser.test.jsx.snap index d93f869df..94935ea9e 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenuUser.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/common/__snapshots__/PopupMenuUser.test.jsx.snap @@ -10,7 +10,7 @@ exports[`PopupMenuUser should render default element 1`] = `
    - - @@ -63,7 +62,7 @@ exports[`DrawerMenuUser should render with large variant 1`] = `
    - @@ -113,7 +111,7 @@ exports[`DrawerMenuUser should render with small variant 1`] = `
    - diff --git a/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/CompactHeader.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/CompactHeader.test.jsx.snap index 7090a8a96..9f2c492b4 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/CompactHeader.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/CompactHeader.test.jsx.snap @@ -1,62 +1,46 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CompactHeader should render default element 1`] = ` - + - + `; exports[`CompactHeader should render title element 1`] = ` - - + `; exports[`CompactHeader should render with function callbacks 1`] = ` - - - +
      - + `; exports[`CompactHeader should render with ids for navigation and extension items 1`] = ` - - - +
      - + `; exports[`CompactHeader should render with menu callback 1`] = ` - - + `; exports[`CompactHeader should render with skip callback 1`] = ` - - + `; diff --git a/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/Header.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/Header.test.jsx.snap index 8744494ad..95edded34 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/Header.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/header/__snapshots__/Header.test.jsx.snap @@ -1,61 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Header should render default element 1`] = ` - +
      - + - +
    - + `; exports[`Header should render title element 1`] = ` - - + - +
    - + `; exports[`Header should render with function callbacks 1`] = ` - } - intl={ - Object { - "defaultFormats": Object {}, - "defaultLocale": "en", - "formatDate": [Function], - "formatHTMLMessage": [Function], - "formatMessage": [Function], - "formatNumber": [Function], - "formatPlural": [Function], - "formatRelative": [Function], - "formatTime": [Function], - "formats": Object {}, - "formatters": Object { - "getDateTimeFormat": [Function], - "getMessageFormat": [Function], - "getNumberFormat": [Function], - "getPluralFormat": [Function], - "getRelativeFormat": [Function], - }, - "locale": "en", - "messages": null, - "now": [Function], - "onError": [Function], - "textComponent": "span", - "timeZone": null, - } - } navigationItems={ Array [ Object { @@ -463,29 +429,41 @@ exports[`Header should render with function callbacks 1`] = ` } intl={ Object { + "$t": [Function], "defaultFormats": Object {}, "defaultLocale": "en", + "defaultRichTextElements": undefined, + "fallbackOnEmptyString": true, "formatDate": [Function], - "formatHTMLMessage": [Function], + "formatDateTimeRange": [Function], + "formatDateToParts": [Function], + "formatDisplayName": [Function], + "formatList": [Function], + "formatListToParts": [Function], "formatMessage": [Function], "formatNumber": [Function], + "formatNumberToParts": [Function], "formatPlural": [Function], - "formatRelative": [Function], + "formatRelativeTime": [Function], "formatTime": [Function], + "formatTimeToParts": [Function], "formats": Object {}, "formatters": Object { "getDateTimeFormat": [Function], + "getDisplayNames": [Function], + "getListFormat": [Function], "getMessageFormat": [Function], "getNumberFormat": [Function], - "getPluralFormat": [Function], - "getRelativeFormat": [Function], + "getPluralRules": [Function], + "getRelativeTimeFormat": [Function], }, "locale": "en", "messages": null, - "now": [Function], "onError": [Function], - "textComponent": "span", - "timeZone": null, + "onWarn": [Function], + "textComponent": Symbol(react.fragment), + "timeZone": undefined, + "wrapRichTextChunksInFragment": undefined, } } navigationItems={ @@ -582,7 +560,7 @@ exports[`Header should render with function callbacks 1`] = `
    - - +
    - - +
    - -
    - +
    - +
    - + `; exports[`Header should render with navigation and extension item ids 1`] = ` - } id="test-application" - intl={ - Object { - "defaultFormats": Object {}, - "defaultLocale": "en", - "formatDate": [Function], - "formatHTMLMessage": [Function], - "formatMessage": [Function], - "formatNumber": [Function], - "formatPlural": [Function], - "formatRelative": [Function], - "formatTime": [Function], - "formats": Object {}, - "formatters": Object { - "getDateTimeFormat": [Function], - "getMessageFormat": [Function], - "getNumberFormat": [Function], - "getPluralFormat": [Function], - "getRelativeFormat": [Function], - }, - "locale": "en", - "messages": null, - "now": [Function], - "onError": [Function], - "textComponent": "span", - "timeZone": null, - } - } navigationItems={ Array [ Object { @@ -1274,29 +1273,41 @@ exports[`Header should render with navigation and extension item ids 1`] = ` id="test-application" intl={ Object { + "$t": [Function], "defaultFormats": Object {}, "defaultLocale": "en", + "defaultRichTextElements": undefined, + "fallbackOnEmptyString": true, "formatDate": [Function], - "formatHTMLMessage": [Function], + "formatDateTimeRange": [Function], + "formatDateToParts": [Function], + "formatDisplayName": [Function], + "formatList": [Function], + "formatListToParts": [Function], "formatMessage": [Function], "formatNumber": [Function], + "formatNumberToParts": [Function], "formatPlural": [Function], - "formatRelative": [Function], + "formatRelativeTime": [Function], "formatTime": [Function], + "formatTimeToParts": [Function], "formats": Object {}, "formatters": Object { "getDateTimeFormat": [Function], + "getDisplayNames": [Function], + "getListFormat": [Function], "getMessageFormat": [Function], "getNumberFormat": [Function], - "getPluralFormat": [Function], - "getRelativeFormat": [Function], + "getPluralRules": [Function], + "getRelativeTimeFormat": [Function], }, "locale": "en", "messages": null, - "now": [Function], "onError": [Function], - "textComponent": "span", - "timeZone": null, + "onWarn": [Function], + "textComponent": Symbol(react.fragment), + "timeZone": undefined, + "wrapRichTextChunksInFragment": undefined, } } navigationItems={ @@ -1393,7 +1404,7 @@ exports[`Header should render with navigation and extension item ids 1`] = `
    - - +
    - - +
    - -
    - +
    - +
    - + `; exports[`Header should render with skip callback 1`] = ` -
    - + - +
    - + `; diff --git a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tab.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tab.test.jsx.snap index 186ea7380..34d5535b8 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tab.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tab.test.jsx.snap @@ -26,7 +26,7 @@ exports[`Tab should render prop data 1`] = ` - diff --git a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/TabRollup.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/TabRollup.test.jsx.snap index e3f7ccbbe..5b6c055f3 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/TabRollup.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/TabRollup.test.jsx.snap @@ -65,7 +65,7 @@ exports[`TabRollup should render prop data 1`] = ` - diff --git a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tabs.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tabs.test.jsx.snap index 6723f091f..12189c3d4 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tabs.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/tabs/__snapshots__/Tabs.test.jsx.snap @@ -1,61 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Tabs should render default element 1`] = ` - + - + `; exports[`Tabs should render prop data 1`] = ` - - + `; exports[`Tabs should render with hasCount set to true when notifications are set to 0 1`] = ` - - + `; diff --git a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx index a7b8063b7..c4cba4863 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx +++ b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/UtilityMenu.test.jsx @@ -1,11 +1,10 @@ import React from 'react'; /* eslint-disable-next-line import/no-extraneous-dependencies */ -import { mountWithIntl } from '@cerner/terra-enzyme-intl'; import UtilityMenu from '../../../../../src/application-navigation/private/utility-menu/_UtilityMenu'; describe('UtilityMenu', () => { it('should render default element', () => { - const mountComponent = mountWithIntl( + const mountComponent = enzymeIntl.mountWithIntl( , ); @@ -13,7 +12,7 @@ describe('UtilityMenu', () => { }); it('should render with function callbacks', () => { - const mountComponent = mountWithIntl( + const mountComponent = enzymeIntl.mountWithIntl( my test hero
    } userConfig={{ @@ -42,7 +41,7 @@ describe('UtilityMenu', () => { it('should render with skip callback', () => { const mockCallBack = jest.fn(); - const mountComponent = mountWithIntl( + const mountComponent = enzymeIntl.mountWithIntl( , diff --git a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenu.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenu.test.jsx.snap index c10ecf26f..f603c0232 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenu.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenu.test.jsx.snap @@ -1,285 +1,295 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`UtilityMenu should render default element 1`] = ` - + - - } - header={ - - } - setFocusOnContainer={false} + -
    } + header={ + + } + setFocusOnContainer={false} >
    - - - - -
    -

    - terraApplication.navigation.utilityMenu.headerTitle -

    +

    + terraApplication.navigation.utilityMenu.headerTitle +

    +
    -
    -
    - - - Terra.actionHeader.close.description - - - - + Terra.actionHeader.close.description + + + - Terra.actionHeader.maximize.description - - - - + Terra.actionHeader.maximize.description + + + - Terra.actionHeader.minimize.description - - + + Terra.actionHeader.minimize.description + + +
    -
    - - - -
    -
    -
    - + + + +
    +
    -
    -
      +
      +
        +
    -
    - -
    -
    - - -
    - - + +
    +
    + + +
    + + +
    -
    - - - + + + + `; exports[`UtilityMenu should render with function callbacks 1`] = ` - my test hero
    } - intl={ - Object { - "defaultFormats": Object {}, - "defaultLocale": "en", - "formatDate": [Function], - "formatHTMLMessage": [Function], - "formatMessage": [Function], - "formatNumber": [Function], - "formatPlural": [Function], - "formatRelative": [Function], - "formatTime": [Function], - "formats": Object {}, - "formatters": Object { - "getDateTimeFormat": [Function], - "getMessageFormat": [Function], - "getNumberFormat": [Function], - "getPluralFormat": [Function], - "getRelativeFormat": [Function], - }, - "locale": "en", - "messages": null, - "now": [Function], - "onError": [Function], - "textComponent": "span", - "timeZone": null, - } - } - menuClosingCallback={[Function]} onSelectHelp={[MockFunction]} onSelectLogout={[MockFunction]} onSelectSettings={[MockFunction]} @@ -314,61 +324,55 @@ exports[`UtilityMenu should render with function callbacks 1`] = ` ] } > - my test hero
    } - footerText="terraApplication.navigation.utilityMenu.logout" - isHeightBounded={false} - menuClosingCallback={[Function]} - menuItems={ - Array [ - Object { - "dataAttrs": undefined, - "icon": - my icon - , - "id": undefined, - "key": "my-test-key-2", - "metaData": Object { - "meta": "metaData", - }, - "text": "test-text-2", - }, - Object { - "dataAttrs": Object { - "data-navigation-utility-item-settings": "true", - }, - "icon": , - "id": undefined, - "key": "terra-application-navigation.utility-menu.settings", - "text": "terraApplication.navigation.utilityMenu.settings", - }, - Object { - "dataAttrs": Object { - "data-navigation-utility-item-help": "true", - }, - "icon": , - "id": undefined, - "key": "terra-application-navigation.utility-menu.help", - "text": "terraApplication.navigation.utilityMenu.help", + intl={ + Object { + "$t": [Function], + "defaultFormats": Object {}, + "defaultLocale": "en", + "defaultRichTextElements": undefined, + "fallbackOnEmptyString": true, + "formatDate": [Function], + "formatDateTimeRange": [Function], + "formatDateToParts": [Function], + "formatDisplayName": [Function], + "formatList": [Function], + "formatListToParts": [Function], + "formatMessage": [Function], + "formatNumber": [Function], + "formatNumberToParts": [Function], + "formatPlural": [Function], + "formatRelativeTime": [Function], + "formatTime": [Function], + "formatTimeToParts": [Function], + "formats": Object {}, + "formatters": Object { + "getDateTimeFormat": [Function], + "getDisplayNames": [Function], + "getListFormat": [Function], + "getMessageFormat": [Function], + "getNumberFormat": [Function], + "getPluralRules": [Function], + "getRelativeTimeFormat": [Function], }, - ] + "locale": "en", + "messages": null, + "onError": [Function], + "onWarn": [Function], + "textComponent": Symbol(react.fragment), + "timeZone": undefined, + "wrapRichTextChunksInFragment": undefined, + } } - onSelectFooterItem={[MockFunction]} - onSelectMenuItem={[Function]} - role="listbox" - showSelections={false} - title="terraApplication.navigation.utilityMenu.headerTitle" + onSelectHelp={[MockFunction]} + onSelectLogout={[MockFunction]} + onSelectSettings={[MockFunction]} + onSelectUtilityItem={[MockFunction]} userActionConfig={ Object { "text": "Edit Photo", @@ -383,293 +387,432 @@ exports[`UtilityMenu should render with function callbacks 1`] = ` "name": "user-name", } } + utilityItems={ + Array [ + Object { + "icon": + my icon + , + "id": "test-utility-2-id", + "key": "my-test-key-2", + "metaData": Object { + "meta": "metaData", + }, + "text": "test-text-2", + }, + ] + } > - - } - /> + + my test hero +
    + } + footerText="terraApplication.navigation.utilityMenu.logout" + isHeightBounded={false} + menuItems={ + Array [ + Object { + "dataAttrs": undefined, + "icon": + my icon + , + "id": undefined, + "key": "my-test-key-2", + "metaData": Object { + "meta": "metaData", + }, + "text": "test-text-2", + }, + Object { + "dataAttrs": Object { + "data-navigation-utility-item-settings": "true", + }, + "icon": , + "id": undefined, + "key": "terra-application-navigation.utility-menu.settings", + "text": "terraApplication.navigation.utilityMenu.settings", + }, + Object { + "dataAttrs": Object { + "data-navigation-utility-item-help": "true", + }, + "icon": , + "id": undefined, + "key": "terra-application-navigation.utility-menu.help", + "text": "terraApplication.navigation.utilityMenu.help", + }, + ] } - header={ - + onSelectFooterItem={[MockFunction]} + onSelectMenuItem={[Function]} + role="listbox" + showSelections={false} + title="terraApplication.navigation.utilityMenu.headerTitle" + userActionConfig={ + Object { + "text": "Edit Photo", + "userActionCallback": [Function], + } + } + userConfig={ + Object { + "detail": "user-detail", + "imageSrc": "user-src", + "initials": "user-initials", + "name": "user-name", + } } - setFocusOnContainer={false} > -
    + } + /> + } + header={ + + } + setFocusOnContainer={false} >
    - - - - -
    -

    - terraApplication.navigation.utilityMenu.headerTitle -

    +

    + terraApplication.navigation.utilityMenu.headerTitle +

    +
    -
    -
    - - - Terra.actionHeader.close.description - - - - + Terra.actionHeader.close.description + + + - Terra.actionHeader.maximize.description - - - - + Terra.actionHeader.maximize.description + + + - Terra.actionHeader.minimize.description - - + + Terra.actionHeader.minimize.description + + +
    -
    - - - -
    - -
    - + + + +
    +
    -
    -
    - my test hero +
    +
    + my test hero +
    -
    - -
    - - + -
    - user-name + user-name + US + + } + src="user-src" + variant="default" + > + user-name US - } - src="user-src" - variant="default" - > - user-name - - US - - -
    -
    -
    -
    -
    -
    - user-name + +
    + +
    - user-detail -
    -
    +
    + user-detail +
    + - + + +
    -
    - -
      - - my icon - - } - key="my-test-key-2" - loopFocus={[Function]} - onSelect={[Function]} - parentRole="listbox" - showSelections={false} - text="test-text-2" + +
        -
      • -
        + my icon -
        -
        - test-text-2 -
        - +
      • - 0 + + my icon +
        - -
      • - - - } - key="terra-application-navigation.utility-menu.settings" - loopFocus={[Function]} - onSelect={[Function]} - parentRole="listbox" - showSelections={false} - text="terraApplication.navigation.utilityMenu.settings" - > -
      • + test-text-2 +
    + +
    + 0 +
    +
    + + + -
    + icon={ + } + key="terra-application-navigation.utility-menu.settings" + loopFocus={[Function]} + onSelect={[Function]} + parentRole="listbox" + showSelections={false} + text="terraApplication.navigation.utilityMenu.settings" + > +
  • +
    - - - - - - -
    -
    - terraApplication.navigation.utilityMenu.settings -
    - + + + + + +
  • - 0 + terraApplication.navigation.utilityMenu.settings
    - - -
    - - } - key="terra-application-navigation.utility-menu.help" - loopFocus={[Function]} - onSelect={[Function]} - parentRole="listbox" - showSelections={false} - text="terraApplication.navigation.utilityMenu.help" - > -
  • +
    + 0 +
    + +
  • +
    + -
    + icon={ + } + key="terra-application-navigation.utility-menu.help" + loopFocus={[Function]} + onSelect={[Function]} + parentRole="listbox" + showSelections={false} + text="terraApplication.navigation.utilityMenu.help" + > +
  • +
    - - - - - - -
    -
    - terraApplication.navigation.utilityMenu.help -
    - + + + + + +
  • - 0 + terraApplication.navigation.utilityMenu.help
    - - -
    -
+ +
+ 0 +
+
+ + + + - - - -
- - } + +
+
- + } > -
- - + + +
-
- - + + + - - - -
+ + + + `; exports[`UtilityMenu should render with skip callback 1`] = ` - - - - } - /> - } - header={ - + + -
+ } + /> + } + header={ + + } + setFocusOnContainer={false} >
- - - - -
-

- terraApplication.navigation.utilityMenu.headerTitle -

+

+ terraApplication.navigation.utilityMenu.headerTitle +

+
-
-
- - - Terra.actionHeader.close.description - - - - + Terra.actionHeader.close.description + + + - Terra.actionHeader.maximize.description - - - - + Terra.actionHeader.maximize.description + + + - Terra.actionHeader.minimize.description - - + + Terra.actionHeader.minimize.description + + +
-
- - - -
- -
- + + + +
+
-
-
    +
    +
      +
-
- -
-
- - } + +
+
- + } > -
- - + + +
-
- - + + + - -
-
-
+ + + + `; diff --git a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenuHeaderButton.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenuHeaderButton.test.jsx.snap index 7744e1bd4..b7b785359 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenuHeaderButton.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/utility-menu/__snapshots__/UtilityMenuHeaderButton.test.jsx.snap @@ -1,61 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`UtilityMenuHeaderButton should render default element 1`] = ` - + @@ -106,66 +90,51 @@ exports[`UtilityMenuHeaderButton should render default element 1`] = ` - + `; exports[`UtilityMenuHeaderButton should render with click callback 1`] = ` - - + `; exports[`UtilityMenuHeaderButton should render with function callbacks 1`] = ` - - - +
-
+ `; diff --git a/packages/terra-application/tests/jest/disclosure-manager/__snapshots__/DisclosureContainer.test.jsx.snap b/packages/terra-application/tests/jest/disclosure-manager/__snapshots__/DisclosureContainer.test.jsx.snap index c254dd6e9..472bd4ebf 100644 --- a/packages/terra-application/tests/jest/disclosure-manager/__snapshots__/DisclosureContainer.test.jsx.snap +++ b/packages/terra-application/tests/jest/disclosure-manager/__snapshots__/DisclosureContainer.test.jsx.snap @@ -8,12 +8,12 @@ exports[`DisclosureContainer should render the provided children 1`] = ` } } > - + } + header={} setFocusOnContainer={false} > @@ -24,6 +24,6 @@ exports[`DisclosureContainer should render the provided children 1`] = ` - + `; From faf137f93ee13e7db8df078ec05f36e69ff85e9a Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:15:59 -0500 Subject: [PATCH 18/34] updated wdio test --- .../ApplicationNavigation.test.jsx | 12 ++++++------ ...SelectLogout_called_on_clicking_logout.png | Bin 33257 -> 20931 bytes 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx index f2a1360fe..1499d643b 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/application-navigation/ApplicationNavigation.test.jsx @@ -14,12 +14,6 @@ const userConfig = { initials: 'TN', }; -const userActionConfig = { - text: 'Edit Photo', - // eslint-disable-next-line no-console - userActionCallback: () => console.log('Button Clicked'), -}; - const extensionItems = [ { icon: , @@ -141,6 +135,12 @@ function ApplicationNavigationTest() { const [isDrawerOpen, setDrawerOpen] = useState(false); const [functionType, setFunctionType] = useState(''); + const userActionConfig = { + text: 'Edit Photo', + // eslint-disable-next-line no-alert + userActionCallback: () => setFunctionType('userActionButton was clicked'), + }; + /* eslint-disable no-alert */ const handleItemSelection = (key, metaData) => { alert(`itemKey: ${key}, metaData: ${metaData.test}`); diff --git a/packages/terra-application/tests/wdio/application-navigation/private/__snapshots__/reference/terra-default-theme/en/chrome_large/application-navigation-spec/utilities_display_properly_and_onSelectLogout_called_on_clicking_logout.png b/packages/terra-application/tests/wdio/application-navigation/private/__snapshots__/reference/terra-default-theme/en/chrome_large/application-navigation-spec/utilities_display_properly_and_onSelectLogout_called_on_clicking_logout.png index 677c71b0bbd3a5efa857538860a518ea2c1c8cbf..44b123fd1f675845887576ecadc5acd0e5124f61 100644 GIT binary patch literal 20931 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 QV6$s7l8P^i#0}p6570i0m;e9( literal 33257 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 Date: Thu, 25 Apr 2024 16:35:44 -0500 Subject: [PATCH 19/34] wdio fixes --- .../private/ApplicationNavigation.jsx | 2 ++ .../Popup_menu_Closed.png | Bin 19133 -> 34386 bytes .../Popup_menu_Closed.png | Bin 18275 -> 31962 bytes .../Popup_menu_Closed.png | Bin 21186 -> 37138 bytes .../private/application-navigation-spec.js | 5 +++-- 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx b/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx index f3c5b2dfa..c18330b24 100644 --- a/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx +++ b/packages/terra-application/src/application-navigation/private/ApplicationNavigation.jsx @@ -238,6 +238,7 @@ const ApplicationNavigation = ({ className={cx('drawer-menu-focus-trap-container')} > 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

@&B{!p5 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 b0t}T`)UqQH$H^8*pwv*+IiLBv#r^*SCo_+8 literal 19133 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

f(ezG09x|?s0 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 E0>VV%*#H0l literal 18275 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 literal 21186 zcmeIZXH-*b*EVX|f+9r)r3xa_L~5wg6cm(R6r}fnbOO>LD$+rEuY!Pz^ct$v03j6V zU0MRtJAnY-o&D^+pLd*b&KU1FXN>b}{}7j9t(ANB>zZ>KtfnGQMnXq&?%X-D=g*#K zoI7`M3H&*CnFxGRRjz#X+&PWl=T9ELa6iA=bk!KWcXqgiJzib)eN%;qm~?JjkV^3O zpS)TU3tN^ua@Bn9k{x@uhQlqG&y6(!VT2@|nEWUNrC#-&>G3%8*_EEzXgF5CuT;lK zk;6!rf8FgS)7kiEBHka_18U_OiAv;|R9y?_6h8g;f=!Jrw)1?fOp;QjQlb)@AW2N; zho;X|nd%Ck&c$fFmE-i6$&S51#ug*blu>!hOO&MbPbBcOuOdMdy0VLdcu` zzBc_|TwDBekIZEgnaK*lOf@U?O_K1(pDKu`G7$=X&4eEp%87EQlDVj?1T(7@-pM(~ z0jbCo&g)(z5#-3}d#j=UNu5J5^IUj)CU^>b+D8{FWAli!P$N?)^IQSH6&XQ9pg8rn zM6m=Nf=AwhH(H@z(ovBB!RgR&4u3hn3uGKrx_&b6i2NTr$6?L}Xv&A*%3LJzAJ)&g zE_0dr!!?ME{7`feA`QfPn?h5fv3aeI3M}RoTqEM3684GdC5u* zFUMIvocYKm{6aZ~#9uD^9QXq8y_xDE`LW<^9FJ@YeZ8VGb%QH4;HODyu@ZOwLD~zS(>nIp@NgGu6R|{@4C< zM*WN{P9s0xULdFvD20rpFFC&)bDu1POOWt52awka*t}ikPc@<)fR|jNi`AfsB?#aT zvkf)uJ*5!4A3AOp?{MCa@SO0Wu_BLPM$&%J}b31k2Q zt8w&Yf>VQ!9m@YSO6Gb0_DsT4{})ACQ4xg$m8k)9R4V|35#A%12@d$5(}t(XIK=^5 zUDCa%06gN7t_>+L(5DJH@CdMY>;*vua7A$ROS;Z+1e1~}n5cng6*x&1I0fl0Sqc7W zKA}wD+-f2De@g!N(;-EHIym7uAaI|RS|&n<@XdZ8j)2xk`mCrL)&I2iW#-nsr0Z@4 zgV|o!+-_0+N4I1rnw20cP!O{)NCeN33 zV%>KQR=aNPEHr18P~A#NltVNznQG_Q^7nN6`Zqst3VuQV@KUYrO$BHC3N_~giHGlM zSfpDDO#)BwZz$zMvI-bSW9re$*)k zj?&Yj(WY{L3(38>YSo@A#3Zb|!IC(Q6>r-eP>PpnJd|na=`8K5bYWT<6UN zPtc$U9}21siGbT__)!~kXV-sv@1~@yp?%M1DCW+oj)Xy)N3pt)XXO`V-=sd(lfikuaQJV6h+2Q)EpGas1>%&nJf^>H$Kz^`kiU^bJk;til6{Qp$g?eO7~(f=UpQ&8Q!O#PKLYWgRbcnN#}Qx z*BfE$8uzoT7BPBb0?V&Sa|<0dwUho)gFNk28S5HdEDL0VG-?a=>iVtDEZI&P{oA4H z?PWxg|vhS0Ced{>OtH>&ps#)$bT2s@_}3Ps?#WHA(VF5KE~}DGRRc z*Bux<n=OxJ2{*DAo5`Bq`k3R8 zU-Oq=uG{IcNuuMQtM15$c-6qH+MgL7Hb{=)p5p^GMmY=AbWQT8&Z5#XI-El9FjbIc+}pV7J(=Jov|ORX?gjzQET zeL3Hak^#!hEOxv0rxfEKu2vn`eAg(4ivI}LD*d?arxdC6%-g_}k=FjEch#Q-eM!VR z5A-4;W7FH#Fl+10Tqol{YgAZoL_=N`9pz=G+{H*Uk2RFzO+87KT(;D}Vt+h#$}M!TG+n2g)U z>w_lpPHf5!Yk{d686Ki}164HDQflHj*O%M9LaU-<5_$_>%*-UvZ=pU7;9*OGmny#M zCC#PV*HyW5iFx4gQAei@K{i*D52>c~2AOB9TO#9Pkf$9+v=B&8kkLFMO?RlE`F+W| z52+GJ7D|j`5j~As27kR?RDwf`amARZ8^3?i@P-+(gu|Y?%rBVQv;4DW%QsQ+P|bITAeuWckz;QT1pwzXBd z22|)&^v$sFUZ~-ks(r)F+7AmZT5I9P>%7cV{tx52Hm4FB>Lkyog&7~V)!VKtm{f}< zm%I*V7J>v$%{Fe2bs2oNSahsiO%%8gqd_I;xJ~hd{ho7C^0te%?#S2HmW^(#sRGd@ zw09x9a()8#9lw!j#n`nf`R5L9)3k%ZNU5WDiHcuG+w>J!F&d(^E%3#is3{K<3>{CN z1uP$T>tG?qWXj!gmQAHyzd15Bz3uQ)%B#(;Y=SLkUJ`7%wttTBX5HT}IZ@qM&l}dk z7VXKBAm<>`?#J&lXBuAem3YXQQ!SINhSv!>8~52)JQ7K6`Bp!h+8C=~qM5#~P7o|IR?3D$!g1vi3?vt0{J2>4#=oN?+bfgZr`D?VqXosbh2+ zc4&+oMkCO!brjp@e@MBBN@=IrPJZ09>i&X<>;s4^nF z6M?@BGl@2>ZQ@(FIp*gdZ@5uMCpat?yu0nb7v&m;^W;9L*)Qt7E7BXH5dsjy7Oo@k z`7;&ElXsMpDm@>`!{|rfefaFs>R^~$@lo=6KMetPoG_=+4%FVHY@BIcGj`>howLFi zIiT72xvy>+QELh;P1mtG3kMi$=Oz;0R6M?8-&nzNEn2iPcC0ICpEJ5Osf>~?8~yIHq;pp?4A@PwW#ZY zd>cU4Ax!T8$Qfx;vH1uc@?gRvtXb;Sjc!XWHxnzPnGE)aLeLI&X;U|T*0jdvw$AQG zuPW%t>9g(a0)5p2lAL9=#`}67Qy=4bAy2=6l(@o1+Jr(UT}q*#^ft zrs9q}QqILzEskd%<0vK+Q>){tMeg8T6>sTPiD`i4h&u7S<3U?*%??a$xw^IG3T<#7 zCLyFZkbO%H+ucV8=jtT&#jFuOlCCCfZaFS4b4sgKR#O{={Z^DbgNY_9Kfo{Eap;|T zJDlA7QNFF;a~E6pFq4JsTf8jZ2!OfaHR+}wu6wVw>Lsu|xqVq$Pt)Pmmlz9GMs1VF z=w)A(@m`PxI`eRTbPjlWYJ+3aPJ+g!%Nxv8n;xHdqI==-#qxY?#F+WrIsFS8+|vrW zTIBxzY2hrQ-7*@Uw*r&{RUwt|b90U5!yn|?i|yg}3aqtFflJ2nE~A0F$8yd3k2O7U zO!VhOxfufqEby5hUvTTCqFyI`mv(&rc#Xc#X6^#%RLao8mP)vz3tv=nTubZI6fw$_ zXC_{Evvf)&!@^eeN%bO9Ob>!oeJFtBkNc55b{y-L1BK3}Bq{L8W#HvhnS-5|7v#Fah;PXb~f zvE8Q&ki#d}Hi7SB)J;bh**TWidh$=k)zC%vpfSN@#HyQnM<=6z6oCvw`dSAObXFmL zH<=M_!*6MJ*%b(FJ`?P`Yh`$~R&EGSGgWqTok!)Bo$!0tz@3N2s=2)5xBm=K1-r<^UOxP- zGZK!@}xEx(5vg&(NN*(jOw%&Y*D3y2)xx0N)V)f#g-6jYTOrD@5P z&FkzzVLjO>)?~aj9!||9$-_K_U5`~#&Gr+0B_`I+PaD+v*QUvsbfBu{R;{4R6RLgi zIep>Ph)lcsZ??(X3^oUhSPccD&}r{fhv9YT?^5I6+T6&>ue_V{m1?9{+sWDPK1`Qq z>uwtwi&AEiM){+@dLum9{rz=#?%0QQe(tCmcZ9hZ|BNx95kIhW4LnoGw)X9IuVfeh zn87M0nc~I-kIbAx>XZw`{$5nrMt_;MC6V+qd6p+PcyPeFInQctj@^RI2-or7d0XP_ zn_CPZEY)C*y#;xC$YZ<_kRGQ+A27mXC%=FQl@KwzDaFY1;Px>Mv1;2j2I%aVJ-S5K zZa2C590(Pt)C^^TP(Z-T6PkfqAywa+u%*z>@}iC2T}#hCvu5w@0%4Nzo2Oi^to2jN zQ{Tv&Om4NFEgA~|&~8FA*l_-)BChY?sR4`ZjmO}eb`-P zm}cl>jM2z!nn3%j2ELikwwNH;Vo|}p99-jtE5vARP83ci{lWN->~Lv%B7JSo{Qr{ zmU|7CNhyil<^WnR>NWfToQ}44@0Y1H8_Ja-=Z>m~<#%CvN+P#~)2@ckme^u%EPwo( zM0-6C=mh`;Sa}#+A)=RAHXeNt>UVccBHK={2aH%e}jq$PYLm2bIgFIq6K;?{Ehv z)k0Qb{_yJqe%0EEv3FU-6J}z7CN)Ud%Ps=wYhOu{Q-_1TU?NX{7{MwW)vP=CtpiY= z8=@ARA}vjtSPy9X{p67^KLE7PjI9#CWU;VNYNg0QPmy+4n4hdbNJR5^1iIx#cX(X7 z`|KXPJvWF6r=9lh1(%O>9_2?EcS)zoZh=UMv?6C4&@+KR6!qe0so5cv7sa>6S?oYY zzvWr+UDgL~#F&D=$Vofq;$Rqa5FqiastU^ww0*07JcGvp%?x3WSQ&HNyk|hCZTTu8 zS4poTrTKo`zKM)6`>CYOZBS0WYUezFq_1`Me-Q;H0zSW_Hj{z1EQD@HOwgRFLE0sU z-vNk!?Qly29Cv%@%QT^95F2LOzH9FfADffdS{BfNl+lhOu7KA(&N#UBsiJ-TS0_ya z?GXLUT)MuZttlN#F0qp&;H}|JpgVMWpYrL_EJi3;G~p5WT~6H;=i-_Qr-K`CVh|di z8X9>)(x=(}uGN*WoBJVw{*v;m@}${;_r>G3lfl+n98dRPtYcK3bn?W+3LdqDG^R1V z&LBmp2ud-xjrN>9c73k(SoO_(-`Aa2ro1sR397i$`LSZ@3oZM_kcCCPuXB3uw{yI| zsDBdN5ne|+E+~nFEWL1%Z5#c+)zsnyK2t&zmrN-lP~elXU$ zF-lrx`}DX%hh7V}!y+2;w1!6w=l~-p-Y%-0OpVt}!|M^Pjsln)$ExYbLQt9r$_iVR zAPx14=xa!q{s<-Z?FG=v%G1b0$_R0FtI=BffpP-d5J8?6#j@e8p(7uf=z+2;5h|H7 zoDQUD>lelVJdBpJu|iUWj_($)41Z^vh)81v?U;Z9`3Insg4S4}p?+*I^1v(l=+ApTK4Dmp2AC|8HU z`;XfAH}|9BQjobVdHk*VDi(kUGTOQ``HP7s(;mDcp4O}L2gIedB5rHT*fB5wuxUT$ zRa*v-nR^!pl}Kw@vcA6RB9@&$?z(<6L&@FcLcq=1k1=sEfuF)6hyjhVoQ-b*VsME> z#CbI@PZrbpFD~loz<>QAZF@Bv1fX~Iy+q4e=|_Mu-7!WtTn0shUbf|%FGv9}pioz3 zn^>%dHIaCPyh)I%ilxmc?f7s(*kc<4NdbW!V2`#gJsH)>;$<@%^=y5wY(uBDmt72c z69KAMLDYpen^F$Y@Jj}bwhFG_#0hf&AHy>e$6TS%W{2$*Oxgk{pD0vA!CF7L^t1XQ zORZ2|<}p`-#cK9>(qr#SAg|$S9}X6Ejk^UD!zPW_cetARzM_&4_Pj}A9w5_iPqq7z zCT+7!uk$?c^*Oh~CiOV3w5>V~1WmLJdhUK38JHM2yZLm)*iE;7W~h#5u(?Hca&lPq z`#2%Tl#?m9U|LzlPzr>yciHSYU^)N-ng@mm{l#S+1jtU`CvU5O=ms3OT3y$MjeDv+ z+io2>Qzh!3RvX(aJC7-ze?3SytomMaPrHdI-Oa$jP)d|5V~eBU zeRAR)4(;Zvfa9;Dtp!%{F6t|E-Vy2T5~1JMY(|9#y!7GZ;Nc7h0T-mKlwAz;C8tC| z(4bzY(sj<|H5DgS5zua z9T2Siq-&EOKBc8Na)Wx}B;r|OBrdma70k@V9$|p&`Drs*H7a>(tV!f*73SwBV*{%0 zkIz(X5>tHla-pWww=+Hj=0gbov`sm>;0h%s=E;NJvDYsM$r*d-K|_>}ZU=J8!7Bnj zERd2;B@g{F3jby%z)1=qp%R;aLOvv5u$y6ZF6O7>8`tJv%b4yRNnJktC+MifB1Us^ zAnx$93yCvdk~_kP{#yc9=jLm!X9~SCKYBOF+IWBnpie|lEur{cUhTUEs$dpg=T}+Ord^nHj{TmRqa((iP1y{xdUiN zEK|vAbp0y!Ai$J5A+|kC$ZOQ;0f`?dIO)s7soSjeCF6pu5>r76&j<%q!uz|d0_0t? z1ACMEIYB%hDg7}mCi^0Q{-27mUggFhMuB~qPe&F$85EBTl056|fZ8Pb^Ny^w{90Z5 zvB{(ST5X6rWf*jE)D=uNVa{x#OjW}7a~?VEd7>r0#+)jpe>YrX=x7_j2^ z2BTx5z7O4_E8pZ71F*aPW@SIaxJ^%a)A3CfK-B=(KYrXMY4BVDm6f>=#()p;GEGR0 z@=r@hp;XS-&UC7PjUq&oLEEaUqLnp=-&^kk!)oi+tio;(<2H9QQu znC?ha;qW7KpKNKOhDWiAX>ryKW8yy7)c(NJ?pzO)m^9DS6!ZeHu0NB{eumKBr1c6~ zLa{Hw&hE%$RXUadG8PVqdLbtZ=lAjm;{1areP1674Xb*;_hHW(bKQLa7|?k^czb7} z;`ed-Cct0>U`GlhrDK8yDZ{^JF%_FmZcVvD)Al?-wI#KQ(eDgE@Oo%*(T*W#z6*!H zv`OtIkKJ}fj`eqg&XL9|#Eof&hd%G#18dSqaR)ib?X_1`vj>3SBBUqaWqN3(>syXa z%>>jb0TM+Ho^!G zEfQyE*M+j#DUa8~5BHxuF*}?aV;r?G$IdNd!VEy|2jK~M1qL;M6mQDch~#&k#$ca4 z>$$_qk^=e^{M9}eL8+(ANbRX#CA4cmx~d=~90pORbf+D7ll1^0#SlgeAQjIo|NdaW z$>c`pPzE<7cK>)Ty(#~2@Ic;XX)u#6V9wBfQoHcp5MF`LdChR$q6mE&47x-5sA3-F zuUdtFu;dop162yNQ@cTHF<^I9UqU~vSW`j0YvQ)74D4aRkBEfm=p^(8=j^iFYbJ`j zJ*>u-u6$9J6?gCObI17QnGyKaDE3E(qY%3_Y3ccBP5O+)9J>$--ev>Zw7om zI3WeHwqDfyrD*t?vshdTD}a2U*HY?&R41eqkm9%9kpU9ZCCr!nbxo5>pcJ3tU)fgz z;7{|u<$=E97uH+U@~Wjf8vSqQ+IWnOycacyHLD%0j>oc`)iVz3&Sz@ z2;^`+M{x5X=S`YIU0*h9L}dYTvsZi5(g&15)C@y6AfK5P?S*crhosAcLDY?gsFE-4 zq*slWdpG)%ZMr(kOld@M#41MB-Qhus3TB7pcL*r4W%Ko8kSd(S6FKfKk0C}c1?pTT zF9RG1&`TN6C;>1BkV9rx2z{*qXbcZpqP{|4_fMqtyCcLu{`}<9(CG#+ z2WhYP#b17WGNLS-RyKb;j?h*q%rQ!-IdrcUus@XpSR+VUt9#%ksJ}7%34DS@I`0Sr zy5Flo%!4-+v2sId3bSh%nFEYa$%OZzU>coP3&<2ijW-OH7{@Pxo-N6-cFgav^)V7~ z&7c&L&TZ{1#vK#NNgK4nwY=D~Jc@c{M+a^PJ+_;K7O(t+lJakwv~JXdyWg$-HgWs) z0)+15Ye2k-wAtkW^Gi>@si6J}po@MVyo9GxqH4sIohxOn+n|fztzS#+B}c%;-i7JUmLwFA!SwZ?v5}gDC)N4@c><+F0i+&&(8BoaBMB#X zDGJk)w>(%(*U%=(e;BuEy4}Z9EhfJ0MTi{$=>Sgy?lf;08y$sSV5))~6t;pQBWu zi=P~pXI3wfaIL&dX|XiLmGu}X5t^-Fjt0tN($eL zP=l{3sHT8j@tb=7nK^i%Assofq&EfxzGAd5@QPS!K%66$c>>FDmvE)EVA-T{rA?=&JbfOBTe#kk`p z_D0L)^k)Eo11=LUfitG;X*I-vt_co|1KRf~e#I<`e*vTW=#mI0(B!_PM?R4M^tNE~ z?stZE@3N0z?zUy!SZQVKyhN*#-uR(f?3VqN#VI7y0#byDgOe;?D`y{1`3GiI+Qd8m$ z()B0&6xuvFP(F(`axejkI7Ii%tJ45}`neduVZ-!_boF}O?F}hAK&zFE%7C}>ICB3# zs9-+g&tcvK;EwN@co*9Y3*0M=^ayjaq0Xq{vJ#0C94vih`n~Icw#gAhl4fs_t`xR& zSPL3MFiDUj39t{qOA$Sg5SPFNH@&cjFq|pddhXo-qaM&&1A}#cjp@4aBJM>+PqU?& zN=DEtnFBP&KA{gny);%ysUGZgo{Zx(>{rK~aVR|!E?wr^TKO|R|P zT5<>a2yg=+b|}{a;XqHA_ayOZZ4dw0=g2u+Lau#=LI?V0sPoZsGB6^rNkMZzjz{i= z_YJV8f{y~D@a3T_;S=4FMe}Y}Qfi*OpI=RcKu&XVcACqXE(lgs$_5}D-Uhmx9yN-T z&Drw+fyGU8+w9mL5HCsjG6E*3uL|UZw^wFc;%d98J^{u~3x+GbE?#dtrR`e^!Sp3X z$~~mG%!w4YAW!#l$82~>iokp=#3R%r!44XLkbuwxG`00d>7lI$Xb77$*hOb<5TFY$ zx>@O7a>;|C@E9NswHP6;;?;1ZJN!AHQNaXq>hrBGT0LScLG(ptsX~#c82^lpGX0!sTUXq}>Ebc2Tk~M&WTsyOI+Pr>?m}%A%Y`M7mVysEV!2-6@4kiP23qWpEk%2*A~Xw?sAvntWU z%U7#Dn2uDuCesjb=F?Z|{57;8?8u_E5pKLUeYq80k6-g#wG~!QsKOX0L`NwP^h1ip zT`(6^y-UMvmJd$vlIYcoydUynxdvATi4-*1f^9tP_EnW=hvSATxVGBLB;8%x@58pY zapKWG%QhXIvIu-Q{m51f%nGY-`jU&aeKb=i>_ULKjarTpzZ89c8lkLie*Izi+gn8GA6I;HXtN=)mTcBlxk0o#(uDgNMD_lUn1@; z1aG5v7TE?V;(Hn&nAmd>tEOSm9`yX)b+*K2$Hc{^lg13Um7cV*Z;h{J0J?e?0A(Nc zo~@}wDMJ6i8GdC}PDz)pn=k{eGWVh(`*yT7;H4TJnc4&_6}t(WkMp&AuFyNzd*s<7 zHEF$dL8xhc*Dq)|yUxc395YYS}rBmXkLYB|}%~Da}xVlVan*l7V zxYud2gm~0!PxTV>gRP^e)O0jb)h$OSoP^;_h_T?4VO;61gI>f5dk>g={z2MLt;r{G zuzB$X$0GWa5_`F#6~;waN7`(nJiGhg{zpJz7Ih6Xb|5p2!x>^`M_Y?EKB={_O5xi% z?saA?bD9FLD%cse8ikeUI%fy49`h3wvE1uzE!@91cVn5ZJ#`p|P&m)wS)t#@WWfdi z*wShS?sPX~nvy~|_bEE0ZgbHZGzUf&HkYpkWod&=icZ;DKJ%^!fZqo4EN(aVvPPz* zL~!Wxs6dBRXqu~Wjm7MDlXHhqga%`W^Oeg^MWy4mbrLp`F#)d3zfSKfd0|ZCl&;Qg z5LR43!#gwcf4D{*uy^9#!1-Ga;?2Lv$!Pm38HZ4Dtzh}8<)G=)19B-Ds0!oL*~vC4 zVWx+QsBbJ|J1g28R2*cwTUbs~yZn!)EvK5TY&l!JXQ7c8FjfMN&9SOvdzahr=teC_@98NeAjS;E!Mj>KGJ}{68JTklQBp+pZ5c+0UO6xJxa7~ z7;RsLOL4D6T2{co96ts=*`8`7)2C}TN&^caWX{pd`!Bn0VJkL-uUQ8#Y8`r>NYTCA zoBxz6WMx=(0b~Ujw--zHGQWuwSZlxp6Vnr>P&tF7ptaux)*6D9m1OZn{1Csx{l)Y6 zn#0@M1zOO;@y;Wk*`O>DAuDzVvZWv6S7eKI?H)`xg@GeV zreT8SJ%=Z#fP@kGM*Hql8^YxI%2g4T5JOjcsSV#ofB3;`!j!8!Rew79;A-$|oy$(V zWx%Xb$Lvz>SrE{lJuL)79nhr#y#;|w z56Tj(&;i1!G1%~`EU+LZgG~@Bq=TdG6ZY4jQ=1ee02aAJMi~y;l=&Ly$bakQUaY^|}HKy$Fz$^c}^2wLQ3jx;+Qdrgv0docnDj_1?4!gnk_YHIL zi6_pN!5|5Y(b0``GlAC{k$)Ql>_iUwE7p}cQU>@IY{*X<09LXzUQQ$u`rjjWBT=qu zLsfqe_KF^ZzBTajn_Ine+RdTF)>@gCq2pj>FX+=6*Gw^h`tXGRJ{UFxH5O_@LD4PcCSexpE99Ucd2yLB+c#~PY zbyaw4eU5unnQq))`?w;fcm#UZ3P#Xo2V+6&VZX;hY* ztaX#u&KMLp0pGvDnD(d@@dxG<76eAHlMfUm1+`e#?@OIlJSQ`JTcE_wI>aZ$pQN(U@ogK{Nq;F zvO1FNR-_+Ih7+;;y+fMO^8e{|f34-W9XKDZJ?;7b^$UXG)mxNo z0^SQ{L0KcXPleq{B1|oZS14(vwslTB{<^Ra`0|D0{)>I~*}13xD572IdS`d{XY~OL z6&I#u{q}^qf)h(=Y3Zx$<5qrp1Nch=)! zxkGQbsK;-rk`kwKn+c+pPR+ca@bGMd3E@e_bcStFF$Cft|KSG=`kRo=mzQO1{r&x` zlNF)D1$xdbh;qQQgz*tR{1lE?6~(*S1m^0driR~$c3Mn;=7 z{zp66N+$|6zvjkPJe!x%`AjuWx57HiYllp?()OJRvM0@3aFJ3aUBW*vkhmp4vMtD@ zg-^--KvF|P7N<@U;tA&vMDkE^$$Q&W|8 zFzCb0dbg5PNmL|z#$9RYjNcW%i|x_(Z}A+ZkB*8q;H=pKJa(x0ET<(*&E~(n_cywgCxwp5tm|$eOj>kPo z3(vAm5~w?EPces@3#{#Y9i5uVyw0SW-nuo9Oyb{BRAQrC8Fu&;)!>u(&%cZ}3U9Zz zwr&njY&i1W`@@o*Jz3bU*^820E$hh@-?8!};6$50LwN< zU*bMBx#EmLo6QI8(U9MMsMIUvgM+nGyKD^KY#C^gSIdVg8!||SbTauU^?e(<$IhzW z)<`mstbdvx&&?0MlW!kgB}xOkTp*-OCt|uC$n*<~l{cZKrLBW(83@}RULh_^vNvEd z#aBCtii@lF0iO*H51&sdf|@4c7PY(eiX#^m%#%eN+5LOjBeEGF^!O4v=5w?{f|-8C~j5+Rl)SMTYKz^3~U{S~l>c>+7c z4MzBj#1sL=TX}m_J6p3z3zUcNuGRj=7}|gIRXUyU`%b2Y-ZLAD2EX<@OSSLdJ1mjc z%>KAQ6?ue$KNknS8)8|=(-X1G=SufKe|*t6kno!|Nhzg zYxZ)^?E23G)nVxapIRwY}IK5wF!KBz!BB!M%@J$8Kn-bf)3h zyzQoTchyFXxV+Coi`ZUl3}n?(`V5>cn+e;zlZW|gbaLNoqs%DXYaQ{uwCg@CY-&$r zp>Bt_!yl`P_FN%bC_}=fm>zC_(RV`+iLEE9Vv=b`Fc|ux-ux+-9kiHTSFHZ--qq4J zObT|`VJe=&XQ9KkxakPYNYMhYwkX8rTqtBMgiFArxdySi%?0ar%IGQF@O6_5qlwb? zT8z_%0jro7R19}PQ|ywZG4o8vdHCHZc>zAY$X@T?)ugy(mI!lW<2xC+K_{I`TOD$# z-A&t?Wj4e{`i6Ob)>GUMV(C=)X)8Zs^Zi#^F_?L}2WG^>){#%d5N>yiM?W#mbxdd= z7tRvM2y=|DnsS}M#2^_Hs14nji{K|K&S%|8W5#}a5NAyHYQsb!t$_3JMKOGF3#=_p z+hSa#utx}xk2I0On5(>X9A}$N6j=tGhph9+h~A3_GYPDU@e4cb>9Oe?dRWil zPKM;^4z4dsezC@;uxGolakd>lk(01kL#u5W_fo6#&B#n-S;O{_K5WZ>?2z~LuAA?1 zAp>l57BOF`2jP3IA$5|}i>XqKH^&?_CiwH#$7V|%sh&S~&b@#xNqP>4&FBr`Dok`L zg8OLcJGJ50j;B*D?$7XYeJ_?NOmecDF5PM$^D3$rFwZ6v>3&Rn>XWOSk$$p2#V%_o z0#zaxJIs8rvCUQ3E$%kTOpy6-Yaa4?uC=>*zlH&}`IuI~?r3+ls@JP@F<#HSBTxE` z?Rx#e^aGvJd+?4pZDmx$@oG#}9Kt+^!Fv|g?PQjIJC&b16kK`C!|thv3-DT z)ta!!Isz-;Fpd9S(*BzkcHq_!6D~3(A#3Qp)%IP=*Sp~;u1o;horwPm?e!IvKF0Mz z*1Av-*VWOm+v39Vw{cOx`J4 z#rtbQ+}0@x{<4GL>9yP&LRxkw^3!hn$EbFZaD9*b)1w9E$5*y1ic;g=jQE%Zc;gf` z1sqQCc;AoUs254GFMS@cdN^_>GGSl#rVs&@`}lC11vhM0^=AN+&9^TS{uIknpnYZMl>v@_+o>vL{ty(~rr#`A14=-J4+@_7*nfNd?VGwrm#eAf7+%9&+m+piZXDW7DG)K zpX}`{#Hd0?b!`gbOtR&|yCOlgwHRIK)U)XNng{J@etOmU>;w>qS@{Jn%d|MRdgnkq zC#E|sMM%p?GQY6KI>4^@G^NybtW@G8-^ik4sXu!sz-eBNlnm%6d)};zfM%hutY6 zyo&J;I%_D0(Zzc+yScy^bz0%w8>O~70R_OJ5sSI>5a;3VlTOGqvE^9ah2~J+Khw+Z zQa|DA1okGKw~xaZ5T@}5Xg&K*=SG~e)PAo#c3vKSS2mupC?quYEHD8I#j|4m?zOYVjd;XFnQye|&yUE8w~N#e3aIDn*t;OteTCd>1Kg z)OFfQtF5d*)i?A-JzK!Mf3A&oe?e2#Vl zix*?Im$Ic%+vz^8hPSv4Q)jRt`Gs8#Am*y3V9pJD=#=dOhw0b}hkDitTS+l(Lm_Ti zg7Y^uAtAQYbsl0nt7T>GTPU0?5u0*%ukU`@1BcBmB!rKT6CQ1W+HT(AHSYiiDz)00 zBh@Q5ew==ccG#BY2MIVmO@#Msi|H)N#4qCP?#s9#=|DRG5Cy6+5WhVWru8;rKLx&lsIp;d_+&J+nAW9 zinx%`=?Eucp%k@aZ9|CA2*$LgrY6#qlg$>y+_(JgK&50seo$&GM}a59Fk_aMTXP8z z^Ss+<56>Phh7vq$ryqXg9{)fmn)zZ3(RN361k^)Sa_yCQmA-t6d@Y{K^8=M zr8CgN6N2zltV0iHUV1$6Ld==uj*`mRHtm?*h#U4zk(a?~)hWmsWy8Agc&?(F`!Q9X zUIBG$1rBKLs>$R8Lr+e62Rt>cfXS2yhL}PskpLTz(zxe5h~1xI3}OO=EJG-owd)P? zJz@uS5A>_~u2S=K`%y^622-*x41K$QyjH8);EmCtW$>10Oogx`84s56$BkzK@Q(Ax z8yWeQ-5qWl2=*OpZ!h7L6ZVZP*>VN3%rCjjJFaAiOR1jx*2ayCVWAzz6!=mk)P^3?U5wnU`WW9&hP$co*a9~# z1gcay2@6d<+q>%A{G1(oL~q~0Bfb_J;j_!6`4YD-c>o381>lGzWFghL7j>2QK}SE+ z*(*c4`n_Qk4r>%is9Ihd6_#@0ba4P@abi=&g+L)uP{|Nrod=G4xRt+1z^N$9)FivA zDYghQa%j{0OJimSQ>C*+^!HHFyec@2T>Q#1ZV_lM5563VLvdGiM{*U`-KV#!HksZZ zu7Y;FzjRe#?|lxUArX+EB+87E8o8eB?}XVVCT@QY|gUKC4&R5S&H(-SGj*6Xx{ zx0?@tCx-ogZPYC^VwiG!y2OW(o}qgpZHo+|`JZ{y3pI}YE z#A>RdBH;L#RF`IK>902Got%NjR8V3cdaWTWa}6CItB7tb5Uc}%Es%(<4f2}ft@9U$ zDktn~@w<5u3x~ZKk*^0DqX@Enl*GgkKsOI!wbZtzlWhzZigq5EarL=8)8G>LX{Am0c>Ldw|JBLA4)Jd^{F@5?O^^T9hJOp= zzo_6}Nc1mE{1+qtOA!8LM?eGrrh@->so=oqTgj9%+qJ1opu}^}pQ=15lret)e*l!d B9Torp diff --git a/packages/terra-application/tests/wdio/application-navigation/private/application-navigation-spec.js b/packages/terra-application/tests/wdio/application-navigation/private/application-navigation-spec.js index 99b8a2578..8e670be1c 100644 --- a/packages/terra-application/tests/wdio/application-navigation/private/application-navigation-spec.js +++ b/packages/terra-application/tests/wdio/application-navigation/private/application-navigation-spec.js @@ -97,7 +97,7 @@ Terra.describeViewports('ApplicationNavigation - Large', ['large'], () => { browser.url('/raw/tests/terra-application/application-navigation/private/application-navigation/application-navigation'); $('[data-application-header-utility="true"]').click(); $('[data-terra-popup-content="true"]').waitForDisplayed(); - $('[data-navigation-utility-item-logout="true"]').click(); + $('/html/body/div[3]/div/div/div[2]/div/div[3]/div/div/button').click(); browser.pause(50); Terra.validates.element('utilities display properly and onSelectLogout called on clicking logout'); }); @@ -130,8 +130,9 @@ Terra.describeViewports('ApplicationNavigation - Large', ['large'], () => { Terra.validates.element('Popup Menu Open'); }); + // TODO: investigate validity of this test it('close popup menu', () => { - $('[data-navigation-popupmenu-item-user-action="true"]').click(); + $('/html/body/div[3]/div/div/div[2]/div/div[2]/div/div/div/div[2]/button').click(); Terra.validates.element('Popup menu Closed'); }); }); From b81be8f73da3403267b5bbec4f1203ab0f78d20a Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:59:58 -0500 Subject: [PATCH 20/34] updated jest snapshots --- .../__snapshots__/ApplicationNavigation.test.jsx.snap | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap b/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap index 276ddcacc..ac52cf361 100644 --- a/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap +++ b/packages/terra-application/tests/jest/application-navigation/private/__snapshots__/ApplicationNavigation.test.jsx.snap @@ -53,6 +53,7 @@ exports[`ApplicationNavigation correctly applies the theme context className 1`] className="drawer-menu-focus-trap-container" > @@ -96,6 +97,7 @@ exports[`ApplicationNavigation correctly applies the theme context className 1`] "wrapRichTextChunksInFragment": undefined, } } + menuClosingCallback={[Function]} navigationItems={Array []} notifications={Object {}} utilityItems={Array []} @@ -358,6 +360,7 @@ exports[`ApplicationNavigation should render default element 1`] = ` targetRef={[Function]} > @@ -504,6 +507,7 @@ exports[`ApplicationNavigation should render with prop data at large breakpoint my test hero } + menuClosingCallback={[Function]} onSelectHelp={[Function]} onSelectLogout={[Function]} onSelectSettings={[Function]} @@ -568,6 +572,7 @@ exports[`ApplicationNavigation should render with prop data at medium breakpoint my test hero } + menuClosingCallback={[Function]} navigationItems={ Array [ Object { @@ -737,6 +742,7 @@ exports[`ApplicationNavigation should render with prop data at medium breakpoint my test hero } + menuClosingCallback={[Function]} onSelectHelp={[Function]} onSelectLogout={[Function]} onSelectSettings={[Function]} From 3eaa7cf0fe34df892d709ae1397899cd0719530d Mon Sep 17 00:00:00 2001 From: Saad Adnan <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:13:04 -0500 Subject: [PATCH 21/34] Update package.json --- packages/terra-application-docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/terra-application-docs/package.json b/packages/terra-application-docs/package.json index 098bbef65..0f2933a9f 100644 --- a/packages/terra-application-docs/package.json +++ b/packages/terra-application-docs/package.json @@ -22,7 +22,7 @@ "access": "public" }, "engines": { - "node": "14" + "node": ">=10.13.0" }, "main": "index.js", "files": [ From 75000807f31daa91add113cd07741a919e00684b Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:14:40 -0500 Subject: [PATCH 22/34] terra-polyfill version --- packages/terra-polyfill/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/terra-polyfill/package.json b/packages/terra-polyfill/package.json index cc78fe6cb..fc012c6ac 100644 --- a/packages/terra-polyfill/package.json +++ b/packages/terra-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@cerner/terra-polyfill", - "version": "1.2.0", + "version": "1.4.0", "description": "This package contains polyfills to support the minimum requirements and commonly used features of terra-application and its consumers.", "author": "Cerner Corporation", "repository": { From 246aee9356e7b30041291fe51b1173a5aabc13ae Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:20:42 -0500 Subject: [PATCH 23/34] updated CHANGELOG --- packages/terra-application/CHANGELOG.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index c616cdb59..03e812136 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -3,15 +3,9 @@ ## Unreleased * Changed - * Updated `getBrowserLocale` method for IE. - * Updated jest snapshots for terra-icon and terra-button changes. * Updated size explanations for ModalManager managed by DisclosureManagerContext. * Locked `uuid` dependency to `3.4.0`. -* Added - * Added user action utility button. - * Added `noScroll` prop to remove scroll in powerchart. - ## 2.1.0 - (June 22, 2022) * Changed @@ -47,7 +41,7 @@ ## 1.56.0 - (September 19, 2023) -* Changed +* Added * Added `noScroll` prop to remove scroll in powerchart. ## 1.56.0-alpha.0 - (September 8, 2023) From 4b172c26b9d6058316d081ee2038d5430a1ff0b1 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:22:38 -0500 Subject: [PATCH 24/34] updated dev-site CHANGELOG --- packages/terra-dev-site/CHANGELOG.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index c26369b80..d66e5db53 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -2,13 +2,7 @@ ## Unreleased -* Fixed - * Fixed clipping issue of test pages on dev-site. - * Fixed scroll issue of doc pages with longer content. - * Changed - * Updated jest snapshot for terra-icon and terra-button changes. - * Updated wdio snapshot to fix build. * Locked `uuid` dependency to `3.4.0`. ## 8.1.0 - (June 22, 2022) From 7d101b3ba33c121baa7e075f89bc7db125c05906 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 09:42:29 -0500 Subject: [PATCH 25/34] updated CHANGELOGs --- packages/terra-application/CHANGELOG.md | 8 ++++++++ packages/terra-dev-site/CHANGELOG.md | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index 03e812136..0e313cf65 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -6,6 +6,14 @@ * Updated size explanations for ModalManager managed by DisclosureManagerContext. * Locked `uuid` dependency to `3.4.0`. +* The following changes from v1 are added: + * Added `noScroll` prop to remove scroll in powerchart. + * Updated `getBrowserLocale` method for IE. + * Updated jest snapshots for terra-icon and terra-button changes. + * Updated size explanations for ModalManager managed by DisclosureManagerContext. + * Locked `uuid` dependency to `3.4.0`. + * Added user action utility button. + ## 2.1.0 - (June 22, 2022) * Changed diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index d66e5db53..8199429eb 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -5,6 +5,13 @@ * Changed * Locked `uuid` dependency to `3.4.0`. +* The following changes from v7 are added: + * Fixed clipping issue of test pages on dev-site. + * Fixed scroll issue of doc pages with longer content. + * Updated jest snapshot for terra-icon and terra-button changes. + * Updated wdio snapshot to fix build. + * Locked `uuid` dependency to `3.4.0`. + ## 8.1.0 - (June 22, 2022) * Changed From cf9875414c0c3d9260c7fbad5836c2887fb09934 Mon Sep 17 00:00:00 2001 From: Saad Adnan <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 11:58:07 -0500 Subject: [PATCH 26/34] Update CHANGELOG.md --- packages/terra-application-docs/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/terra-application-docs/CHANGELOG.md b/packages/terra-application-docs/CHANGELOG.md index 8662c4581..3aa933fa0 100644 --- a/packages/terra-application-docs/CHANGELOG.md +++ b/packages/terra-application-docs/CHANGELOG.md @@ -14,8 +14,8 @@ ## 3.0.0 - (May 31, 2022) -* Breaking - * Dropped v2-v4 react-intl support +* Breaking Changes + * Dropped react-intl v2-v4 support. --- From 8b8356b2c069ee3f9c14bc4a8ca85b947a2c7f39 Mon Sep 17 00:00:00 2001 From: Saad Adnan <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 12:13:30 -0500 Subject: [PATCH 27/34] Update ApplicationBase.jsx --- .../src/application-base/ApplicationBase.jsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/terra-application/src/application-base/ApplicationBase.jsx b/packages/terra-application/src/application-base/ApplicationBase.jsx index e61a56397..fe1baf00f 100644 --- a/packages/terra-application/src/application-base/ApplicationBase.jsx +++ b/packages/terra-application/src/application-base/ApplicationBase.jsx @@ -1,8 +1,6 @@ /* global TERRA_THEME_CONFIG */ -import React, { - useRef, useEffect, Suspense, useMemo, useState, -} from 'react'; +import React, { useRef, useEffect, Suspense, useMemo, useState } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import ThemeProvider from 'terra-theme-provider'; From a356580ce1d3595e4684cbdd66781dce445ba359 Mon Sep 17 00:00:00 2001 From: Saad Adnan <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 12:13:54 -0500 Subject: [PATCH 28/34] Update ApplicationBase.jsx --- .../terra-application/src/application-base/ApplicationBase.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/terra-application/src/application-base/ApplicationBase.jsx b/packages/terra-application/src/application-base/ApplicationBase.jsx index fe1baf00f..dbb2771d9 100644 --- a/packages/terra-application/src/application-base/ApplicationBase.jsx +++ b/packages/terra-application/src/application-base/ApplicationBase.jsx @@ -1,6 +1,6 @@ /* global TERRA_THEME_CONFIG */ -import React, { useRef, useEffect, Suspense, useMemo, useState } from 'react'; +import React, { useRef, useEffect, useMemo, useState, Suspense } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import ThemeProvider from 'terra-theme-provider'; From c613e71c6b2fe9177000e33cea018b1661e2f4bf Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 13:11:57 -0500 Subject: [PATCH 29/34] linter fixes --- .../src/application-base/ApplicationBase.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/terra-application/src/application-base/ApplicationBase.jsx b/packages/terra-application/src/application-base/ApplicationBase.jsx index dbb2771d9..44f4af555 100644 --- a/packages/terra-application/src/application-base/ApplicationBase.jsx +++ b/packages/terra-application/src/application-base/ApplicationBase.jsx @@ -1,6 +1,8 @@ /* global TERRA_THEME_CONFIG */ -import React, { useRef, useEffect, useMemo, useState, Suspense } from 'react'; +import React, { + useRef, useEffect, useMemo, useState, Suspense, +} from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import ThemeProvider from 'terra-theme-provider'; From e9ecb88890dd675af4398cb2431e81b5562a48c4 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 13:28:19 -0500 Subject: [PATCH 30/34] updated dependencies --- packages/terra-application/CHANGELOG.md | 3 +++ packages/terra-application/package.json | 2 +- packages/terra-dev-site/CHANGELOG.md | 5 ++++- packages/terra-dev-site/package.json | 8 ++++---- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index 0e313cf65..2229e5a22 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +* Changed + * Dropped support for Node 8, 10 & 12. Node 14 is now the minimum required version. + * Changed * Updated size explanations for ModalManager managed by DisclosureManagerContext. * Locked `uuid` dependency to `3.4.0`. diff --git a/packages/terra-application/package.json b/packages/terra-application/package.json index 761b6252e..d3d09ac22 100644 --- a/packages/terra-application/package.json +++ b/packages/terra-application/package.json @@ -20,7 +20,7 @@ "UI" ], "engines": { - "node": "8 || 10 || 12 || 14" + "node": "14" }, "main": "lib/application-base/ApplicationBase.js", "files": [ diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index f55959475..35ff96a2d 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -3,7 +3,10 @@ ## Unreleased * Changed - * Locked `uuid` dependency to `3.4.0`. + * Updated loader-utils dependency to v3. + * Dropped support for Node 10 & 12. Node 14 is now the minimum required version. + * Dropped support for enhanced-resolve v4 as a dependency. + * Dropped support for webpack 4 as a peerDependency. * The following changes from v7 are added: * Fixed clipping issue of test pages on dev-site. diff --git a/packages/terra-dev-site/package.json b/packages/terra-dev-site/package.json index 63ff67822..cda5dd59d 100644 --- a/packages/terra-dev-site/package.json +++ b/packages/terra-dev-site/package.json @@ -23,7 +23,7 @@ "access": "public" }, "engines": { - "node": "10 || 12 || 14" + "node": "14" }, "main": "index.js", "files": [ @@ -39,12 +39,12 @@ "@mdx-js/react": "1", "chalk": "4", "classnames": "2", - "enhanced-resolve": "4 || 5", + "enhanced-resolve": "5", "fuse.js": "6", "glob": "7", "html-webpack-plugin": "4", "keycode-js": "3", - "loader-utils": "2", + "loader-utils": "3", "lodash.kebabcase": "4", "lodash.startcase": "4", "lodash.template": "4", @@ -75,7 +75,7 @@ "react": "16", "react-dom": "16", "terra-application": "2", - "webpack": "4 || 5" + "webpack": "5" }, "scripts": { "compile": "babel --root-mode upward src --out-dir lib --copy-files", From 44959b41f4813f49c9980e02fa4683a3a60659d7 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 13:49:25 -0500 Subject: [PATCH 31/34] updated intl-locales-supported dependency --- packages/terra-application/CHANGELOG.md | 2 ++ packages/terra-application/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index 0eb281257..3e6e582b4 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -3,6 +3,8 @@ ## Unreleased * Changed + * Dropped support for Node 8, 10 & 12. Node 14 is now the minimum required version. + * Locked `intl-locales-supported` to `1.8.11`. * Updated size explanations for ModalManager managed by DisclosureManagerContext. * The following changes from v1 are added: diff --git a/packages/terra-application/package.json b/packages/terra-application/package.json index d3d09ac22..f41ca1172 100644 --- a/packages/terra-application/package.json +++ b/packages/terra-application/package.json @@ -35,7 +35,7 @@ "eventemitter3": "4", "focus-trap-react": "6", "intl": "1", - "intl-locales-supported": ">=1.8.4 <1.8.12 || ^1.8.13", + "intl-locales-supported": "1.8.11", "keycode-js": "3", "lodash.debounce": "4", "mutationobserver-shim": "<=0.3.3", From 3dafb48f747df72e696a14983435963a3ed7170d Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Wed, 1 May 2024 14:05:09 -0500 Subject: [PATCH 32/34] updated package-lock --- package-lock.json | 150 ++++++++++--------- packages/terra-application-docs/CHANGELOG.md | 3 + packages/terra-application-docs/package.json | 2 +- packages/terra-dev-site/CHANGELOG.md | 6 +- 4 files changed, 90 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index 832304e32..63f8cafd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2769,10 +2769,12 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.7.1.tgz", - "integrity": "sha512-FjewVLB2DVEVCvvC7IMffzXVhysvi442i6ed0H7qcrT6xtUpO4vr0oZgpOmsv6D9I4Io0GVebIuySwteS/k3gg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", + "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", + "dev": true, "dependencies": { + "@formatjs/intl-localematcher": "0.2.21", "tslib": "^2.1.0" } }, @@ -2795,25 +2797,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/ecma402-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", - "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", - "dev": true, - "dependencies": { - "@formatjs/intl-localematcher": "0.2.21", - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", - "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/icu-skeleton-parser": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.2.tgz", @@ -2824,25 +2807,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/ecma402-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", - "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", - "dev": true, - "dependencies": { - "@formatjs/intl-localematcher": "0.2.21", - "tslib": "^2.1.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", - "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/intl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", @@ -2884,6 +2848,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl-listformat": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", @@ -2903,7 +2875,7 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl-localematcher": { + "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/intl-localematcher": { "version": "0.2.25", "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", @@ -2911,6 +2883,15 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", + "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl-relativetimeformat": { "version": "8.1.8", "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.8.tgz", @@ -2920,6 +2901,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl-relativetimeformat/node_modules/@formatjs/ecma402-abstract": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.7.1.tgz", + "integrity": "sha512-FjewVLB2DVEVCvvC7IMffzXVhysvi442i6ed0H7qcrT6xtUpO4vr0oZgpOmsv6D9I4Io0GVebIuySwteS/k3gg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", @@ -2948,6 +2937,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/intl/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/ts-transformer": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.7.0.tgz", @@ -9575,9 +9572,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", + "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", "dependencies": { "undici-types": "~5.26.4" } @@ -12063,9 +12060,9 @@ "optional": true }, "node_modules/aws-sdk": { - "version": "2.1610.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1610.0.tgz", - "integrity": "sha512-+s4NmrB4wc4AzJcBwdwBy2UrLyOKMtRNzyqtkUF+j9qAeuoVBrGzxMCW82T8hayCxO2V4DamB2kvbDgLkpPhMg==", + "version": "2.1611.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1611.0.tgz", + "integrity": "sha512-y3RRmE9opN6qoeeZVRLu85buqufvtdxf+/3YGzVxVQZ+SM0ew9fokVVQ43GeANn5e6vWDAP2raHQvl6fpfZXgw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -20477,6 +20474,14 @@ "tslib": "^2.1.0" } }, + "node_modules/intl-messageformat/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -25528,6 +25533,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -31280,6 +31286,14 @@ "tslib": "^2.1.0" } }, + "node_modules/react-intl/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -38692,7 +38706,7 @@ "eventemitter3": "4", "focus-trap-react": "6", "intl": "1", - "intl-locales-supported": ">=1.8.4 <1.8.12 || ^1.8.13", + "intl-locales-supported": "1.8.11", "keycode-js": "3", "lodash.debounce": "4", "mutationobserver-shim": "<=0.3.3", @@ -38726,7 +38740,7 @@ "wicg-inert": "3.1.2" }, "engines": { - "node": "8 || 10 || 12 || 14" + "node": "14" }, "peerDependencies": { "react": "16", @@ -38751,7 +38765,7 @@ "terra-toolbar": "1" }, "engines": { - "node": ">=10.13.0" + "node": "14" }, "peerDependencies": { "react": "16", @@ -38772,12 +38786,12 @@ "@mdx-js/react": "1", "chalk": "4", "classnames": "2", - "enhanced-resolve": "4 || 5", + "enhanced-resolve": "5", "fuse.js": "6", "glob": "7", "html-webpack-plugin": "4", "keycode-js": "3", - "loader-utils": "2", + "loader-utils": "3", "lodash.kebabcase": "4", "lodash.startcase": "4", "lodash.template": "4", @@ -38805,19 +38819,18 @@ "uuid": "3.4.0" }, "engines": { - "node": "10 || 12 || 14" + "node": "14" }, "peerDependencies": { "react": "16", "react-dom": "16", "terra-application": "2", - "webpack": "4 || 5" + "webpack": "5" } }, "packages/terra-dev-site/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -38830,8 +38843,7 @@ }, "packages/terra-dev-site/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38845,8 +38857,7 @@ }, "packages/terra-dev-site/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -38856,13 +38867,19 @@ }, "packages/terra-dev-site/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" + }, + "packages/terra-dev-site/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } }, "packages/terra-dev-site/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -38893,8 +38910,7 @@ }, "packages/terra-polyfill/node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "license": "MIT" } } } diff --git a/packages/terra-application-docs/CHANGELOG.md b/packages/terra-application-docs/CHANGELOG.md index 3aa933fa0..c46f8aa16 100644 --- a/packages/terra-application-docs/CHANGELOG.md +++ b/packages/terra-application-docs/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +* Changed + * Set minimum Node version to 14. + ## 3.1.0 - (June 22, 2022) * Changed diff --git a/packages/terra-application-docs/package.json b/packages/terra-application-docs/package.json index 0f2933a9f..098bbef65 100644 --- a/packages/terra-application-docs/package.json +++ b/packages/terra-application-docs/package.json @@ -22,7 +22,7 @@ "access": "public" }, "engines": { - "node": ">=10.13.0" + "node": "14" }, "main": "index.js", "files": [ diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index 320a9ae00..efdbf8fa2 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -3,10 +3,10 @@ ## Unreleased * Changed - * Updated loader-utils dependency to v3. + * Updated `loader-utils` dependency to v3. * Dropped support for Node 10 & 12. Node 14 is now the minimum required version. - * Dropped support for enhanced-resolve v4 as a dependency. - * Dropped support for webpack 4 as a peerDependency. + * Dropped support for `enhanced-resolve v4` as a dependency. + * Dropped support for `webpack v4` as a peerDependency. * The following changes from v7 are added: * Fixed clipping issue of test pages on dev-site. From d486e7c2ea648126d02fdcaaf239e2d7fc8c4390 Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 2 May 2024 14:20:30 -0500 Subject: [PATCH 33/34] revert loader-utils update --- packages/terra-dev-site/CHANGELOG.md | 1 - packages/terra-dev-site/package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index efdbf8fa2..424ac38ba 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -3,7 +3,6 @@ ## Unreleased * Changed - * Updated `loader-utils` dependency to v3. * Dropped support for Node 10 & 12. Node 14 is now the minimum required version. * Dropped support for `enhanced-resolve v4` as a dependency. * Dropped support for `webpack v4` as a peerDependency. diff --git a/packages/terra-dev-site/package.json b/packages/terra-dev-site/package.json index cda5dd59d..a66de7eee 100644 --- a/packages/terra-dev-site/package.json +++ b/packages/terra-dev-site/package.json @@ -44,7 +44,7 @@ "glob": "7", "html-webpack-plugin": "4", "keycode-js": "3", - "loader-utils": "3", + "loader-utils": "2", "lodash.kebabcase": "4", "lodash.startcase": "4", "lodash.template": "4", From f779f47221e9364f1b32570f507feed29882f2bb Mon Sep 17 00:00:00 2001 From: Saad <38024451+sdadn@users.noreply.github.com> Date: Thu, 2 May 2024 15:43:01 -0500 Subject: [PATCH 34/34] updated package-lock --- package-lock.json | 192 +++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 104 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63f8cafd8..df9a7edb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2769,12 +2769,10 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", - "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", - "dev": true, + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.7.1.tgz", + "integrity": "sha512-FjewVLB2DVEVCvvC7IMffzXVhysvi442i6ed0H7qcrT6xtUpO4vr0oZgpOmsv6D9I4Io0GVebIuySwteS/k3gg==", "dependencies": { - "@formatjs/intl-localematcher": "0.2.21", "tslib": "^2.1.0" } }, @@ -2797,6 +2795,25 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", + "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.21", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", + "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/icu-skeleton-parser": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.2.tgz", @@ -2807,6 +2824,25 @@ "tslib": "^2.1.0" } }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz", + "integrity": "sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==", + "dev": true, + "dependencies": { + "@formatjs/intl-localematcher": "0.2.21", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", + "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@formatjs/intl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", @@ -2848,14 +2884,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/intl-listformat": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", @@ -2875,7 +2903,7 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/intl-localematcher": { + "node_modules/@formatjs/intl-localematcher": { "version": "0.2.25", "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", @@ -2883,15 +2911,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz", - "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/intl-relativetimeformat": { "version": "8.1.8", "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.8.tgz", @@ -2901,14 +2920,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl-relativetimeformat/node_modules/@formatjs/ecma402-abstract": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.7.1.tgz", - "integrity": "sha512-FjewVLB2DVEVCvvC7IMffzXVhysvi442i6ed0H7qcrT6xtUpO4vr0oZgpOmsv6D9I4Io0GVebIuySwteS/k3gg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", @@ -2937,14 +2948,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/intl/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@formatjs/ts-transformer": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.7.0.tgz", @@ -12060,9 +12063,9 @@ "optional": true }, "node_modules/aws-sdk": { - "version": "2.1611.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1611.0.tgz", - "integrity": "sha512-y3RRmE9opN6qoeeZVRLu85buqufvtdxf+/3YGzVxVQZ+SM0ew9fokVVQ43GeANn5e6vWDAP2raHQvl6fpfZXgw==", + "version": "2.1612.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1612.0.tgz", + "integrity": "sha512-UNwmKh2IChGQzDm6Stxor2SbjealVld2awmf1Q8rxVO1UVvjRrQ97ArD2gWouJT7BuSqDsUpgMgf/LBAbLjMxQ==", "dev": true, "hasInstallScript": true, "optional": true, @@ -13478,9 +13481,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "version": "1.0.30001615", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz", + "integrity": "sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==", "funding": [ { "type": "opencollective", @@ -15904,9 +15907,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.752", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.752.tgz", - "integrity": "sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==" + "version": "1.4.754", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.754.tgz", + "integrity": "sha512-7Kr5jUdns5rL/M9wFFmMZAgFDuL2YOnanFH4OI4iFzUqyh3XOL7nAGbSlSMZdzKMIyyTpNSbqZsWG9odwLeKvA==" }, "node_modules/email-addresses": { "version": "5.0.0", @@ -20474,14 +20477,6 @@ "tslib": "^2.1.0" } }, - "node_modules/intl-messageformat/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -25533,7 +25528,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -27526,9 +27520,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", "dev": true, "bin": { "node-gyp-build": "bin.js", @@ -31286,14 +31280,6 @@ "tslib": "^2.1.0" } }, - "node_modules/react-intl/node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -35188,9 +35174,9 @@ } }, "node_modules/terra-collapsible-menu-view": { - "version": "6.99.0", - "resolved": "https://registry.npmjs.org/terra-collapsible-menu-view/-/terra-collapsible-menu-view-6.99.0.tgz", - "integrity": "sha512-Q49EKpdKtynQKyVvp5GBJZ6Znhrvde/8RqJqgSRBmMYXfR28hr2LeKyU9Bsr4c0IubgS/q+vT9478PiiBwbFvQ==", + "version": "6.100.0", + "resolved": "https://registry.npmjs.org/terra-collapsible-menu-view/-/terra-collapsible-menu-view-6.100.0.tgz", + "integrity": "sha512-WWX2yc/KU2SHnTkt41klaqhf8Q8NGh36/PH1/6DL67tEA4v3IxySHeb+77S7sJRyjuOsNMnBZTPGkr4tDraAvw==", "dependencies": { "classnames": "^2.2.5", "prop-types": "^15.5.8", @@ -35201,7 +35187,7 @@ "terra-hyperlink": "^2.61.0", "terra-icon": "^3.57.1", "terra-list": "^4.0.0", - "terra-menu": "^6.94.0", + "terra-menu": "^6.95.0", "terra-mixins": "^1.0.0", "terra-theme-context": "^1.9.0" }, @@ -35415,9 +35401,9 @@ } }, "node_modules/terra-menu": { - "version": "6.94.0", - "resolved": "https://registry.npmjs.org/terra-menu/-/terra-menu-6.94.0.tgz", - "integrity": "sha512-+Y4oixbZPckbKcm9L16EPHC+4xwOxIdG8FIYZDA136VIz1O5dDNdXqOZhfdnR30icp/+ZRQlbsy4XOaU7UASHg==", + "version": "6.95.0", + "resolved": "https://registry.npmjs.org/terra-menu/-/terra-menu-6.95.0.tgz", + "integrity": "sha512-WKtkbsW0jBxWGnOeqTCMWoS9SMd7/we6X7eoex9DbMou3NxRV2vescT24APp/bSm185hnPhiRNHTvH36TLSgKg==", "dependencies": { "classnames": "^2.2.5", "keycode-js": "^3.1.0", @@ -35426,7 +35412,7 @@ "terra-content-container": "^3.0.0", "terra-icon": "^3.19.0", "terra-list": "^4.0.0", - "terra-popup": "^6.80.0", + "terra-popup": "^6.81.0", "terra-theme-context": "^1.9.0", "terra-visually-hidden-text": "^2.36.0", "uuid": "3.4.0" @@ -35461,13 +35447,13 @@ } }, "node_modules/terra-navigation-prompt": { - "version": "1.90.0", - "resolved": "https://registry.npmjs.org/terra-navigation-prompt/-/terra-navigation-prompt-1.90.0.tgz", - "integrity": "sha512-OCypGUBYfHvQZAwz2sFJyc5efiNbYrpl5mdvbB0vCO5SYcsFiarlUqRfNZcFq6n1t93YWpErvsF3au1HA12lTQ==", + "version": "1.91.0", + "resolved": "https://registry.npmjs.org/terra-navigation-prompt/-/terra-navigation-prompt-1.91.0.tgz", + "integrity": "sha512-m13qf4zVGqAootYa/sfOm6+rbUwZ4qj7a4kJU8KV8987WZH4UJprvcu0YRhv8yN3SbW8zEnt4TqLnimKpnUbnw==", "dependencies": { "classnames": "^2.2.5", "prop-types": "^15.5.8", - "terra-notification-dialog": "^4.46.1", + "terra-notification-dialog": "^4.47.0", "uuid": "3.4.0" }, "peerDependencies": { @@ -35476,9 +35462,9 @@ } }, "node_modules/terra-notification-dialog": { - "version": "4.46.1", - "resolved": "https://registry.npmjs.org/terra-notification-dialog/-/terra-notification-dialog-4.46.1.tgz", - "integrity": "sha512-4Yxw0o59QP7WAEmrsNgmlMwFXU8Wr0jedujZCkiJiDLGqrjt8IBcADGHvImUSsyuzy/suoXhzzv1uoF0YtW1Mg==", + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/terra-notification-dialog/-/terra-notification-dialog-4.47.0.tgz", + "integrity": "sha512-jPcD3Kq/ZsveLsaQUCidIVC83G//tW14BLjaTSrYE57fPK6t30Tvp7mqbUFvub094aW4ZXhSZC11ZYvV0o8j9A==", "dependencies": { "classnames": "^2.2.5", "focus-trap-react": "^6.0.0", @@ -35518,9 +35504,9 @@ } }, "node_modules/terra-popup": { - "version": "6.80.0", - "resolved": "https://registry.npmjs.org/terra-popup/-/terra-popup-6.80.0.tgz", - "integrity": "sha512-W5uVFCU8avqAzK7Y7kxLX+RKMBOXDiKNllcQhFpHncQYrcMrS7JDj2uERJl2T1syQnuM67100Qosib7tlIrOFA==", + "version": "6.81.0", + "resolved": "https://registry.npmjs.org/terra-popup/-/terra-popup-6.81.0.tgz", + "integrity": "sha512-2yyjxiyDp3uaAjgxvEURSDSyVP0QSh+dYFogxRwoxRa4cOsgOhptyKmgoE4NBx3GEIOEfmtSJDoU8VlaiXc4MA==", "dependencies": { "@cerner/terra-docs": "^1.0.0", "classnames": "^2.2.5", @@ -35605,9 +35591,9 @@ } }, "node_modules/terra-slide-panel-manager": { - "version": "5.102.0", - "resolved": "https://registry.npmjs.org/terra-slide-panel-manager/-/terra-slide-panel-manager-5.102.0.tgz", - "integrity": "sha512-HLgSY//rWwsH40jmsU7RmvK4mbleB9K2R3KHkxoFl43Xpd5zSc1XOleT+rftvcKLPAdnRD6YyWBsf2WAdhQ3Jg==", + "version": "5.103.0", + "resolved": "https://registry.npmjs.org/terra-slide-panel-manager/-/terra-slide-panel-manager-5.103.0.tgz", + "integrity": "sha512-UMywGYNXMUHYBy97znTmxh89f+YtUuYae11jGoXo2//LliE2xGnnWnUHF3B81GuaQ+ptZRWn5MQLtYOXEcm/Bw==", "dependencies": { "classnames": "^2.2.5", "prop-types": "^15.5.8", @@ -38791,7 +38777,7 @@ "glob": "7", "html-webpack-plugin": "4", "keycode-js": "3", - "loader-utils": "3", + "loader-utils": "2", "lodash.kebabcase": "4", "lodash.startcase": "4", "lodash.template": "4", @@ -38830,7 +38816,8 @@ }, "packages/terra-dev-site/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -38843,7 +38830,8 @@ }, "packages/terra-dev-site/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38857,7 +38845,8 @@ }, "packages/terra-dev-site/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -38867,19 +38856,13 @@ }, "packages/terra-dev-site/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" - }, - "packages/terra-dev-site/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "packages/terra-dev-site/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -38910,7 +38893,8 @@ }, "packages/terra-polyfill/node_modules/regenerator-runtime": { "version": "0.13.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" } } }