Storybook 擴充功能根屬性,可在您的 Story 中於執行時切換 html 或 body 屬性

在 Github 上檢視

Storybook 擴充功能根屬性 建置狀態

Storybook 擴充功能根屬性,可在您的 Story 中於執行時切換 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 裝飾器在編譯時新增所有屬性值。它們可以全域新增或每個 Story 新增。然後,您可以選擇在擴充功能 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 參數來個別覆寫每個 Story 上的資源

// 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"
      }
    ]
  }
});