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: [{