storybook-addon-pseudo-states 1.1.0-canary.8.b81386e.0 → 1.2.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,40 @@
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
+ - Disable snapshotting for CustomElements stories ([@ghengeveld](https://github.com/ghengeveld))
15
+ - 1.1.0 ([@ghengeveld](https://github.com/ghengeveld))
16
+ - Simplify ([@ghengeveld](https://github.com/ghengeveld))
17
+ - Small tweak ([@ghengeveld](https://github.com/ghengeveld))
18
+ - Upgrade Storybook ([@ghengeveld](https://github.com/ghengeveld))
19
+ - Ignore .env file ([@ghengeveld](https://github.com/ghengeveld))
20
+
21
+ #### Authors: 2
22
+
23
+ - Gert Hengeveld ([@ghengeveld](https://github.com/ghengeveld))
24
+ - Jeroen Zwartepoorte ([@jpzwarte](https://github.com/jpzwarte))
25
+
26
+ ---
27
+
28
+ # v1.0.0 (Sat Feb 27 2021)
29
+
30
+ #### 🐛 Bug Fix
31
+
32
+ - Setup auto [#7](https://github.com/chromaui/storybook-addon-pseudo-states/pull/7) ([@ghengeveld](https://github.com/ghengeveld))
33
+
34
+ #### ⚠️ Pushed to `main`
35
+
36
+ - Ignore .env file ([@ghengeveld](https://github.com/ghengeveld))
37
+
38
+ #### Authors: 1
39
+
40
+ - 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,35 @@ _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
+ applyParameter(document.getElementById(viewMode === "docs" ? "story--".concat(id) : "root"));
118
+ shadowHosts.forEach(updateShadowHost);
119
+ }, 0);
120
+ return function () {
121
+ return clearTimeout(timeout);
122
+ };
123
+ }, [parameter, viewMode]);
111
124
  return StoryFn();
112
125
  };
113
126
 
@@ -123,96 +136,60 @@ var warnOnce = function warnOnce(message) {
123
136
 
124
137
 
125
138
  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();
139
+ var _shadowRoot$adoptedSt;
131
140
 
132
- var _iterator = _createForOfIteratorHelper(root.querySelectorAll("*")),
141
+ var styleSheets = shadowRoot ? shadowRoot.styleSheets : document.styleSheets;
142
+ if (shadowRoot !== null && shadowRoot !== void 0 && (_shadowRoot$adoptedSt = shadowRoot.adoptedStyleSheets) !== null && _shadowRoot$adoptedSt !== void 0 && _shadowRoot$adoptedSt.length) styleSheets = shadowRoot.adoptedStyleSheets;
143
+
144
+ var _iterator = _createForOfIteratorHelper(styleSheets),
133
145
  _step;
134
146
 
135
147
  try {
136
148
  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;
149
+ var sheet = _step.value;
143
150
 
144
- try {
145
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
146
- var className = _step3.value;
147
- if (className) classSelectors.add("\\.".concat(className.replace(/:/, "\\\\:")));
148
- }
149
- } catch (err) {
150
- _iterator3.e(err);
151
- } finally {
152
- _iterator3.f();
151
+ if (sheet._pseudoStatesRewritten) {
152
+ continue;
153
+ } else {
154
+ sheet._pseudoStatesRewritten = true;
153
155
  }
154
156
 
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
157
  try {
193
158
  var index = 0;
194
159
 
195
- var _iterator5 = _createForOfIteratorHelper(sheet.cssRules),
196
- _step5;
160
+ var _iterator2 = _createForOfIteratorHelper(sheet.cssRules),
161
+ _step2;
197
162
 
198
163
  try {
199
- var _loop = function _loop() {
200
- var _step5$value = _step5.value,
201
- cssText = _step5$value.cssText,
202
- selectorText = _step5$value.selectorText;
164
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
165
+ var _step2$value = _step2.value,
166
+ cssText = _step2$value.cssText,
167
+ selectorText = _step2$value.selectorText;
203
168
 
204
169
  if (matchOne.test(selectorText)) {
205
- if (!matchSelectors.some(function (matcher) {
206
- return matcher.test(selectorText);
207
- })) return "continue";
208
170
  var newRule = cssText.replace(selectorText, selectorText.split(", ").flatMap(function (selector) {
209
171
  if (selector.includes(".pseudo-")) return [];
210
172
  var states = [];
211
173
  var plainSelector = selector.replace(matchAll, function (_, state) {
212
- states.push(".pseudo-".concat(state));
174
+ states.push(state);
213
175
  return "";
214
176
  });
215
- var stateSelector = shadowRoot ? ":host(".concat(states.join(""), ") ").concat(plainSelector) : "".concat(states.join(""), " ").concat(plainSelector);
177
+ var stateSelector;
178
+
179
+ if (selector.startsWith(":host(")) {
180
+ stateSelector = states.reduce(function (acc, state) {
181
+ return acc.replaceAll(":".concat(state), ".pseudo-".concat(state));
182
+ }, selector);
183
+ } else if (shadowRoot) {
184
+ stateSelector = ":host(".concat(states.map(function (s) {
185
+ return ".pseudo-".concat(s);
186
+ }).join(""), ") ").concat(plainSelector);
187
+ } else {
188
+ stateSelector = "".concat(states.map(function (s) {
189
+ return ".pseudo-".concat(s);
190
+ }).join(""), " ").concat(plainSelector);
191
+ }
192
+
216
193
  return [selector, stateSelector];
217
194
  }).join(", "));
218
195
  sheet.deleteRule(index);
@@ -224,20 +201,13 @@ function rewriteStyleSheets(shadowRoot) {
224
201
 
225
202
  if (index > 1000) {
226
203
  warnOnce("Reached maximum of 1000 pseudo selectors per sheet, skipping the rest.");
227
- return "break";
204
+ break;
228
205
  }
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
206
  }
237
207
  } catch (err) {
238
- _iterator5.e(err);
208
+ _iterator2.e(err);
239
209
  } finally {
240
- _iterator5.f();
210
+ _iterator2.f();
241
211
  }
242
212
  } catch (e) {
243
213
  if (e.toString().includes("cssRules")) {
@@ -249,15 +219,20 @@ function rewriteStyleSheets(shadowRoot) {
249
219
  }
250
220
  }
251
221
  } catch (err) {
252
- _iterator2.e(err);
222
+ _iterator.e(err);
253
223
  } finally {
254
- _iterator2.f();
224
+ _iterator.f();
255
225
  }
256
226
  } // Reinitialize CSS enhancements every time the story changes
257
227
 
258
228
 
259
229
  _addons.addons.getChannel().on(_coreEvents.STORY_RENDERED, function () {
260
230
  return rewriteStyleSheets();
231
+ }); // Reinitialize CSS enhancements every time a docs page is rendered
232
+
233
+
234
+ _addons.addons.getChannel().on(_coreEvents.DOCS_RENDERED, function () {
235
+ return rewriteStyleSheets();
261
236
  }); // IE doesn't support shadow DOM
262
237
 
263
238
 
@@ -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,241 @@
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
+ applyParameter(document.getElementById(viewMode === "docs" ? "story--".concat(id) : "root"));
107
+ shadowHosts.forEach(updateShadowHost);
108
+ }, 0);
109
+ return function () {
110
+ return clearTimeout(timeout);
111
+ };
112
+ }, [parameter, viewMode]);
113
+ return StoryFn();
114
+ };
115
+ var warnings = new Set();
116
+
117
+ var warnOnce = function warnOnce(message) {
118
+ if (warnings.has(message)) return; // eslint-disable-next-line no-console
119
+
120
+ console.warn(message);
121
+ warnings.add(message);
122
+ }; // Rewrite CSS rules for pseudo-states on all stylesheets to add an alternative selector
123
+
124
+
125
+ function rewriteStyleSheets(shadowRoot) {
126
+ var _shadowRoot$adoptedSt;
127
+
128
+ var styleSheets = shadowRoot ? shadowRoot.styleSheets : document.styleSheets;
129
+ if (shadowRoot !== null && shadowRoot !== void 0 && (_shadowRoot$adoptedSt = shadowRoot.adoptedStyleSheets) !== null && _shadowRoot$adoptedSt !== void 0 && _shadowRoot$adoptedSt.length) styleSheets = shadowRoot.adoptedStyleSheets;
130
+
131
+ var _iterator = _createForOfIteratorHelper(styleSheets),
132
+ _step;
133
+
134
+ try {
135
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
136
+ var sheet = _step.value;
137
+
138
+ if (sheet._pseudoStatesRewritten) {
139
+ continue;
140
+ } else {
141
+ sheet._pseudoStatesRewritten = true;
142
+ }
143
+
144
+ try {
145
+ var index = 0;
146
+
147
+ var _iterator2 = _createForOfIteratorHelper(sheet.cssRules),
148
+ _step2;
149
+
150
+ try {
151
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
152
+ var _step2$value = _step2.value,
153
+ cssText = _step2$value.cssText,
154
+ selectorText = _step2$value.selectorText;
155
+
156
+ if (matchOne.test(selectorText)) {
157
+ var newRule = cssText.replace(selectorText, selectorText.split(", ").flatMap(function (selector) {
158
+ if (selector.includes(".pseudo-")) return [];
159
+ var states = [];
160
+ var plainSelector = selector.replace(matchAll, function (_, state) {
161
+ states.push(state);
162
+ return "";
163
+ });
164
+ var stateSelector;
165
+
166
+ if (selector.startsWith(":host(")) {
167
+ stateSelector = states.reduce(function (acc, state) {
168
+ return acc.replaceAll(":".concat(state), ".pseudo-".concat(state));
169
+ }, selector);
170
+ } else if (shadowRoot) {
171
+ stateSelector = ":host(".concat(states.map(function (s) {
172
+ return ".pseudo-".concat(s);
173
+ }).join(""), ") ").concat(plainSelector);
174
+ } else {
175
+ stateSelector = "".concat(states.map(function (s) {
176
+ return ".pseudo-".concat(s);
177
+ }).join(""), " ").concat(plainSelector);
178
+ }
179
+
180
+ return [selector, stateSelector];
181
+ }).join(", "));
182
+ sheet.deleteRule(index);
183
+ sheet.insertRule(newRule, index);
184
+ if (shadowRoot) shadowHosts.add(shadowRoot.host);
185
+ }
186
+
187
+ index++;
188
+
189
+ if (index > 1000) {
190
+ warnOnce("Reached maximum of 1000 pseudo selectors per sheet, skipping the rest.");
191
+ break;
192
+ }
193
+ }
194
+ } catch (err) {
195
+ _iterator2.e(err);
196
+ } finally {
197
+ _iterator2.f();
198
+ }
199
+ } catch (e) {
200
+ if (e.toString().includes("cssRules")) {
201
+ warnOnce("Can't access cssRules, likely due to CORS restrictions: ".concat(sheet.href));
202
+ } else {
203
+ // eslint-disable-next-line no-console
204
+ console.error(e, sheet.href);
205
+ }
206
+ }
207
+ }
208
+ } catch (err) {
209
+ _iterator.e(err);
210
+ } finally {
211
+ _iterator.f();
212
+ }
213
+ } // Reinitialize CSS enhancements every time the story changes
214
+
215
+
216
+ addons.getChannel().on(STORY_RENDERED, function () {
217
+ return rewriteStyleSheets();
218
+ }); // Reinitialize CSS enhancements every time a docs page is rendered
219
+
220
+ addons.getChannel().on(DOCS_RENDERED, function () {
221
+ return rewriteStyleSheets();
222
+ }); // IE doesn't support shadow DOM
223
+
224
+ if (Element.prototype.attachShadow) {
225
+ // Monkeypatch the attachShadow method so we can handle pseudo styles inside shadow DOM
226
+ Element.prototype._attachShadow = Element.prototype.attachShadow;
227
+
228
+ Element.prototype.attachShadow = function attachShadow(init) {
229
+ // Force "open" mode, so we can access the shadowRoot
230
+ var shadowRoot = this._attachShadow(_objectSpread(_objectSpread({}, init), {}, {
231
+ mode: "open"
232
+ })); // Wait for it to render and apply its styles before rewriting them
233
+
234
+
235
+ requestAnimationFrame(function () {
236
+ rewriteStyleSheets(shadowRoot);
237
+ updateShadowHost(shadowRoot.host);
238
+ });
239
+ return shadowRoot;
240
+ };
241
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storybook-addon-pseudo-states",
3
- "version": "1.1.0-canary.8.b81386e.0",
3
+ "version": "1.2.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
- }