Socket
Socket
Sign inDemoInstall

@storybook/api

Package Overview
Dependencies
Maintainers
10
Versions
1281
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@storybook/api - npm Package Compare versions

Comparing version 5.1.0-alpha.20 to 5.1.0-alpha.21

dist/tests/layout.test.js

29

dist/context.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createContext = void 0;
var _react = _interopRequireDefault(require("react"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createContext = function createContext(_ref) {
var api = _ref.api,
state = _ref.state;
return _react.default.createContext({
api: api,
state: state
});
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importDefault(require("react"));
exports.createContext = function (_a) {
var api = _a.api, state = _a.state;
return react_1.default.createContext({ api: api, state: state });
};
exports.createContext = createContext;
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useStorybookState = useStorybookState;
exports.Provider = exports.Consumer = void 0;
require("core-js/modules/es6.array.filter");
require("core-js/modules/es6.array.index-of");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es6.string.iterator");
require("core-js/modules/es6.array.from");
require("core-js/modules/es6.regexp.to-string");
require("core-js/modules/es6.date.to-string");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.is-array");
require("core-js/modules/es6.object.define-property");
require("core-js/modules/es6.object.create");
require("core-js/modules/es6.object.set-prototype-of");
require("core-js/modules/es6.array.for-each");
require("core-js/modules/es6.object.assign");
require("core-js/modules/es6.array.map");
var _react = _interopRequireWildcard(require("react"));
var _memoizerific = _interopRequireDefault(require("memoizerific"));
var _coreEvents = _interopRequireDefault(require("@storybook/core-events"));
var _initProviderApi = _interopRequireDefault(require("./init-provider-api"));
var _context = require("./context");
var _store = _interopRequireDefault(require("./store"));
var _initialState = _interopRequireDefault(require("./initial-state"));
var _addons = _interopRequireDefault(require("./modules/addons"));
var _channel = _interopRequireDefault(require("./modules/channel"));
var _notifications = _interopRequireDefault(require("./modules/notifications"));
var _stories = _interopRequireDefault(require("./modules/stories"));
var _layout = _interopRequireDefault(require("./modules/layout"));
var _shortcuts = _interopRequireDefault(require("./modules/shortcuts"));
var _url = _interopRequireDefault(require("./modules/url"));
var _versions = _interopRequireDefault(require("./modules/versions"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _typeof(obj) { 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); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _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); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var ManagerContext = (0, _context.createContext)({
api: undefined,
state: (0, _initialState.default)({})
});
var STORY_CHANGED = _coreEvents.default.STORY_CHANGED,
SET_STORIES = _coreEvents.default.SET_STORIES,
SELECT_STORY = _coreEvents.default.SELECT_STORY;
var ManagerProvider =
/*#__PURE__*/
function (_Component) {
_inherits(ManagerProvider, _Component);
function ManagerProvider(props) {
var _this;
_classCallCheck(this, ManagerProvider);
_this = _possibleConstructorReturn(this, _getPrototypeOf(ManagerProvider).call(this, props));
_this.api = void 0;
_this.modules = void 0;
var provider = props.provider,
location = props.location,
path = props.path,
viewMode = props.viewMode,
storyId = props.storyId,
navigate = props.navigate;
var store = new _store.default({
getState: function getState() {
return _this.state;
},
setState: function setState(stateChange, callback) {
return _this.setState(stateChange, callback);
}
}); // Initialize the state to be the initial (persisted) state of the store.
// This gives the modules the chance to read the persisted state, apply their defaults
// and override if necessary
_this.state = store.getInitialState((0, _initialState.default)({}));
var apiData = {
navigate: navigate,
store: store,
provider: provider,
location: location,
path: path,
viewMode: viewMode,
storyId: storyId
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
_this.modules = [_channel.default, _addons.default, _layout.default, _notifications.default, _shortcuts.default, _stories.default, _url.default, _versions.default].map(function (initModule) {
return initModule(apiData);
}); // Create our initial state by combining the initial state of all modules, then overlaying any saved state
var state = _initialState.default.apply(void 0, _toConsumableArray(_this.modules.map(function (m) {
return m.state;
}))); // Get our API by combining the APIs exported by each module
var combo = Object.assign.apply(Object, [{
navigate: navigate
}].concat(_toConsumableArray(_this.modules.map(function (m) {
return m.api;
}))));
var api = (0, _initProviderApi.default)({
provider: provider,
store: store,
api: combo
});
api.on(STORY_CHANGED, function (id) {
var options = api.getParameters(id, 'options');
if (options) {
api.setOptions(options);
}
});
api.on(SET_STORIES, function (data) {
api.setStories(data.stories);
});
api.on(SELECT_STORY, function (_ref) {
var kind = _ref.kind,
story = _ref.story,
rest = _objectWithoutProperties(_ref, ["kind", "story"]);
api.selectStory(kind, story, rest);
});
_this.state = state;
_this.api = api;
return _this;
}
_createClass(ManagerProvider, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
// Now every module has had a chance to set its API, call init on each module which gives it
// a chance to do things that call other modules' APIs.
this.modules.forEach(function (_ref2) {
var init = _ref2.init;
if (init) {
init({
api: _this2.api
});
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importStar(require("react"));
var memoizerific_1 = __importDefault(require("memoizerific"));
var core_events_1 = __importDefault(require("@storybook/core-events"));
var init_provider_api_1 = __importDefault(require("./init-provider-api"));
var context_1 = require("./context");
var store_1 = __importDefault(require("./store"));
var initial_state_1 = __importDefault(require("./initial-state"));
var addons_1 = __importDefault(require("./modules/addons"));
var channel_1 = __importDefault(require("./modules/channel"));
var notifications_1 = __importDefault(require("./modules/notifications"));
var stories_1 = __importDefault(require("./modules/stories"));
var layout_1 = __importDefault(require("./modules/layout"));
var shortcuts_1 = __importDefault(require("./modules/shortcuts"));
var url_1 = __importDefault(require("./modules/url"));
var versions_1 = __importDefault(require("./modules/versions"));
var ManagerContext = context_1.createContext({ api: undefined, state: initial_state_1.default({}) });
var STORY_CHANGED = core_events_1.default.STORY_CHANGED, SET_STORIES = core_events_1.default.SET_STORIES, SELECT_STORY = core_events_1.default.SELECT_STORY;
var ManagerProvider = /** @class */ (function (_super) {
__extends(ManagerProvider, _super);
function ManagerProvider(props) {
var _this = _super.call(this, props) || this;
var provider = props.provider, location = props.location, path = props.path, viewMode = props.viewMode, storyId = props.storyId, navigate = props.navigate;
var store = new store_1.default({
getState: function () { return _this.state; },
setState: function (stateChange, callback) { return _this.setState(stateChange, callback); },
});
// Initialize the state to be the initial (persisted) state of the store.
// This gives the modules the chance to read the persisted state, apply their defaults
// and override if necessary
_this.state = store.getInitialState(initial_state_1.default({}));
var apiData = {
navigate: navigate,
store: store,
provider: provider,
location: location,
path: path,
viewMode: viewMode,
storyId: storyId,
};
_this.modules = [
channel_1.default,
addons_1.default,
layout_1.default,
notifications_1.default,
shortcuts_1.default,
stories_1.default,
url_1.default,
versions_1.default,
].map(function (initModule) { return initModule(apiData); });
// Create our initial state by combining the initial state of all modules, then overlaying any saved state
var state = initial_state_1.default.apply(void 0, _this.modules.map(function (m) { return m.state; }));
// Get our API by combining the APIs exported by each module
var combo = Object.assign.apply(Object, [{ navigate: navigate }].concat(_this.modules.map(function (m) { return m.api; })));
var api = init_provider_api_1.default({ provider: provider, store: store, api: combo });
api.on(STORY_CHANGED, function (id) {
var options = api.getParameters(id, 'options');
if (options) {
api.setOptions(options);
}
});
api.on(SET_STORIES, function (data) {
api.setStories(data.stories);
});
api.on(SELECT_STORY, function (_a) {
var kind = _a.kind, story = _a.story, rest = __rest(_a, ["kind", "story"]);
api.selectStory(kind, story, rest);
});
_this.state = state;
_this.api = api;
return _this;
});
}
ManagerProvider.prototype.componentDidMount = function () {
var _this = this;
// Now every module has had a chance to set its API, call init on each module which gives it
// a chance to do things that call other modules' APIs.
this.modules.forEach(function (_a) {
var init = _a.init;
if (init) {
init({ api: _this.api });
}
});
};
ManagerProvider.prototype.shouldComponentUpdate = function (nextProps, nextState) {
var prevState = this.state;
var prevProps = this.props;
if (prevState !== nextState) {
return true;
}
if (prevProps.path !== nextProps.path) {
return true;
}
return false;
};
ManagerProvider.prototype.render = function () {
var children = this.props.children;
var value = {
state: this.state,
api: this.api,
};
return (react_1.default.createElement(ManagerContext.Provider, { value: value }, typeof children === 'function' ? children(value) : children));
};
ManagerProvider.displayName = 'Manager';
ManagerProvider.getDerivedStateFromProps = function (props, state) {
if (state.path !== props.path) {
return __assign({}, state, { location: props.location, path: props.path, viewMode: props.viewMode, storyId: props.storyId });
}
return null;
};
return ManagerProvider;
}(react_1.Component));
}, {
key: "shouldComponentUpdate",
value: function shouldComponentUpdate(nextProps, nextState) {
var prevState = this.state;
var prevProps = this.props;
if (prevState !== nextState) {
return true;
}
if (prevProps.path !== nextProps.path) {
return true;
}
return false;
}
}, {
key: "render",
value: function render() {
var children = this.props.children;
var value = {
state: this.state,
api: this.api
};
return _react.default.createElement(ManagerContext.Provider, {
value: value
}, typeof children === 'function' ? children(value) : children);
}
}]);
return ManagerProvider;
}(_react.Component);
exports.Provider = ManagerProvider;
var ManagerConsumer = /** @class */ (function (_super) {
__extends(ManagerConsumer, _super);
function ManagerConsumer(props) {
var _this = _super.call(this, props) || this;
_this.dataMemory = props.filter ? memoizerific_1.default(10)(props.filter) : null;
return _this;
ManagerProvider.displayName = "ManagerProvider";
ManagerProvider.displayName = 'Manager';
ManagerProvider.getDerivedStateFromProps = function (props, state) {
if (state.path !== props.path) {
return Object.assign({}, state, {
location: props.location,
path: props.path,
viewMode: props.viewMode,
storyId: props.storyId
});
}
return null;
};
var ManagerConsumer =
/*#__PURE__*/
function (_Component2) {
_inherits(ManagerConsumer, _Component2);
function ManagerConsumer(props) {
var _this3;
_classCallCheck(this, ManagerConsumer);
_this3 = _possibleConstructorReturn(this, _getPrototypeOf(ManagerConsumer).call(this, props));
_this3.dataMemory = void 0;
_this3.dataMemory = props.filter ? (0, _memoizerific.default)(10)(props.filter) : null;
return _this3;
}
_createClass(ManagerConsumer, [{
key: "render",
value: function render() {
var _this4 = this;
var children = this.props.children;
return _react.default.createElement(ManagerContext.Consumer, null, function (d) {
var data = _this4.dataMemory ? _this4.dataMemory(d) : d;
return children(data);
});
}
ManagerConsumer.prototype.render = function () {
var _this = this;
var children = this.props.children;
return (react_1.default.createElement(ManagerContext.Consumer, null, function (d) {
var data = _this.dataMemory ? _this.dataMemory(d) : d;
return children(data);
}));
};
return ManagerConsumer;
}(react_1.Component));
}]);
return ManagerConsumer;
}(_react.Component);
exports.Consumer = ManagerConsumer;
ManagerConsumer.displayName = "ManagerConsumer";
function useStorybookState() {
var state = react_1.useContext(ManagerContext).state;
return state;
}
exports.useStorybookState = useStorybookState;
var _useContext = (0, _react.useContext)(ManagerContext),
state = _useContext.state;
return state;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (function (_a) {
var provider = _a.provider, api = _a.api;
provider.handleAPI(api);
if (provider.renderPreview) {
api.renderPreview = provider.renderPreview;
}
return api;
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _default = function _default(_ref) {
var provider = _ref.provider,
api = _ref.api;
provider.handleAPI(api);
if (provider.renderPreview) {
api.renderPreview = provider.renderPreview;
}
return api;
};
exports.default = _default;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var merge_1 = __importDefault(require("./lib/merge"));
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es6.array.reduce");
var _merge = _interopRequireDefault(require("./lib/merge"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Returns the initialState of the app
var main = function () {
var additions = [];
for (var _i = 0; _i < arguments.length; _i++) {
additions[_i] = arguments[_i];
}
return additions.reduce(function (acc, item) { return merge_1.default(acc, item); }, {});
var main = function main() {
for (var _len = arguments.length, additions = new Array(_len), _key = 0; _key < _len; _key++) {
additions[_key] = arguments[_key];
}
return additions.reduce(function (acc, item) {
return (0, _merge.default)(acc, item);
}, {});
};
exports.default = main;
var _default = main;
exports.default = _default;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es6.array.find");
require("core-js/modules/es6.array.for-each");
require("core-js/modules/es6.array.is-array");
var _lodash = _interopRequireDefault(require("lodash.mergewith"));
var _lodash2 = _interopRequireDefault(require("lodash.isequal"));
var _clientLogger = require("@storybook/client-logger");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = function _default(a, b) {
return (0, _lodash.default)({}, a, b, function (objValue, srcValue) {
if (Array.isArray(srcValue) && Array.isArray(objValue)) {
srcValue.forEach(function (s) {
var existing = objValue.find(function (o) {
return o === s || (0, _lodash2.default)(o, s);
});
if (!existing) {
objValue.push(s);
}
});
return objValue;
}
if (Array.isArray(objValue)) {
_clientLogger.logger.log(['the types mismatch, picking', objValue]);
return objValue;
}
return undefined;
});
};
Object.defineProperty(exports, "__esModule", { value: true });
var lodash_mergewith_1 = __importDefault(require("lodash.mergewith"));
var lodash_isequal_1 = __importDefault(require("lodash.isequal"));
var client_logger_1 = require("@storybook/client-logger");
exports.default = (function (a, b) {
return lodash_mergewith_1.default({}, a, b, function (objValue, srcValue) {
if (Array.isArray(srcValue) && Array.isArray(objValue)) {
srcValue.forEach(function (s) {
var existing = objValue.find(function (o) { return o === s || lodash_isequal_1.default(o, s); });
if (!existing) {
objValue.push(s);
}
});
return objValue;
}
if (Array.isArray(objValue)) {
client_logger_1.logger.log(['the types mismatch, picking', objValue]);
return objValue;
}
return undefined;
});
});
exports.default = _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var global_1 = require("global");
exports.isMacLike = function () {
return global_1.navigator && global_1.navigator.platform ? !!global_1.navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) : false;
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.shortcutToHumanString = exports.keyToSymbol = exports.eventMatchesShortcut = exports.shortcutMatchesShortcut = exports.eventToShortcut = exports.isShortcutTaken = exports.optionOrAltSymbol = exports.controlOrMetaKey = exports.controlOrMetaSymbol = exports.isMacLike = void 0;
require("core-js/modules/es6.array.map");
require("core-js/modules/es6.array.find");
require("core-js/modules/es7.array.includes");
require("core-js/modules/es6.string.includes");
require("core-js/modules/es6.regexp.match");
var _global = require("global");
var isMacLike = function isMacLike() {
return _global.navigator && _global.navigator.platform ? !!_global.navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) : false;
};
exports.controlOrMetaSymbol = function () { return (exports.isMacLike() ? '⌘' : 'ctrl'); };
exports.controlOrMetaKey = function () { return (exports.isMacLike() ? 'meta' : 'control'); };
exports.optionOrAltSymbol = function () { return (exports.isMacLike() ? '⌥' : 'alt'); };
exports.isShortcutTaken = function (arr1, arr2) {
return JSON.stringify(arr1) === JSON.stringify(arr2);
exports.isMacLike = isMacLike;
var controlOrMetaSymbol = function controlOrMetaSymbol() {
return isMacLike() ? '⌘' : 'ctrl';
};
// Map a keyboard event to a keyboard shortcut
// NOTE: if we change the fields on the event that we need, we'll need to update the serialization in core/preview/start.js
exports.eventToShortcut = function (e) {
// Meta key only doesn't map to a shortcut
if (['Meta', 'Alt', 'Control', 'Shift'].includes(e.key)) {
return null;
}
var keys = [];
if (e.altKey) {
keys.push('alt');
}
if (e.ctrlKey) {
keys.push('control');
}
if (e.metaKey) {
keys.push('meta');
}
if (e.shiftKey) {
keys.push('shift');
}
if (e.key && e.key.length === 1 && e.key !== ' ') {
keys.push(e.key.toUpperCase());
}
if (e.key === ' ') {
keys.push('space');
}
if (e.key === 'Escape') {
keys.push('escape');
}
if (e.key === 'ArrowRight') {
keys.push('ArrowRight');
}
if (e.key === 'ArrowDown') {
keys.push('ArrowDown');
}
if (e.key === 'ArrowUp') {
keys.push('ArrowUp');
}
if (e.key === 'ArrowLeft') {
keys.push('ArrowLeft');
}
return keys.length > 0 ? keys : null;
exports.controlOrMetaSymbol = controlOrMetaSymbol;
var controlOrMetaKey = function controlOrMetaKey() {
return isMacLike() ? 'meta' : 'control';
};
exports.shortcutMatchesShortcut = function (inputShortcut, shortcut) {
return (inputShortcut &&
inputShortcut.length === shortcut.length &&
!inputShortcut.find(function (key, i) { return key !== shortcut[i]; }));
exports.controlOrMetaKey = controlOrMetaKey;
var optionOrAltSymbol = function optionOrAltSymbol() {
return isMacLike() ? '⌥' : 'alt';
};
// Should this keyboard event trigger this keyboard shortcut?
exports.eventMatchesShortcut = function (e, shortcut) {
return exports.shortcutMatchesShortcut(exports.eventToShortcut(e), shortcut);
exports.optionOrAltSymbol = optionOrAltSymbol;
var isShortcutTaken = function isShortcutTaken(arr1, arr2) {
return JSON.stringify(arr1) === JSON.stringify(arr2);
}; // Map a keyboard event to a keyboard shortcut
// NOTE: if we change the fields on the event that we need, we'll need to update the serialization in core/preview/start.js
exports.isShortcutTaken = isShortcutTaken;
var eventToShortcut = function eventToShortcut(e) {
// Meta key only doesn't map to a shortcut
if (['Meta', 'Alt', 'Control', 'Shift'].includes(e.key)) {
return null;
}
var keys = [];
if (e.altKey) {
keys.push('alt');
}
if (e.ctrlKey) {
keys.push('control');
}
if (e.metaKey) {
keys.push('meta');
}
if (e.shiftKey) {
keys.push('shift');
}
if (e.key && e.key.length === 1 && e.key !== ' ') {
keys.push(e.key.toUpperCase());
}
if (e.key === ' ') {
keys.push('space');
}
if (e.key === 'Escape') {
keys.push('escape');
}
if (e.key === 'ArrowRight') {
keys.push('ArrowRight');
}
if (e.key === 'ArrowDown') {
keys.push('ArrowDown');
}
if (e.key === 'ArrowUp') {
keys.push('ArrowUp');
}
if (e.key === 'ArrowLeft') {
keys.push('ArrowLeft');
}
return keys.length > 0 ? keys : null;
};
exports.keyToSymbol = function (key) {
if (key === 'alt') {
return exports.optionOrAltSymbol();
}
if (key === 'control') {
return '⌃';
}
if (key === 'meta') {
return '⌘';
}
if (key === 'shift') {
return '⇧​';
}
if (key === 'Enter' || key === 'Backspace' || key === 'Esc') {
return '';
}
if (key === 'escape') {
return '';
}
if (key === ' ') {
return 'SPACE';
}
if (key === 'ArrowUp') {
return '↑';
}
if (key === 'ArrowDown') {
return '↓';
}
if (key === 'ArrowLeft') {
return '←';
}
if (key === 'ArrowRight') {
return '→';
}
return key.toUpperCase();
exports.eventToShortcut = eventToShortcut;
var shortcutMatchesShortcut = function shortcutMatchesShortcut(inputShortcut, shortcut) {
return inputShortcut && inputShortcut.length === shortcut.length && !inputShortcut.find(function (key, i) {
return key !== shortcut[i];
});
}; // Should this keyboard event trigger this keyboard shortcut?
exports.shortcutMatchesShortcut = shortcutMatchesShortcut;
var eventMatchesShortcut = function eventMatchesShortcut(e, shortcut) {
return shortcutMatchesShortcut(eventToShortcut(e), shortcut);
};
// Display the shortcut as a human readable string
exports.shortcutToHumanString = function (shortcut) {
return shortcut.map(exports.keyToSymbol).join(' ');
exports.eventMatchesShortcut = eventMatchesShortcut;
var keyToSymbol = function keyToSymbol(key) {
if (key === 'alt') {
return optionOrAltSymbol();
}
if (key === 'control') {
return '⌃';
}
if (key === 'meta') {
return '⌘';
}
if (key === 'shift') {
return '⇧​';
}
if (key === 'Enter' || key === 'Backspace' || key === 'Esc') {
return '';
}
if (key === 'escape') {
return '';
}
if (key === ' ') {
return 'SPACE';
}
if (key === 'ArrowUp') {
return '↑';
}
if (key === 'ArrowDown') {
return '↓';
}
if (key === 'ArrowLeft') {
return '←';
}
if (key === 'ArrowRight') {
return '→';
}
return key.toUpperCase();
}; // Display the shortcut as a human readable string
exports.keyToSymbol = keyToSymbol;
var shortcutToHumanString = function shortcutToHumanString(shortcut) {
return shortcut.map(keyToSymbol).join(' ');
};
exports.shortcutToHumanString = shortcutToHumanString;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var telejson_1 = require("telejson");
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _telejson = require("telejson");
// setting up the store, overriding set and get to use telejson
exports.default = (function (_) {
_.fn('set', function (key, data) {
return _.set(this._area, this._in(key), telejson_1.stringify(data, { maxDepth: 50 }));
});
_.fn('get', function (key, alt) {
var value = _.get(this._area, this._in(key));
return value !== null ? telejson_1.parse(value) : alt || value;
});
});
var _default = function _default(_) {
_.fn('set', function (key, data) {
return _.set(this._area, this._in(key), (0, _telejson.stringify)(data, {
maxDepth: 50
}));
});
_.fn('get', function (key, alt) {
var value = _.get(this._area, this._in(key));
return value !== null ? (0, _telejson.parse)(value) : alt || value;
});
};
exports.default = _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ensurePanel = ensurePanel;
exports.default = exports.types = void 0;
require("core-js/modules/es6.array.index-of");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es6.object.keys");
var types;
exports.types = types;
(function (types) {
types["TAB"] = "tab";
types["PANEL"] = "panel";
types["TOOL"] = "tool";
types["PREVIEW"] = "preview";
types["NOTES_ELEMENT"] = "notes-element";
})(types = exports.types || (exports.types = {}));
types["TAB"] = "tab";
types["PANEL"] = "panel";
types["TOOL"] = "tool";
types["PREVIEW"] = "preview";
types["NOTES_ELEMENT"] = "notes-element";
})(types || (exports.types = types = {}));
function ensurePanel(panels, selectedPanel, currentPanel) {
var keys = Object.keys(panels);
if (keys.indexOf(selectedPanel) >= 0) {
return selectedPanel;
var keys = Object.keys(panels);
if (keys.indexOf(selectedPanel) >= 0) {
return selectedPanel;
}
if (keys.length) {
return keys[0];
}
return currentPanel;
}
var _default = function _default(_ref) {
var provider = _ref.provider,
store = _ref.store;
var api = {
getElements: function getElements(type) {
return provider.getElements(type);
},
getPanels: function getPanels() {
return api.getElements(types.PANEL);
},
getSelectedPanel: function getSelectedPanel() {
var _store$getState = store.getState(),
selectedPanel = _store$getState.selectedPanel;
return ensurePanel(api.getPanels(), selectedPanel, selectedPanel);
},
setSelectedPanel: function setSelectedPanel(panelName) {
store.setState({
selectedPanel: panelName
}, {
persistence: 'session'
});
}
if (keys.length) {
return keys[0];
};
return {
api: api,
state: {
selectedPanel: ensurePanel(api.getPanels(), store.getState().selectedPanel)
}
return currentPanel;
}
exports.ensurePanel = ensurePanel;
exports.default = (function (_a) {
var provider = _a.provider, store = _a.store;
var api = {
getElements: function (type) { return provider.getElements(type); },
getPanels: function () { return api.getElements(types.PANEL); },
getSelectedPanel: function () {
var selectedPanel = store.getState().selectedPanel;
return ensurePanel(api.getPanels(), selectedPanel, selectedPanel);
},
setSelectedPanel: function (panelName) {
store.setState({ selectedPanel: panelName }, { persistence: 'session' });
},
};
return {
api: api,
state: {
selectedPanel: ensurePanel(api.getPanels(), store.getState().selectedPanel),
},
};
});
};
};
exports.default = _default;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utilDeprecate = _interopRequireDefault(require("util-deprecate"));
var _coreEvents = require("@storybook/core-events");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = function _default(_ref) {
var provider = _ref.provider;
var api = {
getChannel: function getChannel() {
return provider.channel;
},
on: function on(type, cb) {
var peer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
if (peer) {
provider.channel.addPeerListener(type, cb);
} else {
provider.channel.addListener(type, cb);
}
return function () {
return provider.channel.removeListener(type, cb);
};
},
off: function off(type, cb) {
return provider.channel.removeListener(type, cb);
},
emit: function emit(type, event) {
return provider.channel.emit(type, event);
},
once: function once(type, event) {
return provider.channel.once(type, event);
},
onStory: (0, _utilDeprecate.default)(function (cb) {
return api.on(_coreEvents.STORY_CHANGED, cb);
}, 'onStory(...) has been replaced with on(STORY_CHANGED, ...)')
};
return {
api: api
};
};
Object.defineProperty(exports, "__esModule", { value: true });
var util_deprecate_1 = __importDefault(require("util-deprecate"));
var core_events_1 = require("@storybook/core-events");
exports.default = (function (_a) {
var provider = _a.provider;
var api = {
getChannel: function () { return provider.channel; },
on: function (type, cb, peer) {
if (peer === void 0) { peer = true; }
if (peer) {
provider.channel.addPeerListener(type, cb);
}
else {
provider.channel.addListener(type, cb);
}
return function () { return provider.channel.removeListener(type, cb); };
},
off: function (type, cb) { return provider.channel.removeListener(type, cb); },
emit: function (type, event) { return provider.channel.emit(type, event); },
once: function (type, event) { return provider.channel.once(type, event); },
onStory: util_deprecate_1.default(function (cb) { return api.on(core_events_1.STORY_CHANGED, cb); }, 'onStory(...) has been replaced with on(STORY_CHANGED, ...)'),
};
return { api: api };
});
exports.default = _default;
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var global_1 = require("global");
var lodash_pick_1 = __importDefault(require("lodash.pick"));
var util_deprecate_1 = __importDefault(require("util-deprecate"));
var fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
var theming_1 = require("@storybook/theming");
var merge_1 = __importDefault(require("../lib/merge"));
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
exports.focusableUIElements = void 0;
require("core-js/modules/es6.object.assign");
require("core-js/modules/es6.array.find");
require("core-js/modules/es6.array.for-each");
require("core-js/modules/es6.function.name");
require("core-js/modules/es7.object.values");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es6.object.keys");
var _global = require("global");
var _lodash = _interopRequireDefault(require("lodash.pick"));
var _utilDeprecate = _interopRequireDefault(require("util-deprecate"));
var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
var _theming = require("@storybook/theming");
var _merge = _interopRequireDefault(require("../lib/merge"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var deprecatedThemeOptions = {
name: 'theme.brandTitle',
url: 'theme.brandUrl',
name: 'theme.brandTitle',
url: 'theme.brandUrl'
};
var deprecatedLayoutOptions = {
goFullScreen: 'isFullscreen',
showStoriesPanel: 'showNav',
showAddonPanel: 'showPanel',
addonPanelInRight: 'panelPosition',
goFullScreen: 'isFullscreen',
showStoriesPanel: 'showNav',
showAddonPanel: 'showPanel',
addonPanelInRight: 'panelPosition'
};
var deprecationMessage = function (optionsMap, prefix) {
if (prefix === void 0) { prefix = ''; }
return "The options { " + Object.keys(optionsMap).join(', ') + " } are deprecated -- use " + (prefix ? prefix + "'s" : '') + " { " + Object.values(optionsMap).join(', ') + " } instead.";
var deprecationMessage = function deprecationMessage(optionsMap) {
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
return "The options { ".concat(Object.keys(optionsMap).join(', '), " } are deprecated -- use ").concat(prefix ? "".concat(prefix, "'s") : '', " { ").concat(Object.values(optionsMap).join(', '), " } instead.");
};
var applyDeprecatedThemeOptions = util_deprecate_1.default(function (_a) {
var name = _a.name, url = _a.url;
return ({
brandTitle: name,
brandUrl: url,
brandImage: null,
});
var applyDeprecatedThemeOptions = (0, _utilDeprecate.default)(function (_ref) {
var name = _ref.name,
url = _ref.url;
return {
brandTitle: name,
brandUrl: url,
brandImage: null
};
}, deprecationMessage(deprecatedThemeOptions));
var applyDeprecatedLayoutOptions = util_deprecate_1.default(function (options) {
var layoutUpdate = {};
['goFullScreen', 'showStoriesPanel', 'showAddonPanel'].forEach(function (option) {
var v = options[option];
if (typeof v !== 'undefined') {
var key = deprecatedLayoutOptions[option];
layoutUpdate[key] = v;
}
});
if (options.addonPanelInRight) {
layoutUpdate.panelPosition = 'right';
var applyDeprecatedLayoutOptions = (0, _utilDeprecate.default)(function (options) {
var layoutUpdate = {};
['goFullScreen', 'showStoriesPanel', 'showAddonPanel'].forEach(function (option) {
var v = options[option];
if (typeof v !== 'undefined') {
var _key = deprecatedLayoutOptions[option];
layoutUpdate[_key] = v;
}
return layoutUpdate;
});
if (options.addonPanelInRight) {
layoutUpdate.panelPosition = 'right';
}
return layoutUpdate;
}, deprecationMessage(deprecatedLayoutOptions));
var checkDeprecatedThemeOptions = function (options) {
if (Object.values(deprecatedThemeOptions).find(function (v) { return !!v; })) {
return applyDeprecatedThemeOptions(options);
}
return {};
var checkDeprecatedThemeOptions = function checkDeprecatedThemeOptions(options) {
if (Object.values(deprecatedThemeOptions).find(function (v) {
return !!v;
})) {
return applyDeprecatedThemeOptions(options);
}
return {};
};
var checkDeprecatedLayoutOptions = function (options) {
if (Object.values(deprecatedLayoutOptions).find(function (v) { return typeof v !== 'undefined'; })) {
return applyDeprecatedLayoutOptions(options);
}
return {};
var checkDeprecatedLayoutOptions = function checkDeprecatedLayoutOptions(options) {
if (Object.values(deprecatedLayoutOptions).find(function (v) {
return typeof v !== 'undefined';
})) {
return applyDeprecatedLayoutOptions(options);
}
return {};
};
var initial = {
ui: {
enableShortcuts: true,
sortStoriesByKind: false,
sidebarAnimations: true,
},
layout: {
isToolshown: true,
isFullscreen: false,
showPanel: true,
showNav: true,
panelPosition: 'bottom',
},
selectedPanel: undefined,
theme: theming_1.themes.light,
ui: {
enableShortcuts: true,
sortStoriesByKind: false,
sidebarAnimations: true
},
layout: {
isToolshown: true,
isFullscreen: false,
showPanel: true,
showNav: true,
panelPosition: 'bottom'
},
selectedPanel: undefined,
theme: _theming.themes.light
};
exports.focusableUIElements = {
storySearchField: 'storybook-explorer-searchfield',
storyListMenu: 'storybook-explorer-menu',
storyPanelRoot: 'storybook-panel-root',
var focusableUIElements = {
storySearchField: 'storybook-explorer-searchfield',
storyListMenu: 'storybook-explorer-menu',
storyPanelRoot: 'storybook-panel-root'
};
exports.focusableUIElements = focusableUIElements;
var hasSetOptions = false;
function default_1(_a) {
var store = _a.store;
var api = {
toggleFullscreen: function (toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.isFullscreen;
return {
layout: __assign({}, state.layout, { isFullscreen: value }),
};
});
},
togglePanel: function (toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showPanel;
return {
layout: __assign({}, state.layout, { showPanel: value }),
};
});
},
togglePanelPosition: function (position) {
if (typeof position !== 'undefined') {
return store.setState(function (state) { return ({
layout: __assign({}, state.layout, { panelPosition: position }),
}); });
}
return store.setState(function (state) { return ({
layout: __assign({}, state.layout, { panelPosition: state.layout.panelPosition === 'right' ? 'bottom' : 'right' }),
}); });
},
toggleNav: function (toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showNav;
return {
layout: __assign({}, state.layout, { showNav: value }),
};
});
},
toggleToolbar: function (toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.isToolshown;
return {
layout: __assign({}, state.layout, { isToolshown: value }),
};
});
},
focusOnUIElement: function (elementId) {
if (!elementId) {
return;
}
var element = global_1.document.getElementById(elementId);
if (element) {
element.focus();
}
},
setOptions: function (options) {
// The very first time the user sets their options, we don't consider what is in the store.
// At this point in time, what is in the store is what we *persisted*. We did that in order
// to avoid a FOUC (e.g. initial rendering the wrong theme while we waited for the stories to load)
// However, we don't want to have a memory about these things, otherwise we see bugs like the
// user setting a name for their storybook, persisting it, then never being able to unset it
// without clearing localstorage. See https://github.com/storybooks/storybook/issues/5857
var _a = hasSetOptions ? store.getState() : initial, layout = _a.layout, ui = _a.ui, selectedPanel = _a.selectedPanel, theme = _a.theme;
if (options) {
var updatedLayout = __assign({}, layout, lodash_pick_1.default(options, Object.keys(layout)), checkDeprecatedLayoutOptions(options));
var updatedUi = __assign({}, ui, lodash_pick_1.default(options, Object.keys(ui)));
var updatedTheme = __assign({}, theme, options.theme, checkDeprecatedThemeOptions(options));
var modification = {};
if (!fast_deep_equal_1.default(ui, updatedUi)) {
modification.ui = updatedUi;
}
if (!fast_deep_equal_1.default(layout, updatedLayout)) {
modification.layout = updatedLayout;
}
if (!fast_deep_equal_1.default(theme, updatedTheme)) {
modification.theme = updatedTheme;
}
if (options.selectedPanel && !fast_deep_equal_1.default(selectedPanel, options.selectedPanel)) {
modification.selectedPanel = options.selectedPanel;
}
if (Object.keys(modification).length) {
store.setState(modification, { persistence: 'permanent' });
}
hasSetOptions = true;
}
},
};
var persisted = lodash_pick_1.default(store.getState(), 'layout', 'ui', 'selectedPanel', 'theme');
return { api: api, state: merge_1.default(initial, persisted) };
}
exports.default = default_1;
function _default(_ref2) {
var store = _ref2.store;
var api = {
toggleFullscreen: function toggleFullscreen(toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.isFullscreen;
return {
layout: Object.assign({}, state.layout, {
isFullscreen: value
})
};
});
},
togglePanel: function togglePanel(toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showPanel;
return {
layout: Object.assign({}, state.layout, {
showPanel: value
})
};
});
},
togglePanelPosition: function togglePanelPosition(position) {
if (typeof position !== 'undefined') {
return store.setState(function (state) {
return {
layout: Object.assign({}, state.layout, {
panelPosition: position
})
};
});
}
return store.setState(function (state) {
return {
layout: Object.assign({}, state.layout, {
panelPosition: state.layout.panelPosition === 'right' ? 'bottom' : 'right'
})
};
});
},
toggleNav: function toggleNav(toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showNav;
return {
layout: Object.assign({}, state.layout, {
showNav: value
})
};
});
},
toggleToolbar: function toggleToolbar(toggled) {
return store.setState(function (state) {
var value = typeof toggled !== 'undefined' ? toggled : !state.layout.isToolshown;
return {
layout: Object.assign({}, state.layout, {
isToolshown: value
})
};
});
},
focusOnUIElement: function focusOnUIElement(elementId) {
if (!elementId) {
return;
}
var element = _global.document.getElementById(elementId);
if (element) {
element.focus();
}
},
setOptions: function setOptions(options) {
// The very first time the user sets their options, we don't consider what is in the store.
// At this point in time, what is in the store is what we *persisted*. We did that in order
// to avoid a FOUC (e.g. initial rendering the wrong theme while we waited for the stories to load)
// However, we don't want to have a memory about these things, otherwise we see bugs like the
// user setting a name for their storybook, persisting it, then never being able to unset it
// without clearing localstorage. See https://github.com/storybooks/storybook/issues/5857
var _ref3 = hasSetOptions ? store.getState() : initial,
layout = _ref3.layout,
ui = _ref3.ui,
selectedPanel = _ref3.selectedPanel,
theme = _ref3.theme;
if (options) {
var updatedLayout = Object.assign({}, layout, (0, _lodash.default)(options, Object.keys(layout)), checkDeprecatedLayoutOptions(options));
var updatedUi = Object.assign({}, ui, (0, _lodash.default)(options, Object.keys(ui)));
var updatedTheme = Object.assign({}, theme, options.theme, checkDeprecatedThemeOptions(options));
var modification = {};
if (!(0, _fastDeepEqual.default)(ui, updatedUi)) {
modification.ui = updatedUi;
}
if (!(0, _fastDeepEqual.default)(layout, updatedLayout)) {
modification.layout = updatedLayout;
}
if (!(0, _fastDeepEqual.default)(theme, updatedTheme)) {
modification.theme = updatedTheme;
}
if (options.selectedPanel && !(0, _fastDeepEqual.default)(selectedPanel, options.selectedPanel)) {
modification.selectedPanel = options.selectedPanel;
}
if (Object.keys(modification).length) {
store.setState(modification, {
persistence: 'permanent'
});
}
hasSetOptions = true;
}
}
};
var persisted = (0, _lodash.default)(store.getState(), 'layout', 'ui', 'selectedPanel', 'theme');
return {
api: api,
state: (0, _merge.default)(initial, persisted)
};
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function default_1(_a) {
var store = _a.store;
var api = {
addNotification: function (notification) {
// Get rid of it if already exists
api.clearNotification(notification.id);
var notifications = store.getState().notifications;
store.setState({ notifications: notifications.concat([notification]) });
},
clearNotification: function (id) {
var notifications = store.getState().notifications;
store.setState({ notifications: notifications.filter(function (n) { return n.id !== id; }) });
var notification = notifications.find(function (n) { return n.id === id; });
if (notification && notification.onClear) {
notification.onClear();
}
},
};
var state = { notifications: [] };
return { api: api, state: state };
}
exports.default = default_1;
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
require("core-js/modules/es6.string.iterator");
require("core-js/modules/es6.array.from");
require("core-js/modules/es6.regexp.to-string");
require("core-js/modules/es6.date.to-string");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.is-array");
require("core-js/modules/es6.array.find");
require("core-js/modules/es6.array.filter");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function _default(_ref) {
var store = _ref.store;
var api = {
addNotification: function addNotification(notification) {
// Get rid of it if already exists
api.clearNotification(notification.id);
var _store$getState = store.getState(),
notifications = _store$getState.notifications;
store.setState({
notifications: [].concat(_toConsumableArray(notifications), [notification])
});
},
clearNotification: function clearNotification(id) {
var _store$getState2 = store.getState(),
notifications = _store$getState2.notifications;
store.setState({
notifications: notifications.filter(function (n) {
return n.id !== id;
})
});
var notification = notifications.find(function (n) {
return n.id === id;
});
if (notification && notification.onClear) {
notification.onClear();
}
}
};
var state = {
notifications: []
};
return {
api: api,
state: state
};
}
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.keys = keys;
exports.default = initShortcuts;
exports.defaultShortcuts = exports.controlOrMetaKey = exports.isMacLike = void 0;
require("core-js/modules/es6.object.define-property");
require("core-js/modules/es6.promise");
require("core-js/modules/es6.array.reduce");
require("core-js/modules/es6.array.find");
require("core-js/modules/es6.object.assign");
require("regenerator-runtime/runtime");
require("core-js/modules/es6.object.freeze");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es6.regexp.match");
var _global = require("global");
var _coreEvents = require("@storybook/core-events");
var _shortcut = require("../lib/shortcut");
var _layout = require("./layout");
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; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var isMacLike = function isMacLike() {
return _global.navigator && _global.navigator.platform ? !!_global.navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) : false;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
exports.isMacLike = isMacLike;
var controlOrMetaKey = function controlOrMetaKey() {
return isMacLike() ? 'meta' : 'control';
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var global_1 = require("global");
var core_events_1 = require("@storybook/core-events");
var shortcut_1 = require("../lib/shortcut");
var layout_1 = require("./layout");
exports.isMacLike = function () {
return global_1.navigator && global_1.navigator.platform ? !!global_1.navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) : false;
};
exports.controlOrMetaKey = function () { return (exports.isMacLike() ? 'meta' : 'control'); };
exports.controlOrMetaKey = controlOrMetaKey;
function keys(o) {
return Object.keys(o);
return Object.keys(o);
}
exports.keys = keys;
exports.defaultShortcuts = Object.freeze({
fullScreen: ['F'],
togglePanel: ['A'],
panelPosition: ['D'],
toggleNav: ['S'],
toolbar: ['T'],
search: ['/'],
focusNav: ['1'],
focusIframe: ['2'],
focusPanel: ['3'],
prevComponent: ['alt', 'ArrowUp'],
nextComponent: ['alt', 'ArrowDown'],
prevStory: ['alt', 'ArrowLeft'],
nextStory: ['alt', 'ArrowRight'],
shortcutsPage: [exports.controlOrMetaKey(), 'shift', ','],
aboutPage: [','],
escape: ['escape'],
var defaultShortcuts = Object.freeze({
fullScreen: ['F'],
togglePanel: ['A'],
panelPosition: ['D'],
toggleNav: ['S'],
toolbar: ['T'],
search: ['/'],
focusNav: ['1'],
focusIframe: ['2'],
focusPanel: ['3'],
prevComponent: ['alt', 'ArrowUp'],
nextComponent: ['alt', 'ArrowDown'],
prevStory: ['alt', 'ArrowLeft'],
nextStory: ['alt', 'ArrowRight'],
shortcutsPage: [controlOrMetaKey(), 'shift', ','],
aboutPage: [','],
escape: ['escape'] // This one is not customizable
});
function initShortcuts(_a) {
var store = _a.store;
var api = {
// Getting and setting shortcuts
getShortcutKeys: function () {
return store.getState().shortcuts;
},
setShortcuts: function (shortcuts) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, store.setState({ shortcuts: shortcuts }, { persistence: 'permanent' })];
case 1:
_a.sent();
return [2 /*return*/, shortcuts];
}
exports.defaultShortcuts = defaultShortcuts;
function initShortcuts(_ref) {
var store = _ref.store;
var api = {
// Getting and setting shortcuts
getShortcutKeys: function getShortcutKeys() {
return store.getState().shortcuts;
},
setShortcuts: function () {
var _setShortcuts = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(shortcuts) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return store.setState({
shortcuts: shortcuts
}, {
persistence: 'permanent'
});
});
},
restoreAllDefaultShortcuts: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, api.setShortcuts(exports.defaultShortcuts)];
});
});
},
setShortcut: function (action, value) {
return __awaiter(this, void 0, void 0, function () {
var _a, shortcuts;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
shortcuts = api.getShortcutKeys();
return [4 /*yield*/, api.setShortcuts(__assign({}, shortcuts, (_a = {}, _a[action] = value, _a)))];
case 1:
_b.sent();
return [2 /*return*/, value];
}
});
});
},
restoreDefaultShortcut: function (action) {
return __awaiter(this, void 0, void 0, function () {
var defaultShortcut;
return __generator(this, function (_a) {
defaultShortcut = exports.defaultShortcuts[action];
return [2 /*return*/, api.setShortcut(action, defaultShortcut)];
});
});
},
// Listening to shortcut events
handleKeydownEvent: function (fullApi, event) {
var shortcut = shortcut_1.eventToShortcut(event);
var shortcuts = api.getShortcutKeys();
var actions = keys(shortcuts);
var matchedFeature = actions.find(function (feature) {
return shortcut_1.shortcutMatchesShortcut(shortcut, shortcuts[feature]);
});
if (matchedFeature) {
api.handleShortcutFeature(fullApi, matchedFeature);
case 2:
return _context.abrupt("return", shortcuts);
case 3:
case "end":
return _context.stop();
}
},
handleShortcutFeature: function (fullApi, feature) {
var _a = store.getState().layout, isFullscreen = _a.isFullscreen, showNav = _a.showNav, showPanel = _a.showPanel;
switch (feature) {
case 'escape': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
else if (!showNav) {
fullApi.toggleNav();
}
global_1.document.activeElement.blur();
break;
}
case 'focusNav': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showNav) {
fullApi.toggleNav();
}
fullApi.focusOnUIElement(layout_1.focusableUIElements.storyListMenu);
break;
}
case 'search': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showNav) {
fullApi.toggleNav();
}
setTimeout(function () {
fullApi.focusOnUIElement(layout_1.focusableUIElements.storySearchField);
}, 0);
break;
}
case 'focusIframe': {
var element = global_1.document.getElementById('storybook-preview-iframe');
if (element) {
try {
// should be like a channel message and all that, but yolo for now
element.contentWindow.focus();
}
catch (e) {
//
}
}
break;
}
case 'focusPanel': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showPanel) {
fullApi.togglePanel();
}
fullApi.focusOnUIElement(layout_1.focusableUIElements.storyPanelRoot);
break;
}
case 'nextStory': {
fullApi.jumpToStory(1);
break;
}
case 'prevStory': {
fullApi.jumpToStory(-1);
break;
}
case 'nextComponent': {
fullApi.jumpToComponent(1);
break;
}
case 'prevComponent': {
fullApi.jumpToComponent(-1);
break;
}
case 'fullScreen': {
fullApi.toggleFullscreen();
break;
}
case 'togglePanel': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
fullApi.togglePanel();
break;
}
case 'toggleNav': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
fullApi.toggleNav();
break;
}
case 'toolbar': {
fullApi.toggleToolbar();
break;
}
case 'panelPosition': {
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showPanel) {
fullApi.togglePanel();
}
fullApi.togglePanelPosition();
break;
}
case 'aboutPage': {
fullApi.navigate('/settings/about');
break;
}
case 'shortcutsPage': {
fullApi.navigate('/settings/shortcuts');
break;
}
default:
break;
}
}, _callee);
}));
function setShortcuts(_x) {
return _setShortcuts.apply(this, arguments);
}
return setShortcuts;
}(),
restoreAllDefaultShortcuts: function () {
var _restoreAllDefaultShortcuts = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2() {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", api.setShortcuts(defaultShortcuts));
case 1:
case "end":
return _context2.stop();
}
},
};
var _b = store.getState().shortcuts, persistedShortcuts = _b === void 0 ? exports.defaultShortcuts : _b;
var state = {
// Any saved shortcuts that are still in our set of defaults
shortcuts: keys(exports.defaultShortcuts).reduce(function (acc, key) {
var _a;
return (__assign({}, acc, (_a = {}, _a[key] = persistedShortcuts[key] || exports.defaultShortcuts[key], _a)));
}, exports.defaultShortcuts),
};
var init = function (_a) {
var fullApi = _a.api;
function focusInInput(event) {
return (/input|textarea/i.test(event.target.tagName) ||
event.target.getAttribute('contenteditable') !== null);
}
// Listen for keydown events in the manager
global_1.document.addEventListener('keydown', function (event) {
if (!focusInInput(event)) {
fullApi.handleKeydownEvent(fullApi, event);
}
}, _callee2);
}));
function restoreAllDefaultShortcuts() {
return _restoreAllDefaultShortcuts.apply(this, arguments);
}
return restoreAllDefaultShortcuts;
}(),
setShortcut: function () {
var _setShortcut = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee3(action, value) {
var shortcuts;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
shortcuts = api.getShortcutKeys();
_context3.next = 3;
return api.setShortcuts(Object.assign({}, shortcuts, _defineProperty({}, action, value)));
case 3:
return _context3.abrupt("return", value);
case 4:
case "end":
return _context3.stop();
}
});
// Also listen to keydown events sent over the channel
fullApi.on(core_events_1.PREVIEW_KEYDOWN, function (data) {
fullApi.handleKeydownEvent(fullApi, data.event);
});
};
var result = { api: api, state: state, init: init };
return result;
}
exports.default = initShortcuts;
}
}, _callee3);
}));
function setShortcut(_x2, _x3) {
return _setShortcut.apply(this, arguments);
}
return setShortcut;
}(),
restoreDefaultShortcut: function () {
var _restoreDefaultShortcut = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee4(action) {
var defaultShortcut;
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
defaultShortcut = defaultShortcuts[action];
return _context4.abrupt("return", api.setShortcut(action, defaultShortcut));
case 2:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
function restoreDefaultShortcut(_x4) {
return _restoreDefaultShortcut.apply(this, arguments);
}
return restoreDefaultShortcut;
}(),
// Listening to shortcut events
handleKeydownEvent: function handleKeydownEvent(fullApi, event) {
var shortcut = (0, _shortcut.eventToShortcut)(event);
var shortcuts = api.getShortcutKeys();
var actions = keys(shortcuts);
var matchedFeature = actions.find(function (feature) {
return (0, _shortcut.shortcutMatchesShortcut)(shortcut, shortcuts[feature]);
});
if (matchedFeature) {
api.handleShortcutFeature(fullApi, matchedFeature);
}
},
handleShortcutFeature: function handleShortcutFeature(fullApi, feature) {
var _store$getState = store.getState(),
_store$getState$layou = _store$getState.layout,
isFullscreen = _store$getState$layou.isFullscreen,
showNav = _store$getState$layou.showNav,
showPanel = _store$getState$layou.showPanel;
switch (feature) {
case 'escape':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
} else if (!showNav) {
fullApi.toggleNav();
}
_global.document.activeElement.blur();
break;
}
case 'focusNav':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showNav) {
fullApi.toggleNav();
}
fullApi.focusOnUIElement(_layout.focusableUIElements.storyListMenu);
break;
}
case 'search':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showNav) {
fullApi.toggleNav();
}
setTimeout(function () {
fullApi.focusOnUIElement(_layout.focusableUIElements.storySearchField);
}, 0);
break;
}
case 'focusIframe':
{
var element = _global.document.getElementById('storybook-preview-iframe');
if (element) {
try {
// should be like a channel message and all that, but yolo for now
element.contentWindow.focus();
} catch (e) {//
}
}
break;
}
case 'focusPanel':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showPanel) {
fullApi.togglePanel();
}
fullApi.focusOnUIElement(_layout.focusableUIElements.storyPanelRoot);
break;
}
case 'nextStory':
{
fullApi.jumpToStory(1);
break;
}
case 'prevStory':
{
fullApi.jumpToStory(-1);
break;
}
case 'nextComponent':
{
fullApi.jumpToComponent(1);
break;
}
case 'prevComponent':
{
fullApi.jumpToComponent(-1);
break;
}
case 'fullScreen':
{
fullApi.toggleFullscreen();
break;
}
case 'togglePanel':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
fullApi.togglePanel();
break;
}
case 'toggleNav':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
fullApi.toggleNav();
break;
}
case 'toolbar':
{
fullApi.toggleToolbar();
break;
}
case 'panelPosition':
{
if (isFullscreen) {
fullApi.toggleFullscreen();
}
if (!showPanel) {
fullApi.togglePanel();
}
fullApi.togglePanelPosition();
break;
}
case 'aboutPage':
{
fullApi.navigate('/settings/about');
break;
}
case 'shortcutsPage':
{
fullApi.navigate('/settings/shortcuts');
break;
}
default:
break;
}
}
};
var _store$getState2 = store.getState(),
_store$getState2$shor = _store$getState2.shortcuts,
persistedShortcuts = _store$getState2$shor === void 0 ? defaultShortcuts : _store$getState2$shor;
var state = {
// Any saved shortcuts that are still in our set of defaults
shortcuts: keys(defaultShortcuts).reduce(function (acc, key) {
return Object.assign({}, acc, _defineProperty({}, key, persistedShortcuts[key] || defaultShortcuts[key]));
}, defaultShortcuts)
};
var init = function init(_ref2) {
var fullApi = _ref2.api;
function focusInInput(event) {
return /input|textarea/i.test(event.target.tagName) || event.target.getAttribute('contenteditable') !== null;
} // Listen for keydown events in the manager
_global.document.addEventListener('keydown', function (event) {
if (!focusInInput(event)) {
fullApi.handleKeydownEvent(fullApi, event);
}
}); // Also listen to keydown events sent over the channel
fullApi.on(_coreEvents.PREVIEW_KEYDOWN, function (data) {
fullApi.handleKeydownEvent(fullApi, data.event);
});
};
var result = {
api: api,
state: state,
init: init
};
return result;
}
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es6.string.iterator");
require("core-js/modules/es6.array.from");
require("core-js/modules/es6.regexp.to-string");
require("core-js/modules/es6.date.to-string");
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/es6.array.find");
require("core-js/modules/es6.array.for-each");
require("core-js/modules/es6.object.assign");
require("core-js/modules/es6.function.name");
require("core-js/modules/es6.array.map");
require("core-js/modules/es7.object.values");
require("core-js/modules/es6.regexp.replace");
require("core-js/modules/es6.regexp.split");
require("core-js/modules/es7.array.includes");
require("core-js/modules/es6.string.includes");
require("core-js/modules/es6.array.find-index");
require("core-js/modules/es7.object.entries");
require("core-js/modules/es6.array.reduce");
require("core-js/modules/es6.array.index-of");
require("core-js/modules/es6.array.is-array");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es6.array.filter");
var _utils = require("@storybook/router/dist/utils");
var _merge = _interopRequireDefault(require("../lib/merge"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { 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; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
var initStoriesApi = function initStoriesApi(_ref) {
var store = _ref.store,
navigate = _ref.navigate,
initialStoryId = _ref.storyId,
initialViewMode = _ref.viewMode;
var isStory = function isStory(obj) {
var story = obj;
return !!(story && story.parameters);
};
var getData = function getData(storyId) {
var _store$getState = store.getState(),
storiesHash = _store$getState.storiesHash;
return storiesHash[storyId];
};
var getCurrentStoryData = function getCurrentStoryData() {
var _store$getState2 = store.getState(),
storyId = _store$getState2.storyId;
return getData(storyId);
};
var getParameters = function getParameters(storyId, parameterName) {
var data = getData(storyId);
if (isStory(data)) {
var _ref2 = data,
_parameters = _ref2.parameters;
return parameterName ? _parameters[parameterName] : _parameters;
}
return null;
};
var jumpToStory = function jumpToStory(direction) {
var _store$getState3 = store.getState(),
storiesHash = _store$getState3.storiesHash,
viewMode = _store$getState3.viewMode,
storyId = _store$getState3.storyId; // cannot navigate when there's no current selection
if (!storyId || !storiesHash[storyId]) {
return;
}
var lookupList = Object.keys(storiesHash).filter(function (k) {
return !(storiesHash[k].children || Array.isArray(storiesHash[k]));
});
var index = lookupList.indexOf(storyId); // cannot navigate beyond fist or last
if (index === lookupList.length - 1 && direction > 0) {
return;
}
if (index === 0 && direction < 0) {
return;
}
var result = lookupList[index + direction];
if (viewMode && result) {
navigate("/".concat(viewMode, "/").concat(result));
}
};
var jumpToComponent = function jumpToComponent(direction) {
var state = store.getState();
var storiesHash = state.storiesHash,
viewMode = state.viewMode,
storyId = state.storyId; // cannot navigate when there's no current selection
if (!storyId || !storiesHash[storyId]) {
return;
}
var lookupList = Object.entries(storiesHash).reduce(function (acc, i) {
var value = i[1];
if (value.isComponent) {
acc.push(_toConsumableArray(i[1].children));
}
return acc;
}, []);
var index = lookupList.findIndex(function (i) {
return i.includes(storyId);
}); // cannot navigate beyond fist or last
if (index === lookupList.length - 1 && direction > 0) {
return;
}
if (index === 0 && direction < 0) {
return;
}
var result = lookupList[index + direction][0];
navigate("/".concat(viewMode || 'story', "/").concat(result));
};
var splitPath = function splitPath(kind, _ref3) {
var rootSeparator = _ref3.rootSeparator,
groupSeparator = _ref3.groupSeparator;
var _kind$split = kind.split(rootSeparator, 2),
_kind$split2 = _slicedToArray(_kind$split, 2),
root = _kind$split2[0],
remainder = _kind$split2[1];
var groups = (remainder || kind).split(groupSeparator).filter(function (i) {
return !!i;
}); // when there's no remainder, it means the root wasn't found/split
return {
root: remainder ? root : null,
groups: groups
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("@storybook/router/dist/utils");
var merge_1 = __importDefault(require("../lib/merge"));
var initStoriesApi = function (_a) {
var store = _a.store, navigate = _a.navigate, initialStoryId = _a.storyId, initialViewMode = _a.viewMode;
var isStory = function (obj) {
var story = obj;
return !!(story && story.parameters);
};
var toKey = function toKey(input) {
return input.replace(/[^a-z0-9]+([a-z0-9])/gi, function () {
for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
params[_key] = arguments[_key];
}
return params[1].toUpperCase();
});
};
var toGroup = function toGroup(name) {
return {
name: name,
id: toKey(name)
};
var getData = function (storyId) {
var storiesHash = store.getState().storiesHash;
return storiesHash[storyId];
};
var getCurrentStoryData = function () {
var storyId = store.getState().storyId;
return getData(storyId);
};
var getParameters = function (storyId, parameterName) {
var data = getData(storyId);
if (isStory(data)) {
var parameters = data.parameters;
return parameterName ? parameters[parameterName] : parameters;
}
return null;
};
var jumpToStory = function (direction) {
var _a = store.getState(), storiesHash = _a.storiesHash, viewMode = _a.viewMode, storyId = _a.storyId;
// cannot navigate when there's no current selection
if (!storyId || !storiesHash[storyId]) {
return;
}
var lookupList = Object.keys(storiesHash).filter(function (k) { return !(storiesHash[k].children || Array.isArray(storiesHash[k])); });
var index = lookupList.indexOf(storyId);
// cannot navigate beyond fist or last
if (index === lookupList.length - 1 && direction > 0) {
return;
}
if (index === 0 && direction < 0) {
return;
}
var result = lookupList[index + direction];
if (viewMode && result) {
navigate("/" + viewMode + "/" + result);
}
};
var jumpToComponent = function (direction) {
var state = store.getState();
var storiesHash = state.storiesHash, viewMode = state.viewMode, storyId = state.storyId;
// cannot navigate when there's no current selection
if (!storyId || !storiesHash[storyId]) {
return;
}
var lookupList = Object.entries(storiesHash).reduce(function (acc, i) {
var value = i[1];
if (value.isComponent) {
acc.push(i[1].children.slice());
}
return acc;
}, []);
var index = lookupList.findIndex(function (i) { return i.includes(storyId); });
// cannot navigate beyond fist or last
if (index === lookupList.length - 1 && direction > 0) {
return;
}
if (index === 0 && direction < 0) {
return;
}
var result = lookupList[index + direction][0];
navigate("/" + (viewMode || 'story') + "/" + result);
};
var splitPath = function (kind, _a) {
var rootSeparator = _a.rootSeparator, groupSeparator = _a.groupSeparator;
var _b = kind.split(rootSeparator, 2), root = _b[0], remainder = _b[1];
var groups = (remainder || kind).split(groupSeparator).filter(function (i) { return !!i; });
// when there's no remainder, it means the root wasn't found/split
return {
root: remainder ? root : null,
groups: groups,
};
};
var toKey = function (input) {
return input.replace(/[^a-z0-9]+([a-z0-9])/gi, function () {
var params = [];
for (var _i = 0; _i < arguments.length; _i++) {
params[_i] = arguments[_i];
}
return params[1].toUpperCase();
};
var setStories = function setStories(input) {
var hash = {};
var storiesHashOutOfOrder = Object.values(input).reduce(function (acc, item) {
var kind = item.kind,
parameters = item.parameters; // FIXME: figure out why parameters is missing when used with react-native-server
var _ref4 = parameters && parameters.options || {
hierarchyRootSeparator: '/',
hierarchySeparator: '/'
},
rootSeparator = _ref4.hierarchyRootSeparator,
groupSeparator = _ref4.hierarchySeparator;
var _splitPath = splitPath(kind, {
rootSeparator: rootSeparator,
groupSeparator: groupSeparator
}),
root = _splitPath.root,
groups = _splitPath.groups;
var rootAndGroups = [].concat(root || []).concat(groups).map(toGroup) // Map a bunch of extra fields onto the groups, collecting the path as we go (thus the reduce)
.reduce(function (soFar, group, index, original) {
var name = group.name;
var parent = index > 0 && soFar[index - 1].id;
var id = (0, _utils.sanitize)(parent ? "".concat(parent, "-").concat(name) : name);
var result = Object.assign({}, group, {
id: id,
parent: parent,
depth: index,
children: [],
isComponent: index === original.length - 1,
isLeaf: false,
isRoot: !!root && index === 0
});
};
var toGroup = function (name) { return ({
name: name,
id: toKey(name),
}); };
var setStories = function (input) {
var hash = {};
var storiesHashOutOfOrder = Object.values(input).reduce(function (acc, item) {
var kind = item.kind, parameters = item.parameters;
// FIXME: figure out why parameters is missing when used with react-native-server
var _a = (parameters && parameters.options) || {
hierarchyRootSeparator: '/',
hierarchySeparator: '/',
}, rootSeparator = _a.hierarchyRootSeparator, groupSeparator = _a.hierarchySeparator;
var _b = splitPath(kind, { rootSeparator: rootSeparator, groupSeparator: groupSeparator }), root = _b.root, groups = _b.groups;
var rootAndGroups = []
.concat(root || [])
.concat(groups)
.map(toGroup)
// Map a bunch of extra fields onto the groups, collecting the path as we go (thus the reduce)
.reduce(function (soFar, group, index, original) {
var name = group.name;
var parent = index > 0 && soFar[index - 1].id;
var id = utils_1.sanitize(parent ? parent + "-" + name : name);
var result = __assign({}, group, { id: id,
parent: parent, depth: index, children: [], isComponent: index === original.length - 1, isLeaf: false, isRoot: !!root && index === 0 });
return soFar.concat([result]);
}, []);
var paths = rootAndGroups.map(function (g) { return g.id; }).concat([item.id]);
// Ok, now let's add everything to the store
rootAndGroups.forEach(function (group, index) {
var child = paths[index + 1];
var id = group.id;
acc[id] = merge_1.default(acc[id] || {}, __assign({}, group, (child && { children: [child] })));
});
var story = __assign({}, item, { parent: rootAndGroups[rootAndGroups.length - 1].id, isLeaf: true });
acc[item.id] = story;
return acc;
}, hash);
// When adding a group, also add all of its children, depth first
function addItem(acc, item) {
if (!acc[item.id]) {
// If we were already inserted as part of a group, that's great.
acc[item.id] = item;
var children = item.children;
if (children) {
children.forEach(function (id) { return addItem(acc, storiesHashOutOfOrder[id]); });
}
}
return acc;
return soFar.concat([result]);
}, []);
var paths = [].concat(_toConsumableArray(rootAndGroups.map(function (g) {
return g.id;
})), [item.id]); // Ok, now let's add everything to the store
rootAndGroups.forEach(function (group, index) {
var child = paths[index + 1];
var id = group.id;
acc[id] = (0, _merge.default)(acc[id] || {}, Object.assign({}, group, child && {
children: [child]
}));
});
var story = Object.assign({}, item, {
parent: rootAndGroups[rootAndGroups.length - 1].id,
isLeaf: true
});
acc[item.id] = story;
return acc;
}, hash); // When adding a group, also add all of its children, depth first
function addItem(acc, item) {
if (!acc[item.id]) {
// If we were already inserted as part of a group, that's great.
acc[item.id] = item;
var _children = item.children;
if (_children) {
_children.forEach(function (id) {
return addItem(acc, storiesHashOutOfOrder[id]);
});
}
// Now create storiesHash by reordering the above by group
var storiesHash = Object.values(storiesHashOutOfOrder).reduce(addItem, {});
var _a = store.getState(), storyId = _a.storyId, viewMode = _a.viewMode;
if (!storyId || !storiesHash[storyId]) {
// when there's no storyId or the storyId item doesn't exist
// we pick the first leaf and navigate
var firstLeaf = Object.values(storiesHash).find(function (s) { return !s.children; });
if (viewMode && firstLeaf) {
navigate("/" + viewMode + "/" + firstLeaf.id);
}
}
store.setState({
storiesHash: storiesHash,
storiesConfigured: true,
});
};
var selectStory = function (kindOrId, story) {
var _a = store.getState(), _b = _a.viewMode, viewMode = _b === void 0 ? 'story' : _b, storyId = _a.storyId, storiesHash = _a.storiesHash;
if (!story) {
var s = storiesHash[utils_1.sanitize(kindOrId)];
// eslint-disable-next-line no-nested-ternary
var id = s ? (s.children ? s.children[0] : s.id) : kindOrId;
navigate("/" + viewMode + "/" + id);
}
else if (!kindOrId) {
// This is a slugified version of the kind, but that's OK, our toId function is idempotent
var kind = storyId.split('--', 2)[0];
selectStory(utils_1.toId(kind, story));
}
else {
selectStory(utils_1.toId(kindOrId, story));
}
};
return {
api: {
storyId: utils_1.toId,
selectStory: selectStory,
getCurrentStoryData: getCurrentStoryData,
setStories: setStories,
jumpToComponent: jumpToComponent,
jumpToStory: jumpToStory,
getData: getData,
getParameters: getParameters,
},
state: {
storiesHash: {},
storyId: initialStoryId,
viewMode: initialViewMode,
storiesConfigured: false,
},
};
}
return acc;
} // Now create storiesHash by reordering the above by group
var storiesHash = Object.values(storiesHashOutOfOrder).reduce(addItem, {});
var _store$getState4 = store.getState(),
storyId = _store$getState4.storyId,
viewMode = _store$getState4.viewMode;
if (!storyId || !storiesHash[storyId]) {
// when there's no storyId or the storyId item doesn't exist
// we pick the first leaf and navigate
var firstLeaf = Object.values(storiesHash).find(function (s) {
return !s.children;
});
if (viewMode && firstLeaf) {
navigate("/".concat(viewMode, "/").concat(firstLeaf.id));
}
}
store.setState({
storiesHash: storiesHash,
storiesConfigured: true
});
};
var selectStory = function selectStory(kindOrId, story) {
var _store$getState5 = store.getState(),
_store$getState5$view = _store$getState5.viewMode,
viewMode = _store$getState5$view === void 0 ? 'story' : _store$getState5$view,
storyId = _store$getState5.storyId,
storiesHash = _store$getState5.storiesHash;
if (!story) {
var s = storiesHash[(0, _utils.sanitize)(kindOrId)]; // eslint-disable-next-line no-nested-ternary
var _id = s ? s.children ? s.children[0] : s.id : kindOrId;
navigate("/".concat(viewMode, "/").concat(_id));
} else if (!kindOrId) {
// This is a slugified version of the kind, but that's OK, our toId function is idempotent
var _kind = storyId.split('--', 2)[0];
selectStory((0, _utils.toId)(_kind, story));
} else {
selectStory((0, _utils.toId)(kindOrId, story));
}
};
return {
api: {
storyId: _utils.toId,
selectStory: selectStory,
getCurrentStoryData: getCurrentStoryData,
setStories: setStories,
jumpToComponent: jumpToComponent,
jumpToStory: jumpToStory,
getData: getData,
getParameters: getParameters
},
state: {
storiesHash: {},
storyId: initialStoryId,
viewMode: initialViewMode,
storiesConfigured: false
}
};
};
exports.default = initStoriesApi;
var _default = initStoriesApi;
exports.default = _default;
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var router_1 = require("@storybook/router");
var utils_1 = require("@storybook/router/dist/utils");
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.array.is-array");
require("core-js/modules/es6.symbol");
require("core-js/modules/es6.array.index-of");
require("core-js/modules/es7.object.entries");
require("core-js/modules/es6.array.reduce");
require("core-js/modules/es6.object.assign");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es7.array.includes");
require("core-js/modules/es6.string.includes");
var _router = require("@storybook/router");
var _utils = require("@storybook/router/dist/utils");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { 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; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
// Initialize the state based on the URL.

@@ -34,88 +61,151 @@ // NOTE:

// We also support legacy URLs from storybook <5
var initialUrlSupport = function (_a) {
var navigate = _a.navigate, location = _a.location, path = _a.path;
var addition = {};
var query = router_1.queryFromLocation(location);
var selectedPanel;
var full = query.full, panel = query.panel, nav = query.nav, addons = query.addons, panelRight = query.panelRight, stories = query.stories, addonPanel = query.addonPanel, selectedKind = query.selectedKind, selectedStory = query.selectedStory, queryPath = query.path, customQueryParams = __rest(query, ["full", "panel", "nav", "addons", "panelRight", "stories", "addonPanel", "selectedKind", "selectedStory", "path"]);
if (full === '1') {
addition.isFullscreen = true;
var initialUrlSupport = function initialUrlSupport(_ref) {
var navigate = _ref.navigate,
location = _ref.location,
path = _ref.path;
var addition = {};
var query = (0, _router.queryFromLocation)(location);
var selectedPanel;
var full = query.full,
panel = query.panel,
nav = query.nav,
addons = query.addons,
panelRight = query.panelRight,
stories = query.stories,
addonPanel = query.addonPanel,
selectedKind = query.selectedKind,
selectedStory = query.selectedStory,
queryPath = query.path,
customQueryParams = _objectWithoutProperties(query, ["full", "panel", "nav", "addons", "panelRight", "stories", "addonPanel", "selectedKind", "selectedStory", "path"]);
if (full === '1') {
addition.isFullscreen = true;
}
if (panel) {
if (['right', 'bottom'].includes(panel)) {
addition.panelPosition = panel;
} else if (panel === '0') {
addition.showPanel = false;
}
if (panel) {
if (['right', 'bottom'].includes(panel)) {
addition.panelPosition = panel;
}
else if (panel === '0') {
addition.showPanel = false;
}
}
if (nav === '0') {
addition.showNav = false;
} // Legacy URLs
if (addons === '0') {
addition.showPanel = false;
}
if (panelRight === '1') {
addition.panelPosition = 'right';
}
if (stories === '0') {
addition.showNav = false;
}
if (addonPanel) {
selectedPanel = addonPanel;
}
if (selectedKind && selectedStory) {
var _storyId = (0, _utils.toId)(selectedKind, selectedStory);
setTimeout(function () {
return navigate("/story/".concat(_storyId), {
replace: true
});
}, 1);
} else if (!queryPath || queryPath === '/') {
setTimeout(function () {
return navigate("/story/*", {
replace: true
});
}, 1);
} else if (Object.keys(query).length > 1) {
// remove other queries
setTimeout(function () {
return navigate("/".concat(queryPath), {
replace: true
});
}, 1);
}
return {
layout: addition,
selectedPanel: selectedPanel,
location: location,
path: path,
customQueryParams: customQueryParams
};
};
function _default(_ref2) {
var store = _ref2.store,
navigate = _ref2.navigate,
location = _ref2.location,
initialPath = _ref2.path,
rest = _objectWithoutProperties(_ref2, ["store", "navigate", "location", "path"]);
var api = {
getQueryParam: function getQueryParam(key) {
var _store$getState = store.getState(),
customQueryParams = _store$getState.customQueryParams;
if (customQueryParams) {
return customQueryParams[key];
}
return undefined;
},
getUrlState: function getUrlState() {
var _store$getState2 = store.getState(),
path = _store$getState2.path,
viewMode = _store$getState2.viewMode,
storyId = _store$getState2.storyId,
url = _store$getState2.url,
customQueryParams = _store$getState2.customQueryParams;
var queryParams = customQueryParams;
return {
queryParams: queryParams,
path: path,
viewMode: viewMode,
storyId: storyId,
url: url
};
},
setQueryParams: function setQueryParams(input) {
var _store$getState3 = store.getState(),
customQueryParams = _store$getState3.customQueryParams;
var queryParams = {};
store.setState({
customQueryParams: Object.assign({}, customQueryParams, Object.entries(input).reduce(function (acc, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
key = _ref4[0],
value = _ref4[1];
if (value !== null) {
acc[key] = value;
}
return acc;
}, queryParams))
});
}
if (nav === '0') {
addition.showNav = false;
}
// Legacy URLs
if (addons === '0') {
addition.showPanel = false;
}
if (panelRight === '1') {
addition.panelPosition = 'right';
}
if (stories === '0') {
addition.showNav = false;
}
if (addonPanel) {
selectedPanel = addonPanel;
}
if (selectedKind && selectedStory) {
var storyId_1 = utils_1.toId(selectedKind, selectedStory);
setTimeout(function () { return navigate("/story/" + storyId_1, { replace: true }); }, 1);
}
else if (!queryPath || queryPath === '/') {
setTimeout(function () { return navigate("/story/*", { replace: true }); }, 1);
}
else if (Object.keys(query).length > 1) {
// remove other queries
setTimeout(function () { return navigate("/" + queryPath, { replace: true }); }, 1);
}
return { layout: addition, selectedPanel: selectedPanel, location: location, path: path, customQueryParams: customQueryParams };
};
function default_1(_a) {
var store = _a.store, navigate = _a.navigate, location = _a.location, initialPath = _a.path, rest = __rest(_a, ["store", "navigate", "location", "path"]);
var api = {
getQueryParam: function (key) {
var customQueryParams = store.getState().customQueryParams;
if (customQueryParams) {
return customQueryParams[key];
}
return undefined;
},
getUrlState: function () {
var _a = store.getState(), path = _a.path, viewMode = _a.viewMode, storyId = _a.storyId, url = _a.url, customQueryParams = _a.customQueryParams;
var queryParams = customQueryParams;
return {
queryParams: queryParams,
path: path,
viewMode: viewMode,
storyId: storyId,
url: url,
};
},
setQueryParams: function (input) {
var customQueryParams = store.getState().customQueryParams;
var queryParams = {};
store.setState({
customQueryParams: __assign({}, customQueryParams, Object.entries(input).reduce(function (acc, _a) {
var key = _a[0], value = _a[1];
if (value !== null) {
acc[key] = value;
}
return acc;
}, queryParams)),
});
},
};
return {
api: api,
state: initialUrlSupport(__assign({ store: store, navigate: navigate, location: location, path: initialPath }, rest)),
};
}
exports.default = default_1;
};
return {
api: api,
state: initialUrlSupport(Object.assign({
store: store,
navigate: navigate,
location: location,
path: initialPath
}, rest))
};
}
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var global_1 = require("global");
var semver_1 = __importDefault(require("semver"));
var client_logger_1 = require("@storybook/client-logger");
var version_1 = require("../version");
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
require("core-js/modules/es6.promise");
require("core-js/modules/es6.date.now");
require("regenerator-runtime/runtime");
require("core-js/modules/es6.object.assign");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.to-string");
require("core-js/modules/es7.object.values");
require("core-js/modules/es6.array.find");
var _global = require("global");
var _semver = _interopRequireDefault(require("semver"));
var _clientLogger = require("@storybook/client-logger");
var _version = require("../version");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var checkInterval = 24 * 60 * 60 * 1000;
var versionsUrl = 'https://storybook.js.org/versions.json';
function fetchLatestVersion(v) {
return __awaiter(this, void 0, void 0, function () {
var fromFetch;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, global_1.fetch(versionsUrl + "?current=" + v)];
case 1:
fromFetch = _a.sent();
return [2 /*return*/, fromFetch.json()];
}
});
});
function fetchLatestVersion(_x) {
return _fetchLatestVersion.apply(this, arguments);
}
function default_1(_a) {
var store = _a.store, mode = _a.mode;
var _b = store.getState(), _c = _b.versions, persistedVersions = _c === void 0 ? {} : _c, _d = _b.lastVersionCheck, lastVersionCheck = _d === void 0 ? 0 : _d, dismissedVersionNotification = _b.dismissedVersionNotification;
// Check to see if we have info about the current version persisted
var persistedCurrentVersion = Object.values(persistedVersions).find(function (v) { return v.version === version_1.version; });
var state = {
versions: __assign({}, persistedVersions, { current: __assign({ version: version_1.version }, (persistedCurrentVersion && { info: persistedCurrentVersion.info })) }),
lastVersionCheck: lastVersionCheck,
dismissedVersionNotification: dismissedVersionNotification,
};
var api = {
getCurrentVersion: function () {
var current = store.getState().versions.current;
return current;
},
getLatestVersion: function () {
var _a = store.getState().versions, latest = _a.latest, next = _a.next, current = _a.current;
if (current && semver_1.default.prerelease(current.version) && next) {
return latest && semver_1.default.gt(latest.version, next.version) ? latest : next;
}
return latest;
},
versionUpdateAvailable: function () {
var latest = api.getLatestVersion();
var current = api.getCurrentVersion();
if (!latest || !latest.version) {
return true;
}
return latest && semver_1.default.gt(latest.version, current.version);
},
};
// Grab versions from the server/local storage right away
function init(_a) {
var fullApi = _a.api;
return __awaiter(this, void 0, void 0, function () {
var _b, versions, now, _c, latest, next, error_1, latestVersion_1;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
_b = store.getState().versions, versions = _b === void 0 ? {} : _b;
now = Date.now();
if (!(!lastVersionCheck || now - lastVersionCheck > checkInterval)) return [3 /*break*/, 5];
_d.label = 1;
case 1:
_d.trys.push([1, 4, , 5]);
return [4 /*yield*/, fetchLatestVersion(version_1.version)];
case 2:
_c = _d.sent(), latest = _c.latest, next = _c.next;
return [4 /*yield*/, store.setState({
versions: __assign({}, versions, { latest: latest, next: next }),
lastVersionCheck: now,
}, { persistence: 'permanent' })];
case 3:
_d.sent();
return [3 /*break*/, 5];
case 4:
error_1 = _d.sent();
client_logger_1.logger.warn("Failed to fetch latest version from server: " + error_1);
return [3 /*break*/, 5];
case 5:
if (api.versionUpdateAvailable()) {
latestVersion_1 = api.getLatestVersion().version;
if (latestVersion_1 !== dismissedVersionNotification &&
!semver_1.default.patch(latestVersion_1) &&
!semver_1.default.prerelease(latestVersion_1) &&
mode !== 'production') {
fullApi.addNotification({
id: 'update',
link: '/settings/about',
content: "\uD83C\uDF89 Storybook " + latestVersion_1 + " is available!",
onClear: function () {
store.setState({ dismissedVersionNotification: latestVersion_1 }, { persistence: 'permanent' });
},
});
}
}
return [2 /*return*/];
function _fetchLatestVersion() {
_fetchLatestVersion = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2(v) {
var fromFetch;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _global.fetch)("".concat(versionsUrl, "?current=").concat(v));
case 2:
fromFetch = _context2.sent;
return _context2.abrupt("return", fromFetch.json());
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return _fetchLatestVersion.apply(this, arguments);
}
function _default(_ref) {
var store = _ref.store,
mode = _ref.mode;
var _store$getState = store.getState(),
_store$getState$versi = _store$getState.versions,
persistedVersions = _store$getState$versi === void 0 ? {} : _store$getState$versi,
_store$getState$lastV = _store$getState.lastVersionCheck,
lastVersionCheck = _store$getState$lastV === void 0 ? 0 : _store$getState$lastV,
dismissedVersionNotification = _store$getState.dismissedVersionNotification; // Check to see if we have info about the current version persisted
var persistedCurrentVersion = Object.values(persistedVersions).find(function (v) {
return v.version === _version.version;
});
var state = {
versions: Object.assign({}, persistedVersions, {
current: Object.assign({
version: _version.version
}, persistedCurrentVersion && {
info: persistedCurrentVersion.info
})
}),
lastVersionCheck: lastVersionCheck,
dismissedVersionNotification: dismissedVersionNotification
};
var api = {
getCurrentVersion: function getCurrentVersion() {
var _store$getState2 = store.getState(),
current = _store$getState2.versions.current;
return current;
},
getLatestVersion: function getLatestVersion() {
var _store$getState3 = store.getState(),
_store$getState3$vers = _store$getState3.versions,
latest = _store$getState3$vers.latest,
next = _store$getState3$vers.next,
current = _store$getState3$vers.current;
if (current && _semver.default.prerelease(current.version) && next) {
return latest && _semver.default.gt(latest.version, next.version) ? latest : next;
}
return latest;
},
versionUpdateAvailable: function versionUpdateAvailable() {
var latest = api.getLatestVersion();
var current = api.getCurrentVersion();
if (!latest || !latest.version) {
return true;
}
return latest && _semver.default.gt(latest.version, current.version);
}
}; // Grab versions from the server/local storage right away
function init(_x2) {
return _init.apply(this, arguments);
}
function _init() {
_init = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(_ref2) {
var fullApi, _store$getState4, _store$getState4$vers, versions, now, _ref3, _latest, _next2, latestVersion;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
fullApi = _ref2.api;
_store$getState4 = store.getState(), _store$getState4$vers = _store$getState4.versions, versions = _store$getState4$vers === void 0 ? {} : _store$getState4$vers;
now = Date.now();
if (!(!lastVersionCheck || now - lastVersionCheck > checkInterval)) {
_context.next = 17;
break;
}
_context.prev = 4;
_context.next = 7;
return fetchLatestVersion(_version.version);
case 7:
_ref3 = _context.sent;
_latest = _ref3.latest;
_next2 = _ref3.next;
_context.next = 12;
return store.setState({
versions: Object.assign({}, versions, {
latest: _latest,
next: _next2
}),
lastVersionCheck: now
}, {
persistence: 'permanent'
});
case 12:
_context.next = 17;
break;
case 14:
_context.prev = 14;
_context.t0 = _context["catch"](4);
_clientLogger.logger.warn("Failed to fetch latest version from server: ".concat(_context.t0));
case 17:
if (api.versionUpdateAvailable()) {
latestVersion = api.getLatestVersion().version;
if (latestVersion !== dismissedVersionNotification && !_semver.default.patch(latestVersion) && !_semver.default.prerelease(latestVersion) && mode !== 'production') {
fullApi.addNotification({
id: 'update',
link: '/settings/about',
content: "\uD83C\uDF89 Storybook ".concat(latestVersion, " is available!"),
onClear: function onClear() {
store.setState({
dismissedVersionNotification: latestVersion
}, {
persistence: 'permanent'
});
}
});
}
});
});
}
return { init: init, state: state, api: api };
}
exports.default = default_1;
}
case 18:
case "end":
return _context.stop();
}
}
}, _callee, null, [[4, 14]]);
}));
return _init.apply(this, arguments);
}
return {
init: init,
state: state,
api: api
};
}
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var store2_1 = __importDefault(require("store2"));
var store_setup_1 = __importDefault(require("./lib/store-setup"));
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.STORAGE_KEY = void 0;
require("core-js/modules/es6.object.define-property");
require("core-js/modules/es6.promise");
require("core-js/modules/es6.object.to-string");
require("regenerator-runtime/runtime");
require("core-js/modules/es6.object.assign");
var _store = _interopRequireDefault(require("store2"));
var _storeSetup = _interopRequireDefault(require("./lib/store-setup"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _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); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
// setting up the store, overriding set and get to use telejson
// @ts-ignore
store_setup_1.default(store2_1.default._);
exports.STORAGE_KEY = '@storybook/ui/store';
(0, _storeSetup.default)(_store.default._);
var STORAGE_KEY = '@storybook/ui/store';
exports.STORAGE_KEY = STORAGE_KEY;
function get(storage) {
var data = storage.get(exports.STORAGE_KEY);
return data || {};
var data = storage.get(STORAGE_KEY);
return data || {};
}
function set(storage, value) {
storage.set(exports.STORAGE_KEY, value);
storage.set(STORAGE_KEY, value);
}
function update(storage, patch) {
var previous = get(storage);
// Apply the same behaviour as react here
set(storage, __assign({}, previous, patch));
var previous = get(storage); // Apply the same behaviour as react here
set(storage, Object.assign({}, previous, patch));
}
// Our store piggybacks off the internal React state of the Context Provider
// It has been augmented to persist state to local/sessionStorage
var Store = /** @class */ (function () {
function Store(_a) {
var setState = _a.setState, getState = _a.getState;
this.upstreamSetState = setState;
this.upstreamGetState = getState;
var Store =
/*#__PURE__*/
function () {
function Store(_ref) {
var setState = _ref.setState,
getState = _ref.getState;
_classCallCheck(this, Store);
this.upstreamGetState = void 0;
this.upstreamSetState = void 0;
this.upstreamSetState = setState;
this.upstreamGetState = getState;
} // The assumption is that this will be called once, to initialize the React state
// when the module is instanciated
_createClass(Store, [{
key: "getInitialState",
value: function getInitialState(base) {
// We don't only merge at the very top level (the same way as React setState)
// when you set keys, so it makes sense to do the same in combining the two storage modes
// Really, you shouldn't store the same key in both places
return Object.assign({}, base, get(_store.default.local), get(_store.default.session));
}
// The assumption is that this will be called once, to initialize the React state
// when the module is instanciated
Store.prototype.getInitialState = function (base) {
// We don't only merge at the very top level (the same way as React setState)
// when you set keys, so it makes sense to do the same in combining the two storage modes
// Really, you shouldn't store the same key in both places
return __assign({}, base, get(store2_1.default.local), get(store2_1.default.session));
};
Store.prototype.getState = function () {
return this.upstreamGetState();
};
Store.prototype.setState = function (inputPatch, cbOrOptions, inputOptions) {
return __awaiter(this, void 0, void 0, function () {
var callback, options, _a, persistence, patch, delta, newState, storage;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (typeof cbOrOptions === 'function') {
callback = cbOrOptions;
options = inputOptions;
}
else {
options = cbOrOptions;
}
_a = (options || {}).persistence, persistence = _a === void 0 ? 'none' : _a;
patch = {};
delta = {};
if (typeof inputPatch === 'function') {
// Pass the same function, but just set delta on the way
patch = function (state) {
var getDelta = inputPatch;
delta = getDelta(state);
return delta;
};
}
else {
patch = inputPatch;
delta = patch;
}
return [4 /*yield*/, new Promise(function (resolve) {
_this.upstreamSetState(patch, resolve);
})];
case 1:
newState = _b.sent();
if (!(persistence !== 'none')) return [3 /*break*/, 3];
storage = persistence === 'session' ? store2_1.default.session : store2_1.default.local;
return [4 /*yield*/, update(storage, delta)];
case 2:
_b.sent();
_b.label = 3;
case 3:
if (callback) {
callback(newState);
}
return [2 /*return*/, newState];
}, {
key: "getState",
value: function getState() {
return this.upstreamGetState();
}
}, {
key: "setState",
value: function () {
var _setState = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(inputPatch, cbOrOptions, inputOptions) {
var _this = this;
var callback, options, _ref2, _ref2$persistence, persistence, patch, delta, newState, storage;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (typeof cbOrOptions === 'function') {
callback = cbOrOptions;
options = inputOptions;
} else {
options = cbOrOptions;
}
});
});
};
return Store;
}());
exports.default = Store;
_ref2 = options || {}, _ref2$persistence = _ref2.persistence, persistence = _ref2$persistence === void 0 ? 'none' : _ref2$persistence;
patch = {}; // What did the patch actually return
delta = {};
if (typeof inputPatch === 'function') {
// Pass the same function, but just set delta on the way
patch = function patch(state) {
var getDelta = inputPatch;
delta = getDelta(state);
return delta;
};
} else {
patch = inputPatch;
delta = patch;
}
_context.next = 7;
return new Promise(function (resolve) {
_this.upstreamSetState(patch, resolve);
});
case 7:
newState = _context.sent;
if (!(persistence !== 'none')) {
_context.next = 12;
break;
}
storage = persistence === 'session' ? _store.default.session : _store.default.local;
_context.next = 12;
return update(storage, delta);
case 12:
if (callback) {
callback(newState);
}
return _context.abrupt("return", newState);
case 14:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function setState(_x, _x2, _x3) {
return _setState.apply(this, arguments);
}
return setState;
}()
}]);
return Store;
}();
exports.default = Store;

@@ -1,1 +0,1 @@

export declare const version = "5.1.0-alpha.20";
export declare const version = "5.1.0-alpha.21";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = '5.1.0-alpha.20';
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.version = void 0;
var version = '5.1.0-alpha.21';
exports.version = version;
{
"name": "@storybook/api",
"version": "5.1.0-alpha.20",
"version": "5.1.0-alpha.21",
"description": "Core Storybook API & Context",

@@ -23,7 +23,7 @@ "keywords": [

"dependencies": {
"@storybook/channels": "5.1.0-alpha.20",
"@storybook/client-logger": "5.1.0-alpha.20",
"@storybook/core-events": "5.1.0-alpha.20",
"@storybook/router": "5.1.0-alpha.20",
"@storybook/theming": "5.1.0-alpha.20",
"@storybook/channels": "5.1.0-alpha.21",
"@storybook/client-logger": "5.1.0-alpha.21",
"@storybook/core-events": "5.1.0-alpha.21",
"@storybook/router": "5.1.0-alpha.21",
"@storybook/theming": "5.1.0-alpha.21",
"core-js": "^2.6.5",

@@ -51,3 +51,3 @@ "fast-deep-equal": "^2.0.1",

},
"gitHead": "a57917a19ceaafd5f5c42bd47821568f9dc26390"
"gitHead": "99c262545d1c106802ada148883ed371901f971c"
}

@@ -1,1 +0,1 @@

export const version = '5.1.0-alpha.20';
export const version = '5.1.0-alpha.21';
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc