@atlaskit/storybook-addon-design-system 0.3.8 → 0.3.9

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,12 @@
1
1
  # @atlaskit/storybook-addon-design-system
2
2
 
3
+ ## 0.3.9
4
+
5
+ ### Patch Changes
6
+
7
+ - [`718d5ad3044`](https://bitbucket.org/atlassian/atlassian-frontend/commits/718d5ad3044) - Updates to support the new `@atlaskit/tokens` theming API.
8
+ - Updated dependencies
9
+
3
10
  ## 0.3.8
4
11
 
5
12
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -9,5 +9,4 @@ Object.defineProperty(exports, "withDesignTokens", {
9
9
  return _tokens.withDesignTokens;
10
10
  }
11
11
  });
12
-
13
12
  var _tokens = require("./tokens");
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -11,5 +10,4 @@ Object.defineProperty(exports, "Tool", {
11
10
  return _tool.default;
12
11
  }
13
12
  });
14
-
15
13
  var _tool = _interopRequireDefault(require("./tool"));
@@ -1,32 +1,26 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = void 0;
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _react = _interopRequireWildcard(require("react"));
15
-
16
11
  var _api = require("@storybook/api");
17
-
18
12
  var _components = require("@storybook/components");
19
-
20
13
  var _constants = require("../constants");
21
-
22
14
  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); }
23
-
24
15
  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; }
25
-
26
16
  var themeOptions = [{
27
17
  id: 'none',
28
18
  title: 'Disable',
29
19
  icon: 'cross'
20
+ }, {
21
+ id: 'auto',
22
+ title: 'Same as system',
23
+ icon: 'circlehollow'
30
24
  }, {
31
25
  id: 'light',
32
26
  title: 'Light theme',
@@ -44,25 +38,22 @@ var themeOptions = [{
44
38
  title: 'Stacked',
45
39
  icon: 'bottombar'
46
40
  }];
41
+
47
42
  /**
48
43
  * __Tool__
49
44
  *
50
45
  * ADS Toolbar UI, visible in the topbar of the storybook UI.
51
46
  */
52
-
53
47
  var Tool = function Tool() {
54
48
  var _themeOptions$find;
55
-
56
49
  var _useState = (0, _react.useState)(false),
57
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
- isVisible = _useState2[0],
59
- setIsVisible = _useState2[1];
60
-
50
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
51
+ isVisible = _useState2[0],
52
+ setIsVisible = _useState2[1];
61
53
  var _useGlobals = (0, _api.useGlobals)(),
62
- _useGlobals2 = (0, _slicedToArray2.default)(_useGlobals, 2),
63
- adsTheme = _useGlobals2[0].adsTheme,
64
- updateGlobals = _useGlobals2[1];
65
-
54
+ _useGlobals2 = (0, _slicedToArray2.default)(_useGlobals, 2),
55
+ adsTheme = _useGlobals2[0].adsTheme,
56
+ updateGlobals = _useGlobals2[1];
66
57
  var setTheme = (0, _react.useCallback)(function (theme) {
67
58
  return updateGlobals({
68
59
  adsTheme: theme
@@ -78,16 +69,14 @@ var Tool = function Tool() {
78
69
  return /*#__PURE__*/_react.default.createElement(_components.TooltipLinkList, {
79
70
  links: themeOptions.map(function (_ref2) {
80
71
  var id = _ref2.id,
81
- title = _ref2.title,
82
- icon = _ref2.icon;
83
-
72
+ title = _ref2.title,
73
+ icon = _ref2.icon;
84
74
  var Icon = /*#__PURE__*/_react.default.createElement(_components.Icons, {
85
75
  style: {
86
76
  opacity: 1
87
77
  },
88
78
  icon: icon
89
79
  });
90
-
91
80
  return {
92
81
  id: id,
93
82
  title: title,
@@ -112,6 +101,5 @@ var Tool = function Tool() {
112
101
  })) === null || _themeOptions$find === void 0 ? void 0 : _themeOptions$find.icon) || 'circlehollow'
113
102
  }), '\xa0ADS Theme'));
114
103
  };
115
-
116
104
  var _default = Tool;
117
105
  exports.default = _default;
@@ -1,36 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = void 0;
11
-
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
12
  var _react = _interopRequireWildcard(require("react"));
15
-
16
13
  var _addons = require("@storybook/addons");
17
-
18
14
  var _tokens = require("@atlaskit/tokens");
19
-
20
- require("@atlaskit/tokens/css/atlassian-light.css");
21
-
22
- require("@atlaskit/tokens/css/atlassian-dark.css");
23
-
24
15
  var _constants = require("./constants");
25
-
26
16
  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); }
27
-
28
17
  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; }
29
-
30
18
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
31
-
32
19
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
33
-
34
20
  var splitColumnStyles = {
35
21
  position: 'absolute',
36
22
  boxSizing: 'border-box',
@@ -51,87 +37,83 @@ var stackColumnStyles = {
51
37
  background: (0, _tokens.token)('elevation.surface', 'white'),
52
38
  color: (0, _tokens.token)('color.text', '#172B4D')
53
39
  };
54
- /**
55
- * Forcefully retarget the token declarations to apply to our hacked class,
56
- * .ads-theme-override, for split and stack views.
57
- */
58
-
59
- var hackThemeOverrideOnStyleElement = function hackThemeOverrideOnStyleElement(style) {
60
- var regex = /html\[(data-theme.?=)"(light|dark)"\](\s{)/i;
61
-
62
- if (regex.test(style.innerText)) {
63
- style.innerText = style.textContent.replace(regex, "html[$1\"$2\"], .ads-theme-override[$1\"$2\"]$3");
64
- }
65
- };
66
-
67
40
  var withDesignTokens = (0, _addons.makeDecorator)({
68
41
  name: _constants.DECORATOR_ID,
69
42
  parameterName: _constants.DECORATOR_PARAM,
70
43
  wrapper: function wrapper(storyFn, context) {
71
- var theme = context.globals.adsTheme; // eslint-disable-next-line react-hooks/rules-of-hooks
72
-
73
- (0, _addons.useEffect)(function () {
74
- document.querySelectorAll('style').forEach(function (el) {
75
- hackThemeOverrideOnStyleElement(el);
76
- });
77
- }, [context.id]); // eslint-disable-next-line react-hooks/rules-of-hooks
44
+ var theme = context.globals.adsTheme;
78
45
 
46
+ // eslint-disable-next-line react-hooks/rules-of-hooks
79
47
  (0, _addons.useEffect)(function () {
80
- if (!theme || theme === 'none') {
81
- delete document.documentElement.dataset.theme;
82
- return;
83
- }
84
-
85
- document.documentElement.dataset.theme = theme;
48
+ (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
49
+ return _regenerator.default.wrap(function _callee$(_context) {
50
+ while (1) {
51
+ switch (_context.prev = _context.next) {
52
+ case 0:
53
+ _context.t0 = theme;
54
+ _context.next = _context.t0 === 'light' ? 3 : _context.t0 === 'dark' ? 3 : _context.t0 === 'auto' ? 3 : _context.t0 === 'split' ? 6 : _context.t0 === 'stack' ? 6 : _context.t0 === 'none' ? 10 : 14;
55
+ break;
56
+ case 3:
57
+ _context.next = 5;
58
+ return (0, _tokens.setGlobalTheme)({
59
+ colorMode: theme
60
+ });
61
+ case 5:
62
+ return _context.abrupt("break", 15);
63
+ case 6:
64
+ _context.next = 8;
65
+ return (0, _tokens.setGlobalTheme)({
66
+ colorMode: 'light'
67
+ });
68
+ case 8:
69
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(function (el) {
70
+ var clone = el.cloneNode(true);
71
+ clone.setAttribute('data-theme', clone.getAttribute('data-theme') + '-clone');
72
+ // HACK: re-target theme selectors to split div containers
73
+ clone.textContent = clone.textContent.replace(/html\[/g, '[');
74
+ document.head.append(clone);
75
+ });
76
+ return _context.abrupt("break", 15);
77
+ case 10:
78
+ delete document.documentElement.dataset.theme;
79
+ delete document.documentElement.dataset.colorMode;
80
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(function (el) {
81
+ return el.remove();
82
+ });
83
+ return _context.abrupt("break", 15);
84
+ case 14:
85
+ return _context.abrupt("break", 15);
86
+ case 15:
87
+ case "end":
88
+ return _context.stop();
89
+ }
90
+ }
91
+ }, _callee);
92
+ }))();
86
93
  }, [context.id, theme]);
87
-
88
94
  function renderStory() {
89
95
  var story = storyFn(context);
90
-
91
- switch (theme) {
92
- case 'split':
93
- {
94
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
95
- className: "ads-theme-override",
96
- "data-theme": "light",
97
- style: _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
98
- inset: '0px 50vw 0px 0px'
99
- })
100
- }, story), /*#__PURE__*/_react.default.createElement("div", {
101
- className: "ads-theme-override",
102
- "data-theme": "dark",
103
- style: _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
104
- inset: '0px 0px 0px 50vw'
105
- })
106
- }, story));
107
- }
108
-
109
- case 'stack':
110
- {
111
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
112
- className: "ads-theme-override",
113
- "data-theme": "light",
114
- style: _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
115
- inset: '0px 0px 50% 0px'
116
- })
117
- }, story), /*#__PURE__*/_react.default.createElement("div", {
118
- className: "ads-theme-override",
119
- "data-theme": "dark",
120
- style: _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
121
- inset: '50% 0px 0px 0px'
122
- })
123
- }, story));
124
- }
125
-
126
- default:
127
- {
128
- return /*#__PURE__*/_react.default.createElement("div", {
129
- "data-theme": theme
130
- }, story);
131
- }
96
+ if (theme === 'split' || theme === 'stack') {
97
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
98
+ "data-theme": "light:light",
99
+ "data-color-mode": "light",
100
+ style: theme === 'split' ? _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
101
+ inset: '0px 50vw 0px 0px'
102
+ }) : _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
103
+ inset: '0px 0px 50% 0px'
104
+ })
105
+ }, story), /*#__PURE__*/_react.default.createElement("div", {
106
+ "data-theme": "dark:dark",
107
+ "data-color-mode": "dark",
108
+ style: theme === 'split' ? _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
109
+ inset: '0px 0px 0px 50vw'
110
+ }) : _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
111
+ inset: '50% 0px 0px 0px'
112
+ })
113
+ }, story));
132
114
  }
115
+ return /*#__PURE__*/_react.default.createElement("div", null, story);
133
116
  }
134
-
135
117
  return renderStory();
136
118
  }
137
119
  });
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -11,5 +10,4 @@ Object.defineProperty(exports, "withDesignTokens", {
11
10
  return _decorator.default;
12
11
  }
13
12
  });
14
-
15
13
  var _decorator = _interopRequireDefault(require("./decorator"));
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  var _addons = require("@storybook/addons");
4
-
5
4
  var _components = require("./components");
6
-
7
5
  var _constants = require("./constants");
8
-
9
6
  _addons.addons.register(_constants.ADDON_ID, function () {
10
7
  _addons.addons.add(_constants.TOOL_ID, {
11
8
  type: _addons.types.TOOL,
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/storybook-addon-design-system",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "sideEffects": false
5
5
  }
@@ -6,6 +6,10 @@ const themeOptions = [{
6
6
  id: 'none',
7
7
  title: 'Disable',
8
8
  icon: 'cross'
9
+ }, {
10
+ id: 'auto',
11
+ title: 'Same as system',
12
+ icon: 'circlehollow'
9
13
  }, {
10
14
  id: 'light',
11
15
  title: 'Light theme',
@@ -23,15 +27,14 @@ const themeOptions = [{
23
27
  title: 'Stacked',
24
28
  icon: 'bottombar'
25
29
  }];
30
+
26
31
  /**
27
32
  * __Tool__
28
33
  *
29
34
  * ADS Toolbar UI, visible in the topbar of the storybook UI.
30
35
  */
31
-
32
36
  const Tool = () => {
33
37
  var _themeOptions$find;
34
-
35
38
  const [isVisible, setIsVisible] = useState(false);
36
39
  const [{
37
40
  adsTheme
@@ -80,5 +83,4 @@ const Tool = () => {
80
83
  }) => id === adsTheme)) === null || _themeOptions$find === void 0 ? void 0 : _themeOptions$find.icon) || 'circlehollow'
81
84
  }), '\xa0ADS Theme'));
82
85
  };
83
-
84
86
  export default Tool;
@@ -1,8 +1,6 @@
1
1
  import React, { Fragment } from 'react';
2
2
  import { makeDecorator, useEffect } from '@storybook/addons';
3
- import { token } from '@atlaskit/tokens';
4
- import '@atlaskit/tokens/css/atlassian-light.css';
5
- import '@atlaskit/tokens/css/atlassian-dark.css';
3
+ import { setGlobalTheme, token } from '@atlaskit/tokens';
6
4
  import { DECORATOR_ID, DECORATOR_PARAM } from './constants';
7
5
  const splitColumnStyles = {
8
6
  position: 'absolute',
@@ -24,87 +22,73 @@ const stackColumnStyles = {
24
22
  background: token('elevation.surface', 'white'),
25
23
  color: token('color.text', '#172B4D')
26
24
  };
27
- /**
28
- * Forcefully retarget the token declarations to apply to our hacked class,
29
- * .ads-theme-override, for split and stack views.
30
- */
31
-
32
- const hackThemeOverrideOnStyleElement = style => {
33
- const regex = /html\[(data-theme.?=)"(light|dark)"\](\s{)/i;
34
-
35
- if (regex.test(style.innerText)) {
36
- style.innerText = style.textContent.replace(regex, `html[$1"$2"], .ads-theme-override[$1"$2"]$3`);
37
- }
38
- };
39
-
40
25
  const withDesignTokens = makeDecorator({
41
26
  name: DECORATOR_ID,
42
27
  parameterName: DECORATOR_PARAM,
43
28
  wrapper: (storyFn, context) => {
44
- const theme = context.globals.adsTheme; // eslint-disable-next-line react-hooks/rules-of-hooks
45
-
46
- useEffect(() => {
47
- document.querySelectorAll('style').forEach(el => {
48
- hackThemeOverrideOnStyleElement(el);
49
- });
50
- }, [context.id]); // eslint-disable-next-line react-hooks/rules-of-hooks
29
+ const theme = context.globals.adsTheme;
51
30
 
31
+ // eslint-disable-next-line react-hooks/rules-of-hooks
52
32
  useEffect(() => {
53
- if (!theme || theme === 'none') {
54
- delete document.documentElement.dataset.theme;
55
- return;
56
- }
57
-
58
- document.documentElement.dataset.theme = theme;
33
+ (async () => {
34
+ switch (theme) {
35
+ case 'light':
36
+ case 'dark':
37
+ case 'auto':
38
+ await setGlobalTheme({
39
+ colorMode: theme
40
+ });
41
+ break;
42
+ case 'split':
43
+ case 'stack':
44
+ await setGlobalTheme({
45
+ colorMode: 'light'
46
+ });
47
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(el => {
48
+ const clone = el.cloneNode(true);
49
+ clone.setAttribute('data-theme', clone.getAttribute('data-theme') + '-clone');
50
+ // HACK: re-target theme selectors to split div containers
51
+ clone.textContent = clone.textContent.replace(/html\[/g, '[');
52
+ document.head.append(clone);
53
+ });
54
+ break;
55
+ case 'none':
56
+ delete document.documentElement.dataset.theme;
57
+ delete document.documentElement.dataset.colorMode;
58
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(el => el.remove());
59
+ break;
60
+ default:
61
+ break;
62
+ }
63
+ })();
59
64
  }, [context.id, theme]);
60
-
61
65
  function renderStory() {
62
66
  const story = storyFn(context);
63
-
64
- switch (theme) {
65
- case 'split':
66
- {
67
- return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
68
- className: "ads-theme-override",
69
- "data-theme": "light",
70
- style: { ...splitColumnStyles,
71
- inset: '0px 50vw 0px 0px'
72
- }
73
- }, story), /*#__PURE__*/React.createElement("div", {
74
- className: "ads-theme-override",
75
- "data-theme": "dark",
76
- style: { ...splitColumnStyles,
77
- inset: '0px 0px 0px 50vw'
78
- }
79
- }, story));
67
+ if (theme === 'split' || theme === 'stack') {
68
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
69
+ "data-theme": "light:light",
70
+ "data-color-mode": "light",
71
+ style: theme === 'split' ? {
72
+ ...splitColumnStyles,
73
+ inset: '0px 50vw 0px 0px'
74
+ } : {
75
+ ...stackColumnStyles,
76
+ inset: '0px 0px 50% 0px'
80
77
  }
81
-
82
- case 'stack':
83
- {
84
- return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
85
- className: "ads-theme-override",
86
- "data-theme": "light",
87
- style: { ...stackColumnStyles,
88
- inset: '0px 0px 50% 0px'
89
- }
90
- }, story), /*#__PURE__*/React.createElement("div", {
91
- className: "ads-theme-override",
92
- "data-theme": "dark",
93
- style: { ...stackColumnStyles,
94
- inset: '50% 0px 0px 0px'
95
- }
96
- }, story));
97
- }
98
-
99
- default:
100
- {
101
- return /*#__PURE__*/React.createElement("div", {
102
- "data-theme": theme
103
- }, story);
78
+ }, story), /*#__PURE__*/React.createElement("div", {
79
+ "data-theme": "dark:dark",
80
+ "data-color-mode": "dark",
81
+ style: theme === 'split' ? {
82
+ ...splitColumnStyles,
83
+ inset: '0px 0px 0px 50vw'
84
+ } : {
85
+ ...stackColumnStyles,
86
+ inset: '50% 0px 0px 0px'
104
87
  }
88
+ }, story));
105
89
  }
90
+ return /*#__PURE__*/React.createElement("div", null, story);
106
91
  }
107
-
108
92
  return renderStory();
109
93
  }
110
94
  });
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/storybook-addon-design-system",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "sideEffects": false
5
5
  }
@@ -7,6 +7,10 @@ var themeOptions = [{
7
7
  id: 'none',
8
8
  title: 'Disable',
9
9
  icon: 'cross'
10
+ }, {
11
+ id: 'auto',
12
+ title: 'Same as system',
13
+ icon: 'circlehollow'
10
14
  }, {
11
15
  id: 'light',
12
16
  title: 'Light theme',
@@ -24,25 +28,22 @@ var themeOptions = [{
24
28
  title: 'Stacked',
25
29
  icon: 'bottombar'
26
30
  }];
31
+
27
32
  /**
28
33
  * __Tool__
29
34
  *
30
35
  * ADS Toolbar UI, visible in the topbar of the storybook UI.
31
36
  */
32
-
33
37
  var Tool = function Tool() {
34
38
  var _themeOptions$find;
35
-
36
39
  var _useState = useState(false),
37
- _useState2 = _slicedToArray(_useState, 2),
38
- isVisible = _useState2[0],
39
- setIsVisible = _useState2[1];
40
-
40
+ _useState2 = _slicedToArray(_useState, 2),
41
+ isVisible = _useState2[0],
42
+ setIsVisible = _useState2[1];
41
43
  var _useGlobals = useGlobals(),
42
- _useGlobals2 = _slicedToArray(_useGlobals, 2),
43
- adsTheme = _useGlobals2[0].adsTheme,
44
- updateGlobals = _useGlobals2[1];
45
-
44
+ _useGlobals2 = _slicedToArray(_useGlobals, 2),
45
+ adsTheme = _useGlobals2[0].adsTheme,
46
+ updateGlobals = _useGlobals2[1];
46
47
  var setTheme = useCallback(function (theme) {
47
48
  return updateGlobals({
48
49
  adsTheme: theme
@@ -58,8 +59,8 @@ var Tool = function Tool() {
58
59
  return /*#__PURE__*/React.createElement(TooltipLinkList, {
59
60
  links: themeOptions.map(function (_ref2) {
60
61
  var id = _ref2.id,
61
- title = _ref2.title,
62
- icon = _ref2.icon;
62
+ title = _ref2.title,
63
+ icon = _ref2.icon;
63
64
  var Icon = /*#__PURE__*/React.createElement(Icons, {
64
65
  style: {
65
66
  opacity: 1
@@ -90,5 +91,4 @@ var Tool = function Tool() {
90
91
  })) === null || _themeOptions$find === void 0 ? void 0 : _themeOptions$find.icon) || 'circlehollow'
91
92
  }), '\xa0ADS Theme'));
92
93
  };
93
-
94
94
  export default Tool;
@@ -1,14 +1,11 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
6
  import React, { Fragment } from 'react';
8
7
  import { makeDecorator, useEffect } from '@storybook/addons';
9
- import { token } from '@atlaskit/tokens';
10
- import '@atlaskit/tokens/css/atlassian-light.css';
11
- import '@atlaskit/tokens/css/atlassian-dark.css';
8
+ import { setGlobalTheme, token } from '@atlaskit/tokens';
12
9
  import { DECORATOR_ID, DECORATOR_PARAM } from './constants';
13
10
  var splitColumnStyles = {
14
11
  position: 'absolute',
@@ -30,87 +27,83 @@ var stackColumnStyles = {
30
27
  background: token('elevation.surface', 'white'),
31
28
  color: token('color.text', '#172B4D')
32
29
  };
33
- /**
34
- * Forcefully retarget the token declarations to apply to our hacked class,
35
- * .ads-theme-override, for split and stack views.
36
- */
37
-
38
- var hackThemeOverrideOnStyleElement = function hackThemeOverrideOnStyleElement(style) {
39
- var regex = /html\[(data-theme.?=)"(light|dark)"\](\s{)/i;
40
-
41
- if (regex.test(style.innerText)) {
42
- style.innerText = style.textContent.replace(regex, "html[$1\"$2\"], .ads-theme-override[$1\"$2\"]$3");
43
- }
44
- };
45
-
46
30
  var withDesignTokens = makeDecorator({
47
31
  name: DECORATOR_ID,
48
32
  parameterName: DECORATOR_PARAM,
49
33
  wrapper: function wrapper(storyFn, context) {
50
- var theme = context.globals.adsTheme; // eslint-disable-next-line react-hooks/rules-of-hooks
34
+ var theme = context.globals.adsTheme;
51
35
 
36
+ // eslint-disable-next-line react-hooks/rules-of-hooks
52
37
  useEffect(function () {
53
- document.querySelectorAll('style').forEach(function (el) {
54
- hackThemeOverrideOnStyleElement(el);
55
- });
56
- }, [context.id]); // eslint-disable-next-line react-hooks/rules-of-hooks
57
-
58
- useEffect(function () {
59
- if (!theme || theme === 'none') {
60
- delete document.documentElement.dataset.theme;
61
- return;
62
- }
63
-
64
- document.documentElement.dataset.theme = theme;
38
+ _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
39
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
40
+ while (1) {
41
+ switch (_context.prev = _context.next) {
42
+ case 0:
43
+ _context.t0 = theme;
44
+ _context.next = _context.t0 === 'light' ? 3 : _context.t0 === 'dark' ? 3 : _context.t0 === 'auto' ? 3 : _context.t0 === 'split' ? 6 : _context.t0 === 'stack' ? 6 : _context.t0 === 'none' ? 10 : 14;
45
+ break;
46
+ case 3:
47
+ _context.next = 5;
48
+ return setGlobalTheme({
49
+ colorMode: theme
50
+ });
51
+ case 5:
52
+ return _context.abrupt("break", 15);
53
+ case 6:
54
+ _context.next = 8;
55
+ return setGlobalTheme({
56
+ colorMode: 'light'
57
+ });
58
+ case 8:
59
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(function (el) {
60
+ var clone = el.cloneNode(true);
61
+ clone.setAttribute('data-theme', clone.getAttribute('data-theme') + '-clone');
62
+ // HACK: re-target theme selectors to split div containers
63
+ clone.textContent = clone.textContent.replace(/html\[/g, '[');
64
+ document.head.append(clone);
65
+ });
66
+ return _context.abrupt("break", 15);
67
+ case 10:
68
+ delete document.documentElement.dataset.theme;
69
+ delete document.documentElement.dataset.colorMode;
70
+ document.documentElement.querySelectorAll('style[data-theme]').forEach(function (el) {
71
+ return el.remove();
72
+ });
73
+ return _context.abrupt("break", 15);
74
+ case 14:
75
+ return _context.abrupt("break", 15);
76
+ case 15:
77
+ case "end":
78
+ return _context.stop();
79
+ }
80
+ }
81
+ }, _callee);
82
+ }))();
65
83
  }, [context.id, theme]);
66
-
67
84
  function renderStory() {
68
85
  var story = storyFn(context);
69
-
70
- switch (theme) {
71
- case 'split':
72
- {
73
- return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
74
- className: "ads-theme-override",
75
- "data-theme": "light",
76
- style: _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
77
- inset: '0px 50vw 0px 0px'
78
- })
79
- }, story), /*#__PURE__*/React.createElement("div", {
80
- className: "ads-theme-override",
81
- "data-theme": "dark",
82
- style: _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
83
- inset: '0px 0px 0px 50vw'
84
- })
85
- }, story));
86
- }
87
-
88
- case 'stack':
89
- {
90
- return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
91
- className: "ads-theme-override",
92
- "data-theme": "light",
93
- style: _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
94
- inset: '0px 0px 50% 0px'
95
- })
96
- }, story), /*#__PURE__*/React.createElement("div", {
97
- className: "ads-theme-override",
98
- "data-theme": "dark",
99
- style: _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
100
- inset: '50% 0px 0px 0px'
101
- })
102
- }, story));
103
- }
104
-
105
- default:
106
- {
107
- return /*#__PURE__*/React.createElement("div", {
108
- "data-theme": theme
109
- }, story);
110
- }
86
+ if (theme === 'split' || theme === 'stack') {
87
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
88
+ "data-theme": "light:light",
89
+ "data-color-mode": "light",
90
+ style: theme === 'split' ? _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
91
+ inset: '0px 50vw 0px 0px'
92
+ }) : _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
93
+ inset: '0px 0px 50% 0px'
94
+ })
95
+ }, story), /*#__PURE__*/React.createElement("div", {
96
+ "data-theme": "dark:dark",
97
+ "data-color-mode": "dark",
98
+ style: theme === 'split' ? _objectSpread(_objectSpread({}, splitColumnStyles), {}, {
99
+ inset: '0px 0px 0px 50vw'
100
+ }) : _objectSpread(_objectSpread({}, stackColumnStyles), {}, {
101
+ inset: '50% 0px 0px 0px'
102
+ })
103
+ }, story));
111
104
  }
105
+ return /*#__PURE__*/React.createElement("div", null, story);
112
106
  }
113
-
114
107
  return renderStory();
115
108
  }
116
109
  });
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/storybook-addon-design-system",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "sideEffects": false
5
5
  }
@@ -1,4 +1,2 @@
1
- import '@atlaskit/tokens/css/atlassian-light.css';
2
- import '@atlaskit/tokens/css/atlassian-dark.css';
3
1
  declare const withDesignTokens: (...args: any) => any;
4
2
  export default withDesignTokens;
@@ -1 +1 @@
1
- export declare type Themes = 'light' | 'dark' | 'none' | 'split' | 'stack';
1
+ export declare type Themes = 'light' | 'dark' | 'auto' | 'none' | 'split' | 'stack';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/storybook-addon-design-system",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "Design token storybook addon",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "publishConfig": {
@@ -37,7 +37,7 @@
37
37
  ".": "./src/index.tsx"
38
38
  },
39
39
  "dependencies": {
40
- "@atlaskit/tokens": "^0.13.0",
40
+ "@atlaskit/tokens": "^1.0.0",
41
41
  "@babel/runtime": "^7.0.0",
42
42
  "@storybook/addons": "^6.4.0",
43
43
  "@storybook/api": "^6.4.0",
@@ -56,8 +56,8 @@
56
56
  "@repo/internal": {
57
57
  "dom-events": "use-bind-event-listener",
58
58
  "design-system": "v1",
59
- "deprecation": "no-deprecated-imports",
60
59
  "theming": "tokens",
60
+ "deprecation": "no-deprecated-imports",
61
61
  "styling": "emotion"
62
62
  }
63
63
  },
package/report.api.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- API Report Version: 2.2 -->
1
+ <!-- API Report Version: 2.3 -->
2
2
 
3
3
  ## API Report File for "@atlaskit/storybook-addon-design-system"
4
4
 
@@ -8,6 +8,7 @@
8
8
  ### Table of contents
9
9
 
10
10
  - [Main Entry Types](#main-entry-types)
11
+ - [Peer Dependencies](#peer-dependencies)
11
12
 
12
13
  ### Main Entry Types
13
14
 
@@ -21,3 +22,15 @@ export const withDesignTokens: (...args: any) => any;
21
22
  ```
22
23
 
23
24
  <!--SECTION END: Main Entry Types-->
25
+
26
+ ### Peer Dependencies
27
+
28
+ <!--SECTION START: Peer Dependencies-->
29
+
30
+ ```json
31
+ {
32
+ "react": "^16.8.0"
33
+ }
34
+ ```
35
+
36
+ <!--SECTION END: Peer Dependencies-->