Skip to content
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import React from 'react';

import { styled } from 'storybook/internal/theming';

import type { Meta, StoryObj } from '@storybook/react-vite';

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

import { Heading } from '../blocks/Heading';
import { TableOfContents } from './TableOfContents';
Expand Down
2 changes: 1 addition & 1 deletion code/addons/pseudo-states/src/manager/PseudoStateTool.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React, { type ComponentProps, useCallback } from 'react';

import { Form, IconButton, TooltipLinkList, WithTooltip } from 'storybook/internal/components';
import { color, styled } from 'storybook/internal/theming';

import { ButtonIcon, RefreshIcon } from '@storybook/icons';

import { useGlobals } from 'storybook/manager-api';
import { color, styled } from 'storybook/theming';

import { PARAM_KEY, PSEUDO_STATES } from '../constants';

Expand Down
3 changes: 2 additions & 1 deletion code/addons/pseudo-states/src/stories/CSSAtRules.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import React, { type ComponentProps } from 'react';

import { FORCE_REMOUNT } from 'storybook/internal/core-events';
import { useChannel, useStoryContext } from 'storybook/internal/preview-api';

import type { Meta, StoryObj } from '@storybook/react-vite';

import { useChannel, useStoryContext } from 'storybook/preview-api';

import { Button } from './CSSAtRules';
import './grid.css';

Expand Down
3 changes: 2 additions & 1 deletion code/addons/vitest/src/components/SidebarContextMenu.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { FC } from 'react';
import React from 'react';

import { type API } from 'storybook/internal/manager-api';
import type { API_HashEntry } from 'storybook/internal/types';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

🧩 Analysis chain

Consider migrating API_HashEntry import to public API.

The API_HashEntry type is still being imported from storybook/internal/types. For consistency with the PR's goal to eliminate internal API usage, verify if this type is available through a public entrypoint.


🏁 Script executed:

#!/bin/bash
# Description: Check if API_HashEntry is available in public APIs

# Search for API_HashEntry export in public entrypoints
echo "Searching for API_HashEntry in public manager-api..."
rg -n "export.*API_HashEntry" --type=ts -g "!**/internal/**"

echo "Searching for API_HashEntry type definition..."
ast-grep --pattern 'export type API_HashEntry = $$$' 

echo "Checking current usage of API_HashEntry..."
rg -n "API_HashEntry" --type=ts -C2

Length of output: 12059


Replace internal API_HashEntry imports with the public manager-api type

API_HashEntry is defined in code/core/src/types/modules/api-stories.ts and is re‑exported by manager-api as HashEntry — replace imports from 'storybook/internal/types' with a public import (e.g. import type { HashEntry as API_HashEntry } from 'storybook/manager-api') in:

  • code/addons/vitest/src/components/SidebarContextMenu.tsx
  • code/addons/vitest/src/types.ts
  • code/addons/vitest/src/components/TestProviderRender.tsx
🤖 Prompt for AI Agents
In code/addons/vitest/src/components/SidebarContextMenu.tsx (line 4) and the
other affected files code/addons/vitest/src/types.ts and
code/addons/vitest/src/components/TestProviderRender.tsx, replace the internal
import "import type { API_HashEntry } from 'storybook/internal/types';" with the
public manager-api re-export by importing HashEntry from 'storybook/manager-api'
and aliasing it to API_HashEntry (for example: import type { HashEntry as
API_HashEntry } from 'storybook/manager-api'), ensuring the type names remain
the same where used.


import { type API } from 'storybook/manager-api';

import { useTestProvider } from '../use-test-provider-state';
import { TestProviderRender } from './TestProviderRender';

Expand Down
1 change: 0 additions & 1 deletion code/builders/builder-vite/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ export const INCLUDE_CANDIDATES = [
'storybook/actions/decorator',
'storybook/internal/core-events',
'storybook/internal/csf',
'storybook/internal/preview-api',
'storybook/internal/preview/runtime',
'storybook/preview-api',
'storybook/viewport',
Expand Down
16 changes: 8 additions & 8 deletions code/core/build-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,27 +97,27 @@ const config: BuildEntries = {
entryPoint: './src/instrumenter/index.ts',
},
{
exportEntries: ['./test', './internal/test'],
exportEntries: ['./test'],
entryPoint: './src/test/index.ts',
},
{
exportEntries: ['./preview-api', './internal/preview-api'],
entryPoint: './src/preview-api/index.ts',
},
{
exportEntries: ['./highlight', './internal/highlight'],
exportEntries: ['./highlight'],
entryPoint: './src/highlight/index.ts',
},
{
exportEntries: ['./actions', './internal/actions'],
exportEntries: ['./actions'],
entryPoint: './src/actions/index.ts',
},
{
exportEntries: ['./actions/decorator', './internal/actions/decorator'],
exportEntries: ['./actions/decorator'],
entryPoint: './src/actions/decorator.ts',
},
{
exportEntries: ['./viewport', './internal/viewport'],
exportEntries: ['./viewport'],
entryPoint: './src/viewport/index.ts',
},
{
Expand Down Expand Up @@ -145,19 +145,19 @@ const config: BuildEntries = {
dts: false,
},
{
exportEntries: ['./theming', './internal/theming'],
exportEntries: ['./theming'],
entryPoint: './src/theming/index.ts',
},
{
exportEntries: ['./theming/create', './internal/theming/create'],
exportEntries: ['./theming/create'],
entryPoint: './src/theming/create.ts',
},
{
exportEntries: ['./internal/components'],
entryPoint: './src/components/index.ts',
},
{
exportEntries: ['./manager-api', './internal/manager-api'],
exportEntries: ['./manager-api'],
entryPoint: './src/manager-api/index.ts',
},
{
Expand Down
32 changes: 0 additions & 32 deletions code/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,6 @@
"types": "./dist/highlight/index.d.ts",
"default": "./dist/highlight/index.js"
},
"./internal/actions": {
"types": "./dist/actions/index.d.ts",
"default": "./dist/actions/index.js"
},
"./internal/actions/decorator": {
"types": "./dist/actions/decorator.d.ts",
"default": "./dist/actions/decorator.js"
},
"./internal/babel": {
"types": "./dist/babel/index.d.ts",
"default": "./dist/babel/index.js"
Expand Down Expand Up @@ -113,18 +105,10 @@
"types": "./dist/docs-tools/index.d.ts",
"default": "./dist/docs-tools/index.js"
},
"./internal/highlight": {
"types": "./dist/highlight/index.d.ts",
"default": "./dist/highlight/index.js"
},
"./internal/instrumenter": {
"types": "./dist/instrumenter/index.d.ts",
"default": "./dist/instrumenter/index.js"
},
"./internal/manager-api": {
"types": "./dist/manager-api/index.d.ts",
"default": "./dist/manager-api/index.js"
},
"./internal/manager-errors": {
"types": "./dist/manager-errors.d.ts",
"default": "./dist/manager-errors.js"
Expand Down Expand Up @@ -163,26 +147,10 @@
"types": "./dist/telemetry/index.d.ts",
"default": "./dist/telemetry/index.js"
},
"./internal/test": {
"types": "./dist/test/index.d.ts",
"default": "./dist/test/index.js"
},
"./internal/theming": {
"types": "./dist/theming/index.d.ts",
"default": "./dist/theming/index.js"
},
"./internal/theming/create": {
"types": "./dist/theming/create.d.ts",
"default": "./dist/theming/create.js"
},
"./internal/types": {
"types": "./dist/types/index.d.ts",
"default": "./dist/types/index.js"
},
"./internal/viewport": {
"types": "./dist/viewport/index.d.ts",
"default": "./dist/viewport/index.js"
},
"./manager-api": {
"types": "./dist/manager-api/index.d.ts",
"default": "./dist/manager-api/index.js"
Expand Down
4 changes: 2 additions & 2 deletions code/core/src/components/components/Button/Button.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React from 'react';

import { styled } from 'storybook/internal/theming';

import { FaceHappyIcon } from '@storybook/icons';

import { styled } from 'storybook/theming';

import preview from '../../../../../.storybook/preview';
import { Button } from './Button';

Expand Down
2 changes: 1 addition & 1 deletion code/core/src/components/components/Form/Checkbox.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';

import { color, styled } from 'storybook/internal/theming';
import { color, styled } from 'storybook/theming';

const Input = styled.input({
appearance: 'none',
Expand Down
2 changes: 1 addition & 1 deletion code/core/src/components/components/Form/Radio.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';

import { color, styled } from 'storybook/internal/theming';
import { color, styled } from 'storybook/theming';

const Input = styled.input({
appearance: 'none',
Expand Down
3 changes: 1 addition & 2 deletions code/core/src/highlight/useHighlights.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React from 'react';

import { useChannel } from 'storybook/internal/preview-api';

import { useChannel } from 'storybook/preview-api';
import { fn, userEvent, within } from 'storybook/test';

import preview from '../../../.storybook/preview';
Expand Down
11 changes: 10 additions & 1 deletion code/core/src/manager/components/layout/Layout.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { FC, PropsWithChildren } from 'react';
import React, { useState } from 'react';

import { ManagerContext } from 'storybook/internal/manager-api';
import { LocationProvider } from 'storybook/internal/router';

import type { Meta, StoryObj } from '@storybook/react-vite';

import { action } from 'storybook/actions';
import { ManagerContext } from 'storybook/manager-api';
import { fn } from 'storybook/test';
import { styled } from 'storybook/theming';

Expand Down Expand Up @@ -63,6 +63,15 @@ const managerContext: any = {
state: {},
api: {
foo: 'bar',
getCurrentStoryData: fn()
.mockName('api::getCurrentStoryData')
.mockImplementation(() => ({
id: '123',
name: 'Test Story',
renderLabel: fn()
.mockName('api::getCurrentStoryData::renderLabel')
.mockImplementation(() => 'Test Story'),
})),
getNavSizeWithCustomisations: fn()
.mockName('api::getNavSizeWithCustomisations')
.mockImplementation((size: number) => size),
Expand Down
19 changes: 19 additions & 0 deletions code/core/src/manager/globals/globals-module-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,16 @@ import { globalPackages, globalsNameReferenceMap } from './globals';
* The `runtime.ts` file is used inside the manager's browser code runtime.
*/

const duplicatedKeys = [
'storybook/theming',
'storybook/theming/create',
'storybook/manager-api',
'storybook/test',
'storybook/actions',
'storybook/highlight',
'storybook/viewport',
];

export const globalsModuleInfoMap = globalPackages.reduce(
(acc, key) => {
acc[key] = {
Expand All @@ -30,6 +40,15 @@ export const globalsModuleInfoMap = globalPackages.reduce(
namedExports: Exports[key],
defaultExport: true,
};

if (duplicatedKeys.includes(key)) {
acc[key.replace('storybook', 'storybook/internal') as typeof key] = {
type: 'esm',
varName: globalsNameReferenceMap[key],
namedExports: Exports[key],
defaultExport: true,
};
}
return acc;
},
{} as Required<Record<keyof typeof globalsNameReferenceMap, Required<ModuleInfo>>>
Expand Down
2 changes: 1 addition & 1 deletion code/core/src/preview/globals/globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const globalsNameReferenceMap = {
'storybook/internal/preview-errors': '__STORYBOOK_MODULE_CORE_EVENTS_PREVIEW_ERRORS__',
'storybook/internal/types': '__STORYBOOK_MODULE_TYPES__',

// @deprecated TODO: Remove in 9.1
// @deprecated TODO: Remove in 9.1 or some point in the future, I guess
'storybook/internal/preview-api': '__STORYBOOK_MODULE_PREVIEW_API__',
} as const;

Expand Down
1 change: 0 additions & 1 deletion code/core/src/preview/globals/runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ export const globalsNameValueMap: Required<Record<keyof typeof globalsNameRefere
'storybook/internal/core-events': CORE_EVENTS,
'storybook/internal/types': TYPES,
'storybook/internal/preview-errors': CORE_EVENTS_PREVIEW_ERRORS,

'storybook/internal/preview-api': PREVIEW_API,
};
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,18 @@ export const consolidatedImports: Fix<ConsolidatedOptions> = {

const importErrors = await transformImportFiles(
[...storiesPaths, ...configFiles].filter(Boolean) as string[],
consolidatedPackages,
{
...consolidatedPackages,
'storybook/internal/manager-api': 'storybook/manager-api',
'storybook/internal/preview-api': 'storybook/preview-api',
'storybook/internal/theming': 'storybook/theming',
'storybook/internal/theming/create': 'storybook/theming/create',
'storybook/internal/test': 'storybook/test',
'storybook/internal/actions': 'storybook/internal/actions',
'storybook/internal/actions/decorator': 'storybook/internal/actions/decorator',
'storybook/internal/highlight': 'storybook/internal/highlight',
'storybook/internal/viewport': 'storybook/internal/viewport',
},
!!dryRun
);

Expand Down
4 changes: 2 additions & 2 deletions code/renderers/react/template/stories/decorators.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type { FC } from 'react';
import React, { createContext, useContext, useState } from 'react';

import { useParameter } from 'storybook/internal/preview-api';

import type { Meta, StoryObj } from '@storybook/react';

import { useParameter } from 'storybook/preview-api';

const Component: FC = () => <p>Story</p>;

export default {
Expand Down