@storybook/preview-api 8.0.0-alpha.8 → 8.0.0-beta.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.ts CHANGED
@@ -1,35 +1,16 @@
1
1
  import { Channel } from '@storybook/channels';
2
2
  import * as _storybook_types from '@storybook/types';
3
- import { Renderer, Args, StoryContext, StoryId, DecoratorApplicator, Addon_StoryWrapper, StoryName, ComponentTitle, StoryIndex, IndexEntry, Path, PreparedStory, Globals, GlobalTypes, LegacyStoryAnnotationsOrFn, NormalizedComponentAnnotations, NormalizedStoryAnnotations, ModuleExports, CSFFile, NormalizedProjectAnnotations, ModuleExport, PreparedMeta, ProjectAnnotations, StepRunner, ComponentAnnotations, ComposedStoryFn, Store_CSFExports, ComposeStoryFn, ModuleImportFn, StoryContextForLoaders, StoryContextForEnhancers, Parameters, StoryIndexV3, API_PreparedStoryIndex, BoundStory, StrictArgTypes, ArgTypesEnhancer, LegacyStoryFn, DecoratorFunction, PartialStoryFn, StoryContextUpdate, NormalizedStoriesSpecifier, Addon_StorySortParameterV7, StoryRenderOptions, ViewMode, RenderToCanvas, RenderContextCallbacks, DocsContextProps, ResolvedModuleExportType, ResolvedModuleExportFromType, ComponentId, LoaderFunction, ArgTypes, ArgsEnhancer, ArgsStoryFn } from '@storybook/types';
4
- import { SynchronousPromise } from 'synchronous-promise';
5
- import * as qs$1 from 'qs';
6
- import qs__default from 'qs';
3
+ import { Renderer, Args, StoryContext, StoryId, DecoratorApplicator, Addon_StoryWrapper, StoryName, ComponentTitle, StoryIndex, IndexEntry, Path, PreparedStory, Globals, GlobalTypes, LegacyStoryAnnotationsOrFn, NormalizedComponentAnnotations, NormalizedStoryAnnotations, ModuleExports, CSFFile, NormalizedProjectAnnotations, ModuleExport, PreparedMeta, ProjectAnnotations, StepRunner, ComponentAnnotations, ComposedStoryFn, Store_CSFExports, ComposeStoryFn, ModuleImportFn, StoryContextForLoaders, StoryContextForEnhancers, Parameters, StoryIndexV3, BoundStory, StrictArgTypes, ArgTypesEnhancer, LegacyStoryFn, DecoratorFunction, PartialStoryFn, StoryContextUpdate, NormalizedStoriesSpecifier, Addon_StorySortParameterV7, StoryRenderOptions, ViewMode, RenderToCanvas, RenderContextCallbacks, DocsContextProps, ResolvedModuleExportType, ResolvedModuleExportFromType } from '@storybook/types';
7
4
 
8
5
  declare class AddonStore {
9
6
  constructor();
10
7
  private channel;
11
- /**
12
- * @deprecated will be removed in 8.0, please use channel instead
13
- */
14
- private serverChannel;
15
8
  private promise;
16
9
  private resolve;
17
10
  getChannel: () => Channel;
18
- /**
19
- * @deprecated will be removed in 8.0, please use getChannel instead
20
- */
21
- getServerChannel: () => Channel;
22
11
  ready: () => Promise<Channel>;
23
12
  hasChannel: () => boolean;
24
- /**
25
- * @deprecated will be removed in 8.0, please use the normal channel instead
26
- */
27
- hasServerChannel: () => boolean;
28
13
  setChannel: (channel: Channel) => void;
29
- /**
30
- * @deprecated will be removed in 8.0, please use the normal channel instead
31
- */
32
- setServerChannel: (channel: Channel) => void;
33
14
  }
34
15
  declare const addons: AddonStore;
35
16
 
@@ -355,25 +336,18 @@ declare function composeStory<TRenderer extends Renderer = Renderer, TArgs exten
355
336
  declare function composeStories<TModule extends Store_CSFExports>(storiesImport: TModule, globalConfig: ProjectAnnotations<Renderer>, composeStoryFn: ComposeStoryFn): {};
356
337
 
357
338
  declare class StoryStore<TRenderer extends Renderer> {
358
- storyIndex?: StoryIndexStore;
359
- importFn?: ModuleImportFn;
360
- projectAnnotations?: NormalizedProjectAnnotations<TRenderer>;
361
- globals?: GlobalsStore;
339
+ importFn: ModuleImportFn;
340
+ storyIndex: StoryIndexStore;
341
+ projectAnnotations: NormalizedProjectAnnotations<TRenderer>;
342
+ globals: GlobalsStore;
362
343
  args: ArgsStore;
363
344
  hooks: Record<StoryId, HooksContext<TRenderer>>;
364
345
  cachedCSFFiles?: Record<Path, CSFFile<TRenderer>>;
365
346
  processCSFFileWithCache: typeof processCSFFile;
366
347
  prepareMetaWithCache: typeof prepareMeta;
367
348
  prepareStoryWithCache: typeof prepareStory;
368
- initializationPromise: SynchronousPromise<void>;
369
- resolveInitializationPromise: () => void;
370
- constructor();
349
+ constructor(storyIndex: StoryIndex, importFn: ModuleImportFn, projectAnnotations: ProjectAnnotations<TRenderer>);
371
350
  setProjectAnnotations(projectAnnotations: ProjectAnnotations<TRenderer>): void;
372
- initialize({ storyIndex, importFn, cache, }: {
373
- storyIndex?: StoryIndex;
374
- importFn: ModuleImportFn;
375
- cache?: boolean;
376
- }): Promise<void>;
377
351
  onStoriesChanged({ importFn, storyIndex, }: {
378
352
  importFn?: ModuleImportFn;
379
353
  storyIndex?: StoryIndex;
@@ -416,7 +390,6 @@ declare class StoryStore<TRenderer extends Renderer> {
416
390
  stories: Record<string, StoryContextForEnhancers<TRenderer, _storybook_types.Args>>;
417
391
  };
418
392
  getStoriesJsonData: () => StoryIndexV3;
419
- getSetIndexPayload(): API_PreparedStoryIndex;
420
393
  raw(): BoundStory<TRenderer>[];
421
394
  fromId(storyId: StoryId): BoundStory<TRenderer> | null;
422
395
  }
@@ -532,6 +505,7 @@ declare class DocsContext<TRenderer extends Renderer> implements DocsContextProp
532
505
  resolveOf<TType extends ResolvedModuleExportType>(moduleExportOrType: ModuleExport | TType, validTypes?: TType[]): ResolvedModuleExportFromType<TType, TRenderer>;
533
506
  storyIdByName: (storyName: StoryName) => string;
534
507
  componentStories: () => PreparedStory<TRenderer>[];
508
+ componentStoriesFromCSFFile: (csfFile: CSFFile<TRenderer>) => PreparedStory<TRenderer>[];
535
509
  storyById: (storyId?: StoryId) => PreparedStory<TRenderer>;
536
510
  getStoryContext: (story: PreparedStory<TRenderer>) => StoryContextForLoaders<TRenderer, _storybook_types.Args>;
537
511
  loadStory: (id: StoryId) => Promise<PreparedStory<TRenderer>>;
@@ -616,30 +590,32 @@ declare class MdxDocsRender<TRenderer extends Renderer> implements Render<TRende
616
590
 
617
591
  type MaybePromise<T> = Promise<T> | T;
618
592
  declare class Preview<TRenderer extends Renderer> {
593
+ importFn: ModuleImportFn;
594
+ getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
619
595
  protected channel: Channel;
620
596
  /**
621
597
  * @deprecated will be removed in 8.0, please use channel instead
622
598
  */
623
599
  serverChannel?: Channel;
624
- storyStore: StoryStore<TRenderer>;
625
- getStoryIndex?: () => StoryIndex;
626
- importFn?: ModuleImportFn;
600
+ protected storyStoreValue?: StoryStore<TRenderer>;
627
601
  renderToCanvas?: RenderToCanvas<TRenderer>;
628
602
  storyRenders: StoryRender<TRenderer>[];
629
603
  previewEntryError?: Error;
630
- constructor(channel?: Channel);
631
- initialize({ getStoryIndex, importFn, getProjectAnnotations, }: {
632
- getStoryIndex?: () => StoryIndex;
633
- importFn: ModuleImportFn;
634
- getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
635
- }): Promise<void>;
604
+ private projectAnnotationsBeforeInitialization?;
605
+ protected storeInitializationPromise: Promise<void>;
606
+ protected resolveStoreInitializationPromise: () => void;
607
+ protected rejectStoreInitializationPromise: (err: Error) => void;
608
+ constructor(importFn: ModuleImportFn, getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>, channel?: Channel, shouldInitialize?: boolean);
609
+ get storyStore(): {};
610
+ protected initialize(): Promise<void>;
611
+ ready(): Promise<void>;
636
612
  setupListeners(): void;
637
- getProjectAnnotationsOrRenderError(getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>): Promise<ProjectAnnotations<TRenderer>>;
613
+ getProjectAnnotationsOrRenderError(): Promise<ProjectAnnotations<TRenderer>>;
638
614
  initializeWithProjectAnnotations(projectAnnotations: ProjectAnnotations<TRenderer>): Promise<void>;
615
+ getStoryIndexFromServer(): Promise<StoryIndex>;
616
+ protected initializeWithStoryIndex(storyIndex: StoryIndex): void;
639
617
  setInitialGlobals(): Promise<void>;
640
618
  emitGlobals(): void;
641
- getStoryIndexFromServer(): Promise<StoryIndex>;
642
- initializeWithStoryIndex(storyIndex: StoryIndex): PromiseLike<void>;
643
619
  onGetProjectAnnotationsChanged({ getProjectAnnotations, }: {
644
620
  getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
645
621
  }): Promise<void>;
@@ -667,6 +643,12 @@ declare class Preview<TRenderer extends Renderer> {
667
643
  teardownRender(render: StoryRender<TRenderer> | CsfDocsRender<TRenderer> | MdxDocsRender<TRenderer>, { viewModeChanged }?: {
668
644
  viewModeChanged?: boolean;
669
645
  }): Promise<void>;
646
+ loadStory({ storyId }: {
647
+ storyId: StoryId;
648
+ }): Promise<PreparedStory<TRenderer>>;
649
+ getStoryContext(story: PreparedStory<TRenderer>, { forceInitialArgs }?: {
650
+ forceInitialArgs?: boolean | undefined;
651
+ }): Omit<_storybook_types.StoryContextForLoaders<Renderer, Args>, "viewMode">;
670
652
  extract(options?: {
671
653
  includeDocsOnly: boolean;
672
654
  }): Promise<Record<string, _storybook_types.StoryContextForEnhancers<TRenderer, Args>>>;
@@ -710,19 +692,21 @@ interface View<TStorybookRoot> {
710
692
  showStoryDuringRender(): void;
711
693
  }
712
694
 
713
- type PossibleRender<TFramework extends Renderer> = StoryRender<TFramework> | CsfDocsRender<TFramework> | MdxDocsRender<TFramework>;
714
- declare class PreviewWithSelection<TFramework extends Renderer> extends Preview<TFramework> {
695
+ type PossibleRender<TRenderer extends Renderer> = StoryRender<TRenderer> | CsfDocsRender<TRenderer> | MdxDocsRender<TRenderer>;
696
+ declare class PreviewWithSelection<TRenderer extends Renderer> extends Preview<TRenderer> {
697
+ importFn: ModuleImportFn;
698
+ getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
715
699
  selectionStore: SelectionStore;
716
- view: View<TFramework['canvasElement']>;
700
+ view: View<TRenderer['canvasElement']>;
717
701
  currentSelection?: Selection;
718
- currentRender?: PossibleRender<TFramework>;
719
- constructor(selectionStore: SelectionStore, view: View<TFramework['canvasElement']>);
702
+ currentRender?: PossibleRender<TRenderer>;
703
+ constructor(importFn: ModuleImportFn, getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>, selectionStore: SelectionStore, view: View<TRenderer['canvasElement']>);
720
704
  setupListeners(): void;
721
705
  setInitialGlobals(): Promise<void>;
722
- initializeWithStoryIndex(storyIndex: StoryIndex): PromiseLike<void>;
706
+ initializeWithStoryIndex(storyIndex: StoryIndex): Promise<void>;
723
707
  selectSpecifiedStory(): Promise<void>;
724
708
  onGetProjectAnnotationsChanged({ getProjectAnnotations, }: {
725
- getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TFramework>>;
709
+ getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
726
710
  }): Promise<void>;
727
711
  onStoriesChanged({ importFn, storyIndex, }: {
728
712
  importFn?: ModuleImportFn;
@@ -744,15 +728,12 @@ declare class PreviewWithSelection<TFramework extends Renderer> extends Preview<
744
728
  onPreloadStories({ ids }: {
745
729
  ids: string[];
746
730
  }): Promise<void>;
747
- renderSelection({ persistedArgs }?: {
731
+ protected renderSelection({ persistedArgs }?: {
748
732
  persistedArgs?: Args;
749
733
  }): Promise<void>;
750
- teardownRender(render: PossibleRender<TFramework>, { viewModeChanged }?: {
734
+ teardownRender(render: PossibleRender<TRenderer>, { viewModeChanged }?: {
751
735
  viewModeChanged?: boolean;
752
736
  }): Promise<void>;
753
- extract(options?: {
754
- includeDocsOnly: boolean;
755
- }): Promise<Record<string, _storybook_types.StoryContextForEnhancers<TFramework, Args>>>;
756
737
  mainStoryCallbacks(storyId: StoryId): {
757
738
  showMain: () => void;
758
739
  showError: (err: {
@@ -771,172 +752,13 @@ declare class PreviewWithSelection<TFramework extends Renderer> extends Preview<
771
752
  }): void;
772
753
  }
773
754
 
774
- declare class PreviewWeb<TFramework extends Renderer> extends PreviewWithSelection<TFramework> {
775
- constructor();
776
- }
777
-
778
- declare class UrlStore implements SelectionStore {
779
- selectionSpecifier: SelectionSpecifier | null;
780
- selection?: Selection;
781
- constructor();
782
- setSelection(selection: Selection): void;
783
- setQueryParams(queryParams: qs__default.ParsedQs): void;
784
- }
785
-
786
- declare enum Mode {
787
- 'MAIN' = "MAIN",
788
- 'NOPREVIEW' = "NOPREVIEW",
789
- 'PREPARING_STORY' = "PREPARING_STORY",
790
- 'PREPARING_DOCS' = "PREPARING_DOCS",
791
- 'ERROR' = "ERROR"
792
- }
793
- declare const layoutClassMap: {
794
- readonly centered: "sb-main-centered";
795
- readonly fullscreen: "sb-main-fullscreen";
796
- readonly padded: "sb-main-padded";
797
- };
798
- type Layout = keyof typeof layoutClassMap | 'none';
799
- declare class WebView implements View<HTMLElement> {
800
- private currentLayoutClass?;
801
- private testing;
802
- private preparingTimeout?;
803
- constructor();
804
- prepareForStory(story: PreparedStory<any>): HTMLElement;
805
- storyRoot(): HTMLElement;
806
- prepareForDocs(): HTMLElement;
807
- docsRoot(): HTMLElement;
808
- applyLayout(layout?: Layout): void;
809
- checkIfLayoutExists(layout: keyof typeof layoutClassMap): void;
810
- showMode(mode: Mode): void;
811
- showErrorDisplay({ message, stack }: {
812
- message?: string | undefined;
813
- stack?: string | undefined;
814
- }): void;
815
- showNoPreview(): void;
816
- showPreparingStory({ immediate }?: {
817
- immediate?: boolean | undefined;
818
- }): void;
819
- showPreparingDocs({ immediate }?: {
820
- immediate?: boolean | undefined;
821
- }): void;
822
- showMain(): void;
823
- showDocs(): void;
824
- showStory(): void;
825
- showStoryDuringRender(): void;
755
+ declare class PreviewWeb<TRenderer extends Renderer> extends PreviewWithSelection<TRenderer> {
756
+ importFn: ModuleImportFn;
757
+ getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>;
758
+ constructor(importFn: ModuleImportFn, getProjectAnnotations: () => MaybePromise<ProjectAnnotations<TRenderer>>);
826
759
  }
827
760
 
828
761
  declare function simulateDOMContentLoaded(): void;
829
762
  declare function simulatePageLoad($container: any): void;
830
763
 
831
- declare class StoryStoreFacade<TRenderer extends Renderer> {
832
- projectAnnotations: NormalizedProjectAnnotations<TRenderer>;
833
- entries: Record<StoryId, IndexEntry & {
834
- componentId?: ComponentId;
835
- }>;
836
- csfExports: Record<Path, ModuleExports>;
837
- constructor();
838
- importFn(path: Path): Promise<ModuleExports>;
839
- getStoryIndex(store: StoryStore<TRenderer>): {
840
- v: number;
841
- entries: Record<string, IndexEntry>;
842
- };
843
- clearFilenameExports(fileName: Path): void;
844
- addStoriesFromExports(fileName: Path, fileExports: ModuleExports): void;
845
- }
846
-
847
- declare const addDecorator: (decorator: DecoratorFunction<Renderer>) => void;
848
- declare const addParameters: (parameters: Parameters) => void;
849
- declare const addLoader: (loader: LoaderFunction<Renderer>) => void;
850
- declare const addArgs: (args: Args) => void;
851
- declare const addArgTypes: (argTypes: ArgTypes) => void;
852
- declare const addArgsEnhancer: (enhancer: ArgsEnhancer<Renderer>) => void;
853
- declare const addArgTypesEnhancer: (enhancer: ArgTypesEnhancer<Renderer>) => void;
854
- declare const addStepRunner: (stepRunner: StepRunner) => void;
855
- declare const setGlobalRender: (render: StoryStoreFacade<any>['projectAnnotations']['render']) => void;
856
- declare class ClientApi<TRenderer extends Renderer> {
857
- facade: StoryStoreFacade<TRenderer>;
858
- storyStore?: StoryStore<TRenderer>;
859
- onImportFnChanged?: ({ importFn }: {
860
- importFn: ModuleImportFn;
861
- }) => void;
862
- constructor({ storyStore }?: {
863
- storyStore?: StoryStore<TRenderer>;
864
- });
865
- importFn(path: Path): Promise<ModuleExports>;
866
- getStoryIndex(): {
867
- v: number;
868
- entries: Record<string, _storybook_types.IndexEntry>;
869
- };
870
- addDecorator: (decorator: DecoratorFunction<TRenderer>) => void;
871
- addParameters: ({ globals, globalTypes, ...parameters }: Parameters & {
872
- globals?: Globals | undefined;
873
- globalTypes?: GlobalTypes | undefined;
874
- }) => void;
875
- addStepRunner: (stepRunner: StepRunner<TRenderer>) => void;
876
- addLoader: (loader: LoaderFunction<TRenderer>) => void;
877
- addArgs: (args: Args) => void;
878
- addArgTypes: (argTypes: ArgTypes) => void;
879
- addArgsEnhancer: (enhancer: ArgsEnhancer<TRenderer>) => void;
880
- addArgTypesEnhancer: (enhancer: ArgTypesEnhancer<TRenderer>) => void;
881
- _addedExports: Record<string, ModuleExports>;
882
- _loadAddedExports(): void;
883
- raw: () => _storybook_types.BoundStory<TRenderer>[] | undefined;
884
- get _storyStore(): StoryStore<TRenderer> | undefined;
885
- }
886
-
887
- declare const getQueryParams: () => qs$1.ParsedQs;
888
- declare const getQueryParam: (key: string) => string | string[] | qs$1.ParsedQs | qs$1.ParsedQs[] | undefined;
889
-
890
- interface CoreClient_RendererImplementation<TRenderer extends Renderer> {
891
- /**
892
- * A function that applies decorators to a story.
893
- * @template TRenderer The type of renderer used by the Storybook client API.
894
- * @type {ProjectAnnotations<TRenderer>['applyDecorators']}
895
- */
896
- decorateStory?: ProjectAnnotations<TRenderer>['applyDecorators'];
897
- /**
898
- * A function that renders a story with args.
899
- * @template TRenderer The type of renderer used by the Storybook client API.
900
- * @type {ArgsStoryFn<TRenderer>}
901
- */
902
- render?: ArgsStoryFn<TRenderer>;
903
- }
904
- interface CoreClient_ClientAPIFacade {
905
- /**
906
- * The old way of retrieving the list of stories at runtime.
907
- * @deprecated This method is deprecated and will be removed in a future version.
908
- */
909
- raw: (...args: any[]) => never;
910
- }
911
- interface CoreClient_StartReturnValue<TRenderer extends Renderer> {
912
- /**
913
- * Forces a re-render of all stories in the Storybook preview.
914
- * This function emits the `FORCE_RE_RENDER` event to the Storybook channel.
915
- * @deprecated This method is deprecated and will be removed in a future version.
916
- * @returns {void}
917
- */
918
- forceReRender: () => void;
919
- /**
920
- * The old way of setting up storybook with runtime configuration.
921
- * @deprecated This method is deprecated and will be removed in a future version.
922
- * @returns {void}
923
- */
924
- configure: any;
925
- /**
926
- * @deprecated This property is deprecated and will be removed in a future version.
927
- * @type {ClientApi<TRenderer> | CoreClient_ClientAPIFacade}
928
- */
929
- clientApi: ClientApi<TRenderer> | CoreClient_ClientAPIFacade;
930
- }
931
- /**
932
- * Initializes the Storybook preview API.
933
- * @template TRenderer The type of renderer used by the Storybook client API.
934
- * @param {ProjectAnnotations<TRenderer>['renderToCanvas']} renderToCanvas A function that renders a story to a canvas.
935
- * @param {CoreClient_RendererImplementation<TRenderer>} [options] Optional configuration options for the renderer implementation.
936
- * @param {ProjectAnnotations<TRenderer>['applyDecorators']} [options.decorateStory] A function that applies decorators to a story.
937
- * @param {ArgsStoryFn<TRenderer>} [options.render] A function that renders a story with arguments.
938
- * @returns {CoreClient_StartReturnValue<TRenderer>} An object containing functions and objects related to the Storybook preview API.
939
- */
940
- declare function start<TRenderer extends Renderer>(renderToCanvas: ProjectAnnotations<TRenderer>['renderToCanvas'], { decorateStory, render }?: CoreClient_RendererImplementation<TRenderer>): CoreClient_StartReturnValue<TRenderer>;
941
-
942
- export { ClientApi, DocsContext, HooksContext, Preview, PreviewWeb, PreviewWithSelection, PropDescriptor, SelectionStore, StoryStore, UrlStore, View, WebView, addArgTypes, addArgTypesEnhancer, addArgs, addArgsEnhancer, addDecorator, addLoader, addParameters, addStepRunner, addons, applyHooks, combineArgs, combineParameters, composeConfigs, composeStepRunners, composeStories, composeStory, decorateStory, defaultDecorateStory, filterArgTypes, getQueryParam, getQueryParams, inferControls, makeDecorator, mockChannel, normalizeStory, prepareMeta, prepareStory, sanitizeStoryContextUpdate, setGlobalRender, setProjectAnnotations, simulateDOMContentLoaded, simulatePageLoad, sortStoriesV7, start, useArgs, useCallback, useChannel, useEffect, useGlobals, useMemo, useParameter, useReducer, useRef, useState, useStoryContext, userOrAutoTitle, userOrAutoTitleFromSpecifier };
764
+ export { DocsContext, HooksContext, Preview, PreviewWeb, PreviewWithSelection, PropDescriptor, StoryStore, addons, applyHooks, combineArgs, combineParameters, composeConfigs, composeStepRunners, composeStories, composeStory, decorateStory, defaultDecorateStory, filterArgTypes, inferControls, makeDecorator, mockChannel, normalizeStory, prepareMeta, prepareStory, sanitizeStoryContextUpdate, setProjectAnnotations, simulateDOMContentLoaded, simulatePageLoad, sortStoriesV7, useArgs, useCallback, useChannel, useEffect, useGlobals, useMemo, useParameter, useReducer, useRef, useState, useStoryContext, userOrAutoTitle, userOrAutoTitleFromSpecifier };