@atlaskit/app-provider
Version:
A top level provider for the Design System.
45 lines (44 loc) • 1.94 kB
JavaScript
import React from 'react';
import { AppProviderThemingEnabledContext } from './app-provider-theming-enabled-context';
import { InsideAppProviderContext } from './inside-app-provider-context';
import RouterLinkProvider from './router-link-provider';
import { useScrollbarHarmonisation } from './scrollbar-harmonisation/use-scrollbar-harmonisation';
import { ThemeProvider } from './theme-provider';
import { useIsInsideAppProvider } from './use-is-inside-app-provider';
/**
* __App provider__
*
* An app provider provides app level configuration such as global theming.
*
* Place it at the root of your application.
*/
export function AppProvider({
children,
defaultColorMode = 'light',
defaultTheme,
routerLinkComponent,
UNSAFE_isThemingDisabled
}) {
const isInsideAppProvider = useIsInsideAppProvider();
useScrollbarHarmonisation();
if (isInsideAppProvider) {
throw new Error('App provider should not be nested within another app provider.');
}
const routerLinkProvider = /*#__PURE__*/React.createElement(RouterLinkProvider, {
routerLinkComponent: routerLinkComponent
}, children);
return /*#__PURE__*/React.createElement(InsideAppProviderContext.Provider, {
value: true
}, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/React.createElement(AppProviderThemingEnabledContext.Provider, {
value: true
}, /*#__PURE__*/React.createElement(ThemeProvider, {
defaultColorMode: defaultColorMode,
defaultTheme: defaultTheme
}, routerLinkProvider)));
}
/* eslint-disable-next-line @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
/**
* @deprecated Use `import { AppProvider } from '@atlaskit/app-provider/app-provider'` instead.
*/
// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports -- VOLTC-139 tracks removal of this deprecated default export shim.
export default AppProvider;