diff --git a/code/addons/docs/src/preview.ts b/code/addons/docs/src/preview.ts index 713352b025ea..4a5a57123b12 100644 --- a/code/addons/docs/src/preview.ts +++ b/code/addons/docs/src/preview.ts @@ -1,5 +1,12 @@ import type { PreparedStory } from 'storybook/internal/types'; +import * as tocbot from 'tocbot'; + +if (!globalThis.__STORYBOOK_UNSAFE_TOCBOT__) { + // Users that load dynamic content need to have a way to refresh the TOC, so we expose the tocbot instance + globalThis.__STORYBOOK_UNSAFE_TOCBOT__ = tocbot.default ?? tocbot; +} + const excludeTags = Object.entries(globalThis.TAGS_OPTIONS ?? {}).reduce( (acc, entry) => { const [tag, option] = entry; diff --git a/code/addons/docs/src/typings.d.ts b/code/addons/docs/src/typings.d.ts index 468759c8ba22..2deb8921d2ad 100644 --- a/code/addons/docs/src/typings.d.ts +++ b/code/addons/docs/src/typings.d.ts @@ -7,6 +7,7 @@ declare var __DOCS_CONTEXT__: any; declare var PREVIEW_URL: any; declare var LOGLEVEL: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined; declare var TAGS_OPTIONS: import('storybook/internal/types').TagsOptions; +declare var __STORYBOOK_UNSAFE_TOCBOT__: typeof import('tocbot').default; declare module '*.md'; declare module '*.md?raw';