@atlaskit/app-provider 3.0.0 → 3.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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 3.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`0f3043fe00379`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0f3043fe00379) -
8
+ Adds subtree theming implementation behind feature gate. Exports `ThemeProvider` as first-class
9
+ API.
10
+
11
+ ## 3.1.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [`33a9e5805e0c7`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/33a9e5805e0c7) -
16
+ Adds fallback logic for requesting the colorMode from the `useColorMode()` hook. Also fixes
17
+ `useTheme()` so that `colorMode` isn't returned when its fallback logic is used
18
+
3
19
  ## 3.0.0
4
20
 
5
21
  ### Major Changes
package/dist/cjs/index.js CHANGED
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
8
+ Object.defineProperty(exports, "ThemeProvider", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _themeProvider.default;
12
+ }
13
+ });
7
14
  Object.defineProperty(exports, "UNSAFE_useColorModeForMigration", {
8
15
  enumerable: true,
9
16
  get: function get() {
@@ -47,5 +54,6 @@ Object.defineProperty(exports, "useTheme", {
47
54
  }
48
55
  });
49
56
  var _appProvider = _interopRequireDefault(require("./app-provider"));
50
- var _themeProvider = require("./theme-provider");
51
- var _useRouterLink = _interopRequireDefault(require("./router-link-provider/hooks/use-router-link"));
57
+ var _themeProvider = _interopRequireWildcard(require("./theme-provider"));
58
+ var _useRouterLink = _interopRequireDefault(require("./router-link-provider/hooks/use-router-link"));
59
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
@@ -27,5 +27,6 @@ var useRouterLink = function useRouterLink() {
27
27
  if (routerLinkComponent) {
28
28
  return routerLinkComponent;
29
29
  }
30
+ return;
30
31
  };
31
32
  var _default = exports.default = useRouterLink;
@@ -0,0 +1 @@
1
+ ._1e0c1bgi{display:contents}
@@ -1,3 +1,4 @@
1
+ /* theme-provider.tsx generated by @compiled/babel-plugin v0.36.1 */
1
2
  "use strict";
2
3
 
3
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -11,12 +12,15 @@ exports.useColorMode = useColorMode;
11
12
  exports.useSetColorMode = useSetColorMode;
12
13
  exports.useSetTheme = useSetTheme;
13
14
  exports.useTheme = useTheme;
15
+ require("./theme-provider.compiled.css");
16
+ var _runtime = require("@compiled/react/runtime");
14
17
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
18
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
20
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
18
21
  var _react = _interopRequireWildcard(require("react"));
19
22
  var _bindEventListener = require("bind-event-listener");
23
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
20
24
  var _tokens = require("@atlaskit/tokens");
21
25
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
26
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -53,10 +57,26 @@ function UNSAFE_useColorModeForMigration() {
53
57
  */
54
58
  function useColorMode() {
55
59
  var value = (0, _react.useContext)(ColorModeContext);
56
- if (!value) {
57
- throw new Error('useColorMode must be used within AppProvider.');
58
- }
59
- return value;
60
+ var _getGlobalTheme = (0, _tokens.getGlobalTheme)(),
61
+ colorMode = _getGlobalTheme.colorMode;
62
+ var _useState = (0, _react.useState)(colorMode || 'light'),
63
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
64
+ resolvedColorMode = _useState2[0],
65
+ setResolvedColorMode = _useState2[1];
66
+ (0, _react.useEffect)(function () {
67
+ // We are using theme from context so no need to reference the DOM
68
+ if (value) {
69
+ return;
70
+ }
71
+ var observer = new _tokens.ThemeMutationObserver(function (theme) {
72
+ setResolvedColorMode(theme.colorMode || 'light');
73
+ });
74
+ observer.observe();
75
+ return function () {
76
+ return observer.disconnect();
77
+ };
78
+ }, [value]);
79
+ return value ? value : resolvedColorMode;
60
80
  }
61
81
 
62
82
  /**
@@ -79,10 +99,10 @@ function useSetColorMode() {
79
99
  */
80
100
  function useTheme() {
81
101
  var theme = (0, _react.useContext)(ThemeContext);
82
- var _useState = (0, _react.useState)(theme || (0, _tokens.getGlobalTheme)()),
83
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
84
- resolvedTheme = _useState2[0],
85
- setResolvedTheme = _useState2[1];
102
+ var _useState3 = (0, _react.useState)(theme || (0, _tokens.getGlobalTheme)()),
103
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
104
+ resolvedTheme = _useState4[0],
105
+ setResolvedTheme = _useState4[1];
86
106
  (0, _react.useEffect)(function () {
87
107
  // We are using theme from context so no need to reference the DOM
88
108
  if (theme) {
@@ -94,7 +114,7 @@ function useTheme() {
94
114
  return observer.disconnect();
95
115
  };
96
116
  }, [theme]);
97
- return resolvedTheme;
117
+ return theme ? theme : resolvedTheme;
98
118
  }
99
119
 
100
120
  /**
@@ -120,6 +140,9 @@ function getReconciledColorMode(colorMode) {
120
140
  }
121
141
  return colorMode;
122
142
  }
143
+ var contentStyles = {
144
+ body: "_1e0c1bgi"
145
+ };
123
146
  /**
124
147
  * __Theme provider__
125
148
  *
@@ -131,20 +154,20 @@ function ThemeProvider(_ref) {
131
154
  var children = _ref.children,
132
155
  defaultColorMode = _ref.defaultColorMode,
133
156
  defaultTheme = _ref.defaultTheme;
134
- var _useState3 = (0, _react.useState)(defaultColorMode),
135
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
136
- chosenColorMode = _useState4[0],
137
- setChosenColorMode = _useState4[1];
138
- var _useState5 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
157
+ var _useState5 = (0, _react.useState)(defaultColorMode),
139
158
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
140
- reconciledColorMode = _useState6[0],
141
- setReconciledColorMode = _useState6[1];
142
- var _useState7 = (0, _react.useState)(function () {
159
+ chosenColorMode = _useState6[0],
160
+ setChosenColorMode = _useState6[1];
161
+ var _useState7 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
162
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
163
+ reconciledColorMode = _useState8[0],
164
+ setReconciledColorMode = _useState8[1];
165
+ var _useState9 = (0, _react.useState)(function () {
143
166
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
144
167
  }),
145
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
146
- theme = _useState8[0],
147
- setTheme = _useState8[1];
168
+ _useState0 = (0, _slicedToArray2.default)(_useState9, 2),
169
+ theme = _useState0[0],
170
+ setTheme = _useState0[1];
148
171
  var setColorMode = (0, _react.useCallback)(function (colorMode) {
149
172
  setChosenColorMode(colorMode);
150
173
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -156,6 +179,11 @@ function ThemeProvider(_ref) {
156
179
  }, []);
157
180
  var lastSetGlobalThemePromiseRef = (0, _react.useRef)(null);
158
181
  (0, _react.useEffect)(function () {
182
+ // If fg enabled avoid mounting themes
183
+ if ((0, _platformFeatureFlags.fg)('platform-static-theme-loading')) {
184
+ return;
185
+ }
186
+
159
187
  /**
160
188
  * We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
161
189
  * This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
@@ -238,6 +266,9 @@ function ThemeProvider(_ref) {
238
266
  });
239
267
  return unbindListener;
240
268
  }, [chosenColorMode]);
269
+ var attrs = (0, _tokens.getThemeHtmlAttrs)(_objectSpread(_objectSpread({}, theme), {}, {
270
+ colorMode: reconciledColorMode
271
+ }));
241
272
  return /*#__PURE__*/_react.default.createElement(ColorModeContext.Provider, {
242
273
  value: reconciledColorMode
243
274
  }, /*#__PURE__*/_react.default.createElement(SetColorModeContext.Provider, {
@@ -246,6 +277,10 @@ function ThemeProvider(_ref) {
246
277
  value: theme
247
278
  }, /*#__PURE__*/_react.default.createElement(SetThemeContext.Provider, {
248
279
  value: setPartialTheme
249
- }, children))));
280
+ }, (0, _platformFeatureFlags.fg)('platform-static-theme-loading') ? /*#__PURE__*/_react.default.createElement("div", {
281
+ "data-theme": attrs['data-theme'],
282
+ "data-color-mode": attrs['data-color-mode'],
283
+ className: (0, _runtime.ax)([contentStyles.body])
284
+ }, children) : children))));
250
285
  }
251
286
  var _default = exports.default = ThemeProvider;
@@ -1,4 +1,5 @@
1
1
  export { default } from './app-provider';
2
+ export { default as ThemeProvider } from './theme-provider';
2
3
  export { UNSAFE_useColorModeForMigration, useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
3
4
  import useRouterLink from './router-link-provider/hooks/use-router-link';
4
5
  export { useRouterLink };
@@ -23,5 +23,6 @@ const useRouterLink = () => {
23
23
  if (routerLinkComponent) {
24
24
  return routerLinkComponent;
25
25
  }
26
+ return;
26
27
  };
27
28
  export default useRouterLink;
@@ -0,0 +1 @@
1
+ ._1e0c1bgi{display:contents}
@@ -1,6 +1,10 @@
1
+ /* theme-provider.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./theme-provider.compiled.css";
3
+ import { ax, ix } from "@compiled/react/runtime";
1
4
  import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
2
5
  import { bind } from 'bind-event-listener';
3
- import { getGlobalTheme, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { getGlobalTheme, getThemeHtmlAttrs, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
4
8
  const defaultThemeSettings = () => ({
5
9
  dark: 'dark',
6
10
  light: 'light',
@@ -31,10 +35,22 @@ export function UNSAFE_useColorModeForMigration() {
31
35
  */
32
36
  export function useColorMode() {
33
37
  const value = useContext(ColorModeContext);
34
- if (!value) {
35
- throw new Error('useColorMode must be used within AppProvider.');
36
- }
37
- return value;
38
+ const {
39
+ colorMode
40
+ } = getGlobalTheme();
41
+ const [resolvedColorMode, setResolvedColorMode] = useState(colorMode || 'light');
42
+ useEffect(() => {
43
+ // We are using theme from context so no need to reference the DOM
44
+ if (value) {
45
+ return;
46
+ }
47
+ const observer = new ThemeMutationObserver(theme => {
48
+ setResolvedColorMode(theme.colorMode || 'light');
49
+ });
50
+ observer.observe();
51
+ return () => observer.disconnect();
52
+ }, [value]);
53
+ return value ? value : resolvedColorMode;
38
54
  }
39
55
 
40
56
  /**
@@ -67,7 +83,7 @@ export function useTheme() {
67
83
  observer.observe();
68
84
  return () => observer.disconnect();
69
85
  }, [theme]);
70
- return resolvedTheme;
86
+ return theme ? theme : resolvedTheme;
71
87
  }
72
88
 
73
89
  /**
@@ -93,6 +109,9 @@ function getReconciledColorMode(colorMode) {
93
109
  }
94
110
  return colorMode;
95
111
  }
112
+ const contentStyles = {
113
+ body: "_1e0c1bgi"
114
+ };
96
115
  /**
97
116
  * __Theme provider__
98
117
  *
@@ -123,6 +142,11 @@ function ThemeProvider({
123
142
  }, []);
124
143
  const lastSetGlobalThemePromiseRef = useRef(null);
125
144
  useEffect(() => {
145
+ // If fg enabled avoid mounting themes
146
+ if (fg('platform-static-theme-loading')) {
147
+ return;
148
+ }
149
+
126
150
  /**
127
151
  * We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
128
152
  * This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
@@ -171,6 +195,10 @@ function ThemeProvider({
171
195
  });
172
196
  return unbindListener;
173
197
  }, [chosenColorMode]);
198
+ const attrs = getThemeHtmlAttrs({
199
+ ...theme,
200
+ colorMode: reconciledColorMode
201
+ });
174
202
  return /*#__PURE__*/React.createElement(ColorModeContext.Provider, {
175
203
  value: reconciledColorMode
176
204
  }, /*#__PURE__*/React.createElement(SetColorModeContext.Provider, {
@@ -179,6 +207,10 @@ function ThemeProvider({
179
207
  value: theme
180
208
  }, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
181
209
  value: setPartialTheme
182
- }, children))));
210
+ }, fg('platform-static-theme-loading') ? /*#__PURE__*/React.createElement("div", {
211
+ "data-theme": attrs['data-theme'],
212
+ "data-color-mode": attrs['data-color-mode'],
213
+ className: ax([contentStyles.body])
214
+ }, children) : children))));
183
215
  }
184
216
  export default ThemeProvider;
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default } from './app-provider';
2
+ export { default as ThemeProvider } from './theme-provider';
2
3
  export { UNSAFE_useColorModeForMigration, useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
3
4
  import useRouterLink from './router-link-provider/hooks/use-router-link';
4
5
  export { useRouterLink };
@@ -22,5 +22,6 @@ var useRouterLink = function useRouterLink() {
22
22
  if (routerLinkComponent) {
23
23
  return routerLinkComponent;
24
24
  }
25
+ return;
25
26
  };
26
27
  export default useRouterLink;
@@ -0,0 +1 @@
1
+ ._1e0c1bgi{display:contents}
@@ -1,12 +1,16 @@
1
+ /* theme-provider.tsx generated by @compiled/babel-plugin v0.36.1 */
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
4
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
+ import "./theme-provider.compiled.css";
6
+ import { ax, ix } from "@compiled/react/runtime";
4
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
8
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
9
  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; }
7
10
  import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
8
11
  import { bind } from 'bind-event-listener';
9
- import { getGlobalTheme, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
12
+ import { fg } from '@atlaskit/platform-feature-flags';
13
+ import { getGlobalTheme, getThemeHtmlAttrs, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
10
14
  var defaultThemeSettings = function defaultThemeSettings() {
11
15
  return {
12
16
  dark: 'dark',
@@ -39,10 +43,26 @@ export function UNSAFE_useColorModeForMigration() {
39
43
  */
40
44
  export function useColorMode() {
41
45
  var value = useContext(ColorModeContext);
42
- if (!value) {
43
- throw new Error('useColorMode must be used within AppProvider.');
44
- }
45
- return value;
46
+ var _getGlobalTheme = getGlobalTheme(),
47
+ colorMode = _getGlobalTheme.colorMode;
48
+ var _useState = useState(colorMode || 'light'),
49
+ _useState2 = _slicedToArray(_useState, 2),
50
+ resolvedColorMode = _useState2[0],
51
+ setResolvedColorMode = _useState2[1];
52
+ useEffect(function () {
53
+ // We are using theme from context so no need to reference the DOM
54
+ if (value) {
55
+ return;
56
+ }
57
+ var observer = new ThemeMutationObserver(function (theme) {
58
+ setResolvedColorMode(theme.colorMode || 'light');
59
+ });
60
+ observer.observe();
61
+ return function () {
62
+ return observer.disconnect();
63
+ };
64
+ }, [value]);
65
+ return value ? value : resolvedColorMode;
46
66
  }
47
67
 
48
68
  /**
@@ -65,10 +85,10 @@ export function useSetColorMode() {
65
85
  */
66
86
  export function useTheme() {
67
87
  var theme = useContext(ThemeContext);
68
- var _useState = useState(theme || getGlobalTheme()),
69
- _useState2 = _slicedToArray(_useState, 2),
70
- resolvedTheme = _useState2[0],
71
- setResolvedTheme = _useState2[1];
88
+ var _useState3 = useState(theme || getGlobalTheme()),
89
+ _useState4 = _slicedToArray(_useState3, 2),
90
+ resolvedTheme = _useState4[0],
91
+ setResolvedTheme = _useState4[1];
72
92
  useEffect(function () {
73
93
  // We are using theme from context so no need to reference the DOM
74
94
  if (theme) {
@@ -80,7 +100,7 @@ export function useTheme() {
80
100
  return observer.disconnect();
81
101
  };
82
102
  }, [theme]);
83
- return resolvedTheme;
103
+ return theme ? theme : resolvedTheme;
84
104
  }
85
105
 
86
106
  /**
@@ -106,6 +126,9 @@ function getReconciledColorMode(colorMode) {
106
126
  }
107
127
  return colorMode;
108
128
  }
129
+ var contentStyles = {
130
+ body: "_1e0c1bgi"
131
+ };
109
132
  /**
110
133
  * __Theme provider__
111
134
  *
@@ -117,20 +140,20 @@ function ThemeProvider(_ref) {
117
140
  var children = _ref.children,
118
141
  defaultColorMode = _ref.defaultColorMode,
119
142
  defaultTheme = _ref.defaultTheme;
120
- var _useState3 = useState(defaultColorMode),
121
- _useState4 = _slicedToArray(_useState3, 2),
122
- chosenColorMode = _useState4[0],
123
- setChosenColorMode = _useState4[1];
124
- var _useState5 = useState(getReconciledColorMode(defaultColorMode)),
143
+ var _useState5 = useState(defaultColorMode),
125
144
  _useState6 = _slicedToArray(_useState5, 2),
126
- reconciledColorMode = _useState6[0],
127
- setReconciledColorMode = _useState6[1];
128
- var _useState7 = useState(function () {
145
+ chosenColorMode = _useState6[0],
146
+ setChosenColorMode = _useState6[1];
147
+ var _useState7 = useState(getReconciledColorMode(defaultColorMode)),
148
+ _useState8 = _slicedToArray(_useState7, 2),
149
+ reconciledColorMode = _useState8[0],
150
+ setReconciledColorMode = _useState8[1];
151
+ var _useState9 = useState(function () {
129
152
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
130
153
  }),
131
- _useState8 = _slicedToArray(_useState7, 2),
132
- theme = _useState8[0],
133
- setTheme = _useState8[1];
154
+ _useState0 = _slicedToArray(_useState9, 2),
155
+ theme = _useState0[0],
156
+ setTheme = _useState0[1];
134
157
  var setColorMode = useCallback(function (colorMode) {
135
158
  setChosenColorMode(colorMode);
136
159
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -142,6 +165,11 @@ function ThemeProvider(_ref) {
142
165
  }, []);
143
166
  var lastSetGlobalThemePromiseRef = useRef(null);
144
167
  useEffect(function () {
168
+ // If fg enabled avoid mounting themes
169
+ if (fg('platform-static-theme-loading')) {
170
+ return;
171
+ }
172
+
145
173
  /**
146
174
  * We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
147
175
  * This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
@@ -224,6 +252,9 @@ function ThemeProvider(_ref) {
224
252
  });
225
253
  return unbindListener;
226
254
  }, [chosenColorMode]);
255
+ var attrs = getThemeHtmlAttrs(_objectSpread(_objectSpread({}, theme), {}, {
256
+ colorMode: reconciledColorMode
257
+ }));
227
258
  return /*#__PURE__*/React.createElement(ColorModeContext.Provider, {
228
259
  value: reconciledColorMode
229
260
  }, /*#__PURE__*/React.createElement(SetColorModeContext.Provider, {
@@ -232,6 +263,10 @@ function ThemeProvider(_ref) {
232
263
  value: theme
233
264
  }, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
234
265
  value: setPartialTheme
235
- }, children))));
266
+ }, fg('platform-static-theme-loading') ? /*#__PURE__*/React.createElement("div", {
267
+ "data-theme": attrs['data-theme'],
268
+ "data-color-mode": attrs['data-color-mode'],
269
+ className: ax([contentStyles.body])
270
+ }, children) : children))));
236
271
  }
237
272
  export default ThemeProvider;
@@ -1,4 +1,5 @@
1
1
  export { default } from './app-provider';
2
+ export { default as ThemeProvider } from './theme-provider';
2
3
  export { UNSAFE_useColorModeForMigration, useColorMode, useSetColorMode, useSetTheme, useTheme, } from './theme-provider';
3
4
  export { type RouterLinkComponent, type RouterLinkComponentProps } from './router-link-provider';
4
5
  import useRouterLink from './router-link-provider/hooks/use-router-link';
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
1
5
  import React from 'react';
2
6
  import { type ThemeState } from '@atlaskit/tokens';
3
7
  export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
@@ -47,5 +51,5 @@ interface ThemeProviderProps {
47
51
  *
48
52
  * @internal
49
53
  */
50
- declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): React.JSX.Element;
54
+ declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
51
55
  export default ThemeProvider;
@@ -1,4 +1,5 @@
1
1
  export { default } from './app-provider';
2
+ export { default as ThemeProvider } from './theme-provider';
2
3
  export { UNSAFE_useColorModeForMigration, useColorMode, useSetColorMode, useSetTheme, useTheme, } from './theme-provider';
3
4
  export { type RouterLinkComponent, type RouterLinkComponentProps } from './router-link-provider';
4
5
  import useRouterLink from './router-link-provider/hooks/use-router-link';
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
1
5
  import React from 'react';
2
6
  import { type ThemeState } from '@atlaskit/tokens';
3
7
  export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
@@ -47,5 +51,5 @@ interface ThemeProviderProps {
47
51
  *
48
52
  * @internal
49
53
  */
50
- declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): React.JSX.Element;
54
+ declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
51
55
  export default ThemeProvider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "3.0.0",
3
+ "version": "3.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",
@@ -34,11 +34,10 @@
34
34
  "**/*.compiled.css"
35
35
  ],
36
36
  "atlaskit:src": "src/index.tsx",
37
- "af:exports": {
38
- ".": "./src/index.tsx"
39
- },
40
37
  "dependencies": {
41
- "@atlaskit/tokens": "^6.0.0",
38
+ "@atlaskit/css": "^0.14.0",
39
+ "@atlaskit/platform-feature-flags": "^1.1.0",
40
+ "@atlaskit/tokens": "^6.3.0",
42
41
  "@babel/runtime": "^7.0.0",
43
42
  "bind-event-listener": "^3.0.0"
44
43
  },
@@ -49,14 +48,17 @@
49
48
  "@af/visual-regression": "workspace:^",
50
49
  "@atlaskit/dropdown-menu": "^16.3.0",
51
50
  "@atlaskit/ds-lib": "^5.0.0",
52
- "@atlaskit/primitives": "^14.11.0",
53
- "@atlaskit/visual-regression": "workspace:^",
54
- "@atlassian/ssr-tests": "^0.2.0",
51
+ "@atlaskit/primitives": "^14.14.0",
52
+ "@atlassian/ssr-tests": "^0.3.0",
55
53
  "@testing-library/react": "^13.4.0",
56
54
  "@testing-library/user-event": "^14.4.3",
57
55
  "react-dom": "^18.2.0",
58
- "react-resource-router": "^0.20.0",
59
- "typescript": "~5.4.2"
56
+ "react-resource-router": "^0.20.0"
57
+ },
58
+ "platform-feature-flags": {
59
+ "platform-static-theme-loading": {
60
+ "type": "boolean"
61
+ }
60
62
  },
61
63
  "techstack": {
62
64
  "@atlassian/frontend": {