@atlaskit/app-provider 4.0.0 → 4.2.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 +27 -0
- package/dist/cjs/app-provider.js +4 -2
- package/dist/cjs/context.js +11 -1
- package/dist/cjs/theme-provider/index.js +6 -18
- package/dist/es2019/app-provider.js +5 -3
- package/dist/es2019/context.js +10 -0
- package/dist/es2019/theme-provider/index.js +7 -19
- package/dist/esm/app-provider.js +5 -3
- package/dist/esm/context.js +10 -0
- package/dist/esm/theme-provider/index.js +7 -19
- package/dist/types/context.d.ts +8 -1
- package/dist/types/theme-provider/context/color-mode.d.ts +2 -2
- package/dist/types/theme-provider/context/inside-theme-provider.d.ts +1 -1
- package/dist/types/theme-provider/context/theme.d.ts +2 -2
- package/dist/types/theme-provider/index.d.ts +1 -1
- package/dist/types-ts4.5/context.d.ts +8 -1
- package/dist/types-ts4.5/theme-provider/context/color-mode.d.ts +2 -2
- package/dist/types-ts4.5/theme-provider/context/inside-theme-provider.d.ts +1 -1
- package/dist/types-ts4.5/theme-provider/context/theme.d.ts +2 -2
- package/dist/types-ts4.5/theme-provider/index.d.ts +1 -1
- package/package.json +12 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @atlaskit/app-provider
|
|
2
2
|
|
|
3
|
+
## 4.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`1fab6967bb305`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1fab6967bb305) -
|
|
8
|
+
Tidied feature flag `platform_dst_subtree_theming` which enables sub-tree theming capabilities
|
|
9
|
+
within `@atlaskit/app-provider`
|
|
10
|
+
|
|
11
|
+
## 4.1.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [`233c7dede572a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/233c7dede572a) -
|
|
16
|
+
Fixes a bug with `AppProvider` where under certain conditions, can cause an infinite loop
|
|
17
|
+
switching between light/dark modes.
|
|
18
|
+
|
|
19
|
+
This was happening because of this check:
|
|
20
|
+
`const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;`
|
|
21
|
+
|
|
22
|
+
When an `AppProvider` has `UNSAFE_isThemingDisabled`, it avoids mounting it's root
|
|
23
|
+
`ThemeProvider`. However, any subsequently nested `ThemeProvider`s would become the root theme
|
|
24
|
+
provider of `AppProvider`, which uninintentionally enables global theming functionality.
|
|
25
|
+
|
|
26
|
+
The fix is to allow `ThemeProvider` to detect when a wrapping `AppProvider` has theming disabled,
|
|
27
|
+
which allows it to accurately determine if it is the root theme provider before enabling global
|
|
28
|
+
theming.
|
|
29
|
+
|
|
3
30
|
## 4.0.0
|
|
4
31
|
|
|
5
32
|
### Major Changes
|
package/dist/cjs/app-provider.js
CHANGED
|
@@ -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(
|
|
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;
|
package/dist/cjs/context.js
CHANGED
|
@@ -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
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* index.tsx generated by @compiled/babel-plugin v0.
|
|
1
|
+
/* index.tsx generated by @compiled/babel-plugin v0.39.1 */
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
@@ -16,7 +16,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
16
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
17
|
var _react = _interopRequireWildcard(require("react"));
|
|
18
18
|
var _bindEventListener = require("bind-event-listener");
|
|
19
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
20
19
|
var _tokens = require("@atlaskit/tokens");
|
|
21
20
|
var _context3 = require("../context");
|
|
22
21
|
var _colorMode = require("./context/color-mode");
|
|
@@ -82,19 +81,8 @@ function ThemeProvider(_ref) {
|
|
|
82
81
|
}, []);
|
|
83
82
|
var lastSetGlobalThemePromiseRef = (0, _react.useRef)(null);
|
|
84
83
|
var isInsideAppProvider = (0, _context3.useIsInsideAppProvider)();
|
|
84
|
+
var isAppProviderThemingEnabled = (0, _context3.useIsAppProviderThemingEnabled)();
|
|
85
85
|
var isInsideThemeProvider = (0, _useIsInsideThemeProvider.useIsInsideThemeProvider)();
|
|
86
|
-
var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
|
|
87
|
-
var shouldUseGlobalTheming =
|
|
88
|
-
/**
|
|
89
|
-
* When not behind feature flag, partially revert to legacy behavior.
|
|
90
|
-
* This only affects theme providers that are not inside an AppProvider or a ThemeProvider,
|
|
91
|
-
* as we still need to set global theme state to prevent breaking existing apps,
|
|
92
|
-
* but also prevent multiple theme providers from loading conflicting theme states.
|
|
93
|
-
*
|
|
94
|
-
* At some point this should be removed as we will
|
|
95
|
-
* only support sub-tree theming when used inside of AppProvider.
|
|
96
|
-
*/
|
|
97
|
-
!(0, _platformFeatureFlags.fg)('platform_dst_subtree_theming') && !isInsideAppProvider && !isInsideThemeProvider ||
|
|
98
86
|
/**
|
|
99
87
|
* A top-level ThemeProvider is detected by being the first ThemeProvider inside an AppProvider.
|
|
100
88
|
*
|
|
@@ -106,9 +94,9 @@ function ThemeProvider(_ref) {
|
|
|
106
94
|
* `html` in order to apply global theme state, which would allow a more consistent approach to
|
|
107
95
|
* theme loading.
|
|
108
96
|
*/
|
|
109
|
-
isRootThemeProvider;
|
|
97
|
+
var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
|
|
110
98
|
(0, _react.useEffect)(function () {
|
|
111
|
-
if (
|
|
99
|
+
if (isRootThemeProvider) {
|
|
112
100
|
/**
|
|
113
101
|
* We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
|
|
114
102
|
* This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
|
|
@@ -181,7 +169,7 @@ function ThemeProvider(_ref) {
|
|
|
181
169
|
// we treat them as sub-tree themes that do not load global theme state.
|
|
182
170
|
(0, _loadAndMountThemes.loadAndMountThemes)(theme);
|
|
183
171
|
}
|
|
184
|
-
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode,
|
|
172
|
+
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode, theme]);
|
|
185
173
|
(0, _react.useEffect)(function () {
|
|
186
174
|
if (!prefersDarkModeMql) {
|
|
187
175
|
return;
|
|
@@ -209,7 +197,7 @@ function ThemeProvider(_ref) {
|
|
|
209
197
|
value: theme
|
|
210
198
|
}, /*#__PURE__*/_react.default.createElement(_theme.SetThemeContext.Provider, {
|
|
211
199
|
value: setPartialTheme
|
|
212
|
-
}, !
|
|
200
|
+
}, !isRootThemeProvider ? /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, attrs, {
|
|
213
201
|
className: (0, _runtime.ax)([contentStyles.body])
|
|
214
202
|
}), children) : children)))));
|
|
215
203
|
}
|
|
@@ -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(
|
|
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;
|
package/dist/es2019/context.js
CHANGED
|
@@ -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
|
};
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
/* index.tsx generated by @compiled/babel-plugin v0.
|
|
1
|
+
/* index.tsx generated by @compiled/babel-plugin v0.39.1 */
|
|
2
2
|
import _extends from "@babel/runtime/helpers/extends";
|
|
3
3
|
import "./index.compiled.css";
|
|
4
4
|
import { ax, ix } from "@compiled/react/runtime";
|
|
5
5
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
6
6
|
import { bind } from 'bind-event-listener';
|
|
7
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
8
7
|
import { getThemeHtmlAttrs, setGlobalTheme, SUBTREE_THEME_ATTRIBUTE } from '@atlaskit/tokens';
|
|
9
|
-
import { useIsInsideAppProvider } from '../context';
|
|
8
|
+
import { useIsAppProviderThemingEnabled, useIsInsideAppProvider } from '../context';
|
|
10
9
|
import { ColorModeContext, SetColorModeContext } from './context/color-mode';
|
|
11
10
|
import { InsideThemeProviderContext } from './context/inside-theme-provider';
|
|
12
11
|
import { SetThemeContext, ThemeContext } from './context/theme';
|
|
@@ -60,19 +59,8 @@ function ThemeProvider({
|
|
|
60
59
|
}, []);
|
|
61
60
|
const lastSetGlobalThemePromiseRef = useRef(null);
|
|
62
61
|
const isInsideAppProvider = useIsInsideAppProvider();
|
|
62
|
+
const isAppProviderThemingEnabled = useIsAppProviderThemingEnabled();
|
|
63
63
|
const isInsideThemeProvider = useIsInsideThemeProvider();
|
|
64
|
-
const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
|
|
65
|
-
const shouldUseGlobalTheming =
|
|
66
|
-
/**
|
|
67
|
-
* When not behind feature flag, partially revert to legacy behavior.
|
|
68
|
-
* This only affects theme providers that are not inside an AppProvider or a ThemeProvider,
|
|
69
|
-
* as we still need to set global theme state to prevent breaking existing apps,
|
|
70
|
-
* but also prevent multiple theme providers from loading conflicting theme states.
|
|
71
|
-
*
|
|
72
|
-
* At some point this should be removed as we will
|
|
73
|
-
* only support sub-tree theming when used inside of AppProvider.
|
|
74
|
-
*/
|
|
75
|
-
!fg('platform_dst_subtree_theming') && !isInsideAppProvider && !isInsideThemeProvider ||
|
|
76
64
|
/**
|
|
77
65
|
* A top-level ThemeProvider is detected by being the first ThemeProvider inside an AppProvider.
|
|
78
66
|
*
|
|
@@ -84,9 +72,9 @@ function ThemeProvider({
|
|
|
84
72
|
* `html` in order to apply global theme state, which would allow a more consistent approach to
|
|
85
73
|
* theme loading.
|
|
86
74
|
*/
|
|
87
|
-
isRootThemeProvider;
|
|
75
|
+
const isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
|
|
88
76
|
useEffect(() => {
|
|
89
|
-
if (
|
|
77
|
+
if (isRootThemeProvider) {
|
|
90
78
|
/**
|
|
91
79
|
* We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
|
|
92
80
|
* This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
|
|
@@ -125,7 +113,7 @@ function ThemeProvider({
|
|
|
125
113
|
// we treat them as sub-tree themes that do not load global theme state.
|
|
126
114
|
loadAndMountThemes(theme);
|
|
127
115
|
}
|
|
128
|
-
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode,
|
|
116
|
+
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode, theme]);
|
|
129
117
|
useEffect(() => {
|
|
130
118
|
if (!prefersDarkModeMql) {
|
|
131
119
|
return;
|
|
@@ -157,7 +145,7 @@ function ThemeProvider({
|
|
|
157
145
|
value: theme
|
|
158
146
|
}, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
|
|
159
147
|
value: setPartialTheme
|
|
160
|
-
}, !
|
|
148
|
+
}, !isRootThemeProvider ? /*#__PURE__*/React.createElement("div", _extends({}, attrs, {
|
|
161
149
|
className: ax([contentStyles.body])
|
|
162
150
|
}), children) : children)))));
|
|
163
151
|
}
|
package/dist/esm/app-provider.js
CHANGED
|
@@ -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(
|
|
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;
|
package/dist/esm/context.js
CHANGED
|
@@ -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
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* index.tsx generated by @compiled/babel-plugin v0.
|
|
1
|
+
/* index.tsx generated by @compiled/babel-plugin v0.39.1 */
|
|
2
2
|
import _extends from "@babel/runtime/helpers/extends";
|
|
3
3
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
4
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
@@ -10,9 +10,8 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
10
10
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
11
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
12
12
|
import { bind } from 'bind-event-listener';
|
|
13
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
14
13
|
import { getThemeHtmlAttrs, setGlobalTheme, SUBTREE_THEME_ATTRIBUTE } from '@atlaskit/tokens';
|
|
15
|
-
import { useIsInsideAppProvider } from '../context';
|
|
14
|
+
import { useIsAppProviderThemingEnabled, useIsInsideAppProvider } from '../context';
|
|
16
15
|
import { ColorModeContext, SetColorModeContext } from './context/color-mode';
|
|
17
16
|
import { InsideThemeProviderContext } from './context/inside-theme-provider';
|
|
18
17
|
import { SetThemeContext, ThemeContext } from './context/theme';
|
|
@@ -73,19 +72,8 @@ function ThemeProvider(_ref) {
|
|
|
73
72
|
}, []);
|
|
74
73
|
var lastSetGlobalThemePromiseRef = useRef(null);
|
|
75
74
|
var isInsideAppProvider = useIsInsideAppProvider();
|
|
75
|
+
var isAppProviderThemingEnabled = useIsAppProviderThemingEnabled();
|
|
76
76
|
var isInsideThemeProvider = useIsInsideThemeProvider();
|
|
77
|
-
var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider;
|
|
78
|
-
var shouldUseGlobalTheming =
|
|
79
|
-
/**
|
|
80
|
-
* When not behind feature flag, partially revert to legacy behavior.
|
|
81
|
-
* This only affects theme providers that are not inside an AppProvider or a ThemeProvider,
|
|
82
|
-
* as we still need to set global theme state to prevent breaking existing apps,
|
|
83
|
-
* but also prevent multiple theme providers from loading conflicting theme states.
|
|
84
|
-
*
|
|
85
|
-
* At some point this should be removed as we will
|
|
86
|
-
* only support sub-tree theming when used inside of AppProvider.
|
|
87
|
-
*/
|
|
88
|
-
!fg('platform_dst_subtree_theming') && !isInsideAppProvider && !isInsideThemeProvider ||
|
|
89
77
|
/**
|
|
90
78
|
* A top-level ThemeProvider is detected by being the first ThemeProvider inside an AppProvider.
|
|
91
79
|
*
|
|
@@ -97,9 +85,9 @@ function ThemeProvider(_ref) {
|
|
|
97
85
|
* `html` in order to apply global theme state, which would allow a more consistent approach to
|
|
98
86
|
* theme loading.
|
|
99
87
|
*/
|
|
100
|
-
isRootThemeProvider;
|
|
88
|
+
var isRootThemeProvider = isInsideAppProvider && !isInsideThemeProvider && isAppProviderThemingEnabled;
|
|
101
89
|
useEffect(function () {
|
|
102
|
-
if (
|
|
90
|
+
if (isRootThemeProvider) {
|
|
103
91
|
/**
|
|
104
92
|
* We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
|
|
105
93
|
* This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
|
|
@@ -172,7 +160,7 @@ function ThemeProvider(_ref) {
|
|
|
172
160
|
// we treat them as sub-tree themes that do not load global theme state.
|
|
173
161
|
loadAndMountThemes(theme);
|
|
174
162
|
}
|
|
175
|
-
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode,
|
|
163
|
+
}, [isInsideAppProvider, isInsideThemeProvider, isRootThemeProvider, reconciledColorMode, theme]);
|
|
176
164
|
useEffect(function () {
|
|
177
165
|
if (!prefersDarkModeMql) {
|
|
178
166
|
return;
|
|
@@ -200,7 +188,7 @@ function ThemeProvider(_ref) {
|
|
|
200
188
|
value: theme
|
|
201
189
|
}, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
|
|
202
190
|
value: setPartialTheme
|
|
203
|
-
}, !
|
|
191
|
+
}, !isRootThemeProvider ? /*#__PURE__*/React.createElement("div", _extends({}, attrs, {
|
|
204
192
|
className: ax([contentStyles.body])
|
|
205
193
|
}), children) : children)))));
|
|
206
194
|
}
|
package/dist/types/context.d.ts
CHANGED
|
@@ -3,5 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A context that indicates if the current component is inside an AppProvider.
|
|
5
5
|
*/
|
|
6
|
-
export declare const InsideAppProviderContext: import(
|
|
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;
|
|
@@ -3,8 +3,8 @@ export type ReconciledColorMode = Exclude<ThemeColorModes, 'auto'>;
|
|
|
3
3
|
/**
|
|
4
4
|
* __Color mode context__
|
|
5
5
|
*/
|
|
6
|
-
export declare const ColorModeContext: import(
|
|
6
|
+
export declare const ColorModeContext: import('react').Context<ReconciledColorMode | undefined>;
|
|
7
7
|
/**
|
|
8
8
|
* __Set color mode context__
|
|
9
9
|
*/
|
|
10
|
-
export declare const SetColorModeContext: import(
|
|
10
|
+
export declare const SetColorModeContext: import('react').Context<((value: ThemeColorModes) => void) | undefined>;
|
|
@@ -3,8 +3,8 @@ export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
|
|
|
3
3
|
/**
|
|
4
4
|
* __Theme context__
|
|
5
5
|
*/
|
|
6
|
-
export declare const ThemeContext: import(
|
|
6
|
+
export declare const ThemeContext: import('react').Context<Theme | undefined>;
|
|
7
7
|
/**
|
|
8
8
|
* __Set theme context__
|
|
9
9
|
*/
|
|
10
|
-
export declare const SetThemeContext: import(
|
|
10
|
+
export declare const SetThemeContext: import('react').Context<((value: Partial<Theme>) => void) | undefined>;
|
|
@@ -15,5 +15,5 @@ export interface ThemeProviderProps {
|
|
|
15
15
|
*
|
|
16
16
|
* Provides global theming configuration.
|
|
17
17
|
*/
|
|
18
|
-
declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
|
|
18
|
+
declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
|
|
19
19
|
export default ThemeProvider;
|
|
@@ -3,5 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A context that indicates if the current component is inside an AppProvider.
|
|
5
5
|
*/
|
|
6
|
-
export declare const InsideAppProviderContext: import(
|
|
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;
|
|
@@ -3,8 +3,8 @@ export type ReconciledColorMode = Exclude<ThemeColorModes, 'auto'>;
|
|
|
3
3
|
/**
|
|
4
4
|
* __Color mode context__
|
|
5
5
|
*/
|
|
6
|
-
export declare const ColorModeContext: import(
|
|
6
|
+
export declare const ColorModeContext: import('react').Context<ReconciledColorMode | undefined>;
|
|
7
7
|
/**
|
|
8
8
|
* __Set color mode context__
|
|
9
9
|
*/
|
|
10
|
-
export declare const SetColorModeContext: import(
|
|
10
|
+
export declare const SetColorModeContext: import('react').Context<((value: ThemeColorModes) => void) | undefined>;
|
|
@@ -3,8 +3,8 @@ export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
|
|
|
3
3
|
/**
|
|
4
4
|
* __Theme context__
|
|
5
5
|
*/
|
|
6
|
-
export declare const ThemeContext: import(
|
|
6
|
+
export declare const ThemeContext: import('react').Context<Theme | undefined>;
|
|
7
7
|
/**
|
|
8
8
|
* __Set theme context__
|
|
9
9
|
*/
|
|
10
|
-
export declare const SetThemeContext: import(
|
|
10
|
+
export declare const SetThemeContext: import('react').Context<((value: Partial<Theme>) => void) | undefined>;
|
|
@@ -15,5 +15,5 @@ export interface ThemeProviderProps {
|
|
|
15
15
|
*
|
|
16
16
|
* Provides global theming configuration.
|
|
17
17
|
*/
|
|
18
|
-
declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
|
|
18
|
+
declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
|
|
19
19
|
export default ThemeProvider;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/app-provider",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "A top level provider for the Design System.",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
"registry": "https://registry.npmjs.org/"
|
|
9
9
|
},
|
|
10
10
|
"atlassian": {
|
|
11
|
+
"react-compiler": {
|
|
12
|
+
"enabled": true,
|
|
13
|
+
"gating": {
|
|
14
|
+
"source": "@atlassian/react-compiler-gating",
|
|
15
|
+
"importSpecifierName": "isReactCompilerActivePlatform"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
11
18
|
"team": "Design System Team",
|
|
12
19
|
"website": {
|
|
13
20
|
"name": "App provider",
|
|
@@ -38,7 +45,7 @@
|
|
|
38
45
|
"@atlaskit/browser-apis": "^0.0.1",
|
|
39
46
|
"@atlaskit/css": "^0.19.0",
|
|
40
47
|
"@atlaskit/platform-feature-flags": "^1.1.0",
|
|
41
|
-
"@atlaskit/tokens": "^11.
|
|
48
|
+
"@atlaskit/tokens": "^11.4.0",
|
|
42
49
|
"@babel/runtime": "^7.0.0",
|
|
43
50
|
"bind-event-listener": "^3.0.0"
|
|
44
51
|
},
|
|
@@ -47,18 +54,16 @@
|
|
|
47
54
|
},
|
|
48
55
|
"devDependencies": {
|
|
49
56
|
"@af/visual-regression": "workspace:^",
|
|
50
|
-
"@atlaskit/dropdown-menu": "^16.
|
|
51
|
-
"@atlaskit/primitives": "^18.
|
|
57
|
+
"@atlaskit/dropdown-menu": "^16.8.0",
|
|
58
|
+
"@atlaskit/primitives": "^18.1.0",
|
|
52
59
|
"@atlassian/feature-flags-test-utils": "^1.0.0",
|
|
60
|
+
"@atlassian/react-compiler-gating": "workspace:^",
|
|
53
61
|
"@atlassian/ssr-tests": "workspace:^",
|
|
54
62
|
"@atlassian/testing-library": "^0.4.0",
|
|
55
63
|
"react-dom": "^18.2.0",
|
|
56
64
|
"react-resource-router": "^0.20.0"
|
|
57
65
|
},
|
|
58
66
|
"platform-feature-flags": {
|
|
59
|
-
"platform_dst_subtree_theming": {
|
|
60
|
-
"type": "boolean"
|
|
61
|
-
},
|
|
62
67
|
"platform_increased-contrast-themes": {
|
|
63
68
|
"type": "boolean"
|
|
64
69
|
}
|