@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 +16 -0
- package/dist/cjs/index.js +10 -2
- package/dist/cjs/router-link-provider/hooks/use-router-link.js +1 -0
- package/dist/cjs/theme-provider.compiled.css +1 -0
- package/dist/cjs/theme-provider.js +56 -21
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/router-link-provider/hooks/use-router-link.js +1 -0
- package/dist/es2019/theme-provider.compiled.css +1 -0
- package/dist/es2019/theme-provider.js +39 -7
- package/dist/esm/index.js +1 -0
- package/dist/esm/router-link-provider/hooks/use-router-link.js +1 -0
- package/dist/esm/theme-provider.compiled.css +1 -0
- package/dist/esm/theme-provider.js +57 -22
- package/dist/types/index.d.ts +1 -0
- package/dist/types/theme-provider.d.ts +5 -1
- package/dist/types-ts4.5/index.d.ts +1 -0
- package/dist/types-ts4.5/theme-provider.d.ts +5 -1
- package/package.json +12 -10
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); }
|
|
@@ -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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
83
|
-
|
|
84
|
-
resolvedTheme =
|
|
85
|
-
setResolvedTheme =
|
|
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
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
var _useState7 = (0, _react.useState)(
|
|
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
|
-
|
|
146
|
-
theme =
|
|
147
|
-
setTheme =
|
|
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
|
-
},
|
|
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;
|
package/dist/es2019/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 };
|
|
@@ -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 {
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
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
|
-
},
|
|
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 };
|
|
@@ -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 {
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
resolvedTheme =
|
|
71
|
-
setResolvedTheme =
|
|
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
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
var _useState7 = useState(
|
|
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
|
-
|
|
132
|
-
theme =
|
|
133
|
-
setTheme =
|
|
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
|
-
},
|
|
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;
|
package/dist/types/index.d.ts
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
|
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):
|
|
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):
|
|
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.
|
|
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/
|
|
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.
|
|
53
|
-
"@
|
|
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
|
-
|
|
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": {
|