Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
867aedc
explore service subscription and static builds, as well as state writ…
JReinhold May 19, 2026
11088ff
migrate to alien-signals
JReinhold May 19, 2026
95c136d
update api shape
JReinhold May 20, 2026
150feb0
Merge branch 'next' of github.com:storybookjs/storybook into jeppe/se…
JReinhold May 20, 2026
c042dbd
use immer for setting state.
JReinhold May 20, 2026
c47c02f
improvements
JReinhold May 20, 2026
7a5b611
structural improvements
JReinhold May 20, 2026
f5e8f29
validation, docs, code organisation
JReinhold May 20, 2026
74d28c6
Open-Service: add README diagrams
JReinhold May 20, 2026
6a0a59d
add more comments
JReinhold May 21, 2026
3389d9c
Open-Service: add gap coverage tests
JReinhold May 21, 2026
502958d
dedupe
JReinhold May 21, 2026
6c4bebb
Merge branch 'next' into jeppe/service-arch-explorations
JReinhold May 21, 2026
747dca3
fix testing library placement
JReinhold May 21, 2026
627092a
Merge branch 'jeppe/service-arch-explorations' of github.com:storyboo…
JReinhold May 21, 2026
5ac59b9
Merge branch 'next' into jeppe/service-arch-explorations
JReinhold May 21, 2026
c18835c
cleanup
JReinhold May 21, 2026
7ffd1e4
Merge branch 'jeppe/service-arch-explorations' of github.com:storyboo…
JReinhold May 21, 2026
7ddd119
improve error structure and validation with zod
JReinhold May 21, 2026
30abea3
cleanup
JReinhold May 21, 2026
75c1c06
Maintenance: fix PR checks
JReinhold May 21, 2026
e7a5d1b
Merge branch 'next' into jeppe/service-arch-explorations
JReinhold May 21, 2026
6e309ce
Build: Bump Node.js to 22.22.3
valentinpalkovic May 22, 2026
3e16f6d
docs: improve ArgsTable empty state guidance
Aniketiitk21 May 19, 2026
3c250b2
test: move ArgsTable empty-state checks into stories
Aniketiitk21 May 20, 2026
d97cc98
Reformat
Sidnioulz May 26, 2026
4ff8c08
Merge branch 'next' into jeppe/service-arch-explorations
ndelangen May 26, 2026
946dc34
Merge branch 'next' into valentin/bump-node-22.22.3
valentinpalkovic May 26, 2026
a26bbe8
Adjust copy based on designer feedback
Sidnioulz May 26, 2026
80a2ecc
Avoid flaky test
Sidnioulz May 26, 2026
6a9d719
remove defineQuery and defineCommand helpers, rely completely on inli…
JReinhold May 26, 2026
a493ff3
Merge branch 'next' of github.com:storybookjs/storybook into jeppe/se…
JReinhold May 26, 2026
a6e475f
fix format
JReinhold May 27, 2026
73fa773
Merge pull request #34860 from storybookjs/jeppe/service-arch-explora…
JReinhold May 27, 2026
b0a02c5
Core: Add missing export to globals
Sidnioulz May 27, 2026
394ef59
Automatically recompile on branch switch
Sidnioulz May 27, 2026
0385ad4
Merge pull request #34857 from Aniketiitk21/docs/args-table-empty-sta…
Sidnioulz May 27, 2026
fa6af03
Apply suggestion from @Sidnioulz
Sidnioulz May 27, 2026
54f6b4d
Plan: address review comment
Copilot May 27, 2026
ead5b73
Honor SKIP_STORYBOOK_GIT_HOOKS in post-checkout hook
Copilot May 27, 2026
92c38e8
Merge pull request #34929 from storybookjs/sidnioulz/add-missing-glob…
valentinpalkovic May 27, 2026
c095ea4
Apply suggestion from @valentinpalkovic
valentinpalkovic May 27, 2026
23aef53
Merge pull request #34930 from storybookjs/sidnioulz/post-checkout-op…
Sidnioulz May 27, 2026
2221849
Merge pull request #34883 from storybookjs/valentin/bump-node-22.22.3
valentinpalkovic May 27, 2026
202d14d
Write changelog for 10.5.0-alpha.3 [skip ci]
storybook-bot May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/nx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ jobs:
});
- uses: actions/setup-node@v4
with:
node-version: 22
node-version-file: '.nvmrc'
cache: 'yarn'
- run: yarn install --immutable
- uses: nrwl/nx-set-shas@v4
Expand Down
3 changes: 3 additions & 0 deletions .husky/post-checkout
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
if [ -z "$SKIP_STORYBOOK_GIT_HOOKS" ] && [ "$STORYBOOK_COMPILE_ON_CHECKOUT" = "true" ]; then
yarn && yarn task compile -s compile
fi
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
22.22.1
22.22.3

2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ This file is the canonical instruction source for coding agents. Files like `CLA
Storybook is a large TypeScript monorepo. The git root is the repo root, the main code lives in `code/`, and build tooling lives in `scripts/`. The default branch is `next`.

- **Base branch**: `next` (all PRs should target `next`, not `main`)
- **Node.js**: `22.22.1` (see `.nvmrc`) — supports `.ts` natively via type stripping (no loader needed)
- **Node.js**: `22.12+` (see `.nvmrc`) — supports `.ts` natively via type stripping (no loader needed)
- **Package Manager**: Yarn Berry
- **Task orchestration**: NX plus the custom `yarn task` runner
- **CI environment**: Linux and Windows
Expand Down
22 changes: 22 additions & 0 deletions CHANGELOG.prerelease.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
## 10.5.0-alpha.3

- A11y-Addon: Preserve disabled a11y rules with runOnly - [#34649](https://github.com/storybookjs/storybook/pull/34649), thanks @cyphercodes!
- Add an optional TypeScript peer to react-vite - [#34627](https://github.com/storybookjs/storybook/pull/34627), thanks @wojtekmaj!
- Addon-Docs: Resolve CSF4 module exports without a default export - [#34834](https://github.com/storybookjs/storybook/pull/34834), thanks @TheSeydiCharyyev!
- Addon-Docs: Resolve providerImportSource to a path instead of a file:// URL - [#34841](https://github.com/storybookjs/storybook/pull/34841), thanks @TheSeydiCharyyev!
- Build: Upgrade type-fest to latest version 5.6.0 - [#34791](https://github.com/storybookjs/storybook/pull/34791), thanks @tobiasdiez!
- CLI: Respect BROWSER and BROWSER_ARGS - [#34513](https://github.com/storybookjs/storybook/pull/34513), thanks @ianzone!
- CSF-Next: Add tags type support for - [#34819](https://github.com/storybookjs/storybook/pull/34819), thanks @unional!
- CSF: Fix parsing of string literal export names - [#34901](https://github.com/storybookjs/storybook/pull/34901), thanks @shilman!
- Controls: Add label to Object JSON control - [#34766](https://github.com/storybookjs/storybook/pull/34766), thanks @Jaksenc!
- Controls: Improve ArgsTable empty state guidance - [#34857](https://github.com/storybookjs/storybook/pull/34857), thanks @Aniketiitk21!
- Core: Add missing export to globals - [#34929](https://github.com/storybookjs/storybook/pull/34929), thanks @Sidnioulz!
- Core: Add runtime instance registry - [#34863](https://github.com/storybookjs/storybook/pull/34863), thanks @kasperpeulen!
- Core: Categorize UniversalStore follower timeout error - [#34592](https://github.com/storybookjs/storybook/pull/34592), thanks @justismailmemon!
- Core: Fix EEXIST race condition in static file copying during build - [#34499](https://github.com/storybookjs/storybook/pull/34499), thanks @flt3150sk!
- Core: Improve ActionBar focus indicator in high contrast mode - [#34779](https://github.com/storybookjs/storybook/pull/34779), thanks @TheSeydiCharyyev!
- Core: Incorrect package json handling - [#34515](https://github.com/storybookjs/storybook/pull/34515), thanks @lino-levan!
- Maintenance: Centralize supported file extension lists - [#34844](https://github.com/storybookjs/storybook/pull/34844), thanks @valentinpalkovic!
- Open-Service: Add schema-driven service runtime - [#34860](https://github.com/storybookjs/storybook/pull/34860), thanks @JReinhold!
- UI: Allow manager-head favicon override - [#34809](https://github.com/storybookjs/storybook/pull/34809), thanks @MukundaKatta!

## 10.5.0-alpha.2

- A11y: Fix MDX heading anchors not keyboard accessible - [#34368](https://github.com/storybookjs/storybook/pull/34368), thanks @TheSeydiCharyyev!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React from 'react';
import type { Meta, StoryObj } from '@storybook/react-vite';

import { action } from 'storybook/actions';
import { expect, within } from 'storybook/test';
import { styled } from 'storybook/theming';

import * as ArgRow from './ArgRow.stories';
Expand Down Expand Up @@ -156,11 +157,34 @@ export const Error = {
},
};

export const Empty = {
args: {},
const expectEmptyState = async (canvasElement: HTMLElement) => {
const canvas = within(canvasElement);

await expect(await canvas.findByText('This story has no controls')).toBeVisible();
await expect(
await canvas.findByText(/Storybook couldn't find or generate any controls for this story/i)
).toBeVisible();
const learnMoreLink = await canvas.findByRole('link', {
name: /Read docs/i,
});

await expect(learnMoreLink).toBeVisible();
await expect(learnMoreLink).toHaveAttribute(
'href',
'https://storybook.js.org/docs/essentials/controls?ref=ui'
);
};

export const Empty: Story = {
args: {
rows: {},
},
parameters: {
layout: 'centered',
},
play: async ({ canvasElement }) => {
await expectEmptyState(canvasElement);
},
};

export const EmptyInsideAddonPanel: Story = {
Expand All @@ -171,6 +195,9 @@ export const EmptyInsideAddonPanel: Story = {
parameters: {
layout: 'centered',
},
play: async ({ canvasElement }) => {
await expectEmptyState(canvasElement);
},
};

export const WithDefaultExpandedArgs = {
Expand Down
38 changes: 11 additions & 27 deletions code/addons/docs/src/blocks/components/ArgsTable/Empty.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,39 +51,23 @@ export const Empty: FC<EmptyProps> = ({ inAddonPanel }) => {
return (
<Wrapper inAddonPanel={inAddonPanel}>
<EmptyTabContent
title={
inAddonPanel
? 'Interactive story playground'
: "Args table with interactive controls couldn't be auto-generated"
}
title="This story has no controls"
description={
<>
Controls give you an easy to use interface to test your components. Set your story args
and you&apos;ll see controls appearing here automatically.
Storybook couldn&apos;t find or generate any controls for this story. Define{' '}
<code>args</code> or <code>argTypes</code>, or configure docgen to let Storybook
generate controls automatically.
</>
}
footer={
<Links>
{inAddonPanel && (
<>
<Link
href="https://storybook.js.org/docs/essentials/controls?ref=ui"
target="_blank"
withArrow
>
<DocumentIcon /> Read docs
</Link>
</>
)}
{!inAddonPanel && (
<Link
href="https://storybook.js.org/docs/essentials/controls?ref=ui"
target="_blank"
withArrow
>
<DocumentIcon /> Learn how to set that up
</Link>
)}
<Link
href="https://storybook.js.org/docs/essentials/controls?ref=ui"
target="_blank"
withArrow
>
<DocumentIcon /> Read docs
</Link>
</Links>
}
/>
Expand Down
4 changes: 4 additions & 0 deletions code/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@
"@react-stately/tabs": "^3.8.5",
"@react-types/shared": "^3.32.0",
"@rolldown/pluginutils": "1.0.0-beta.18",
"@standard-schema/spec": "^1.1.0",
"@tanstack/react-virtual": "^3.3.0",
"@testing-library/react": "^14.0.0",
"@types/cross-spawn": "^6.0.6",
Expand All @@ -303,6 +304,7 @@
"@yarnpkg/libzip": "2.3.0",
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
"alien-signals": "^3.2.0",
"ansi-to-html": "^0.7.2",
"browser-dtector": "^3.4.0",
"bundle-require": "^5.1.0",
Expand Down Expand Up @@ -333,6 +335,7 @@
"globby": "^14.1.0",
"hast-util-to-estree": "^3.0.0",
"host-validation-middleware": "^0.1.2",
"immer": "11.1.8",
"jiti": "^2.6.1",
"js-yaml": "^4.1.0",
"jsdoc-type-pratt-parser": "^4.0.0",
Expand Down Expand Up @@ -385,6 +388,7 @@
"typescript": "^5.8.3",
"unique-string": "^3.0.0",
"use-resize-observer": "^9.1.0",
"valibot": "^1.4.0",
"watchpack": "^2.5.0",
"wrap-ansi": "^9.0.2",
"zod": "^3.25.76"
Expand Down
1 change: 1 addition & 0 deletions code/core/src/manager/globals/exports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -652,6 +652,7 @@ export default {
'ProviderDoesNotExtendBaseProviderError',
'StatusTypeIdMismatchError',
'UncaughtManagerError',
'UniversalStoreFollowerTimeoutError',
],
'storybook/internal/router': [
'BaseLocationProvider',
Expand Down
15 changes: 15 additions & 0 deletions code/core/src/server-errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { dedent } from 'ts-dedent';

import type { Status } from './shared/status-store/index.ts';
import type { StatusTypeId } from './shared/status-store/index.ts';
import { formatIssues } from './shared/open-service/errors.ts';
import type { ValidationMeta } from './shared/open-service/errors.ts';
import { StorybookError } from './storybook-error.ts';

export { StorybookError } from './storybook-error.ts';
Expand Down Expand Up @@ -152,6 +154,19 @@ export class InvalidStoriesEntryError extends StorybookError {
}
}

export class OpenServiceValidationError extends StorybookError {
constructor(public data: ValidationMeta) {
super({
name: 'OpenServiceValidationError',
category: Category.CORE_COMMON,
code: 5,
message: `Invalid ${data.phase} for ${data.kind} "${data.serviceId}.${data.name}":\n${formatIssues(
data.issues
)}`,
});
}
}

export class WebpackMissingStatsError extends StorybookError {
constructor() {
super({
Expand Down
Loading