@atlaskit/app-provider 0.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 +11 -0
- package/LICENSE.md +13 -0
- package/README.md +7 -0
- package/constellation/index/examples.mdx +23 -0
- package/constellation/index/usage.mdx +7 -0
- package/dist/cjs/app-provider.js +44 -0
- package/dist/cjs/index.js +38 -0
- package/dist/cjs/theme-provider.js +151 -0
- package/dist/es2019/app-provider.js +32 -0
- package/dist/es2019/index.js +2 -0
- package/dist/es2019/theme-provider.js +126 -0
- package/dist/esm/app-provider.js +33 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/theme-provider.js +136 -0
- package/dist/types/app-provider.d.ts +25 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/theme-provider.d.ts +43 -0
- package/dist/types-ts4.5/app-provider.d.ts +25 -0
- package/dist/types-ts4.5/index.d.ts +2 -0
- package/dist/types-ts4.5/theme-provider.d.ts +43 -0
- package/package.json +98 -0
- package/report.api.md +72 -0
- package/tmp/api-report-tmp.d.ts +44 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @atlaskit/app-provider
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#41035](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41035) [`e7344823cff`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e7344823cff) - Created the AppProvider component with support for theming.
|
|
8
|
+
|
|
9
|
+
## 0.0.1
|
|
10
|
+
|
|
11
|
+
- Scaffold AppProvider component.
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Copyright 2023 Atlassian Pty Ltd
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 0
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
import AppProviderDefault from '../../examples/constellation/0-default';
|
|
6
|
+
import AppProviderThemeSwitcher from '../../examples/constellation/1-theme-switcher';
|
|
7
|
+
|
|
8
|
+
## Theming
|
|
9
|
+
|
|
10
|
+
AppProvider sets up theming for an app, enabling [design tokens](/tokens/design-tokens) to be used.
|
|
11
|
+
|
|
12
|
+
<Example Component={AppProviderDefault} packageName="@atlaskit/app-provider" />
|
|
13
|
+
|
|
14
|
+
## Color mode and theme switching
|
|
15
|
+
|
|
16
|
+
The `useColorMode` hook can be used to get the active color mode. When the color mode is set to `auto`, the active color mode will be determined by the user's system preference.
|
|
17
|
+
|
|
18
|
+
The `useTheme` hook can be used to get the active themes. The `useSetTheme` hook can be used to change themes.
|
|
19
|
+
|
|
20
|
+
<Example
|
|
21
|
+
Component={AppProviderThemeSwitcher}
|
|
22
|
+
packageName="@atlaskit/app-provider"
|
|
23
|
+
/>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.AppProvider = AppProvider;
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _themeProvider = _interopRequireDefault(require("./theme-provider"));
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
|
+
var InsideAppProviderContext = /*#__PURE__*/(0, _react.createContext)(false);
|
|
15
|
+
var defaultThemeSettings = {
|
|
16
|
+
dark: 'dark',
|
|
17
|
+
light: 'light',
|
|
18
|
+
spacing: 'spacing'
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* __App provider__
|
|
22
|
+
*
|
|
23
|
+
* An app provider provides app level configuration such as global theming.
|
|
24
|
+
*
|
|
25
|
+
* Place it at the root of your application.
|
|
26
|
+
*/
|
|
27
|
+
function AppProvider(_ref) {
|
|
28
|
+
var children = _ref.children,
|
|
29
|
+
_ref$defaultColorMode = _ref.defaultColorMode,
|
|
30
|
+
defaultColorMode = _ref$defaultColorMode === void 0 ? 'light' : _ref$defaultColorMode,
|
|
31
|
+
_ref$defaultTheme = _ref.defaultTheme,
|
|
32
|
+
defaultTheme = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme;
|
|
33
|
+
var isInsideAppProvider = (0, _react.useContext)(InsideAppProviderContext);
|
|
34
|
+
if (isInsideAppProvider) {
|
|
35
|
+
throw new Error('App provider should not be nested within another app provider.');
|
|
36
|
+
}
|
|
37
|
+
return /*#__PURE__*/_react.default.createElement(InsideAppProviderContext.Provider, {
|
|
38
|
+
value: true
|
|
39
|
+
}, /*#__PURE__*/_react.default.createElement(_themeProvider.default, {
|
|
40
|
+
defaultColorMode: defaultColorMode,
|
|
41
|
+
defaultTheme: defaultTheme
|
|
42
|
+
}, children));
|
|
43
|
+
}
|
|
44
|
+
var _default = exports.default = AppProvider;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "default", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _appProvider.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "useColorMode", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function get() {
|
|
16
|
+
return _themeProvider.useColorMode;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "useSetColorMode", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function get() {
|
|
22
|
+
return _themeProvider.useSetColorMode;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "useSetTheme", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function get() {
|
|
28
|
+
return _themeProvider.useSetTheme;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "useTheme", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function get() {
|
|
34
|
+
return _themeProvider.useTheme;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
var _appProvider = _interopRequireDefault(require("./app-provider"));
|
|
38
|
+
var _themeProvider = require("./theme-provider");
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ThemeProvider = ThemeProvider;
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
exports.useColorMode = useColorMode;
|
|
11
|
+
exports.useSetColorMode = useSetColorMode;
|
|
12
|
+
exports.useSetTheme = useSetTheme;
|
|
13
|
+
exports.useTheme = useTheme;
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
var _bindEventListener = require("bind-event-listener");
|
|
18
|
+
var _tokens = require("@atlaskit/tokens");
|
|
19
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
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; }
|
|
22
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
23
|
+
var ColorModeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
24
|
+
var SetColorModeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
25
|
+
var ThemeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
26
|
+
var SetThemeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* __useColorMode()__
|
|
30
|
+
*
|
|
31
|
+
* Returns the current color mode when inside the app provider.
|
|
32
|
+
*/
|
|
33
|
+
function useColorMode() {
|
|
34
|
+
var value = (0, _react.useContext)(ColorModeContext);
|
|
35
|
+
if (!value) {
|
|
36
|
+
throw new Error('useColorMode must be used within AppProvider.');
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* __useSetColorMode()__
|
|
43
|
+
*
|
|
44
|
+
* Returns the color mode setter when inside the app provider.
|
|
45
|
+
*/
|
|
46
|
+
function useSetColorMode() {
|
|
47
|
+
var value = (0, _react.useContext)(SetColorModeContext);
|
|
48
|
+
if (!value) {
|
|
49
|
+
throw new Error('useSetColorMode must be used within AppProvider.');
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* __useTheme()__
|
|
56
|
+
*
|
|
57
|
+
* Returns the current theme settings when inside the app provider.
|
|
58
|
+
*/
|
|
59
|
+
function useTheme() {
|
|
60
|
+
var value = (0, _react.useContext)(ThemeContext);
|
|
61
|
+
if (!value) {
|
|
62
|
+
throw new Error('useTheme must be used within AppProvider.');
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* __useSetTheme()__
|
|
69
|
+
*
|
|
70
|
+
* Returns the theme setter when inside the app provider.
|
|
71
|
+
*/
|
|
72
|
+
function useSetTheme() {
|
|
73
|
+
var value = (0, _react.useContext)(SetThemeContext);
|
|
74
|
+
if (!value) {
|
|
75
|
+
throw new Error('useSetTheme must be used within AppProvider.');
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
var isMatchMediaAvailable = typeof window !== 'undefined' && 'matchMedia' in window;
|
|
80
|
+
var prefersDarkModeMql = isMatchMediaAvailable ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;
|
|
81
|
+
|
|
82
|
+
// TODO: currently 'auto' color mode will always return 'light' in SSR.
|
|
83
|
+
// Additional work required: https://product-fabric.atlassian.net/browse/DSP-9781
|
|
84
|
+
function getReconciledColorMode(colorMode) {
|
|
85
|
+
if (colorMode === 'auto') {
|
|
86
|
+
return prefersDarkModeMql !== null && prefersDarkModeMql !== void 0 && prefersDarkModeMql.matches ? 'dark' : 'light';
|
|
87
|
+
}
|
|
88
|
+
return colorMode;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* __Theme provider__
|
|
92
|
+
*
|
|
93
|
+
* Provides global theming configuration.
|
|
94
|
+
*
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
function ThemeProvider(_ref) {
|
|
98
|
+
var children = _ref.children,
|
|
99
|
+
defaultColorMode = _ref.defaultColorMode,
|
|
100
|
+
defaultTheme = _ref.defaultTheme;
|
|
101
|
+
var _useState = (0, _react.useState)(defaultColorMode),
|
|
102
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
103
|
+
chosenColorMode = _useState2[0],
|
|
104
|
+
setChosenColorMode = _useState2[1];
|
|
105
|
+
var _useState3 = (0, _react.useState)(getReconciledColorMode(defaultColorMode)),
|
|
106
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
107
|
+
reconciledColorMode = _useState4[0],
|
|
108
|
+
setReconciledColorMode = _useState4[1];
|
|
109
|
+
var _useState5 = (0, _react.useState)(defaultTheme),
|
|
110
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
111
|
+
theme = _useState6[0],
|
|
112
|
+
setTheme = _useState6[1];
|
|
113
|
+
var setColorMode = (0, _react.useCallback)(function (colorMode) {
|
|
114
|
+
setChosenColorMode(colorMode);
|
|
115
|
+
setReconciledColorMode(getReconciledColorMode(colorMode));
|
|
116
|
+
}, []);
|
|
117
|
+
var setPartialTheme = (0, _react.useCallback)(function (nextTheme) {
|
|
118
|
+
setTheme(function (theme) {
|
|
119
|
+
return _objectSpread(_objectSpread({}, theme), nextTheme);
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
(0, _react.useEffect)(function () {
|
|
123
|
+
(0, _tokens.setGlobalTheme)(_objectSpread(_objectSpread({}, theme), {}, {
|
|
124
|
+
colorMode: reconciledColorMode
|
|
125
|
+
}));
|
|
126
|
+
}, [theme, reconciledColorMode]);
|
|
127
|
+
(0, _react.useEffect)(function () {
|
|
128
|
+
if (!prefersDarkModeMql) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
var unbindListener = (0, _bindEventListener.bind)(prefersDarkModeMql, {
|
|
132
|
+
type: 'change',
|
|
133
|
+
listener: function listener(event) {
|
|
134
|
+
if (chosenColorMode === 'auto') {
|
|
135
|
+
setReconciledColorMode(event.matches ? 'dark' : 'light');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return unbindListener;
|
|
140
|
+
}, [chosenColorMode]);
|
|
141
|
+
return /*#__PURE__*/_react.default.createElement(ColorModeContext.Provider, {
|
|
142
|
+
value: reconciledColorMode
|
|
143
|
+
}, /*#__PURE__*/_react.default.createElement(SetColorModeContext.Provider, {
|
|
144
|
+
value: setColorMode
|
|
145
|
+
}, /*#__PURE__*/_react.default.createElement(ThemeContext.Provider, {
|
|
146
|
+
value: theme
|
|
147
|
+
}, /*#__PURE__*/_react.default.createElement(SetThemeContext.Provider, {
|
|
148
|
+
value: setPartialTheme
|
|
149
|
+
}, children))));
|
|
150
|
+
}
|
|
151
|
+
var _default = exports.default = ThemeProvider;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { createContext, useContext } from 'react';
|
|
2
|
+
import ThemeProvider from './theme-provider';
|
|
3
|
+
const InsideAppProviderContext = /*#__PURE__*/createContext(false);
|
|
4
|
+
const defaultThemeSettings = {
|
|
5
|
+
dark: 'dark',
|
|
6
|
+
light: 'light',
|
|
7
|
+
spacing: 'spacing'
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* __App provider__
|
|
11
|
+
*
|
|
12
|
+
* An app provider provides app level configuration such as global theming.
|
|
13
|
+
*
|
|
14
|
+
* Place it at the root of your application.
|
|
15
|
+
*/
|
|
16
|
+
export function AppProvider({
|
|
17
|
+
children,
|
|
18
|
+
defaultColorMode = 'light',
|
|
19
|
+
defaultTheme = defaultThemeSettings
|
|
20
|
+
}) {
|
|
21
|
+
const isInsideAppProvider = useContext(InsideAppProviderContext);
|
|
22
|
+
if (isInsideAppProvider) {
|
|
23
|
+
throw new Error('App provider should not be nested within another app provider.');
|
|
24
|
+
}
|
|
25
|
+
return /*#__PURE__*/React.createElement(InsideAppProviderContext.Provider, {
|
|
26
|
+
value: true
|
|
27
|
+
}, /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
28
|
+
defaultColorMode: defaultColorMode,
|
|
29
|
+
defaultTheme: defaultTheme
|
|
30
|
+
}, children));
|
|
31
|
+
}
|
|
32
|
+
export default AppProvider;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
|
|
2
|
+
import { bind } from 'bind-event-listener';
|
|
3
|
+
import { setGlobalTheme } from '@atlaskit/tokens';
|
|
4
|
+
const ColorModeContext = /*#__PURE__*/createContext(undefined);
|
|
5
|
+
const SetColorModeContext = /*#__PURE__*/createContext(undefined);
|
|
6
|
+
const ThemeContext = /*#__PURE__*/createContext(undefined);
|
|
7
|
+
const SetThemeContext = /*#__PURE__*/createContext(undefined);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* __useColorMode()__
|
|
11
|
+
*
|
|
12
|
+
* Returns the current color mode when inside the app provider.
|
|
13
|
+
*/
|
|
14
|
+
export function useColorMode() {
|
|
15
|
+
const value = useContext(ColorModeContext);
|
|
16
|
+
if (!value) {
|
|
17
|
+
throw new Error('useColorMode must be used within AppProvider.');
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* __useSetColorMode()__
|
|
24
|
+
*
|
|
25
|
+
* Returns the color mode setter when inside the app provider.
|
|
26
|
+
*/
|
|
27
|
+
export function useSetColorMode() {
|
|
28
|
+
const value = useContext(SetColorModeContext);
|
|
29
|
+
if (!value) {
|
|
30
|
+
throw new Error('useSetColorMode must be used within AppProvider.');
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* __useTheme()__
|
|
37
|
+
*
|
|
38
|
+
* Returns the current theme settings when inside the app provider.
|
|
39
|
+
*/
|
|
40
|
+
export function useTheme() {
|
|
41
|
+
const value = useContext(ThemeContext);
|
|
42
|
+
if (!value) {
|
|
43
|
+
throw new Error('useTheme must be used within AppProvider.');
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* __useSetTheme()__
|
|
50
|
+
*
|
|
51
|
+
* Returns the theme setter when inside the app provider.
|
|
52
|
+
*/
|
|
53
|
+
export function useSetTheme() {
|
|
54
|
+
const value = useContext(SetThemeContext);
|
|
55
|
+
if (!value) {
|
|
56
|
+
throw new Error('useSetTheme must be used within AppProvider.');
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
const isMatchMediaAvailable = typeof window !== 'undefined' && 'matchMedia' in window;
|
|
61
|
+
const prefersDarkModeMql = isMatchMediaAvailable ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;
|
|
62
|
+
|
|
63
|
+
// TODO: currently 'auto' color mode will always return 'light' in SSR.
|
|
64
|
+
// Additional work required: https://product-fabric.atlassian.net/browse/DSP-9781
|
|
65
|
+
function getReconciledColorMode(colorMode) {
|
|
66
|
+
if (colorMode === 'auto') {
|
|
67
|
+
return prefersDarkModeMql !== null && prefersDarkModeMql !== void 0 && prefersDarkModeMql.matches ? 'dark' : 'light';
|
|
68
|
+
}
|
|
69
|
+
return colorMode;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* __Theme provider__
|
|
73
|
+
*
|
|
74
|
+
* Provides global theming configuration.
|
|
75
|
+
*
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
export function ThemeProvider({
|
|
79
|
+
children,
|
|
80
|
+
defaultColorMode,
|
|
81
|
+
defaultTheme
|
|
82
|
+
}) {
|
|
83
|
+
const [chosenColorMode, setChosenColorMode] = useState(defaultColorMode);
|
|
84
|
+
const [reconciledColorMode, setReconciledColorMode] = useState(getReconciledColorMode(defaultColorMode));
|
|
85
|
+
const [theme, setTheme] = useState(defaultTheme);
|
|
86
|
+
const setColorMode = useCallback(colorMode => {
|
|
87
|
+
setChosenColorMode(colorMode);
|
|
88
|
+
setReconciledColorMode(getReconciledColorMode(colorMode));
|
|
89
|
+
}, []);
|
|
90
|
+
const setPartialTheme = useCallback(nextTheme => {
|
|
91
|
+
setTheme(theme => ({
|
|
92
|
+
...theme,
|
|
93
|
+
...nextTheme
|
|
94
|
+
}));
|
|
95
|
+
}, []);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
setGlobalTheme({
|
|
98
|
+
...theme,
|
|
99
|
+
colorMode: reconciledColorMode
|
|
100
|
+
});
|
|
101
|
+
}, [theme, reconciledColorMode]);
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (!prefersDarkModeMql) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const unbindListener = bind(prefersDarkModeMql, {
|
|
107
|
+
type: 'change',
|
|
108
|
+
listener: event => {
|
|
109
|
+
if (chosenColorMode === 'auto') {
|
|
110
|
+
setReconciledColorMode(event.matches ? 'dark' : 'light');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return unbindListener;
|
|
115
|
+
}, [chosenColorMode]);
|
|
116
|
+
return /*#__PURE__*/React.createElement(ColorModeContext.Provider, {
|
|
117
|
+
value: reconciledColorMode
|
|
118
|
+
}, /*#__PURE__*/React.createElement(SetColorModeContext.Provider, {
|
|
119
|
+
value: setColorMode
|
|
120
|
+
}, /*#__PURE__*/React.createElement(ThemeContext.Provider, {
|
|
121
|
+
value: theme
|
|
122
|
+
}, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
|
|
123
|
+
value: setPartialTheme
|
|
124
|
+
}, children))));
|
|
125
|
+
}
|
|
126
|
+
export default ThemeProvider;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React, { createContext, useContext } from 'react';
|
|
2
|
+
import ThemeProvider from './theme-provider';
|
|
3
|
+
var InsideAppProviderContext = /*#__PURE__*/createContext(false);
|
|
4
|
+
var defaultThemeSettings = {
|
|
5
|
+
dark: 'dark',
|
|
6
|
+
light: 'light',
|
|
7
|
+
spacing: 'spacing'
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* __App provider__
|
|
11
|
+
*
|
|
12
|
+
* An app provider provides app level configuration such as global theming.
|
|
13
|
+
*
|
|
14
|
+
* Place it at the root of your application.
|
|
15
|
+
*/
|
|
16
|
+
export function AppProvider(_ref) {
|
|
17
|
+
var children = _ref.children,
|
|
18
|
+
_ref$defaultColorMode = _ref.defaultColorMode,
|
|
19
|
+
defaultColorMode = _ref$defaultColorMode === void 0 ? 'light' : _ref$defaultColorMode,
|
|
20
|
+
_ref$defaultTheme = _ref.defaultTheme,
|
|
21
|
+
defaultTheme = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme;
|
|
22
|
+
var isInsideAppProvider = useContext(InsideAppProviderContext);
|
|
23
|
+
if (isInsideAppProvider) {
|
|
24
|
+
throw new Error('App provider should not be nested within another app provider.');
|
|
25
|
+
}
|
|
26
|
+
return /*#__PURE__*/React.createElement(InsideAppProviderContext.Provider, {
|
|
27
|
+
value: true
|
|
28
|
+
}, /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
29
|
+
defaultColorMode: defaultColorMode,
|
|
30
|
+
defaultTheme: defaultTheme
|
|
31
|
+
}, children));
|
|
32
|
+
}
|
|
33
|
+
export default AppProvider;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
|
|
6
|
+
import { bind } from 'bind-event-listener';
|
|
7
|
+
import { setGlobalTheme } from '@atlaskit/tokens';
|
|
8
|
+
var ColorModeContext = /*#__PURE__*/createContext(undefined);
|
|
9
|
+
var SetColorModeContext = /*#__PURE__*/createContext(undefined);
|
|
10
|
+
var ThemeContext = /*#__PURE__*/createContext(undefined);
|
|
11
|
+
var SetThemeContext = /*#__PURE__*/createContext(undefined);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* __useColorMode()__
|
|
15
|
+
*
|
|
16
|
+
* Returns the current color mode when inside the app provider.
|
|
17
|
+
*/
|
|
18
|
+
export function useColorMode() {
|
|
19
|
+
var value = useContext(ColorModeContext);
|
|
20
|
+
if (!value) {
|
|
21
|
+
throw new Error('useColorMode must be used within AppProvider.');
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* __useSetColorMode()__
|
|
28
|
+
*
|
|
29
|
+
* Returns the color mode setter when inside the app provider.
|
|
30
|
+
*/
|
|
31
|
+
export function useSetColorMode() {
|
|
32
|
+
var value = useContext(SetColorModeContext);
|
|
33
|
+
if (!value) {
|
|
34
|
+
throw new Error('useSetColorMode must be used within AppProvider.');
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* __useTheme()__
|
|
41
|
+
*
|
|
42
|
+
* Returns the current theme settings when inside the app provider.
|
|
43
|
+
*/
|
|
44
|
+
export function useTheme() {
|
|
45
|
+
var value = useContext(ThemeContext);
|
|
46
|
+
if (!value) {
|
|
47
|
+
throw new Error('useTheme must be used within AppProvider.');
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* __useSetTheme()__
|
|
54
|
+
*
|
|
55
|
+
* Returns the theme setter when inside the app provider.
|
|
56
|
+
*/
|
|
57
|
+
export function useSetTheme() {
|
|
58
|
+
var value = useContext(SetThemeContext);
|
|
59
|
+
if (!value) {
|
|
60
|
+
throw new Error('useSetTheme must be used within AppProvider.');
|
|
61
|
+
}
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
var isMatchMediaAvailable = typeof window !== 'undefined' && 'matchMedia' in window;
|
|
65
|
+
var prefersDarkModeMql = isMatchMediaAvailable ? window.matchMedia('(prefers-color-scheme: dark)') : undefined;
|
|
66
|
+
|
|
67
|
+
// TODO: currently 'auto' color mode will always return 'light' in SSR.
|
|
68
|
+
// Additional work required: https://product-fabric.atlassian.net/browse/DSP-9781
|
|
69
|
+
function getReconciledColorMode(colorMode) {
|
|
70
|
+
if (colorMode === 'auto') {
|
|
71
|
+
return prefersDarkModeMql !== null && prefersDarkModeMql !== void 0 && prefersDarkModeMql.matches ? 'dark' : 'light';
|
|
72
|
+
}
|
|
73
|
+
return colorMode;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* __Theme provider__
|
|
77
|
+
*
|
|
78
|
+
* Provides global theming configuration.
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export function ThemeProvider(_ref) {
|
|
83
|
+
var children = _ref.children,
|
|
84
|
+
defaultColorMode = _ref.defaultColorMode,
|
|
85
|
+
defaultTheme = _ref.defaultTheme;
|
|
86
|
+
var _useState = useState(defaultColorMode),
|
|
87
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
88
|
+
chosenColorMode = _useState2[0],
|
|
89
|
+
setChosenColorMode = _useState2[1];
|
|
90
|
+
var _useState3 = useState(getReconciledColorMode(defaultColorMode)),
|
|
91
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
92
|
+
reconciledColorMode = _useState4[0],
|
|
93
|
+
setReconciledColorMode = _useState4[1];
|
|
94
|
+
var _useState5 = useState(defaultTheme),
|
|
95
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
96
|
+
theme = _useState6[0],
|
|
97
|
+
setTheme = _useState6[1];
|
|
98
|
+
var setColorMode = useCallback(function (colorMode) {
|
|
99
|
+
setChosenColorMode(colorMode);
|
|
100
|
+
setReconciledColorMode(getReconciledColorMode(colorMode));
|
|
101
|
+
}, []);
|
|
102
|
+
var setPartialTheme = useCallback(function (nextTheme) {
|
|
103
|
+
setTheme(function (theme) {
|
|
104
|
+
return _objectSpread(_objectSpread({}, theme), nextTheme);
|
|
105
|
+
});
|
|
106
|
+
}, []);
|
|
107
|
+
useEffect(function () {
|
|
108
|
+
setGlobalTheme(_objectSpread(_objectSpread({}, theme), {}, {
|
|
109
|
+
colorMode: reconciledColorMode
|
|
110
|
+
}));
|
|
111
|
+
}, [theme, reconciledColorMode]);
|
|
112
|
+
useEffect(function () {
|
|
113
|
+
if (!prefersDarkModeMql) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
var unbindListener = bind(prefersDarkModeMql, {
|
|
117
|
+
type: 'change',
|
|
118
|
+
listener: function listener(event) {
|
|
119
|
+
if (chosenColorMode === 'auto') {
|
|
120
|
+
setReconciledColorMode(event.matches ? 'dark' : 'light');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return unbindListener;
|
|
125
|
+
}, [chosenColorMode]);
|
|
126
|
+
return /*#__PURE__*/React.createElement(ColorModeContext.Provider, {
|
|
127
|
+
value: reconciledColorMode
|
|
128
|
+
}, /*#__PURE__*/React.createElement(SetColorModeContext.Provider, {
|
|
129
|
+
value: setColorMode
|
|
130
|
+
}, /*#__PURE__*/React.createElement(ThemeContext.Provider, {
|
|
131
|
+
value: theme
|
|
132
|
+
}, /*#__PURE__*/React.createElement(SetThemeContext.Provider, {
|
|
133
|
+
value: setPartialTheme
|
|
134
|
+
}, children))));
|
|
135
|
+
}
|
|
136
|
+
export default ThemeProvider;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ColorMode, type Theme } from './theme-provider';
|
|
3
|
+
interface AppProviderProps {
|
|
4
|
+
/**
|
|
5
|
+
* Initial color mode.
|
|
6
|
+
*/
|
|
7
|
+
defaultColorMode?: ColorMode;
|
|
8
|
+
/**
|
|
9
|
+
* Theme settings.
|
|
10
|
+
*/
|
|
11
|
+
defaultTheme?: Theme;
|
|
12
|
+
/**
|
|
13
|
+
* App content.
|
|
14
|
+
*/
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* __App provider__
|
|
19
|
+
*
|
|
20
|
+
* An app provider provides app level configuration such as global theming.
|
|
21
|
+
*
|
|
22
|
+
* Place it at the root of your application.
|
|
23
|
+
*/
|
|
24
|
+
export declare function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
|
|
25
|
+
export default AppProvider;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ThemeState } from '@atlaskit/tokens';
|
|
3
|
+
export type Theme = Omit<ThemeState, 'colorMode'>;
|
|
4
|
+
export type ColorMode = 'light' | 'dark' | 'auto';
|
|
5
|
+
export type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
|
|
6
|
+
/**
|
|
7
|
+
* __useColorMode()__
|
|
8
|
+
*
|
|
9
|
+
* Returns the current color mode when inside the app provider.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useColorMode(): ReconciledColorMode;
|
|
12
|
+
/**
|
|
13
|
+
* __useSetColorMode()__
|
|
14
|
+
*
|
|
15
|
+
* Returns the color mode setter when inside the app provider.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useSetColorMode(): (value: ColorMode) => void;
|
|
18
|
+
/**
|
|
19
|
+
* __useTheme()__
|
|
20
|
+
*
|
|
21
|
+
* Returns the current theme settings when inside the app provider.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useTheme(): Theme;
|
|
24
|
+
/**
|
|
25
|
+
* __useSetTheme()__
|
|
26
|
+
*
|
|
27
|
+
* Returns the theme setter when inside the app provider.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useSetTheme(): (value: Partial<Theme>) => void;
|
|
30
|
+
interface ThemeProviderProps {
|
|
31
|
+
defaultColorMode: ColorMode;
|
|
32
|
+
defaultTheme: Theme;
|
|
33
|
+
children: React.ReactNode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* __Theme provider__
|
|
37
|
+
*
|
|
38
|
+
* Provides global theming configuration.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
|
|
43
|
+
export default ThemeProvider;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ColorMode, type Theme } from './theme-provider';
|
|
3
|
+
interface AppProviderProps {
|
|
4
|
+
/**
|
|
5
|
+
* Initial color mode.
|
|
6
|
+
*/
|
|
7
|
+
defaultColorMode?: ColorMode;
|
|
8
|
+
/**
|
|
9
|
+
* Theme settings.
|
|
10
|
+
*/
|
|
11
|
+
defaultTheme?: Theme;
|
|
12
|
+
/**
|
|
13
|
+
* App content.
|
|
14
|
+
*/
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* __App provider__
|
|
19
|
+
*
|
|
20
|
+
* An app provider provides app level configuration such as global theming.
|
|
21
|
+
*
|
|
22
|
+
* Place it at the root of your application.
|
|
23
|
+
*/
|
|
24
|
+
export declare function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
|
|
25
|
+
export default AppProvider;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ThemeState } from '@atlaskit/tokens';
|
|
3
|
+
export type Theme = Omit<ThemeState, 'colorMode'>;
|
|
4
|
+
export type ColorMode = 'light' | 'dark' | 'auto';
|
|
5
|
+
export type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
|
|
6
|
+
/**
|
|
7
|
+
* __useColorMode()__
|
|
8
|
+
*
|
|
9
|
+
* Returns the current color mode when inside the app provider.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useColorMode(): ReconciledColorMode;
|
|
12
|
+
/**
|
|
13
|
+
* __useSetColorMode()__
|
|
14
|
+
*
|
|
15
|
+
* Returns the color mode setter when inside the app provider.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useSetColorMode(): (value: ColorMode) => void;
|
|
18
|
+
/**
|
|
19
|
+
* __useTheme()__
|
|
20
|
+
*
|
|
21
|
+
* Returns the current theme settings when inside the app provider.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useTheme(): Theme;
|
|
24
|
+
/**
|
|
25
|
+
* __useSetTheme()__
|
|
26
|
+
*
|
|
27
|
+
* Returns the theme setter when inside the app provider.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useSetTheme(): (value: Partial<Theme>) => void;
|
|
30
|
+
interface ThemeProviderProps {
|
|
31
|
+
defaultColorMode: ColorMode;
|
|
32
|
+
defaultTheme: Theme;
|
|
33
|
+
children: React.ReactNode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* __Theme provider__
|
|
37
|
+
*
|
|
38
|
+
* Provides global theming configuration.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
|
|
43
|
+
export default ThemeProvider;
|
package/package.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@atlaskit/app-provider",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A top level provider for the Design System.",
|
|
5
|
+
"author": "Atlassian Pty Ltd",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"registry": "https://registry.npmjs.org/"
|
|
9
|
+
},
|
|
10
|
+
"atlassian": {
|
|
11
|
+
"team": "Design System Team",
|
|
12
|
+
"inPublicMirror": false,
|
|
13
|
+
"releaseModel": "continuous",
|
|
14
|
+
"website": {
|
|
15
|
+
"name": "App provider",
|
|
16
|
+
"category": "Components",
|
|
17
|
+
"status": {
|
|
18
|
+
"type": "alpha"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
|
|
23
|
+
"main": "dist/cjs/index.js",
|
|
24
|
+
"module": "dist/esm/index.js",
|
|
25
|
+
"module:es2019": "dist/es2019/index.js",
|
|
26
|
+
"types": "dist/types/index.d.ts",
|
|
27
|
+
"typesVersions": {
|
|
28
|
+
">=4.5 <4.9": {
|
|
29
|
+
"*": [
|
|
30
|
+
"dist/types-ts4.5/*",
|
|
31
|
+
"dist/types-ts4.5/index.d.ts"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"sideEffects": false,
|
|
36
|
+
"atlaskit:src": "src/index.tsx",
|
|
37
|
+
"af:exports": {
|
|
38
|
+
".": "./src/index.tsx"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@atlaskit/tokens": "^1.19.0",
|
|
42
|
+
"@babel/runtime": "^7.0.0",
|
|
43
|
+
"bind-event-listener": "^2.1.1"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"react": "^16.8.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@af/visual-regression": "*",
|
|
50
|
+
"@atlaskit/dropdown-menu": "*",
|
|
51
|
+
"@atlaskit/primitives": "*",
|
|
52
|
+
"@atlaskit/ssr": "*",
|
|
53
|
+
"@atlaskit/visual-regression": "*",
|
|
54
|
+
"@atlaskit/webdriver-runner": "*",
|
|
55
|
+
"@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
|
|
56
|
+
"@testing-library/react": "^12.1.5",
|
|
57
|
+
"@testing-library/react-hooks": "^8.0.1",
|
|
58
|
+
"@testing-library/user-event": "^14.4.3",
|
|
59
|
+
"react-dom": "^16.8.0",
|
|
60
|
+
"typescript": "~4.9.5",
|
|
61
|
+
"wait-for-expect": "^1.2.0"
|
|
62
|
+
},
|
|
63
|
+
"techstack": {
|
|
64
|
+
"@atlassian/frontend": {
|
|
65
|
+
"import-structure": [
|
|
66
|
+
"atlassian-conventions"
|
|
67
|
+
],
|
|
68
|
+
"circular-dependencies": [
|
|
69
|
+
"file-and-folder-level"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"@repo/internal": {
|
|
73
|
+
"dom-events": "use-bind-event-listener",
|
|
74
|
+
"analytics": [
|
|
75
|
+
"analytics-next"
|
|
76
|
+
],
|
|
77
|
+
"design-tokens": [
|
|
78
|
+
"color",
|
|
79
|
+
"spacing"
|
|
80
|
+
],
|
|
81
|
+
"ui-components": [
|
|
82
|
+
"lite-mode"
|
|
83
|
+
],
|
|
84
|
+
"deprecation": [
|
|
85
|
+
"no-deprecated-imports"
|
|
86
|
+
],
|
|
87
|
+
"styling": [
|
|
88
|
+
"static",
|
|
89
|
+
"emotion"
|
|
90
|
+
],
|
|
91
|
+
"imports": [
|
|
92
|
+
"import-no-extraneous-disable-for-examples-and-docs"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"homepage": "https://atlassian.design/components",
|
|
97
|
+
"prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.0"
|
|
98
|
+
}
|
package/report.api.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<!-- API Report Version: 2.3 -->
|
|
2
|
+
|
|
3
|
+
## API Report File for "@atlaskit/app-provider"
|
|
4
|
+
|
|
5
|
+
> Do not edit this file. This report is auto-generated using [API Extractor](https://api-extractor.com/).
|
|
6
|
+
> [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
|
|
7
|
+
|
|
8
|
+
### Table of contents
|
|
9
|
+
|
|
10
|
+
- [Main Entry Types](#main-entry-types)
|
|
11
|
+
- [Peer Dependencies](#peer-dependencies)
|
|
12
|
+
|
|
13
|
+
### Main Entry Types
|
|
14
|
+
|
|
15
|
+
<!--SECTION START: Main Entry Types-->
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { default as React_2 } from 'react';
|
|
19
|
+
import { ThemeState } from '@atlaskit/tokens';
|
|
20
|
+
|
|
21
|
+
// @public
|
|
22
|
+
function AppProvider({
|
|
23
|
+
children,
|
|
24
|
+
defaultColorMode,
|
|
25
|
+
defaultTheme,
|
|
26
|
+
}: AppProviderProps): JSX.Element;
|
|
27
|
+
export default AppProvider;
|
|
28
|
+
|
|
29
|
+
// @public (undocumented)
|
|
30
|
+
interface AppProviderProps {
|
|
31
|
+
children: React_2.ReactNode;
|
|
32
|
+
defaultColorMode?: ColorMode;
|
|
33
|
+
defaultTheme?: Theme;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// @public (undocumented)
|
|
37
|
+
type ColorMode = 'auto' | 'dark' | 'light';
|
|
38
|
+
|
|
39
|
+
// @public (undocumented)
|
|
40
|
+
type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
|
|
41
|
+
|
|
42
|
+
// @public (undocumented)
|
|
43
|
+
type Theme = Omit<ThemeState, 'colorMode'>;
|
|
44
|
+
|
|
45
|
+
// @public
|
|
46
|
+
export function useColorMode(): ReconciledColorMode;
|
|
47
|
+
|
|
48
|
+
// @public
|
|
49
|
+
export function useSetColorMode(): (value: ColorMode) => void;
|
|
50
|
+
|
|
51
|
+
// @public
|
|
52
|
+
export function useSetTheme(): (value: Partial<Theme>) => void;
|
|
53
|
+
|
|
54
|
+
// @public
|
|
55
|
+
export function useTheme(): Theme;
|
|
56
|
+
|
|
57
|
+
// (No @packageDocumentation comment for this package)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
<!--SECTION END: Main Entry Types-->
|
|
61
|
+
|
|
62
|
+
### Peer Dependencies
|
|
63
|
+
|
|
64
|
+
<!--SECTION START: Peer Dependencies-->
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"react": "^16.8.0"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
<!--SECTION END: Peer Dependencies-->
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
## API Report File for "@atlaskit/app-provider"
|
|
2
|
+
|
|
3
|
+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
|
|
7
|
+
import { default as React_2 } from 'react';
|
|
8
|
+
import { ThemeState } from '@atlaskit/tokens';
|
|
9
|
+
|
|
10
|
+
// @public
|
|
11
|
+
function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
|
|
12
|
+
export default AppProvider;
|
|
13
|
+
|
|
14
|
+
// @public (undocumented)
|
|
15
|
+
interface AppProviderProps {
|
|
16
|
+
children: React_2.ReactNode;
|
|
17
|
+
defaultColorMode?: ColorMode;
|
|
18
|
+
defaultTheme?: Theme;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// @public (undocumented)
|
|
22
|
+
type ColorMode = 'auto' | 'dark' | 'light';
|
|
23
|
+
|
|
24
|
+
// @public (undocumented)
|
|
25
|
+
type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
|
|
26
|
+
|
|
27
|
+
// @public (undocumented)
|
|
28
|
+
type Theme = Omit<ThemeState, 'colorMode'>;
|
|
29
|
+
|
|
30
|
+
// @public
|
|
31
|
+
export function useColorMode(): ReconciledColorMode;
|
|
32
|
+
|
|
33
|
+
// @public
|
|
34
|
+
export function useSetColorMode(): (value: ColorMode) => void;
|
|
35
|
+
|
|
36
|
+
// @public
|
|
37
|
+
export function useSetTheme(): (value: Partial<Theme>) => void;
|
|
38
|
+
|
|
39
|
+
// @public
|
|
40
|
+
export function useTheme(): Theme;
|
|
41
|
+
|
|
42
|
+
// (No @packageDocumentation comment for this package)
|
|
43
|
+
|
|
44
|
+
```
|