@atlaskit/app-provider 0.1.0 → 0.3.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,17 @@
1
1
  # @atlaskit/app-provider
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#42091](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42091) [`4ec3142822b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4ec3142822b) - Add the `routerLinkComponent` prop to support router link configuration within the Design System.
8
+
9
+ ## 0.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#41931](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41931) [`5df5614a6b5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5df5614a6b5) - defaultTheme now applies default sub-themes when ommited.
14
+
3
15
  ## 0.1.0
4
16
 
5
17
  ### Minor Changes
@@ -2,14 +2,19 @@
2
2
  order: 0
3
3
  ---
4
4
 
5
- import AppProviderDefault from '../../examples/constellation/0-default';
6
- import AppProviderThemeSwitcher from '../../examples/constellation/1-theme-switcher';
5
+ import defaultExample from '../../examples/constellation/0-default';
6
+ import themeSwitcherExample from '../../examples/constellation/1-theme-switcher';
7
+ import RouterLinkComponentExample from '../../examples/constellation/2-router-link-component';
7
8
 
8
9
  ## Theming
9
10
 
10
11
  AppProvider sets up theming for an app, enabling [design tokens](/tokens/design-tokens) to be used.
11
12
 
12
- <Example Component={AppProviderDefault} packageName="@atlaskit/app-provider" />
13
+ <Example
14
+ Component={defaultExample.example}
15
+ source={defaultExample.code}
16
+ packageName="@atlaskit/app-provider"
17
+ />
13
18
 
14
19
  ## Color mode and theme switching
15
20
 
@@ -18,6 +23,21 @@ The `useColorMode` hook can be used to get the active color mode. When the color
18
23
  The `useTheme` hook can be used to get the active themes. The `useSetTheme` hook can be used to change themes.
19
24
 
20
25
  <Example
21
- Component={AppProviderThemeSwitcher}
26
+ Component={themeSwitcherExample.example}
27
+ source={themeSwitcherExample.code}
28
+ packageName="@atlaskit/app-provider"
29
+ />
30
+
31
+ ## Router links
32
+
33
+ The `routerLinkComponent` prop provides support for configuring router links within Design System components.
34
+
35
+ Support for this is limited as Design System components are being updated, starting with `@atlaskit/button`.
36
+
37
+ This example shows how links can be configured to utilize the router link component supplied by [React Resource Router](https://github.com/atlassian-labs/react-resource-router), however any routing library can be used.
38
+
39
+ <Example
40
+ Component={RouterLinkComponentExample}
41
+ appearance="source-only"
22
42
  packageName="@atlaskit/app-provider"
23
43
  />
@@ -8,15 +8,11 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.AppProvider = AppProvider;
9
9
  exports.default = void 0;
10
10
  var _react = _interopRequireWildcard(require("react"));
11
+ var _routerLinkProvider = _interopRequireDefault(require("./router-link-provider"));
11
12
  var _themeProvider = _interopRequireDefault(require("./theme-provider"));
12
13
  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
14
  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
15
  var InsideAppProviderContext = /*#__PURE__*/(0, _react.createContext)(false);
15
- var defaultThemeSettings = {
16
- dark: 'dark',
17
- light: 'light',
18
- spacing: 'spacing'
19
- };
20
16
  /**
21
17
  * __App provider__
22
18
  *
@@ -28,8 +24,8 @@ function AppProvider(_ref) {
28
24
  var children = _ref.children,
29
25
  _ref$defaultColorMode = _ref.defaultColorMode,
30
26
  defaultColorMode = _ref$defaultColorMode === void 0 ? 'light' : _ref$defaultColorMode,
31
- _ref$defaultTheme = _ref.defaultTheme,
32
- defaultTheme = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme;
27
+ defaultTheme = _ref.defaultTheme,
28
+ routerLinkComponent = _ref.routerLinkComponent;
33
29
  var isInsideAppProvider = (0, _react.useContext)(InsideAppProviderContext);
34
30
  if (isInsideAppProvider) {
35
31
  throw new Error('App provider should not be nested within another app provider.');
@@ -39,6 +35,8 @@ function AppProvider(_ref) {
39
35
  }, /*#__PURE__*/_react.default.createElement(_themeProvider.default, {
40
36
  defaultColorMode: defaultColorMode,
41
37
  defaultTheme: defaultTheme
42
- }, children));
38
+ }, /*#__PURE__*/_react.default.createElement(_routerLinkProvider.default, {
39
+ routerLinkComponent: routerLinkComponent
40
+ }, children)));
43
41
  }
44
42
  var _default = exports.default = AppProvider;
package/dist/cjs/index.js CHANGED
@@ -16,6 +16,12 @@ Object.defineProperty(exports, "useColorMode", {
16
16
  return _themeProvider.useColorMode;
17
17
  }
18
18
  });
19
+ Object.defineProperty(exports, "useRouterLink", {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _useRouterLink.default;
23
+ }
24
+ });
19
25
  Object.defineProperty(exports, "useSetColorMode", {
20
26
  enumerable: true,
21
27
  get: function get() {
@@ -35,4 +41,5 @@ Object.defineProperty(exports, "useTheme", {
35
41
  }
36
42
  });
37
43
  var _appProvider = _interopRequireDefault(require("./app-provider"));
38
- var _themeProvider = require("./theme-provider");
44
+ var _themeProvider = require("./theme-provider");
45
+ var _useRouterLink = _interopRequireDefault(require("./router-link-provider/hooks/use-router-link"));
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _index = require("../index");
9
+ /**
10
+ * __useRouterLink()__
11
+ *
12
+ * Hook: Returns app-configured router link component
13
+ */
14
+ var useRouterLink = function useRouterLink() {
15
+ var _useContext = (0, _react.useContext)(_index.RouterLinkProviderContext),
16
+ routerLinkComponent = _useContext.routerLinkComponent;
17
+ return routerLinkComponent;
18
+ };
19
+ var _default = exports.default = useRouterLink;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.RouterLinkProviderContext = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ 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); }
10
+ 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; }
11
+ var RouterLinkProviderContext = exports.RouterLinkProviderContext = /*#__PURE__*/(0, _react.createContext)({});
12
+ /**
13
+ * __RouterLinkProvider__
14
+ *
15
+ * Provides a configured router link component for use
16
+ * within Design System components.
17
+ */
18
+ var RouterLinkProvider = function RouterLinkProvider(_ref) {
19
+ var routerLinkComponent = _ref.routerLinkComponent,
20
+ children = _ref.children;
21
+ return /*#__PURE__*/_react.default.createElement(RouterLinkProviderContext.Provider, {
22
+ value: {
23
+ routerLinkComponent: routerLinkComponent
24
+ }
25
+ }, children);
26
+ };
27
+ var _default = exports.default = RouterLinkProvider;
@@ -20,6 +20,11 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
20
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
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
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 defaultThemeSettings = {
24
+ dark: 'dark',
25
+ light: 'light',
26
+ spacing: 'spacing'
27
+ };
23
28
  var ColorModeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
24
29
  var SetColorModeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
25
30
  var ThemeContext = /*#__PURE__*/(0, _react.createContext)(undefined);
@@ -97,7 +102,16 @@ function getReconciledColorMode(colorMode) {
97
102
  function ThemeProvider(_ref) {
98
103
  var children = _ref.children,
99
104
  defaultColorMode = _ref.defaultColorMode,
100
- defaultTheme = _ref.defaultTheme;
105
+ _ref$defaultTheme = _ref.defaultTheme,
106
+ _ref$defaultTheme2 = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme,
107
+ _ref$defaultTheme2$da = _ref$defaultTheme2.dark,
108
+ dark = _ref$defaultTheme2$da === void 0 ? 'dark' : _ref$defaultTheme2$da,
109
+ _ref$defaultTheme2$li = _ref$defaultTheme2.light,
110
+ light = _ref$defaultTheme2$li === void 0 ? 'light' : _ref$defaultTheme2$li,
111
+ _ref$defaultTheme2$sp = _ref$defaultTheme2.spacing,
112
+ spacing = _ref$defaultTheme2$sp === void 0 ? 'spacing' : _ref$defaultTheme2$sp,
113
+ typography = _ref$defaultTheme2.typography,
114
+ shape = _ref$defaultTheme2.shape;
101
115
  var _useState = (0, _react.useState)(defaultColorMode),
102
116
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
103
117
  chosenColorMode = _useState2[0],
@@ -106,7 +120,13 @@ function ThemeProvider(_ref) {
106
120
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
107
121
  reconciledColorMode = _useState4[0],
108
122
  setReconciledColorMode = _useState4[1];
109
- var _useState5 = (0, _react.useState)(defaultTheme),
123
+ var _useState5 = (0, _react.useState)({
124
+ dark: dark,
125
+ light: light,
126
+ spacing: spacing,
127
+ typography: typography,
128
+ shape: shape
129
+ }),
110
130
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
111
131
  theme = _useState6[0],
112
132
  setTheme = _useState6[1];
@@ -1,11 +1,7 @@
1
1
  import React, { createContext, useContext } from 'react';
2
+ import RouterLinkProvider from './router-link-provider';
2
3
  import ThemeProvider from './theme-provider';
3
4
  const InsideAppProviderContext = /*#__PURE__*/createContext(false);
4
- const defaultThemeSettings = {
5
- dark: 'dark',
6
- light: 'light',
7
- spacing: 'spacing'
8
- };
9
5
  /**
10
6
  * __App provider__
11
7
  *
@@ -16,7 +12,8 @@ const defaultThemeSettings = {
16
12
  export function AppProvider({
17
13
  children,
18
14
  defaultColorMode = 'light',
19
- defaultTheme = defaultThemeSettings
15
+ defaultTheme,
16
+ routerLinkComponent
20
17
  }) {
21
18
  const isInsideAppProvider = useContext(InsideAppProviderContext);
22
19
  if (isInsideAppProvider) {
@@ -27,6 +24,8 @@ export function AppProvider({
27
24
  }, /*#__PURE__*/React.createElement(ThemeProvider, {
28
25
  defaultColorMode: defaultColorMode,
29
26
  defaultTheme: defaultTheme
30
- }, children));
27
+ }, /*#__PURE__*/React.createElement(RouterLinkProvider, {
28
+ routerLinkComponent: routerLinkComponent
29
+ }, children)));
31
30
  }
32
31
  export default AppProvider;
@@ -1,2 +1,4 @@
1
1
  export { default } from './app-provider';
2
- export { useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
2
+ export { useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
3
+ import useRouterLink from './router-link-provider/hooks/use-router-link';
4
+ export { useRouterLink };
@@ -0,0 +1,15 @@
1
+ import { useContext } from 'react';
2
+ import { RouterLinkProviderContext } from '../index';
3
+
4
+ /**
5
+ * __useRouterLink()__
6
+ *
7
+ * Hook: Returns app-configured router link component
8
+ */
9
+ const useRouterLink = () => {
10
+ const {
11
+ routerLinkComponent
12
+ } = useContext(RouterLinkProviderContext);
13
+ return routerLinkComponent;
14
+ };
15
+ export default useRouterLink;
@@ -0,0 +1,19 @@
1
+ import React, { createContext } from 'react';
2
+ export const RouterLinkProviderContext = /*#__PURE__*/createContext({});
3
+ /**
4
+ * __RouterLinkProvider__
5
+ *
6
+ * Provides a configured router link component for use
7
+ * within Design System components.
8
+ */
9
+ const RouterLinkProvider = ({
10
+ routerLinkComponent,
11
+ children
12
+ }) => {
13
+ return /*#__PURE__*/React.createElement(RouterLinkProviderContext.Provider, {
14
+ value: {
15
+ routerLinkComponent
16
+ }
17
+ }, children);
18
+ };
19
+ export default RouterLinkProvider;
@@ -1,6 +1,11 @@
1
1
  import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
2
2
  import { bind } from 'bind-event-listener';
3
3
  import { setGlobalTheme } from '@atlaskit/tokens';
4
+ const defaultThemeSettings = {
5
+ dark: 'dark',
6
+ light: 'light',
7
+ spacing: 'spacing'
8
+ };
4
9
  const ColorModeContext = /*#__PURE__*/createContext(undefined);
5
10
  const SetColorModeContext = /*#__PURE__*/createContext(undefined);
6
11
  const ThemeContext = /*#__PURE__*/createContext(undefined);
@@ -78,11 +83,23 @@ function getReconciledColorMode(colorMode) {
78
83
  export function ThemeProvider({
79
84
  children,
80
85
  defaultColorMode,
81
- defaultTheme
86
+ defaultTheme: {
87
+ dark = 'dark',
88
+ light = 'light',
89
+ spacing = 'spacing',
90
+ typography,
91
+ shape
92
+ } = defaultThemeSettings
82
93
  }) {
83
94
  const [chosenColorMode, setChosenColorMode] = useState(defaultColorMode);
84
95
  const [reconciledColorMode, setReconciledColorMode] = useState(getReconciledColorMode(defaultColorMode));
85
- const [theme, setTheme] = useState(defaultTheme);
96
+ const [theme, setTheme] = useState({
97
+ dark,
98
+ light,
99
+ spacing,
100
+ typography,
101
+ shape
102
+ });
86
103
  const setColorMode = useCallback(colorMode => {
87
104
  setChosenColorMode(colorMode);
88
105
  setReconciledColorMode(getReconciledColorMode(colorMode));
@@ -1,11 +1,7 @@
1
1
  import React, { createContext, useContext } from 'react';
2
+ import RouterLinkProvider from './router-link-provider';
2
3
  import ThemeProvider from './theme-provider';
3
4
  var InsideAppProviderContext = /*#__PURE__*/createContext(false);
4
- var defaultThemeSettings = {
5
- dark: 'dark',
6
- light: 'light',
7
- spacing: 'spacing'
8
- };
9
5
  /**
10
6
  * __App provider__
11
7
  *
@@ -17,8 +13,8 @@ export function AppProvider(_ref) {
17
13
  var children = _ref.children,
18
14
  _ref$defaultColorMode = _ref.defaultColorMode,
19
15
  defaultColorMode = _ref$defaultColorMode === void 0 ? 'light' : _ref$defaultColorMode,
20
- _ref$defaultTheme = _ref.defaultTheme,
21
- defaultTheme = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme;
16
+ defaultTheme = _ref.defaultTheme,
17
+ routerLinkComponent = _ref.routerLinkComponent;
22
18
  var isInsideAppProvider = useContext(InsideAppProviderContext);
23
19
  if (isInsideAppProvider) {
24
20
  throw new Error('App provider should not be nested within another app provider.');
@@ -28,6 +24,8 @@ export function AppProvider(_ref) {
28
24
  }, /*#__PURE__*/React.createElement(ThemeProvider, {
29
25
  defaultColorMode: defaultColorMode,
30
26
  defaultTheme: defaultTheme
31
- }, children));
27
+ }, /*#__PURE__*/React.createElement(RouterLinkProvider, {
28
+ routerLinkComponent: routerLinkComponent
29
+ }, children)));
32
30
  }
33
31
  export default AppProvider;
package/dist/esm/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export { default } from './app-provider';
2
- export { useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
2
+ export { useColorMode, useSetColorMode, useSetTheme, useTheme } from './theme-provider';
3
+ import useRouterLink from './router-link-provider/hooks/use-router-link';
4
+ export { useRouterLink };
@@ -0,0 +1,14 @@
1
+ import { useContext } from 'react';
2
+ import { RouterLinkProviderContext } from '../index';
3
+
4
+ /**
5
+ * __useRouterLink()__
6
+ *
7
+ * Hook: Returns app-configured router link component
8
+ */
9
+ var useRouterLink = function useRouterLink() {
10
+ var _useContext = useContext(RouterLinkProviderContext),
11
+ routerLinkComponent = _useContext.routerLinkComponent;
12
+ return routerLinkComponent;
13
+ };
14
+ export default useRouterLink;
@@ -0,0 +1,18 @@
1
+ import React, { createContext } from 'react';
2
+ export var RouterLinkProviderContext = /*#__PURE__*/createContext({});
3
+ /**
4
+ * __RouterLinkProvider__
5
+ *
6
+ * Provides a configured router link component for use
7
+ * within Design System components.
8
+ */
9
+ var RouterLinkProvider = function RouterLinkProvider(_ref) {
10
+ var routerLinkComponent = _ref.routerLinkComponent,
11
+ children = _ref.children;
12
+ return /*#__PURE__*/React.createElement(RouterLinkProviderContext.Provider, {
13
+ value: {
14
+ routerLinkComponent: routerLinkComponent
15
+ }
16
+ }, children);
17
+ };
18
+ export default RouterLinkProvider;
@@ -5,6 +5,11 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
5
5
  import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
6
6
  import { bind } from 'bind-event-listener';
7
7
  import { setGlobalTheme } from '@atlaskit/tokens';
8
+ var defaultThemeSettings = {
9
+ dark: 'dark',
10
+ light: 'light',
11
+ spacing: 'spacing'
12
+ };
8
13
  var ColorModeContext = /*#__PURE__*/createContext(undefined);
9
14
  var SetColorModeContext = /*#__PURE__*/createContext(undefined);
10
15
  var ThemeContext = /*#__PURE__*/createContext(undefined);
@@ -82,7 +87,16 @@ function getReconciledColorMode(colorMode) {
82
87
  export function ThemeProvider(_ref) {
83
88
  var children = _ref.children,
84
89
  defaultColorMode = _ref.defaultColorMode,
85
- defaultTheme = _ref.defaultTheme;
90
+ _ref$defaultTheme = _ref.defaultTheme,
91
+ _ref$defaultTheme2 = _ref$defaultTheme === void 0 ? defaultThemeSettings : _ref$defaultTheme,
92
+ _ref$defaultTheme2$da = _ref$defaultTheme2.dark,
93
+ dark = _ref$defaultTheme2$da === void 0 ? 'dark' : _ref$defaultTheme2$da,
94
+ _ref$defaultTheme2$li = _ref$defaultTheme2.light,
95
+ light = _ref$defaultTheme2$li === void 0 ? 'light' : _ref$defaultTheme2$li,
96
+ _ref$defaultTheme2$sp = _ref$defaultTheme2.spacing,
97
+ spacing = _ref$defaultTheme2$sp === void 0 ? 'spacing' : _ref$defaultTheme2$sp,
98
+ typography = _ref$defaultTheme2.typography,
99
+ shape = _ref$defaultTheme2.shape;
86
100
  var _useState = useState(defaultColorMode),
87
101
  _useState2 = _slicedToArray(_useState, 2),
88
102
  chosenColorMode = _useState2[0],
@@ -91,7 +105,13 @@ export function ThemeProvider(_ref) {
91
105
  _useState4 = _slicedToArray(_useState3, 2),
92
106
  reconciledColorMode = _useState4[0],
93
107
  setReconciledColorMode = _useState4[1];
94
- var _useState5 = useState(defaultTheme),
108
+ var _useState5 = useState({
109
+ dark: dark,
110
+ light: light,
111
+ spacing: spacing,
112
+ typography: typography,
113
+ shape: shape
114
+ }),
95
115
  _useState6 = _slicedToArray(_useState5, 2),
96
116
  theme = _useState6[0],
97
117
  setTheme = _useState6[1];
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { type RouterLinkComponent } from './router-link-provider';
2
3
  import { type ColorMode, type Theme } from './theme-provider';
3
4
  interface AppProviderProps {
4
5
  /**
@@ -8,7 +9,11 @@ interface AppProviderProps {
8
9
  /**
9
10
  * Theme settings.
10
11
  */
11
- defaultTheme?: Theme;
12
+ defaultTheme?: Partial<Theme>;
13
+ /**
14
+ * A configured router link component.
15
+ */
16
+ routerLinkComponent?: RouterLinkComponent<any>;
12
17
  /**
13
18
  * App content.
14
19
  */
@@ -21,5 +26,5 @@ interface AppProviderProps {
21
26
  *
22
27
  * Place it at the root of your application.
23
28
  */
24
- export declare function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
29
+ export declare function AppProvider({ children, defaultColorMode, defaultTheme, routerLinkComponent, }: AppProviderProps): JSX.Element;
25
30
  export default AppProvider;
@@ -1,2 +1,5 @@
1
1
  export { default } from './app-provider';
2
2
  export { useColorMode, useSetColorMode, useSetTheme, useTheme, } from './theme-provider';
3
+ export { type RouterLinkComponentProps } from './router-link-provider';
4
+ import useRouterLink from './router-link-provider/hooks/use-router-link';
5
+ export { useRouterLink };
@@ -0,0 +1,8 @@
1
+ import { type RouterLinkComponent } from '../index';
2
+ /**
3
+ * __useRouterLink()__
4
+ *
5
+ * Hook: Returns app-configured router link component
6
+ */
7
+ declare const useRouterLink: () => RouterLinkComponent | undefined;
8
+ export default useRouterLink;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ export type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
3
+ export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
4
+ /**
5
+ * A string which can be mapped to the underlying router link,
6
+ * or optionally a custom object defined in the generic type for advanced use.
7
+ *
8
+ * @example
9
+ * ```
10
+ * const MyRouterLink: RouterLinkComponent<{
11
+ * to: string;
12
+ * replace?: boolean;
13
+ * }> ...
14
+ * ```
15
+ */
16
+ href: string | RouterLinkConfig;
17
+ children: React.ReactNode;
18
+ };
19
+ export type RouterLinkProviderContextProps<RouterLinkConfig extends {} = {}> = {
20
+ routerLinkComponent?: RouterLinkComponent<RouterLinkConfig>;
21
+ };
22
+ export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<{}>>;
23
+ export type RouterLinkProviderProps = {
24
+ /**
25
+ * The rendering mechanism of router links within Design System components.
26
+ */
27
+ routerLinkComponent?: RouterLinkComponent<any>;
28
+ };
29
+ /**
30
+ * __RouterLinkProvider__
31
+ *
32
+ * Provides a configured router link component for use
33
+ * within Design System components.
34
+ */
35
+ declare const RouterLinkProvider: ({ routerLinkComponent, children, }: RouterLinkProviderProps & {
36
+ children: React.ReactNode;
37
+ }) => JSX.Element;
38
+ export default RouterLinkProvider;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ThemeState } from '@atlaskit/tokens';
3
- export type Theme = Omit<ThemeState, 'colorMode'>;
3
+ export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
4
4
  export type ColorMode = 'light' | 'dark' | 'auto';
5
5
  export type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
6
6
  /**
@@ -29,7 +29,7 @@ export declare function useTheme(): Theme;
29
29
  export declare function useSetTheme(): (value: Partial<Theme>) => void;
30
30
  interface ThemeProviderProps {
31
31
  defaultColorMode: ColorMode;
32
- defaultTheme: Theme;
32
+ defaultTheme?: Partial<Theme>;
33
33
  children: React.ReactNode;
34
34
  }
35
35
  /**
@@ -39,5 +39,5 @@ interface ThemeProviderProps {
39
39
  *
40
40
  * @internal
41
41
  */
42
- export declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
42
+ export declare function ThemeProvider({ children, defaultColorMode, defaultTheme: { dark, light, spacing, typography, shape, }, }: ThemeProviderProps): JSX.Element;
43
43
  export default ThemeProvider;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { type RouterLinkComponent } from './router-link-provider';
2
3
  import { type ColorMode, type Theme } from './theme-provider';
3
4
  interface AppProviderProps {
4
5
  /**
@@ -8,7 +9,11 @@ interface AppProviderProps {
8
9
  /**
9
10
  * Theme settings.
10
11
  */
11
- defaultTheme?: Theme;
12
+ defaultTheme?: Partial<Theme>;
13
+ /**
14
+ * A configured router link component.
15
+ */
16
+ routerLinkComponent?: RouterLinkComponent<any>;
12
17
  /**
13
18
  * App content.
14
19
  */
@@ -21,5 +26,5 @@ interface AppProviderProps {
21
26
  *
22
27
  * Place it at the root of your application.
23
28
  */
24
- export declare function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
29
+ export declare function AppProvider({ children, defaultColorMode, defaultTheme, routerLinkComponent, }: AppProviderProps): JSX.Element;
25
30
  export default AppProvider;
@@ -1,2 +1,5 @@
1
1
  export { default } from './app-provider';
2
2
  export { useColorMode, useSetColorMode, useSetTheme, useTheme, } from './theme-provider';
3
+ export { type RouterLinkComponentProps } from './router-link-provider';
4
+ import useRouterLink from './router-link-provider/hooks/use-router-link';
5
+ export { useRouterLink };
@@ -0,0 +1,8 @@
1
+ import { type RouterLinkComponent } from '../index';
2
+ /**
3
+ * __useRouterLink()__
4
+ *
5
+ * Hook: Returns app-configured router link component
6
+ */
7
+ declare const useRouterLink: () => RouterLinkComponent | undefined;
8
+ export default useRouterLink;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ export type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
3
+ export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
4
+ /**
5
+ * A string which can be mapped to the underlying router link,
6
+ * or optionally a custom object defined in the generic type for advanced use.
7
+ *
8
+ * @example
9
+ * ```
10
+ * const MyRouterLink: RouterLinkComponent<{
11
+ * to: string;
12
+ * replace?: boolean;
13
+ * }> ...
14
+ * ```
15
+ */
16
+ href: string | RouterLinkConfig;
17
+ children: React.ReactNode;
18
+ };
19
+ export type RouterLinkProviderContextProps<RouterLinkConfig extends {} = {}> = {
20
+ routerLinkComponent?: RouterLinkComponent<RouterLinkConfig>;
21
+ };
22
+ export declare const RouterLinkProviderContext: React.Context<RouterLinkProviderContextProps<{}>>;
23
+ export type RouterLinkProviderProps = {
24
+ /**
25
+ * The rendering mechanism of router links within Design System components.
26
+ */
27
+ routerLinkComponent?: RouterLinkComponent<any>;
28
+ };
29
+ /**
30
+ * __RouterLinkProvider__
31
+ *
32
+ * Provides a configured router link component for use
33
+ * within Design System components.
34
+ */
35
+ declare const RouterLinkProvider: ({ routerLinkComponent, children, }: RouterLinkProviderProps & {
36
+ children: React.ReactNode;
37
+ }) => JSX.Element;
38
+ export default RouterLinkProvider;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ThemeState } from '@atlaskit/tokens';
3
- export type Theme = Omit<ThemeState, 'colorMode'>;
3
+ export type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
4
4
  export type ColorMode = 'light' | 'dark' | 'auto';
5
5
  export type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
6
6
  /**
@@ -29,7 +29,7 @@ export declare function useTheme(): Theme;
29
29
  export declare function useSetTheme(): (value: Partial<Theme>) => void;
30
30
  interface ThemeProviderProps {
31
31
  defaultColorMode: ColorMode;
32
- defaultTheme: Theme;
32
+ defaultTheme?: Partial<Theme>;
33
33
  children: React.ReactNode;
34
34
  }
35
35
  /**
@@ -39,5 +39,5 @@ interface ThemeProviderProps {
39
39
  *
40
40
  * @internal
41
41
  */
42
- export declare function ThemeProvider({ children, defaultColorMode, defaultTheme, }: ThemeProviderProps): JSX.Element;
42
+ export declare function ThemeProvider({ children, defaultColorMode, defaultTheme: { dark, light, spacing, typography, shape, }, }: ThemeProviderProps): JSX.Element;
43
43
  export default ThemeProvider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/app-provider",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "A top level provider for the Design System.",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -38,7 +38,7 @@
38
38
  ".": "./src/index.tsx"
39
39
  },
40
40
  "dependencies": {
41
- "@atlaskit/tokens": "^1.19.0",
41
+ "@atlaskit/tokens": "^1.28.0",
42
42
  "@babel/runtime": "^7.0.0",
43
43
  "bind-event-listener": "^2.1.1"
44
44
  },
@@ -57,6 +57,8 @@
57
57
  "@testing-library/react-hooks": "^8.0.1",
58
58
  "@testing-library/user-event": "^14.4.3",
59
59
  "react-dom": "^16.8.0",
60
+ "react-resource-router": "^0.20.0",
61
+ "react-router-dom": "^4.2.2",
60
62
  "typescript": "~4.9.5",
61
63
  "wait-for-expect": "^1.2.0"
62
64
  },
package/report.api.md CHANGED
@@ -23,6 +23,7 @@ function AppProvider({
23
23
  children,
24
24
  defaultColorMode,
25
25
  defaultTheme,
26
+ routerLinkComponent,
26
27
  }: AppProviderProps): JSX.Element;
27
28
  export default AppProvider;
28
29
 
@@ -30,7 +31,8 @@ export default AppProvider;
30
31
  interface AppProviderProps {
31
32
  children: React_2.ReactNode;
32
33
  defaultColorMode?: ColorMode;
33
- defaultTheme?: Theme;
34
+ defaultTheme?: Partial<Theme>;
35
+ routerLinkComponent?: RouterLinkComponent<any>;
34
36
  }
35
37
 
36
38
  // @public (undocumented)
@@ -40,11 +42,24 @@ type ColorMode = 'auto' | 'dark' | 'light';
40
42
  type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
41
43
 
42
44
  // @public (undocumented)
43
- type Theme = Omit<ThemeState, 'colorMode'>;
45
+ type RouterLinkComponent<RouterLinkConfig extends {} = {}> =
46
+ React_2.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
47
+
48
+ // @public (undocumented)
49
+ export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
50
+ href: RouterLinkConfig | string;
51
+ children: React_2.ReactNode;
52
+ };
53
+
54
+ // @public (undocumented)
55
+ type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
44
56
 
45
57
  // @public
46
58
  export function useColorMode(): ReconciledColorMode;
47
59
 
60
+ // @public
61
+ export const useRouterLink: () => RouterLinkComponent | undefined;
62
+
48
63
  // @public
49
64
  export function useSetColorMode(): (value: ColorMode) => void;
50
65
 
@@ -8,14 +8,15 @@ import { default as React_2 } from 'react';
8
8
  import { ThemeState } from '@atlaskit/tokens';
9
9
 
10
10
  // @public
11
- function AppProvider({ children, defaultColorMode, defaultTheme, }: AppProviderProps): JSX.Element;
11
+ function AppProvider({ children, defaultColorMode, defaultTheme, routerLinkComponent, }: AppProviderProps): JSX.Element;
12
12
  export default AppProvider;
13
13
 
14
14
  // @public (undocumented)
15
15
  interface AppProviderProps {
16
16
  children: React_2.ReactNode;
17
17
  defaultColorMode?: ColorMode;
18
- defaultTheme?: Theme;
18
+ defaultTheme?: Partial<Theme>;
19
+ routerLinkComponent?: RouterLinkComponent<any>;
19
20
  }
20
21
 
21
22
  // @public (undocumented)
@@ -25,11 +26,23 @@ type ColorMode = 'auto' | 'dark' | 'light';
25
26
  type ReconciledColorMode = Exclude<ColorMode, 'auto'>;
26
27
 
27
28
  // @public (undocumented)
28
- type Theme = Omit<ThemeState, 'colorMode'>;
29
+ type RouterLinkComponent<RouterLinkConfig extends {} = {}> = React_2.ComponentType<RouterLinkComponentProps<RouterLinkConfig>>;
30
+
31
+ // @public (undocumented)
32
+ export type RouterLinkComponentProps<RouterLinkConfig extends {} = {}> = {
33
+ href: RouterLinkConfig | string;
34
+ children: React_2.ReactNode;
35
+ };
36
+
37
+ // @public (undocumented)
38
+ type Theme = Omit<ThemeState, 'colorMode' | 'contrastMode'>;
29
39
 
30
40
  // @public
31
41
  export function useColorMode(): ReconciledColorMode;
32
42
 
43
+ // @public
44
+ export const useRouterLink: () => RouterLinkComponent | undefined;
45
+
33
46
  // @public
34
47
  export function useSetColorMode(): (value: ColorMode) => void;
35
48