Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

storybook-addon-root-attributes

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

storybook-addon-root-attributes

Storybook Addon Root Attributes to switch `Many` html or body attribute at runtime for your story (work in storybook 7!)

  • 2.1.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.6K
increased by22.59%
Maintainers
1
Weekly downloads
 
Created
Source

Storybook Addon Root Attributes

:star: Available storybook 7.0.0 :star:

demo

What is this

This project was inspired by le0pard/storybook-addon-root-attribute

The existing library received only one attribute. So, this library can change multiple attributes by receiving the attribute as array.

Storybook Addon Root Attributes to switch html, body or some element attribute at runtime for your story Storybook

Demo

Installation

yarn add -D storybook-addon-root-attributes

Configuration

create a file called main.js and add addon in addons section:

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

Usage

create a file called preview.js and add parameter in addParameters

import { addParameters } from "@storybook/react";

// global
addParameters({
  rootAttributes: [
    {
      defaultState: {
        name: "Default",
        value: null,
      },
      states: [
        {
          name: "Dark",
          value: "dark",
        },
      ],
    },
    {
      defaultState: {
        name: "Default",
        value: null,
      },
      states: [
        {
          name: "IOS",
          value: "ios",
        },
      ],
    },
  ],
});

You can use the rootAttributes parameter to override resources on each story individually:

// per story: Button.stories.js
export default {
  title: "Example/Button",
  component: Button,
  parameters: {
    rootAttributes: [
      {
        root: "html",
        attribute: "data-color-scheme",
        defaultState: {
          name: "Yellow",
          value: "yellow",
        },
        states: [
          {
            name: "Blue",
            value: "blue",
          },
          {
            name: "Red",
            value: "red",
          },
          {
            name: "Green",
            value: "green",
          },
        ],
      },
    ],
  },
};

If you want to use a tooltip (panel will not dissapear), you need to set rootAttributesTooltip in parameters with true value:

addParameters({
  rootAttributesTooltip: true, // you need to set this property
  rootAttributes: [
    {
      root: "html",
      attribute: "data-scale-color",
      defaultState: {
        name: "Light",
        value: "light",
      },
      states: [
        {
          name: "Dark",
          value: "dark",
        },
        {
          name: "Gray",
          value: "gray",
        },
      ],
    },
    {
      root: "html",
      attribute: "data-letter-spacing",
      defaultState: {
        name: "IOS",
        value: "ios",
      },
      states: [
        {
          name: "Android",
          value: "android",
        },
      ],
    },
  ],
});

Configuration

Configuration params for rootAttributes parameter:

NameDefaultVariantsDescription
rootAttributesrootAttribute[]array with objects, which contain rootAttributeCheck more detail info in below
rootAttributesTooltipfalseboolean valueAdd tooltip button for storybook

Configuration params for rootAttribute parameter:

NameDefaultVariantsDescription
root'html''html', 'body', or first element returned by 'document.querySelector(), or if none found -- 'html''Root node, which attribute will changed by addon
attribute'class'any valid attribute nameAttribute name
defaultState{}should contain name and valueDefault state for attribute. Value nil will remove attribute from root
states[]array with objects, which contain unique name and value for attributeAll needed states for attribute values. Each object should contain unique name (for button) and value for attribute

Configuration example:

addParameters({
  rootAttributesTooltip: true,
  rootAttributes: [
    {
      root: "html",
      attribute: "data-scale-color",
      defaultState: {
        name: "Light",
        value: "light",
      },
      states: [
        {
          name: "Dark",
          value: "dark",
        },
        {
          name: "Gray",
          value: "gray",
        },
      ],
    },
    {
      root: "html",
      attribute: "data-letter-spacing",
      defaultState: {
        name: "IOS",
        value: "ios",
      },
      states: [
        {
          name: "Android",
          value: "android",
        },
      ],
    },
  ],
});

Keywords

FAQs

Package last updated on 04 Jan 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc