storybook-addon-pseudo-states 1.1.0-canary.8.ee5c388.0 → 1.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/.babelrc.js CHANGED
@@ -1,3 +1,14 @@
1
+ const modules = process.env.BABEL_ESM === 'true' ? false : 'auto';
2
+
1
3
  module.exports = {
2
- presets: ["@babel/preset-env", "@babel/preset-react"],
4
+ presets: [
5
+ [
6
+ "@babel/preset-env",
7
+ {
8
+ targets: 'defaults',
9
+ modules
10
+ }
11
+ ],
12
+ "@babel/preset-react"
13
+ ],
3
14
  }
package/CHANGELOG.md ADDED
@@ -0,0 +1,41 @@
1
+ # v1.0.0 (Fri Mar 11 2022)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - Merge branch 'main' into feature/docs-support [#20](https://github.com/chromaui/storybook-addon-pseudo-states/pull/20) ([@ghengeveld](https://github.com/ghengeveld))
6
+ - Add support for custom elements using `:host(:hover)` like styling. [#17](https://github.com/chromaui/storybook-addon-pseudo-states/pull/17) (jeroen.zwartepoorte@iddinkgroup.com [@ghengeveld](https://github.com/ghengeveld))
7
+
8
+ #### 🐛 Bug Fix
9
+
10
+ - Setup auto [#7](https://github.com/chromaui/storybook-addon-pseudo-states/pull/7) ([@ghengeveld](https://github.com/ghengeveld))
11
+
12
+ #### ⚠️ Pushed to `main`
13
+
14
+ - Fix missing parameter ([@ghengeveld](https://github.com/ghengeveld))
15
+ - Disable snapshotting for CustomElements stories ([@ghengeveld](https://github.com/ghengeveld))
16
+ - 1.1.0 ([@ghengeveld](https://github.com/ghengeveld))
17
+ - Simplify ([@ghengeveld](https://github.com/ghengeveld))
18
+ - Small tweak ([@ghengeveld](https://github.com/ghengeveld))
19
+ - Upgrade Storybook ([@ghengeveld](https://github.com/ghengeveld))
20
+ - Ignore .env file ([@ghengeveld](https://github.com/ghengeveld))
21
+
22
+ #### Authors: 2
23
+
24
+ - Gert Hengeveld ([@ghengeveld](https://github.com/ghengeveld))
25
+ - Jeroen Zwartepoorte ([@jpzwarte](https://github.com/jpzwarte))
26
+
27
+ ---
28
+
29
+ # v1.0.0 (Sat Feb 27 2021)
30
+
31
+ #### 🐛 Bug Fix
32
+
33
+ - Setup auto [#7](https://github.com/chromaui/storybook-addon-pseudo-states/pull/7) ([@ghengeveld](https://github.com/ghengeveld))
34
+
35
+ #### ⚠️ Pushed to `main`
36
+
37
+ - Ignore .env file ([@ghengeveld](https://github.com/ghengeveld))
38
+
39
+ #### Authors: 1
40
+
41
+ - Gert Hengeveld ([@ghengeveld](https://github.com/ghengeveld))
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -17,13 +17,13 @@ var _theming = require("@storybook/theming");
17
17
 
18
18
  var _constants = require("./constants");
19
19
 
20
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
20
+ 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); }
21
21
 
22
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
22
+ 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; }
23
23
 
24
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
24
+ 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; }
25
25
 
26
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+ 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; }
27
27
 
28
28
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
29
 
@@ -35,7 +35,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
35
35
 
36
36
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
37
37
 
38
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
38
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
39
39
 
40
40
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
41
41
 
@@ -76,18 +76,18 @@ var PseudoStateTool = function PseudoStateTool() {
76
76
  });
77
77
  };
78
78
  }, [pseudo, getValue]);
79
- return /*#__PURE__*/_react["default"].createElement(_components.WithTooltip, {
79
+ return /*#__PURE__*/_react.default.createElement(_components.WithTooltip, {
80
80
  placement: "top",
81
81
  trigger: "click",
82
82
  tooltip: function tooltip() {
83
- return /*#__PURE__*/_react["default"].createElement(_components.TooltipLinkList, {
83
+ return /*#__PURE__*/_react.default.createElement(_components.TooltipLinkList, {
84
84
  links: options.map(function (option) {
85
85
  return {
86
86
  id: option,
87
- title: /*#__PURE__*/_react["default"].createElement(LinkTitle, {
87
+ title: /*#__PURE__*/_react.default.createElement(LinkTitle, {
88
88
  active: getValue(option)
89
89
  }, ":", _constants.PSEUDO_STATES[option]),
90
- right: /*#__PURE__*/_react["default"].createElement(LinkIcon, {
90
+ right: /*#__PURE__*/_react.default.createElement(LinkIcon, {
91
91
  icon: "check",
92
92
  width: 12,
93
93
  height: 12,
@@ -99,11 +99,11 @@ var PseudoStateTool = function PseudoStateTool() {
99
99
  })
100
100
  });
101
101
  }
102
- }, /*#__PURE__*/_react["default"].createElement(_components.IconButton, {
102
+ }, /*#__PURE__*/_react.default.createElement(_components.IconButton, {
103
103
  key: "pseudo-state",
104
104
  title: "Select CSS pseudo states",
105
105
  active: hasSelection
106
- }, /*#__PURE__*/_react["default"].createElement(_components.Icons, {
106
+ }, /*#__PURE__*/_react.default.createElement(_components.Icons, {
107
107
  icon: "button"
108
108
  })));
109
109
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PSEUDO_STATES = exports.TOOL_ID = exports.ADDON_ID = void 0;
6
+ exports.TOOL_ID = exports.PSEUDO_STATES = exports.ADDON_ID = void 0;
7
7
  var ADDON_ID = "storybook/pseudo-states";
8
8
  exports.ADDON_ID = ADDON_ID;
9
9
  var TOOL_ID = "".concat(ADDON_ID, "/tool"); // Dynamic pseudo-classes
File without changes
File without changes
@@ -11,19 +11,19 @@ var _coreEvents = require("@storybook/core-events");
11
11
 
12
12
  var _constants = require("./constants");
13
13
 
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
14
+ 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; }
15
15
 
16
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
+ 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; }
17
17
 
18
18
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
19
 
20
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
20
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
21
21
 
22
22
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
23
 
24
24
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25
25
 
26
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
26
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
27
27
 
28
28
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
29
29
 
@@ -33,7 +33,7 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n
33
33
 
34
34
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
35
35
 
36
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
36
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
37
37
 
38
38
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
39
39
 
@@ -50,6 +50,21 @@ var applyClasses = function applyClasses(element, classnames) {
50
50
  element.className = (_element$className$sp = element.className.split(" ").filter(function (classname) {
51
51
  return classname && classname.indexOf("pseudo-") !== 0;
52
52
  })).concat.apply(_element$className$sp, _toConsumableArray(classnames)).join(" ");
53
+ };
54
+
55
+ var applyParameter = function applyParameter(element, parameter) {
56
+ return applyClasses(element, Object.entries(parameter || {}).filter(function (_ref) {
57
+ var _ref2 = _slicedToArray(_ref, 2),
58
+ _ = _ref2[0],
59
+ value = _ref2[1];
60
+
61
+ return value;
62
+ }).map(function (_ref3) {
63
+ var _ref4 = _slicedToArray(_ref3, 1),
64
+ key = _ref4[0];
65
+
66
+ return "pseudo-".concat(_constants.PSEUDO_STATES[key]);
67
+ }));
53
68
  }; // Traverses ancestry to collect relevant pseudo classnames, and applies them to the shadow host.
54
69
  // Shadow DOM can only access classes on its host. Traversing is needed to mimic the CSS cascade.
55
70
 
@@ -77,37 +92,36 @@ _addons.addons.getChannel().on(_coreEvents.STORY_CHANGED, function () {
77
92
  }); // Global decorator that rewrites stylesheets and applies classnames to render pseudo styles
78
93
 
79
94
 
80
- var withPseudoState = function withPseudoState(StoryFn) {
81
- var parameter = (0, _addons.useParameter)("pseudo");
95
+ var withPseudoState = function withPseudoState(StoryFn, _ref5) {
96
+ var viewMode = _ref5.viewMode,
97
+ parameters = _ref5.parameters,
98
+ id = _ref5.id;
99
+ var parameter = parameters.pseudo;
82
100
 
83
101
  var _useGlobals = (0, _addons.useGlobals)(),
84
102
  _useGlobals2 = _slicedToArray(_useGlobals, 2),
85
103
  globals = _useGlobals2[0].pseudo,
86
- updateGlobals = _useGlobals2[1]; // Sync parameter to globals, used by the toolbar
104
+ updateGlobals = _useGlobals2[1]; // Sync parameter to globals, used by the toolbar (only in canvas as this
105
+ // doesn't make sense for docs because many stories are displayed at once)
87
106
 
88
107
 
89
108
  (0, _addons.useEffect)(function () {
90
- if (parameter !== globals) updateGlobals({
109
+ if (parameter !== globals && viewMode === "story") updateGlobals({
91
110
  pseudo: parameter
92
111
  });
93
- }, [parameter]); // Convert selected states to classnames and apply them to the story root element.
112
+ }, [parameter, viewMode]); // Convert selected states to classnames and apply them to the story root element.
94
113
  // Then update each shadow host to redetermine its own pseudo classnames.
95
114
 
96
115
  (0, _addons.useEffect)(function () {
97
- applyClasses(document.getElementById("root"), Object.entries(globals || {}).filter(function (_ref) {
98
- var _ref2 = _slicedToArray(_ref, 2),
99
- _ = _ref2[0],
100
- value = _ref2[1];
101
-
102
- return value;
103
- }).map(function (_ref3) {
104
- var _ref4 = _slicedToArray(_ref3, 1),
105
- key = _ref4[0];
106
-
107
- return "pseudo-".concat(_constants.PSEUDO_STATES[key]);
108
- }));
109
- shadowHosts.forEach(updateShadowHost);
110
- }, [globals]);
116
+ var timeout = setTimeout(function () {
117
+ var element = document.getElementById(viewMode === "docs" ? "story--".concat(id) : "root");
118
+ applyParameter(element, parameter);
119
+ shadowHosts.forEach(updateShadowHost);
120
+ }, 0);
121
+ return function () {
122
+ return clearTimeout(timeout);
123
+ };
124
+ }, [parameter, viewMode]);
111
125
  return StoryFn();
112
126
  };
113
127
 
@@ -123,96 +137,60 @@ var warnOnce = function warnOnce(message) {
123
137
 
124
138
 
125
139
  function rewriteStyleSheets(shadowRoot) {
126
- var root = shadowRoot || document.getElementById("root");
127
- var tagSelectors = new Set();
128
- var idSelectors = new Set();
129
- var classSelectors = new Set();
130
- var attrSelectors = new Set();
140
+ var _shadowRoot$adoptedSt;
131
141
 
132
- var _iterator = _createForOfIteratorHelper(root.querySelectorAll("*")),
142
+ var styleSheets = shadowRoot ? shadowRoot.styleSheets : document.styleSheets;
143
+ if (shadowRoot !== null && shadowRoot !== void 0 && (_shadowRoot$adoptedSt = shadowRoot.adoptedStyleSheets) !== null && _shadowRoot$adoptedSt !== void 0 && _shadowRoot$adoptedSt.length) styleSheets = shadowRoot.adoptedStyleSheets;
144
+
145
+ var _iterator = _createForOfIteratorHelper(styleSheets),
133
146
  _step;
134
147
 
135
148
  try {
136
149
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
137
- var element = _step.value;
138
- tagSelectors.add("(?<![.#])\\b".concat(element.tagName, "\\b"));
139
- if (element.id) idSelectors.add("#".concat(element.id));
140
-
141
- var _iterator3 = _createForOfIteratorHelper(element.className.split(/\s+/)),
142
- _step3;
150
+ var sheet = _step.value;
143
151
 
144
- try {
145
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
146
- var classname = _step3.value;
147
- if (classname) classSelectors.add("\\.".concat(classname));
148
- }
149
- } catch (err) {
150
- _iterator3.e(err);
151
- } finally {
152
- _iterator3.f();
152
+ if (sheet._pseudoStatesRewritten) {
153
+ continue;
154
+ } else {
155
+ sheet._pseudoStatesRewritten = true;
153
156
  }
154
157
 
155
- var _iterator4 = _createForOfIteratorHelper(element.attributes),
156
- _step4;
157
-
158
- try {
159
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
160
- var localName = _step4.value.localName;
161
- if (localName) attrSelectors.add("\\[".concat(localName, "[~$^*|]?(=[^\\]]+)?\\]"));
162
- }
163
- } catch (err) {
164
- _iterator4.e(err);
165
- } finally {
166
- _iterator4.f();
167
- }
168
- }
169
- } catch (err) {
170
- _iterator.e(err);
171
- } finally {
172
- _iterator.f();
173
- }
174
-
175
- var matchSelectors = [].concat(_toConsumableArray(Array.from(tagSelectors).map(function (re) {
176
- return new RegExp(re, "i");
177
- })), _toConsumableArray(Array.from(idSelectors).map(function (re) {
178
- return new RegExp(re);
179
- })), _toConsumableArray(Array.from(classSelectors).map(function (re) {
180
- return new RegExp(re);
181
- })), _toConsumableArray(Array.from(attrSelectors).map(function (re) {
182
- return new RegExp(re, "i");
183
- })));
184
-
185
- var _iterator2 = _createForOfIteratorHelper((shadowRoot || document).styleSheets),
186
- _step2;
187
-
188
- try {
189
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
190
- var sheet = _step2.value;
191
-
192
158
  try {
193
159
  var index = 0;
194
160
 
195
- var _iterator5 = _createForOfIteratorHelper(sheet.cssRules),
196
- _step5;
161
+ var _iterator2 = _createForOfIteratorHelper(sheet.cssRules),
162
+ _step2;
197
163
 
198
164
  try {
199
- var _loop = function _loop() {
200
- var _step5$value = _step5.value,
201
- cssText = _step5$value.cssText,
202
- selectorText = _step5$value.selectorText;
165
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
166
+ var _step2$value = _step2.value,
167
+ cssText = _step2$value.cssText,
168
+ selectorText = _step2$value.selectorText;
203
169
 
204
170
  if (matchOne.test(selectorText)) {
205
- if (!matchSelectors.some(function (matcher) {
206
- return matcher.test(selectorText);
207
- })) return "continue";
208
171
  var newRule = cssText.replace(selectorText, selectorText.split(", ").flatMap(function (selector) {
209
172
  if (selector.includes(".pseudo-")) return [];
210
173
  var states = [];
211
174
  var plainSelector = selector.replace(matchAll, function (_, state) {
212
- states.push(".pseudo-".concat(state));
175
+ states.push(state);
213
176
  return "";
214
177
  });
215
- var stateSelector = shadowRoot ? ":host(".concat(states.join(""), ") ").concat(plainSelector) : "".concat(states.join(""), " ").concat(plainSelector);
178
+ var stateSelector;
179
+
180
+ if (selector.startsWith(":host(")) {
181
+ stateSelector = states.reduce(function (acc, state) {
182
+ return acc.replaceAll(":".concat(state), ".pseudo-".concat(state));
183
+ }, selector);
184
+ } else if (shadowRoot) {
185
+ stateSelector = ":host(".concat(states.map(function (s) {
186
+ return ".pseudo-".concat(s);
187
+ }).join(""), ") ").concat(plainSelector);
188
+ } else {
189
+ stateSelector = "".concat(states.map(function (s) {
190
+ return ".pseudo-".concat(s);
191
+ }).join(""), " ").concat(plainSelector);
192
+ }
193
+
216
194
  return [selector, stateSelector];
217
195
  }).join(", "));
218
196
  sheet.deleteRule(index);
@@ -224,20 +202,13 @@ function rewriteStyleSheets(shadowRoot) {
224
202
 
225
203
  if (index > 1000) {
226
204
  warnOnce("Reached maximum of 1000 pseudo selectors per sheet, skipping the rest.");
227
- return "break";
205
+ break;
228
206
  }
229
- };
230
-
231
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
232
- var _ret = _loop();
233
-
234
- if (_ret === "continue") continue;
235
- if (_ret === "break") break;
236
207
  }
237
208
  } catch (err) {
238
- _iterator5.e(err);
209
+ _iterator2.e(err);
239
210
  } finally {
240
- _iterator5.f();
211
+ _iterator2.f();
241
212
  }
242
213
  } catch (e) {
243
214
  if (e.toString().includes("cssRules")) {
@@ -249,15 +220,20 @@ function rewriteStyleSheets(shadowRoot) {
249
220
  }
250
221
  }
251
222
  } catch (err) {
252
- _iterator2.e(err);
223
+ _iterator.e(err);
253
224
  } finally {
254
- _iterator2.f();
225
+ _iterator.f();
255
226
  }
256
227
  } // Reinitialize CSS enhancements every time the story changes
257
228
 
258
229
 
259
230
  _addons.addons.getChannel().on(_coreEvents.STORY_RENDERED, function () {
260
231
  return rewriteStyleSheets();
232
+ }); // Reinitialize CSS enhancements every time a docs page is rendered
233
+
234
+
235
+ _addons.addons.getChannel().on(_coreEvents.DOCS_RENDERED, function () {
236
+ return rewriteStyleSheets();
261
237
  }); // IE doesn't support shadow DOM
262
238
 
263
239
 
@@ -0,0 +1,89 @@
1
+ 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; }
2
+
3
+ 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; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+
15
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
16
+
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+
19
+ import React, { useCallback, useMemo } from "react";
20
+ import { useGlobals } from "@storybook/api";
21
+ import { Icons, IconButton, WithTooltip, TooltipLinkList } from "@storybook/components";
22
+ import { styled, color } from "@storybook/theming";
23
+ import { PSEUDO_STATES } from "./constants";
24
+ var LinkTitle = styled.span(function (_ref) {
25
+ var active = _ref.active;
26
+ return {
27
+ color: active ? color.secondary : "inherit"
28
+ };
29
+ });
30
+ var LinkIcon = styled(Icons)(function (_ref2) {
31
+ var active = _ref2.active;
32
+ return {
33
+ opacity: active ? 1 : 0,
34
+ path: {
35
+ fill: active ? color.secondary : "inherit"
36
+ }
37
+ };
38
+ });
39
+ var options = Object.keys(PSEUDO_STATES).sort();
40
+ export var PseudoStateTool = function PseudoStateTool() {
41
+ var _useGlobals = useGlobals(),
42
+ _useGlobals2 = _slicedToArray(_useGlobals, 2),
43
+ pseudo = _useGlobals2[0].pseudo,
44
+ updateGlobals = _useGlobals2[1];
45
+
46
+ var hasSelection = useMemo(function () {
47
+ return !!pseudo && Object.values(pseudo).includes(true);
48
+ }, [pseudo]);
49
+ var getValue = useCallback(function (option) {
50
+ return pseudo ? pseudo[option] : false;
51
+ }, [pseudo]);
52
+ var toggleOption = useCallback(function (option) {
53
+ return function () {
54
+ return updateGlobals({
55
+ pseudo: _objectSpread(_objectSpread({}, pseudo), {}, _defineProperty({}, option, !getValue(option)))
56
+ });
57
+ };
58
+ }, [pseudo, getValue]);
59
+ return /*#__PURE__*/React.createElement(WithTooltip, {
60
+ placement: "top",
61
+ trigger: "click",
62
+ tooltip: function tooltip() {
63
+ return /*#__PURE__*/React.createElement(TooltipLinkList, {
64
+ links: options.map(function (option) {
65
+ return {
66
+ id: option,
67
+ title: /*#__PURE__*/React.createElement(LinkTitle, {
68
+ active: getValue(option)
69
+ }, ":", PSEUDO_STATES[option]),
70
+ right: /*#__PURE__*/React.createElement(LinkIcon, {
71
+ icon: "check",
72
+ width: 12,
73
+ height: 12,
74
+ active: getValue(option)
75
+ }),
76
+ onClick: toggleOption(option),
77
+ active: getValue(option)
78
+ };
79
+ })
80
+ });
81
+ }
82
+ }, /*#__PURE__*/React.createElement(IconButton, {
83
+ key: "pseudo-state",
84
+ title: "Select CSS pseudo states",
85
+ active: hasSelection
86
+ }, /*#__PURE__*/React.createElement(Icons, {
87
+ icon: "button"
88
+ })));
89
+ };
@@ -0,0 +1,15 @@
1
+ export var ADDON_ID = "storybook/pseudo-states";
2
+ export var TOOL_ID = "".concat(ADDON_ID, "/tool"); // Dynamic pseudo-classes
3
+ // @see https://www.w3.org/TR/2018/REC-selectors-3-20181106/#dynamic-pseudos
4
+
5
+ export var PSEUDO_STATES = {
6
+ hover: "hover",
7
+ active: "active",
8
+ focusVisible: "focus-visible",
9
+ focusWithin: "focus-within",
10
+ focus: "focus",
11
+ // must come after its alternatives
12
+ visited: "visited",
13
+ link: "link",
14
+ target: "target"
15
+ };
@@ -0,0 +1,14 @@
1
+ import { addons, types } from "@storybook/addons";
2
+ import { ADDON_ID, TOOL_ID } from "../constants";
3
+ import { PseudoStateTool } from "../PseudoStateTool";
4
+ addons.register(ADDON_ID, function () {
5
+ addons.add(TOOL_ID, {
6
+ type: types.TOOL,
7
+ title: "CSS pseudo states",
8
+ match: function match(_ref) {
9
+ var viewMode = _ref.viewMode;
10
+ return viewMode === "story";
11
+ },
12
+ render: PseudoStateTool
13
+ });
14
+ });
@@ -0,0 +1,2 @@
1
+ import { withPseudoState } from "../withPseudoState";
2
+ export var decorators = [withPseudoState];
@@ -0,0 +1,242 @@
1
+ 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; }
2
+
3
+ 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; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
8
+
9
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
+
11
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+
13
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
14
+
15
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
+
17
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
18
+
19
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
+
21
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
+
23
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
24
+
25
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
26
+
27
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
28
+
29
+ /* eslint-env browser */
30
+ import { addons, useEffect, useGlobals } from "@storybook/addons";
31
+ import { DOCS_RENDERED, STORY_CHANGED, STORY_RENDERED } from "@storybook/core-events";
32
+ import { PSEUDO_STATES } from "./constants";
33
+ var pseudoStates = Object.values(PSEUDO_STATES);
34
+ var matchOne = new RegExp(":(".concat(pseudoStates.join("|"), ")"));
35
+ var matchAll = new RegExp(":(".concat(pseudoStates.join("|"), ")"), "g"); // Drops any existing pseudo state classnames that carried over from a previously viewed story
36
+ // before adding the new classnames. We do this the old-fashioned way, for IE compatibility.
37
+
38
+ var applyClasses = function applyClasses(element, classnames) {
39
+ var _element$className$sp;
40
+
41
+ element.className = (_element$className$sp = element.className.split(" ").filter(function (classname) {
42
+ return classname && classname.indexOf("pseudo-") !== 0;
43
+ })).concat.apply(_element$className$sp, _toConsumableArray(classnames)).join(" ");
44
+ };
45
+
46
+ var applyParameter = function applyParameter(element, parameter) {
47
+ return applyClasses(element, Object.entries(parameter || {}).filter(function (_ref) {
48
+ var _ref2 = _slicedToArray(_ref, 2),
49
+ _ = _ref2[0],
50
+ value = _ref2[1];
51
+
52
+ return value;
53
+ }).map(function (_ref3) {
54
+ var _ref4 = _slicedToArray(_ref3, 1),
55
+ key = _ref4[0];
56
+
57
+ return "pseudo-".concat(PSEUDO_STATES[key]);
58
+ }));
59
+ }; // Traverses ancestry to collect relevant pseudo classnames, and applies them to the shadow host.
60
+ // Shadow DOM can only access classes on its host. Traversing is needed to mimic the CSS cascade.
61
+
62
+
63
+ var updateShadowHost = function updateShadowHost(shadowHost) {
64
+ var classnames = new Set();
65
+
66
+ for (var element = shadowHost.parentElement; element; element = element.parentElement) {
67
+ if (!element.className) continue;
68
+ element.className.split(" ").filter(function (classname) {
69
+ return classname.indexOf("pseudo-") === 0;
70
+ }).forEach(function (classname) {
71
+ return classnames.add(classname);
72
+ });
73
+ }
74
+
75
+ applyClasses(shadowHost, classnames);
76
+ }; // Keep track of attached shadow host elements for the current story
77
+
78
+
79
+ var shadowHosts = new Set();
80
+ addons.getChannel().on(STORY_CHANGED, function () {
81
+ return shadowHosts.clear();
82
+ }); // Global decorator that rewrites stylesheets and applies classnames to render pseudo styles
83
+
84
+ export var withPseudoState = function withPseudoState(StoryFn, _ref5) {
85
+ var viewMode = _ref5.viewMode,
86
+ parameters = _ref5.parameters,
87
+ id = _ref5.id;
88
+ var parameter = parameters.pseudo;
89
+
90
+ var _useGlobals = useGlobals(),
91
+ _useGlobals2 = _slicedToArray(_useGlobals, 2),
92
+ globals = _useGlobals2[0].pseudo,
93
+ updateGlobals = _useGlobals2[1]; // Sync parameter to globals, used by the toolbar (only in canvas as this
94
+ // doesn't make sense for docs because many stories are displayed at once)
95
+
96
+
97
+ useEffect(function () {
98
+ if (parameter !== globals && viewMode === "story") updateGlobals({
99
+ pseudo: parameter
100
+ });
101
+ }, [parameter, viewMode]); // Convert selected states to classnames and apply them to the story root element.
102
+ // Then update each shadow host to redetermine its own pseudo classnames.
103
+
104
+ useEffect(function () {
105
+ var timeout = setTimeout(function () {
106
+ var element = document.getElementById(viewMode === "docs" ? "story--".concat(id) : "root");
107
+ applyParameter(element, parameter);
108
+ shadowHosts.forEach(updateShadowHost);
109
+ }, 0);
110
+ return function () {
111
+ return clearTimeout(timeout);
112
+ };
113
+ }, [parameter, viewMode]);
114
+ return StoryFn();
115
+ };
116
+ var warnings = new Set();
117
+
118
+ var warnOnce = function warnOnce(message) {
119
+ if (warnings.has(message)) return; // eslint-disable-next-line no-console
120
+
121
+ console.warn(message);
122
+ warnings.add(message);
123
+ }; // Rewrite CSS rules for pseudo-states on all stylesheets to add an alternative selector
124
+
125
+
126
+ function rewriteStyleSheets(shadowRoot) {
127
+ var _shadowRoot$adoptedSt;
128
+
129
+ var styleSheets = shadowRoot ? shadowRoot.styleSheets : document.styleSheets;
130
+ if (shadowRoot !== null && shadowRoot !== void 0 && (_shadowRoot$adoptedSt = shadowRoot.adoptedStyleSheets) !== null && _shadowRoot$adoptedSt !== void 0 && _shadowRoot$adoptedSt.length) styleSheets = shadowRoot.adoptedStyleSheets;
131
+
132
+ var _iterator = _createForOfIteratorHelper(styleSheets),
133
+ _step;
134
+
135
+ try {
136
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
137
+ var sheet = _step.value;
138
+
139
+ if (sheet._pseudoStatesRewritten) {
140
+ continue;
141
+ } else {
142
+ sheet._pseudoStatesRewritten = true;
143
+ }
144
+
145
+ try {
146
+ var index = 0;
147
+
148
+ var _iterator2 = _createForOfIteratorHelper(sheet.cssRules),
149
+ _step2;
150
+
151
+ try {
152
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
153
+ var _step2$value = _step2.value,
154
+ cssText = _step2$value.cssText,
155
+ selectorText = _step2$value.selectorText;
156
+
157
+ if (matchOne.test(selectorText)) {
158
+ var newRule = cssText.replace(selectorText, selectorText.split(", ").flatMap(function (selector) {
159
+ if (selector.includes(".pseudo-")) return [];
160
+ var states = [];
161
+ var plainSelector = selector.replace(matchAll, function (_, state) {
162
+ states.push(state);
163
+ return "";
164
+ });
165
+ var stateSelector;
166
+
167
+ if (selector.startsWith(":host(")) {
168
+ stateSelector = states.reduce(function (acc, state) {
169
+ return acc.replaceAll(":".concat(state), ".pseudo-".concat(state));
170
+ }, selector);
171
+ } else if (shadowRoot) {
172
+ stateSelector = ":host(".concat(states.map(function (s) {
173
+ return ".pseudo-".concat(s);
174
+ }).join(""), ") ").concat(plainSelector);
175
+ } else {
176
+ stateSelector = "".concat(states.map(function (s) {
177
+ return ".pseudo-".concat(s);
178
+ }).join(""), " ").concat(plainSelector);
179
+ }
180
+
181
+ return [selector, stateSelector];
182
+ }).join(", "));
183
+ sheet.deleteRule(index);
184
+ sheet.insertRule(newRule, index);
185
+ if (shadowRoot) shadowHosts.add(shadowRoot.host);
186
+ }
187
+
188
+ index++;
189
+
190
+ if (index > 1000) {
191
+ warnOnce("Reached maximum of 1000 pseudo selectors per sheet, skipping the rest.");
192
+ break;
193
+ }
194
+ }
195
+ } catch (err) {
196
+ _iterator2.e(err);
197
+ } finally {
198
+ _iterator2.f();
199
+ }
200
+ } catch (e) {
201
+ if (e.toString().includes("cssRules")) {
202
+ warnOnce("Can't access cssRules, likely due to CORS restrictions: ".concat(sheet.href));
203
+ } else {
204
+ // eslint-disable-next-line no-console
205
+ console.error(e, sheet.href);
206
+ }
207
+ }
208
+ }
209
+ } catch (err) {
210
+ _iterator.e(err);
211
+ } finally {
212
+ _iterator.f();
213
+ }
214
+ } // Reinitialize CSS enhancements every time the story changes
215
+
216
+
217
+ addons.getChannel().on(STORY_RENDERED, function () {
218
+ return rewriteStyleSheets();
219
+ }); // Reinitialize CSS enhancements every time a docs page is rendered
220
+
221
+ addons.getChannel().on(DOCS_RENDERED, function () {
222
+ return rewriteStyleSheets();
223
+ }); // IE doesn't support shadow DOM
224
+
225
+ if (Element.prototype.attachShadow) {
226
+ // Monkeypatch the attachShadow method so we can handle pseudo styles inside shadow DOM
227
+ Element.prototype._attachShadow = Element.prototype.attachShadow;
228
+
229
+ Element.prototype.attachShadow = function attachShadow(init) {
230
+ // Force "open" mode, so we can access the shadowRoot
231
+ var shadowRoot = this._attachShadow(_objectSpread(_objectSpread({}, init), {}, {
232
+ mode: "open"
233
+ })); // Wait for it to render and apply its styles before rewriting them
234
+
235
+
236
+ requestAnimationFrame(function () {
237
+ rewriteStyleSheets(shadowRoot);
238
+ updateShadowHost(shadowRoot.host);
239
+ });
240
+ return shadowRoot;
241
+ };
242
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storybook-addon-pseudo-states",
3
- "version": "1.1.0-canary.8.ee5c388.0",
3
+ "version": "1.3.0",
4
4
  "description": "CSS pseudo states for Storybook",
5
5
  "keywords": [
6
6
  "storybook-addons",
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "author": "ghengeveld",
16
16
  "license": "MIT",
17
- "main": "dist/preset.js",
17
+ "main": "dist/cjs/preset.js",
18
+ "module": "dist/esm/preset.js",
18
19
  "files": [
19
20
  "dist/**/*",
20
21
  "README.md",
@@ -25,7 +26,7 @@
25
26
  "start": "concurrently \"yarn storybook --no-manager-cache --quiet\" \"yarn build:dist --watch\"",
26
27
  "storybook": "start-storybook -p 6006",
27
28
  "chromatic": "chromatic",
28
- "build:dist": "babel ./src --out-dir ./dist",
29
+ "build:dist": "babel ./src --out-dir ./dist/cjs && BABEL_ESM=\"true\" babel ./src --out-dir ./dist/esm",
29
30
  "build:storybook": "build-storybook",
30
31
  "prepublish": "yarn clean && yarn build:dist",
31
32
  "release": "auto shipit --base-branch=main"
@@ -36,7 +37,8 @@
36
37
  "@babel/core": "^7.12.3",
37
38
  "@babel/preset-env": "^7.12.1",
38
39
  "@babel/preset-react": "^7.12.5",
39
- "@storybook/react": "^6.1.14",
40
+ "@storybook/addon-docs": "^6.4.19",
41
+ "@storybook/react": "^6.4.19",
40
42
  "auto": "^10.16.8",
41
43
  "babel-loader": "^8.1.0",
42
44
  "chromatic": "^5.6.0",
@@ -46,11 +48,11 @@
46
48
  "rimraf": "^3.0.2"
47
49
  },
48
50
  "peerDependencies": {
49
- "@storybook/addons": "^6.1.14",
50
- "@storybook/api": "^6.1.14",
51
- "@storybook/components": "^6.1.14",
52
- "@storybook/core-events": "^6.1.14",
53
- "@storybook/theming": "^6.1.14",
51
+ "@storybook/addons": "^6.4.19",
52
+ "@storybook/api": "^6.4.19",
53
+ "@storybook/components": "^6.4.19",
54
+ "@storybook/core-events": "^6.4.19",
55
+ "@storybook/theming": "^6.4.19",
54
56
  "react": "^16.8.0 || ^17.0.0",
55
57
  "react-dom": "^16.8.0 || ^17.0.0"
56
58
  },
package/preset.js CHANGED
@@ -1 +1,9 @@
1
- module.exports = require("./dist/preset")
1
+ function managerEntries(entry = []) {
2
+ return [...entry, require.resolve("./dist/esm/preset/manager")]
3
+ }
4
+
5
+ function config(entry = []) {
6
+ return [...entry, require.resolve("./dist/esm/preset/preview")]
7
+ }
8
+
9
+ module.exports = { managerEntries, config };
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.config = config;
7
- exports.managerEntries = managerEntries;
8
-
9
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
-
11
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
-
13
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
-
15
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
16
-
17
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
18
-
19
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
-
21
- function config() {
22
- var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
23
- return [].concat(_toConsumableArray(entry), [require.resolve("./preview")]);
24
- }
25
-
26
- function managerEntries() {
27
- var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
28
- return [].concat(_toConsumableArray(entry), [require.resolve("./manager")]);
29
- }