@atlaskit/app-provider 3.2.10 → 3.3.1

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.
Files changed (85) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/app-provider.js +4 -6
  3. package/dist/cjs/context.js +16 -0
  4. package/dist/cjs/index.js +12 -9
  5. package/dist/cjs/theme-provider/context/color-mode.js +16 -0
  6. package/dist/cjs/theme-provider/context/inside-theme-provider.js +11 -0
  7. package/dist/cjs/theme-provider/context/theme.js +16 -0
  8. package/dist/cjs/theme-provider/hooks/use-color-mode-for-migration.js +19 -0
  9. package/dist/cjs/theme-provider/hooks/use-color-mode.js +41 -0
  10. package/dist/cjs/theme-provider/hooks/use-is-inside-theme-provider.js +17 -0
  11. package/dist/cjs/theme-provider/hooks/use-set-color-mode.js +20 -0
  12. package/dist/cjs/theme-provider/hooks/use-set-theme.js +20 -0
  13. package/dist/cjs/theme-provider/hooks/use-theme.js +35 -0
  14. package/dist/cjs/theme-provider/index.js +215 -0
  15. package/dist/cjs/theme-provider/utils/is-theme-mounted.js +21 -0
  16. package/dist/cjs/theme-provider/utils/load-and-mount-themes.js +130 -0
  17. package/dist/es2019/app-provider.js +3 -3
  18. package/dist/es2019/context.js +11 -0
  19. package/dist/es2019/index.js +10 -1
  20. package/dist/es2019/theme-provider/context/color-mode.js +10 -0
  21. package/dist/es2019/theme-provider/context/inside-theme-provider.js +6 -0
  22. package/dist/es2019/theme-provider/context/theme.js +10 -0
  23. package/dist/es2019/theme-provider/hooks/use-color-mode-for-migration.js +14 -0
  24. package/dist/es2019/theme-provider/hooks/use-color-mode.js +29 -0
  25. package/dist/es2019/theme-provider/hooks/use-is-inside-theme-provider.js +12 -0
  26. package/dist/es2019/theme-provider/hooks/use-set-color-mode.js +15 -0
  27. package/dist/es2019/theme-provider/hooks/use-set-theme.js +15 -0
  28. package/dist/es2019/theme-provider/hooks/use-theme.js +23 -0
  29. package/dist/es2019/theme-provider/index.js +163 -0
  30. package/dist/es2019/theme-provider/utils/is-theme-mounted.js +16 -0
  31. package/dist/es2019/theme-provider/utils/load-and-mount-themes.js +47 -0
  32. package/dist/esm/app-provider.js +3 -3
  33. package/dist/esm/context.js +11 -0
  34. package/dist/esm/index.js +10 -1
  35. package/dist/esm/theme-provider/context/color-mode.js +10 -0
  36. package/dist/esm/theme-provider/context/inside-theme-provider.js +6 -0
  37. package/dist/esm/theme-provider/context/theme.js +10 -0
  38. package/dist/esm/theme-provider/hooks/use-color-mode-for-migration.js +14 -0
  39. package/dist/esm/theme-provider/hooks/use-color-mode.js +35 -0
  40. package/dist/esm/theme-provider/hooks/use-is-inside-theme-provider.js +12 -0
  41. package/dist/esm/theme-provider/hooks/use-set-color-mode.js +15 -0
  42. package/dist/esm/theme-provider/hooks/use-set-theme.js +15 -0
  43. package/dist/esm/theme-provider/hooks/use-theme.js +29 -0
  44. package/dist/esm/theme-provider/index.js +206 -0
  45. package/dist/esm/theme-provider/utils/is-theme-mounted.js +16 -0
  46. package/dist/esm/theme-provider/utils/load-and-mount-themes.js +123 -0
  47. package/dist/types/app-provider.d.ts +3 -2
  48. package/dist/types/context.d.ts +7 -0
  49. package/dist/types/index.d.ts +7 -2
  50. package/dist/types/theme-provider/context/color-mode.d.ts +10 -0
  51. package/dist/types/theme-provider/context/inside-theme-provider.d.ts +4 -0
  52. package/dist/types/theme-provider/context/theme.d.ts +10 -0
  53. package/dist/types/theme-provider/hooks/use-color-mode-for-migration.d.ts +9 -0
  54. package/dist/types/theme-provider/hooks/use-color-mode.d.ts +7 -0
  55. package/dist/types/theme-provider/hooks/use-is-inside-theme-provider.d.ts +6 -0
  56. package/dist/types/theme-provider/hooks/use-set-color-mode.d.ts +7 -0
  57. package/dist/types/theme-provider/hooks/use-set-theme.d.ts +7 -0
  58. package/dist/types/theme-provider/hooks/use-theme.d.ts +7 -0
  59. package/dist/types/theme-provider/index.d.ts +19 -0
  60. package/dist/types/theme-provider/utils/is-theme-mounted.d.ts +8 -0
  61. package/dist/types/theme-provider/utils/load-and-mount-themes.d.ts +2 -0
  62. package/dist/types-ts4.5/app-provider.d.ts +3 -2
  63. package/dist/types-ts4.5/context.d.ts +7 -0
  64. package/dist/types-ts4.5/index.d.ts +7 -2
  65. package/dist/types-ts4.5/theme-provider/context/color-mode.d.ts +10 -0
  66. package/dist/types-ts4.5/theme-provider/context/inside-theme-provider.d.ts +4 -0
  67. package/dist/types-ts4.5/theme-provider/context/theme.d.ts +10 -0
  68. package/dist/types-ts4.5/theme-provider/hooks/use-color-mode-for-migration.d.ts +9 -0
  69. package/dist/types-ts4.5/theme-provider/hooks/use-color-mode.d.ts +7 -0
  70. package/dist/types-ts4.5/theme-provider/hooks/use-is-inside-theme-provider.d.ts +6 -0
  71. package/dist/types-ts4.5/theme-provider/hooks/use-set-color-mode.d.ts +7 -0
  72. package/dist/types-ts4.5/theme-provider/hooks/use-set-theme.d.ts +7 -0
  73. package/dist/types-ts4.5/theme-provider/hooks/use-theme.d.ts +7 -0
  74. package/dist/types-ts4.5/theme-provider/index.d.ts +19 -0
  75. package/dist/types-ts4.5/theme-provider/utils/is-theme-mounted.d.ts +8 -0
  76. package/dist/types-ts4.5/theme-provider/utils/load-and-mount-themes.d.ts +2 -0
  77. package/package.json +10 -5
  78. package/dist/cjs/theme-provider.js +0 -286
  79. package/dist/es2019/theme-provider.js +0 -216
  80. package/dist/esm/theme-provider.js +0 -272
  81. package/dist/types/theme-provider.d.ts +0 -55
  82. package/dist/types-ts4.5/theme-provider.d.ts +0 -55
  83. /package/dist/cjs/{theme-provider.compiled.css → theme-provider/index.compiled.css} +0 -0
  84. /package/dist/es2019/{theme-provider.compiled.css → theme-provider/index.compiled.css} +0 -0
  85. /package/dist/esm/{theme-provider.compiled.css → theme-provider/index.compiled.css} +0 -0
@@ -1,272 +0,0 @@
1
- /* theme-provider.tsx generated by @compiled/babel-plugin v0.38.1 */
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
- import "./theme-provider.compiled.css";
6
- import { ax, ix } from "@compiled/react/runtime";
7
- import _regeneratorRuntime from "@babel/runtime/regenerator";
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; }
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; }
10
- import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
11
- import { bind } from 'bind-event-listener';
12
- import { fg } from '@atlaskit/platform-feature-flags';
13
- import { getGlobalTheme, getThemeHtmlAttrs, setGlobalTheme, ThemeMutationObserver } from '@atlaskit/tokens';
14
- var defaultThemeSettings = function defaultThemeSettings() {
15
- return {
16
- dark: 'dark',
17
- light: 'light',
18
- spacing: 'spacing',
19
- typography: 'typography'
20
- };
21
- };
22
- var ColorModeContext = /*#__PURE__*/createContext(undefined);
23
- var SetColorModeContext = /*#__PURE__*/createContext(undefined);
24
- var ThemeContext = /*#__PURE__*/createContext(undefined);
25
- var SetThemeContext = /*#__PURE__*/createContext(undefined);
26
-
27
- /**
28
- * __UNSAFE_useColorModeForMigration()__
29
- *
30
- * Returns the current color mode when inside the app provider.
31
- * Unlike useColorMode, this utility returns undefined, instead of throwing an error, when the app provider is missing.
32
- * This allows it to be used by components that need to operate with and without an app provider.
33
- */
34
- export function UNSAFE_useColorModeForMigration() {
35
- var value = useContext(ColorModeContext);
36
- return value;
37
- }
38
-
39
- /**
40
- * __useColorMode()__
41
- *
42
- * Returns the current color mode when inside the app provider.
43
- */
44
- export function useColorMode() {
45
- var value = useContext(ColorModeContext);
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;
66
- }
67
-
68
- /**
69
- * __useSetColorMode()__
70
- *
71
- * Returns the color mode setter when inside the app provider.
72
- */
73
- export function useSetColorMode() {
74
- var value = useContext(SetColorModeContext);
75
- if (!value) {
76
- throw new Error('useSetColorMode must be used within AppProvider.');
77
- }
78
- return value;
79
- }
80
-
81
- /**
82
- * __useTheme()__
83
- *
84
- * Returns the current theme settings when inside the app provider.
85
- */
86
- export function useTheme() {
87
- var theme = useContext(ThemeContext);
88
- var _useState3 = useState(theme || getGlobalTheme()),
89
- _useState4 = _slicedToArray(_useState3, 2),
90
- resolvedTheme = _useState4[0],
91
- setResolvedTheme = _useState4[1];
92
- useEffect(function () {
93
- // We are using theme from context so no need to reference the DOM
94
- if (theme) {
95
- return;
96
- }
97
- var observer = new ThemeMutationObserver(setResolvedTheme);
98
- observer.observe();
99
- return function () {
100
- return observer.disconnect();
101
- };
102
- }, [theme]);
103
- return theme ? theme : resolvedTheme;
104
- }
105
-
106
- /**
107
- * __useSetTheme()__
108
- *
109
- * Returns the theme setter when inside the app provider.
110
- */
111
- export function useSetTheme() {
112
- var value = useContext(SetThemeContext);
113
- if (!value) {
114
- throw new Error('useSetTheme must be used within AppProvider.');
115
- }
116
- return value;
117
- }
118
- var isMatchMediaAvailable = typeof window !== 'undefined' && 'matchMedia' in window;
119
- var prefersDarkModeMql = isMatchMediaAvailable ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;
120
-
121
- // TODO: currently 'auto' color mode will always return 'light' in SSR.
122
- // Additional work required: https://product-fabric.atlassian.net/browse/DSP-9781
123
- function getReconciledColorMode(colorMode) {
124
- if (colorMode === 'auto') {
125
- return prefersDarkModeMql !== null && prefersDarkModeMql !== void 0 && prefersDarkModeMql.matches ? 'dark' : 'light';
126
- }
127
- return colorMode;
128
- }
129
- var contentStyles = {
130
- body: "_1e0c1bgi"
131
- };
132
- /**
133
- * __Theme provider__
134
- *
135
- * Provides global theming configuration.
136
- *
137
- * @internal
138
- */
139
- function ThemeProvider(_ref) {
140
- var children = _ref.children,
141
- defaultColorMode = _ref.defaultColorMode,
142
- defaultTheme = _ref.defaultTheme;
143
- var _useState5 = useState(defaultColorMode),
144
- _useState6 = _slicedToArray(_useState5, 2),
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 () {
152
- return _objectSpread(_objectSpread({}, defaultThemeSettings()), defaultTheme);
153
- }),
154
- _useState0 = _slicedToArray(_useState9, 2),
155
- theme = _useState0[0],
156
- setTheme = _useState0[1];
157
- var setColorMode = useCallback(function (colorMode) {
158
- setChosenColorMode(colorMode);
159
- setReconciledColorMode(getReconciledColorMode(colorMode));
160
- }, []);
161
- var setPartialTheme = useCallback(function (nextTheme) {
162
- setTheme(function (theme) {
163
- return _objectSpread(_objectSpread({}, theme), nextTheme);
164
- });
165
- }, []);
166
- var lastSetGlobalThemePromiseRef = useRef(null);
167
- useEffect(function () {
168
- // If fg enabled avoid mounting themes
169
- if (fg('platform-static-theme-loading')) {
170
- return;
171
- }
172
-
173
- /**
174
- * We need to wait for any previous `setGlobalTheme` calls to finish before calling it again.
175
- * This is to prevent race conditions as `setGlobalTheme` is async and mutates the DOM (e.g. sets the
176
- * `data-color-mode` attribute on the root element).
177
- *
178
- * Since we can't safely abort the `setGlobalTheme` execution, we need to wait for it to properly finish before
179
- * applying the new theme.
180
- *
181
- * Without this, we can end up in the following scenario:
182
- * 1. app loads with the default 'light' theme, kicking off `setGlobalTheme`
183
- * 2. app switches to 'dark' theme after retrieving value persisted in local storage, calling `setGlobalTheme` again
184
- * 3. `setGlobalTheme` function execution for `dark` finishes before the initial `light` execution
185
- * 4. `setGlobalTheme` function execution for `light` then finishes, resulting in the 'light' theme being applied.
186
- */
187
- var cleanupLastFnCall = /*#__PURE__*/function () {
188
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
189
- var unbindFn;
190
- return _regeneratorRuntime.wrap(function _callee$(_context) {
191
- while (1) switch (_context.prev = _context.next) {
192
- case 0:
193
- if (!lastSetGlobalThemePromiseRef.current) {
194
- _context.next = 6;
195
- break;
196
- }
197
- _context.next = 3;
198
- return lastSetGlobalThemePromiseRef.current;
199
- case 3:
200
- unbindFn = _context.sent;
201
- unbindFn();
202
- lastSetGlobalThemePromiseRef.current = null;
203
- case 6:
204
- case "end":
205
- return _context.stop();
206
- }
207
- }, _callee);
208
- }));
209
- return function cleanupLastFnCall() {
210
- return _ref2.apply(this, arguments);
211
- };
212
- }();
213
- var safelySetGlobalTheme = /*#__PURE__*/function () {
214
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
215
- var promise;
216
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
217
- while (1) switch (_context2.prev = _context2.next) {
218
- case 0:
219
- _context2.next = 2;
220
- return cleanupLastFnCall();
221
- case 2:
222
- promise = setGlobalTheme(_objectSpread(_objectSpread({}, theme), {}, {
223
- colorMode: reconciledColorMode
224
- }));
225
- lastSetGlobalThemePromiseRef.current = promise;
226
- case 4:
227
- case "end":
228
- return _context2.stop();
229
- }
230
- }, _callee2);
231
- }));
232
- return function safelySetGlobalTheme() {
233
- return _ref3.apply(this, arguments);
234
- };
235
- }();
236
- safelySetGlobalTheme();
237
- return function cleanup() {
238
- cleanupLastFnCall();
239
- };
240
- }, [theme, reconciledColorMode]);
241
- useEffect(function () {
242
- if (!prefersDarkModeMql) {
243
- return;
244
- }
245
- var unbindListener = bind(prefersDarkModeMql, {
246
- type: 'change',
247
- listener: function listener(event) {
248
- if (chosenColorMode === 'auto') {
249
- setReconciledColorMode(event.matches ? 'dark' : 'light');
250
- }
251
- }
252
- });
253
- return unbindListener;
254
- }, [chosenColorMode]);
255
- var attrs = getThemeHtmlAttrs(_objectSpread(_objectSpread({}, theme), {}, {
256
- colorMode: reconciledColorMode
257
- }));
258
- return /*#__PURE__*/React.createElement(ColorModeContext.Provider, {
259
- value: reconciledColorMode
260
- }, /*#__PURE__*/React.createElement(SetColorModeContext.Provider, {
261
- value: setColorMode
262
- }, /*#__PURE__*/React.createElement(ThemeContext.Provider, {
263
- value: theme
264
- }, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
265
- value: setPartialTheme
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))));
271
- }
272
- export default ThemeProvider;
@@ -1,55 +0,0 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
- import React from 'react';
6
- import { type ThemeState } from '@atlaskit/tokens';
7
- export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
8
- export type ColorMode = 'light' | 'dark' | 'auto';
9
- type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
10
- /**
11
- * __UNSAFE_useColorModeForMigration()__
12
- *
13
- * Returns the current color mode when inside the app provider.
14
- * Unlike useColorMode, this utility returns undefined, instead of throwing an error, when the app provider is missing.
15
- * This allows it to be used by components that need to operate with and without an app provider.
16
- */
17
- export declare function UNSAFE_useColorModeForMigration(): ReconciledColorMode | undefined;
18
- /**
19
- * __useColorMode()__
20
- *
21
- * Returns the current color mode when inside the app provider.
22
- */
23
- export declare function useColorMode(): ReconciledColorMode;
24
- /**
25
- * __useSetColorMode()__
26
- *
27
- * Returns the color mode setter when inside the app provider.
28
- */
29
- export declare function useSetColorMode(): (value: ColorMode) => void;
30
- /**
31
- * __useTheme()__
32
- *
33
- * Returns the current theme settings when inside the app provider.
34
- */
35
- export declare function useTheme(): Partial<Theme>;
36
- /**
37
- * __useSetTheme()__
38
- *
39
- * Returns the theme setter when inside the app provider.
40
- */
41
- export declare function useSetTheme(): (value: Partial<Theme>) => void;
42
- interface ThemeProviderProps {
43
- defaultColorMode: ColorMode;
44
- defaultTheme?: Partial<Theme>;
45
- children: React.ReactNode;
46
- }
47
- /**
48
- * __Theme provider__
49
- *
50
- * Provides global theming configuration.
51
- *
52
- * @internal
53
- */
54
- declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
55
- export default ThemeProvider;
@@ -1,55 +0,0 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
- import React from 'react';
6
- import { type ThemeState } from '@atlaskit/tokens';
7
- export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
8
- export type ColorMode = 'light' | 'dark' | 'auto';
9
- type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
10
- /**
11
- * __UNSAFE_useColorModeForMigration()__
12
- *
13
- * Returns the current color mode when inside the app provider.
14
- * Unlike useColorMode, this utility returns undefined, instead of throwing an error, when the app provider is missing.
15
- * This allows it to be used by components that need to operate with and without an app provider.
16
- */
17
- export declare function UNSAFE_useColorModeForMigration(): ReconciledColorMode | undefined;
18
- /**
19
- * __useColorMode()__
20
- *
21
- * Returns the current color mode when inside the app provider.
22
- */
23
- export declare function useColorMode(): ReconciledColorMode;
24
- /**
25
- * __useSetColorMode()__
26
- *
27
- * Returns the color mode setter when inside the app provider.
28
- */
29
- export declare function useSetColorMode(): (value: ColorMode) => void;
30
- /**
31
- * __useTheme()__
32
- *
33
- * Returns the current theme settings when inside the app provider.
34
- */
35
- export declare function useTheme(): Partial<Theme>;
36
- /**
37
- * __useSetTheme()__
38
- *
39
- * Returns the theme setter when inside the app provider.
40
- */
41
- export declare function useSetTheme(): (value: Partial<Theme>) => void;
42
- interface ThemeProviderProps {
43
- defaultColorMode: ColorMode;
44
- defaultTheme?: Partial<Theme>;
45
- children: React.ReactNode;
46
- }
47
- /**
48
- * __Theme provider__
49
- *
50
- * Provides global theming configuration.
51
- *
52
- * @internal
53
- */
54
- declare function ThemeProvider({ children, defaultColorMode, defaultTheme }: ThemeProviderProps): JSX.Element;
55
- export default ThemeProvider;