Socket
Socket
Sign inDemoInstall

@storybook/ui

Package Overview
Dependencies
89
Maintainers
7
Versions
1135
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @storybook/ui

Core Storybook UI


Version published
Weekly downloads
1.7M
decreased by-3.46%
Maintainers
7
Install size
15.5 MB
Created
Weekly downloads
 

Package description

What is @storybook/ui?

The @storybook/ui package is a part of the Storybook ecosystem, which is an open-source tool for developing UI components in isolation for React, Vue, Angular, and many other frameworks. It provides the UI for Storybook, allowing developers to browse a component library, view the different states of each component, and interactively develop and test components.

What are @storybook/ui's main functionalities?

Customizable UI

This feature allows developers to customize the Storybook UI according to their preferences or branding requirements by applying a custom theme.

import { addons } from '@storybook/addons';
import yourTheme from './yourTheme';

addons.setConfig({
  theme: yourTheme,
});

Navigation and Layout

Developers can configure the layout and navigation of the Storybook UI, including fullscreen mode, visibility of navigation and panels, panel positioning, sidebar animations, and keyboard shortcuts.

import { addons } from '@storybook/addons';

addons.setConfig({
  isFullscreen: false,
  showNav: true,
  showPanel: true,
  panelPosition: 'bottom',
  sidebarAnimations: true,
  enableShortcuts: true,
});

Toolbar and Tool Configuration

This allows for the configuration of the toolbar and tools within the Storybook UI, including setting a default panel and applying a theme from the Storybook theming package.

import { addons } from '@storybook/addons';
import { themes } from '@storybook/theming';

addons.setConfig({
  selectedPanel: 'storybook/actions/panel',
  theme: themes.dark,
});

Other packages similar to @storybook/ui

Readme

Source

Storybook UI

Greenkeeper badge Build Status CodeFactor Known Vulnerabilities BCH compliance codecov Storybook Slack

Storybook UI the core UI of storybook. It's a React based UI which you can initialize with a simple function. You can configure it by providing a provider API.

Table of Contents

Usage

First you need to install @storybook/ui into your app.

npm install --save @storybook/ui

Then you need to create a Provider class like this:

import React from 'react';
import { Provider } from '@storybook/ui';

export default class MyProvider extends Provider {
  getPanels() {
    return {};
  }

  renderPreview() {
    return (
      <p>This is the Preview</p>
    );
  }

  handleAPI(api) {
    // no need to do anything for now.
  }
}

Then you need to initialize the UI like this:

import Provider from './provider';
import renderStorybookUI from '@storybook/ui';

const roolEl = document.getElementById('root');
renderStorybookUI(roolEl, new Provider());

Then you'll get a UI like this:

Simplest Storybook UI

See the example app for a complete example.

API

.setOptions()

class ReactProvider extends Provider {
  handleAPI(api) {
    api.setOptions({
      name: 'My Component', // change the name displayed in the left top portion
      url: 'https://github.com/user/my-component', // change its URL
      sortStoriesByKind: true // Sort the list of stories by their "kind"
    });
  }
};

.setStories()

This API is used to pass thekind and stories list to storybook-ui.

class ReactProvider extends Provider {
  handleAPI(api) {
    api.setStories([
      {
        kind: 'Component 1',
        stories: ['State 1', 'State 2']
      },

      {
        kind: 'Component 2',
        stories: ['State a', 'State b']
      }
    ]);
  }
}

.onStory()

You can use to listen to the story change and update the preview.

class ReactProvider extends Provider {
  handleAPI(api) {
    api.onStory((kind, story) => {
        this.globalState.emit('change', kind, story);
    });
  }
}

Hacking Guide

If you like to add features to the Storybook UI or fix bugs, this is the guide you need to follow.

First of all, you can need to start the example app to see your changes.

The App

This is a Redux app written based on the Mantra architecture. It's a set of modules. You can see those modules at src/modules directory.

Changing UI

If you like to change the appearance of the UI, you need to look at the ui module. Simply change components at the components directory for simple UI tweaks.

You can also change containers(which are written with react-komposer) to add more data from the redux state.

Redux

Each module has a it's own set of reducers at <module>/configs/reducers directory. These reducers are loaded in the src/index.js(inside the main api).

Mounting

The UI is mounted in the src/modules/ui/routes.js. Inside that, we have injected dependencies as well. Refer mantra-core for that.

We've injected the context and actions.

App Context

App context is the app which application context you initialize when creating the UI. It is initialized in the src/index.js file. It's a non serializable state. You can access the app context from containers and basically most of the place in the app.

So, that's the place to put app wide configurations and objects which won't changed after initialized. Our redux store is also stayed inside the app context.

Actions

Actions are the place we implement app logic in a Mantra app. Each module has a set of actions and they are globally accessible. These actions are located at <module>/actions directory.

They got injected into the app(when mounting) and you can access them via containers. If you are familiar with redux, this is exactly action creators. But they are not only limited to do redux stuff. Actions has the access to the app context, so literally it can do anything.

Core API

Core API (which is passed to the Provider with handleAPI method) is implemented in the api module. We put the provider passed by the user in the app context. Then api module access it and use it as needed.

Keyboard Shortcuts

Keyboard shortcuts are implemented in a bit different way. The final state of keyboard shortcuts is managed by the shortcuts module. But they are implemented in the ui module with src/modules/ui/configs/handle_routing.js

These shortcuts also can be called from main API using the handleShortcut method. Check the example app for the usage. That's implemented as an action in the shortcuts module.

The above action(or the handleShortcut method) accepts events as a constant defined by this module. They are defined in the src/libs/key_events.js. This is basically to serialize these events.

In react-storybook we need to pass these events from the preview iframe to the main app. That's the core reason for this.

URL Changes

We are not using any routing library. That's because, we don't want to do routing, but wanted to add some query params and use them.

Routing logic is implemented in the src/modules/ui/configs/handle_routing.js configuration.

FAQs

Last updated on 30 May 2017

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc