@atlaskit/app-provider 2.0.0 → 2.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,28 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#157071](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/157071)
8
+ [`a149a0b1559ec`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a149a0b1559ec) -
9
+ We are testing the migration to the ADS Link component behind a feature flag. If this fix is
10
+ successful it will be available in a later release.
11
+
12
+ ## 2.1.0
13
+
14
+ ### Minor Changes
15
+
16
+ - [#130763](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/130763)
17
+ [`42fdfd64b606b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/42fdfd64b606b) -
18
+ useTheme now falls back to reading theme state from the DOM for cases where the
19
+ AppProvider/ThemeProvider is not in use. This allows us to replace all usage of `useThemeObserver`
20
+ with `useTheme` in other Design System packages without issue.
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies
25
+
3
26
  ## 2.0.0
4
27
 
5
28
  ### Major Changes
@@ -8,7 +8,7 @@ import routerLinkComponentExample from '../../examples/constellation/2-router-li
8
8
 
9
9
  ## Theming
10
10
 
11
- AppProvider sets up theming for an app, enabling [design tokens](/tokens/design-tokens) to be used.
11
+ App provider sets up theming for an app, enabling [design tokens](/tokens/design-tokens) to be used.
12
12
 
13
13
  <Example
14
14
  Component={defaultExample.example}
@@ -51,4 +51,5 @@ routing library can be used.
51
51
  source={routerLinkComponentExample.code}
52
52
  appearance="source-only"
53
53
  packageName="@atlaskit/app-provider"
54
+ isCodeSandboxDisabled
54
55
  />
@@ -80,11 +80,23 @@ function useSetColorMode() {
80
80
  * Returns the current theme settings when inside the app provider.
81
81
  */
82
82
  function useTheme() {
83
- var value = (0, _react.useContext)(ThemeContext);
84
- if (!value) {
85
- throw new Error('useTheme must be used within AppProvider.');
86
- }
87
- return value;
83
+ var theme = (0, _react.useContext)(ThemeContext);
84
+ var _useState = (0, _react.useState)(theme || (0, _tokens.getGlobalTheme)()),
85
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
86
+ resolvedTheme = _useState2[0],
87
+ setResolvedTheme = _useState2[1];
88
+ (0, _react.useEffect)(function () {
89
+ // We are using theme from context so no need to reference the DOM
90
+ if (theme) {
91
+ return;
92
+ }
93
+ var observer = new _tokens.ThemeMutationObserver(setResolvedTheme);
94
+ observer.observe();
95
+ return function () {
96
+ return observer.disconnect();
97
+ };
98
+ }, [theme]);
99
+ return resolvedTheme;
88
100
  }
89
101
 
90
102
  /**
@@ -121,20 +133,20 @@ function ThemeProvider(_ref) {
121
133
  var children = _ref.children,
122
134
  defaultColorMode = _ref.defaultColorMode,
123
135
  defaultTheme = _ref.defaultTheme;
124
- var _useState = (0, _react.useState)(defaultColorMode),
125
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
126
- chosenColorMode = _useState2[0],
127
- setChosenColorMode = _useState2[1];
128
- var _useState3 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
136
+ var _useState3 = (0, _react.useState)(defaultColorMode),
129
137
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
130
- reconciledColorMode = _useState4[0],
131
- setReconciledColorMode = _useState4[1];
132
- var _useState5 = (0, _react.useState)(function () {
138
+ chosenColorMode = _useState4[0],
139
+ setChosenColorMode = _useState4[1];
140
+ var _useState5 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
141
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
142
+ reconciledColorMode = _useState6[0],
143
+ setReconciledColorMode = _useState6[1];
144
+ var _useState7 = (0, _react.useState)(function () {
133
145
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
134
146
  }),
135
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
136
- theme = _useState6[0],
137
- setTheme = _useState6[1];
147
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
148
+ theme = _useState8[0],
149
+ setTheme = _useState8[1];
138
150
  var setColorMode = (0, _react.useCallback)(function (colorMode) {
139
151
  setChosenColorMode(colorMode);
140
152
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -1,7 +1,7 @@
1
1
  import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
2
2
  import { bind } from 'bind-event-listener';
3
3
  import { fg } from '@atlaskit/platform-feature-flags';
4
- import { setGlobalTheme } from '@atlaskit/tokens';
4
+ import { getGlobalTheme, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
5
5
  const defaultThemeSettings = () => ({
6
6
  dark: 'dark',
7
7
  light: 'light',
@@ -57,11 +57,18 @@ export function useSetColorMode() {
57
57
  * Returns the current theme settings when inside the app provider.
58
58
  */
59
59
  export function useTheme() {
60
- const value = useContext(ThemeContext);
61
- if (!value) {
62
- throw new Error('useTheme must be used within AppProvider.');
63
- }
64
- return value;
60
+ const theme = useContext(ThemeContext);
61
+ const [resolvedTheme, setResolvedTheme] = useState(theme || getGlobalTheme());
62
+ useEffect(() => {
63
+ // We are using theme from context so no need to reference the DOM
64
+ if (theme) {
65
+ return;
66
+ }
67
+ const observer = new ThemeMutationObserver(setResolvedTheme);
68
+ observer.observe();
69
+ return () => observer.disconnect();
70
+ }, [theme]);
71
+ return resolvedTheme;
65
72
  }
66
73
 
67
74
  /**
@@ -7,7 +7,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
7
7
  import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
8
8
  import { bind } from 'bind-event-listener';
9
9
  import { fg } from '@atlaskit/platform-feature-flags';
10
- import { setGlobalTheme } from '@atlaskit/tokens';
10
+ import { getGlobalTheme, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
11
11
  var defaultThemeSettings = function defaultThemeSettings() {
12
12
  return {
13
13
  dark: 'dark',
@@ -65,11 +65,23 @@ export function useSetColorMode() {
65
65
  * Returns the current theme settings when inside the app provider.
66
66
  */
67
67
  export function useTheme() {
68
- var value = useContext(ThemeContext);
69
- if (!value) {
70
- throw new Error('useTheme must be used within AppProvider.');
71
- }
72
- return value;
68
+ var theme = useContext(ThemeContext);
69
+ var _useState = useState(theme || getGlobalTheme()),
70
+ _useState2 = _slicedToArray(_useState, 2),
71
+ resolvedTheme = _useState2[0],
72
+ setResolvedTheme = _useState2[1];
73
+ useEffect(function () {
74
+ // We are using theme from context so no need to reference the DOM
75
+ if (theme) {
76
+ return;
77
+ }
78
+ var observer = new ThemeMutationObserver(setResolvedTheme);
79
+ observer.observe();
80
+ return function () {
81
+ return observer.disconnect();
82
+ };
83
+ }, [theme]);
84
+ return resolvedTheme;
73
85
  }
74
86
 
75
87
  /**
@@ -106,20 +118,20 @@ function ThemeProvider(_ref) {
106
118
  var children = _ref.children,
107
119
  defaultColorMode = _ref.defaultColorMode,
108
120
  defaultTheme = _ref.defaultTheme;
109
- var _useState = useState(defaultColorMode),
110
- _useState2 = _slicedToArray(_useState, 2),
111
- chosenColorMode = _useState2[0],
112
- setChosenColorMode = _useState2[1];
113
- var _useState3 = useState(getReconciledColorMode(defaultColorMode)),
121
+ var _useState3 = useState(defaultColorMode),
114
122
  _useState4 = _slicedToArray(_useState3, 2),
115
- reconciledColorMode = _useState4[0],
116
- setReconciledColorMode = _useState4[1];
117
- var _useState5 = useState(function () {
123
+ chosenColorMode = _useState4[0],
124
+ setChosenColorMode = _useState4[1];
125
+ var _useState5 = useState(getReconciledColorMode(defaultColorMode)),
126
+ _useState6 = _slicedToArray(_useState5, 2),
127
+ reconciledColorMode = _useState6[0],
128
+ setReconciledColorMode = _useState6[1];
129
+ var _useState7 = useState(function () {
118
130
  return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
119
131
  }),
120
- _useState6 = _slicedToArray(_useState5, 2),
121
- theme = _useState6[0],
122
- setTheme = _useState6[1];
132
+ _useState8 = _slicedToArray(_useState7, 2),
133
+ theme = _useState8[0],
134
+ setTheme = _useState8[1];
123
135
  var setColorMode = useCallback(function (colorMode) {
124
136
  setChosenColorMode(colorMode);
125
137
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -28,7 +28,7 @@ export declare function useSetColorMode(): (value: ColorMode) => void;
28
28
  *
29
29
  * Returns the current theme settings when inside the app provider.
30
30
  */
31
- export declare function useTheme(): Theme;
31
+ export declare function useTheme(): Partial<Theme>;
32
32
  /**
33
33
  * __useSetTheme()__
34
34
  *
@@ -28,7 +28,7 @@ export declare function useSetColorMode(): (value: ColorMode) => void;
28
28
  *
29
29
  * Returns the current theme settings when inside the app provider.
30
30
  */
31
- export declare function useTheme(): Theme;
31
+ export declare function useTheme(): Partial<Theme>;
32
32
  /**
33
33
  * __useSetTheme()__
34
34
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "2.0.0",
3
+ "version": "2.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",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@atlaskit/platform-feature-flags": "^1.1.0",
43
- "@atlaskit/tokens": "^4.0.0",
43
+ "@atlaskit/tokens": "^4.9.0",
44
44
  "@babel/runtime": "^7.0.0",
45
45
  "bind-event-listener": "^3.0.0"
46
46
  },
@@ -48,12 +48,12 @@
48
48
  "react": "^18.2.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@af/visual-regression": "*",
52
- "@atlaskit/dropdown-menu": "^13.0.0",
51
+ "@af/visual-regression": "workspace:^",
52
+ "@atlaskit/dropdown-menu": "^15.2.0",
53
53
  "@atlaskit/ds-lib": "^4.0.0",
54
- "@atlaskit/primitives": "^14.0.0",
55
- "@atlaskit/ssr": "*",
56
- "@atlaskit/visual-regression": "*",
54
+ "@atlaskit/primitives": "^14.8.0",
55
+ "@atlaskit/visual-regression": "workspace:^",
56
+ "@atlassian/ssr-tests": "^0.2.0",
57
57
  "@testing-library/react": "^13.4.0",
58
58
  "@testing-library/user-event": "^14.4.3",
59
59
  "react-dom": "^18.2.0",