diff --git a/MIGRATION.md b/MIGRATION.md
index c69c72a1fc66..2708d5e0e19c 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -2,6 +2,10 @@
- [From version 7.x to 8.0.0](#from-version-7x-to-800)
- [Implicit actions can not be used during rendering (for example in the play function)](#implicit-actions-can-not-be-used-during-rendering-for-example-in-the-play-function)
+ - [MDX related changes](#mdx-related-changes)
+ - [MDX is upgraded to v3](#mdx-is-upgraded-to-v3)
+ - [Dropping support for \*.stories.mdx (CSF in MDX) format and MDX1 support](#dropping-support-for-storiesmdx-csf-in-mdx-format-and-mdx1-support)
+ - [Dropping support for id, name and story in Story block](#dropping-support-for-id-name-and-story-in-story-block)
- [Core changes](#core-changes)
- [Dropping support for Node.js 16](#dropping-support-for-nodejs-16)
- [Autotitle breaking fixes](#autotitle-breaking-fixes)
@@ -380,6 +384,26 @@ To summarize:
- This allows users and (test) integrators to run or build storybook without docgen, boosting the user performance and allows tools to give quicker feedback.
- This will make sure that we can one day lazy load docgen, without changing how stories are rendered.
+### MDX related changes
+
+#### MDX is upgraded to v3
+
+Storybook now uses MDX3 under the hood. This change contains many improvements and a few small breaking changes that probably won't affect you. However we recommend checking the [migration notes from MDX here](https://mdxjs.com/blog/v3/).
+
+#### Dropping support for *.stories.mdx (CSF in MDX) format and MDX1 support
+
+In Storybook 7, we deprecated the ability of using MDX both for documentation and for defining stories in the same .stories.mdx file. It is now removed, and Storybook won't support .stories.mdx files anymore. We provide migration scripts to help you onto the new format.
+
+If you were using the [legacy MDX1 format](#legacy-mdx1-support), you will have to remove the `legacyMdx1` main.js feature flag and the `@storybook/mdx1-csf` package.
+
+Alongside with this change, the `jsxOptions` configuration was removed as it is not used anymore.
+
+[More info here](https://storybook.js.org/docs/migration-guide#storiesmdx-to-mdxcsf).
+
+#### Dropping support for id, name and story in Story block
+
+Referencing stories by `id`, `name` or `story` in the Story block is not possible anymore. [More info here](#story-block).
+
### Core changes
#### Dropping support for Node.js 16
diff --git a/code/addons/controls/README.md b/code/addons/controls/README.md
index 1d3a8ae3797b..3b04a3a75dec 100644
--- a/code/addons/controls/README.md
+++ b/code/addons/controls/README.md
@@ -176,38 +176,4 @@ Like [story parameters](https://storybook.js.org/docs/react/writing-stories/para
### How do controls work with MDX?
-MDX compiles to component story format (CSF) under the hood, so there's a direct mapping for every example above using the `args` and `argTypes` props.
-
-Consider this example in CSF:
-
-```js
-import { Button } from './Button';
-export default {
- title: 'Button',
- component: Button,
- argTypes: {
- background: { control: 'color' },
- },
-};
-
-const Template = (args) => ;
-export const Basic = Template.bind({});
-Basic.args = { label: 'hello', background: '#ff0' };
-```
-
-Here's the MDX equivalent:
-
-```jsx
-import { Meta, Story } from '@storybook/addon-docs';
-import { Button } from './Button';
-
-
-
-export const Template = (args) =>
-
-
- {Template.bind({})}
-
-```
-
-For more info, see a full [Controls example in MDX for Vue](https://raw.githubusercontent.com/storybookjs/storybook/next/code/examples/vue-kitchen-sink/src/stories/addon-controls.stories.mdx).
+When importing stories from your CSF file into MDX, controls will work the same way. See [the documentation](https://storybook.js.org/docs/writing-docs/mdx#basic-example) for examples.
\ No newline at end of file
diff --git a/code/addons/docs/README.md b/code/addons/docs/README.md
index 9a9a3debad2a..9495cf2c1508 100644
--- a/code/addons/docs/README.md
+++ b/code/addons/docs/README.md
@@ -110,20 +110,6 @@ export default {
};
```
-If using in conjunction with the [storyshots add-on](https://github.com/storybookjs/storybook/blob/next/code/addons/storyshots-core/README.md), you will need to
-configure Jest to transform MDX stories into something Storyshots can understand:
-
-Add the following to your Jest configuration:
-
-```json
-{
- "transform": {
- "^.+\\.[tj]sx?$": "babel-jest",
- "^.+\\.mdx$": "@storybook/addon-docs/jest-transform-mdx"
- }
-}
-```
-
### Be sure to check framework specific installation needs
- [React](https://github.com/storybookjs/storybook/tree/next/code/addons/docs/react) (covered here)
@@ -143,7 +129,6 @@ export default {
{
name: '@storybook/addon-docs',
options: {
- jsxOptions: {},
csfPluginOptions: null,
mdxPluginOptions: {},
},
@@ -152,8 +137,6 @@ export default {
};
```
-`jsxOptions` are options that will be passed to `@babel/preset-react` for `.md` and `.mdx` files.
-
`csfPluginOptions` is an object for configuring `@storybook/csf-plugin`. When set to `null` it tells docs not to run the `csf-plugin` at all, which can be used as an optimization, or if you're already using `csf-plugin` in your `main.js`.
> With the release of version 7.0, it is no longer possible to import `.md` files directly into Storybook using the `transcludeMarkdown` [option](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#importing-plain-markdown-files-with-transcludemarkdown-has-changed). Instead, we recommend using the [`Markdown`](https://storybook.js.org/docs/react/api/doc-block-markdown) Doc Block for importing Markdown files into your Storybook documentation.
diff --git a/code/addons/docs/jest-transform-mdx.js b/code/addons/docs/jest-transform-mdx.js
deleted file mode 100644
index eb3106944ae1..000000000000
--- a/code/addons/docs/jest-transform-mdx.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const path = require('path');
-const { ScriptTransformer } = require('@jest/transform');
-const { dedent } = require('ts-dedent');
-
-const { compile } = require('@storybook/mdx2-csf');
-
-module.exports = {
- async processAsync(src, filename, config, { instrument }) {
- const code = await compile(src, { skipCsf: false });
- const result = dedent`
- /* @jsx mdx */
- import React from 'react'
- import { mdx } from '@mdx-js/react'
- ${code}
- `;
-
- const extension = path.extname(filename);
- const jsFileName = `${filename.slice(0, -extension.length)}.js`;
-
- return new ScriptTransformer(config).transformSource(jsFileName, result, instrument);
- },
-};
diff --git a/code/addons/docs/package.json b/code/addons/docs/package.json
index 84eb2c858ec2..8e7c9b79ecf4 100644
--- a/code/addons/docs/package.json
+++ b/code/addons/docs/package.json
@@ -65,13 +65,13 @@
"require": "./dist/shims/mdx-react-shim.js",
"import": "./dist/shims/mdx-react-shim.mjs"
},
+ "./mdx-loader": "./dist/mdx-loader.js",
"./svelte/HOC.svelte": "./svelte/HOC.svelte",
"./ember": "./ember/index.js",
"./ember/index.js": "./ember/index.js",
"./angular": "./angular/index.js",
"./angular/index.js": "./angular/index.js",
"./web-components/index.js": "./web-components/index.js",
- "./jest-transform-mdx": "./jest-transform-mdx.js",
"./package.json": "./package.json"
},
"main": "dist/index.js",
@@ -98,15 +98,14 @@
"prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts"
},
"dependencies": {
- "@jest/transform": "^29.3.1",
- "@mdx-js/react": "^2.1.5",
+ "@babel/core": "^7.12.3",
+ "@mdx-js/react": "^3.0.0",
"@storybook/blocks": "workspace:*",
"@storybook/client-logger": "workspace:*",
"@storybook/components": "workspace:*",
"@storybook/csf-plugin": "workspace:*",
"@storybook/csf-tools": "workspace:*",
"@storybook/global": "^5.0.0",
- "@storybook/mdx2-csf": "^1.0.0",
"@storybook/node-logger": "workspace:*",
"@storybook/preview-api": "workspace:*",
"@storybook/react-dom-shim": "workspace:*",
@@ -120,6 +119,7 @@
"ts-dedent": "^2.0.0"
},
"devDependencies": {
+ "@mdx-js/mdx": "^3.0.0",
"@rollup/pluginutils": "^5.0.2",
"typescript": "^5.3.2",
"vite": "^4.0.4"
@@ -133,10 +133,8 @@
"./src/preset.ts",
"./src/preview.ts",
"./src/blocks.ts",
- "./src/shims/mdx-react-shim.ts"
- ],
- "externals": [
- "@storybook/mdx1-csf"
+ "./src/shims/mdx-react-shim.ts",
+ "./src/mdx-loader.ts"
]
},
"gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17",
diff --git a/code/addons/docs/src/compiler/index.test.ts b/code/addons/docs/src/compiler/index.test.ts
new file mode 100644
index 000000000000..d390e7257ec1
--- /dev/null
+++ b/code/addons/docs/src/compiler/index.test.ts
@@ -0,0 +1,669 @@
+import { expect, describe, it } from 'vitest';
+import { dedent } from 'ts-dedent';
+import { compileSync, compile } from './index';
+
+expect.addSnapshotSerializer({
+ serialize: (val: any) => (typeof val === 'string' ? val : val.toString()),
+ test: (_val) => true,
+});
+
+// Remove unnecessary noise from snapshots
+const clean = (code: string) => {
+ const mdxContentRegex =
+ /export default function MDXContent\([^)]*\) \{(?:[^{}]*|{(?:[^{}]*|{[^{}]*})*})*\}/gs;
+
+ const mdxMissingReferenceRegex =
+ /function _missingMdxReference\([^)]*\) \{(?:[^{}]*|{(?:[^{}]*|{[^{}]*})*})*\}/gs;
+
+ return code.replace(mdxMissingReferenceRegex, '').replace(mdxContentRegex, '');
+};
+
+describe('mdx3', () => {
+ it('supports AdjacentBlockJSX', () => {
+ const input = dedent`
+
+ `;
+
+ expect(clean(compileSync(input))).toMatchInlineSnapshot(`
+ import {jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ function _createMdxContent(props) {
+ return _jsx("style", {
+ children: \`
+ h1 {
+ color: blue;
+ }
+ \`
+ });
+ }
+ `);
+ });
+
+ it('supports Await in MDX', () => {
+ const input = dedent`
+ {await Promise.resolve('Hello World')}
+ `;
+
+ expect(clean(compileSync(input))).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ async function _createMdxContent(props) {
+ return _jsx(_Fragment, {
+ children: await Promise.resolve('Hello World')
+ });
+ }
+ `);
+ });
+
+ it('supports ES2024', () => {
+ const input = dedent`
+ export const obj = {
+ nested: {
+ property: 'Hello world!'
+ }
+ };
+
+ export const value = obj?.nested?.property ?? 'Default Value';
+
+ Value: {value}
+ `;
+
+ expect(clean(compileSync(input))).toMatchInlineSnapshot(`
+ import {jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ export const obj = {
+ nested: {
+ property: 'Hello world!'
+ }
+ };
+ export const value = obj?.nested?.property ?? 'Default Value';
+ function _createMdxContent(props) {
+ const _components = {
+ p: "p",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_components.p, {
+ children: ["Value: ", value]
+ });
+ }
+ `);
+ });
+});
+
+describe('mdx2', () => {
+ it('works', () => {
+ const input = dedent`
+ # hello
+
+
+
+ world {2 + 1}
+ `;
+
+ expect(clean(compileSync(input))).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ p: "p",
+ ..._provideComponents(),
+ ...props.components
+ }, {Meta} = _components;
+ if (!Meta) _missingMdxReference("Meta", true);
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "hello"
+ }), "\\n", _jsx(Meta, {
+ title: "foobar"
+ }), "\\n", _jsxs(_components.p, {
+ children: ["world ", 2 + 1]
+ })]
+ });
+ }
+ `);
+ });
+
+ it('standalone jsx expressions', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ # Standalone JSX expressions
+
+ {3 + 3}
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "Standalone JSX expressions"
+ }), "\\n", 3 + 3]
+ });
+ }
+ `);
+ });
+});
+
+describe('full snapshots', () => {
+ it('compileSync', () => {
+ const input = dedent`
+ # hello
+
+
+
+ world {2 + 1}
+ `;
+
+ expect(compileSync(input)).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ p: "p",
+ ..._provideComponents(),
+ ...props.components
+ }, {Meta} = _components;
+ if (!Meta) _missingMdxReference("Meta", true);
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "hello"
+ }), "\\n", _jsx(Meta, {
+ title: "foobar"
+ }), "\\n", _jsxs(_components.p, {
+ children: ["world ", 2 + 1]
+ })]
+ });
+ }
+ export default function MDXContent(props = {}) {
+ const {wrapper: MDXLayout} = {
+ ..._provideComponents(),
+ ...props.components
+ };
+ return MDXLayout ? _jsx(MDXLayout, {
+ ...props,
+ children: _jsx(_createMdxContent, {
+ ...props
+ })
+ }) : _createMdxContent(props);
+ }
+ function _missingMdxReference(id, component) {
+ throw new Error("Expected " + (component ? "component" : "object") + " \`" + id + "\` to be defined: you likely forgot to import, pass, or provide it.");
+ }
+ `);
+ });
+ it('compile', async () => {
+ const input = dedent`
+ # hello
+
+
+
+ world {2 + 1}
+ `;
+
+ expect(await compile(input)).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ p: "p",
+ ..._provideComponents(),
+ ...props.components
+ }, {Meta} = _components;
+ if (!Meta) _missingMdxReference("Meta", true);
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "hello"
+ }), "\\n", _jsx(Meta, {
+ title: "foobar"
+ }), "\\n", _jsxs(_components.p, {
+ children: ["world ", 2 + 1]
+ })]
+ });
+ }
+ export default function MDXContent(props = {}) {
+ const {wrapper: MDXLayout} = {
+ ..._provideComponents(),
+ ...props.components
+ };
+ return MDXLayout ? _jsx(MDXLayout, {
+ ...props,
+ children: _jsx(_createMdxContent, {
+ ...props
+ })
+ }) : _createMdxContent(props);
+ }
+ function _missingMdxReference(id, component) {
+ throw new Error("Expected " + (component ? "component" : "object") + " \`" + id + "\` to be defined: you likely forgot to import, pass, or provide it.");
+ }
+ `);
+ });
+ it('sync & async should match', async () => {
+ const input = dedent`
+ # hello
+
+
+
+ world {2 + 1}
+ `;
+
+ const ou1 = compileSync(input);
+ const ou2 = await compile(input);
+
+ expect(ou1).toEqual(ou2);
+ });
+ it('canvas without story children', () => {
+ const input = dedent`
+ import { Canvas } from '@storybook/addon-docs';
+
+
+ `;
+ expect(compileSync(input)).toMatchInlineSnapshot(`
+ import {jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Canvas} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ return _jsx(Canvas, {
+ children: _jsx("h2", {
+ children: "Some here"
+ })
+ });
+ }
+ export default function MDXContent(props = {}) {
+ const {wrapper: MDXLayout} = {
+ ..._provideComponents(),
+ ...props.components
+ };
+ return MDXLayout ? _jsx(MDXLayout, {
+ ...props,
+ children: _jsx(_createMdxContent, {
+ ...props
+ })
+ }) : _createMdxContent(props);
+ }
+ `);
+ });
+});
+
+describe('docs-mdx-compiler-plugin', () => {
+ it('csf-imports.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Story, Meta, Canvas } from '@storybook/addon-docs';
+ import { Welcome, Button } from '@storybook/angular/demo';
+ import * as MyStories from './My.stories';
+ import { Other } from './Other.stories';
+
+
+
+ # Stories from CSF imports
+
+
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Story, Meta, Canvas} from '@storybook/addon-docs';
+ import {Welcome, Button} from '@storybook/angular/demo';
+ import * as MyStories from './My.stories';
+ import {Other} from './Other.stories';
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(Meta, {
+ title: "MDX/CSF imports"
+ }), "\\n", _jsx(_components.h1, {
+ children: "Stories from CSF imports"
+ }), "\\n", _jsx(Story, {
+ of: MyStories.Basic
+ }), "\\n", _jsx(Canvas, {
+ children: _jsx(Story, {
+ of: Other
+ })
+ })]
+ });
+ }
+ `);
+ });
+
+ it('docs-only.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Meta } from '@storybook/addon-docs';
+
+
+
+ # Documentation only
+
+ This is a documentation-only MDX file which cleans a dummy 'docsOnly: true' story.
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Meta} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ p: "p",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(Meta, {
+ title: "docs-only"
+ }), "\\n", _jsx(_components.h1, {
+ children: "Documentation only"
+ }), "\\n", _jsx(_components.p, {
+ children: "This is a documentation-only MDX file which cleans a dummy 'docsOnly: true' story."
+ })]
+ });
+ }
+ `);
+ });
+
+ it('meta-quotes-in-title.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Meta } from '@storybook/addon-docs';
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Meta} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ return _jsx(Meta, {
+ title: "Addons/Docs/what's in a title?"
+ });
+ }
+ `);
+ });
+
+ it('non-story-exports.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Button } from '@storybook/react/demo';
+ import { Story, Meta } from '@storybook/addon-docs';
+
+
+
+ # Story definition
+
+
+
+ export const two = 2;
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Button} from '@storybook/react/demo';
+ import {Story, Meta} from '@storybook/addon-docs';
+ export const two = 2;
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(Meta, {
+ title: "Button"
+ }), "\\n", _jsx(_components.h1, {
+ children: "Story definition"
+ }), "\\n", _jsx(Story, {
+ of: Button
+ })]
+ });
+ }
+ `);
+ });
+
+ it('story-current.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Story } from '@storybook/addon-docs';
+
+ # Current story
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Story} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "Current story"
+ }), "\\n", _jsx(Story, {
+ id: "."
+ })]
+ });
+ }
+ `);
+ });
+
+ it('story-references.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Story } from '@storybook/addon-docs';
+
+ # Story reference
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Story} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(_components.h1, {
+ children: "Story reference"
+ }), "\\n", _jsx(Story, {
+ id: "welcome--welcome"
+ })]
+ });
+ }
+ `);
+ });
+
+ it('title-template-string.mdx', () => {
+ expect(
+ clean(
+ compileSync(
+ [
+ "import { Meta, Story } from '@storybook/addon-docs';",
+ "import { titleFunction } from '../title-generators';",
+ '',
+ // eslint-disable-next-line no-template-curly-in-string
+ "",
+ ].join('\n')
+ )
+ )
+ ).toMatchInlineSnapshot(`
+ import {jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Meta, Story} from '@storybook/addon-docs';
+ import {titleFunction} from '../title-generators';
+ function _createMdxContent(props) {
+ return _jsx(Meta, {
+ title: \`\${titleFunction('template')}\`
+ });
+ }
+ `);
+ });
+
+ describe('csf3', () => {
+ it('auto-title-docs-only.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Meta } from '@storybook/addon-docs';
+
+
+
+ # Auto-title Docs Only
+
+ Some **markdown** here!
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Meta} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ const _components = {
+ h1: "h1",
+ p: "p",
+ strong: "strong",
+ ..._provideComponents(),
+ ...props.components
+ };
+ return _jsxs(_Fragment, {
+ children: [_jsx(Meta, {}), "\\n", _jsx(_components.h1, {
+ children: "Auto-title Docs Only"
+ }), "\\n", _jsxs(_components.p, {
+ children: ["Some ", _jsx(_components.strong, {
+ children: "markdown"
+ }), " here!"]
+ })]
+ });
+ }
+ `);
+ });
+
+ it('auto-title.mdx', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Button } from '@storybook/react/demo';
+ import { Story, Meta } from '@storybook/addon-docs';
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {jsx as _jsx} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Button} from '@storybook/react/demo';
+ import {Story, Meta} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ return _jsx(Meta, {
+ component: Button
+ });
+ }
+ `);
+ });
+ });
+
+ it('style tag', () => {
+ expect(
+ clean(
+ compileSync(dedent`
+ import { Meta } from '@storybook/addon-docs';
+
+
+
+
+ `)
+ )
+ ).toMatchInlineSnapshot(`
+ import {Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs} from "react/jsx-runtime";
+ import {useMDXComponents as _provideComponents} from "@mdx-js/react";
+ import {Meta} from '@storybook/addon-docs';
+ function _createMdxContent(props) {
+ return _jsxs(_Fragment, {
+ children: [_jsx(Meta, {
+ title: "Example/Introduction"
+ }), "\\n", _jsx("style", {
+ children: \`
+ .subheading {
+ --mediumdark: '#999999';
+ font-weight: 900;
+ font-size: 13px;
+ color: #999;
+ letter-spacing: 6px;
+ line-height: 24px;
+ text-transform: uppercase;
+ margin-bottom: 12px;
+ margin-top: 40px;
+ }
+ .link-list {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr 1fr;
+ row-gap: 10px;
+ }
+ \`
+ })]
+ });
+ }
+ `);
+ });
+});
diff --git a/code/addons/docs/src/compiler/index.ts b/code/addons/docs/src/compiler/index.ts
new file mode 100644
index 000000000000..79af50d3fb18
--- /dev/null
+++ b/code/addons/docs/src/compiler/index.ts
@@ -0,0 +1,29 @@
+import { compile as mdxCompile, compileSync as mdxCompileSync } from '@mdx-js/mdx';
+
+import type { CompileOptions, MdxCompileOptions } from './types';
+
+export type { CompileOptions, MdxCompileOptions };
+
+export const compile = async (input: string, { mdxCompileOptions = {} }: CompileOptions = {}) => {
+ const options = getCompilerOptions(mdxCompileOptions);
+
+ const mdxResult = await mdxCompile(input, options);
+
+ return mdxResult.toString();
+};
+
+export const compileSync = (input: string, { mdxCompileOptions = {} }: CompileOptions = {}) => {
+ const options = getCompilerOptions(mdxCompileOptions);
+
+ const mdxResult = mdxCompileSync(input, options);
+
+ return mdxResult.toString();
+};
+
+function getCompilerOptions(mdxCompileOptions: MdxCompileOptions): MdxCompileOptions {
+ return {
+ providerImportSource: '@mdx-js/react',
+ rehypePlugins: [],
+ ...mdxCompileOptions,
+ };
+}
diff --git a/code/addons/docs/src/compiler/types.ts b/code/addons/docs/src/compiler/types.ts
new file mode 100644
index 000000000000..9ef068b0aeed
--- /dev/null
+++ b/code/addons/docs/src/compiler/types.ts
@@ -0,0 +1,7 @@
+import type { compile as mdxCompile } from '@mdx-js/mdx';
+
+export type MdxCompileOptions = Parameters[1];
+
+export interface CompileOptions {
+ mdxCompileOptions?: MdxCompileOptions;
+}
diff --git a/code/addons/docs/src/mdx-loader.ts b/code/addons/docs/src/mdx-loader.ts
new file mode 100644
index 000000000000..639fb0c70f0d
--- /dev/null
+++ b/code/addons/docs/src/mdx-loader.ts
@@ -0,0 +1,42 @@
+import type { transformAsync } from '@babel/core';
+import type { compile as mdxCompile } from '@mdx-js/mdx';
+import { compile } from './compiler';
+
+export type MdxCompileOptions = Parameters[1];
+export type BabelOptions = Parameters[1];
+
+export interface CompileOptions {
+ mdxCompileOptions?: MdxCompileOptions;
+}
+
+const DEFAULT_RENDERER = `
+import React from 'react';
+`; // Adjust this import based on your actual webpack version and typings
+
+// Kind of like a mock so we don't have to install Webpack just for the types
+type LoaderOptions = {
+ filepath?: string;
+ [key: string]: any;
+} & any;
+
+interface LoaderContext {
+ async: () => (err: Error | null, result?: string) => void;
+ getOptions: () => LoaderOptions;
+ resourcePath: string;
+}
+
+async function loader(this: LoaderContext, content: string): Promise {
+ const callback = this.async();
+ const options = { ...this.getOptions(), filepath: this.resourcePath };
+
+ try {
+ const result = await compile(content, options);
+ const code = `${DEFAULT_RENDERER}\n${result}`;
+ return callback(null, code);
+ } catch (err: any) {
+ console.error('Error loading:', this.resourcePath);
+ return callback(err);
+ }
+}
+
+export default loader;
diff --git a/code/addons/docs/src/plugins/mdx-plugin.ts b/code/addons/docs/src/plugins/mdx-plugin.ts
index 046e6c742bfd..c011a9202fb7 100644
--- a/code/addons/docs/src/plugins/mdx-plugin.ts
+++ b/code/addons/docs/src/plugins/mdx-plugin.ts
@@ -5,12 +5,11 @@ import remarkExternalLinks from 'remark-external-links';
import { createFilter } from '@rollup/pluginutils';
import { dirname, join } from 'path';
-const isStorybookMdx = (id: string) => id.endsWith('.stories.mdx') || id.endsWith('.story.mdx');
+import { compile } from '../compiler';
/**
- * Storybook uses two different loaders when dealing with MDX:
+ * Storybook uses a single loader when dealing with MDX:
*
- * - *stories.mdx and *story.mdx are compiled with the CSF compiler
* - *.mdx are compiled with the MDX compiler directly
*
* @see https://github.com/storybookjs/storybook/blob/next/addons/docs/docs/recipes.md#csf-stories-with-arbitrary-mdx
@@ -18,8 +17,8 @@ const isStorybookMdx = (id: string) => id.endsWith('.stories.mdx') || id.endsWit
export async function mdxPlugin(options: Options): Promise {
const include = /\.mdx$/;
const filter = createFilter(include);
- const { features, presets } = options;
- const { mdxPluginOptions, jsxOptions } = await presets.apply>('options', {});
+ const { presets } = options;
+ const { mdxPluginOptions } = await presets.apply>('options', {});
return {
name: 'storybook:mdx-plugin',
@@ -27,10 +26,6 @@ export async function mdxPlugin(options: Options): Promise {
async transform(src, id) {
if (!filter(id)) return undefined;
- const { compile } = features?.legacyMdx1
- ? await import('@storybook/mdx1-csf')
- : await import('@storybook/mdx2-csf');
-
const mdxLoaderOptions = await options.presets.apply('mdxLoaderOptions', {
...mdxPluginOptions,
mdxCompileOptions: {
@@ -43,19 +38,18 @@ export async function mdxPlugin(options: Options): Promise {
mdxPluginOptions?.mdxCompileOptions?.remarkPlugins ?? []
),
},
- jsxOptions,
});
const code = String(
await compile(src, {
- skipCsf: !isStorybookMdx(id),
...mdxLoaderOptions,
})
);
return {
code,
- map: null, // TODO: update mdx2-csf to return the map
+ // TODO: support source maps
+ map: null,
};
},
};
diff --git a/code/addons/docs/src/plugins/mdx-plugin.types.d.ts b/code/addons/docs/src/plugins/mdx-plugin.types.d.ts
deleted file mode 100644
index fea94f85dc25..000000000000
--- a/code/addons/docs/src/plugins/mdx-plugin.types.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-declare module '@storybook/mdx1-csf';
diff --git a/code/addons/docs/src/preset.ts b/code/addons/docs/src/preset.ts
index 0877643bae9f..8d623fe5b97f 100644
--- a/code/addons/docs/src/preset.ts
+++ b/code/addons/docs/src/preset.ts
@@ -1,15 +1,11 @@
-import fs from 'fs-extra';
import { dirname, join } from 'path';
import remarkSlug from 'remark-slug';
import remarkExternalLinks from 'remark-external-links';
-import { dedent } from 'ts-dedent';
-import type { DocsOptions, Indexer, Options, PresetProperty } from '@storybook/types';
+import type { DocsOptions, Options, PresetProperty } from '@storybook/types';
import type { CsfPluginOptions } from '@storybook/csf-plugin';
-import type { JSXOptions, CompileOptions } from '@storybook/mdx2-csf';
-import { global } from '@storybook/global';
-import { loadCsf } from '@storybook/csf-tools';
import { logger } from '@storybook/node-logger';
+import type { CompileOptions } from './compiler';
/**
* Get the resolvedReact preset, which points either to
@@ -27,27 +23,14 @@ const getResolvedReact = async (options: Options) => {
// addon-docs, causing addon-docs's dependencies not to be hoisted.
// This might also affect regular users who have a similar setup.
// Explicitly alias @mdx-js/react to avoid this issue.
- mdx: resolvedReact.mdx ?? dirname(require.resolve('@mdx-js/react/package.json')),
+ mdx: resolvedReact.mdx ?? dirname(require.resolve('@mdx-js/react')),
};
};
async function webpack(
webpackConfig: any = {},
options: Options & {
- /**
- * @deprecated
- * Use `jsxOptions` to customize options used by @babel/preset-react
- */
- configureJsx: boolean;
- /**
- * @deprecated
- * Use `jsxOptions` to customize options used by @babel/preset-react
- */
- mdxBabelOptions?: any;
- /** @deprecated */
- sourceLoaderOptions: any;
csfPluginOptions: CsfPluginOptions | null;
- jsxOptions?: JSXOptions;
mdxPluginOptions?: CompileOptions;
} /* & Parameters<
typeof createCompiler
@@ -55,19 +38,9 @@ async function webpack(
) {
const { module = {} } = webpackConfig;
- // it will reuse babel options that are already in use in storybook
- // also, these babel options are chained with other presets.
- const {
- csfPluginOptions = {},
- jsxOptions = {},
- sourceLoaderOptions = null,
- configureJsx,
- mdxBabelOptions,
- mdxPluginOptions = {},
- } = options;
+ const { csfPluginOptions = {}, mdxPluginOptions = {} } = options;
const mdxLoaderOptions: CompileOptions = await options.presets.apply('mdxLoaderOptions', {
- skipCsf: true,
...mdxPluginOptions,
mdxCompileOptions: {
providerImportSource: join(
@@ -79,35 +52,9 @@ async function webpack(
mdxPluginOptions?.mdxCompileOptions?.remarkPlugins ?? []
),
},
- jsxOptions,
});
- if (sourceLoaderOptions) {
- throw new Error(dedent`
- Addon-docs no longer uses source-loader in 7.0.
-
- To update your configuration, please see migration instructions here:
-
- https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#dropped-source-loader--storiesof-static-snippets
- `);
- }
-
- if (mdxBabelOptions || configureJsx) {
- throw new Error(dedent`
- Addon-docs no longer uses configureJsx or mdxBabelOptions in 7.0.
-
- To update your configuration, please see migration instructions here:
-
- https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#dropped-addon-docs-manual-babel-configuration
- `);
- }
-
- const mdxVersion = global.FEATURES?.legacyMdx1 ? 'MDX1' : 'MDX2';
- logger.info(`Addon-docs: using ${mdxVersion}`);
-
- const mdxLoader = global.FEATURES?.legacyMdx1
- ? require.resolve('@storybook/mdx1-csf/loader')
- : require.resolve('@storybook/mdx2-csf/loader');
+ logger.info(`Addon-docs: using MDX3`);
// Use the resolvedReact preset to alias react and react-dom to either the users version or the version shipped with addon-docs
const { react, reactDom, mdx } = await getResolvedReact(options);
@@ -155,24 +102,12 @@ async function webpack(
...module,
rules: [
...(module.rules || []),
- {
- test: /(stories|story)\.mdx$/,
- use: [
- {
- loader: mdxLoader,
- options: {
- ...mdxLoaderOptions,
- skipCsf: false,
- },
- },
- ],
- },
{
test: /\.mdx$/,
exclude: /(stories|story)\.mdx$/,
use: [
{
- loader: mdxLoader,
+ loader: require.resolve('./mdx-loader'),
options: mdxLoaderOptions,
},
],
@@ -184,36 +119,6 @@ async function webpack(
return result;
}
-export const createStoriesMdxIndexer = (legacyMdx1?: boolean): Indexer => ({
- test: /(stories|story)\.mdx$/,
- createIndex: async (fileName, opts) => {
- let code = (await fs.readFile(fileName, 'utf-8')).toString();
- const { compile } = legacyMdx1
- ? await import('@storybook/mdx1-csf')
- : await import('@storybook/mdx2-csf');
- code = await compile(code, {});
- const csf = loadCsf(code, { ...opts, fileName }).parse();
-
- const { indexInputs, stories } = csf;
-
- return indexInputs.map((input, index) => {
- const docsOnly = stories[index].parameters?.docsOnly;
- const tags = input.tags ? input.tags : [];
- if (docsOnly) {
- tags.push('stories-mdx-docsOnly');
- }
- // the mdx-csf compiler automatically adds the 'stories-mdx' tag to meta, here' we're just making sure it is always there
- if (!tags.includes('stories-mdx')) {
- tags.push('stories-mdx');
- }
- return { ...input, tags };
- });
- },
-});
-
-const indexers: PresetProperty<'experimental_indexers'> = (existingIndexers) =>
- [createStoriesMdxIndexer(global.FEATURES?.legacyMdx1)].concat(existingIndexers || []);
-
const docs = (docsOptions: DocsOptions) => {
return {
...docsOptions,
@@ -259,7 +164,6 @@ export const viteFinal = async (config: any, options: Options) => {
* something down the dependency chain is using typescript namespaces, which are not supported by rollup-plugin-dts
*/
const webpackX = webpack as any;
-const indexersX = indexers as any;
const docsX = docs as any;
/**
@@ -272,7 +176,7 @@ const docsX = docs as any;
export const resolvedReact = async (existing: any) => ({
react: existing?.react ?? dirname(require.resolve('react/package.json')),
reactDom: existing?.reactDom ?? dirname(require.resolve('react-dom/package.json')),
- mdx: existing?.mdx ?? dirname(require.resolve('@mdx-js/react/package.json')),
+ mdx: existing?.mdx ?? dirname(require.resolve('@mdx-js/react')),
});
const optimizeViteDeps = [
@@ -283,4 +187,4 @@ const optimizeViteDeps = [
'markdown-to-jsx',
];
-export { webpackX as webpack, indexersX as experimental_indexers, docsX as docs, optimizeViteDeps };
+export { webpackX as webpack, docsX as docs, optimizeViteDeps };
diff --git a/code/addons/docs/src/typings.d.ts b/code/addons/docs/src/typings.d.ts
index 04846593c045..cfa3c4639f8e 100644
--- a/code/addons/docs/src/typings.d.ts
+++ b/code/addons/docs/src/typings.d.ts
@@ -3,7 +3,6 @@ declare module 'remark-slug';
declare module 'remark-external-links';
declare module 'acorn-jsx';
declare module 'vue/dist/vue';
-declare module '@storybook/mdx1-csf';
declare module 'sveltedoc-parser' {
export function parse(options: any): Promise;
diff --git a/code/addons/docs/template/stories/stories-mdx/basic.stories.mdx b/code/addons/docs/template/stories/stories-mdx/basic.stories.mdx
deleted file mode 100644
index 7aec7745397d..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/basic.stories.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs';
-import { global as globalThis } from '@storybook/global';
-
-
-
-# MDX Stories
-
-This file demonstrates defining stories inside MDX.
-
-
-
-
-
-
-
-
diff --git a/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.non-stories.js b/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.non-stories.js
deleted file mode 100644
index abbc65c94ddb..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.non-stories.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// NOTE: commented out default since these stories are re-exported
-// in the primary file './csf-docs-with-mdx-docs.stories.mdx'
-//
-// export default {
-// title: 'Addons/Docs/csf-with-mdx-docs',
-// component: Button,
-// };
-
-export const Primary = {
- args: { label: 'Primary' },
-};
-
-export const Secondary = {
- args: { label: 'Secondary' },
-};
-
-export const ImplicitName = {
- args: { label: 'Implicit Name' },
-};
diff --git a/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.stories.mdx b/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.stories.mdx
deleted file mode 100644
index dbb010e80e59..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/csf-in-mdx.stories.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs';
-import { global as globalThis } from '@storybook/global';
-import * as Csf from './csf-in-mdx.non-stories.js';
-
-
-
-# Legacy CSF in MDX Stories
-
-This file demonstrates legacy reuse of CSF stories inside MDX. This mechanism has been
-overhauled and improved in 7.0, and the legacy mode is now deprecated and will be
-removed in 8.0.
-
-
-
-
-
-
-
-## Duplicate stories
-
-Reference story by ID to show it multiple times in a page.
-
-
diff --git a/code/addons/docs/template/stories/stories-mdx/iframe.stories.mdx b/code/addons/docs/template/stories/stories-mdx/iframe.stories.mdx
deleted file mode 100644
index f947df3b35cf..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/iframe.stories.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs';
-import { global as globalThis } from '@storybook/global';
-
-
-
-# MDX Stories
-
-This file demonstrates rendering iframe stories in MDX.
-
-
-
-
-
-
diff --git a/code/addons/docs/template/stories/stories-mdx/play-functions.stories.mdx b/code/addons/docs/template/stories/stories-mdx/play-functions.stories.mdx
deleted file mode 100644
index aef8fe5df0ba..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/play-functions.stories.mdx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs';
-import { global as globalThis } from '@storybook/global';
-
- console.log('component play')} />
-
-# MDX Play function Stories
-
-This file demonstrates defining stories inside MDX.
-
-
-
-
diff --git a/code/addons/docs/template/stories/stories-mdx/unattached.stories.mdx b/code/addons/docs/template/stories/stories-mdx/unattached.stories.mdx
deleted file mode 100644
index c327ecb73730..000000000000
--- a/code/addons/docs/template/stories/stories-mdx/unattached.stories.mdx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Meta } from '@storybook/addon-docs';
-
-
-
-# Unattached `stories.mdx` file
\ No newline at end of file
diff --git a/code/frameworks/angular/template/stories/angular-mdx.stories.mdx b/code/frameworks/angular/template/stories/angular-mdx.stories.mdx
deleted file mode 100644
index afe20c14379b..000000000000
--- a/code/frameworks/angular/template/stories/angular-mdx.stories.mdx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { global as globalThis } from '@storybook/global';
-import { moduleMetadata } from '@storybook/angular';
-import { Meta, Story, Canvas } from '@storybook/addon-docs';
-
-export const Button = globalThis.Components.Button;
-
-
-
-# Angular-specific MDX Stories
-
-
diff --git a/code/frameworks/angular/template/stories/basics/README.stories.mdx b/code/frameworks/angular/template/stories/basics/README.mdx
similarity index 100%
rename from code/frameworks/angular/template/stories/basics/README.stories.mdx
rename to code/frameworks/angular/template/stories/basics/README.mdx
diff --git a/code/frameworks/angular/template/stories/core/README.stories.mdx b/code/frameworks/angular/template/stories/core/README.mdx
similarity index 100%
rename from code/frameworks/angular/template/stories/core/README.stories.mdx
rename to code/frameworks/angular/template/stories/core/README.mdx
diff --git a/code/frameworks/angular/template/stories/others/ngx-translate/README.stories.mdx b/code/frameworks/angular/template/stories/others/ngx-translate/README.mdx
similarity index 100%
rename from code/frameworks/angular/template/stories/others/ngx-translate/README.stories.mdx
rename to code/frameworks/angular/template/stories/others/ngx-translate/README.mdx
diff --git a/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts b/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts
index 7c3fd0130231..f844decf1443 100644
--- a/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts
+++ b/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts
@@ -82,7 +82,7 @@ export const mdxgfm: Fix = {
return dedent`
In MDX1 you had the option of using GitHub flavored markdown.
- Storybook 7.0 uses MDX2 for compiling MDX, and thus no longer supports GFM out of the box.
+ Storybook 8.0 uses MDX3 for compiling MDX, and thus no longer supports GFM out of the box.
Because of this you need to explicitly add the GFM plugin in the addon-docs options:
https://storybook.js.org/docs/react/writing-docs/mdx#lack-of-github-flavored-markdown-gfm
diff --git a/code/lib/codemod/src/transforms/mdx-to-csf.ts b/code/lib/codemod/src/transforms/mdx-to-csf.ts
index b5f68b8a7b50..51bd69be962d 100644
--- a/code/lib/codemod/src/transforms/mdx-to-csf.ts
+++ b/code/lib/codemod/src/transforms/mdx-to-csf.ts
@@ -136,6 +136,7 @@ export function transform(source: string, baseName: string): [string, string] {
value: `/* ${nodeString} is deprecated, please migrate it to see: https://storybook.js.org/migration-guides/7.0 */`,
};
storiesMap.set(idAttribute.value as string, { type: 'id' });
+ // @ts-expect-error issue with mdast types
parent?.children.splice(index as number, 0, newNode);
// current index is the new comment, and index + 1 is current node
// SKIP traversing current node, and continue with the node after that
diff --git a/code/lib/core-server/package.json b/code/lib/core-server/package.json
index b12fe37ae249..c7a08287b5d4 100644
--- a/code/lib/core-server/package.json
+++ b/code/lib/core-server/package.json
@@ -68,7 +68,7 @@
"@storybook/core-events": "workspace:*",
"@storybook/csf": "^0.1.2",
"@storybook/csf-tools": "workspace:*",
- "@storybook/docs-mdx": "^0.1.0",
+ "@storybook/docs-mdx": "3.0.0",
"@storybook/global": "^5.0.0",
"@storybook/manager": "workspace:*",
"@storybook/node-logger": "workspace:*",
diff --git a/code/lib/core-server/src/utils/StoryIndexGenerator.test.ts b/code/lib/core-server/src/utils/StoryIndexGenerator.test.ts
index fefb477426df..1fa90d63d8b8 100644
--- a/code/lib/core-server/src/utils/StoryIndexGenerator.test.ts
+++ b/code/lib/core-server/src/utils/StoryIndexGenerator.test.ts
@@ -6,8 +6,6 @@
import { describe, beforeEach, it, expect, vi } from 'vitest';
import path from 'path';
-// @ts-expect-error -- cannot find declaration file
-import { createStoriesMdxIndexer } from '@storybook/addon-docs/preset';
import { normalizeStoriesEntry } from '@storybook/core-common';
import type { NormalizedStoriesSpecifier, StoryIndexEntry } from '@storybook/types';
import { readCsf, getStorySortParameter } from '@storybook/csf-tools';
@@ -45,7 +43,7 @@ const options: StoryIndexGeneratorOptions = {
configDir: path.join(__dirname, '__mockdata__'),
workingDir: path.join(__dirname, '__mockdata__'),
storyIndexers: [],
- indexers: [csfIndexer, createStoriesMdxIndexer(false)],
+ indexers: [csfIndexer],
storyStoreV7: true,
docs: { defaultName: 'docs', autodocs: false },
};
@@ -292,51 +290,6 @@ describe('StoryIndexGenerator', () => {
});
});
- describe('mdx tagged components', () => {
- it('adds docs entry with docs enabled', async () => {
- const specifier: NormalizedStoriesSpecifier = normalizeStoriesEntry(
- './src/nested/Page.stories.mdx',
- options
- );
-
- const generator = new StoryIndexGenerator([specifier], {
- ...options,
- });
- await generator.initialize();
-
- expect(await generator.getIndex()).toMatchInlineSnapshot(`
- {
- "entries": {
- "page--docs": {
- "id": "page--docs",
- "importPath": "./src/nested/Page.stories.mdx",
- "name": "docs",
- "storiesImports": [],
- "tags": [
- "stories-mdx",
- "docs",
- ],
- "title": "Page",
- "type": "docs",
- },
- "page--story-one": {
- "id": "page--story-one",
- "importPath": "./src/nested/Page.stories.mdx",
- "name": "StoryOne",
- "tags": [
- "stories-mdx",
- "story",
- ],
- "title": "Page",
- "type": "story",
- },
- },
- "v": 4,
- }
- `);
- }, 20_000);
- });
-
describe('autodocs', () => {
const autodocsOptions = {
...options,
diff --git a/code/lib/core-server/src/utils/__mockdata__/src/nested/Page.stories.mdx b/code/lib/core-server/src/utils/__mockdata__/src/nested/Page.stories.mdx
deleted file mode 100644
index 402d2a302ec5..000000000000
--- a/code/lib/core-server/src/utils/__mockdata__/src/nested/Page.stories.mdx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Meta, Story } from '@storybook/addon-docs';
-
-
-
-
diff --git a/code/lib/core-server/src/utils/__tests__/index-extraction.test.ts b/code/lib/core-server/src/utils/__tests__/index-extraction.test.ts
index 360a687eaaed..e76fd6b277b6 100644
--- a/code/lib/core-server/src/utils/__tests__/index-extraction.test.ts
+++ b/code/lib/core-server/src/utils/__tests__/index-extraction.test.ts
@@ -604,53 +604,4 @@ describe('docs entries from story extraction', () => {
}
`);
});
- it(`Only adds a docs entry and not a story entry when an input has the "docsOnly" tag`, async () => {
- const relativePath = './src/nested/Page.stories.mdx';
- const absolutePath = path.join(options.workingDir, relativePath);
- const specifier: NormalizedStoriesSpecifier = normalizeStoriesEntry(relativePath, options);
-
- const generator = new StoryIndexGenerator([specifier], {
- ...options,
- docs: { defaultName: 'docs', autodocs: false },
- indexers: [
- {
- test: /\.stories\.mdx?$/,
- createIndex: async (fileName) => [
- {
- exportName: '__page',
- __id: 'page--page',
- name: 'Page',
- title: 'Page',
- tags: [STORIES_MDX_TAG, 'stories-mdx-docsOnly'],
- importPath: fileName,
- type: 'story',
- },
- ],
- },
- ],
- });
- const result = await generator.extractStories(specifier, absolutePath);
-
- expect(result).toMatchInlineSnapshot(`
- {
- "dependents": [],
- "entries": [
- {
- "id": "page--docs",
- "importPath": "./src/nested/Page.stories.mdx",
- "name": "docs",
- "storiesImports": [],
- "tags": [
- "stories-mdx",
- "stories-mdx-docsOnly",
- "docs",
- ],
- "title": "Page",
- "type": "docs",
- },
- ],
- "type": "stories",
- }
- `);
- });
});
diff --git a/code/lib/core-server/src/utils/stories-json.test.ts b/code/lib/core-server/src/utils/stories-json.test.ts
index 197f630eddf1..61fb64b71649 100644
--- a/code/lib/core-server/src/utils/stories-json.test.ts
+++ b/code/lib/core-server/src/utils/stories-json.test.ts
@@ -4,8 +4,6 @@ import type { Router, Request, Response } from 'express';
import Watchpack from 'watchpack';
import path from 'path';
import debounce from 'lodash/debounce.js';
-// @ts-expect-error -- cannot find declaration file
-import { createStoriesMdxIndexer } from '@storybook/addon-docs/preset';
import { STORY_INDEX_INVALIDATED } from '@storybook/core-events';
import { normalizeStoriesEntry } from '@storybook/core-common';
@@ -45,7 +43,7 @@ const getInitializedStoryIndexGenerator = async (
) => {
const options: StoryIndexGeneratorOptions = {
storyIndexers: [],
- indexers: [csfIndexer, createStoriesMdxIndexer(false)],
+ indexers: [csfIndexer],
configDir: workingDir,
workingDir,
storyStoreV7: true,
@@ -239,29 +237,6 @@ describe('useStoriesJson', () => {
"title": "nested/Button",
"type": "story",
},
- "nested-page--docs": {
- "id": "nested-page--docs",
- "importPath": "./src/nested/Page.stories.mdx",
- "name": "docs",
- "storiesImports": [],
- "tags": [
- "stories-mdx",
- "docs",
- ],
- "title": "nested/Page",
- "type": "docs",
- },
- "nested-page--story-one": {
- "id": "nested-page--story-one",
- "importPath": "./src/nested/Page.stories.mdx",
- "name": "StoryOne",
- "tags": [
- "stories-mdx",
- "story",
- ],
- "title": "nested/Page",
- "type": "story",
- },
"second-nested-g--story-one": {
"id": "second-nested-g--story-one",
"importPath": "./src/second-nested/G.stories.ts",
diff --git a/code/renderers/html/template/stories/html-mdx.stories.mdx b/code/renderers/html/template/stories/html-mdx.stories.mdx
deleted file mode 100644
index ec1e3ced3b69..000000000000
--- a/code/renderers/html/template/stories/html-mdx.stories.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Meta, Story, Canvas } from '@storybook/addon-docs';
-
-
-
-## HTML-specific MDX Stories
-
-
-
-
diff --git a/code/renderers/react/template/stories/react-mdx.stories.mdx b/code/renderers/react/template/stories/react-mdx.stories.mdx
deleted file mode 100644
index e8676a0e22d8..000000000000
--- a/code/renderers/react/template/stories/react-mdx.stories.mdx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { global as globalThis } from '@storybook/global';
-import { Meta, Story, Canvas } from '@storybook/addon-docs';
-
-
-
-# React-specific MDX Stories
-
-export const Button = globalThis.Components.Button;
-
-export const Template = (args) => ;
-
-
-
-
-
-
diff --git a/code/renderers/svelte/template/stories/svelte-mdx.stories.mdx b/code/renderers/svelte/template/stories/svelte-mdx.stories.mdx
deleted file mode 100644
index 396812ea5737..000000000000
--- a/code/renderers/svelte/template/stories/svelte-mdx.stories.mdx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { global as globalThis } from '@storybook/global';
-import { Meta, Story, Canvas } from '@storybook/addon-docs';
-import ButtonView from './views/ButtonJavaScript.svelte';
-import BorderDecoratorRed from './views/BorderDecoratorRed.svelte';
-
-
-
-# Svelte-specific MDX stories
-
-## Primary
-
-
-
-## Secondary
-
-
-
-
diff --git a/code/renderers/vue3/template/stories/vue3-mdx.stories.mdx b/code/renderers/vue3/template/stories/vue3-mdx.stories.mdx
deleted file mode 100644
index e84f893819d5..000000000000
--- a/code/renderers/vue3/template/stories/vue3-mdx.stories.mdx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { global as globalThis } from '@storybook/global';
-import { Meta, Story, Canvas } from '@storybook/addon-docs';
-
-
-
-# Vue3-specific MDX Stories
-
-export const Button = globalThis.Components.Button;
-
-export const Template = (args, { argTypes }) => ({
- components: { MyButton: Button },
- template: '',
- setup() {
- return { args };
- },
-});
-
-## Primary
-
-
-
-## Secondary
-
-
-
-## From template
-
-
diff --git a/code/ui/blocks/src/blocks/Story.tsx b/code/ui/blocks/src/blocks/Story.tsx
index 42f7e5935ae3..2211bcc54cd6 100644
--- a/code/ui/blocks/src/blocks/Story.tsx
+++ b/code/ui/blocks/src/blocks/Story.tsx
@@ -88,37 +88,11 @@ type StoryParameters = {
export type StoryProps = (StoryDefProps | StoryRefProps) & StoryParameters;
export const getStoryId = (props: StoryProps, context: DocsContextProps): StoryId => {
- const { id, of, meta, story } = props as StoryRefProps;
+ const { of, meta, story } = props as StoryRefProps;
if ('of' in props && of === undefined) {
throw new Error('Unexpected `of={undefined}`, did you mistype a CSF file reference?');
}
- if (id) {
- deprecate(dedent`Referencing stories by \`id\` is deprecated, please use \`of\` instead.
-
- Please refer to the migration guide: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#story-block'`);
- return id;
- }
-
- const { name } = props as StoryDefProps;
- if (name) {
- deprecate(dedent`Referencing stories by \`name\` is deprecated, please use \`of\` instead.
-
- Please refer to the migration guide: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#story-block'`);
- return context.storyIdByName(name);
- }
-
- // The `story={moduleExports}` prop is a legacy prop for stories defined in CSF files, but
- // "declared" in MDX files (the CSF file has no meta export or doesn't match the stories glob).
- // In this case, the `.stories.mdx` file will have actually ended up declaring the story
- // so we can reference the story just the same as an `of={moduleExports}` would have.
- // See https://github.com/storybookjs/mdx2-csf/issues/3
- if (story) {
- deprecate(dedent`The \`story\` prop is deprecated, please export your stories from CSF files and reference them with \`of={}\`.
-
- Please refer to the migration guide: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#story-block'`);
- }
-
if (meta) context.referenceMeta(meta, false);
const resolved = context.resolveOf(of || story || 'story', ['story']);
return resolved.story.id;
diff --git a/code/ui/components/src/components/typography/typography.stories.mdx b/code/ui/components/src/components/typography/typography.mdx
similarity index 100%
rename from code/ui/components/src/components/typography/typography.stories.mdx
rename to code/ui/components/src/components/typography/typography.mdx
diff --git a/code/yarn.lock b/code/yarn.lock
index 6fe3d551d312..e89fe99af274 100644
--- a/code/yarn.lock
+++ b/code/yarn.lock
@@ -3325,7 +3325,7 @@ __metadata:
languageName: node
linkType: hard
-"@jest/transform@npm:^29.3.1, @jest/transform@npm:^29.7.0":
+"@jest/transform@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/transform@npm:29.7.0"
dependencies:
@@ -3514,15 +3514,46 @@ __metadata:
languageName: node
linkType: hard
-"@mdx-js/react@npm:^2.1.5":
- version: 2.3.0
- resolution: "@mdx-js/react@npm:2.3.0"
+"@mdx-js/mdx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@mdx-js/mdx@npm:3.0.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdx": "npm:^2.0.0"
+ collapse-white-space: "npm:^2.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-build-jsx: "npm:^3.0.0"
+ estree-util-is-identifier-name: "npm:^3.0.0"
+ estree-util-to-js: "npm:^2.0.0"
+ estree-walker: "npm:^3.0.0"
+ hast-util-to-estree: "npm:^3.0.0"
+ hast-util-to-jsx-runtime: "npm:^2.0.0"
+ markdown-extensions: "npm:^2.0.0"
+ periscopic: "npm:^3.0.0"
+ remark-mdx: "npm:^3.0.0"
+ remark-parse: "npm:^11.0.0"
+ remark-rehype: "npm:^11.0.0"
+ source-map: "npm:^0.7.0"
+ unified: "npm:^11.0.0"
+ unist-util-position-from-estree: "npm:^2.0.0"
+ unist-util-stringify-position: "npm:^4.0.0"
+ unist-util-visit: "npm:^5.0.0"
+ vfile: "npm:^6.0.0"
+ checksum: 42e631bc12f5dda528f00833f9592d05f4728fc673209f4cb08948c45751c479724f890379810baf60dfa32857793644c8ceb868f162f3798d81caa775b89aac
+ languageName: node
+ linkType: hard
+
+"@mdx-js/react@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@mdx-js/react@npm:3.0.0"
dependencies:
"@types/mdx": "npm:^2.0.0"
- "@types/react": "npm:>=16"
peerDependencies:
+ "@types/react": ">=16"
react: ">=16"
- checksum: 6d647115703dbe258f7fe372499fa8c6fe17a053ff0f2a208111c9973a71ae738a0ed376770445d39194d217e00e1a015644b24f32c2f7cb4f57988de0649b15
+ checksum: 865f6ebc7ae83c6cb9f7e92db4eddd3f85cd1664391643b4736887ddc32b0ddb5aec012db6fbc9b486b552e08e6d5ad800450fcd9d51c20665667ff0f174d966
languageName: node
linkType: hard
@@ -4732,8 +4763,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "@storybook/addon-docs@workspace:addons/docs"
dependencies:
- "@jest/transform": "npm:^29.3.1"
- "@mdx-js/react": "npm:^2.1.5"
+ "@babel/core": "npm:^7.12.3"
+ "@mdx-js/mdx": "npm:^3.0.0"
+ "@mdx-js/react": "npm:^3.0.0"
"@rollup/pluginutils": "npm:^5.0.2"
"@storybook/blocks": "workspace:*"
"@storybook/client-logger": "workspace:*"
@@ -4741,7 +4773,6 @@ __metadata:
"@storybook/csf-plugin": "workspace:*"
"@storybook/csf-tools": "workspace:*"
"@storybook/global": "npm:^5.0.0"
- "@storybook/mdx2-csf": "npm:^1.0.0"
"@storybook/node-logger": "workspace:*"
"@storybook/preview-api": "workspace:*"
"@storybook/react-dom-shim": "workspace:*"
@@ -5460,7 +5491,7 @@ __metadata:
"@storybook/core-events": "workspace:*"
"@storybook/csf": "npm:^0.1.2"
"@storybook/csf-tools": "workspace:*"
- "@storybook/docs-mdx": "npm:^0.1.0"
+ "@storybook/docs-mdx": "npm:3.0.0"
"@storybook/global": "npm:^5.0.0"
"@storybook/manager": "workspace:*"
"@storybook/node-logger": "workspace:*"
@@ -5593,10 +5624,10 @@ __metadata:
languageName: node
linkType: hard
-"@storybook/docs-mdx@npm:^0.1.0":
- version: 0.1.0
- resolution: "@storybook/docs-mdx@npm:0.1.0"
- checksum: e4d510f0452a7a3cb09d9617920c18b974f836299dfba38d6b2e62fbfea418d71f340b6c280a87201b1336a7221c7cc16b47794c1f8e81d01dcfa1f599343085
+"@storybook/docs-mdx@npm:3.0.0":
+ version: 3.0.0
+ resolution: "@storybook/docs-mdx@npm:3.0.0"
+ checksum: 4f4242fc05b57e8dc239204c71fd0d1481c9abbf20d12dd0f3dace74f77a7ff7cbe0bd07d7d785873b45747be64cad273423d3dc0cf89b52e9f117592a4b054f
languageName: node
linkType: hard
@@ -5851,13 +5882,6 @@ __metadata:
languageName: unknown
linkType: soft
-"@storybook/mdx2-csf@npm:^1.0.0":
- version: 1.1.0
- resolution: "@storybook/mdx2-csf@npm:1.1.0"
- checksum: ba4496a51efae35edb3e509e488cd16066ccf0768d2dc527bbc2650d0bc0f630540985205772d63d1711d1a5dae66136a919077c90fa2ac7a02a13de43446baa
- languageName: node
- linkType: hard
-
"@storybook/nextjs@workspace:*, @storybook/nextjs@workspace:frameworks/nextjs":
version: 0.0.0-use.local
resolution: "@storybook/nextjs@workspace:frameworks/nextjs"
@@ -7689,6 +7713,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/hast@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "@types/hast@npm:3.0.3"
+ dependencies:
+ "@types/unist": "npm:*"
+ checksum: 0779740926efc1f856976abd95fcb04f4b45d885ec65ef148505722e15cd8fdf4e84d93bf29908131ae6b040f3ca1c1f0cf9fef1b35d52c90c76ff90cfc1214f
+ languageName: node
+ linkType: hard
+
"@types/hoist-non-react-statics@npm:^3.3.1":
version: 3.3.2
resolution: "@types/hoist-non-react-statics@npm:3.3.2"
@@ -7848,6 +7881,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/mdast@npm:^4.0.0":
+ version: 4.0.3
+ resolution: "@types/mdast@npm:4.0.3"
+ dependencies:
+ "@types/unist": "npm:*"
+ checksum: e6994404f5ce58073aa6c1a37ceac3060326470a464e2d751580a9f89e2dbca3a2a6222b849bdaaa5bffbe89033c50a886d17e49fca3b040a4ffcf970e387a0c
+ languageName: node
+ linkType: hard
+
"@types/mdx@npm:^2.0.0":
version: 2.0.8
resolution: "@types/mdx@npm:2.0.8"
@@ -8068,7 +8110,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.37":
+"@types/react@npm:*, @types/react@npm:^18.0.37":
version: 18.2.43
resolution: "@types/react@npm:18.2.43"
dependencies:
@@ -8225,6 +8267,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/unist@npm:*, @types/unist@npm:^3.0.0":
+ version: 3.0.2
+ resolution: "@types/unist@npm:3.0.2"
+ checksum: 39f220ce184a773c55c18a127062bfc4d0d30c987250cd59bab544d97be6cfec93717a49ef96e81f024b575718f798d4d329eb81c452fc57d6d051af8b043ebf
+ languageName: node
+ linkType: hard
+
"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2":
version: 2.0.8
resolution: "@types/unist@npm:2.0.8"
@@ -8480,6 +8529,13 @@ __metadata:
languageName: node
linkType: hard
+"@ungap/structured-clone@npm:^1.0.0":
+ version: 1.2.0
+ resolution: "@ungap/structured-clone@npm:1.2.0"
+ checksum: 8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d
+ languageName: node
+ linkType: hard
+
"@urql/core@npm:>=4.1.0, @urql/core@npm:^4.1.0":
version: 4.2.0
resolution: "@urql/core@npm:4.2.0"
@@ -9851,6 +9907,15 @@ __metadata:
languageName: node
linkType: hard
+"astring@npm:^1.8.0":
+ version: 1.8.6
+ resolution: "astring@npm:1.8.6"
+ bin:
+ astring: bin/astring
+ checksum: 31f09144597048c11072417959a412f208f8f95ba8dce408dfbc3367acb929f31fbcc00ed5eb61ccbf7c2f1173b9ac8bfcaaa37134a9455050c669b2b036ed88
+ languageName: node
+ linkType: hard
+
"async-disk-cache@npm:^1.2.1":
version: 1.3.5
resolution: "async-disk-cache@npm:1.3.5"
@@ -11679,6 +11744,13 @@ __metadata:
languageName: node
linkType: hard
+"collapse-white-space@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "collapse-white-space@npm:2.1.0"
+ checksum: b2e2800f4ab261e62eb27a1fbe853378296e3a726d6695117ed033e82d61fb6abeae4ffc1465d5454499e237005de9cfc52c9562dc7ca4ac759b9a222ef14453
+ languageName: node
+ linkType: hard
+
"collection-visit@npm:^1.0.0":
version: 1.0.0
resolution: "collection-visit@npm:1.0.0"
@@ -11780,6 +11852,13 @@ __metadata:
languageName: node
linkType: hard
+"comma-separated-tokens@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "comma-separated-tokens@npm:2.0.3"
+ checksum: 91f90f1aae320f1755d6957ef0b864fe4f54737f3313bd95e0802686ee2ca38bff1dd381964d00ae5db42912dd1f4ae5c2709644e82706ffc6f6842a813cdd67
+ languageName: node
+ linkType: hard
+
"commander@npm:11.0.0":
version: 11.0.0
resolution: "commander@npm:11.0.0"
@@ -12915,6 +12994,15 @@ __metadata:
languageName: node
linkType: hard
+"devlop@npm:^1.0.0, devlop@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "devlop@npm:1.1.0"
+ dependencies:
+ dequal: "npm:^2.0.0"
+ checksum: e0928ab8f94c59417a2b8389c45c55ce0a02d9ac7fd74ef62d01ba48060129e1d594501b77de01f3eeafc7cb00773819b0df74d96251cf20b31c5b3071f45c0e
+ languageName: node
+ linkType: hard
+
"diff-sequences@npm:^28.1.1":
version: 28.1.1
resolution: "diff-sequences@npm:28.1.1"
@@ -14424,6 +14512,27 @@ __metadata:
languageName: node
linkType: hard
+"estree-util-attach-comments@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "estree-util-attach-comments@npm:3.0.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ checksum: ee69bb5c45e2ad074725b90ed181c1c934b29d81bce4b0c7761431e83c4c6ab1b223a6a3d6a4fbeb92128bc5d5ee201d5dd36cf1770aa5e16a40b0cf36e8a1f1
+ languageName: node
+ linkType: hard
+
+"estree-util-build-jsx@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "estree-util-build-jsx@npm:3.0.1"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-is-identifier-name: "npm:^3.0.0"
+ estree-walker: "npm:^3.0.0"
+ checksum: 274c119817b8e7caa14a9778f1e497fea56cdd2b01df1a1ed037f843178992d3afe85e0d364d485e1e2e239255763553d1b647b15e4a7ba50851bcb43dc6bf80
+ languageName: node
+ linkType: hard
+
"estree-util-is-identifier-name@npm:^2.0.0":
version: 2.1.0
resolution: "estree-util-is-identifier-name@npm:2.1.0"
@@ -14431,6 +14540,24 @@ __metadata:
languageName: node
linkType: hard
+"estree-util-is-identifier-name@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "estree-util-is-identifier-name@npm:3.0.0"
+ checksum: d1881c6ed14bd588ebd508fc90bf2a541811dbb9ca04dec2f39d27dcaa635f85b5ed9bbbe7fc6fb1ddfca68744a5f7c70456b4b7108b6c4c52780631cc787c5b
+ languageName: node
+ linkType: hard
+
+"estree-util-to-js@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "estree-util-to-js@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ astring: "npm:^1.8.0"
+ source-map: "npm:^0.7.0"
+ checksum: ac88cb831401ef99e365f92f4af903755d56ae1ce0e0f0fb8ff66e678141f3d529194f0fb15f6c78cd7554c16fda36854df851d58f9e05cfab15bddf7a97cea0
+ languageName: node
+ linkType: hard
+
"estree-util-visit@npm:^1.0.0":
version: 1.2.1
resolution: "estree-util-visit@npm:1.2.1"
@@ -14441,6 +14568,16 @@ __metadata:
languageName: node
linkType: hard
+"estree-util-visit@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "estree-util-visit@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/unist": "npm:^3.0.0"
+ checksum: acda8b03cc8f890d79c7c7361f6c95331ba84b7ccc0c32b49f447fc30206b20002b37ffdfc97b6ad16e6fe065c63ecbae1622492e2b6b4775c15966606217f39
+ languageName: node
+ linkType: hard
+
"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2":
version: 2.0.2
resolution: "estree-walker@npm:2.0.2"
@@ -16382,6 +16519,62 @@ __metadata:
languageName: node
linkType: hard
+"hast-util-to-estree@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "hast-util-to-estree@npm:3.1.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ comma-separated-tokens: "npm:^2.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-attach-comments: "npm:^3.0.0"
+ estree-util-is-identifier-name: "npm:^3.0.0"
+ hast-util-whitespace: "npm:^3.0.0"
+ mdast-util-mdx-expression: "npm:^2.0.0"
+ mdast-util-mdx-jsx: "npm:^3.0.0"
+ mdast-util-mdxjs-esm: "npm:^2.0.0"
+ property-information: "npm:^6.0.0"
+ space-separated-tokens: "npm:^2.0.0"
+ style-to-object: "npm:^0.4.0"
+ unist-util-position: "npm:^5.0.0"
+ zwitch: "npm:^2.0.0"
+ checksum: 9003a8bac26a4580d5fc9f2a271d17330dd653266425e9f5539feecd2f7538868d6630a18f70698b8b804bf14c306418a3f4ab3119bb4692aca78b0c08b1291e
+ languageName: node
+ linkType: hard
+
+"hast-util-to-jsx-runtime@npm:^2.0.0":
+ version: 2.3.0
+ resolution: "hast-util-to-jsx-runtime@npm:2.3.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ "@types/unist": "npm:^3.0.0"
+ comma-separated-tokens: "npm:^2.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-is-identifier-name: "npm:^3.0.0"
+ hast-util-whitespace: "npm:^3.0.0"
+ mdast-util-mdx-expression: "npm:^2.0.0"
+ mdast-util-mdx-jsx: "npm:^3.0.0"
+ mdast-util-mdxjs-esm: "npm:^2.0.0"
+ property-information: "npm:^6.0.0"
+ space-separated-tokens: "npm:^2.0.0"
+ style-to-object: "npm:^1.0.0"
+ unist-util-position: "npm:^5.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: df7a36dcc792df7667a54438f044b721753d5e09692606d23bf7336bf4651670111fe7728eebbf9f0e4f96ab3346a05bb23037fa1b1d115482b3bc5bde8b6912
+ languageName: node
+ linkType: hard
+
+"hast-util-whitespace@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "hast-util-whitespace@npm:3.0.0"
+ dependencies:
+ "@types/hast": "npm:^3.0.0"
+ checksum: b898bc9fe27884b272580d15260b6bbdabe239973a147e97fa98c45fa0ffec967a481aaa42291ec34fb56530dc2d484d473d7e2bae79f39c83f3762307edfea8
+ languageName: node
+ linkType: hard
+
"hastscript@npm:^6.0.0":
version: 6.0.0
resolution: "hastscript@npm:6.0.0"
@@ -17049,6 +17242,20 @@ __metadata:
languageName: node
linkType: hard
+"inline-style-parser@npm:0.1.1":
+ version: 0.1.1
+ resolution: "inline-style-parser@npm:0.1.1"
+ checksum: 08832a533f51a1e17619f2eabf2f5ec5e956d6dcba1896351285c65df022c9420de61d73256e1dca8015a52abf96cc84ddc3b73b898b22de6589d3962b5e501b
+ languageName: node
+ linkType: hard
+
+"inline-style-parser@npm:0.2.2":
+ version: 0.2.2
+ resolution: "inline-style-parser@npm:0.2.2"
+ checksum: 82099645fd99451301ff243706f70917c066e3033d32bdb1074a54eb1909e08d1cafb48c426a643facbe8248cff362082e90ca14760b3d44e09a858fe668b3fe
+ languageName: node
+ linkType: hard
+
"inquirer@npm:9.2.11":
version: 9.2.11
resolution: "inquirer@npm:9.2.11"
@@ -19481,6 +19688,13 @@ __metadata:
languageName: node
linkType: hard
+"markdown-extensions@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "markdown-extensions@npm:2.0.0"
+ checksum: 406139da2aa0d5ebad86195c8e8c02412f873c452b4c087ae7bc767af37956141be449998223bb379eea179b5fd38dfa610602b6f29c22ddab5d51e627a7e41d
+ languageName: node
+ linkType: hard
+
"markdown-table@npm:^3.0.0":
version: 3.0.3
resolution: "markdown-table@npm:3.0.3"
@@ -19588,6 +19802,26 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-from-markdown@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "mdast-util-from-markdown@npm:2.0.0"
+ dependencies:
+ "@types/mdast": "npm:^4.0.0"
+ "@types/unist": "npm:^3.0.0"
+ decode-named-character-reference: "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ mdast-util-to-string: "npm:^4.0.0"
+ micromark: "npm:^4.0.0"
+ micromark-util-decode-numeric-character-reference: "npm:^2.0.0"
+ micromark-util-decode-string: "npm:^2.0.0"
+ micromark-util-normalize-identifier: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ unist-util-stringify-position: "npm:^4.0.0"
+ checksum: fb66e917f66e33fc60d6964264c4abd519fd8829a4a58ff9c61b2ba5c337554fb954b9ec31ca1c34e83c1163a73f310c39072d656f9a2d3184fe39c87cbba65a
+ languageName: node
+ linkType: hard
+
"mdast-util-gfm-autolink-literal@npm:^1.0.0":
version: 1.0.3
resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3"
@@ -19678,6 +19912,20 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-mdx-expression@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "mdast-util-mdx-expression@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdast": "npm:^4.0.0"
+ devlop: "npm:^1.0.0"
+ mdast-util-from-markdown: "npm:^2.0.0"
+ mdast-util-to-markdown: "npm:^2.0.0"
+ checksum: 512848cbc44b9dc7cffc1bb3f95f7e67f0d6562870e56a67d25647f475d411e136b915ba417c8069fb36eac1839d0209fb05fb323d377f35626a82fcb0879363
+ languageName: node
+ linkType: hard
+
"mdast-util-mdx-jsx@npm:^2.0.0, mdast-util-mdx-jsx@npm:^2.1.2":
version: 2.1.4
resolution: "mdast-util-mdx-jsx@npm:2.1.4"
@@ -19698,6 +19946,27 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-mdx-jsx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "mdast-util-mdx-jsx@npm:3.0.0"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdast": "npm:^4.0.0"
+ "@types/unist": "npm:^3.0.0"
+ ccount: "npm:^2.0.0"
+ devlop: "npm:^1.1.0"
+ mdast-util-from-markdown: "npm:^2.0.0"
+ mdast-util-to-markdown: "npm:^2.0.0"
+ parse-entities: "npm:^4.0.0"
+ stringify-entities: "npm:^4.0.0"
+ unist-util-remove-position: "npm:^5.0.0"
+ unist-util-stringify-position: "npm:^4.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: c14fc72587acd482086be56bb809a142b4d732833593c9a14c1ebb863e549aafbc9391507b177eac8788b2a9de624b8665a2092c75243bbe80f808728ffa421a
+ languageName: node
+ linkType: hard
+
"mdast-util-mdx@npm:^2.0.0":
version: 2.0.1
resolution: "mdast-util-mdx@npm:2.0.1"
@@ -19711,6 +19980,19 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-mdx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "mdast-util-mdx@npm:3.0.0"
+ dependencies:
+ mdast-util-from-markdown: "npm:^2.0.0"
+ mdast-util-mdx-expression: "npm:^2.0.0"
+ mdast-util-mdx-jsx: "npm:^3.0.0"
+ mdast-util-mdxjs-esm: "npm:^2.0.0"
+ mdast-util-to-markdown: "npm:^2.0.0"
+ checksum: 4faea13f77d6bc9aa64ee41a5e4779110b73444a17fda363df6ebe880ecfa58b321155b71f8801c3faa6d70d6222a32a00cbd6dbf5fad8db417f4688bc9c74e1
+ languageName: node
+ linkType: hard
+
"mdast-util-mdxjs-esm@npm:^1.0.0, mdast-util-mdxjs-esm@npm:^1.3.1":
version: 1.3.1
resolution: "mdast-util-mdxjs-esm@npm:1.3.1"
@@ -19724,6 +20006,20 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-mdxjs-esm@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "mdast-util-mdxjs-esm@npm:2.0.1"
+ dependencies:
+ "@types/estree-jsx": "npm:^1.0.0"
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdast": "npm:^4.0.0"
+ devlop: "npm:^1.0.0"
+ mdast-util-from-markdown: "npm:^2.0.0"
+ mdast-util-to-markdown: "npm:^2.0.0"
+ checksum: 5bda92fc154141705af2b804a534d891f28dac6273186edf1a4c5e3f045d5b01dbcac7400d27aaf91b7e76e8dce007c7b2fdf136c11ea78206ad00bdf9db46bc
+ languageName: node
+ linkType: hard
+
"mdast-util-phrasing@npm:^3.0.0":
version: 3.0.1
resolution: "mdast-util-phrasing@npm:3.0.1"
@@ -19734,6 +20030,32 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-phrasing@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "mdast-util-phrasing@npm:4.0.0"
+ dependencies:
+ "@types/mdast": "npm:^4.0.0"
+ unist-util-is: "npm:^6.0.0"
+ checksum: bf281d159d1a9a9705ed8fdbadb70c9633d1c25716ff2c282b6c2ecbc1f05cff10f73e5280d754ed833b09d42b00260c4b8d0a5fed4ce3236d4cffb5230b50cf
+ languageName: node
+ linkType: hard
+
+"mdast-util-to-hast@npm:^13.0.0":
+ version: 13.0.2
+ resolution: "mdast-util-to-hast@npm:13.0.2"
+ dependencies:
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdast": "npm:^4.0.0"
+ "@ungap/structured-clone": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-util-sanitize-uri: "npm:^2.0.0"
+ trim-lines: "npm:^3.0.0"
+ unist-util-position: "npm:^5.0.0"
+ unist-util-visit: "npm:^5.0.0"
+ checksum: f6e9a5b1ab94483ce1cf2ef229578fde4fe7d085f8b9d88a048823da5f93f9469adc98839e8db73f7475e8128a6df30eccad9cd0f9ee0a1d410e74db19b82d8c
+ languageName: node
+ linkType: hard
+
"mdast-util-to-markdown@npm:^0.6.0":
version: 0.6.5
resolution: "mdast-util-to-markdown@npm:0.6.5"
@@ -19764,6 +20086,22 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-to-markdown@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "mdast-util-to-markdown@npm:2.1.0"
+ dependencies:
+ "@types/mdast": "npm:^4.0.0"
+ "@types/unist": "npm:^3.0.0"
+ longest-streak: "npm:^3.0.0"
+ mdast-util-phrasing: "npm:^4.0.0"
+ mdast-util-to-string: "npm:^4.0.0"
+ micromark-util-decode-string: "npm:^2.0.0"
+ unist-util-visit: "npm:^5.0.0"
+ zwitch: "npm:^2.0.0"
+ checksum: 8bd37a9627a438ef6418d6642661904d0cc03c5c732b8b018a8e238ef5cc82fe8aef1940b19c6f563245e58b9659f35e527209bd3fe145f3c723ba14d18fc3e6
+ languageName: node
+ linkType: hard
+
"mdast-util-to-string@npm:^1.0.0, mdast-util-to-string@npm:^1.0.2":
version: 1.1.0
resolution: "mdast-util-to-string@npm:1.1.0"
@@ -19787,6 +20125,15 @@ __metadata:
languageName: node
linkType: hard
+"mdast-util-to-string@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "mdast-util-to-string@npm:4.0.0"
+ dependencies:
+ "@types/mdast": "npm:^4.0.0"
+ checksum: 2d3c1af29bf3fe9c20f552ee9685af308002488f3b04b12fa66652c9718f66f41a32f8362aa2d770c3ff464c034860b41715902ada2306bb0a055146cef064d7
+ languageName: node
+ linkType: hard
+
"mdn-data@npm:2.0.30":
version: 2.0.30
resolution: "mdn-data@npm:2.0.30"
@@ -19908,6 +20255,30 @@ __metadata:
languageName: node
linkType: hard
+"micromark-core-commonmark@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-core-commonmark@npm:2.0.0"
+ dependencies:
+ decode-named-character-reference: "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-factory-destination: "npm:^2.0.0"
+ micromark-factory-label: "npm:^2.0.0"
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-factory-title: "npm:^2.0.0"
+ micromark-factory-whitespace: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-chunked: "npm:^2.0.0"
+ micromark-util-classify-character: "npm:^2.0.0"
+ micromark-util-html-tag-name: "npm:^2.0.0"
+ micromark-util-normalize-identifier: "npm:^2.0.0"
+ micromark-util-resolve-all: "npm:^2.0.0"
+ micromark-util-subtokenize: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: e087824b98d1f1d0db34791ac53945b0d68fb5e541c6c9da6700cc3db54d6b697d8110d3120d5d30e2fb39443aabddccd3e2bbf684795359f38b5a696fdc5913
+ languageName: node
+ linkType: hard
+
"micromark-extension-gfm-autolink-literal@npm:^1.0.0":
version: 1.0.5
resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.5"
@@ -20017,6 +20388,22 @@ __metadata:
languageName: node
linkType: hard
+"micromark-extension-mdx-expression@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdx-expression@npm:3.0.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-factory-mdx-expression: "npm:^2.0.0"
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-events-to-acorn: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: fa799c594d8ff9ecbbd28e226959c4928590cfcddb60a926d9d859d00fc7acd25684b6f78dbe6a7f0830879a402b4a3628efd40bb9df1f5846e6d2b7332715f7
+ languageName: node
+ linkType: hard
+
"micromark-extension-mdx-jsx@npm:^1.0.0":
version: 1.0.5
resolution: "micromark-extension-mdx-jsx@npm:1.0.5"
@@ -20035,6 +20422,24 @@ __metadata:
languageName: node
linkType: hard
+"micromark-extension-mdx-jsx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdx-jsx@npm:3.0.0"
+ dependencies:
+ "@types/acorn": "npm:^4.0.0"
+ "@types/estree": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-is-identifier-name: "npm:^3.0.0"
+ micromark-factory-mdx-expression: "npm:^2.0.0"
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: 18a81c8def7f3a2088dc435bba19e649c19f679464b1a01e2c680f9518820e70fb0974b8403c790aee8f44205833a280b56ba157fe5a5b2903b476c5de5ba353
+ languageName: node
+ linkType: hard
+
"micromark-extension-mdx-md@npm:^1.0.0":
version: 1.0.1
resolution: "micromark-extension-mdx-md@npm:1.0.1"
@@ -20044,6 +20449,15 @@ __metadata:
languageName: node
linkType: hard
+"micromark-extension-mdx-md@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-extension-mdx-md@npm:2.0.0"
+ dependencies:
+ micromark-util-types: "npm:^2.0.0"
+ checksum: bae91c61273de0e5ba80a980c03470e6cd9d7924aa936f46fbda15d780704d9386e945b99eda200e087b96254fbb4271a9545d5ce02676cd6ae67886a8bf82df
+ languageName: node
+ linkType: hard
+
"micromark-extension-mdxjs-esm@npm:^1.0.0":
version: 1.0.5
resolution: "micromark-extension-mdxjs-esm@npm:1.0.5"
@@ -20061,6 +20475,23 @@ __metadata:
languageName: node
linkType: hard
+"micromark-extension-mdxjs-esm@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdxjs-esm@npm:3.0.0"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-core-commonmark: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-events-to-acorn: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ unist-util-position-from-estree: "npm:^2.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: 13e3f726495a960650cdedcba39198ace5bdc953ccb12c14d71fc9ed9bb88e40cc3ba9231e973f6984da3b3573e7ddb23ce409f7c16f52a8d57b608bf46c748d
+ languageName: node
+ linkType: hard
+
"micromark-extension-mdxjs@npm:^1.0.0":
version: 1.0.1
resolution: "micromark-extension-mdxjs@npm:1.0.1"
@@ -20077,6 +20508,22 @@ __metadata:
languageName: node
linkType: hard
+"micromark-extension-mdxjs@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdxjs@npm:3.0.0"
+ dependencies:
+ acorn: "npm:^8.0.0"
+ acorn-jsx: "npm:^5.0.0"
+ micromark-extension-mdx-expression: "npm:^3.0.0"
+ micromark-extension-mdx-jsx: "npm:^3.0.0"
+ micromark-extension-mdx-md: "npm:^2.0.0"
+ micromark-extension-mdxjs-esm: "npm:^3.0.0"
+ micromark-util-combine-extensions: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: fd84f036ddad0aabbc12e7f1b3e9dcfe31573bbc413c5ae903779ef0366d7a4c08193547e7ba75718c9f45654e45f52e575cfc2f23a5f89205a8a70d9a506aea
+ languageName: node
+ linkType: hard
+
"micromark-factory-destination@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-factory-destination@npm:1.1.0"
@@ -20088,6 +20535,17 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-destination@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-factory-destination@npm:2.0.0"
+ dependencies:
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: b73492f687d41a6a379159c2f3acbf813042346bcea523d9041d0cc6124e6715f0779dbb2a0b3422719e9764c3b09f9707880aa159557e3cb4aeb03b9d274915
+ languageName: node
+ linkType: hard
+
"micromark-factory-label@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-factory-label@npm:1.1.0"
@@ -20100,6 +20558,18 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-label@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-factory-label@npm:2.0.0"
+ dependencies:
+ devlop: "npm:^1.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 8ffad00487a7891941b1d1f51d53a33c7a659dcf48617edb7a4008dad7aff67ec316baa16d55ca98ae3d75ce1d81628dbf72fedc7c6f108f740dec0d5d21c8ee
+ languageName: node
+ linkType: hard
+
"micromark-factory-mdx-expression@npm:^1.0.0":
version: 1.0.9
resolution: "micromark-factory-mdx-expression@npm:1.0.9"
@@ -20116,6 +20586,22 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-mdx-expression@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-mdx-expression@npm:2.0.1"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-events-to-acorn: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ unist-util-position-from-estree: "npm:^2.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: d9cf475a73a7fbfa09aba0d057e033d57e45b7adff78692be9efb4405c4a1717ece4594a632f92a4302e4f8f2ae96355785b616e3f5b2fe8599ec24cfdeee12d
+ languageName: node
+ linkType: hard
+
"micromark-factory-space@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-factory-space@npm:1.1.0"
@@ -20126,6 +20612,16 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-space@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-factory-space@npm:2.0.0"
+ dependencies:
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 103ca954dade963d4ff1d2f27d397833fe855ddc72590205022832ef68b775acdea67949000cee221708e376530b1de78c745267b0bf8366740840783eb37122
+ languageName: node
+ linkType: hard
+
"micromark-factory-title@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-factory-title@npm:1.1.0"
@@ -20138,6 +20634,18 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-title@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-factory-title@npm:2.0.0"
+ dependencies:
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 2b2188e7a011b1b001faf8c860286d246d5c3485ef8819270c60a5808f4c7613e49d4e481dbdff62600ef7acdba0f5100be2d125cbd2a15e236c26b3668a8ebd
+ languageName: node
+ linkType: hard
+
"micromark-factory-whitespace@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-factory-whitespace@npm:1.1.0"
@@ -20150,6 +20658,18 @@ __metadata:
languageName: node
linkType: hard
+"micromark-factory-whitespace@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-factory-whitespace@npm:2.0.0"
+ dependencies:
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 4e91baab0cc71873095134bd0e225d01d9786cde352701402d71b72d317973954754e8f9f1849901f165530e6421202209f4d97c460a27bb0808ec5a3fc3148c
+ languageName: node
+ linkType: hard
+
"micromark-util-character@npm:^1.0.0":
version: 1.2.0
resolution: "micromark-util-character@npm:1.2.0"
@@ -20160,6 +20680,16 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-character@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-character@npm:2.0.1"
+ dependencies:
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 5b91c90f29c8873a9f2f2385bbeb70f481b0e56c26092451d1796cd323257927a69eccca19b079d83d5751ec6fc92964214a3c868114555f87631426631df6b9
+ languageName: node
+ linkType: hard
+
"micromark-util-chunked@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-chunked@npm:1.1.0"
@@ -20169,6 +20699,15 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-chunked@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-chunked@npm:2.0.0"
+ dependencies:
+ micromark-util-symbol: "npm:^2.0.0"
+ checksum: 043b5f2abc8c13a1e2e4c378ead191d1a47ed9e0cd6d0fa5a0a430b2df9e17ada9d5de5a20688a000bbc5932507e746144acec60a9589d9a79fa60918e029203
+ languageName: node
+ linkType: hard
+
"micromark-util-classify-character@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-classify-character@npm:1.1.0"
@@ -20180,6 +20719,17 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-classify-character@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-classify-character@npm:2.0.0"
+ dependencies:
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 2bf5fa5050faa9b69f6c7e51dbaaf02329ab70fabad8229984381b356afbbf69db90f4617bec36d814a7d285fb7cad8e3c4e38d1daf4387dc9e240aa7f9a292a
+ languageName: node
+ linkType: hard
+
"micromark-util-combine-extensions@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-combine-extensions@npm:1.1.0"
@@ -20190,6 +20740,16 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-combine-extensions@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-combine-extensions@npm:2.0.0"
+ dependencies:
+ micromark-util-chunked: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: cd4c8d1a85255527facb419ff3b3cc3d7b7f27005c5ef5fa7ef2c4d0e57a9129534fc292a188ec2d467c2c458642d369c5f894bc8a9e142aed6696cc7989d3ea
+ languageName: node
+ linkType: hard
+
"micromark-util-decode-numeric-character-reference@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0"
@@ -20199,6 +20759,15 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-decode-numeric-character-reference@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.1"
+ dependencies:
+ micromark-util-symbol: "npm:^2.0.0"
+ checksum: 3f6d684ee8f317c67806e19b3e761956256cb936a2e0533aad6d49ac5604c6536b2041769c6febdd387ab7175b7b7e551851bf2c1f78da943e7a3671ca7635ac
+ languageName: node
+ linkType: hard
+
"micromark-util-decode-string@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-decode-string@npm:1.1.0"
@@ -20211,6 +20780,18 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-decode-string@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-decode-string@npm:2.0.0"
+ dependencies:
+ decode-named-character-reference: "npm:^1.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-decode-numeric-character-reference: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ checksum: f5413bebb21bdb686cfa1bcfa7e9c93093a523d1b42443ead303b062d2d680a94e5e8424549f57b8ba9d786a758e5a26a97f56068991bbdbca5d1885b3aa7227
+ languageName: node
+ linkType: hard
+
"micromark-util-encode@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-encode@npm:1.1.0"
@@ -20218,6 +20799,13 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-encode@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-encode@npm:2.0.0"
+ checksum: ebdaafff23100bbf4c74e63b4b1612a9ddf94cd7211d6a076bc6fb0bc32c1b48d6fb615aa0953e607c62c97d849f97f1042260d3eb135259d63d372f401bbbb2
+ languageName: node
+ linkType: hard
+
"micromark-util-events-to-acorn@npm:^1.0.0":
version: 1.2.3
resolution: "micromark-util-events-to-acorn@npm:1.2.3"
@@ -20234,6 +20822,22 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-events-to-acorn@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "micromark-util-events-to-acorn@npm:2.0.2"
+ dependencies:
+ "@types/acorn": "npm:^4.0.0"
+ "@types/estree": "npm:^1.0.0"
+ "@types/unist": "npm:^3.0.0"
+ devlop: "npm:^1.0.0"
+ estree-util-visit: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: 2bd2660a49efddb625e6adcabdc3384ae4c50c7a04270737270f4aab53d09e8253e6d2607cd947c4c77f8a9900278915babb240e61fd143dc5bab51d9fd50709
+ languageName: node
+ linkType: hard
+
"micromark-util-html-tag-name@npm:^1.0.0":
version: 1.2.0
resolution: "micromark-util-html-tag-name@npm:1.2.0"
@@ -20241,6 +20845,13 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-html-tag-name@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-html-tag-name@npm:2.0.0"
+ checksum: 988aa26367449bd345b627ae32cf605076daabe2dc1db71b578a8a511a47123e14af466bcd6dcbdacec60142f07bc2723ec5f7a0eed0f5319ce83b5e04825429
+ languageName: node
+ linkType: hard
+
"micromark-util-normalize-identifier@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-normalize-identifier@npm:1.1.0"
@@ -20250,6 +20861,15 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-normalize-identifier@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-normalize-identifier@npm:2.0.0"
+ dependencies:
+ micromark-util-symbol: "npm:^2.0.0"
+ checksum: 93bf8789b8449538f22cf82ac9b196363a5f3b2f26efd98aef87c4c1b1f8c05be3ef6391ff38316ff9b03c1a6fd077342567598019ddd12b9bd923dacc556333
+ languageName: node
+ linkType: hard
+
"micromark-util-resolve-all@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-resolve-all@npm:1.1.0"
@@ -20259,6 +20879,15 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-resolve-all@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-resolve-all@npm:2.0.0"
+ dependencies:
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 3b912e88453dcefe728a9080c8934a75ac4732056d6576ceecbcaf97f42c5d6fa2df66db8abdc8427eb167c5ffddefe26713728cfe500bc0e314ed260d6e2746
+ languageName: node
+ linkType: hard
+
"micromark-util-sanitize-uri@npm:^1.0.0":
version: 1.2.0
resolution: "micromark-util-sanitize-uri@npm:1.2.0"
@@ -20270,6 +20899,17 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-sanitize-uri@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-sanitize-uri@npm:2.0.0"
+ dependencies:
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-encode: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ checksum: 74763ca1c927dd520d3ab8fd9856a19740acf76fc091f0a1f5d4e99c8cd5f1b81c5a0be3efb564941a071fb6d85fd951103f2760eb6cff77b5ab3abe08341309
+ languageName: node
+ linkType: hard
+
"micromark-util-subtokenize@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-subtokenize@npm:1.1.0"
@@ -20282,6 +20922,18 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-subtokenize@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-subtokenize@npm:2.0.0"
+ dependencies:
+ devlop: "npm:^1.0.0"
+ micromark-util-chunked: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 1907c56c4974d430b984c50b3eb0930241112d931e611f178dee17d58f2976614950631b70f4e9c7e49dbccf21f91654ee61f250e028bf2f2b0f3d3aeb168da8
+ languageName: node
+ linkType: hard
+
"micromark-util-symbol@npm:^1.0.0":
version: 1.1.0
resolution: "micromark-util-symbol@npm:1.1.0"
@@ -20289,6 +20941,13 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-symbol@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-symbol@npm:2.0.0"
+ checksum: 4e76186c185ce4cefb9cea8584213d9ffacd77099d1da30c0beb09fa21f46f66f6de4c84c781d7e34ff763fe3a06b530e132fa9004882afab9e825238d0aa8b3
+ languageName: node
+ linkType: hard
+
"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1":
version: 1.1.0
resolution: "micromark-util-types@npm:1.1.0"
@@ -20296,6 +20955,13 @@ __metadata:
languageName: node
linkType: hard
+"micromark-util-types@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-util-types@npm:2.0.0"
+ checksum: d74e913b9b61268e0d6939f4209e3abe9dada640d1ee782419b04fd153711112cfaaa3c4d5f37225c9aee1e23c3bb91a1f5223e1e33ba92d33e83956a53e61de
+ languageName: node
+ linkType: hard
+
"micromark@npm:^3.0.0":
version: 3.2.0
resolution: "micromark@npm:3.2.0"
@@ -20321,6 +20987,31 @@ __metadata:
languageName: node
linkType: hard
+"micromark@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "micromark@npm:4.0.0"
+ dependencies:
+ "@types/debug": "npm:^4.0.0"
+ debug: "npm:^4.0.0"
+ decode-named-character-reference: "npm:^1.0.0"
+ devlop: "npm:^1.0.0"
+ micromark-core-commonmark: "npm:^2.0.0"
+ micromark-factory-space: "npm:^2.0.0"
+ micromark-util-character: "npm:^2.0.0"
+ micromark-util-chunked: "npm:^2.0.0"
+ micromark-util-combine-extensions: "npm:^2.0.0"
+ micromark-util-decode-numeric-character-reference: "npm:^2.0.0"
+ micromark-util-encode: "npm:^2.0.0"
+ micromark-util-normalize-identifier: "npm:^2.0.0"
+ micromark-util-resolve-all: "npm:^2.0.0"
+ micromark-util-sanitize-uri: "npm:^2.0.0"
+ micromark-util-subtokenize: "npm:^2.0.0"
+ micromark-util-symbol: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ checksum: 7e91c8d19ff27bc52964100853f1b3b32bb5b2ece57470a34ba1b2f09f4e2a183d90106c4ae585c9f2046969ee088576fed79b2f7061cba60d16652ccc2c64fd
+ languageName: node
+ linkType: hard
+
"micromark@npm:~2.11.0":
version: 2.11.4
resolution: "micromark@npm:2.11.4"
@@ -22379,7 +23070,7 @@ __metadata:
languageName: node
linkType: hard
-"periscopic@npm:^3.1.0":
+"periscopic@npm:^3.0.0, periscopic@npm:^3.1.0":
version: 3.1.0
resolution: "periscopic@npm:3.1.0"
dependencies:
@@ -23078,6 +23769,13 @@ __metadata:
languageName: node
linkType: hard
+"property-information@npm:^6.0.0":
+ version: 6.4.0
+ resolution: "property-information@npm:6.4.0"
+ checksum: 48ba202f12c6abc82d37135452377dd528fae90a151bcffb28582d58d9db6e42ce835c91e2fcb12e875200b32bcaed90de4807dfb37c687f7cccf2597ccb55e1
+ languageName: node
+ linkType: hard
+
"proxy-addr@npm:~2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
@@ -24379,6 +25077,16 @@ __metadata:
languageName: node
linkType: hard
+"remark-mdx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "remark-mdx@npm:3.0.0"
+ dependencies:
+ mdast-util-mdx: "npm:^3.0.0"
+ micromark-extension-mdxjs: "npm:^3.0.0"
+ checksum: e7a59428c55753f89f1bd299bc92cfd96fb3289285384b631f8af253d8df6473ebdba085e6d1a846b55b46700aafc76f35810a3268733e6a7c676bc2a8648f17
+ languageName: node
+ linkType: hard
+
"remark-message-control@npm:^6.0.0":
version: 6.0.0
resolution: "remark-message-control@npm:6.0.0"
@@ -24400,6 +25108,18 @@ __metadata:
languageName: node
linkType: hard
+"remark-parse@npm:^11.0.0":
+ version: 11.0.0
+ resolution: "remark-parse@npm:11.0.0"
+ dependencies:
+ "@types/mdast": "npm:^4.0.0"
+ mdast-util-from-markdown: "npm:^2.0.0"
+ micromark-util-types: "npm:^2.0.0"
+ unified: "npm:^11.0.0"
+ checksum: 6eed15ddb8680eca93e04fcb2d1b8db65a743dcc0023f5007265dda558b09db595a087f622062ccad2630953cd5cddc1055ce491d25a81f3317c858348a8dd38
+ languageName: node
+ linkType: hard
+
"remark-parse@npm:^9.0.0":
version: 9.0.0
resolution: "remark-parse@npm:9.0.0"
@@ -24433,6 +25153,19 @@ __metadata:
languageName: node
linkType: hard
+"remark-rehype@npm:^11.0.0":
+ version: 11.0.0
+ resolution: "remark-rehype@npm:11.0.0"
+ dependencies:
+ "@types/hast": "npm:^3.0.0"
+ "@types/mdast": "npm:^4.0.0"
+ mdast-util-to-hast: "npm:^13.0.0"
+ unified: "npm:^11.0.0"
+ vfile: "npm:^6.0.0"
+ checksum: d88180819f6695bc4f257cffcbe201973fc946144cc0101da589f25f3238932e384e98a8897b6060948ad2b5679eb2de5a720866b8b6f36b74e9f20e3e0b1d5d
+ languageName: node
+ linkType: hard
+
"remark-slug@npm:^6.0.0":
version: 6.1.0
resolution: "remark-slug@npm:6.1.0"
@@ -25876,7 +26609,7 @@ __metadata:
languageName: node
linkType: hard
-"source-map@npm:0.7.4, source-map@npm:^0.7.3, source-map@npm:^0.7.4":
+"source-map@npm:0.7.4, source-map@npm:^0.7.0, source-map@npm:^0.7.3, source-map@npm:^0.7.4":
version: 0.7.4
resolution: "source-map@npm:0.7.4"
checksum: dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc
@@ -25913,6 +26646,13 @@ __metadata:
languageName: node
linkType: hard
+"space-separated-tokens@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "space-separated-tokens@npm:2.0.2"
+ checksum: 6173e1d903dca41dcab6a2deed8b4caf61bd13b6d7af8374713500570aa929ff9414ae09a0519f4f8772df993300305a395d4871f35bc4ca72b6db57e1f30af8
+ languageName: node
+ linkType: hard
+
"spawn-command@npm:^0.0.2-1":
version: 0.0.2
resolution: "spawn-command@npm:0.0.2"
@@ -26455,6 +27195,24 @@ __metadata:
languageName: node
linkType: hard
+"style-to-object@npm:^0.4.0":
+ version: 0.4.4
+ resolution: "style-to-object@npm:0.4.4"
+ dependencies:
+ inline-style-parser: "npm:0.1.1"
+ checksum: 3a733080da66952881175b17d65f92985cf94c1ca358a92cf21b114b1260d49b94a404ed79476047fb95698d64c7e366ca7443f0225939e2fb34c38bbc9c7639
+ languageName: node
+ linkType: hard
+
+"style-to-object@npm:^1.0.0":
+ version: 1.0.5
+ resolution: "style-to-object@npm:1.0.5"
+ dependencies:
+ inline-style-parser: "npm:0.2.2"
+ checksum: 39bbc5e9f82a80d6a84c134bf49ba50402bf90304af4281fdd317c9792436c166b2f3a2a3d9a65e3f2a3360b35fe4e352932ec9a51513b9864bfd80b7f5a82e1
+ languageName: node
+ linkType: hard
+
"styled-jsx@npm:5.1.1":
version: 5.1.1
resolution: "styled-jsx@npm:5.1.1"
@@ -27191,6 +27949,13 @@ __metadata:
languageName: node
linkType: hard
+"trim-lines@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "trim-lines@npm:3.0.1"
+ checksum: 3a1611fa9e52aa56a94c69951a9ea15b8aaad760eaa26c56a65330dc8adf99cb282fc07cc9d94968b7d4d88003beba220a7278bbe2063328eb23fb56f9509e94
+ languageName: node
+ linkType: hard
+
"trough@npm:^1.0.0":
version: 1.0.5
resolution: "trough@npm:1.0.5"
@@ -27691,6 +28456,21 @@ __metadata:
languageName: node
linkType: hard
+"unified@npm:^11.0.0":
+ version: 11.0.4
+ resolution: "unified@npm:11.0.4"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ bail: "npm:^2.0.0"
+ devlop: "npm:^1.0.0"
+ extend: "npm:^3.0.0"
+ is-plain-obj: "npm:^4.0.0"
+ trough: "npm:^2.0.0"
+ vfile: "npm:^6.0.0"
+ checksum: b550cdc994d54c84e2e098eb02cfa53535cbc140c148aa3296f235cb43082b499d239110f342fa65eb37ad919472a93cc62f062a83541485a69498084cc87ba1
+ languageName: node
+ linkType: hard
+
"unified@npm:^9.1.0":
version: 9.2.2
resolution: "unified@npm:9.2.2"
@@ -27803,6 +28583,15 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-is@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "unist-util-is@npm:6.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ checksum: 9419352181eaa1da35eca9490634a6df70d2217815bb5938a04af3a662c12c5607a2f1014197ec9c426fbef18834f6371bfdb6f033040fa8aa3e965300d70e7e
+ languageName: node
+ linkType: hard
+
"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0":
version: 1.1.2
resolution: "unist-util-position-from-estree@npm:1.1.2"
@@ -27812,6 +28601,15 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-position-from-estree@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "unist-util-position-from-estree@npm:2.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ checksum: 39127bf5f0594e0a76d9241dec4f7aa26323517120ce1edd5ed91c8c1b9df7d6fb18af556e4b6250f1c7368825720ed892e2b6923be5cdc08a9bb16536dc37b3
+ languageName: node
+ linkType: hard
+
"unist-util-position@npm:^3.0.0, unist-util-position@npm:^3.1.0":
version: 3.1.0
resolution: "unist-util-position@npm:3.1.0"
@@ -27819,6 +28617,15 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-position@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unist-util-position@npm:5.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ checksum: dde3b31e314c98f12b4dc6402f9722b2bf35e96a4f2d463233dd90d7cde2d4928074a7a11eff0a5eb1f4e200f27fc1557e0a64a7e8e4da6558542f251b1b7400
+ languageName: node
+ linkType: hard
+
"unist-util-remove-position@npm:^4.0.0":
version: 4.0.2
resolution: "unist-util-remove-position@npm:4.0.2"
@@ -27829,6 +28636,16 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-remove-position@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unist-util-remove-position@npm:5.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ unist-util-visit: "npm:^5.0.0"
+ checksum: e8c76da4399446b3da2d1c84a97c607b37d03d1d92561e14838cbe4fdcb485bfc06c06cfadbb808ccb72105a80643976d0660d1fe222ca372203075be9d71105
+ languageName: node
+ linkType: hard
+
"unist-util-select@npm:^4.0.3":
version: 4.0.3
resolution: "unist-util-select@npm:4.0.3"
@@ -27859,6 +28676,15 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-stringify-position@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "unist-util-stringify-position@npm:4.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ checksum: dfe1dbe79ba31f589108cb35e523f14029b6675d741a79dea7e5f3d098785045d556d5650ec6a8338af11e9e78d2a30df12b1ee86529cded1098da3f17ee999e
+ languageName: node
+ linkType: hard
+
"unist-util-visit-parents@npm:^3.0.0":
version: 3.1.1
resolution: "unist-util-visit-parents@npm:3.1.1"
@@ -27879,6 +28705,16 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-visit-parents@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "unist-util-visit-parents@npm:6.0.1"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ unist-util-is: "npm:^6.0.0"
+ checksum: 51b1a5b0aa23c97d3e03e7288f0cdf136974df2217d0999d3de573c05001ef04cccd246f51d2ebdfb9e8b0ed2704451ad90ba85ae3f3177cf9772cef67f56206
+ languageName: node
+ linkType: hard
+
"unist-util-visit@npm:^2.0.0":
version: 2.0.3
resolution: "unist-util-visit@npm:2.0.3"
@@ -27901,6 +28737,17 @@ __metadata:
languageName: node
linkType: hard
+"unist-util-visit@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unist-util-visit@npm:5.0.0"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ unist-util-is: "npm:^6.0.0"
+ unist-util-visit-parents: "npm:^6.0.0"
+ checksum: 51434a1d80252c1540cce6271a90fd1a106dbe624997c09ed8879279667fb0b2d3a685e02e92bf66598dcbe6cdffa7a5f5fb363af8fdf90dda6c855449ae39a5
+ languageName: node
+ linkType: hard
+
"universal-user-agent@npm:^5.0.0":
version: 5.0.0
resolution: "universal-user-agent@npm:5.0.0"
@@ -28273,6 +29120,16 @@ __metadata:
languageName: node
linkType: hard
+"vfile-message@npm:^4.0.0":
+ version: 4.0.2
+ resolution: "vfile-message@npm:4.0.2"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ unist-util-stringify-position: "npm:^4.0.0"
+ checksum: 07671d239a075f888b78f318bc1d54de02799db4e9dce322474e67c35d75ac4a5ac0aaf37b18801d91c9f8152974ea39678aa72d7198758b07f3ba04fb7d7514
+ languageName: node
+ linkType: hard
+
"vfile-reporter@npm:^6.0.0":
version: 6.0.2
resolution: "vfile-reporter@npm:6.0.2"
@@ -28325,6 +29182,17 @@ __metadata:
languageName: node
linkType: hard
+"vfile@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "vfile@npm:6.0.1"
+ dependencies:
+ "@types/unist": "npm:^3.0.0"
+ unist-util-stringify-position: "npm:^4.0.0"
+ vfile-message: "npm:^4.0.0"
+ checksum: 443bda43e5ad3b73c5976e987dba2b2d761439867ba7d5d7c5f4b01d3c1cb1b976f5f0e6b2399a00dc9b4eaec611bd9984ce9ce8a75a72e60aed518b10a902d2
+ languageName: node
+ linkType: hard
+
"vite-node@npm:1.0.4":
version: 1.0.4
resolution: "vite-node@npm:1.0.4"
diff --git a/docs/api/main-config-features.md b/docs/api/main-config-features.md
index 81a80502a7bc..f92ae24139a1 100644
--- a/docs/api/main-config-features.md
+++ b/docs/api/main-config-features.md
@@ -54,23 +54,6 @@ Apply decorators from preview.js before decorators from addons or frameworks. [M
-## `legacyMdx1`
-
-Type: `boolean`
-
-Enables support for MDX version 1 as a fallback. Requires [@storybook/mdx1-csf](https://github.com/storybookjs/mdx1-csf) to be installed.
-
-
-
-
-
-
-
## `storyStoreV7`
Type: `boolean`
diff --git a/docs/configure/index.md b/docs/configure/index.md
index ee38fd9a4569..f8c904c925d3 100644
--- a/docs/configure/index.md
+++ b/docs/configure/index.md
@@ -56,7 +56,6 @@ Additionally, you can also provide additional feature flags to your Storybook co
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `storyStoreV7` | Configures Storybook to load stories [on demand](#on-demand-story-loading), rather than during boot up (defaults to `true` as of `v7.0`)
`features: { storyStoreV7: true }` |
| `buildStoriesJson` | Generates `index.json` and `stories.json` files to help story loading with the on-demand mode (defaults to `true` when `storyStoreV7` is `true`)
`features: { buildStoriesJson: true }` |
-| `legacyMdx1` | Enables support for MDX version 1 as a fallback. Requires [`@storybook/mdx1-csf`](https://github.com/storybookjs/mdx1-csf)
`features: { legacyMdx1: true }` |
## Configure story loading
diff --git a/docs/essentials/index.md b/docs/essentials/index.md
index 4cddae864fee..2ef9254bfab7 100644
--- a/docs/essentials/index.md
+++ b/docs/essentials/index.md
@@ -92,7 +92,6 @@ Below is an abridged configuration and table with all the available options for
| `@storybook/addon-actions` | N/A | N/A |
| `@storybook/addon-viewport` | N/A | N/A |
| `@storybook/addon-docs` | `csfPluginOptions` | Provides additional configuration for Storybook's CSF plugin. Can be disabled with `null`. |
-| | `jsxOptions` | Extends the default Babel configuration options for processing Markdown and MDX files. |
| | `mdxPluginOptions` | Provides additional configuration options and plugin configuration for [MDX documentation](../writing-docs/mdx.md#lack-of-github-flavored-markdown-gfm). |
| `@storybook/addon-controls` | N/A | N/A |
| `@storybook/addon-backgrounds` | N/A | N/A |
diff --git a/docs/migration-guide.md b/docs/migration-guide.md
index e0cf30691b06..c2a40c5968fe 100644
--- a/docs/migration-guide.md
+++ b/docs/migration-guide.md
@@ -94,26 +94,6 @@ This shows the errors visually in your editor, which speeds things up a lot. Her
![MDX errors showing in VS Code](./assets/mdx-vs-code-extension-errors.gif)
-#### MDX1 as fallback
-
-If, for some reason, you are unable to get MDX2 working, we’ve implemented legacy MDX1 support as a last resort. MDX1 is deprecated and opt-in, and we recommend against it unless you really need it.
-
-To use MDX1:
-
-1. Install `@storybook/mdx1-csf` as a dev dependency
-2. Add the `legacyMdx1` feature flag to your `.storybook/main.js`:
-
-
-
-
-
-
-
### storiesOf support discontinued by default
If you use Storybook’s legacy `storiesOf` API, it is no longer supported by default in Storybook 7.
diff --git a/docs/snippets/common/storybook-fallback-mdx-install.npm.js.mdx b/docs/snippets/common/storybook-fallback-mdx-install.npm.js.mdx
deleted file mode 100644
index bb7ce17277ed..000000000000
--- a/docs/snippets/common/storybook-fallback-mdx-install.npm.js.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-```shell
-npm install @storybook/mdx1-csf --save-dev
-```
diff --git a/docs/snippets/common/storybook-fallback-mdx-install.pnpm.js.mdx b/docs/snippets/common/storybook-fallback-mdx-install.pnpm.js.mdx
deleted file mode 100644
index 624f84077d48..000000000000
--- a/docs/snippets/common/storybook-fallback-mdx-install.pnpm.js.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-```shell
-pnpm add --save-dev @storybook/mdx1-csf
-```
diff --git a/docs/snippets/common/storybook-fallback-mdx-install.yarn.js.mdx b/docs/snippets/common/storybook-fallback-mdx-install.yarn.js.mdx
deleted file mode 100644
index 02fadab47356..000000000000
--- a/docs/snippets/common/storybook-fallback-mdx-install.yarn.js.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-```shell
-yarn add --dev @storybook/mdx1-csf
-```
diff --git a/docs/snippets/common/storybook-main-full-individual-essentials-config.js.mdx b/docs/snippets/common/storybook-main-full-individual-essentials-config.js.mdx
index 07391e43ad0b..0c11bf383b6f 100644
--- a/docs/snippets/common/storybook-main-full-individual-essentials-config.js.mdx
+++ b/docs/snippets/common/storybook-main-full-individual-essentials-config.js.mdx
@@ -13,7 +13,6 @@ export default {
name: '@storybook/addon-docs',
options: {
csfPluginOptions: null,
- jsxOptions: {},
mdxPluginOptions: {
mdxCompileOptions: {
remarkPlugins: [],
diff --git a/docs/snippets/common/storybook-main-full-individual-essentials-config.ts.mdx b/docs/snippets/common/storybook-main-full-individual-essentials-config.ts.mdx
index b2407522632b..5ddd5f067d6b 100644
--- a/docs/snippets/common/storybook-main-full-individual-essentials-config.ts.mdx
+++ b/docs/snippets/common/storybook-main-full-individual-essentials-config.ts.mdx
@@ -15,7 +15,6 @@ const config: StorybookConfig = {
name: '@storybook/addon-docs',
options: {
csfPluginOptions: null,
- jsxOptions: {},
mdxPluginOptions: {
mdxCompileOptions: {
remarkPlugins: [],
diff --git a/docs/snippets/common/storybook-mdx2-install.npm.js.mdx b/docs/snippets/common/storybook-mdx2-install.npm.js.mdx
deleted file mode 100644
index 61117f8c4b02..000000000000
--- a/docs/snippets/common/storybook-mdx2-install.npm.js.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-```shell
-npm install @storybook/mdx2-csf --save-dev
-```
diff --git a/docs/snippets/common/storybook-mdx2-install.yarn.js.mdx b/docs/snippets/common/storybook-mdx2-install.yarn.js.mdx
deleted file mode 100644
index 7d7c4a172b0d..000000000000
--- a/docs/snippets/common/storybook-mdx2-install.yarn.js.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-```shell
-yarn add --dev @storybook/mdx2-csf
-```
diff --git a/scripts/tasks/sandbox-parts.ts b/scripts/tasks/sandbox-parts.ts
index 4d84258f5030..9a6354d05c62 100644
--- a/scripts/tasks/sandbox-parts.ts
+++ b/scripts/tasks/sandbox-parts.ts
@@ -191,11 +191,6 @@ function addEsbuildLoaderToStories(mainConfig: ConfigFile) {
// NOTE: the test regexp here will apply whether the path is symlink-preserved or otherwise
const require = createRequire(import.meta.url);
const esbuildLoaderPath = require.resolve('../../code/node_modules/esbuild-loader');
- const storiesMdxLoaderPath = require.resolve(
- '../../code/node_modules/@storybook/mdx2-csf/loader'
- );
- const babelLoaderPath = require.resolve('babel-loader');
- const jsxPluginPath = require.resolve('@babel/plugin-transform-react-jsx');
const webpackFinalCode = `
(config) => ({
...config,
@@ -213,45 +208,13 @@ function addEsbuildLoaderToStories(mainConfig: ConfigFile) {
},
},
// Handle MDX files per the addon-docs presets (ish)
- {
- test: [/\\/template-stories\\//],
- include: [/\\.stories\\.mdx$/],
- use: [
- {
- loader: '${babelLoaderPath}',
- options: {
- babelrc: false,
- configFile: false,
- plugins: ['${jsxPluginPath}'],
- }
- },
- {
- loader: '${storiesMdxLoaderPath}',
- options: {
- skipCsf: false,
- }
- }
- ],
- },
- {
- test: [/\\/template-stories\\//],
- include: [/\\.mdx$/],
- exclude: [/\\.stories\\.mdx$/],
+ {
+ test: /template-stories\\/.*\\.mdx$/,
+ exclude: /\\.stories\\.mdx$/,
use: [
{
- loader: '${babelLoaderPath}',
- options: {
- babelrc: false,
- configFile: false,
- plugins: ['${jsxPluginPath}'],
- }
+ loader: require.resolve('@storybook/addon-docs/mdx-loader'),
},
- {
- loader: '${storiesMdxLoaderPath}',
- options: {
- skipCsf: true,
- }
- }
],
},
// Ensure no other loaders from the framework apply
diff --git a/scripts/verdaccio.yaml b/scripts/verdaccio.yaml
index e0139f305f0b..6ab5ce649186 100644
--- a/scripts/verdaccio.yaml
+++ b/scripts/verdaccio.yaml
@@ -87,14 +87,6 @@ packages:
access: $all
publish: $all
proxy: npmjs
- '@storybook/mdx1-csf':
- access: $all
- publish: $all
- proxy: npmjs
- '@storybook/mdx2-csf':
- access: $all
- publish: $all
- proxy: npmjs
'@storybook/expect':
access: $all
publish: $all