UNPKG

22.5 kBJavaScriptView Raw
1"use strict";
2
3function _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
5require("core-js/modules/es.object.get-prototype-of.js");
6
7require("core-js/modules/es.reflect.construct.js");
8
9require("core-js/modules/es.symbol.js");
10
11require("core-js/modules/es.symbol.description.js");
12
13require("core-js/modules/es.symbol.iterator.js");
14
15require("core-js/modules/es.array.iterator.js");
16
17require("core-js/modules/es.string.iterator.js");
18
19require("core-js/modules/web.dom-collections.iterator.js");
20
21require("core-js/modules/es.array.from.js");
22
23require("core-js/modules/es.array.slice.js");
24
25require("core-js/modules/es.function.name.js");
26
27require("core-js/modules/es.regexp.exec.js");
28
29require("core-js/modules/es.weak-map.js");
30
31require("core-js/modules/es.object.get-own-property-descriptor.js");
32
33Object.defineProperty(exports, "__esModule", {
34 value: true
35});
36exports.ActiveTabs = void 0;
37exports.Consumer = ManagerConsumer;
38exports.combineParameters = exports.Provider = void 0;
39Object.defineProperty(exports, "isGroup", {
40 enumerable: true,
41 get: function get() {
42 return _stories.isGroup;
43 }
44});
45Object.defineProperty(exports, "isRoot", {
46 enumerable: true,
47 get: function get() {
48 return _stories.isRoot;
49 }
50});
51Object.defineProperty(exports, "isStory", {
52 enumerable: true,
53 get: function get() {
54 return _stories.isStory;
55 }
56});
57Object.defineProperty(exports, "merge", {
58 enumerable: true,
59 get: function get() {
60 return _merge.default;
61 }
62});
63exports.useAddonState = useAddonState;
64exports.useArgTypes = useArgTypes;
65exports.useArgs = useArgs;
66exports.useChannel = void 0;
67exports.useGlobalTypes = useGlobalTypes;
68exports.useGlobals = useGlobals;
69exports.useParameter = useParameter;
70exports.useSharedState = useSharedState;
71exports.useStoryPrepared = useStoryPrepared;
72exports.useStorybookApi = useStorybookApi;
73exports.useStorybookState = useStorybookState;
74
75require("core-js/modules/es.array.concat.js");
76
77require("core-js/modules/es.object.to-string.js");
78
79require("core-js/modules/web.dom-collections.for-each.js");
80
81require("core-js/modules/es.object.assign.js");
82
83require("core-js/modules/es.array.map.js");
84
85require("core-js/modules/es.array.filter.js");
86
87require("core-js/modules/es.object.entries.js");
88
89var _react = _interopRequireWildcard(require("react"));
90
91var _mergeWith = _interopRequireDefault(require("lodash/mergeWith"));
92
93var _coreEvents = require("@storybook/core-events");
94
95var _context = require("./context");
96
97var _store = _interopRequireDefault(require("./store"));
98
99var _initialState = _interopRequireDefault(require("./initial-state"));
100
101var _stories = require("./lib/stories");
102
103var provider = _interopRequireWildcard(require("./modules/provider"));
104
105var addons = _interopRequireWildcard(require("./modules/addons"));
106
107var channel = _interopRequireWildcard(require("./modules/channel"));
108
109var notifications = _interopRequireWildcard(require("./modules/notifications"));
110
111var settings = _interopRequireWildcard(require("./modules/settings"));
112
113var releaseNotes = _interopRequireWildcard(require("./modules/release-notes"));
114
115var stories = _interopRequireWildcard(require("./modules/stories"));
116
117var refs = _interopRequireWildcard(require("./modules/refs"));
118
119var layout = _interopRequireWildcard(require("./modules/layout"));
120
121var shortcuts = _interopRequireWildcard(require("./modules/shortcuts"));
122
123var url = _interopRequireWildcard(require("./modules/url"));
124
125var version = _interopRequireWildcard(require("./modules/versions"));
126
127var globals = _interopRequireWildcard(require("./modules/globals"));
128
129var _merge = _interopRequireDefault(require("./lib/merge"));
130
131function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
132
133function _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); }
134
135function _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; }
136
137function _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; }
138
139function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
140
141function _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."); }
142
143function _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; }
144
145function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
146
147function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
148
149function _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."); }
150
151function _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); }
152
153function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
154
155function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
156
157function _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; }
158
159function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
160
161function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
162
163function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
164
165function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
166
167function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
168
169function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
170
171function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
172
173function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
174
175function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
176
177function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
178
179var ActiveTabs = layout.ActiveTabs;
180exports.ActiveTabs = ActiveTabs;
181var ManagerContext = (0, _context.createContext)({
182 api: undefined,
183 state: (0, _initialState.default)({})
184});
185
186// This is duplicated from @storybook/client-api for the reasons mentioned in lib-addons/types.js
187var combineParameters = function combineParameters() {
188 for (var _len = arguments.length, parameterSets = new Array(_len), _key = 0; _key < _len; _key++) {
189 parameterSets[_key] = arguments[_key];
190 }
191
192 return _mergeWith.default.apply(void 0, [{}].concat(parameterSets, [function (objValue, srcValue) {
193 // Treat arrays as scalars:
194 if (Array.isArray(srcValue)) return srcValue;
195 return undefined;
196 }]));
197};
198
199exports.combineParameters = combineParameters;
200
201var ManagerProvider = /*#__PURE__*/function (_Component) {
202 _inherits(ManagerProvider, _Component);
203
204 var _super = _createSuper(ManagerProvider);
205
206 function ManagerProvider(props) {
207 var _this;
208
209 _classCallCheck(this, ManagerProvider);
210
211 _this = _super.call(this, props);
212 _this.api = {};
213 _this.modules = void 0;
214
215 _this.initModules = function () {
216 // Now every module has had a chance to set its API, call init on each module which gives it
217 // a chance to do things that call other modules' APIs.
218 _this.modules.forEach(function (_ref) {
219 var init = _ref.init;
220
221 if (init) {
222 init();
223 }
224 });
225 };
226
227 var location = props.location,
228 path = props.path,
229 refId = props.refId,
230 _props$viewMode = props.viewMode,
231 viewMode = _props$viewMode === void 0 ? props.docsMode ? 'docs' : 'story' : _props$viewMode,
232 singleStory = props.singleStory,
233 storyId = props.storyId,
234 docsMode = props.docsMode,
235 navigate = props.navigate;
236 var store = new _store.default({
237 getState: function getState() {
238 return _this.state;
239 },
240 setState: function setState(stateChange, callback) {
241 return _this.setState(stateChange, callback);
242 }
243 });
244 var routeData = {
245 location: location,
246 path: path,
247 viewMode: viewMode,
248 singleStory: singleStory,
249 storyId: storyId,
250 refId: refId
251 }; // Initialize the state to be the initial (persisted) state of the store.
252 // This gives the modules the chance to read the persisted state, apply their defaults
253 // and override if necessary
254
255 var docsModeState = {
256 layout: {
257 showToolbar: false,
258 showPanel: false
259 },
260 ui: {
261 docsMode: true
262 }
263 };
264 _this.state = store.getInitialState((0, _initialState.default)(Object.assign({}, routeData, docsMode ? docsModeState : null)));
265 var apiData = {
266 navigate: navigate,
267 store: store,
268 provider: props.provider
269 };
270 _this.modules = [provider, channel, addons, layout, notifications, settings, releaseNotes, shortcuts, stories, refs, globals, url, version].map(function (m) {
271 return m.init(Object.assign({}, routeData, apiData, {
272 state: _this.state,
273 fullAPI: _this.api
274 }));
275 }); // Create our initial state by combining the initial state of all modules, then overlaying any saved state
276
277 var state = _initialState.default.apply(void 0, [_this.state].concat(_toConsumableArray(_this.modules.map(function (m) {
278 return m.state;
279 })))); // Get our API by combining the APIs exported by each module
280
281
282 var api = Object.assign.apply(Object, [_this.api, {
283 navigate: navigate
284 }].concat(_toConsumableArray(_this.modules.map(function (m) {
285 return m.api;
286 }))));
287 _this.state = state;
288 _this.api = api;
289 return _this;
290 }
291
292 _createClass(ManagerProvider, [{
293 key: "shouldComponentUpdate",
294 value: function shouldComponentUpdate(nextProps, nextState) {
295 var prevState = this.state;
296 var prevProps = this.props;
297
298 if (prevState !== nextState) {
299 return true;
300 }
301
302 if (prevProps.path !== nextProps.path) {
303 return true;
304 }
305
306 return false;
307 }
308 }, {
309 key: "render",
310 value: function render() {
311 var children = this.props.children;
312 var value = {
313 state: this.state,
314 api: this.api
315 };
316 return /*#__PURE__*/_react.default.createElement(EffectOnMount, {
317 effect: this.initModules
318 }, /*#__PURE__*/_react.default.createElement(ManagerContext.Provider, {
319 value: value
320 }, /*#__PURE__*/_react.default.createElement(ManagerConsumer, null, children)));
321 }
322 }], [{
323 key: "getDerivedStateFromProps",
324 value: function getDerivedStateFromProps(props, state) {
325 if (state.path !== props.path) {
326 return Object.assign({}, state, {
327 location: props.location,
328 path: props.path,
329 refId: props.refId,
330 // if its a docsOnly page, even the 'story' view mode is considered 'docs'
331 viewMode: (props.docsMode && props.viewMode) === 'story' ? 'docs' : props.viewMode,
332 storyId: props.storyId
333 });
334 }
335
336 return null;
337 }
338 }]);
339
340 return ManagerProvider;
341}(_react.Component);
342
343exports.Provider = ManagerProvider;
344ManagerProvider.displayName = "ManagerProvider";
345ManagerProvider.displayName = 'Manager';
346
347// EffectOnMount exists to work around a bug in Reach Router where calling
348// navigate inside of componentDidMount (as could happen when we call init on any
349// of our modules) does not cause Reach Router's LocationProvider to update with
350// the correct path. Calling navigate inside on an effect does not have the
351// same problem. See https://github.com/reach/router/issues/404
352var EffectOnMount = function EffectOnMount(_ref2) {
353 var children = _ref2.children,
354 effect = _ref2.effect;
355
356 _react.default.useEffect(effect, []);
357
358 return children;
359};
360
361var defaultFilter = function defaultFilter(c) {
362 return c;
363};
364
365function ManagerConsumer(_ref3) {
366 var _ref3$filter = _ref3.filter,
367 filter = _ref3$filter === void 0 ? defaultFilter : _ref3$filter,
368 children = _ref3.children;
369 var c = (0, _react.useContext)(ManagerContext);
370 var renderer = (0, _react.useRef)(children);
371 var filterer = (0, _react.useRef)(filter);
372
373 if (typeof renderer.current !== 'function') {
374 return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, renderer.current);
375 }
376
377 var data = filterer.current(c);
378 var l = (0, _react.useMemo)(function () {
379 return _toConsumableArray(Object.entries(data).reduce(function (acc, keyval) {
380 return acc.concat(keyval);
381 }, []));
382 }, [c.state]);
383 return (0, _react.useMemo)(function () {
384 var Child = renderer.current;
385 return /*#__PURE__*/_react.default.createElement(Child, data);
386 }, l);
387}
388
389function useStorybookState() {
390 var _useContext = (0, _react.useContext)(ManagerContext),
391 state = _useContext.state;
392
393 return state;
394}
395
396function useStorybookApi() {
397 var _useContext2 = (0, _react.useContext)(ManagerContext),
398 api = _useContext2.api;
399
400 return api;
401}
402
403function orDefault(fromStore, defaultState) {
404 if (typeof fromStore === 'undefined') {
405 return defaultState;
406 }
407
408 return fromStore;
409}
410
411var useChannel = function useChannel(eventMap) {
412 var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
413 var api = useStorybookApi();
414 (0, _react.useEffect)(function () {
415 Object.entries(eventMap).forEach(function (_ref4) {
416 var _ref5 = _slicedToArray(_ref4, 2),
417 type = _ref5[0],
418 listener = _ref5[1];
419
420 return api.on(type, listener);
421 });
422 return function () {
423 Object.entries(eventMap).forEach(function (_ref6) {
424 var _ref7 = _slicedToArray(_ref6, 2),
425 type = _ref7[0],
426 listener = _ref7[1];
427
428 return api.off(type, listener);
429 });
430 };
431 }, deps);
432 return api.emit;
433};
434
435exports.useChannel = useChannel;
436
437function useStoryPrepared(storyId) {
438 var api = useStorybookApi();
439 return api.isPrepared(storyId);
440}
441
442function useParameter(parameterKey, defaultValue) {
443 var api = useStorybookApi();
444 var result = api.getCurrentParameter(parameterKey);
445 return orDefault(result, defaultValue);
446}
447
448// cache for taking care of HMR
449var addonStateCache = {}; // shared state
450
451function useSharedState(stateId, defaultState) {
452 var api = useStorybookApi();
453 var existingState = api.getAddonState(stateId);
454 var state = orDefault(existingState, addonStateCache[stateId] ? addonStateCache[stateId] : defaultState);
455
456 var setState = function setState(s, options) {
457 // set only after the stories are loaded
458 if (addonStateCache[stateId]) {
459 addonStateCache[stateId] = s;
460 }
461
462 api.setAddonState(stateId, s, options);
463 };
464
465 var allListeners = (0, _react.useMemo)(function () {
466 var _stateChangeHandlers, _stateInitializationH;
467
468 var stateChangeHandlers = (_stateChangeHandlers = {}, _defineProperty(_stateChangeHandlers, "".concat(_coreEvents.SHARED_STATE_CHANGED, "-client-").concat(stateId), function client(s) {
469 return setState(s);
470 }), _defineProperty(_stateChangeHandlers, "".concat(_coreEvents.SHARED_STATE_SET, "-client-").concat(stateId), function client(s) {
471 return setState(s);
472 }), _stateChangeHandlers);
473 var stateInitializationHandlers = (_stateInitializationH = {}, _defineProperty(_stateInitializationH, _coreEvents.SET_STORIES, function () {
474 var currentState = api.getAddonState(stateId);
475
476 if (currentState) {
477 addonStateCache[stateId] = currentState;
478 api.emit("".concat(_coreEvents.SHARED_STATE_SET, "-manager-").concat(stateId), currentState);
479 } else if (addonStateCache[stateId]) {
480 // this happens when HMR
481 setState(addonStateCache[stateId]);
482 api.emit("".concat(_coreEvents.SHARED_STATE_SET, "-manager-").concat(stateId), addonStateCache[stateId]);
483 } else if (defaultState !== undefined) {
484 // if not HMR, yet the defaults are from the manager
485 setState(defaultState); // initialize addonStateCache after first load, so its available for subsequent HMR
486
487 addonStateCache[stateId] = defaultState;
488 api.emit("".concat(_coreEvents.SHARED_STATE_SET, "-manager-").concat(stateId), defaultState);
489 }
490 }), _defineProperty(_stateInitializationH, _coreEvents.STORY_CHANGED, function () {
491 var currentState = api.getAddonState(stateId);
492
493 if (currentState !== undefined) {
494 api.emit("".concat(_coreEvents.SHARED_STATE_SET, "-manager-").concat(stateId), currentState);
495 }
496 }), _stateInitializationH);
497 return Object.assign({}, stateChangeHandlers, stateInitializationHandlers);
498 }, [stateId]);
499 var emit = useChannel(allListeners);
500 return [state, function (newStateOrMerger, options) {
501 setState(newStateOrMerger, options);
502 emit("".concat(_coreEvents.SHARED_STATE_CHANGED, "-manager-").concat(stateId), newStateOrMerger);
503 }];
504}
505
506function useAddonState(addonId, defaultState) {
507 return useSharedState(addonId, defaultState);
508}
509
510function useArgs() {
511 var _useStorybookApi = useStorybookApi(),
512 getCurrentStoryData = _useStorybookApi.getCurrentStoryData,
513 updateStoryArgs = _useStorybookApi.updateStoryArgs,
514 resetStoryArgs = _useStorybookApi.resetStoryArgs;
515
516 var data = getCurrentStoryData();
517 var args = (0, _stories.isStory)(data) ? data.args : {};
518 var updateArgs = (0, _react.useCallback)(function (newArgs) {
519 return updateStoryArgs(data, newArgs);
520 }, [data, updateStoryArgs]);
521 var resetArgs = (0, _react.useCallback)(function (argNames) {
522 return resetStoryArgs(data, argNames);
523 }, [data, resetStoryArgs]);
524 return [args, updateArgs, resetArgs];
525}
526
527function useGlobals() {
528 var api = useStorybookApi();
529 return [api.getGlobals(), api.updateGlobals];
530}
531
532function useGlobalTypes() {
533 return useStorybookApi().getGlobalTypes();
534}
535
536function useCurrentStory() {
537 var _useStorybookApi2 = useStorybookApi(),
538 getCurrentStoryData = _useStorybookApi2.getCurrentStoryData;
539
540 return getCurrentStoryData();
541}
542
543function useArgTypes() {
544 var _useCurrentStory;
545
546 return ((_useCurrentStory = useCurrentStory()) === null || _useCurrentStory === void 0 ? void 0 : _useCurrentStory.argTypes) || {};
547}
\No newline at end of file