@atlaskit/app-provider 3.0.0 → 3.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,13 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 3.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`33a9e5805e0c7`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/33a9e5805e0c7) -
8
+ Adds fallback logic for requesting the colorMode from the `useColorMode()` hook. Also fixes
9
+ `useTheme()` so that `colorMode` isn't returned when its fallback logic is used
10
+
3
11
  ## 3.0.0
4
12
 
5
13
  ### Major Changes
@@ -53,10 +53,26 @@ function UNSAFE_useColorModeForMigration() {
53
53
  */
54
54
  function useColorMode() {
55
55
  var value = (0, _react.useContext)(ColorModeContext);
56
- if (!value) {
57
- throw new Error('useColorMode must be used within AppProvider.');
58
- }
59
- return value;
56
+ var _getGlobalTheme = (0, _tokens.getGlobalTheme)(),
57
+ colorMode = _getGlobalTheme.colorMode;
58
+ var _useState = (0, _react.useState)(colorMode || 'light'),
59
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
60
+ resolvedColorMode = _useState2[0],
61
+ setResolvedColorMode = _useState2[1];
62
+ (0, _react.useEffect)(function () {
63
+ // We are using theme from context so no need to reference the DOM
64
+ if (value) {
65
+ return;
66
+ }
67
+ var observer = new _tokens.ThemeMutationObserver(function (theme) {
68
+ setResolvedColorMode(theme.colorMode || 'light');
69
+ });
70
+ observer.observe();
71
+ return function () {
72
+ return observer.disconnect();
73
+ };
74
+ }, [value]);
75
+ return value ? value : resolvedColorMode;
60
76
  }
61
77
 
62
78
  /**
@@ -79,10 +95,10 @@ function useSetColorMode() {
79
95
  */
80
96
  function useTheme() {
81
97
  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];
98
+ var _useState3 = (0, _react.useState)(theme || (0, _tokens.getGlobalTheme)()),
99
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
100
+ resolvedTheme = _useState4[0],
101
+ setResolvedTheme = _useState4[1];
86
102
  (0, _react.useEffect)(function () {
87
103
  // We are using theme from context so no need to reference the DOM
88
104
  if (theme) {
@@ -94,7 +110,7 @@ function useTheme() {
94
110
  return observer.disconnect();
95
111
  };
96
112
  }, [theme]);
97
- return resolvedTheme;
113
+ return theme ? theme : resolvedTheme;
98
114
  }
99
115
 
100
116
  /**
@@ -131,20 +147,20 @@ function ThemeProvider(_ref) {
131
147
  var children = _ref.children,
132
148
  defaultColorMode = _ref.defaultColorMode,
133
149
  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)),
150
+ var _useState5 = (0, _react.useState)(defaultColorMode),
139
151
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
140
- reconciledColorMode = _useState6[0],
141
- setReconciledColorMode = _useState6[1];
142
- var _useState7 = (0, _react.useState)(function () {
152
+ chosenColorMode = _useState6[0],
153
+ setChosenColorMode = _useState6[1];
154
+ var _useState7 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
155
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
156
+ reconciledColorMode = _useState8[0],
157
+ setReconciledColorMode = _useState8[1];
158
+ var _useState9 = (0, _react.useState)(function () {
143
159
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
144
160
  }),
145
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
146
- theme = _useState8[0],
147
- setTheme = _useState8[1];
161
+ _useState0 = (0, _slicedToArray2.default)(_useState9, 2),
162
+ theme = _useState0[0],
163
+ setTheme = _useState0[1];
148
164
  var setColorMode = (0, _react.useCallback)(function (colorMode) {
149
165
  setChosenColorMode(colorMode);
150
166
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -31,10 +31,22 @@ export function UNSAFE_useColorModeForMigration() {
31
31
  */
32
32
  export function useColorMode() {
33
33
  const value = useContext(ColorModeContext);
34
- if (!value) {
35
- throw new Error('useColorMode must be used within AppProvider.');
36
- }
37
- return value;
34
+ const {
35
+ colorMode
36
+ } = getGlobalTheme();
37
+ const [resolvedColorMode, setResolvedColorMode] = useState(colorMode || 'light');
38
+ useEffect(() => {
39
+ // We are using theme from context so no need to reference the DOM
40
+ if (value) {
41
+ return;
42
+ }
43
+ const observer = new ThemeMutationObserver(theme => {
44
+ setResolvedColorMode(theme.colorMode || 'light');
45
+ });
46
+ observer.observe();
47
+ return () => observer.disconnect();
48
+ }, [value]);
49
+ return value ? value : resolvedColorMode;
38
50
  }
39
51
 
40
52
  /**
@@ -67,7 +79,7 @@ export function useTheme() {
67
79
  observer.observe();
68
80
  return () => observer.disconnect();
69
81
  }, [theme]);
70
- return resolvedTheme;
82
+ return theme ? theme : resolvedTheme;
71
83
  }
72
84
 
73
85
  /**
@@ -39,10 +39,26 @@ export function UNSAFE_useColorModeForMigration() {
39
39
  */
40
40
  export function useColorMode() {
41
41
  var value = useContext(ColorModeContext);
42
- if (!value) {
43
- throw new Error('useColorMode must be used within AppProvider.');
44
- }
45
- return value;
42
+ var _getGlobalTheme = getGlobalTheme(),
43
+ colorMode = _getGlobalTheme.colorMode;
44
+ var _useState = useState(colorMode || 'light'),
45
+ _useState2 = _slicedToArray(_useState, 2),
46
+ resolvedColorMode = _useState2[0],
47
+ setResolvedColorMode = _useState2[1];
48
+ useEffect(function () {
49
+ // We are using theme from context so no need to reference the DOM
50
+ if (value) {
51
+ return;
52
+ }
53
+ var observer = new ThemeMutationObserver(function (theme) {
54
+ setResolvedColorMode(theme.colorMode || 'light');
55
+ });
56
+ observer.observe();
57
+ return function () {
58
+ return observer.disconnect();
59
+ };
60
+ }, [value]);
61
+ return value ? value : resolvedColorMode;
46
62
  }
47
63
 
48
64
  /**
@@ -65,10 +81,10 @@ export function useSetColorMode() {
65
81
  */
66
82
  export function useTheme() {
67
83
  var theme = useContext(ThemeContext);
68
- var _useState = useState(theme || getGlobalTheme()),
69
- _useState2 = _slicedToArray(_useState, 2),
70
- resolvedTheme = _useState2[0],
71
- setResolvedTheme = _useState2[1];
84
+ var _useState3 = useState(theme || getGlobalTheme()),
85
+ _useState4 = _slicedToArray(_useState3, 2),
86
+ resolvedTheme = _useState4[0],
87
+ setResolvedTheme = _useState4[1];
72
88
  useEffect(function () {
73
89
  // We are using theme from context so no need to reference the DOM
74
90
  if (theme) {
@@ -80,7 +96,7 @@ export function useTheme() {
80
96
  return observer.disconnect();
81
97
  };
82
98
  }, [theme]);
83
- return resolvedTheme;
99
+ return theme ? theme : resolvedTheme;
84
100
  }
85
101
 
86
102
  /**
@@ -117,20 +133,20 @@ function ThemeProvider(_ref) {
117
133
  var children = _ref.children,
118
134
  defaultColorMode = _ref.defaultColorMode,
119
135
  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)),
136
+ var _useState5 = useState(defaultColorMode),
125
137
  _useState6 = _slicedToArray(_useState5, 2),
126
- reconciledColorMode = _useState6[0],
127
- setReconciledColorMode = _useState6[1];
128
- var _useState7 = useState(function () {
138
+ chosenColorMode = _useState6[0],
139
+ setChosenColorMode = _useState6[1];
140
+ var _useState7 = useState(getReconciledColorMode(defaultColorMode)),
141
+ _useState8 = _slicedToArray(_useState7, 2),
142
+ reconciledColorMode = _useState8[0],
143
+ setReconciledColorMode = _useState8[1];
144
+ var _useState9 = useState(function () {
129
145
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
130
146
  }),
131
- _useState8 = _slicedToArray(_useState7, 2),
132
- theme = _useState8[0],
133
- setTheme = _useState8[1];
147
+ _useState0 = _slicedToArray(_useState9, 2),
148
+ theme = _useState0[0],
149
+ setTheme = _useState0[1];
134
150
  var setColorMode = useCallback(function (colorMode) {
135
151
  setChosenColorMode(colorMode);
136
152
  setReconciledColorMode(getReconciledColorMode(colorMode));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "3.0.0",
3
+ "version": "3.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",
@@ -55,8 +55,7 @@
55
55
  "@testing-library/react": "^13.4.0",
56
56
  "@testing-library/user-event": "^14.4.3",
57
57
  "react-dom": "^18.2.0",
58
- "react-resource-router": "^0.20.0",
59
- "typescript": "~5.4.2"
58
+ "react-resource-router": "^0.20.0"
60
59
  },
61
60
  "techstack": {
62
61
  "@atlassian/frontend": {