UNPKG

react-storybook-addon-chapters

Version:

React Storybook Chapters addon allows showcasing of multiple components within a story by breaking it down into smaller categories (chapters) and subcategories (sections) for more organizational goodness.

189 lines (160 loc) 6.79 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.ChapterDecorator = exports.chapterStyles = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Section = _interopRequireDefault(require("./Section")); var _infoContent = _interopRequireDefault(require("../utils/info-content")); var _theme = _interopRequireDefault(require("../theme")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var propTypes = { context: _propTypes["default"].object, title: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]), subtitle: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]), info: _propTypes["default"].string, sections: _propTypes["default"].arrayOf(_propTypes["default"].object), addonInfo: _propTypes["default"].object, useTheme: _propTypes["default"].bool }; var defaultProps = { context: {}, title: '', subtitle: '', info: '', sections: [] }; var chapterStyles = { header: { marginBottom: 60 }, hr: { border: 'none', backgroundColor: _theme["default"].border, height: 1 }, title: { color: _theme["default"].grayDarkest, fontSize: 24, marginBottom: 10 }, subtitle: { color: _theme["default"].grayDark, fontSize: 16, marginBottom: 20, marginTop: 0 }, info: _theme["default"].infoStyle }; exports.chapterStyles = chapterStyles; var ChapterDecorator = /*#__PURE__*/ function () { function ChapterDecorator() { (0, _classCallCheck2["default"])(this, ChapterDecorator); } (0, _createClass2["default"])(ChapterDecorator, null, [{ key: "title", value: function title(_title, useTheme) { return _react["default"].createElement("h3", { style: useTheme ? chapterStyles.title : {}, className: "chapter-h3" }, _title); } }, { key: "subtitle", value: function subtitle(_subtitle, useTheme) { return _react["default"].createElement("span", { style: useTheme ? chapterStyles.subTitle : {}, className: "chapter-subtitle" }, _subtitle); } }, { key: "info", value: function info(_info, useTheme) { return _react["default"].createElement("div", { style: useTheme ? chapterStyles.info : {}, className: "chapter-info" }, _info); } }, { key: "ruler", value: function ruler(useTheme) { return _react["default"].createElement("hr", { style: useTheme ? chapterStyles.hr : {}, className: "chapter-hr" }); } }, { key: "main", value: function main(header, sections, useTheme) { return _react["default"].createElement("div", { style: useTheme ? chapterStyles.chapter : {}, className: "chapter" }, _react["default"].createElement("div", { style: useTheme ? chapterStyles.header : {}, className: "chapter-header" }, header), _react["default"].createElement("div", { className: "chapter-sections" }, sections)); } }]); return ChapterDecorator; }(); exports.ChapterDecorator = ChapterDecorator; var Chapter = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(Chapter, _Component); function Chapter() { (0, _classCallCheck2["default"])(this, Chapter); return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(Chapter).apply(this, arguments)); } (0, _createClass2["default"])(Chapter, [{ key: "render", value: function render() { var _this$props = this.props, context = _this$props.context, title = _this$props.title, subtitle = _this$props.subtitle, info = _this$props.info, sections = _this$props.sections, addonInfo = _this$props.addonInfo, useTheme = _this$props.useTheme; var header = _react["default"].createElement("div", null, title && ChapterDecorator.title(title, useTheme), subtitle && ChapterDecorator.subtitle(subtitle, useTheme), (subtitle || info) && ChapterDecorator.ruler(useTheme), info && ChapterDecorator.subtitle((0, _infoContent["default"])(info), useTheme)); var renderedSections = sections.map(function (section, index) { var options = section.options || {}; var sectionProps = _objectSpread({ context: context, title: section.title, subtitle: section.subtitle, info: section.info }, options, { addonInfo: addonInfo }); return _react["default"].createElement(_Section["default"], (0, _extends2["default"])({ key: index }, sectionProps, { useTheme: useTheme }), section.sectionFn(context)); }); return ChapterDecorator.main(header, renderedSections, useTheme); } }]); return Chapter; }(_react.Component); exports["default"] = Chapter; Chapter.displayName = 'Chapter'; Chapter.propTypes = propTypes; Chapter.defaultProps = defaultProps;