diff --git a/packages/terra-application-docs/CHANGELOG.md b/packages/terra-application-docs/CHANGELOG.md index c46f8aa16..664df4a33 100644 --- a/packages/terra-application-docs/CHANGELOG.md +++ b/packages/terra-application-docs/CHANGELOG.md @@ -4,6 +4,7 @@ * Changed * Set minimum Node version to 14. + * Updated docs to utilize the new terra-application imports. ## 3.1.0 - (June 22, 2022) diff --git a/packages/terra-application-docs/src/dev-site-extended-test/component/ThemedComponent.jsx b/packages/terra-application-docs/src/dev-site-extended-test/component/ThemedComponent.jsx index ef33015b5..d6101a9eb 100644 --- a/packages/terra-application-docs/src/dev-site-extended-test/component/ThemedComponent.jsx +++ b/packages/terra-application-docs/src/dev-site-extended-test/component/ThemedComponent.jsx @@ -1,7 +1,9 @@ +/* eslint-disable import/no-unresolved */ + import React from 'react'; import classNames from 'classnames/bind'; -import { ApplicationIntlContext } from 'terra-application/lib/application-intl'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ApplicationIntlContext } from 'terra-application/application-intl'; +import { ThemeContext } from 'terra-application/theme'; import styles from './ThemedComponent.module.scss'; diff --git a/packages/terra-application-docs/src/terra-dev-site/test/terra-dev-site/navigationPrompt.test.jsx b/packages/terra-application-docs/src/terra-dev-site/test/terra-dev-site/navigationPrompt.test.jsx index 2716746fa..4528108ce 100644 --- a/packages/terra-application-docs/src/terra-dev-site/test/terra-dev-site/navigationPrompt.test.jsx +++ b/packages/terra-application-docs/src/terra-dev-site/test/terra-dev-site/navigationPrompt.test.jsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import NavigationPrompt from 'terra-application/navigation-prompt'; const ExampleComponent = () => { const [hasPendingState, setHasPendingState] = useState(false); diff --git a/packages/terra-application/CHANGELOG.md b/packages/terra-application/CHANGELOG.md index 3e6e582b4..7694f8208 100644 --- a/packages/terra-application/CHANGELOG.md +++ b/packages/terra-application/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +* Breaking Changes: + * Added subpath exports for terra-application submodules. This replaces the old exports that utilize the exact path. + * Removed default `ApplicationBase` import. `ApplicationBase` will now need to be imported from `terra-application/application-base`. + * Changed * Dropped support for Node 8, 10 & 12. Node 14 is now the minimum required version. * Locked `intl-locales-supported` to `1.8.11`. diff --git a/packages/terra-application/package.json b/packages/terra-application/package.json index f41ca1172..ff9f5446f 100644 --- a/packages/terra-application/package.json +++ b/packages/terra-application/package.json @@ -22,7 +22,39 @@ "engines": { "node": "14" }, - "main": "lib/application-base/ApplicationBase.js", + "exports": { + "./action-menu": "./lib/action-menu/index.js", + "./application-base": "./lib/application-base/index.js", + "./application-container": "./lib/application-container/index.js", + "./application-error-boundary": "./lib/application-error-boundary/index.js", + "./application-intl": "./lib/application-intl/index.js", + "./application-loading-overlay": "./lib/application-loading-overlay/index.js", + "./application-navigation": "./lib/application-navigation/index.js", + "./application-status-overlay": "./lib/application-status-overlay/index.js", + "./breakpoints": "./lib/breakpoints/index.js", + "./disclosure-manager": "./lib/disclosure-manager/index.js", + "./modal-manager": "./lib/modal-manager/index.js", + "./navigation-prompt": "./lib/navigation-prompt/index.js", + "./notification-banner": "./lib/notification-banner/index.js", + "./slide-panel-manager": "./lib/slide-panel-manager/index.js", + "./terra-dev-site": "./lib/terra-dev-site/index.js", + "./theme": "./lib/theme/index.js", + "./utils": "./lib/utils/index.js", + "./workspace": "./lib/workspace/index.js", + "./utils/event-emitter": "./lib/utils/event-emitter/index.js", + "./utils/logger": "./lib/utils/logger/index.js", + "./package.json": "./package.json", + "./*": "./*", + "./application-base/*": "./lib/application-base/*", + "./application-error-boundary/*": "./lib/application-error-boundary/*", + "./application-loading-overlay/*": "./lib/application-loading-overlay/*", + "./application-navigation/*": "./lib/application-navigation/*", + "./application-status-overlay/*": "./lib/application-status-overlay/*", + "./breakpoints/*": "./lib/breakpoints/*", + "./modal-manager/*": "./lib/modal-manager/*", + "./slide-panel-manager/*": "./lib/slide-panel-manager/*", + "./workspace/*": "./lib/workspace/*" + }, "files": [ "lib", "src", diff --git a/packages/terra-application/src/application-base/ApplicationBase.jsx b/packages/terra-application/src/application-base/ApplicationBase.jsx index 44f4af555..5c36c342c 100644 --- a/packages/terra-application/src/application-base/ApplicationBase.jsx +++ b/packages/terra-application/src/application-base/ApplicationBase.jsx @@ -18,7 +18,7 @@ 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 { Logger } from '../utils'; import './private/initializeInert'; import './baseStyles'; diff --git a/packages/terra-application/src/application-base/baseStyles.js b/packages/terra-application/src/application-base/baseStyles.js index a85675852..abcf92127 100644 --- a/packages/terra-application/src/application-base/baseStyles.js +++ b/packages/terra-application/src/application-base/baseStyles.js @@ -1,5 +1,5 @@ import './Base.scss'; -import Logger from '../utils/logger'; +import { Logger } from '../utils'; // Checks to run when not in production if (process.env.NODE_ENV !== 'production') { diff --git a/packages/terra-application/src/application-base/private/intlLoaders.js b/packages/terra-application/src/application-base/private/intlLoaders.js index b8d45b436..269f57ae2 100644 --- a/packages/terra-application/src/application-base/private/intlLoaders.js +++ b/packages/terra-application/src/application-base/private/intlLoaders.js @@ -1,6 +1,6 @@ import hasIntlData from 'intl-locales-supported'; import loadLocaleData from './loadLocaleData'; -import logger from '../../utils/logger'; +import { Logger } from '../../utils'; const supportedIntlConstructors = (polyfill) => { /** @@ -52,7 +52,7 @@ const loadIntl = (locale, polyfill) => { 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.`); + Logger.warn(`${error.message} Using ${fallbackLocale} data as the fallback locale data.`); if (!hasIntlData([fallbackLocale], supportedIntlConstructors(polyfill))) { return loadLocaleData(fallbackLocale, polyfill); } @@ -62,7 +62,7 @@ const loadIntl = (locale, polyfill) => { return Promise.resolve(); }).catch((error) => { - logger.warn(`${error.message} Using en data as the fallback locale data.`); + Logger.warn(`${error.message} Using en data as the fallback locale data.`); if (!hasIntlData(['en'], supportedIntlConstructors(polyfill))) { return loadLocaleData('en', polyfill); diff --git a/packages/terra-application/src/application-base/private/translationsLoaders.js b/packages/terra-application/src/application-base/private/translationsLoaders.js index 3445704e8..f08035a4d 100644 --- a/packages/terra-application/src/application-base/private/translationsLoaders.js +++ b/packages/terra-application/src/application-base/private/translationsLoaders.js @@ -1,5 +1,5 @@ /* eslint-disable import/no-unresolved */ -import logger from '../../utils/logger'; +import { Logger } from '../../utils'; const loadTranslationsFile = (locale) => { switch (locale) { @@ -44,7 +44,7 @@ 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.`); + Logger.warn(`${error.message} Using ${fallbackLocale} data as the fallback locale.`); if (fallbackLocale) { return loadTranslationsFile(fallbackLocale); @@ -52,7 +52,7 @@ const loadTranslations = (locale) => { return Promise.reject(error); }).catch((error) => { - logger.warn(`${error.message} Using en as the fallback locale.`); + Logger.warn(`${error.message} Using en as the fallback locale.`); return loadTranslationsFile('en'); }); diff --git a/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx b/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx index f1b099427..6fb486918 100644 --- a/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx +++ b/packages/terra-application/src/application-error-boundary/ApplicationErrorBoundary.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import StatusView from 'terra-status-view'; import { injectIntl } from 'react-intl'; -import logger from '../utils/logger'; +import { Logger } from '../utils'; const propTypes = { /** @@ -79,7 +79,7 @@ class ApplicationErrorBoundary extends React.Component { * the ApplicationErrorBoundary to update again to ensure that the StatusView remains presented until the * next update occurs. */ - logger.error(error); + Logger.error(error); this.errorRef.current = error; this.setState({ error: undefined }); } 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 66755eef3..1e558218f 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 @@ -1,4 +1,4 @@ -import PropsTable from 'terra-application/lib/application-base/ApplicationBase?dev-site-props-table'; +import PropsTable from 'terra-application/application-base/ApplicationBase?dev-site-props-table'; # ApplicationBase @@ -9,7 +9,7 @@ The ApplicationBase component is the entrypoint into the Terra application frame ## Usage ```jsx -import ApplicationBase from 'terra-application/lib/application-base'; +import ApplicationBase from 'terra-application/application-base'; ``` ## Props diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationErrorBoundary.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationErrorBoundary.app.mdx index 75138f796..1760f17e0 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationErrorBoundary.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationErrorBoundary.app.mdx @@ -1,4 +1,4 @@ -import PropsTable from 'terra-application/lib/application-error-boundary/ApplicationErrorBoundary?dev-site-props-table'; +import PropsTable from 'terra-application/application-error-boundary/ApplicationErrorBoundary?dev-site-props-table'; import ApplicationErrorBoundaryExample from './example/ApplicationErrorBoundaryExample?dev-site-example'; # ApplicationErrorBoundary @@ -8,7 +8,7 @@ The ApplicationErrorBoundary catches exceptions thrown during its children's ren ## Usage ```jsx -import ApplicationErrorBoundary from 'terra-application/lib/application-error-boundary'; +import ApplicationErrorBoundary from 'terra-application/application-error-boundary'; ``` ## Props diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlay.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlay.app.mdx index b7fb1a223..5f69f79ea 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlay.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlay.app.mdx @@ -13,7 +13,7 @@ present a loading overlay. ## Usage ```jsx -import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; ``` ## Props diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlayProvider.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlayProvider.app.mdx index b3c7f8428..48f664d46 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlayProvider.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationLoadingOverlayProvider.app.mdx @@ -1,4 +1,4 @@ -import ApplicationLoadingOverlayProviderProps from 'terra-application/lib/application-loading-overlay/ApplicationLoadingOverlayProvider?dev-site-props-table'; +import ApplicationLoadingOverlayProviderProps from 'terra-application/application-loading-overlay/ApplicationLoadingOverlayProvider?dev-site-props-table'; # ApplicationLoadingOverlayProvider @@ -18,7 +18,7 @@ with the darkest specified style being honored. ## Usage ```jsx -import { ApplicationLoadingOverlayProvider } from 'terra-application/lib/application-loading-overlay'; +import { ApplicationLoadingOverlayProvider } from 'terra-application/application-loading-overlay'; ``` ## Props 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 aae19b9a8..f2405dd4e 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 @@ -1,5 +1,5 @@ -import PropsTable from 'terra-application/lib/application-navigation/ApplicationNavigation?dev-site-props-table'; -import ApplicationNavigationWorkspaceProps from 'terra-application/lib/application-navigation/private/workspace-layout/ApplicationNavigationWorkspace?dev-site-props-table'; +import PropsTable from 'terra-application/application-navigation/ApplicationNavigation?dev-site-props-table'; +import ApplicationNavigationWorkspaceProps from 'terra-application/application-navigation/private/workspace-layout/ApplicationNavigationWorkspace?dev-site-props-table'; import ApplicationNavigationExample from './example/ApplicationNavigationExample?dev-site-example'; import ApplicationNavigationWorkspaceExample from './example/ApplicationNavigationWorkspaceExample?dev-site-example'; @@ -13,7 +13,7 @@ The ApplicationNavigation component provides a styled layout and controls used f ## Usage ```jsx -import ApplicationNavigation from 'terra-application/lib/application-navigation'; +import ApplicationNavigation from 'terra-application/application-navigation'; ``` ## Required Contexts diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlay.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlay.app.mdx index 35db65c6c..d0a19827d 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlay.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlay.app.mdx @@ -13,7 +13,7 @@ present a staus view. ## Usage ```jsx -import ApplicationStatusOverlay from 'terra-application/lib/application-status-overlay'; +import ApplicationStatusOverlay from 'terra-application/application-status-overlay'; ``` ## Props diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlayProvider.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlayProvider.app.mdx index 5ed11121e..6d314a33d 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlayProvider.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/ApplicationStatusOverlayProvider.app.mdx @@ -1,4 +1,4 @@ -import ApplicationStatusOverlayProviderProps from 'terra-application/lib/application-status-overlay/ApplicationStatusOverlayProvider?dev-site-props-table'; +import ApplicationStatusOverlayProviderProps from 'terra-application/application-status-overlay/ApplicationStatusOverlayProvider?dev-site-props-table'; # ApplicationStatusOverlayProvider @@ -15,7 +15,7 @@ are rendered at the same time, with the last rendered ApplicationStatusOverlay g ## Usage ```jsx -import { ApplicationStatusOverlayProvider } from 'terra-application/lib/application-status-overlay'; +import { ApplicationStatusOverlayProvider } from 'terra-application/application-status-overlay'; ``` ## 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 3363210c7..950e248d7 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 @@ -1,4 +1,4 @@ -import PropsTable from 'terra-application/lib/modal-manager/ModalManager?dev-site-props-table'; +import PropsTable from 'terra-application/modal-manager/ModalManager?dev-site-props-table'; # ModalManager @@ -8,7 +8,7 @@ The ModalManager exposes its children to modal presentation APIs through the ## Usage ```jsx -import ModalManager from 'terra-application/lib/modal-manager'; +import ModalManager from 'terra-application/modal-manager'; ``` ## Props @@ -145,8 +145,8 @@ For application content that needs more specific dimensional control of modal si ```jsx import React from 'react'; import Button from 'terra-button'; -import ModalManager, { disclosureType } from 'terra-application/lib/modal-manager'; -import { withDisclosureManager, DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/lib/disclosure-manager'; +import ModalManager, { disclosureType } from 'terra-application/modal-manager'; +import { withDisclosureManager, DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/disclosure-manager'; import CollapsibleMenuView from 'terra-collapsible-menu-view'; const ModalComponentB = () => ( diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPrompt.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPrompt.app.mdx index c5a92f18f..dd9e92e8e 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPrompt.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/NavigationPrompt.app.mdx @@ -9,7 +9,7 @@ of pending actions or unsaved changes to the framework. ## Usage ```jsx -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import NavigationPrompt from 'terra-application/navigation-prompt'; ``` ## Props 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 45cbcbde6..9b6830d4d 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 @@ -10,7 +10,7 @@ influence its navigational workflows as necessary. ## Usage ```jsx -import { NavigationPromptCheckpoint } from 'terra-application/lib/navigation-prompt'; +import { NavigationPromptCheckpoint } from 'terra-application/navigation-prompt'; ``` ## Props @@ -63,7 +63,7 @@ to match the prompt messaging provided by the components within `terra-applicati ```jsx import React, { useContext, useRef } from 'react'; import { useIntl } from 'react-intl'; -import { NavigationPromptCheckpoint, getUnsavedChangesPromptOptions } from 'terra-application/lib/navigation-prompt'; +import { NavigationPromptCheckpoint, getUnsavedChangesPromptOptions } from 'terra-application/navigation-prompt'; const ExampleComponent = () => { const checkpointRef = useRef(); diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/SlidePanelManager.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/SlidePanelManager.app.mdx index 36f2424c6..b4ea494f4 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/SlidePanelManager.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/SlidePanelManager.app.mdx @@ -1,4 +1,4 @@ -import PropsTable from 'terra-application/lib/slide-panel-manager/SlidePanelManager?dev-site-props-table'; +import PropsTable from 'terra-application/slide-panel-manager/SlidePanelManager?dev-site-props-table'; @@ -10,7 +10,7 @@ The SlidePanelManager exposes its children to panel presentation APIs through th ## Usage ```jsx -import SlidePanelManager from 'terra-application/lib/slide-panel-manager'; +import SlidePanelManager from 'terra-application/slide-panel-manager'; ``` ## Props @@ -89,8 +89,8 @@ and each component in the disclosure stack will be decorated with the same acces ```jsx import React from 'react'; import Button from 'terra-button'; -import SlidePanelManager, { disclosureType } from 'terra-application/lib/slide-panel-manager'; -import { withDisclosureManager, DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/lib/disclosure-manager'; +import SlidePanelManager, { disclosureType } from 'terra-application/slide-panel-manager'; +import { withDisclosureManager, DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/disclosure-manager'; import CollapsibleMenuView from 'terra-collapsible-menu-view'; const PanelComponentB = () => ( diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/WorkspaceContent.app.mdx b/packages/terra-application/src/terra-dev-site/app/components.2/WorkspaceContent.app.mdx index 25808aea3..f4bdd3da9 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/WorkspaceContent.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/WorkspaceContent.app.mdx @@ -1,7 +1,7 @@ -import WorkspaceContentProps from 'terra-application/lib/workspace/WorkspaceContent?dev-site-props-table'; -import WorkspaceContentStatusOverlayProps from 'terra-application/lib/workspace/overlays/WorkspaceContentStatusOverlay?dev-site-props-table'; -import WorkspaceContentStatusOverlayButtonProps from 'terra-application/lib/workspace/shared/StatusLayoutButton?dev-site-props-table'; -import WorkspaceContentActivityOverlayProps from 'terra-application/lib/workspace/overlays/WorkspaceContentActivityOverlay?dev-site-props-table'; +import WorkspaceContentProps from 'terra-application/workspace/WorkspaceContent?dev-site-props-table'; +import WorkspaceContentStatusOverlayProps from 'terra-application/workspace/overlays/WorkspaceContentStatusOverlay?dev-site-props-table'; +import WorkspaceContentStatusOverlayButtonProps from 'terra-application/workspace/shared/StatusLayoutButton?dev-site-props-table'; +import WorkspaceContentActivityOverlayProps from 'terra-application/workspace/overlays/WorkspaceContentActivityOverlay?dev-site-props-table'; import { Notice } from '@cerner/terra-docs'; @@ -12,7 +12,7 @@ The WorkspaceContent component is essential for integrating into the workspace. ## Usage ```jsx -import { WorkspaceContent } from 'terra-application/lib/workspace'; +import { WorkspaceContent } from 'terra-application/workspace'; ``` Please see the [How To Create Workspace Content](/application/terra-application/how-to/create-workspace-content) guide for more usage information. 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 7ec14beb6..765d5732f 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,10 +1,10 @@ import React, { useState, useContext } from 'react'; 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'; -import ApplicationBase from 'terra-application/lib/application-base'; -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import { ThemeContext } from 'terra-application/theme'; +import { ActiveBreakpointContext } from 'terra-application/breakpoints'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; +import ApplicationBase from 'terra-application/application-base'; +import NavigationPrompt from 'terra-application/navigation-prompt'; const ApplicationContentExample = () => { const [isLoading, setIsLoading] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationErrorBoundaryExample.jsx b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationErrorBoundaryExample.jsx index 62a9ebc65..7ef064894 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationErrorBoundaryExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationErrorBoundaryExample.jsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -import ApplicationErrorBoundary from 'terra-application/lib/application-error-boundary/ApplicationErrorBoundary'; +import ApplicationErrorBoundary from 'terra-application/application-error-boundary'; import styles from './ApplicationErrorBoundaryExample.module.scss'; const cx = classNames.bind(styles); diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationLoadingOverlayExample.jsx b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationLoadingOverlayExample.jsx index 6e6a42383..6c83dc6b9 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationLoadingOverlayExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationLoadingOverlayExample.jsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import classNames from 'classnames/bind'; -import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay/ApplicationLoadingOverlay'; -import ApplicationLoadingOverlayProvider from 'terra-application/lib/application-loading-overlay/ApplicationLoadingOverlayProvider'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay/ApplicationLoadingOverlay'; +import ApplicationLoadingOverlayProvider from 'terra-application/application-loading-overlay/ApplicationLoadingOverlayProvider'; import styles from './ApplicationErrorBoundaryExample.module.scss'; diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationExample.jsx b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationExample.jsx index 20feb801e..dc7647a95 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationExample.jsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -import ApplicationNavigation from 'terra-application/lib/application-navigation'; -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import ApplicationNavigation from 'terra-application/application-navigation'; +import NavigationPrompt from 'terra-application/navigation-prompt'; import styles from './ApplicationNavigationExample.module.scss'; diff --git a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationWorkspaceExample.jsx b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationWorkspaceExample.jsx index 413b926ab..7771fcfd4 100644 --- a/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationWorkspaceExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/components.2/example/ApplicationNavigationWorkspaceExample.jsx @@ -2,9 +2,9 @@ import React, { useState } from 'react'; import classNames from 'classnames/bind'; import ApplicationNavigation, { ApplicationNavigationActionsContext, -} from 'terra-application/lib/application-navigation'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +} from 'terra-application/application-navigation'; +import { WorkspaceContent } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; import Button from 'terra-button'; import IconEdit from 'terra-icon/lib/icon/IconEdit'; import IconAdd from 'terra-icon/lib/icon/IconAdd'; diff --git a/packages/terra-application/src/terra-dev-site/app/contexts.2/ApplicationNavigationActionsContext.app.mdx b/packages/terra-application/src/terra-dev-site/app/contexts.2/ApplicationNavigationActionsContext.app.mdx index e0f82f0b0..6c2a87d58 100644 --- a/packages/terra-application/src/terra-dev-site/app/contexts.2/ApplicationNavigationActionsContext.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/contexts.2/ApplicationNavigationActionsContext.app.mdx @@ -7,7 +7,7 @@ Components rendered within the ApplicationNavigation component as children shoul ## Usage ```jsx -import { ApplicationNavigationActionsContext } from 'terra-application/lib/application-navigation/'; +import { ApplicationNavigationActionsContext } from 'terra-application/application-navigation/'; ``` ## Context Props 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 5316db8a9..efbf169bf 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 @@ -10,7 +10,7 @@ The DisclosureManagerContext defines an communication interface between the Moda ## Usage ```jsx -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; ``` ## Context Value @@ -33,7 +33,7 @@ their own component-specific contents into that header. |`collapsibleMenuView`|optional|A CollapsibleMenuView component to render within the header.| ```jsx -import { DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/disclosure-manager'; import CollapsibleMenuView from 'terra-collapsible-menu-view'; const MyDisclosureComponent = () => { diff --git a/packages/terra-application/src/terra-dev-site/app/contexts.2/example/ThemedComponent.jsx b/packages/terra-application/src/terra-dev-site/app/contexts.2/example/ThemedComponent.jsx index 724986897..b0d13b398 100644 --- a/packages/terra-application/src/terra-dev-site/app/contexts.2/example/ThemedComponent.jsx +++ b/packages/terra-application/src/terra-dev-site/app/contexts.2/example/ThemedComponent.jsx @@ -1,6 +1,6 @@ import React from 'react'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import styles from './ThemedComponent.module.scss'; 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 a6893f4f1..9a21f98cf 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 @@ -3,11 +3,11 @@ import React, { } from 'react'; 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 { ActiveBreakpointContext } from 'terra-application/breakpoints'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; import { useIntl } from 'react-intl'; -import { ThemeContext } from 'terra-application/lib/theme'; -import { ApplicationNavigationActionsContext } from 'terra-application/lib/application-navigation'; +import { ThemeContext } from 'terra-application/theme'; +import { ApplicationNavigationActionsContext } from 'terra-application/application-navigation'; import LoadingOverlayPresenter from './LoadingOverlayPresenter'; import ModalPresenter from './ModalPresenter'; diff --git a/packages/terra-application/src/terra-dev-site/app/demo/DemoAppNavigation.jsx b/packages/terra-application/src/terra-dev-site/app/demo/DemoAppNavigation.jsx index e64701db3..ee2647d35 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/DemoAppNavigation.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/DemoAppNavigation.jsx @@ -8,10 +8,10 @@ import IconAdd from 'terra-icon/lib/icon/IconAdd'; import IconAttachment from 'terra-icon/lib/icon/IconAttachment'; import Toolbar from 'terra-toolbar'; -import ApplicationNavigation from 'terra-application/lib/application-navigation'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +import ApplicationNavigation from 'terra-application/application-navigation'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; +import { WorkspaceContent } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; import { ModalContent } from './ModalPresenter'; diff --git a/packages/terra-application/src/terra-dev-site/app/demo/EventEmitter.jsx b/packages/terra-application/src/terra-dev-site/app/demo/EventEmitter.jsx index 4a8f151b1..29b6ef70d 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/EventEmitter.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/EventEmitter.jsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import EventEmitter from 'terra-application/lib/utils/event-emitter'; +import { EventEmitter } from 'terra-application/utils'; const EventEmitterExample = () => { const [counter, setCounter] = useState(0); diff --git a/packages/terra-application/src/terra-dev-site/app/demo/LoadingOverlayPresenter.jsx b/packages/terra-application/src/terra-dev-site/app/demo/LoadingOverlayPresenter.jsx index 3588b48e5..cae9e6456 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/LoadingOverlayPresenter.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/LoadingOverlayPresenter.jsx @@ -2,7 +2,7 @@ import React, { useState, useRef, useEffect, } from 'react'; -import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; const LoadingOverlayPresenter = () => { const [showLoadingOverlay, setShowLoadingOverlay] = 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 80152a4d8..be2cc1f20 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 @@ -5,10 +5,10 @@ import PropTypes from 'prop-types'; 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 { ActiveBreakpointContext } from 'terra-application/breakpoints'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; import { useIntl } from 'react-intl'; -import { DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext, DisclosureManagerHeaderAdapter } from 'terra-application/disclosure-manager'; import PendingActionToggle from './PendingActionToggle'; import styles from './ModalPresenter.module.scss'; diff --git a/packages/terra-application/src/terra-dev-site/app/demo/PendingActionToggle.jsx b/packages/terra-application/src/terra-dev-site/app/demo/PendingActionToggle.jsx index 85729c1f1..fa1d7a633 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/PendingActionToggle.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/PendingActionToggle.jsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import classNames from 'classnames/bind'; -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import NavigationPrompt from 'terra-application/navigation-prompt'; import styles from './PendingActionToggle.module.scss'; diff --git a/packages/terra-application/src/terra-dev-site/app/demo/StatusOverlayPresenter.jsx b/packages/terra-application/src/terra-dev-site/app/demo/StatusOverlayPresenter.jsx index 933f994c4..8a9176ce1 100644 --- a/packages/terra-application/src/terra-dev-site/app/demo/StatusOverlayPresenter.jsx +++ b/packages/terra-application/src/terra-dev-site/app/demo/StatusOverlayPresenter.jsx @@ -2,7 +2,7 @@ import React, { useState, useRef, useEffect, } from 'react'; -import ApplicationStatusOverlay from 'terra-application/lib/application-status-overlay'; +import ApplicationStatusOverlay from 'terra-application/application-status-overlay'; const StatusOverlayPresenter = () => { const [showStatusOverlay, setShowStatusOverlay] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/change-application-theme.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/change-application-theme.app.mdx index 75e9cab1e..bd79b0a05 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/change-application-theme.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/change-application-theme.app.mdx @@ -6,7 +6,7 @@ A `terra-theme.config.js` file must be available to enable themes. Check out the ```jsx import React from 'react'; - import ApplicationBase from 'terra-application/lib/application-base'; + import ApplicationBase from 'terra-application/application-base'; const ExampleApp = () => ( diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/create-workspace-content.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/create-workspace-content.app.mdx index 281f660b3..ebf0b1c1e 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/create-workspace-content.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/create-workspace-content.app.mdx @@ -13,7 +13,7 @@ Consumers of the [ApplicationNavigation](/application/terra-application/componen ```jsx import React from 'react'; -import ApplicationNavigation from 'terra-application/lib/application-navigation'; +import ApplicationNavigation from 'terra-application/application-navigation'; const MyContent1 = () => {...}; const MyContent2 = () => {...}; @@ -65,7 +65,7 @@ For MyContent1, we will start with a basic implementation of the WorkspaceConten ```jsx import React from 'react'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; +import { WorkspaceContent } from 'terra-application/workspace'; const MyContent1 = () => { return ( @@ -107,7 +107,7 @@ Below is an example using hooks to retrieve the `isActive` value. ```jsx import React from 'react'; -import { WorkspaceContent, WorkspaceContext } from 'terra-application/lib/workspace'; +import { WorkspaceContent, WorkspaceContext } from 'terra-application/workspace'; const MyContent1 = () => { const { isActive } = React.useContext(WorkspaceContext); @@ -148,7 +148,7 @@ The Toolbar and Button components, provided by the terra-toolbar and terra-butto import React from 'react'; import Toolbar from 'terra-toolbar'; import Button from 'terra-button'; -import { WorkspaceContent, WorkspaceContext } from 'terra-application/lib/workspace'; +import { WorkspaceContent, WorkspaceContext } from 'terra-application/workspace'; const MyContent1 = () => { const { isActive } = React.useContext(WorkspaceContext); @@ -188,7 +188,7 @@ We will create MyContent2 with the same basic implementation we started with for ```jsx import React from 'react'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; +import { WorkspaceContent } from 'terra-application/workspace'; const MyContent2 = () => { return ( @@ -213,8 +213,8 @@ The banners are rendered within the component's fixed header region and will not ```jsx import React from 'react'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +import { WorkspaceContent } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; const MyContent2 = () => { const [showAlertBanner, setShowAlertBanner] = useState(false); @@ -249,8 +249,8 @@ The provided `WorkspaceContent.ActivityOverlay` is the only supported component ```jsx import React from 'react'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +import { WorkspaceContent } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; const MyContent2 = () => { const [showAlertBanner, setShowAlertBanner] = React.useState(false); @@ -297,8 +297,8 @@ Note that this can be combined with and presented alongside the activity overlay ```jsx import React from 'react'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +import { WorkspaceContent } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; const MyContent2 = () => { const [showAlertBanner, setShowAlertBanner] = React.useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/example/WorkspaceContentHowToExample.jsx b/packages/terra-application/src/terra-dev-site/app/how-to.3/example/WorkspaceContentHowToExample.jsx index 94ecd80bf..42ac3ceed 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/example/WorkspaceContentHowToExample.jsx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/example/WorkspaceContentHowToExample.jsx @@ -2,9 +2,9 @@ import React, { useState } from 'react'; import classNames from 'classnames/bind'; import ApplicationNavigation, { ApplicationNavigationActionsContext, -} from 'terra-application/lib/application-navigation'; -import { WorkspaceContent, WorkspaceContext } from 'terra-application/lib/workspace'; -import NotificationBanner from 'terra-application/lib/notification-banner'; +} from 'terra-application/application-navigation'; +import { WorkspaceContent, WorkspaceContext } from 'terra-application/workspace'; +import NotificationBanner from 'terra-application/notification-banner'; import Button from 'terra-button'; import Toolbar from 'terra-toolbar'; diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/manage-unsaved-changes.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/manage-unsaved-changes.app.mdx index 3bfe878fe..0436c9e17 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/manage-unsaved-changes.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/manage-unsaved-changes.app.mdx @@ -6,7 +6,7 @@ Components that want to communicate the presence of their unsaved state to the f ```jsx import React, { useState } from 'react'; -import NavigationPrompt from 'terra-application/lib/navigation-prompt'; +import NavigationPrompt from 'terra-application/navigation-prompt'; const ExampleComponent = () => { const [hasPendingState, setHasPendingState] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-loading-overlays.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-loading-overlays.app.mdx index 55f164403..58578b470 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-loading-overlays.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-loading-overlays.app.mdx @@ -4,7 +4,7 @@ Loading overlays can be rendered within the framework by rendering an [Applicati ```jsx import React, { useState } from 'react'; -import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; const ExampleComponent = () => { const [isLoading, setIsLoading] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-modal-content.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-modal-content.app.mdx index ed938cbd0..c5e7196c7 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-modal-content.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-modal-content.app.mdx @@ -15,8 +15,8 @@ a ModalManager that suits your component's needs. ```jsx import React from 'react'; -import ApplicationBase from 'terra-application/lib/application-base'; -import ModalManager from 'terra-application/lib/modal-manager'; +import ApplicationBase from 'terra-application/application-base'; +import ModalManager from 'terra-application/modal-manager'; import ComponentWithModal from './ComponentWithModal'; @@ -36,7 +36,7 @@ to communicate with the ModalManager and disclose additional content. ```jsx import React, { useContext } from 'react'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import ModalContentComponent from './ModalContentComponent'; @@ -66,7 +66,7 @@ Components that need more control over the presentation of the modal have access ```jsx import React, { useContext, useRef } from 'react'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import ModalContentComponent from './ModalContentComponent'; diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-status-overlays.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-status-overlays.app.mdx index 46cc9bd1d..5364c9d71 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/show-status-overlays.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/show-status-overlays.app.mdx @@ -4,7 +4,7 @@ Status View can be rendered within the framework by rendering an [ApplicationSta ```jsx import React, { useState } from 'react'; -import ApplicationStatusOverlay from 'terra-application/lib/application-status-overlay'; +import ApplicationStatusOverlay from 'terra-application/application-status-overlay'; const ExampleComponent = () => { const [showStatusOverlay, setShowStatusOverlay] = useState(false); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-active-breakpoint.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-active-breakpoint.app.mdx index fea263fe9..805bdfa6a 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-active-breakpoint.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-active-breakpoint.app.mdx @@ -4,7 +4,7 @@ The active breakpoint value can be determined by using the [ActiveBreakpointCont ```jsx import React, { useContext } from 'react'; -import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; +import { ActiveBreakpointContext } from 'terra-application/breakpoints'; const ExampleComponent = () => { const activeBreakpoint = useContext(ActiveBreakpointContext); diff --git a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-event-emitter.app.mdx b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-event-emitter.app.mdx index 5cc307c88..0821f0bf4 100644 --- a/packages/terra-application/src/terra-dev-site/app/how-to.3/use-event-emitter.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/how-to.3/use-event-emitter.app.mdx @@ -4,7 +4,7 @@ Any react component can use EventEmitter to send events for notification purpose ```jsx import React, { useState, useEffect } from 'react'; -import EventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils/event-emitter'; const EventEmitterExample = () => { const [counter, setCounter] = useState(0); diff --git a/packages/terra-application/src/terra-dev-site/app/utilities.2/Breakpoints.app.mdx b/packages/terra-application/src/terra-dev-site/app/utilities.2/Breakpoints.app.mdx index d3cb02e5d..859b113b0 100644 --- a/packages/terra-application/src/terra-dev-site/app/utilities.2/Breakpoints.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/utilities.2/Breakpoints.app.mdx @@ -6,7 +6,7 @@ that can be used to detect and respond to breakpoint changes. ## Usage ```jsx -import breakpoints, { activeBreakpointForSize, breakpointIsActiveForSize } from 'terra-application/lib/breakpoints'; +import breakpoints, { activeBreakpointForSize, breakpointIsActiveForSize } from 'terra-application/breakpoints'; ``` ### `breakpoints` @@ -64,7 +64,7 @@ console.log(breakpointIsActiveForSize('enormous', 1500)); // true `terra-application` also provides a set of Sass mix-ins that define media queries for the supported breakpoints. ```scss -@import '~terra-application/lib/breakpoints/media-queries'; +@import '~terra-application/breakpoints/media-queries'; .example { color: blue; diff --git a/packages/terra-application/src/terra-dev-site/app/utilities.2/EventEmitter.app.mdx b/packages/terra-application/src/terra-dev-site/app/utilities.2/EventEmitter.app.mdx index cceba4b97..c08c1cc13 100644 --- a/packages/terra-application/src/terra-dev-site/app/utilities.2/EventEmitter.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/utilities.2/EventEmitter.app.mdx @@ -7,23 +7,23 @@ EventEmitter is a singleton that is shared throughout your application. It is important to unsubscribe by removing all listeners to all events when your application is unmounted. ```js -import EventEmitter from 'terra-application/lib/utils/event-emitter'; +import { EventEmitter } from 'terra-application/utils'; ``` ## API |method|syntax|Description| |---|---|---| -|`once`|`eventEmitter.once('event-name', listener)`|Adds a one-time listener function for the event named `event-name`. The next time `event-name` is triggered, this listener is removed and then invoked.| -|`on`|`eventEmitter.on('event-name', listener)`|Adds the listener function to the end of the listeners array for the event named `event-name`. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of `event-name` and listener will result in the listener being added, and called, multiple times.| -|`addListener`|`eventEmitter.addListener('event-name', listener)`|Alias to `on`| -|`off`|`eventEmitter.off('event-name', listener)`|Removes all specified listeners from the listener array for the event named `event-name`.| -|`removeListener`|`eventEmitter.removeListener('event-name', listener)`|Alias to `off`| -|`removeAllListeners`|`eventEmitter.removeAllListeners('event-name')`|Removes all listeners if not event names are specified, or those of the specified 'event-name'.| -|`emit`|`eventEmitter.emit('event-name', arg1, arg2);`|Synchronously calls each of the listeners registered for the event named 'event-name', in the order they were registered, passing the supplied arguments to each.| -|`eventNames`|`eventEmitter.eventNames()`|Returns an array listing the event names for which the emitter has registered listeners. The values in the array will be strings.| -|`listenerCount`|`eventEmitter.listenerCount('event-name')`|Returns the number of listeners listening to the event named 'event-name'.| -|`listeners`|`eventEmitter.listeners('event-name')`|Returns a copy of the array of listeners for the event named 'event-name'.| +|`once`|`EventEmitter.once('event-name', listener)`|Adds a one-time listener function for the event named `event-name`. The next time `event-name` is triggered, this listener is removed and then invoked.| +|`on`|`EventEmitter.on('event-name', listener)`|Adds the listener function to the end of the listeners array for the event named `event-name`. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of `event-name` and listener will result in the listener being added, and called, multiple times.| +|`addListener`|`EventEmitter.addListener('event-name', listener)`|Alias to `on`| +|`off`|`EventEmitter.off('event-name', listener)`|Removes all specified listeners from the listener array for the event named `event-name`.| +|`removeListener`|`EventEmitter.removeListener('event-name', listener)`|Alias to `off`| +|`removeAllListeners`|`EventEmitter.removeAllListeners('event-name')`|Removes all listeners if not event names are specified, or those of the specified 'event-name'.| +|`emit`|`EventEmitter.emit('event-name', arg1, arg2);`|Synchronously calls each of the listeners registered for the event named 'event-name', in the order they were registered, passing the supplied arguments to each.| +|`eventNames`|`EventEmitter.eventNames()`|Returns an array listing the event names for which the emitter has registered listeners. The values in the array will be strings.| +|`listenerCount`|`EventEmitter.listenerCount('event-name')`|Returns the number of listeners listening to the event named 'event-name'.| +|`listeners`|`EventEmitter.listeners('event-name')`|Returns a copy of the array of listeners for the event named 'event-name'.| ## Examples @@ -31,63 +31,63 @@ import EventEmitter from 'terra-application/lib/utils/event-emitter'; ### `once` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; let listenCount = 0; const listener = () => {listenCount += 1;} -eventEmitter.once('event-name', listener); -eventEmitter.emit('event-name'); // listenCount == 1 -eventEmitter.emit('event-name'); // Ignored: listenCount == 1 +EventEmitter.once('event-name', listener); +EventEmitter.emit('event-name'); // listenCount == 1 +EventEmitter.emit('event-name'); // Ignored: listenCount == 1 ``` ### `on` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; let listenCount = 0; const listener = () => {listenCount += 1;} -eventEmitter.on('event-name', listener); -eventEmitter.emit('event-name'); // listenCount == 1 -eventEmitter.emit('event-name'); // listenCount == 2 +EventEmitter.on('event-name', listener); +EventEmitter.emit('event-name'); // listenCount == 1 +EventEmitter.emit('event-name'); // listenCount == 2 ``` ### `off` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; let listenCount = 0; const listener = () => {listenCount += 1;} -eventEmitter.on('event-name', listener); -eventEmitter.off('event-name', listener); -eventEmitter.emit('event-name'); // Ignored: listenCount == 0 +EventEmitter.on('event-name', listener); +EventEmitter.off('event-name', listener); +EventEmitter.emit('event-name'); // Ignored: listenCount == 0 ``` ### `removeAllListeners` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; let listenCount = 0; const listener = () => {listenCount += 1;} -eventEmitter.on('event-name1', listener); -eventEmitter.on('event-name2', listener); -eventEmitter.on('event-name3', listener); -eventEmitter.removeAllListeners(); -eventEmitter.emit('event-name1'); // Ignored: listenCount == 0 -eventEmitter.emit('event-name2'); // Ignored: listenCount == 0 -eventEmitter.emit('event-name3'); // Ignored: listenCount == 0 +EventEmitter.on('event-name1', listener); +EventEmitter.on('event-name2', listener); +EventEmitter.on('event-name3', listener); +EventEmitter.removeAllListeners(); +EventEmitter.emit('event-name1'); // Ignored: listenCount == 0 +EventEmitter.emit('event-name2'); // Ignored: listenCount == 0 +EventEmitter.emit('event-name3'); // Ignored: listenCount == 0 ``` ### `emit` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; let listenCount = 0; const listener = (count) => { @@ -97,52 +97,52 @@ const listener = (count) => { listenCount += 1; } -eventEmitter.on('event-name', listener); -eventEmitter.emit('event-name'); // listenCount == 1 -eventEmitter.emit('event-name', 50); // listenCount == 51 +EventEmitter.on('event-name', listener); +EventEmitter.emit('event-name'); // listenCount == 1 +EventEmitter.emit('event-name', 50); // listenCount == 51 ``` ### `eventNames` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; const eventNames = ['event-name1', 'event-name2', 'event-name3'] -eventEmitter.on(eventNames[0], () => {}); -eventEmitter.on(eventNames[1], () => {}); -eventEmitter.on(eventNames[2], () => {}); +EventEmitter.on(eventNames[0], () => {}); +EventEmitter.on(eventNames[1], () => {}); +EventEmitter.on(eventNames[2], () => {}); -eventEmitter.eventNames(); // ['event-name1', 'event-name2', 'event-name3'] +EventEmitter.eventNames(); // ['event-name1', 'event-name2', 'event-name3'] ``` ### `listenerCount` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; -eventEmitter.on('event-name1', () => {}); -eventEmitter.on('event-name2', () => {}); -eventEmitter.on('event-name2', () => {}); +EventEmitter.on('event-name1', () => {}); +EventEmitter.on('event-name2', () => {}); +EventEmitter.on('event-name2', () => {}); -eventEmitter.listenerCount('event-name1'); // 1 -eventEmitter.listenerCount('event-name2'); // 2 +EventEmitter.listenerCount('event-name1'); // 1 +EventEmitter.listenerCount('event-name2'); // 2 ``` ### `listeners` ```js -import eventEmitter from 'terra-application/lib/utils/event-emitter'; +import EventEmitter from 'terra-application/utils'; const listener1 = () => {}; const listener2 = () => {}; -eventEmitter.on('event-name', listener1); -eventEmitter.on('event-name', listener2); +EventEmitter.on('event-name', listener1); +EventEmitter.on('event-name', listener2); -eventEmitter.listeners('event-name').length; // 2 -eventEmitter.listeners('event-name')[0]; // listener1 -eventEmitter.listeners('event-name')[1]; // listener2 +EventEmitter.listeners('event-name').length; // 2 +EventEmitter.listeners('event-name')[0]; // listener1 +EventEmitter.listeners('event-name')[1]; // listener2 ``` Follow the [official Node.js documentation](https://nodejs.org/docs/latest-v10.x/api/events.html) for more examples and other less common APIs. diff --git a/packages/terra-application/src/terra-dev-site/app/utilities.2/Logger.app.mdx b/packages/terra-application/src/terra-dev-site/app/utilities.2/Logger.app.mdx index 93b526470..b9f5c78d3 100644 --- a/packages/terra-application/src/terra-dev-site/app/utilities.2/Logger.app.mdx +++ b/packages/terra-application/src/terra-dev-site/app/utilities.2/Logger.app.mdx @@ -7,11 +7,11 @@ The logger works like the `console` for the `warn`, `error`, and `info` methods. By default the logger will send the messages to the corresponding console methods. In production, info and warning messages will be suppressed. ```js -import logger from 'terra-application/lib/utils/logger'; +import { Logger } from 'terra-application/utils'; -logger.error('error'); -logger.warn('warning'); -logger.info('info'); +Logger.error('error'); +Logger.warn('warning'); +Logger.info('info'); ``` ## Overriding @@ -19,7 +19,7 @@ logger.info('info'); It may be desirable to override the default implementation of the logger. For example, logs could be sent to a server side log aggregator. The logger is a singleton and should only be overridden once per application. To override the logger implementation, use the `initializeLogger` function and provide a new function for the logger. All loggers must have a method signature of `(obj1 [, obj2, ..., objN])`, the same as the [console.warn](https://developer.mozilla.org/en-US/docs/Web/API/Console/warn), [console.error](https://developer.mozilla.org/en-US/docs/Web/API/Console/error), and [console.info](https://developer.mozilla.org/en-US/docs/Web/API/Console/info) methods. ```js -import { initializeLogger } from 'terra-application/lib/logger'; +import { initializeLogger } from 'terra-application/logger'; initializeLogger({ onInfo: (...args) => console.log('[Info] ', ...args), diff --git a/packages/terra-application/src/terra-dev-site/guide/example/ExampleComponent.jsx b/packages/terra-application/src/terra-dev-site/guide/example/ExampleComponent.jsx index 3420496bd..c41d4c29c 100644 --- a/packages/terra-application/src/terra-dev-site/guide/example/ExampleComponent.jsx +++ b/packages/terra-application/src/terra-dev-site/guide/example/ExampleComponent.jsx @@ -1,6 +1,6 @@ import React from 'react'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import styles from './ExampleComponent.module.scss'; const cx = classNames.bind(styles); diff --git a/packages/terra-application/src/terra-dev-site/guide/theme-strategy.guide.mdx b/packages/terra-application/src/terra-dev-site/guide/theme-strategy.guide.mdx index 6b9509f85..af325dd8c 100644 --- a/packages/terra-application/src/terra-dev-site/guide/theme-strategy.guide.mdx +++ b/packages/terra-application/src/terra-dev-site/guide/theme-strategy.guide.mdx @@ -20,13 +20,13 @@ This guide will walk through theming an example component. The example component An application's theme is provided through [React context](https://reactjs.org/docs/context.html) by a theme provider. [Application Base](/application/terra-application/components/application-base) initializes a theme provider automatically. The theme value is accessed using the [theme context](/application/terra-application/contexts/theme-context) from terra-application. ```jsx -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; ``` Use the theme context to read the active theme value. ```jsx -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; const ExampleComponent = () => { // Access the active theme context value. @@ -39,7 +39,7 @@ The active theme's class name is stored in a `className` key in the context valu ```jsx import React from 'react'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import styles from './ThemedComponent.module.scss'; const cx = classNames.bind(styles); 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 f675e1564..475649811 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 @@ -1,11 +1,11 @@ import React, { useState, useContext } from 'react'; -import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; -import ApplicationLoadingOverlay from 'terra-application/lib/application-loading-overlay'; -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 { ActiveBreakpointContext } from 'terra-application/breakpoints'; +import ApplicationLoadingOverlay from 'terra-application/application-loading-overlay'; +import ApplicationStatusOverlay from 'terra-application/application-status-overlay'; +import ApplicationBase from 'terra-application/application-base'; +import NavigationPrompt from 'terra-application/navigation-prompt'; import { useIntl } from 'react-intl'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; const ApplicationContentTest = () => { const [isLoading, setIsLoading] = useState(false); 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 602ca5457..78a37149f 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,6 +1,6 @@ import React, { useContext } from 'react'; import { useIntl } from 'react-intl'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; const TestOverrideTest = () => { const applicationIntl = useIntl(); 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 efc375831..dcd703fe4 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,6 +1,6 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import { useIntl } from 'react-intl'; import ApplicationBase from '../../../application-base'; import ApplicationNavigation from '../../../application-navigation'; 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 b7ee683b3..ae7a3a0ba 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,9 +1,9 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import ApplicationNavigation, { ApplicationNavigationActionsContext, -} from 'terra-application/lib/application-navigation'; +} from 'terra-application/application-navigation'; import { useIntl } from 'react-intl'; import { WorkspaceContent } from '../../../workspace'; import ApplicationBase from '../../../application-base'; diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutClosedTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutClosedTest.test.jsx index bf66aa10b..fee6bc249 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutClosedTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutClosedTest.test.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import ApplicationNavigation, { ApplicationNavigationActionsContext, -} from 'terra-application/lib/application-navigation'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import WorkspaceLayout from 'terra-application/lib/application-navigation/private/workspace-layout/WorkspaceLayout'; +} from 'terra-application/application-navigation'; +import { WorkspaceContent } from 'terra-application/workspace'; +import WorkspaceLayout from 'terra-application/application-navigation/private/workspace-layout/WorkspaceLayout'; const PageContent = ({ title }) => { const actionsContext = React.useContext(ApplicationNavigationActionsContext); diff --git a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutOpenTest.test.jsx b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutOpenTest.test.jsx index 9d31eae5d..3bd682b31 100644 --- a/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutOpenTest.test.jsx +++ b/packages/terra-application/src/terra-dev-site/test/application-navigation/private/workspace-layout/WorkspaceLayoutOpenTest.test.jsx @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import ApplicationNavigation, { ApplicationNavigationActionsContext, -} from 'terra-application/lib/application-navigation'; -import { WorkspaceContent } from 'terra-application/lib/workspace'; -import WorkspaceLayout from 'terra-application/lib/application-navigation/private/workspace-layout/WorkspaceLayout'; +} from 'terra-application/application-navigation'; +import { WorkspaceContent } from 'terra-application/workspace'; +import WorkspaceLayout from 'terra-application/application-navigation/private/workspace-layout/WorkspaceLayout'; const PageContent = ({ title }) => { const actionsContext = React.useContext(ApplicationNavigationActionsContext); diff --git a/packages/terra-application/src/utils/index.js b/packages/terra-application/src/utils/index.js new file mode 100644 index 000000000..435b1bb93 --- /dev/null +++ b/packages/terra-application/src/utils/index.js @@ -0,0 +1,8 @@ +import Logger, { initializeLogger } from './logger'; +import EventEmitter from './event-emitter'; + +export { + Logger, + EventEmitter, + initializeLogger, +}; 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 index e4f58298b..2483aaf53 100644 --- a/packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js +++ b/packages/terra-application/tests/jest/application-base/private/intlLoaders.test.js @@ -1,7 +1,7 @@ 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'; +import { Logger } from '../../../../src/utils'; jest.mock('intl-locales-supported'); jest.mock('../../../../src/application-base/private/loadLocaleData'); @@ -26,7 +26,7 @@ describe('intlLoaders', () => { describe('dev environment', () => { beforeEach(() => { - logger.warn.mockClear(); + Logger.warn.mockClear(); }); it('logs a warning when the regional locale is not provided and locale fallback is used', () => { @@ -38,7 +38,7 @@ describe('intlLoaders', () => { }); 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-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'); @@ -54,7 +54,7 @@ describe('intlLoaders', () => { }); 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(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'); }); @@ -72,8 +72,8 @@ describe('intlLoaders', () => { }); 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(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'); }); @@ -93,7 +93,7 @@ describe('intlLoaders', () => { describe('production environment', () => { beforeEach(() => { process.env.NODE_ENV = 'production'; - logger.warn.mockClear(); + Logger.warn.mockClear(); }); afterEach(() => { 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 index 7f58b718c..5afff5c74 100644 --- a/packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js +++ b/packages/terra-application/tests/jest/application-base/private/translationsLoaders.test.js @@ -1,5 +1,5 @@ import loadTranslations from '../../../../src/application-base/private/translationsLoaders'; -import Logger from '../../../../src/utils/logger'; +import { Logger } from '../../../../src/utils'; describe('translationsLoaders', () => { beforeEach(() => { 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 996c2992f..393ef7757 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,6 +1,6 @@ import React from 'react'; import ApplicationErrorBoundary from '../../../src/application-error-boundary/ApplicationErrorBoundary'; -import Logger from '../../../src/utils/logger'; +import { Logger } from '../../../src/utils'; describe('ApplicationErrorBoundary', () => { describe('Snapshots', () => { diff --git a/packages/terra-application/tests/jest/utils/event-emitter/EventEmitter.test.jsx b/packages/terra-application/tests/jest/utils/event-emitter/EventEmitter.test.jsx index b25036a18..c5c2bed81 100644 --- a/packages/terra-application/tests/jest/utils/event-emitter/EventEmitter.test.jsx +++ b/packages/terra-application/tests/jest/utils/event-emitter/EventEmitter.test.jsx @@ -1,5 +1,5 @@ -import EventEmitter from '../../../../src/utils/event-emitter/EventEmitter'; // eslint-disable-line import/no-duplicates -import EventEmitter2 from '../../../../src/utils/event-emitter/EventEmitter'; // eslint-disable-line import/no-duplicates +import { EventEmitter } from '../../../../src/utils'; // eslint-disable-line import/no-duplicates +import { EventEmitter as EventEmitter2 } from '../../../../src/utils'; // eslint-disable-line import/no-duplicates describe('EventEmitter', () => { let listenCount = 0; diff --git a/packages/terra-application/tests/jest/utils/index.test.js b/packages/terra-application/tests/jest/utils/index.test.js new file mode 100644 index 000000000..43c9bf13e --- /dev/null +++ b/packages/terra-application/tests/jest/utils/index.test.js @@ -0,0 +1,13 @@ +import { Logger, initializeLogger, EventEmitter } from '../../../src/utils'; + +describe('utils/index', () => { + it('should export Logger', () => { + expect(Logger).toBeDefined(); + }); + it('should export SlidePanelManager', () => { + expect(initializeLogger).toBeDefined(); + }); + it('should export SlidePanelManager', () => { + expect(EventEmitter).toBeDefined(); + }); +}); diff --git a/packages/terra-application/tests/jest/utils/logger/index.test.js b/packages/terra-application/tests/jest/utils/logger/index.test.js index f8ae13f16..2d47ec82e 100644 --- a/packages/terra-application/tests/jest/utils/logger/index.test.js +++ b/packages/terra-application/tests/jest/utils/logger/index.test.js @@ -1,6 +1,4 @@ -import Logger, { - initializeLogger, -} from '../../../../src/utils/logger'; +import Logger, { initializeLogger } from '../../../../src/utils/logger'; describe('logger/index', () => { it('should export Logger', () => { diff --git a/packages/terra-application/tests/jest/utils/logger/logger.test.js b/packages/terra-application/tests/jest/utils/logger/logger.test.js index 9169e84bc..997299427 100644 --- a/packages/terra-application/tests/jest/utils/logger/logger.test.js +++ b/packages/terra-application/tests/jest/utils/logger/logger.test.js @@ -1,4 +1,4 @@ -import Logger, { initializeLogger } from '../../../../src/utils/logger'; +import { Logger, initializeLogger } from '../../../../src/utils'; /* eslint-disable no-console */ describe('Logger', () => { diff --git a/packages/terra-dev-site/CHANGELOG.md b/packages/terra-dev-site/CHANGELOG.md index 424ac38ba..2fe280f86 100644 --- a/packages/terra-dev-site/CHANGELOG.md +++ b/packages/terra-dev-site/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +* Added + * Added new config option `useDefaultWebpackResolver` to utilize the built-in webpack path resolver instead of the custom resolver. + * Changed * Dropped support for Node 10 & 12. Node 14 is now the minimum required version. * Dropped support for `enhanced-resolve v4` as a dependency. diff --git a/packages/terra-dev-site/src/content/_ContentLoaded.jsx b/packages/terra-dev-site/src/content/_ContentLoaded.jsx index 3270f402d..ecf92a0c4 100644 --- a/packages/terra-dev-site/src/content/_ContentLoaded.jsx +++ b/packages/terra-dev-site/src/content/_ContentLoaded.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNamesBind from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import styles from './ContentLoaded.module.scss'; diff --git a/packages/terra-dev-site/src/layouts/_DevSiteNavigationLayout.jsx b/packages/terra-dev-site/src/layouts/_DevSiteNavigationLayout.jsx index fc1372d2e..3b26bb07d 100644 --- a/packages/terra-dev-site/src/layouts/_DevSiteNavigationLayout.jsx +++ b/packages/terra-dev-site/src/layouts/_DevSiteNavigationLayout.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import { useLocation, useHistory, useRouteMatch } from 'react-router-dom'; import IconSearch from 'terra-icon/lib/icon/IconSearch'; import IconTile from 'terra-icon/lib/icon/IconTile'; -import TerraApplicationNavigation from 'terra-application/lib/application-navigation'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import TerraApplicationNavigation from 'terra-application/application-navigation'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import DevSitePage from '../pages/_DevSitePage'; import PageContainer from './page-container'; diff --git a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/SecondaryNavigationLayout.jsx b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/SecondaryNavigationLayout.jsx index ad2a55fe4..c0caba6d0 100644 --- a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/SecondaryNavigationLayout.jsx +++ b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/SecondaryNavigationLayout.jsx @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import { KEY_ESCAPE } from 'keycode-js'; import IconLeftPane from 'terra-icon/lib/icon/IconLeftPane'; -import { ThemeContext } from 'terra-application/lib/theme'; -import { ActiveBreakpointContext } from 'terra-application/lib/breakpoints'; +import { ThemeContext } from 'terra-application/theme'; +import { ActiveBreakpointContext } from 'terra-application/breakpoints'; import usePortalManager from '../../shared/usePortalManager'; import NavigationItem from './navigation-item'; diff --git a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/CollapsingNavigationMenu.jsx b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/CollapsingNavigationMenu.jsx index cf4754e39..48d2ddb64 100644 --- a/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/CollapsingNavigationMenu.jsx +++ b/packages/terra-dev-site/src/layouts/secondary-navigation-layout/side-nav/CollapsingNavigationMenu.jsx @@ -4,7 +4,7 @@ import React, { import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import * as KeyCode from 'keycode-js'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import CollapsingNavigationMenuItem from './CollapsingNavigationMenuItem'; 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 53b1ed209..5927efe79 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 @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; 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 { ThemeContext } from 'terra-application/theme'; import { useIntl } from 'react-intl'; import styles from './SideNavHeader.module.scss'; diff --git a/packages/terra-dev-site/src/loader-components/_ExampleTemplate.jsx b/packages/terra-dev-site/src/loader-components/_ExampleTemplate.jsx index 17745238b..8abe7a2c6 100644 --- a/packages/terra-dev-site/src/loader-components/_ExampleTemplate.jsx +++ b/packages/terra-dev-site/src/loader-components/_ExampleTemplate.jsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import IconChevronLeft from 'terra-icon/lib/icon/IconChevronLeft'; import IconChevronRight from 'terra-icon/lib/icon/IconChevronRight'; import { KEY_SPACE, KEY_RETURN } from 'keycode-js'; diff --git a/packages/terra-dev-site/src/loader-components/_PropsTable.jsx b/packages/terra-dev-site/src/loader-components/_PropsTable.jsx index 764de6381..f99c48097 100644 --- a/packages/terra-dev-site/src/loader-components/_PropsTable.jsx +++ b/packages/terra-dev-site/src/loader-components/_PropsTable.jsx @@ -2,7 +2,7 @@ import React, { useContext } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import Table, { Header, HeaderCell, diff --git a/packages/terra-dev-site/src/mdx/_Tag.jsx b/packages/terra-dev-site/src/mdx/_Tag.jsx index 0f6b04644..147fd8f1e 100644 --- a/packages/terra-dev-site/src/mdx/_Tag.jsx +++ b/packages/terra-dev-site/src/mdx/_Tag.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import styles from './MarkdownTags.module.scss'; const cx = classNames.bind(styles); diff --git a/packages/terra-dev-site/src/modals/_ApplicationSwitcherModal.jsx b/packages/terra-dev-site/src/modals/_ApplicationSwitcherModal.jsx index ac8afd2ec..ab23c3f86 100644 --- a/packages/terra-dev-site/src/modals/_ApplicationSwitcherModal.jsx +++ b/packages/terra-dev-site/src/modals/_ApplicationSwitcherModal.jsx @@ -1,7 +1,7 @@ import React from 'react'; import List, { Item } from 'terra-list'; import Hyperlink from 'terra-hyperlink'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import ContentContainer from 'terra-content-container'; import ActionHeader from 'terra-action-header'; diff --git a/packages/terra-dev-site/src/modals/_SearchModal.jsx b/packages/terra-dev-site/src/modals/_SearchModal.jsx index d78858021..49606eb2f 100644 --- a/packages/terra-dev-site/src/modals/_SearchModal.jsx +++ b/packages/terra-dev-site/src/modals/_SearchModal.jsx @@ -1,12 +1,12 @@ import React, { useState, useEffect, useRef } from 'react'; import { useHistory } from 'react-router-dom'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import ContentContainer from 'terra-content-container'; import ActionHeader from 'terra-action-header'; import classNamesBind from 'classnames/bind'; import List, { Item } from 'terra-list'; import SearchField from 'terra-search-field'; -import { ThemeContext } from 'terra-application/lib/theme'; +import { ThemeContext } from 'terra-application/theme'; import Fuse from 'fuse.js'; import StatusView from 'terra-status-view'; diff --git a/packages/terra-dev-site/src/modals/_SettingsModal.jsx b/packages/terra-dev-site/src/modals/_SettingsModal.jsx index a555cc383..033cf736d 100644 --- a/packages/terra-dev-site/src/modals/_SettingsModal.jsx +++ b/packages/terra-dev-site/src/modals/_SettingsModal.jsx @@ -6,7 +6,7 @@ import ActionHeader from 'terra-action-header'; import NativeSelect from 'terra-form-select/lib/native-select/NativeSelect'; import Field from 'terra-form-field'; import classNamesBind from 'classnames/bind'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import AppSettingsContext from '../site/_AppSettingsContext'; import styles from './SettingsModal.module.scss'; diff --git a/packages/terra-dev-site/src/pages/_DevSitePage.jsx b/packages/terra-dev-site/src/pages/_DevSitePage.jsx index 1a5c81563..d669f15aa 100644 --- a/packages/terra-dev-site/src/pages/_DevSitePage.jsx +++ b/packages/terra-dev-site/src/pages/_DevSitePage.jsx @@ -3,7 +3,7 @@ import IconStartPresenting from 'terra-icon/lib/icon/IconStartPresenting'; import IconSettings from 'terra-icon/lib/icon/IconSettings'; import { useLocation, useHistory } from 'react-router-dom'; import Button from 'terra-button'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import Page, { CardLayout, diff --git a/packages/terra-dev-site/src/pages/page/Page.jsx b/packages/terra-dev-site/src/pages/page/Page.jsx index bb059e4e7..6463190ca 100644 --- a/packages/terra-dev-site/src/pages/page/Page.jsx +++ b/packages/terra-dev-site/src/pages/page/Page.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames/bind'; import ThemeContext from 'terra-theme-context'; -import DynamicOverlayContainer from 'terra-application/lib/workspace/shared/DynamicOverlayContainer'; +import DynamicOverlayContainer from 'terra-application/workspace/shared/DynamicOverlayContainer'; import PageHeader from './PageHeader'; import PageActions from './PageActions'; diff --git a/packages/terra-dev-site/src/pages/page/Page.module.scss b/packages/terra-dev-site/src/pages/page/Page.module.scss index 0e710c2fa..7ad986026 100644 --- a/packages/terra-dev-site/src/pages/page/Page.module.scss +++ b/packages/terra-dev-site/src/pages/page/Page.module.scss @@ -1,4 +1,4 @@ -@import 'terra-application/lib/breakpoints/media-queries'; +@import 'terra-application/breakpoints/media-queries'; @import './clinical-lowlight-theme/Page.module'; @import './orion-fusion-theme/Page.module'; diff --git a/packages/terra-dev-site/src/pages/page/PageHeader.jsx b/packages/terra-dev-site/src/pages/page/PageHeader.jsx index c7579b6d8..db9099bd1 100644 --- a/packages/terra-dev-site/src/pages/page/PageHeader.jsx +++ b/packages/terra-dev-site/src/pages/page/PageHeader.jsx @@ -6,7 +6,7 @@ import IconRollup from 'terra-icon/lib/icon/IconRollup'; import Popup from 'terra-popup'; import ThemeContext from 'terra-theme-context'; -import ActionMenu, { ActionMenuItem } from 'terra-application/lib/action-menu'; +import ActionMenu, { ActionMenuItem } from 'terra-application/action-menu'; import { useIntl } from 'react-intl'; import useElementSize, { breakpointFilter } from '../../shared/useElementSize'; import PageContainerContext from '../../layouts/page-container/PageContainerContext'; diff --git a/packages/terra-dev-site/src/pages/page/layouts/Card.module.scss b/packages/terra-dev-site/src/pages/page/layouts/Card.module.scss index 8081ebd9a..c506928eb 100644 --- a/packages/terra-dev-site/src/pages/page/layouts/Card.module.scss +++ b/packages/terra-dev-site/src/pages/page/layouts/Card.module.scss @@ -1,4 +1,4 @@ -@import 'terra-application/lib/breakpoints/media-queries'; +@import 'terra-application/breakpoints/media-queries'; @import './clinical-lowlight-theme/Card.module'; @import './orion-fusion-theme/Card.module'; diff --git a/packages/terra-dev-site/src/pages/page/layouts/CardLayout.module.scss b/packages/terra-dev-site/src/pages/page/layouts/CardLayout.module.scss index 5b8d633ca..72614e451 100644 --- a/packages/terra-dev-site/src/pages/page/layouts/CardLayout.module.scss +++ b/packages/terra-dev-site/src/pages/page/layouts/CardLayout.module.scss @@ -1,4 +1,4 @@ -@import 'terra-application/lib/breakpoints/media-queries'; +@import 'terra-application/breakpoints/media-queries'; :local { .card-layout { diff --git a/packages/terra-dev-site/src/pages/page/layouts/StatusLayout.jsx b/packages/terra-dev-site/src/pages/page/layouts/StatusLayout.jsx index 994a8802d..4487144fb 100644 --- a/packages/terra-dev-site/src/pages/page/layouts/StatusLayout.jsx +++ b/packages/terra-dev-site/src/pages/page/layouts/StatusLayout.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import Button from 'terra-button'; import classNames from 'classnames/bind'; -import StatusIndicator from 'terra-application/lib/workspace/shared/StatusLayout'; +import StatusIndicator from 'terra-application/workspace/shared/StatusLayout'; import CardLayout from './CardLayout'; import Card from './Card'; diff --git a/packages/terra-dev-site/src/shared/ErrorBoundary.jsx b/packages/terra-dev-site/src/shared/ErrorBoundary.jsx index b5c40c9dc..a73f9b31c 100644 --- a/packages/terra-dev-site/src/shared/ErrorBoundary.jsx +++ b/packages/terra-dev-site/src/shared/ErrorBoundary.jsx @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import logger from 'terra-application/lib/utils/logger'; +import { Logger } from 'terra-application/utils'; const propTypes = { /** @@ -27,7 +27,7 @@ class ErrorBoundary extends React.Component { } componentDidCatch(error) { - logger.error(error); + Logger.error(error); if (this.props.onCatchError) { this.props.onCatchError(error); diff --git a/packages/terra-dev-site/src/shared/useElementSize.jsx b/packages/terra-dev-site/src/shared/useElementSize.jsx index ac807ad94..abca774ed 100644 --- a/packages/terra-dev-site/src/shared/useElementSize.jsx +++ b/packages/terra-dev-site/src/shared/useElementSize.jsx @@ -1,6 +1,6 @@ import React from 'react'; import ResizeObserver from 'resize-observer-polyfill'; -import { activeBreakpointForSize } from 'terra-application/lib/breakpoints'; +import { activeBreakpointForSize } from 'terra-application/breakpoints'; /** * Takes the given rect value and translates it into the shape desired by the useElementSize hook. diff --git a/packages/terra-dev-site/src/site/Site.jsx b/packages/terra-dev-site/src/site/Site.jsx index 782e0aaac..f001d581f 100644 --- a/packages/terra-dev-site/src/site/Site.jsx +++ b/packages/terra-dev-site/src/site/Site.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; import PropTypes from 'prop-types'; -import ModalManager from 'terra-application/lib/modal-manager'; +import ModalManager from 'terra-application/modal-manager'; import DevSiteLayout from '../layouts/_DevSiteLayout'; import AppSettingsProvider from './_AppSettingsProvider'; diff --git a/packages/terra-dev-site/src/site/_DevSiteApplicationBase.jsx b/packages/terra-dev-site/src/site/_DevSiteApplicationBase.jsx index 38ccefe1b..54e5dc8ef 100644 --- a/packages/terra-dev-site/src/site/_DevSiteApplicationBase.jsx +++ b/packages/terra-dev-site/src/site/_DevSiteApplicationBase.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { useRouteMatch } from 'react-router-dom'; import PropTypes from 'prop-types'; -import TerraApplicationBase from 'terra-application'; +import TerraApplicationBase from 'terra-application/application-base'; import AppSettingsContext from './_AppSettingsContext'; diff --git a/packages/terra-dev-site/src/webpack/plugin/SitePlugin.js b/packages/terra-dev-site/src/webpack/plugin/SitePlugin.js index 0eb970a8a..07944c5fd 100644 --- a/packages/terra-dev-site/src/webpack/plugin/SitePlugin.js +++ b/packages/terra-dev-site/src/webpack/plugin/SitePlugin.js @@ -28,12 +28,10 @@ const urlQueue = []; * Updates the webpack options with defaults that terra-dev-site requires. */ class SitePlugin { - constructor({ - entry, - config, - }) { + constructor({ entry, config }) { // Apply defaults to the config. this.siteConfig = config; + const { pathPrefix, titleConfig } = this.siteConfig; this.entry = entry; @@ -67,6 +65,7 @@ class SitePlugin { distributionFolder, basename, isWebpack5, + useDefaultWebpackResolver, }) { if (oneTimeSetupComplete) { return; @@ -96,10 +95,7 @@ class SitePlugin { // Only the first loader will apply and no others. oneOf: [{ test: /\.mdx$/, - use: [ - babelLoader, - mdxLoader, - ], + use: [babelLoader, mdxLoader], }, { test: /\.md$/, oneOf: [ @@ -134,19 +130,13 @@ class SitePlugin { ], }, { resourceQuery: '?dev-site-example', - use: [ - babelLoader, - 'devSiteExample', - ], + use: [babelLoader, 'devSiteExample'], }, { test: /\.json$/, // this bypasses the default json loader type: 'javascript/auto', resourceQuery: '?dev-site-package', - use: [ - babelLoader, - 'devSitePackage', - ], + use: [babelLoader, 'devSitePackage'], }, { resourceQuery: '?dev-site-props-table', use: [ @@ -187,10 +177,8 @@ class SitePlugin { }), ] : [], - // Alias the local package to allow imports to reference the file as if it was imported from node modules. - new LocalPackageAliasPlugin({ - rootDirectories, - }), + // // Alias the local package to allow imports to reference the file as if it was imported from node modules. + ...(useDefaultWebpackResolver ? [] : [new LocalPackageAliasPlugin({ rootDirectories })]), ], }, // add the path to search for dev site loaders @@ -269,7 +257,7 @@ class SitePlugin { // Strip the trailing / from the public path. let basename = publicPath.slice(0, -1); - const { sourceFolder, distributionFolder } = this.siteConfig; + const { sourceFolder, distributionFolder, useDefaultWebpackResolver } = this.siteConfig; // Since there can be multiple dev site plugins this config we only want to do once for all of them. SitePlugin.applyOneTimeSetup({ @@ -278,6 +266,7 @@ class SitePlugin { distributionFolder, basename, isWebpack5, + useDefaultWebpackResolver, }); // Get the list of apps excluding this current app. diff --git a/packages/terra-dev-site/src/webpack/plugin/applyDefaults.js b/packages/terra-dev-site/src/webpack/plugin/applyDefaults.js index fa4e04a3e..ea324cef5 100644 --- a/packages/terra-dev-site/src/webpack/plugin/applyDefaults.js +++ b/packages/terra-dev-site/src/webpack/plugin/applyDefaults.js @@ -45,6 +45,7 @@ const applyDefaults = ({ defaultLocale, defaultTheme, defaultDirection, + useDefaultWebpackResolver = false, faviconFilePath = path.join(__dirname, '..', 'terra-favicon', '32px', 'favicon.ico'), extensionItems = [], headHtml = [], @@ -69,6 +70,7 @@ const applyDefaults = ({ defaultLocale, defaultTheme, defaultDirection, + useDefaultWebpackResolver, faviconFilePath, extensionItems, headHtml, diff --git a/packages/terra-dev-site/src/webpack/plugin/resolve/LocalSubpathExportsResolverPlugin.js b/packages/terra-dev-site/src/webpack/plugin/resolve/LocalSubpathExportsResolverPlugin.js new file mode 100644 index 000000000..a3e3f14d4 --- /dev/null +++ b/packages/terra-dev-site/src/webpack/plugin/resolve/LocalSubpathExportsResolverPlugin.js @@ -0,0 +1,53 @@ +/* eslint-disable no-restricted-syntax, no-continue */ + +// Note: This is a work-in-progress experimental plugin to resolve entries in the "exports" field +// in the "exports" field of a package.json. However, it may not be needed with the "useDefaultWebpackResolver" config option. +// This plugin may be deleted in the future if it's no longer needed. + +const path = require('path'); +const glob = require('glob'); +const fs = require('fs'); +const AliasPlugin = require('enhanced-resolve/lib/AliasPlugin'); +/** + * Setup aliases for any subpaths found in a package.json exports field for a package. + * This aliases the subpath to the folder defined in the exports field. + * {subPath: pathToFolder} + */ +class LocalSubpathExportsResolverPlugin { + constructor({ rootDirectories = [process.cwd()] } = {}) { + const result = rootDirectories.reduce((acc, root) => acc.concat(glob.sync(`${root}/package.json`)) + .filter((rootPath) => JSON.parse(fs.readFileSync(rootPath)).exports) + .map((rootPath) => { + const dirname = path.dirname(rootPath); + const packageName = JSON.parse(fs.readFileSync(rootPath)).name; + + const { exports } = JSON.parse(fs.readFileSync(rootPath)); + + const subpathAliases = []; + + for (const [key, value] of Object.entries(exports)) { + if (key.includes('*')) continue; + + let alias = value.replace('./', `${dirname}/`); + alias = alias.replace('/index.js', ''); + + subpathAliases.push({ + name: key.replace('./', `${packageName}/`), + onlyModule: false, + alias, + }); + } + + return subpathAliases; + }), + []); + + this.alias = result.flat(); + } + + apply(resolver) { + new AliasPlugin('described-resolve', this.alias, 'resolve').apply(resolver); + } +} + +module.exports = LocalSubpathExportsResolverPlugin; diff --git a/packages/terra-dev-site/tests/jest/webpack/plugin/SitePlugin.test.js b/packages/terra-dev-site/tests/jest/webpack/plugin/SitePlugin.test.js index 25188bb32..091017d97 100644 --- a/packages/terra-dev-site/tests/jest/webpack/plugin/SitePlugin.test.js +++ b/packages/terra-dev-site/tests/jest/webpack/plugin/SitePlugin.test.js @@ -177,4 +177,49 @@ describe('SitePlugin', () => { // This is not called because one time setup has already been executed. expect(webpack.DefinePlugin).not.toHaveBeenCalled(); }); + + it.only('does not use the internal resolver plugin if useDefaultWebpackResolver is true', () => { + const config = { + pathPrefix: 'pathPrefix', + titleConfig: { title: 'title' }, + sourceFolder: 'src', + distributionFolder: 'lib', + defaultDirection: 'rtl', + faviconFilePath: 'favicon', + headHtml: [], + excludeChunks: [], + contentConfig: 'content', + useDefaultWebpackResolver: true, + }; + const siteConfig = { + config, + entry: 'entry', + }; + const plug = new SitePlugin(siteConfig); + + const compiler = { + options: { + output: {}, + module: { + rules: [], + }, + resolve: {}, + resolveLoader: {}, + devServer: {}, + entry: {}, + }, + hooks: { + afterPlugins: { + tap: jest.fn(), + }, + done: { + tap: jest.fn(), + }, + }, + }; + + plug.apply(compiler); + + expect(compiler.options.resolve.plugins[1]).not.toBeDefined(); + }); }); diff --git a/tests/terra-dev-site/test-extension/TestExtension.jsx b/tests/terra-dev-site/test-extension/TestExtension.jsx index 1c554b7d6..84420f8d2 100644 --- a/tests/terra-dev-site/test-extension/TestExtension.jsx +++ b/tests/terra-dev-site/test-extension/TestExtension.jsx @@ -1,7 +1,7 @@ import React from 'react'; import ContentContainer from 'terra-content-container'; import ActionHeader from 'terra-action-header'; -import { DisclosureManagerContext } from 'terra-application/lib/disclosure-manager'; +import { DisclosureManagerContext } from 'terra-application/disclosure-manager'; import StatusView from 'terra-status-view'; const TestExtension = () => { diff --git a/webpack.config.js b/webpack.config.js index d7e3f1635..7419bc2c2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,10 +11,12 @@ const devSiteConfig = (env = {}, argv = { p: false }) => ({ target: argv.p || argv.mode === 'production' ? 'browserslist' : 'web', plugins: [ new TerraDevSite({ + useDefaultWebpackResolver: true, defaultLocale: env.defaultLocale, excludeChunks: ['terra-application-test/index'], }), new TerraDevSite({ + useDefaultWebpackResolver: true, pathPrefix: 'extended', contentDirectory: 'dev-site-extended-test', primaryNavigationItems: [{