# TuilStoryCatalog

Source: /tuil/docs/reference/packages/story/api/tuil-story-catalog
Locale: en

class exported by @mwillbanks/tuil-story.



{/* Generated by tooling/docs/generate-reference.ts. */}

## class [#class]

Public class exported by `@mwillbanks/tuil-story`.

```ts
export class TuilStoryCatalog {
  readonly #sets = new Map<string, TuilStorySet>();

  register<TProps>(
    id: string,
    title: string,
    definition: TuilStoryDefinition<
      TProps,
      Readonly<Record<string, { readonly args: Partial<TProps> }>>
    >,
  ): Disposable {
    if (!id.trim()) throw new Error("Story set id cannot be empty");
    if (this.#sets.has(id)) {
      throw new Error(`Story set "${id}" is already registered`);
    }
    const registered = Object.freeze(asStorySet(id, title, definition));
    this.#sets.set(id, registered);
    return {
      dispose: () => {
        if (this.#sets.get(id) === registered) this.#sets.delete(id);
      },
    };
  }

  get(id: string): TuilStorySet | undefined {
    return this.#sets.get(id);
  }

  list(): readonly TuilStorySet[] {
    return [...this.#sets.values()].sort((left, right) =>
      left.title.localeCompare(right.title),
    );
  }
}
```

## Members [#members]

| Member     | Type                                                                                                                                                                  | Required | Description                                                                                                                                                                                                    | Related types                                                                                                                                   |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `#sets`    | `Map<string, TuilStorySet>`                                                                                                                                           | Yes      | The `#sets` member uses the `Map<string, TuilStorySet>` contract.                                                                                                                                              | [`TuilStorySet`](/tuil/docs/reference/packages/story/api/tuil-story-set)                                                                             |
| `register` | `<TProps>(id: string, title: string, definition: TuilStoryDefinition<TProps, Readonly<Record<string, &#123; readonly args: Partial<TProps>; &#125;>>>) => Disposable` | Yes      | The `register` member uses the `<TProps>(id: string, title: string, definition: TuilStoryDefinition<TProps, Readonly<Record<string, &#123; readonly args: Partial<TProps>; &#125;>>>) => Disposable` contract. | [`Disposable`](/tuil/docs/reference/packages/core/api/disposable), [`TuilStoryDefinition`](/tuil/docs/reference/packages/story/api/tuil-story-definition) |
| `get`      | `(id: string) => TuilStorySet \| undefined`                                                                                                                           | Yes      | The `get` member uses the `(id: string) => TuilStorySet \| undefined` contract.                                                                                                                                | [`TuilStorySet`](/tuil/docs/reference/packages/story/api/tuil-story-set)                                                                             |
| `list`     | `() => readonly TuilStorySet[]`                                                                                                                                       | Yes      | The `list` member uses the `() => readonly TuilStorySet[]` contract.                                                                                                                                           | [`TuilStorySet`](/tuil/docs/reference/packages/story/api/tuil-story-set)                                                                             |

## Parameters [#parameters]

This declaration has no public members.

## Returns [#returns]

This declaration does not return a value.

## Throws [#throws]

No thrown errors are documented for this declaration.

## Related types [#related-types]

* [`TuilStoryDefinition`](/tuil/docs/reference/packages/story/api/tuil-story-definition)
* [`TuilStorySet`](/tuil/docs/reference/packages/story/api/tuil-story-set)

## Source [#source]

[View the secondary source reference](https://github.com/mwillbanks/tuil/blob/main/packages/story/src/index.tsx)

## Package [#package]

[@mwillbanks/tuil-story](/tuil/docs/reference/packages/story)
