@skbkontur/storybook-addon-live-examples
Version:
Storybook live examples plugin
39 lines (38 loc) • 2.28 kB
JavaScript
import { addons } from '@storybook/manager-api';
import React from 'react';
import { CanvasReplacer, Example } from './components';
import { extractLanguageFromFilename } from './components/utils';
import { LIVE_EXAMPLES_ADDON_ID } from './config';
export function storyBookLiveExampleDecorator(storyFn, context) {
var _docs$source, _context$globals$them, _context$globals$them2, _addonConfig$decorato;
var story = storyFn();
var addonConfig = addons.getConfig()[LIVE_EXAMPLES_ADDON_ID];
if (context.viewMode !== 'docs' || context.parameters.defaultCanvas || addonConfig.defaultCanvas) return story;
var _context$parameters = context.parameters,
_context$parameters$l = _context$parameters.live,
live = _context$parameters$l === void 0 ? true : _context$parameters$l,
_context$parameters$e = _context$parameters.expanded,
expanded = _context$parameters$e === void 0 ? false : _context$parameters$e,
docs = _context$parameters.docs,
scope = _context$parameters.scope;
var code = docs !== null && docs !== void 0 && (_docs$source = docs.source) !== null && _docs$source !== void 0 && _docs$source.originalSource ? "render(".concat(docs.source.originalSource, ")") : 'No code available';
var isDarkTheme = Boolean((_context$globals$them = context.globals["theme"]) === null || _context$globals$them === void 0 ? void 0 : (_context$globals$them2 = _context$globals$them.match(/dark/gi)) === null || _context$globals$them2 === void 0 ? void 0 : _context$globals$them2.length); // todo вынести в конфиг
var example = /*#__PURE__*/React.createElement(Example, {
code: code,
live: live,
expanded: expanded,
scope: scope,
isDarkTheme: isDarkTheme,
language: typeof context.parameters.fileName === 'string' ? extractLanguageFromFilename(context.parameters.fileName) : undefined
});
var decorators = (_addonConfig$decorato = addonConfig.decorators) !== null && _addonConfig$decorato !== void 0 ? _addonConfig$decorato : [];
var result = decorators.reduce(function (acc, decorator) {
return decorator(function () {
return acc;
}, context);
}, example);
return /*#__PURE__*/React.createElement(CanvasReplacer, {
id: context.id
}, result);
}
export default storyBookLiveExampleDecorator;