storybook-addon-variants
Version:
Show all variants of a component in a grid
52 lines (40 loc) • 2.81 kB
JavaScript
var _templateObject;
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(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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 _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
import React, { useMemo } from "react";
import { styled } from "@storybook/theming";
import { getCombinations } from "./getCombinations";
var Grid = styled.ul(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n margin: 0;\n padding: 0;\n list-style: none;\n display: flex;\n flex-wrap: wrap;\n gap: 30px;\n align-items: center;\n"])));
function CombinationGrid(_ref) {
var StoryFn = _ref.StoryFn,
context = _ref.context;
var combinations = useMemo(function () {
return getCombinations(context.argTypes);
}, [context.argTypes]);
if (combinations.length === 0) {
return StoryFn();
}
return /*#__PURE__*/React.createElement(Grid, null, combinations.map(function (combination, index) {
return /*#__PURE__*/React.createElement("li", {
key: index,
title: JSON.stringify(combination, null, 2)
}, StoryFn({
args: _objectSpread(_objectSpread({}, context.args), combination)
}));
}));
}
export var withVariants = function withVariants(StoryFn, context) {
var _parameters$variants;
var globals = context.globals,
parameters = context.parameters;
var shouldShowVariants = globals.variantsAddon === true || ((_parameters$variants = parameters.variants) === null || _parameters$variants === void 0 ? void 0 : _parameters$variants.enable) === true;
if (shouldShowVariants) {
return /*#__PURE__*/React.createElement(CombinationGrid, {
StoryFn: StoryFn,
context: context
});
}
return StoryFn();
};