storybook-addon-pseudo-states
Version:
Storybook Pseudo-states addon: Manipulate CSS pseudo states
8 lines (6 loc) • 1.95 kB
JavaScript
import { addons, types, useGlobals } from 'storybook/manager-api';
import React, { useCallback } from 'react';
import { Form, WithTooltip, TooltipLinkList, IconButton } from 'storybook/internal/components';
import { styled, color } from 'storybook/internal/theming';
import { RefreshIcon, ButtonIcon } from '@storybook/icons';
var ADDON_ID="storybook/pseudo-states",TOOL_ID=`${ADDON_ID}/tool`,PARAM_KEY="pseudo";var PSEUDO_STATES={hover:"hover",active:"active",focusVisible:"focus-visible",focusWithin:"focus-within",focus:"focus",visited:"visited",link:"link",target:"target"};var LinkTitle=styled.span(({active})=>({color:active?color.secondary:"inherit"})),options=Object.keys(PSEUDO_STATES).sort(),PseudoStateTool=()=>{let[globals,updateGlobals]=useGlobals(),pseudo=globals[PARAM_KEY],isActive=useCallback(option=>pseudo?pseudo[option]===!0:!1,[pseudo]),hasActive=options.some(isActive),reset={id:"reset",title:"Reset pseudo states",icon:React.createElement(RefreshIcon,{style:{opacity:hasActive?1:.7}}),disabled:!hasActive,onClick:()=>updateGlobals({[PARAM_KEY]:{}})},toggleOption=useCallback(option=>()=>{let{[option]:value,...rest}=pseudo;updateGlobals({[PARAM_KEY]:value===!0?rest:{...rest,[option]:!0}});},[pseudo,updateGlobals]),links=options.map(option=>{let active=isActive(option);return {id:option,title:React.createElement(LinkTitle,{active},":",PSEUDO_STATES[option]),input:React.createElement(Form.Checkbox,{checked:active,onChange:toggleOption(option)}),active}});return React.createElement(WithTooltip,{placement:"top",trigger:"click",closeOnOutsideClick:!0,tooltip:React.createElement(TooltipLinkList,{links:[[reset],links]})},React.createElement(IconButton,{key:"pseudo-states",title:"Select CSS pseudo states",active:hasActive},React.createElement(ButtonIcon,null)))};addons.register(ADDON_ID,()=>{addons.add(TOOL_ID,{type:types.TOOL,title:"CSS pseudo states",match:({viewMode})=>viewMode==="story",render:PseudoStateTool});});