@atlaskit/app-provider 3.3.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 4.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`233c7dede572a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/233c7dede572a) -
8
+ Fixes a bug with `AppProvider` where under certain conditions, can cause an infinite loop
9
+ switching between light/dark modes.
10
+
11
+ This was happening because of this check:
12
+ `const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;`
13
+
14
+ When an `AppProvider` has `UNSAFE_isThemingDisabled`, it avoids mounting it's root
15
+ `ThemeProvider`. However, any subsequently nested `ThemeProvider`s would become the root theme
16
+ provider of `AppProvider`, which uninintentionally enables global theming functionality.
17
+
18
+ The fix is to allow `ThemeProvider` to detect when a wrapping `AppProvider` has theming disabled,
19
+ which allows it to accurately determine if it is the root theme provider before enabling global
20
+ theming.
21
+
22
+ ## 4.0.0
23
+
24
+ ### Major Changes
25
+
26
+ - [`2abd451d54eb2`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2abd451d54eb2) -
27
+ Removes atlassian-legacy-light/dark color themes from the tokens package. These themes are unused
28
+ and non-functional in terms of color contrast. As a result some primitive components may recieve
29
+ modern fallback color values in some scenarios, however these are inline with the latest token
30
+ themes.
31
+
32
+ ### Patch Changes
33
+
34
+ - Updated dependencies
35
+
3
36
  ## 3.3.3
4
37
 
5
38
  ### Patch Changes
@@ -32,9 +32,11 @@ function AppProvider(_ref) {
32
32
  }, children);
33
33
  return /*#__PURE__*/_react.default.createElement(_context.InsideAppProviderContext.Provider, {
34
34
  value: true
35
- }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/_react.default.createElement(_themeProvider.default, {
35
+ }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/_react.default.createElement(_context.AppProviderThemingEnabledContext.Provider, {
36
+ value: true
37
+ }, /*#__PURE__*/_react.default.createElement(_themeProvider.default, {
36
38
  defaultColorMode: defaultColorMode,
37
39
  defaultTheme: defaultTheme
38
- }, routerLinkProvider));
40
+ }, routerLinkProvider)));
39
41
  }
40
42
  var _default = exports.default = AppProvider;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useIsInsideAppProvider = exports.InsideAppProviderContext = void 0;
6
+ exports.useIsInsideAppProvider = exports.useIsAppProviderThemingEnabled = exports.InsideAppProviderContext = exports.AppProviderThemingEnabledContext = void 0;
7
7
  var _react = require("react");
8
8
  /**
9
9
  * __Inside app provider context__
@@ -13,4 +13,14 @@ var _react = require("react");
13
13
  var InsideAppProviderContext = exports.InsideAppProviderContext = /*#__PURE__*/(0, _react.createContext)(false);
14
14
  var useIsInsideAppProvider = exports.useIsInsideAppProvider = function useIsInsideAppProvider() {
15
15
  return (0, _react.useContext)(InsideAppProviderContext);
16
+ };
17
+
18
+ /**
19
+ * __App provider theming enabled context__
20
+ *
21
+ * A context that indicates if the AppProvider is enabled for theming.
22
+ */
23
+ var AppProviderThemingEnabledContext = exports.AppProviderThemingEnabledContext = /*#__PURE__*/(0, _react.createContext)(false);
24
+ var useIsAppProviderThemingEnabled = exports.useIsAppProviderThemingEnabled = function useIsAppProviderThemingEnabled() {
25
+ return (0, _react.useContext)(AppProviderThemingEnabledContext);
16
26
  };
@@ -82,8 +82,9 @@ function ThemeProvider(_ref) {
82
82
  }, []);
83
83
  var lastSetGlobalThemePromiseRef = (0, _react.useRef)(null);
84
84
  var isInsideAppProvider = (0, _context3.useIsInsideAppProvider)();
85
+ var isAppProviderThemingEnabled = (0, _context3.useIsAppProviderThemingEnabled)();
85
86
  var isInsideThemeProvider = (0, _useIsInsideThemeProvider.useIsInsideThemeProvider)();
86
- var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
87
+ var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
87
88
  var shouldUseGlobalTheming =
88
89
  /**
89
90
  * When not behind feature flag, partially revert to legacy behavior.
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { InsideAppProviderContext, useIsInsideAppProvider } from './context';
2
+ import { AppProviderThemingEnabledContext, InsideAppProviderContext, useIsInsideAppProvider } from './context';
3
3
  import RouterLinkProvider from './router-link-provider';
4
4
  import ThemeProvider from './theme-provider';
5
5
  /**
@@ -25,9 +25,11 @@ function AppProvider({
25
25
  }, children);
26
26
  return /*#__PURE__*/React.createElement(InsideAppProviderContext.Provider, {
27
27
  value: true
28
- }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/React.createElement(ThemeProvider, {
28
+ }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/React.createElement(AppProviderThemingEnabledContext.Provider, {
29
+ value: true
30
+ }, /*#__PURE__*/React.createElement(ThemeProvider, {
29
31
  defaultColorMode: defaultColorMode,
30
32
  defaultTheme: defaultTheme
31
- }, routerLinkProvider));
33
+ }, routerLinkProvider)));
32
34
  }
33
35
  export default AppProvider;
@@ -8,4 +8,14 @@ import { createContext, useContext } from 'react';
8
8
  export const InsideAppProviderContext = /*#__PURE__*/createContext(false);
9
9
  export const useIsInsideAppProvider = () => {
10
10
  return useContext(InsideAppProviderContext);
11
+ };
12
+
13
+ /**
14
+ * __App provider theming enabled context__
15
+ *
16
+ * A context that indicates if the AppProvider is enabled for theming.
17
+ */
18
+ export const AppProviderThemingEnabledContext = /*#__PURE__*/createContext(false);
19
+ export const useIsAppProviderThemingEnabled = () => {
20
+ return useContext(AppProviderThemingEnabledContext);
11
21
  };
@@ -6,7 +6,7 @@ import React, { useCallback, useEffect, useRef, useState } from 'react';
6
6
  import { bind } from 'bind-event-listener';
7
7
  import { fg } from '@atlaskit/platform-feature-flags';
8
8
  import { getThemeHtmlAttrs, setGlobalTheme, SUBTREE_THEME_ATTRIBUTE } from '@atlaskit/tokens';
9
- import { useIsInsideAppProvider } from '../context';
9
+ import { useIsAppProviderThemingEnabled, useIsInsideAppProvider } from '../context';
10
10
  import { ColorModeContext, SetColorModeContext } from './context/color-mode';
11
11
  import { InsideThemeProviderContext } from './context/inside-theme-provider';
12
12
  import { SetThemeContext, ThemeContext } from './context/theme';
@@ -60,8 +60,9 @@ function ThemeProvider({
60
60
  }, []);
61
61
  const lastSetGlobalThemePromiseRef = useRef(null);
62
62
  const isInsideAppProvider = useIsInsideAppProvider();
63
+ const isAppProviderThemingEnabled = useIsAppProviderThemingEnabled();
63
64
  const isInsideThemeProvider = useIsInsideThemeProvider();
64
- const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
65
+ const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
65
66
  const shouldUseGlobalTheming =
66
67
  /**
67
68
  * When not behind feature flag, partially revert to legacy behavior.
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { InsideAppProviderContext, useIsInsideAppProvider } from './context';
2
+ import { AppProviderThemingEnabledContext, InsideAppProviderContext, useIsInsideAppProvider } from './context';
3
3
  import RouterLinkProvider from './router-link-provider';
4
4
  import ThemeProvider from './theme-provider';
5
5
  /**
@@ -25,9 +25,11 @@ function AppProvider(_ref) {
25
25
  }, children);
26
26
  return /*#__PURE__*/React.createElement(InsideAppProviderContext.Provider, {
27
27
  value: true
28
- }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/React.createElement(ThemeProvider, {
28
+ }, UNSAFE_isThemingDisabled ? routerLinkProvider : /*#__PURE__*/React.createElement(AppProviderThemingEnabledContext.Provider, {
29
+ value: true
30
+ }, /*#__PURE__*/React.createElement(ThemeProvider, {
29
31
  defaultColorMode: defaultColorMode,
30
32
  defaultTheme: defaultTheme
31
- }, routerLinkProvider));
33
+ }, routerLinkProvider)));
32
34
  }
33
35
  export default AppProvider;
@@ -8,4 +8,14 @@ import { createContext, useContext } from 'react';
8
8
  export var InsideAppProviderContext = /*#__PURE__*/createContext(false);
9
9
  export var useIsInsideAppProvider = function useIsInsideAppProvider() {
10
10
  return useContext(InsideAppProviderContext);
11
+ };
12
+
13
+ /**
14
+ * __App provider theming enabled context__
15
+ *
16
+ * A context that indicates if the AppProvider is enabled for theming.
17
+ */
18
+ export var AppProviderThemingEnabledContext = /*#__PURE__*/createContext(false);
19
+ export var useIsAppProviderThemingEnabled = function useIsAppProviderThemingEnabled() {
20
+ return useContext(AppProviderThemingEnabledContext);
11
21
  };
@@ -12,7 +12,7 @@ import React, { useCallback, useEffect, useRef, useState } from 'react';
12
12
  import { bind } from 'bind-event-listener';
13
13
  import { fg } from '@atlaskit/platform-feature-flags';
14
14
  import { getThemeHtmlAttrs, setGlobalTheme, SUBTREE_THEME_ATTRIBUTE } from '@atlaskit/tokens';
15
- import { useIsInsideAppProvider } from '../context';
15
+ import { useIsAppProviderThemingEnabled, useIsInsideAppProvider } from '../context';
16
16
  import { ColorModeContext, SetColorModeContext } from './context/color-mode';
17
17
  import { InsideThemeProviderContext } from './context/inside-theme-provider';
18
18
  import { SetThemeContext, ThemeContext } from './context/theme';
@@ -73,8 +73,9 @@ function ThemeProvider(_ref) {
73
73
  }, []);
74
74
  var lastSetGlobalThemePromiseRef = useRef(null);
75
75
  var isInsideAppProvider = useIsInsideAppProvider();
76
+ var isAppProviderThemingEnabled = useIsAppProviderThemingEnabled();
76
77
  var isInsideThemeProvider = useIsInsideThemeProvider();
77
- var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
78
+ var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
78
79
  var shouldUseGlobalTheming =
79
80
  /**
80
81
  * When not behind feature flag, partially revert to legacy behavior.
@@ -5,3 +5,10 @@
5
5
  */
6
6
  export declare const InsideAppProviderContext: import("react").Context<boolean>;
7
7
  export declare const useIsInsideAppProvider: () => boolean;
8
+ /**
9
+ * __App provider theming enabled context__
10
+ *
11
+ * A context that indicates if the AppProvider is enabled for theming.
12
+ */
13
+ export declare const AppProviderThemingEnabledContext: import("react").Context<boolean>;
14
+ export declare const useIsAppProviderThemingEnabled: () => boolean;
@@ -5,3 +5,10 @@
5
5
  */
6
6
  export declare const InsideAppProviderContext: import("react").Context<boolean>;
7
7
  export declare const useIsInsideAppProvider: () => boolean;
8
+ /**
9
+ * __App provider theming enabled context__
10
+ *
11
+ * A context that indicates if the AppProvider is enabled for theming.
12
+ */
13
+ export declare const AppProviderThemingEnabledContext: import("react").Context<boolean>;
14
+ export declare const useIsAppProviderThemingEnabled: () => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "3.3.3",
3
+ "version": "4.1.0",
4
4
  "description": "A top level provider for the Design System.",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -38,7 +38,7 @@
38
38
  "@atlaskit/browser-apis": "^0.0.1",
39
39
  "@atlaskit/css": "^0.19.0",
40
40
  "@atlaskit/platform-feature-flags": "^1.1.0",
41
- "@atlaskit/tokens": "^10.1.0",
41
+ "@atlaskit/tokens": "^11.0.0",
42
42
  "@babel/runtime": "^7.0.0",
43
43
  "bind-event-listener": "^3.0.0"
44
44
  },
@@ -48,7 +48,7 @@
48
48
  "devDependencies": {
49
49
  "@af/visual-regression": "workspace:^",
50
50
  "@atlaskit/dropdown-menu": "^16.4.0",
51
- "@atlaskit/primitives": "^17.1.0",
51
+ "@atlaskit/primitives": "^18.0.0",
52
52
  "@atlassian/feature-flags-test-utils": "^1.0.0",
53
53
  "@atlassian/ssr-tests": "workspace:^",
54
54
  "@atlassian/testing-library": "^0.4.0",