@storybook/preview-api 7.0.0-beta.6 → 7.0.0-beta.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/{ClientApi-eda085ef.d.ts → ClientApi-4bc526c1.d.ts} +2 -3
  2. package/dist/{StoryStore-e35dc2c4.d.ts → StoryStore-8dcb90f9.d.ts} +4 -3
  3. package/dist/addons.d.ts +1 -1
  4. package/dist/addons.js +4 -4
  5. package/dist/addons.mjs +1 -1
  6. package/dist/chunk-4LZCDZO3.mjs +13 -0
  7. package/dist/{chunk-Z6DHZWDG.mjs → chunk-BKCXGHBI.mjs} +8 -8
  8. package/dist/chunk-RTGEOU4B.mjs +3 -0
  9. package/dist/chunk-U6GFELHZ.mjs +39 -0
  10. package/dist/chunk-USD4AKPY.mjs +2 -0
  11. package/dist/client-api.d.ts +5 -5
  12. package/dist/client-api.js +24 -24
  13. package/dist/client-api.mjs +1 -1
  14. package/dist/{composeConfigs-7f62ebf7.d.ts → composeConfigs-62a04721.d.ts} +3 -1
  15. package/dist/core-client.d.ts +4 -4
  16. package/dist/core-client.js +31 -31
  17. package/dist/core-client.mjs +1 -1
  18. package/dist/{hooks-dd6bc7a8.d.ts → hooks-55c56a89.d.ts} +8 -8
  19. package/dist/index.d.ts +7 -7
  20. package/dist/index.js +38 -38
  21. package/dist/index.mjs +1 -1
  22. package/dist/preview-web.d.ts +4 -4
  23. package/dist/preview-web.js +24 -24
  24. package/dist/preview-web.mjs +1 -1
  25. package/dist/{DocsContext-b4bac20d.d.ts → simulate-pageload-49f3286c.d.ts} +55 -61
  26. package/dist/{sortStories-a93f5af2.d.ts → sortStories-bcf0764a.d.ts} +2 -2
  27. package/dist/{start-2e36077d.d.ts → start-62db31b6.d.ts} +1 -1
  28. package/dist/store.d.ts +4 -4
  29. package/dist/store.js +18 -18
  30. package/dist/store.mjs +1 -1
  31. package/package.json +9 -9
  32. package/dist/chunk-7WHOLHII.mjs +0 -39
  33. package/dist/chunk-ATCPQ4CW.mjs +0 -2
  34. package/dist/chunk-IHLRLYIL.mjs +0 -13
  35. package/dist/chunk-QSH26RWA.mjs +0 -3
@@ -1,6 +1,6 @@
1
1
  import * as _storybook_types from '@storybook/types';
2
2
  import { Renderer, NormalizedProjectAnnotations, StoryId, IndexEntry, ComponentId, Path, ModuleExports, DecoratorFunction, Parameters, LoaderFunction, Args, ArgTypes, ArgsEnhancer, ArgTypesEnhancer, StepRunner, ModuleImportFn, Globals, GlobalTypes, Addon_StoryApi } from '@storybook/types';
3
- import { S as StoryStore } from './StoryStore-e35dc2c4.js';
3
+ import { S as StoryStore } from './StoryStore-8dcb90f9.js';
4
4
 
5
5
  declare class StoryStoreFacade<TRenderer extends Renderer> {
6
6
  projectAnnotations: NormalizedProjectAnnotations<TRenderer>;
@@ -18,7 +18,6 @@ declare class StoryStoreFacade<TRenderer extends Renderer> {
18
18
  addStoriesFromExports(fileName: Path, fileExports: ModuleExports): void;
19
19
  }
20
20
 
21
- declare let singleton: ClientApi<Renderer>;
22
21
  declare const addDecorator: (decorator: DecoratorFunction<Renderer>) => void;
23
22
  declare const addParameters: (parameters: Parameters) => void;
24
23
  declare const addLoader: (loader: LoaderFunction<Renderer>) => void;
@@ -27,7 +26,7 @@ declare const addArgTypes: (argTypes: ArgTypes) => void;
27
26
  declare const addArgsEnhancer: (enhancer: ArgsEnhancer<Renderer>) => void;
28
27
  declare const addArgTypesEnhancer: (enhancer: ArgTypesEnhancer<Renderer>) => void;
29
28
  declare const addStepRunner: (stepRunner: StepRunner) => void;
30
- declare const setGlobalRender: (render: (typeof singleton)['facade']['projectAnnotations']['render']) => void;
29
+ declare const setGlobalRender: (render: StoryStoreFacade<any>['projectAnnotations']['render']) => void;
31
30
  declare class ClientApi<TRenderer extends Renderer> {
32
31
  facade: StoryStoreFacade<TRenderer>;
33
32
  storyStore?: StoryStore<TRenderer>;
@@ -1,7 +1,7 @@
1
1
  import * as _storybook_types from '@storybook/types';
2
- import { StoryId, StoryName, ComponentTitle, StoryIndex, IndexEntry, Path, Args, PreparedStory, Globals, GlobalTypes, Renderer, ModuleExports, CSFFile, NormalizedStoryAnnotations, NormalizedComponentAnnotations, NormalizedProjectAnnotations, ModuleImportFn, ProjectAnnotations, StoryContextForLoaders, StoryContextForEnhancers, Parameters, StoryIndexV3, API_PreparedStoryIndex, BoundStory } from '@storybook/types';
2
+ import { StoryId, StoryName, ComponentTitle, StoryIndex, IndexEntry, Path, Args, PreparedStory, Globals, GlobalTypes, Renderer, ModuleExports, CSFFile, NormalizedStoryAnnotations, NormalizedComponentAnnotations, NormalizedProjectAnnotations, ModuleExport, PreparedMeta, ModuleImportFn, ProjectAnnotations, StoryContextForLoaders, StoryContextForEnhancers, Parameters, StoryIndexV3, API_PreparedStoryIndex, BoundStory } from '@storybook/types';
3
3
  import { SynchronousPromise } from 'synchronous-promise';
4
- import { H as HooksContext } from './hooks-dd6bc7a8.js';
4
+ import { H as HooksContext } from './hooks-55c56a89.js';
5
5
 
6
6
  type StorySpecifier = StoryId | {
7
7
  name: StoryName;
@@ -46,6 +46,7 @@ declare class GlobalsStore {
46
46
  declare function processCSFFile<TRenderer extends Renderer>(moduleExports: ModuleExports, importPath: Path, title: ComponentTitle): CSFFile<TRenderer>;
47
47
 
48
48
  declare function prepareStory<TRenderer extends Renderer>(storyAnnotations: NormalizedStoryAnnotations<TRenderer>, componentAnnotations: NormalizedComponentAnnotations<TRenderer>, projectAnnotations: NormalizedProjectAnnotations<TRenderer>): PreparedStory<TRenderer>;
49
+ declare function prepareMeta<TRenderer extends Renderer>(componentAnnotations: NormalizedComponentAnnotations<TRenderer>, projectAnnotations: NormalizedProjectAnnotations<TRenderer>, moduleExport: ModuleExport): PreparedMeta<TRenderer>;
49
50
 
50
51
  declare class StoryStore<TRenderer extends Renderer> {
51
52
  storyIndex?: StoryIndexStore;
@@ -108,4 +109,4 @@ declare class StoryStore<TRenderer extends Renderer> {
108
109
  fromId(storyId: StoryId): BoundStory<TRenderer> | null;
109
110
  }
110
111
 
111
- export { StoryStore as S, StorySpecifier as a, processCSFFile as b, prepareStory as p };
112
+ export { StoryStore as S, prepareMeta as a, StorySpecifier as b, processCSFFile as c, prepareStory as p };
package/dist/addons.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { A as AddonStore, c as MakeDecoratorOptions, M as MakeDecoratorResult, a as addons, m as makeDecorator, b as mockChannel } from './storybook-channel-mock-a19cd233.js';
2
- export { E as EventMap, H as HooksContext, L as Listener, k as applyHooks, u as useArgs, a as useCallback, b as useChannel, c as useEffect, d as useGlobals, e as useMemo, f as useParameter, g as useReducer, h as useRef, i as useState, j as useStoryContext } from './hooks-dd6bc7a8.js';
2
+ export { E as EventMap, H as HooksContext, L as Listener, k as applyHooks, u as useArgs, a as useCallback, b as useChannel, c as useEffect, d as useGlobals, e as useMemo, f as useParameter, g as useReducer, h as useRef, i as useState, j as useStoryContext } from './hooks-55c56a89.js';
3
3
  import '@storybook/channels';
4
4
  import '@storybook/types';
package/dist/addons.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var L=Object.create;var p=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var U=(r,e)=>{for(var n in e)p(r,n,{get:e[n],enumerable:!0})},C=(r,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of _(e))!I.call(r,t)&&t!==n&&p(r,t,{get:()=>e[t],enumerable:!(o=P(e,t))||o.enumerable});return r};var A=(r,e,n)=>(n=r!=null?L(M(r)):{},C(e||!r||!r.__esModule?p(n,"default",{value:r,enumerable:!0}):n,r)),F=r=>C(p({},"__esModule",{value:!0}),r);var re={};U(re,{AddonStore:()=>S,HooksContext:()=>T,addons:()=>d,applyHooks:()=>Y,makeDecorator:()=>ee,mockChannel:()=>g,useArgs:()=>Q,useCallback:()=>f,useChannel:()=>V,useEffect:()=>N,useGlobals:()=>Z,useMemo:()=>W,useParameter:()=>J,useReducer:()=>q,useRef:()=>z,useState:()=>X,useStoryContext:()=>k});module.exports=F(re);var y=A(require("global"));var O=require("@storybook/channels");function g(){let r={setHandler:()=>{},send:()=>{}};return new O.Channel({transport:r})}var S=class{constructor(){this.getChannel=()=>{if(!this.channel){let e=g();return this.setChannel(e),e}return this.channel};this.getServerChannel=()=>{if(!this.serverChannel)throw new Error("Accessing non-existent serverChannel");return this.serverChannel};this.ready=()=>this.promise;this.hasChannel=()=>!!this.channel;this.hasServerChannel=()=>!!this.serverChannel;this.setChannel=e=>{this.channel=e,this.resolve()};this.setServerChannel=e=>{this.serverChannel=e};this.promise=new Promise(e=>{this.resolve=()=>e(this.getChannel())})}},v="__STORYBOOK_ADDONS_PREVIEW";function $(){return y.default[v]||(y.default[v]=new S),y.default[v]}var d=$();var l=A(require("global")),h=require("@storybook/client-logger"),i=require("@storybook/core-events");var T=class{constructor(){this.hookListsMap=void 0;this.mountedDecorators=void 0;this.prevMountedDecorators=void 0;this.currentHooks=void 0;this.nextHookIndex=void 0;this.currentPhase=void 0;this.currentEffects=void 0;this.prevEffects=void 0;this.currentDecoratorName=void 0;this.hasUpdates=void 0;this.currentContext=void 0;this.renderListener=e=>{var n;e===((n=this.currentContext)==null?void 0:n.id)&&(this.triggerEffects(),this.currentContext=null,this.removeRenderListeners())};this.init()}init(){this.hookListsMap=new WeakMap,this.mountedDecorators=new Set,this.prevMountedDecorators=this.mountedDecorators,this.currentHooks=[],this.nextHookIndex=0,this.currentPhase="NONE",this.currentEffects=[],this.prevEffects=[],this.currentDecoratorName=null,this.hasUpdates=!1,this.currentContext=null}clean(){this.prevEffects.forEach(e=>{e.destroy&&e.destroy()}),this.init(),this.removeRenderListeners()}getNextHook(){let e=this.currentHooks[this.nextHookIndex];return this.nextHookIndex+=1,e}triggerEffects(){this.prevEffects.forEach(e=>{!this.currentEffects.includes(e)&&e.destroy&&e.destroy()}),this.currentEffects.forEach(e=>{this.prevEffects.includes(e)||(e.destroy=e.create())}),this.prevEffects=this.currentEffects,this.currentEffects=[]}addRenderListeners(){this.removeRenderListeners(),d.getChannel().on(i.STORY_RENDERED,this.renderListener)}removeRenderListeners(){d.getChannel().removeListener(i.STORY_RENDERED,this.renderListener)}};function b(r){return(...e)=>{let{hooks:n}=typeof e[0]=="function"?e[1]:e[0],o=n.currentPhase,t=n.currentHooks,s=n.nextHookIndex,a=n.currentDecoratorName;n.currentDecoratorName=r.name,n.prevMountedDecorators.has(r)?(n.currentPhase="UPDATE",n.currentHooks=n.hookListsMap.get(r)||[]):(n.currentPhase="MOUNT",n.currentHooks=[],n.hookListsMap.set(r,n.currentHooks),n.prevMountedDecorators.add(r)),n.nextHookIndex=0;let c=l.default.STORYBOOK_HOOKS_CONTEXT;l.default.STORYBOOK_HOOKS_CONTEXT=n;let u=r(...e);if(l.default.STORYBOOK_HOOKS_CONTEXT=c,n.currentPhase==="UPDATE"&&n.getNextHook()!=null)throw new Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return n.currentPhase=o,n.currentHooks=t,n.nextHookIndex=s,n.currentDecoratorName=a,u}}var R=0,K=25,Y=r=>(e,n)=>{let o=r(b(e),n.map(t=>b(t)));return t=>{let{hooks:s}=t;s.prevMountedDecorators=s.mountedDecorators,s.mountedDecorators=new Set([e,...n]),s.currentContext=t,s.hasUpdates=!1;let a=o(t);for(R=1;s.hasUpdates;)if(s.hasUpdates=!1,s.currentEffects=[],a=o(t),R+=1,R>K)throw new Error("Too many re-renders. Storybook limits the number of renders to prevent an infinite loop.");return s.addRenderListeners(),a}},B=(r,e)=>r.length===e.length&&r.every((n,o)=>n===e[o]),E=()=>new Error("Storybook preview hooks can only be called inside decorators and story functions.");function D(){return l.default.STORYBOOK_HOOKS_CONTEXT||null}function x(){let r=D();if(r==null)throw E();return r}function G(r,e,n){let o=x();if(o.currentPhase==="MOUNT"){n!=null&&!Array.isArray(n)&&h.logger.warn(`${r} received a final argument that is not an array (instead, received ${n}). When specified, the final argument must be an array.`);let t={name:r,deps:n};return o.currentHooks.push(t),e(t),t}if(o.currentPhase==="UPDATE"){let t=o.getNextHook();if(t==null)throw new Error("Rendered more hooks than during the previous render.");return t.name!==r&&h.logger.warn(`Storybook has detected a change in the order of Hooks${o.currentDecoratorName?` called by ${o.currentDecoratorName}`:""}. This will lead to bugs and errors if not fixed.`),n!=null&&t.deps==null&&h.logger.warn(`${r} received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.`),n!=null&&t.deps!=null&&n.length!==t.deps.length&&h.logger.warn(`The final argument passed to ${r} changed size between renders. The order and size of this array must remain constant.
2
- Previous: ${t.deps}
3
- Incoming: ${n}`),(n==null||t.deps==null||!B(n,t.deps))&&(e(t),t.deps=n),t}throw E()}function m(r,e,n){let{memoizedState:o}=G(r,t=>{t.memoizedState=e()},n);return o}function W(r,e){return m("useMemo",r,e)}function f(r,e){return m("useCallback",()=>r,e)}function H(r,e){return m(r,()=>({current:e}),[])}function z(r){return H("useRef",r)}function j(){let r=D();if(r!=null&&r.currentPhase!=="NONE")r.hasUpdates=!0;else try{d.getChannel().emit(i.FORCE_RE_RENDER)}catch{h.logger.warn("State updates of Storybook preview hooks work only in browser")}}function w(r,e){let n=H(r,typeof e=="function"?e():e),o=t=>{n.current=typeof t=="function"?t(n.current):t,j()};return[n.current,o]}function X(r){return w("useState",r)}function q(r,e,n){let o=n!=null?()=>n(e):e,[t,s]=w("useReducer",o);return[t,c=>s(u=>r(u,c))]}function N(r,e){let n=x(),o=m("useEffect",()=>({create:r}),e);n.currentEffects.includes(o)||n.currentEffects.push(o)}function V(r,e=[]){let n=d.getChannel();return N(()=>(Object.entries(r).forEach(([o,t])=>n.on(o,t)),()=>{Object.entries(r).forEach(([o,t])=>n.removeListener(o,t))}),[...Object.keys(r),...e]),f(n.emit.bind(n),[n])}function k(){let{currentContext:r}=x();if(r==null)throw E();return r}function J(r,e){let{parameters:n}=k();if(r)return n[r]??e}function Q(){let r=d.getChannel(),{id:e,args:n}=k(),o=f(s=>r.emit(i.UPDATE_STORY_ARGS,{storyId:e,updatedArgs:s}),[r,e]),t=f(s=>r.emit(i.RESET_STORY_ARGS,{storyId:e,argNames:s}),[r,e]);return[n,o,t]}function Z(){let r=d.getChannel(),{globals:e}=k(),n=f(o=>r.emit(i.UPDATE_GLOBALS,{globals:o}),[r]);return[e,n]}var ee=({name:r,parameterName:e,wrapper:n,skipIfNoParametersOrOptions:o=!1})=>{let t=s=>(a,c)=>{let u=c.parameters&&c.parameters[e];return u&&u.disable||o&&!s&&!u?a(c):n(a,c,{options:s,parameters:u})};return(...s)=>typeof s[0]=="function"?t()(...s):(...a)=>{if(a.length>1)return s.length>1?t(s)(...a):t(...s)(...a);throw new Error(`Passing stories directly into ${r}() is not allowed,
4
- instead use addDecorator(${r}) and pass options with the '${e}' parameter`)}};0&&(module.exports={AddonStore,HooksContext,addons,applyHooks,makeDecorator,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext});
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 addons_exports={};__export(addons_exports,{AddonStore:()=>AddonStore,HooksContext:()=>HooksContext,addons:()=>addons,applyHooks:()=>applyHooks,makeDecorator:()=>makeDecorator,mockChannel:()=>mockChannel,useArgs:()=>useArgs,useCallback:()=>useCallback,useChannel:()=>useChannel,useEffect:()=>useEffect,useGlobals:()=>useGlobals,useMemo:()=>useMemo,useParameter:()=>useParameter,useReducer:()=>useReducer,useRef:()=>useRef,useState:()=>useState,useStoryContext:()=>useStoryContext});module.exports=__toCommonJS(addons_exports);var import_global=require("@storybook/global");var import_channels=require("@storybook/channels");function mockChannel(){let transport={setHandler:()=>{},send:()=>{}};return new import_channels.Channel({transport})}var AddonStore=class{constructor(){this.getChannel=()=>{if(!this.channel){let channel=mockChannel();return this.setChannel(channel),channel}return this.channel};this.getServerChannel=()=>{if(!this.serverChannel)throw new Error("Accessing non-existent serverChannel");return this.serverChannel};this.ready=()=>this.promise;this.hasChannel=()=>!!this.channel;this.hasServerChannel=()=>!!this.serverChannel;this.setChannel=channel=>{this.channel=channel,this.resolve()};this.setServerChannel=channel=>{this.serverChannel=channel};this.promise=new Promise(res=>{this.resolve=()=>res(this.getChannel())})}},KEY="__STORYBOOK_ADDONS_PREVIEW";function getAddonsStore(){return import_global.global[KEY]||(import_global.global[KEY]=new AddonStore),import_global.global[KEY]}var addons=getAddonsStore();var import_global2=require("@storybook/global"),import_client_logger=require("@storybook/client-logger"),import_core_events=require("@storybook/core-events");var HooksContext=class{constructor(){this.hookListsMap=void 0;this.mountedDecorators=void 0;this.prevMountedDecorators=void 0;this.currentHooks=void 0;this.nextHookIndex=void 0;this.currentPhase=void 0;this.currentEffects=void 0;this.prevEffects=void 0;this.currentDecoratorName=void 0;this.hasUpdates=void 0;this.currentContext=void 0;this.renderListener=storyId=>{var _a;storyId===((_a=this.currentContext)==null?void 0:_a.id)&&(this.triggerEffects(),this.currentContext=null,this.removeRenderListeners())};this.init()}init(){this.hookListsMap=new WeakMap,this.mountedDecorators=new Set,this.prevMountedDecorators=this.mountedDecorators,this.currentHooks=[],this.nextHookIndex=0,this.currentPhase="NONE",this.currentEffects=[],this.prevEffects=[],this.currentDecoratorName=null,this.hasUpdates=!1,this.currentContext=null}clean(){this.prevEffects.forEach(effect=>{effect.destroy&&effect.destroy()}),this.init(),this.removeRenderListeners()}getNextHook(){let hook=this.currentHooks[this.nextHookIndex];return this.nextHookIndex+=1,hook}triggerEffects(){this.prevEffects.forEach(effect=>{!this.currentEffects.includes(effect)&&effect.destroy&&effect.destroy()}),this.currentEffects.forEach(effect=>{this.prevEffects.includes(effect)||(effect.destroy=effect.create())}),this.prevEffects=this.currentEffects,this.currentEffects=[]}addRenderListeners(){this.removeRenderListeners(),addons.getChannel().on(import_core_events.STORY_RENDERED,this.renderListener)}removeRenderListeners(){addons.getChannel().removeListener(import_core_events.STORY_RENDERED,this.renderListener)}};function hookify(fn){return(...args)=>{let{hooks}=typeof args[0]=="function"?args[1]:args[0],prevPhase=hooks.currentPhase,prevHooks=hooks.currentHooks,prevNextHookIndex=hooks.nextHookIndex,prevDecoratorName=hooks.currentDecoratorName;hooks.currentDecoratorName=fn.name,hooks.prevMountedDecorators.has(fn)?(hooks.currentPhase="UPDATE",hooks.currentHooks=hooks.hookListsMap.get(fn)||[]):(hooks.currentPhase="MOUNT",hooks.currentHooks=[],hooks.hookListsMap.set(fn,hooks.currentHooks),hooks.prevMountedDecorators.add(fn)),hooks.nextHookIndex=0;let prevContext=import_global2.global.STORYBOOK_HOOKS_CONTEXT;import_global2.global.STORYBOOK_HOOKS_CONTEXT=hooks;let result=fn(...args);if(import_global2.global.STORYBOOK_HOOKS_CONTEXT=prevContext,hooks.currentPhase==="UPDATE"&&hooks.getNextHook()!=null)throw new Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return hooks.currentPhase=prevPhase,hooks.currentHooks=prevHooks,hooks.nextHookIndex=prevNextHookIndex,hooks.currentDecoratorName=prevDecoratorName,result}}var numberOfRenders=0,RENDER_LIMIT=25,applyHooks=applyDecorators=>(storyFn,decorators)=>{let decorated=applyDecorators(hookify(storyFn),decorators.map(decorator=>hookify(decorator)));return context=>{let{hooks}=context;hooks.prevMountedDecorators=hooks.mountedDecorators,hooks.mountedDecorators=new Set([storyFn,...decorators]),hooks.currentContext=context,hooks.hasUpdates=!1;let result=decorated(context);for(numberOfRenders=1;hooks.hasUpdates;)if(hooks.hasUpdates=!1,hooks.currentEffects=[],result=decorated(context),numberOfRenders+=1,numberOfRenders>RENDER_LIMIT)throw new Error("Too many re-renders. Storybook limits the number of renders to prevent an infinite loop.");return hooks.addRenderListeners(),result}},areDepsEqual=(deps,nextDeps)=>deps.length===nextDeps.length&&deps.every((dep,i)=>dep===nextDeps[i]),invalidHooksError=()=>new Error("Storybook preview hooks can only be called inside decorators and story functions.");function getHooksContextOrNull(){return import_global2.global.STORYBOOK_HOOKS_CONTEXT||null}function getHooksContextOrThrow(){let hooks=getHooksContextOrNull();if(hooks==null)throw invalidHooksError();return hooks}function useHook(name,callback,deps){let hooks=getHooksContextOrThrow();if(hooks.currentPhase==="MOUNT"){deps!=null&&!Array.isArray(deps)&&import_client_logger.logger.warn(`${name} received a final argument that is not an array (instead, received ${deps}). When specified, the final argument must be an array.`);let hook={name,deps};return hooks.currentHooks.push(hook),callback(hook),hook}if(hooks.currentPhase==="UPDATE"){let hook=hooks.getNextHook();if(hook==null)throw new Error("Rendered more hooks than during the previous render.");return hook.name!==name&&import_client_logger.logger.warn(`Storybook has detected a change in the order of Hooks${hooks.currentDecoratorName?` called by ${hooks.currentDecoratorName}`:""}. This will lead to bugs and errors if not fixed.`),deps!=null&&hook.deps==null&&import_client_logger.logger.warn(`${name} received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.`),deps!=null&&hook.deps!=null&&deps.length!==hook.deps.length&&import_client_logger.logger.warn(`The final argument passed to ${name} changed size between renders. The order and size of this array must remain constant.
2
+ Previous: ${hook.deps}
3
+ Incoming: ${deps}`),(deps==null||hook.deps==null||!areDepsEqual(deps,hook.deps))&&(callback(hook),hook.deps=deps),hook}throw invalidHooksError()}function useMemoLike(name,nextCreate,deps){let{memoizedState}=useHook(name,hook=>{hook.memoizedState=nextCreate()},deps);return memoizedState}function useMemo(nextCreate,deps){return useMemoLike("useMemo",nextCreate,deps)}function useCallback(callback,deps){return useMemoLike("useCallback",()=>callback,deps)}function useRefLike(name,initialValue){return useMemoLike(name,()=>({current:initialValue}),[])}function useRef(initialValue){return useRefLike("useRef",initialValue)}function triggerUpdate(){let hooks=getHooksContextOrNull();if(hooks!=null&&hooks.currentPhase!=="NONE")hooks.hasUpdates=!0;else try{addons.getChannel().emit(import_core_events.FORCE_RE_RENDER)}catch{import_client_logger.logger.warn("State updates of Storybook preview hooks work only in browser")}}function useStateLike(name,initialState){let stateRef=useRefLike(name,typeof initialState=="function"?initialState():initialState),setState=update=>{stateRef.current=typeof update=="function"?update(stateRef.current):update,triggerUpdate()};return[stateRef.current,setState]}function useState(initialState){return useStateLike("useState",initialState)}function useReducer(reducer,initialArg,init){let initialState=init!=null?()=>init(initialArg):initialArg,[state,setState]=useStateLike("useReducer",initialState);return[state,action=>setState(prevState=>reducer(prevState,action))]}function useEffect(create,deps){let hooks=getHooksContextOrThrow(),effect=useMemoLike("useEffect",()=>({create}),deps);hooks.currentEffects.includes(effect)||hooks.currentEffects.push(effect)}function useChannel(eventMap,deps=[]){let channel=addons.getChannel();return useEffect(()=>(Object.entries(eventMap).forEach(([type,listener])=>channel.on(type,listener)),()=>{Object.entries(eventMap).forEach(([type,listener])=>channel.removeListener(type,listener))}),[...Object.keys(eventMap),...deps]),useCallback(channel.emit.bind(channel),[channel])}function useStoryContext(){let{currentContext}=getHooksContextOrThrow();if(currentContext==null)throw invalidHooksError();return currentContext}function useParameter(parameterKey,defaultValue){let{parameters}=useStoryContext();if(parameterKey)return parameters[parameterKey]??defaultValue}function useArgs(){let channel=addons.getChannel(),{id:storyId,args}=useStoryContext(),updateArgs=useCallback(updatedArgs=>channel.emit(import_core_events.UPDATE_STORY_ARGS,{storyId,updatedArgs}),[channel,storyId]),resetArgs=useCallback(argNames=>channel.emit(import_core_events.RESET_STORY_ARGS,{storyId,argNames}),[channel,storyId]);return[args,updateArgs,resetArgs]}function useGlobals(){let channel=addons.getChannel(),{globals}=useStoryContext(),updateGlobals=useCallback(newGlobals=>channel.emit(import_core_events.UPDATE_GLOBALS,{globals:newGlobals}),[channel]);return[globals,updateGlobals]}var makeDecorator=({name,parameterName,wrapper,skipIfNoParametersOrOptions=!1})=>{let decorator=options=>(storyFn,context)=>{let parameters=context.parameters&&context.parameters[parameterName];return parameters&&parameters.disable||skipIfNoParametersOrOptions&&!options&&!parameters?storyFn(context):wrapper(storyFn,context,{options,parameters})};return(...args)=>typeof args[0]=="function"?decorator()(...args):(...innerArgs)=>{if(innerArgs.length>1)return args.length>1?decorator(args)(...innerArgs):decorator(...args)(...innerArgs);throw new Error(`Passing stories directly into ${name}() is not allowed,
4
+ instead use addDecorator(${name}) and pass options with the '${parameterName}' parameter`)}};0&&(module.exports={AddonStore,HooksContext,addons,applyHooks,makeDecorator,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext});
package/dist/addons.mjs CHANGED
@@ -1 +1 @@
1
- import{makeDecorator}from"./chunk-GRRYLBAT.mjs";import{AddonStore,HooksContext,addons,applyHooks,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext}from"./chunk-QSH26RWA.mjs";export{AddonStore,HooksContext,addons,applyHooks,makeDecorator,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext};
1
+ import{makeDecorator}from"./chunk-GRRYLBAT.mjs";import{AddonStore,HooksContext,addons,applyHooks,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext}from"./chunk-RTGEOU4B.mjs";export{AddonStore,HooksContext,addons,applyHooks,makeDecorator,mockChannel,useArgs,useCallback,useChannel,useEffect,useGlobals,useMemo,useParameter,useReducer,useRef,useState,useStoryContext};
@@ -0,0 +1,13 @@
1
+ import{combineParameters,composeStepRunners,normalizeInputTypes,sortStoriesV6,userOrAutoTitle}from"./chunk-U6GFELHZ.mjs";import{dedent as dedent2}from"ts-dedent";import{global as global2}from"@storybook/global";import{logger as logger2}from"@storybook/client-logger";import{toId as toId2,sanitize}from"@storybook/csf";import{global}from"@storybook/global";import{dedent}from"ts-dedent";import{SynchronousPromise}from"synchronous-promise";import{toId,isExportStory,storyNameFromExport}from"@storybook/csf";import{logger}from"@storybook/client-logger";var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",StoryStoreFacade=class{constructor(){this.projectAnnotations={loaders:[],decorators:[],parameters:{},argsEnhancers:[],argTypesEnhancers:[],args:{},argTypes:{}},this.entries={},this.csfExports={}}importFn(path){return SynchronousPromise.resolve().then(()=>{let moduleExports=this.csfExports[path];if(!moduleExports)throw new Error(`Unknown path: ${path}`);return moduleExports})}getStoryIndex(store){let fileNameOrder=Object.keys(this.csfExports),storySortParameter=this.projectAnnotations.parameters?.options?.storySort,sortableV6=Object.entries(this.entries).map(([storyId,{type,importPath,...entry}])=>{let exports=this.csfExports[importPath],csfFile=store.processCSFFileWithCache(exports,importPath,exports.default.title),storyLike;return type==="story"?storyLike=store.storyFromCSFFile({storyId,csfFile}):storyLike={...entry,story:entry.name,kind:entry.title,componentId:toId(entry.componentId||entry.title),parameters:{fileName:importPath}},[storyId,storyLike,csfFile.meta.parameters,this.projectAnnotations.parameters||{}]}),sortedV7;try{sortedV7=sortStoriesV6(sortableV6,storySortParameter,fileNameOrder)}catch(err){throw typeof storySortParameter=="function"?new Error(dedent`
2
+ Error sorting stories with sort parameter ${storySortParameter}:
3
+
4
+ > ${err.message}
5
+
6
+ Are you using a V7-style sort function in V6 compatibility mode?
7
+
8
+ More info: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#v7-style-story-sort
9
+ `):err}return{v:4,entries:sortedV7.reduce((acc,s)=>(acc[s.id]=this.entries[s.id],acc),{})}}clearFilenameExports(fileName){this.csfExports[fileName]&&(Object.entries(this.entries).forEach(([id,{importPath}])=>{importPath===fileName&&delete this.entries[id]}),this.csfExports[fileName]={})}addStoriesFromExports(fileName,fileExports){if(fileName.match(/\.mdx$/)&&!fileName.match(/\.stories\.mdx$/)||this.csfExports[fileName]===fileExports)return;this.clearFilenameExports(fileName);let{default:defaultExport,__namedExportsOrder,...namedExports}=fileExports,{id:componentId,title,tags:componentTags=[]}=defaultExport||{},specifiers=(global.STORIES||[]).map(specifier=>({...specifier,importPathMatcher:new RegExp(specifier.importPathMatcher)}));if(title=userOrAutoTitle(fileName,specifiers,title),!title){logger.info(`Unexpected default export without title in '${fileName}': ${JSON.stringify(fileExports.default)}`);return}this.csfExports[fileName]={...fileExports,default:{...defaultExport,title}};let sortedExports=namedExports;Array.isArray(__namedExportsOrder)&&(sortedExports={},__namedExportsOrder.forEach(name=>{let namedExport=namedExports[name];namedExport&&(sortedExports[name]=namedExport)}));let storyExports=Object.entries(sortedExports).filter(([key])=>isExportStory(key,defaultExport)),docsOptions=global.DOCS_OPTIONS||{},{autodocs}=docsOptions,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(storyExports.length&&(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn)){let name=docsOptions.defaultName,docsId=toId(componentId||title,name);this.entries[docsId]={type:"docs",id:docsId,title,name,importPath:fileName,...componentId&&{componentId},tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]}}storyExports.forEach(([key,storyExport])=>{let exportName=storyNameFromExport(key),id=storyExport.parameters?.__id||toId(componentId||title,exportName),name=typeof storyExport!="function"&&storyExport.name||storyExport.storyName||storyExport.story?.name||exportName;storyExport.parameters?.docsOnly||(this.entries[id]={type:"story",id,name,title,importPath:fileName,...componentId&&{componentId},tags:[...storyExport.tags||componentTags,"story"]})})}};var warningAlternatives={addDecorator:"Instead, use `export const decorators = [];` in your `preview.js`.",addParameters:"Instead, use `export const parameters = {};` in your `preview.js`.",addLoader:"Instead, use `export const loaders = [];` in your `preview.js`.",addArgs:"",addArgTypes:"",addArgsEnhancer:"",addArgTypesEnhancer:"",addStepRunner:"",getGlobalRender:"",setGlobalRender:""},checkMethod=method=>{if(global2.FEATURES?.storyStoreV7)throw new Error(dedent2`You cannot use \`${method}\` with the new Story Store.
10
+
11
+ ${warningAlternatives[method]}`);if(!global2.__STORYBOOK_CLIENT_API__)throw new Error(`Singleton client API not yet initialized, cannot call \`${method}\`.`)},addDecorator=decorator=>{checkMethod("addDecorator"),global2.__STORYBOOK_CLIENT_API__?.addDecorator(decorator)},addParameters=parameters=>{checkMethod("addParameters"),global2.__STORYBOOK_CLIENT_API__?.addParameters(parameters)},addLoader=loader=>{checkMethod("addLoader"),global2.__STORYBOOK_CLIENT_API__?.addLoader(loader)},addArgs=args=>{checkMethod("addArgs"),global2.__STORYBOOK_CLIENT_API__?.addArgs(args)},addArgTypes=argTypes=>{checkMethod("addArgTypes"),global2.__STORYBOOK_CLIENT_API__?.addArgTypes(argTypes)},addArgsEnhancer=enhancer=>{checkMethod("addArgsEnhancer"),global2.__STORYBOOK_CLIENT_API__?.addArgsEnhancer(enhancer)},addArgTypesEnhancer=enhancer=>{checkMethod("addArgTypesEnhancer"),global2.__STORYBOOK_CLIENT_API__?.addArgTypesEnhancer(enhancer)},addStepRunner=stepRunner=>{checkMethod("addStepRunner"),global2.__STORYBOOK_CLIENT_API__?.addStepRunner(stepRunner)};var setGlobalRender=render=>{checkMethod("setGlobalRender"),global2.__STORYBOOK_CLIENT_API__&&(global2.__STORYBOOK_CLIENT_API__.facade.projectAnnotations.render=render)},invalidStoryTypes=new Set(["string","number","boolean","symbol"]),ClientApi=class{constructor({storyStore}={}){this.lastFileName=0;this.addDecorator=decorator=>{this.facade.projectAnnotations.decorators?.push(decorator)};this.addParameters=({globals,globalTypes,...parameters})=>{this.facade.projectAnnotations.parameters=combineParameters(this.facade.projectAnnotations.parameters,parameters),globals&&(this.facade.projectAnnotations.globals={...this.facade.projectAnnotations.globals,...globals}),globalTypes&&(this.facade.projectAnnotations.globalTypes={...this.facade.projectAnnotations.globalTypes,...normalizeInputTypes(globalTypes)})};this.addStepRunner=stepRunner=>{this.facade.projectAnnotations.runStep=composeStepRunners([this.facade.projectAnnotations.runStep,stepRunner].filter(Boolean))};this.addLoader=loader=>{this.facade.projectAnnotations.loaders?.push(loader)};this.addArgs=args=>{this.facade.projectAnnotations.args={...this.facade.projectAnnotations.args,...args}};this.addArgTypes=argTypes=>{this.facade.projectAnnotations.argTypes={...this.facade.projectAnnotations.argTypes,...normalizeInputTypes(argTypes)}};this.addArgsEnhancer=enhancer=>{this.facade.projectAnnotations.argsEnhancers?.push(enhancer)};this.addArgTypesEnhancer=enhancer=>{this.facade.projectAnnotations.argTypesEnhancers?.push(enhancer)};this._addedExports={};this.storiesOf=(kind,m)=>{if(!kind&&typeof kind!="string")throw new Error("Invalid or missing kind provided for stories, should be a string");if(m||logger2.warn(`Missing 'module' parameter for story with a kind of '${kind}'. It will break your HMR`),m){let proto=Object.getPrototypeOf(m);proto.exports&&proto.exports.default&&logger2.error(`Illegal mix of CSF default export and storiesOf calls in a single file: ${proto.i}`)}let baseFilename=m&&m.id?`${m.id}`:(this.lastFileName++).toString(),fileName=baseFilename,i=1;for(;this._addedExports[fileName];)i+=1,fileName=`${baseFilename}-${i}`;m&&m.hot&&m.hot.accept&&(m.hot.accept(),m.hot.dispose(()=>{this.facade.clearFilenameExports(fileName),delete this._addedExports[fileName],setTimeout(()=>{this._loadAddedExports(),this.onImportFnChanged?.({importFn:this.importFn.bind(this)})},0)}));let hasAdded=!1,api={kind:kind.toString(),add:()=>api,addDecorator:()=>api,addLoader:()=>api,addParameters:()=>api};Object.keys(this.addons).forEach(name=>{let addon=this.addons[name];api[name]=(...args)=>(addon.apply(api,args),api)});let meta={id:sanitize(kind),title:kind,decorators:[],loaders:[],parameters:{}};this._addedExports[fileName]={default:meta};let counter=0;return api.add=(storyName,storyFn,parameters={})=>{if(hasAdded=!0,typeof storyName!="string")throw new Error(`Invalid or missing storyName provided for a "${kind}" story.`);if(!storyFn||Array.isArray(storyFn)||invalidStoryTypes.has(typeof storyFn))throw new Error(`Cannot load story "${storyName}" in "${kind}" due to invalid format. Storybook expected a function/object but received ${typeof storyFn} instead.`);let{decorators,loaders,component,args,argTypes,...storyParameters}=parameters,storyId=parameters.__id||toId2(kind,storyName),csfExports=this._addedExports[fileName];return csfExports[`story${counter}`]={name:storyName,parameters:{fileName,__id:storyId,...storyParameters},decorators,loaders,args,argTypes,component,render:storyFn},counter+=1,api},api.addDecorator=decorator=>{if(hasAdded)throw new Error(`You cannot add a decorator after the first story for a kind.
12
+ Read more here: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#can-no-longer-add-decoratorsparameters-after-stories`);return meta.decorators?.push(decorator),api},api.addLoader=loader=>{if(hasAdded)throw new Error("You cannot add a loader after the first story for a kind.");return meta.loaders?.push(loader),api},api.addParameters=({component,args,argTypes,tags,...parameters})=>{if(hasAdded)throw new Error(`You cannot add parameters after the first story for a kind.
13
+ Read more here: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#can-no-longer-add-decoratorsparameters-after-stories`);return meta.parameters=combineParameters(meta.parameters,parameters),component&&(meta.component=component),args&&(meta.args={...meta.args,...args}),argTypes&&(meta.argTypes={...meta.argTypes,...argTypes}),tags&&(meta.tags=tags),api},api};this.raw=()=>this.storyStore?.raw();this.facade=new StoryStoreFacade,this.addons={},this.storyStore=storyStore}importFn(path){return this.facade.importFn(path)}getStoryIndex(){if(!this.storyStore)throw new Error("Cannot get story index before setting storyStore");return this.facade.getStoryIndex(this.storyStore)}_loadAddedExports(){Object.entries(this._addedExports).forEach(([fileName,fileExports])=>this.facade.addStoriesFromExports(fileName,fileExports))}get _storyStore(){return this.storyStore}};import{global as global3}from"@storybook/global";import{parse}from"qs";var getQueryParams=()=>{let{document}=global3;return document&&document.location&&document.location.search?parse(document.location.search,{ignoreQueryPrefix:!0}):{}},getQueryParam=key=>getQueryParams()[key];export{addDecorator,addParameters,addLoader,addArgs,addArgTypes,addArgsEnhancer,addArgTypesEnhancer,addStepRunner,setGlobalRender,ClientApi,getQueryParams,getQueryParam};