Storybook 附加组件 Root Attribute,用于在运行时为您的故事切换 html 或 body 属性

在 Github 上查看

Storybook 附加组件 Root Attribute 构建状态

Storybook 附加组件 Root Attribute,用于在运行时为您的故事切换 html、body 或某些元素属性 Storybook

演示

安装

yarn add -D storybook-addon-root-attribute

配置

然后在您的 storybook 配置中创建一个名为 addons.js 的文件,并向其中添加以下内容

import "storybook-addon-root-attribute/register";

或创建一个名为 main.js 的文件,并在 addons 部分添加附加组件

module.exports = {
  ...
  addons: [
    ...
    'storybook-addon-root-attribute/register'
  ]
};

用法

您需要使用 withRootAttribute 装饰器在编译时添加所有属性值。它们可以全局添加或每个故事添加一个。然后,您可以在附加组件 UI 上选择激活哪些根属性

// Import from @storybook/X where X is your framework
import {
  configure,
  addDecorator,
  addParameters,
  storiesOf
} from "@storybook/react";
import { withRootAttribute } from "storybook-addon-root-attribute";

// global
addDecorator(withRootAttribute);
addParameters({
  rootAttribute: {
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      }
    ]
  }
});

您可以使用 rootAttribute 参数在每个故事上单独覆盖资源

// per story
storiesOf("Addons|RootAttribute", module).add(
  "Camera Icon",
  () => <i className="fa fa-camera-retro"> Camera Icon</i>,
  {
    rootAttribute: {
      defaultState: {
        name: "Default",
        value: null
      },
      states: [
        {
          name: "Dark",
          value: "dark"
        }
      ]
    }
  }
);

如果您想使用工具提示(面板不会消失),您需要在参数中设置 tooltip,值为 true

addParameters({
  rootAttribute: {
    tooltip: true,
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      }
    ]
  }
});

工具提示和面板不会同步更改属性。

配置

rootAttribute 参数的配置参数

名称 默认 变体 描述
root 'html' 'html'、'body' 或 'document.querySelector()' 返回的第一个元素,如果未找到,则为 'html' 根节点,附加组件将更改其属性
attribute 'class' 任何有效的属性名称 属性名称
defaultState {} 应包含 namevalue 属性的默认状态。值 nil 将从根中删除属性
states [] 包含对象的数组,这些对象包含属性的唯一 namevalue 属性值所需的所有状态。每个对象应包含唯一的 name(用于按钮)和属性的 value
tooltip false 布尔值 为 Storybook 添加工具提示按钮

配置示例

addDecorator(withRootAttribute);
addParameters({
  rootAttribute: {
    root: "html",
    attribute: "class",
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      },
      {
        name: "A11Y",
        value: "accessibility"
      }
    ]
  }
});