@storybook/addon-themes 0.0.0-pr-23609-sha-f47ef339

Sign up to get free protection for your applications and to get access to all the features.
package/README.md ADDED
@@ -0,0 +1,72 @@
1
+ # `@storybook/addon-themes
2
+
3
+ Storybook Addon Themes can be used which between multiple themes for components inside the preview in [Storybook](https://storybook.js.org).
4
+
5
+ ![React Storybook Screenshot](https://user-images.githubusercontent.com/42671/98158421-dada2300-1ea8-11eb-8619-af1e7018e1ec.png)
6
+
7
+ ## Usage
8
+
9
+ Requires Storybook 7.0 or later. Themes is part of [essentials](https://storybook.js.org/docs/react/essentials/introduction) and so is installed in all new Storybooks by default. If you need to add it to your Storybook, you can run:
10
+
11
+ ```sh
12
+ npm i -D @storybook/addon-themes
13
+ ```
14
+
15
+ Then, add following content to [`.storybook/main.js`](https://storybook.js.org/docs/react/configure/overview#configure-your-storybook-project):
16
+
17
+ ```js
18
+ export default {
19
+ addons: ['@storybook/addon-themes'],
20
+ };
21
+ ```
22
+
23
+ ### 👇 Tool specific configuration
24
+
25
+ For tool-specific setup, check out the recipes below
26
+
27
+ - [`@emotion/styled`](https://github.com/storybookjs/storybook/tree/next/code/addons/themes/docs/getting-started/emotion.md)
28
+ - [`@mui/material`](https://github.com/storybookjs/storybook/tree/next/code/addons/themes/docs/getting-started/material-ui.md)
29
+ - [`bootstrap`](https://github.com/storybookjs/storybook/tree/next/code/addons/themes/docs/getting-started/bootstrap.md)
30
+ - [`styled-components`](https://github.com/storybookjs/storybook/tree/next/code/addons/themes/docs/getting-started/styled-components.md)
31
+ - [`tailwind`](https://github.com/storybookjs/storybook/tree/next/code/addons/themes/docs/getting-started/tailwind.md)
32
+ - [`vuetify@3.x`](https://github.com/storybookjs/storybook/blob/next/code/addons/themes/docs/api.md#writing-a-custom-decorator)
33
+
34
+ Don't see your favorite tool listed? Don't worry! That doesn't mean this addon isn't for you. Check out the ["Writing a custom decorator"](https://github.com/storybookjs/storybook/blob/next/code/addons/themes/docs/api.md#writing-a-custom-decorator) section of the [api reference](https://github.com/storybookjs/storybook/blob/next/code/addons/themes/docs/api.md).
35
+
36
+ ### ❗️ Overriding theme
37
+
38
+ If you want to override your theme for a particular component or story, you can use the `themes.themeOverride` parameter.
39
+
40
+ ```js
41
+ import React from 'react';
42
+ import { Button } from './Button';
43
+
44
+ export default {
45
+ title: 'Example/Button',
46
+ component: Button,
47
+ parameters: {
48
+ themes: {
49
+ themeOverride: 'light', // component level override
50
+ },
51
+ },
52
+ };
53
+
54
+ export const Primary = {
55
+ args: {
56
+ primary: true,
57
+ label: 'Button',
58
+ },
59
+ };
60
+
61
+ export const PrimaryDark = {
62
+ args: {
63
+ primary: true,
64
+ label: 'Button',
65
+ },
66
+ parameters: {
67
+ themes: {
68
+ themeOverride: 'dark', // Story level override
69
+ },
70
+ },
71
+ };
72
+ ```
@@ -0,0 +1,3 @@
1
+ var __defProp=Object.defineProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0});};var PARAM_KEY="themes",ADDON_ID=`storybook/${PARAM_KEY}}`,GLOBAL_KEY="theme",THEME_SWITCHER_ID=`${ADDON_ID}/theme-switcher`,DEFAULT_ADDON_STATE={themesList:[],themeDefault:void 0},DEFAULT_THEME_PARAMETERS={},THEMING_EVENTS={REGISTER_THEMES:`${ADDON_ID}/REGISTER_THEMES`};
2
+
3
+ export { ADDON_ID, DEFAULT_ADDON_STATE, DEFAULT_THEME_PARAMETERS, GLOBAL_KEY, PARAM_KEY, THEME_SWITCHER_ID, THEMING_EVENTS, __export };
@@ -0,0 +1,54 @@
1
+ import { Renderer, DecoratorFunction, StoryContext } from '@storybook/types';
2
+
3
+ interface ClassNameStrategyConfiguration {
4
+ themes: Record<string, string>;
5
+ defaultTheme: string;
6
+ parentSelector?: string;
7
+ }
8
+ declare const withThemeByClassName: <TRenderer extends Renderer = Renderer>({ themes, defaultTheme, parentSelector, }: ClassNameStrategyConfiguration) => DecoratorFunction<TRenderer>;
9
+
10
+ interface DataAttributeStrategyConfiguration {
11
+ themes: Record<string, string>;
12
+ defaultTheme: string;
13
+ parentSelector?: string;
14
+ attributeName?: string;
15
+ }
16
+ declare const withThemeByDataAttribute: <TRenderer extends Renderer = Renderer>({ themes, defaultTheme, parentSelector, attributeName, }: DataAttributeStrategyConfiguration) => DecoratorFunction<TRenderer>;
17
+
18
+ type Theme = Record<string, any>;
19
+ type ThemeMap = Record<string, Theme>;
20
+ interface ProviderStrategyConfiguration {
21
+ Provider?: any;
22
+ GlobalStyles?: any;
23
+ defaultTheme?: string;
24
+ themes?: ThemeMap;
25
+ }
26
+ declare const withThemeFromJSXProvider: <TRenderer extends Renderer = Renderer>({ Provider, GlobalStyles, defaultTheme, themes, }: ProviderStrategyConfiguration) => DecoratorFunction<TRenderer>;
27
+
28
+ interface ThemeParameters {
29
+ themeOverride?: string;
30
+ }
31
+
32
+ /**
33
+ *
34
+ * @param StoryContext
35
+ * @returns The global theme name set for your stories
36
+ */
37
+ declare function pluckThemeFromContext({ globals }: StoryContext): string;
38
+ declare function useThemeParameters(): ThemeParameters;
39
+ declare function initializeThemeState(themeNames: string[], defaultTheme: string): void;
40
+
41
+ declare const helpers_initializeThemeState: typeof initializeThemeState;
42
+ declare const helpers_pluckThemeFromContext: typeof pluckThemeFromContext;
43
+ declare const helpers_useThemeParameters: typeof useThemeParameters;
44
+ declare namespace helpers {
45
+ export {
46
+ helpers_initializeThemeState as initializeThemeState,
47
+ helpers_pluckThemeFromContext as pluckThemeFromContext,
48
+ helpers_useThemeParameters as useThemeParameters,
49
+ };
50
+ }
51
+
52
+ declare const _default: {};
53
+
54
+ export { ClassNameStrategyConfiguration, DataAttributeStrategyConfiguration, helpers as DecoratorHelpers, ProviderStrategyConfiguration, _default as default, withThemeByClassName, withThemeByDataAttribute, withThemeFromJSXProvider };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var src_exports={};__export(src_exports,{DecoratorHelpers:()=>helpers_exports,default:()=>src_default,withThemeByClassName:()=>withThemeByClassName,withThemeByDataAttribute:()=>withThemeByDataAttribute,withThemeFromJSXProvider:()=>withThemeFromJSXProvider});module.exports=__toCommonJS(src_exports);var import_preview_api2=require("@storybook/preview-api");var helpers_exports={};__export(helpers_exports,{initializeThemeState:()=>initializeThemeState,pluckThemeFromContext:()=>pluckThemeFromContext,useThemeParameters:()=>useThemeParameters});var import_preview_api=require("@storybook/preview-api");var PARAM_KEY="themes",ADDON_ID=`storybook/${PARAM_KEY}}`,GLOBAL_KEY="theme",THEME_SWITCHER_ID=`${ADDON_ID}/theme-switcher`;var DEFAULT_THEME_PARAMETERS={},THEMING_EVENTS={REGISTER_THEMES:`${ADDON_ID}/REGISTER_THEMES`};function pluckThemeFromContext({globals}){return globals[GLOBAL_KEY]||""}function useThemeParameters(){return(0,import_preview_api.useParameter)(PARAM_KEY,DEFAULT_THEME_PARAMETERS)}function initializeThemeState(themeNames,defaultTheme){import_preview_api.addons.getChannel().emit(THEMING_EVENTS.REGISTER_THEMES,{defaultTheme,themes:themeNames})}var DEFAULT_ELEMENT_SELECTOR="html",classStringToArray=classString=>classString.split(" ").filter(Boolean),withThemeByClassName=({themes,defaultTheme,parentSelector=DEFAULT_ELEMENT_SELECTOR})=>(initializeThemeState(Object.keys(themes),defaultTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context);return(0,import_preview_api2.useEffect)(()=>{let selectedThemeName=themeOverride||selected||defaultTheme,parentElement=document.querySelector(parentSelector);if(!parentElement)return;Object.entries(themes).filter(([themeName])=>themeName!==selectedThemeName).forEach(([themeName,className])=>{let classes=classStringToArray(className);classes.length>0&&parentElement.classList.remove(...classes)});let newThemeClasses=classStringToArray(themes[selectedThemeName]);newThemeClasses.length>0&&parentElement.classList.add(...newThemeClasses)},[themeOverride,selected,parentSelector]),storyFn()});var import_preview_api3=require("@storybook/preview-api");var DEFAULT_ELEMENT_SELECTOR2="html",DEFAULT_DATA_ATTRIBUTE="data-theme",withThemeByDataAttribute=({themes,defaultTheme,parentSelector=DEFAULT_ELEMENT_SELECTOR2,attributeName=DEFAULT_DATA_ATTRIBUTE})=>(initializeThemeState(Object.keys(themes),defaultTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context);return(0,import_preview_api3.useEffect)(()=>{let parentElement=document.querySelector(parentSelector),themeKey=themeOverride||selected||defaultTheme;parentElement&&parentElement.setAttribute(attributeName,themes[themeKey])},[themeOverride,selected,parentSelector,attributeName]),storyFn()});var import_react=__toESM(require("react")),import_preview_api4=require("@storybook/preview-api");var pluckThemeFromKeyPairTuple=([_,themeConfig])=>themeConfig,withThemeFromJSXProvider=({Provider,GlobalStyles,defaultTheme,themes={}})=>{let themeNames=Object.keys(themes),initialTheme=defaultTheme||themeNames[0];return initializeThemeState(themeNames,initialTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context),theme=(0,import_preview_api4.useMemo)(()=>{let selectedThemeName=themeOverride||selected||initialTheme,pairs=Object.entries(themes);return pairs.length===1?pluckThemeFromKeyPairTuple(pairs[0]):themes[selectedThemeName]},[themes,selected,themeOverride]);return Provider?import_react.default.createElement(Provider,{theme},GlobalStyles&&import_react.default.createElement(GlobalStyles,null),storyFn()):import_react.default.createElement(import_react.default.Fragment,null,GlobalStyles&&import_react.default.createElement(GlobalStyles,null),storyFn())}};var src_default={};0&&(module.exports={DecoratorHelpers,withThemeByClassName,withThemeByDataAttribute,withThemeFromJSXProvider});
package/dist/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ import { __export, GLOBAL_KEY, PARAM_KEY, DEFAULT_THEME_PARAMETERS, THEMING_EVENTS } from './chunk-5PKFUQBM.mjs';
2
+ import { useParameter, addons, useEffect, useMemo } from '@storybook/preview-api';
3
+ import React from 'react';
4
+
5
+ var helpers_exports={};__export(helpers_exports,{initializeThemeState:()=>initializeThemeState,pluckThemeFromContext:()=>pluckThemeFromContext,useThemeParameters:()=>useThemeParameters});function pluckThemeFromContext({globals}){return globals[GLOBAL_KEY]||""}function useThemeParameters(){return useParameter(PARAM_KEY,DEFAULT_THEME_PARAMETERS)}function initializeThemeState(themeNames,defaultTheme){addons.getChannel().emit(THEMING_EVENTS.REGISTER_THEMES,{defaultTheme,themes:themeNames});}var DEFAULT_ELEMENT_SELECTOR="html",classStringToArray=classString=>classString.split(" ").filter(Boolean),withThemeByClassName=({themes,defaultTheme,parentSelector=DEFAULT_ELEMENT_SELECTOR})=>(initializeThemeState(Object.keys(themes),defaultTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context);return useEffect(()=>{let selectedThemeName=themeOverride||selected||defaultTheme,parentElement=document.querySelector(parentSelector);if(!parentElement)return;Object.entries(themes).filter(([themeName])=>themeName!==selectedThemeName).forEach(([themeName,className])=>{let classes=classStringToArray(className);classes.length>0&&parentElement.classList.remove(...classes);});let newThemeClasses=classStringToArray(themes[selectedThemeName]);newThemeClasses.length>0&&parentElement.classList.add(...newThemeClasses);},[themeOverride,selected,parentSelector]),storyFn()});var DEFAULT_ELEMENT_SELECTOR2="html",DEFAULT_DATA_ATTRIBUTE="data-theme",withThemeByDataAttribute=({themes,defaultTheme,parentSelector=DEFAULT_ELEMENT_SELECTOR2,attributeName=DEFAULT_DATA_ATTRIBUTE})=>(initializeThemeState(Object.keys(themes),defaultTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context);return useEffect(()=>{let parentElement=document.querySelector(parentSelector),themeKey=themeOverride||selected||defaultTheme;parentElement&&parentElement.setAttribute(attributeName,themes[themeKey]);},[themeOverride,selected,parentSelector,attributeName]),storyFn()});var pluckThemeFromKeyPairTuple=([_,themeConfig])=>themeConfig,withThemeFromJSXProvider=({Provider,GlobalStyles,defaultTheme,themes={}})=>{let themeNames=Object.keys(themes),initialTheme=defaultTheme||themeNames[0];return initializeThemeState(themeNames,initialTheme),(storyFn,context)=>{let{themeOverride}=useThemeParameters(),selected=pluckThemeFromContext(context),theme=useMemo(()=>{let selectedThemeName=themeOverride||selected||initialTheme,pairs=Object.entries(themes);return pairs.length===1?pluckThemeFromKeyPairTuple(pairs[0]):themes[selectedThemeName]},[themes,selected,themeOverride]);return Provider?React.createElement(Provider,{theme},GlobalStyles&&React.createElement(GlobalStyles,null),storyFn()):React.createElement(React.Fragment,null,GlobalStyles&&React.createElement(GlobalStyles,null),storyFn())}};var src_default={};
6
+
7
+ export { helpers_exports as DecoratorHelpers, src_default as default, withThemeByClassName, withThemeByDataAttribute, withThemeFromJSXProvider };
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod));var import_manager_api2=require("@storybook/manager-api");var PARAM_KEY="themes",ADDON_ID=`storybook/${PARAM_KEY}}`;var THEME_SWITCHER_ID=`${ADDON_ID}/theme-switcher`,DEFAULT_ADDON_STATE={themesList:[],themeDefault:void 0},DEFAULT_THEME_PARAMETERS={},THEMING_EVENTS={REGISTER_THEMES:`${ADDON_ID}/REGISTER_THEMES`};var import_react=__toESM(require("react")),import_manager_api=require("@storybook/manager-api"),import_theming=require("@storybook/theming"),import_components=require("@storybook/components");var IconButtonLabel=import_theming.styled.div(({theme})=>({fontSize:theme.typography.size.s2-1,marginLeft:10})),hasMultipleThemes=themesList=>themesList.length>1,ThemeSwitcher=()=>{let{themeOverride}=(0,import_manager_api.useParameter)(PARAM_KEY,DEFAULT_THEME_PARAMETERS),[{theme:selected},updateGlobals]=(0,import_manager_api.useGlobals)(),[{themesList,themeDefault},updateState]=(0,import_manager_api.useAddonState)(THEME_SWITCHER_ID,DEFAULT_ADDON_STATE);(0,import_manager_api.useChannel)({[THEMING_EVENTS.REGISTER_THEMES]:({themes,defaultTheme})=>{updateState(state=>({...state,themesList:themes,themeDefault:defaultTheme}))}});let label=(0,import_react.useMemo)(()=>{if(themeOverride)return import_react.default.createElement(import_react.default.Fragment,null,"Story override");let themeName=selected||themeDefault;return themeName&&import_react.default.createElement(import_react.default.Fragment,null,`${themeName} theme`)},[themeOverride,themeDefault,selected]);return hasMultipleThemes(themesList)?import_react.default.createElement(import_react.Fragment,null,import_react.default.createElement(import_components.WithTooltip,{placement:"top",trigger:"click",closeOnClick:!0,tooltip:({onHide})=>import_react.default.createElement(import_components.TooltipLinkList,{links:themesList.map(theme=>({id:theme,title:theme,active:selected===theme,onClick:()=>{updateGlobals({theme}),onHide()}}))})},import_react.default.createElement(import_components.IconButton,{key:THEME_SWITCHER_ID,active:!themeOverride,title:"Theme"},import_react.default.createElement(import_components.Icons,{icon:"paintbrush"}),label&&import_react.default.createElement(IconButtonLabel,null,label)))):null};import_manager_api2.addons.register(ADDON_ID,()=>{import_manager_api2.addons.add(THEME_SWITCHER_ID,{title:"Themes",type:import_manager_api2.types.TOOL,match:({viewMode})=>!!(viewMode&&viewMode.match(/^(story|docs)$/)),render:ThemeSwitcher,paramKey:PARAM_KEY})});
@@ -0,0 +1,7 @@
1
+ import { ADDON_ID, THEME_SWITCHER_ID, PARAM_KEY, DEFAULT_THEME_PARAMETERS, DEFAULT_ADDON_STATE, THEMING_EVENTS } from './chunk-5PKFUQBM.mjs';
2
+ import { addons, types, useParameter, useGlobals, useAddonState, useChannel } from '@storybook/manager-api';
3
+ import React, { useMemo, Fragment } from 'react';
4
+ import { styled } from '@storybook/theming';
5
+ import { WithTooltip, TooltipLinkList, IconButton, Icons } from '@storybook/components';
6
+
7
+ var IconButtonLabel=styled.div(({theme})=>({fontSize:theme.typography.size.s2-1,marginLeft:10})),hasMultipleThemes=themesList=>themesList.length>1,ThemeSwitcher=()=>{let{themeOverride}=useParameter(PARAM_KEY,DEFAULT_THEME_PARAMETERS),[{theme:selected},updateGlobals]=useGlobals(),[{themesList,themeDefault},updateState]=useAddonState(THEME_SWITCHER_ID,DEFAULT_ADDON_STATE);useChannel({[THEMING_EVENTS.REGISTER_THEMES]:({themes,defaultTheme})=>{updateState(state=>({...state,themesList:themes,themeDefault:defaultTheme}));}});let label=useMemo(()=>{if(themeOverride)return React.createElement(React.Fragment,null,"Story override");let themeName=selected||themeDefault;return themeName&&React.createElement(React.Fragment,null,`${themeName} theme`)},[themeOverride,themeDefault,selected]);return hasMultipleThemes(themesList)?React.createElement(Fragment,null,React.createElement(WithTooltip,{placement:"top",trigger:"click",closeOnClick:!0,tooltip:({onHide})=>React.createElement(TooltipLinkList,{links:themesList.map(theme=>({id:theme,title:theme,active:selected===theme,onClick:()=>{updateGlobals({theme}),onHide();}}))})},React.createElement(IconButton,{key:THEME_SWITCHER_ID,active:!themeOverride,title:"Theme"},React.createElement(Icons,{icon:"paintbrush"}),label&&React.createElement(IconButtonLabel,null,label)))):null};addons.register(ADDON_ID,()=>{addons.add(THEME_SWITCHER_ID,{title:"Themes",type:types.TOOL,match:({viewMode})=>!!(viewMode&&viewMode.match(/^(story|docs)$/)),render:ThemeSwitcher,paramKey:PARAM_KEY});});
@@ -0,0 +1,5 @@
1
+ import { ProjectAnnotations, Renderer } from '@storybook/types';
2
+
3
+ declare const preview: ProjectAnnotations<Renderer>;
4
+
5
+ export { preview as default };
@@ -0,0 +1 @@
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var preview_exports={};__export(preview_exports,{default:()=>preview_default});module.exports=__toCommonJS(preview_exports);var PARAM_KEY="themes",ADDON_ID=`storybook/${PARAM_KEY}}`,GLOBAL_KEY="theme",THEME_SWITCHER_ID=`${ADDON_ID}/theme-switcher`;var THEMING_EVENTS={REGISTER_THEMES:`${ADDON_ID}/REGISTER_THEMES`};var preview={globals:{[GLOBAL_KEY]:""}},preview_default=preview;
@@ -0,0 +1,5 @@
1
+ import { GLOBAL_KEY } from './chunk-5PKFUQBM.mjs';
2
+
3
+ var preview={globals:{[GLOBAL_KEY]:""}},preview_default=preview;
4
+
5
+ export { preview_default as default };
package/jest.config.js ADDED
@@ -0,0 +1,7 @@
1
+ const path = require('path');
2
+ const baseConfig = require('../../jest.config.browser');
3
+
4
+ module.exports = {
5
+ ...baseConfig,
6
+ displayName: __dirname.split(path.sep).slice(-2).join(path.posix.sep),
7
+ };
package/manager.js ADDED
@@ -0,0 +1 @@
1
+ import './dist/manager';
package/package.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "@storybook/addon-themes",
3
+ "version": "0.0.0-pr-23609-sha-f47ef339",
4
+ "description": "Switch between multiple themes for you components in Storybook",
5
+ "keywords": [
6
+ "css",
7
+ "essentials",
8
+ "storybook-addon",
9
+ "storybook-addons",
10
+ "style",
11
+ "themes",
12
+ "toggle"
13
+ ],
14
+ "homepage": "https://github.com/storybookjs/storybook/tree/next/code/addons/themes",
15
+ "bugs": {
16
+ "url": "https://github.com/storybookjs/storybook/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/storybookjs/storybook.git",
21
+ "directory": "code/addons/themes"
22
+ },
23
+ "funding": {
24
+ "type": "opencollective",
25
+ "url": "https://opencollective.com/storybook"
26
+ },
27
+ "license": "MIT",
28
+ "author": "Shaun Evening",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "node": "./dist/index.js",
33
+ "require": "./dist/index.js",
34
+ "import": "./dist/index.mjs"
35
+ },
36
+ "./manager": {
37
+ "types": "./dist/manager.d.ts",
38
+ "require": "./dist/manager.js",
39
+ "import": "./dist/manager.mjs"
40
+ },
41
+ "./preview": {
42
+ "types": "./dist/preview.d.ts",
43
+ "require": "./dist/preview.js",
44
+ "import": "./dist/preview.mjs"
45
+ },
46
+ "./package.json": "./package.json"
47
+ },
48
+ "main": "dist/index.js",
49
+ "module": "dist/index.mjs",
50
+ "types": "dist/index.d.ts",
51
+ "typesVersions": {
52
+ "*": {
53
+ "*": [
54
+ "dist/index.d.ts"
55
+ ],
56
+ "manager": [
57
+ "dist/manager.d.ts"
58
+ ],
59
+ "preview": [
60
+ "dist/preview.d.ts"
61
+ ]
62
+ }
63
+ },
64
+ "files": [
65
+ "dist/**/*",
66
+ "README.md",
67
+ "*.js",
68
+ "*.d.ts"
69
+ ],
70
+ "scripts": {
71
+ "check": "../../../scripts/prepare/check.ts",
72
+ "prep": "../../../scripts/prepare/bundle.ts"
73
+ },
74
+ "dependencies": {
75
+ "@storybook/client-logger": "0.0.0-pr-23609-sha-f47ef339",
76
+ "@storybook/components": "0.0.0-pr-23609-sha-f47ef339",
77
+ "@storybook/core-events": "0.0.0-pr-23609-sha-f47ef339",
78
+ "@storybook/manager-api": "0.0.0-pr-23609-sha-f47ef339",
79
+ "@storybook/preview-api": "0.0.0-pr-23609-sha-f47ef339",
80
+ "@storybook/theming": "0.0.0-pr-23609-sha-f47ef339",
81
+ "@storybook/types": "0.0.0-pr-23609-sha-f47ef339",
82
+ "ts-dedent": "^2.0.0"
83
+ },
84
+ "devDependencies": {
85
+ "typescript": "~4.9.3"
86
+ },
87
+ "peerDependencies": {
88
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
89
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
90
+ },
91
+ "peerDependenciesMeta": {
92
+ "react": {
93
+ "optional": true
94
+ },
95
+ "react-dom": {
96
+ "optional": true
97
+ }
98
+ },
99
+ "publishConfig": {
100
+ "access": "public"
101
+ },
102
+ "bundler": {
103
+ "entries": [
104
+ "./src/index.ts",
105
+ "./src/manager.tsx",
106
+ "./src/preview.tsx"
107
+ ]
108
+ },
109
+ "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17",
110
+ "storybook": {
111
+ "displayName": "Themes",
112
+ "unsupportedFrameworks": [
113
+ "react-native"
114
+ ],
115
+ "icon": ""
116
+ }
117
+ }
package/preview.js ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/preview';