diff --git a/docs/api/argtypes.md b/docs/api/argtypes.md
index 2771c73dc4b..945d74ab196 100644
--- a/docs/api/argtypes.md
+++ b/docs/api/argtypes.md
@@ -48,19 +48,14 @@ The format of the generated argType will look something like this:
This ArgTypes data structure, name, type, defaultValue, and description are standard fields in all ArgTypes (analogous to PropTypes in React). The table and control fields are addon-specific annotations. So, for example, the table annotation provides extra information to customize how the label gets rendered, and the control annotation includes additional information for the control editing the property.
-
-
-đź’ˇ The `@storybook/addon-docs` provide a shorthand for common tasks:
-
-- `type: 'number'` is shorthand for type: { name: 'number' }
-- `control: 'radio'` is shorthand for control: { type: 'radio' }
-
-
-
-#### Manual specification
+## Manual specification
If you want more control over the args table or any other aspect of using argTypes, you can overwrite the generated argTypes for your component on a per-arg basis. For instance, with the above-inferred argTypes and the following default export:
+
+đź’ˇ As with other Storybook properties (e.g., args, decorators), you can also override ArgTypes per story basis.
+
+
`argTypes: { label: { name: 'Something' } }` |
+| `type.name` | Sets a type for the property. `argTypes: { label: { type: { name: 'number' } } }` |
+| `type.required` | Sets the property as optional or required. `argTypes: { label: { type: { required: true } }` |
+| `description` | Sets a Markdown description for the property. `argTypes: { label: { description: 'Something' } }` |
+| `table.type.summary` | Provide a short version of the type. `argTypes: { label: { table: { type: { summary: 'a short summary' } }}}` |
+| `table.type.detail` | Provides an extended version of the type. `argTypes: { label: { table: { type: { detail: 'something' } }}}` |
+| `table.defaultValue.summary` | Provide a short version of the default value. `argTypes: { label: { table: { defaultValue: { summary: 'Hello World' } }}}` |
+| `table.defaultValue.detail` | Provides a longer version of the default value. `argTypes: { label: { table: { defaultValue: { detail: 'Something' } }}}` |
+| `control` | Associates a control for the property. `argTypes: { label: { control: { type: 'text'} } }` Read the [Essentials documentation](../essentials/controls.md) to learn more about controls. |
+
+#### Shorthands
+
-đź’ˇ As with other Storybook properties (e.g., args, decorators), you can also override ArgTypes per story basis.
+
+đź’ˇ The `@storybook/addon-docs` provide a shorthand for common tasks:
+
+- `type: 'number'` is shorthand for type: { name: 'number' }
+- `control: 'radio'` is shorthand for control: { type: 'radio' }
+
+### Grouping
+
+You can also extend the ArgsTable's customization by grouping related `argTypes` into categories or even subcategories. Based on the following component implementation:
+
+
+
+
+
+
+
+You could group similar properties for better organization and structure. Using the table below as a reference:
+
+| Field | Category |
+| :------------------ | :------: |
+| **backgroundColor** | Colors |
+| **primary** | Colors |
+| **label** | Text |
+| **onClick** | Events |
+| **size** | Sizes |
+
+Results in the following change into your story and UI.
+
+
+
+
+
+
+
+
+
+You can also extend the formula above and introduce subcategories, allowing better structuring and organization. Using the table below as a reference leads to the following change to your story and UI:
+
+| Field | Category | Subcategory |
+| :------------------ | :------: | :-------------: |
+| **backgroundColor** | Colors | Button colors |
+| **primary** | Colors | Button style |
+| **label** | Text | Button contents |
+| **onClick** | Events | Button Events |
+| **size** | Sizes | |
+
+
+
+
+
+
+
+
+
#### Global `argTypes`
You can also define arg types at the global level; they will apply to every component's stories unless you overwrite them. To do so, export the `argTypes` key in your `preview.js`:
diff --git a/docs/api/doc-block-argtypes.md b/docs/api/doc-block-argtypes.md
new file mode 100644
index 00000000000..fb08ae94cbe
--- /dev/null
+++ b/docs/api/doc-block-argtypes.md
@@ -0,0 +1,71 @@
+---
+title: 'ArgTypes'
+---
+
+The `ArgTypes` block can be used to show a static table of [arg types](./argtypes.md) for a given component, as a way to document its interface.
+
+
+
+💡 If you’re looking for a dynamic table that shows a story’s current arg values for a story and supports users changing them, see the [`Controls`](./doc-block-controls.md) block instead.
+
+
+
+
+
+
+```md
+{/* ButtonDocs.mdx */}
+import { ArgTypes } from '@storybook/blocks';
+import * as ButtonStories from './Button.stories';
+
+;
+```
+
+
+## API
+
+### ArgTypes
+
+```js
+import { ArgTypes } from '@storybook/blocks';
+```
+
+`ArgTypes` is a React component which accepts props of type `ArgTypesProps`.
+
+
+
+ℹ️ Like most blocks, the `ArgTypes` block can both be configured via props when using it directly in MDX, or with properties in `parameters.docs.argTypes`.
+
+
+
+#### `ArgTypesProps`
+
+##### `exclude`
+
+Type: `string[] | RegExp`
+
+Specifies which arg types to exclude from table. Any arg types whose name matches the regex or is part of the array will be left out.
+
+##### `include`
+
+Type: `string[] | RegExp`
+
+Specifies which arg types to include in the table. Any arg types whose name doesn’t match the regex or is not part of the array will be left out.
+
+##### `of`
+
+Type: Story export or CSF file exports
+
+Specifies which story to get the arg types from. If a CSF file exports is provided, it will use the primary (first) story in the file.
+
+##### `sort`
+
+Type: `'none' | 'alpha' | 'requiredFirst'`
+
+Default: `'none'`
+
+Specifies how the arg types are sorted.
+
+- **none**: Unsorted, displayed in the same order the arg types are processed in
+- **alpha**: Sorted alphabetically, by the arg type's name
+- **requiredFirst**: Same as `alpha`, with any required arg types displayed first
diff --git a/docs/api/doc-block-canvas.md b/docs/api/doc-block-canvas.md
new file mode 100644
index 00000000000..99e0dce26ae
--- /dev/null
+++ b/docs/api/doc-block-canvas.md
@@ -0,0 +1,207 @@
+---
+title: 'Canvas'
+---
+
+The `Canvas` block is a wrapper around a [`Story`](./doc-block-story.md), featuring a toolbar that allows you to interact with its content while automatically providing the required [`Source`](./doc-block-source.md) snippets.
+
+
+
+When using the Canvas block in MDX, it references a story with the `of` prop:
+
+
+```md
+{/* ButtonDocs.mdx */}
+import { Meta, Story, Canvas } from '@storybook/blocks';
+import * as ButtonStories from './Button.stories';
+
+
+
+
+```
+
+
+
+
+đź’ˇ In previous versions of Storybook it was possible to pass in arbitrary components as children to `Canvas`. That is deprecated and the `Canvas` block now only supports a single story.
+
+
+
+## API
+
+### Canvas
+
+```js
+import { Canvas } from '@storybook/blocks';
+```
+
+`Canvas` is a React component which accepts props of type `CanvasProps`.
+
+
+
+ℹ️ Like most blocks, the `Canvas` block can both be configured via props when using it directly in MDX, or with properties in `parameters.docs.canvas`.
+
+
+
+#### `CanvasProps`
+
+##### `additionalActions`
+
+Type:
+
+```ts
+Array<{
+ title: string | JSX.Element;
+ className?: string;
+ onClick: () => void;
+ disabled?: boolean;
+}>
+```
+
+Provides any additional custom actions to show in the bottom right corner. These are simple buttons that do anything you specify in the `onClick` function.
+
+
+```md
+{/* ButtonDocs.mdx */}
+import { Meta, Story, Canvas, SourceState } from '@storybook/blocks';
+import * as ButtonStories from './Button.stories';
+
+
+
+{/* with an additional action */}
+` |
-| `withToolbar` | Sets the `Canvas` toolbar visibility. `` |
-
-### Rendering multiple stories
-
-If you want, you can also group multiple stories and render them inside a single `Canvas` Doc Block. For example:
-
-
-
-
-
-
-
-### Non-story content
-
-Additionally, you can also place non-story related content inside `Canvas` Doc Block allowing you to render the JSX content precisely as it would if you placed it inside an MDX file, for example:
-
-
-
-
-
-
-
-When rendered, Storybook will automatically generate the code snippet for this inside the [Source](./doc-block-source.md) block beneath the block.
diff --git a/docs/writing-docs/doc-block-colorpalette.md b/docs/writing-docs/doc-block-colorpalette.md
deleted file mode 100644
index 6b82131d53d..00000000000
--- a/docs/writing-docs/doc-block-colorpalette.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: 'ColorPalette'
----
-
-Storybook's `ColorPalette` Doc block allows you to document all color-related items (e.g., swatches) used throughout your project.
-
-
-
-## Working with MDX
-
-Similar to [`Typeset`](./doc-block-typeset.md), the `ColorPalette` Doc Block is also typically used with MDX. It supports additional customization via options. Below are some examples and a table with all the available options.
-
-
-
-
-
-
-
-| Option | Description |
-| ---------- | -------------------------------------------------------------------------------------------------------------------- |
-| `title` | Sets the name of the color to be displayed. `` |
-| `subtitle` | Provides an additional description to the color. `` |
-| `colors` | Provides the list of colors to be displayed. `` |
diff --git a/docs/writing-docs/doc-block-description.md b/docs/writing-docs/doc-block-description.md
deleted file mode 100644
index a39f0a7d654..00000000000
--- a/docs/writing-docs/doc-block-description.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: 'Description'
----
-
-Storybook's `Description` Doc Block displays the component's description obtained from its source code or user-generated content.
-
-
-
-## Working with Automatic Docs
-
-Storybook extracts the component's description and renders it at the top of the page. It is automatically generated from the docgen component for the [supported frameworks](../api/frameworks-feature-support.md) based on the component's source code. Below is an abridged example and available options.
-
-
-
-
-
-
-
-| Option | Description |
-| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `component` | Overrides the default component description. `description: { component:'An example component description' }` |
-| `markdown` | Provides custom Markdown for the component description. `` Only applicable to MDX. |
-| `story` | Overrides the story description. `description: { story: 'An example story description' }` |
-| `of` | Sets the description based either on a component or story. `` `` Only applicable to MDX. |
-
-## Working with MDX
-
-If you need, you can also include the `Description` Doc Block in your MDX stories. It relies on the same heuristics as the one applied in the DocsPage. For example:
-
-
-
-
-
-
diff --git a/docs/writing-docs/doc-block-icongallery.md b/docs/writing-docs/doc-block-icongallery.md
deleted file mode 100644
index 32aa4fd0c07..00000000000
--- a/docs/writing-docs/doc-block-icongallery.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: 'IconGallery'
----
-
-Storybook's `IconGallery` Doc Block enables you easily document all icons associated with your project.
-
-
-
-## Working with MDX
-
-Similar to other documentation-oriented Doc Blocks such as [`TypeSet`](./doc-block-typeset.md), or [`ColorPalette`](./doc-block-colorpalette.md), the `IconGallery` is also typically used with MDX. It allows you to provide additional customization via options. Below is a condensed example and table featuring all the available options.
-
-
-
-
-
-
-
-| Option | Description |
-| ------ | --------------------------------------------------------- |
-| `name` | Sets the name of the icon. `` |
diff --git a/docs/writing-docs/doc-block-source.md b/docs/writing-docs/doc-block-source.md
deleted file mode 100644
index 53101fb449e..00000000000
--- a/docs/writing-docs/doc-block-source.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: 'Source'
----
-
-Storybook's `Source` Doc Block displays the story's source code. It supports syntax highlighting for most languages (e.g., `javascript`, `jsx`, `json`, `yml`, `md`, `bash`, `css`, `html`) and can be copied with the click of a button.
-
-
-
-## Working with Automatic Docs
-
-Storybook automatically generates a `Source` Doc Block within the [Canvas](./doc-block-canvas.md) to display the story's code snippet.
-It includes additional customization via parameters. Below is a condensed example and tables featuring all the available options.
-
-
-
-
-
-
-
-
-
-đź’ˇ The pattern demonstrated here applies only to the story. If you need, you can apply this to all the component stories, introducing a [component parameter](../writing-stories/parameters.md#component-parameters).
-
-
-
-| Option | Description |
-| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `code` | Customizes the code snippet to be displayed. `docs: { source: { code: '
Hello world
' } }`. Requires `language` for proper syntax highlighting. |
-| `dark` | Sets the background to dark mode. `` Applies only to `MDX`. |
-| `id` | Supplies a unique story identifier. `` Applies only to `MDX`. |
-| `language` | Sets the language for syntax highlighting. `docs: { source: { language: 'html'} }` |
-| `format` | Formats the code snippet. `docs: { source: { format:false } }` |
-| `type` | Sets how the story source snippet is auto-generated. See table below for available values. |
-
-| Value | Description | Support |
-| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
-| **auto** (default) | Use `dynamic` snippets if the story is written using [Args](../writing-stories/args.md) and the framework supports it. `docs: { source: { type: 'auto' } }` | All |
-| **dynamic** | Dynamically generated code snippet based on the output of the story function (e.g, JSX code for React). `docs: { source: { type: 'dynamic' } }` | [Limited](../api/frameworks-feature-support.md) |
-| **code** | Use the raw story source as written in the story file. `docs: { source: { type: 'code' } }` | All |
-
-## Working with MDX
-
-If you need, you can also include the `Source` Doc Block in your MDX stories. It accepts either a story ID or a code snippet. For example:
-
-
-
-
-
-
diff --git a/docs/writing-docs/doc-block-story.md b/docs/writing-docs/doc-block-story.md
deleted file mode 100644
index ded43a3d258..00000000000
--- a/docs/writing-docs/doc-block-story.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: 'Story'
----
-
-Stories (component tests) are Storybook's fundamental building blocks.
-In Storybook Docs, stories are rendered in the `Story` block.
-
-
-
-## Working with Automatic Docs
-
-With each story you write, Storybook will automatically generate a new `Story` Doc Block, wrapped inside a [`Canvas`](./doc-block-canvas.md)(with a toolbar if it's the first "primary" story) alongside a [source code](./doc-block-source.md) preview underneath it. Below is a condensed table of the available configuration options.
-
-| Option | Description |
-| --------------- | ------------------------------------------------------------------------------------- |
-| `inlineStories` | Configures Storybook to render stories inline. `docs: { inlineStories: false }` |
-
-## Working with MDX
-
-With MDX, the `Story` block is not only a way of rendering stories, but how you define them. Internally, Storybook looks for named `Story` instances located at the top of your document, or inside a [Canvas](./doc-block-canvas.md). Below is an abridged example and table featuring all the available options.
-
-| Option | Description |
-| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `args` | Provide the required component inputs (e.g., props). `` Read the [documentation](../writing-stories/args.md) to learn more. |
-| `decorators` | Provide additional markup or mock a data provider to allow proper story rendering. ` (
)]}/>` Read the [documentation](../writing-stories/decorators.md) to learn more. |
-| `id` | Storybook's internal story identifier. Used for embedding Storybook stories inside Docs. `` Read the documentation to learn more. |
-| `inline` | Enables Storybook's inline renderer. `` Read the [documentation](./docs-page.md#inline-stories-vs-iframe-stories) to learn more. |
-| `loaders` | (Experimental) Asynchronous function for data fetching with stories. ` ({ data: await (await fetch('your-endpoint'))}) ]}/>` Read the [documentation](../writing-stories/loaders.md) to learn more. |
-| `name` | Adds a name to the component story. `` . |
-| `parameters` | Provides the necessary static named metadata related to the story. `Story parameters={{ backgrounds: { values: [{ name:'red', value:'#f00' }] } }} />` Read the [documentation](../writing-stories/parameters.md) to learn more. |
-| `play` | Generate component interactions. ` { await userEvent.click(screen.getByRole('button')) }}/>` Read the [documentation](../writing-stories/play-function.md) to learn more. |
-
-
-
-
-
-
-
-### Inline rendering
-
-All stories are rendered in the Preview iframe for isolated development in Storybook's Canvas. With Docs, if your framework supports inline rendering, it will be used by default for both performance and convenience. However, you can force this feature by providing the required configuration option (see tables above).
diff --git a/docs/writing-docs/doc-block-typeset.md b/docs/writing-docs/doc-block-typeset.md
deleted file mode 100644
index 3563915a8a4..00000000000
--- a/docs/writing-docs/doc-block-typeset.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: 'Typeset'
----
-
-Storybook's `Typeset` Doc Block helps document the fonts used throughout your project.
-
-
-
-## Working with MDX
-
-Similar to other documentation related Doc Blocks (e.g., `ColorPalette`, `IconGallery`), the `TypeSet` Doc Block is also commonly used with MDX. It allows additional customization via options. Below is a condensed example and table featuring all the available options.
-
-
-
-
-
-
-
-| Option | Description |
-| ------------ | --------------------------------------------------------------------------------------- |
-| `fontFamily` | Provides a font family to be displayed . `` |
-| `fontSizes` | Provides a list of available font sizes. `` |
-| `fontWeight` | Defines the weight of the font to be displayed. `` |
-| `sampleText` | Defines the text to be displayed. `` |
diff --git a/docs/writing-docs/doc-blocks.md b/docs/writing-docs/doc-blocks.md
new file mode 100644
index 00000000000..a645dec1716
--- /dev/null
+++ b/docs/writing-docs/doc-blocks.md
@@ -0,0 +1,89 @@
+---
+title: Doc blocks
+---
+
+Storybook offers a number of doc blocks to help document your components and other aspects of your project.
+
+The blocks are most commonly used within Storybook's [MDX documentation](./mdx.md):
+
+
+
+
+```md
+{/* ButtonDocs.mdx */}
+import { Meta, Primary, Controls, Story } from '@storybook/blocks';
+import * as ButtonStories from './Button.stories';
+
+
+
+# Button
+
+A button is ...
+
+
+
+## Props
+
+
+
+## Stories
+
+### Primary
+
+Button can be primary-colored
+
+
+
+Button can be secondary-colored
+
+
+
+{/* ... */}
+```
+
+
+The blocks are also used in the default template for [automatics docs](./docs-page.md#setup-automated-documentation):
+
+
+
+```jsx
+import { Title, Subtitle, Description, Primary, Controls, Stories } from '@storybook/blocks';
+
+export const autoDocsTemplate = () => (
+ <>
+
+
+
+
+
+
+ >
+);
+```
+
+That template will show the primary (i.e. first) story for the component, a table documenting (and allowing you to control) the arg types of the primary story, and a list of all the stories in a condensed format.
+
+## Available blocks
+
+For a description and API details of each block, see the API reference:
+
+- [`ArgTypes`](../api/doc-block-argtypes.md)
+- [`Canvas`](../api/doc-block-canvas.md)
+- [`ColorPalette`](../api/doc-block-colorpalette.md)
+- [`Controls`](../api/doc-block-controls.md)
+- [`Description`](../api/doc-block-description.md)
+- [`IconGallery`](../api/doc-block-icongallery.md)
+- [`Markdown`](../api/doc-block-markdown.md)
+- [`Meta`](../api/doc-block-meta.md)
+- [`Primary`](../api/doc-block-primary.md)
+- [`Source`](../api/doc-block-source.md)
+- [`Stories`](../api/doc-block-stories.md)
+- [`Story`](../api/doc-block-story.md)
+- [`Subtitle`](../api/doc-block-subtitle.md)
+- [`Title`](../api/doc-block-title.md)
+- [`Typeset`](../api/doc-block-typeset.md)
+- [`Unstyled`](../api/doc-block-unstyled.md)
+
+## Make your own doc blocks
+
+Storybook also provides a [`useOf` hook](../api/doc-block-useof.md) to make it easier to create your own blocks that function in the same manner as the built-in blocks.
diff --git a/docs/writing-docs/docblock-preview-multi-mdx.png b/docs/writing-docs/docblock-preview-multi-mdx.png
deleted file mode 100644
index ee65b50c921..00000000000
Binary files a/docs/writing-docs/docblock-preview-multi-mdx.png and /dev/null differ
diff --git a/docs/writing-docs/docblock-preview.png b/docs/writing-docs/docblock-preview.png
deleted file mode 100644
index 60f79185339..00000000000
Binary files a/docs/writing-docs/docblock-preview.png and /dev/null differ
diff --git a/docs/writing-docs/docblock-source.png b/docs/writing-docs/docblock-source.png
deleted file mode 100644
index 9799656cac2..00000000000
Binary files a/docs/writing-docs/docblock-source.png and /dev/null differ
diff --git a/docs/writing-docs/docblock-story.png b/docs/writing-docs/docblock-story.png
deleted file mode 100644
index 1f93b4b36ef..00000000000
Binary files a/docs/writing-docs/docblock-story.png and /dev/null differ