mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-09 00:19:13 +08:00
split essentials in index/preset
This commit is contained in:
parent
e71bade8e2
commit
3f6a53e672
@ -25,7 +25,7 @@ import { definePreview } from '@storybook/react';
|
||||
import addonTest from '@storybook/experimental-addon-test';
|
||||
|
||||
import addonA11y from '@storybook/addon-a11y';
|
||||
import addonEssentials from '@storybook/addon-essentials/entry-preview';
|
||||
import addonEssentials from '@storybook/addon-essentials';
|
||||
import addonThemes from '@storybook/addon-themes';
|
||||
|
||||
import * as addonsPreview from '../addons/toolbars/template/stories/preview';
|
||||
|
@ -27,11 +27,6 @@
|
||||
"import": "./dist/index.mjs",
|
||||
"require": "./dist/index.js"
|
||||
},
|
||||
"./entry-preview": {
|
||||
"types": "./dist/preview.d.ts",
|
||||
"import": "./dist/preview.mjs",
|
||||
"require": "./dist/preview.js"
|
||||
},
|
||||
"./actions/preview": {
|
||||
"types": "./dist/actions/preview.d.ts",
|
||||
"import": "./dist/actions/preview.mjs",
|
||||
@ -77,6 +72,7 @@
|
||||
"import": "./dist/viewport/preview.mjs",
|
||||
"require": "./dist/viewport/preview.js"
|
||||
},
|
||||
"./preset": "./dist/preset.js",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"main": "dist/index.js",
|
||||
@ -86,9 +82,6 @@
|
||||
"*": {
|
||||
"*": [
|
||||
"dist/index.d.ts"
|
||||
],
|
||||
"entry-preview": [
|
||||
"dist/preview.d.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
@ -126,10 +119,13 @@
|
||||
},
|
||||
"bundler": {
|
||||
"nodeEntries": [
|
||||
"./src/index.ts",
|
||||
"./src/preset.ts",
|
||||
"./src/docs/preset.ts",
|
||||
"./src/docs/mdx-react-shim.ts"
|
||||
],
|
||||
"exportEntries": [
|
||||
"./src/index.ts"
|
||||
],
|
||||
"entries": [
|
||||
"./src/docs/manager.ts"
|
||||
],
|
||||
@ -144,7 +140,6 @@
|
||||
"./src/viewport/manager.ts"
|
||||
],
|
||||
"previewEntries": [
|
||||
"./src/preview.ts",
|
||||
"./src/actions/preview.ts",
|
||||
"./src/backgrounds/preview.ts",
|
||||
"./src/docs/preview.ts",
|
||||
|
@ -1,107 +1,22 @@
|
||||
import { isAbsolute, join } from 'node:path';
|
||||
import { composeConfigs, definePreview } from 'storybook/internal/preview-api';
|
||||
|
||||
import { serverRequire } from 'storybook/internal/common';
|
||||
import { logger } from 'storybook/internal/node-logger';
|
||||
import actionsAddon from '@storybook/addon-actions';
|
||||
import backgroundsAddon from '@storybook/addon-backgrounds';
|
||||
import docsAddon from '@storybook/addon-docs';
|
||||
import highlightAddon from '@storybook/addon-highlight';
|
||||
import measureAddon from '@storybook/addon-measure';
|
||||
import outlineAddon from '@storybook/addon-outline';
|
||||
import viewportAddon from '@storybook/addon-viewport';
|
||||
|
||||
interface PresetOptions {
|
||||
/**
|
||||
* Allow to use @storybook/addon-actions
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-actions
|
||||
*/
|
||||
actions?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-backgrounds
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-backgrounds
|
||||
*/
|
||||
backgrounds?: boolean;
|
||||
configDir: string;
|
||||
/**
|
||||
* Allow to use @storybook/addon-controls
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-controls
|
||||
*/
|
||||
controls?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-docs
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-docs
|
||||
*/
|
||||
docs?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-measure
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-measure
|
||||
*/
|
||||
measure?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-outline
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-outline
|
||||
*/
|
||||
outline?: boolean;
|
||||
themes?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-toolbars
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-toolbars
|
||||
*/
|
||||
toolbars?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-viewport
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-viewport
|
||||
*/
|
||||
viewport?: boolean;
|
||||
}
|
||||
|
||||
const requireMain = (configDir: string) => {
|
||||
const absoluteConfigDir = isAbsolute(configDir) ? configDir : join(process.cwd(), configDir);
|
||||
const mainFile = join(absoluteConfigDir, 'main');
|
||||
|
||||
return serverRequire(mainFile) ?? {};
|
||||
};
|
||||
|
||||
export function addons(options: PresetOptions) {
|
||||
const checkInstalled = (addonName: string, main: any) => {
|
||||
const addon = `@storybook/addon-${addonName}`;
|
||||
const existingAddon = main.addons?.find((entry: string | { name: string }) => {
|
||||
const name = typeof entry === 'string' ? entry : entry.name;
|
||||
return name?.startsWith(addon);
|
||||
});
|
||||
if (existingAddon) {
|
||||
logger.info(`Found existing addon ${JSON.stringify(existingAddon)}, skipping.`);
|
||||
}
|
||||
return !!existingAddon;
|
||||
};
|
||||
|
||||
const main = requireMain(options.configDir);
|
||||
|
||||
// NOTE: The order of these addons is important.
|
||||
return [
|
||||
'controls',
|
||||
'actions',
|
||||
'docs',
|
||||
'backgrounds',
|
||||
'viewport',
|
||||
'toolbars',
|
||||
'measure',
|
||||
'outline',
|
||||
'highlight',
|
||||
]
|
||||
.filter((key) => (options as any)[key] !== false)
|
||||
.filter((addon) => !checkInstalled(addon, main))
|
||||
.map((addon) => {
|
||||
// We point to the re-export from addon-essentials to support yarn pnp and pnpm.
|
||||
return `@storybook/addon-essentials/${addon}`;
|
||||
});
|
||||
}
|
||||
export default () =>
|
||||
definePreview(
|
||||
composeConfigs([
|
||||
actionsAddon(),
|
||||
docsAddon(),
|
||||
backgroundsAddon(),
|
||||
viewportAddon(),
|
||||
measureAddon(),
|
||||
outlineAddon(),
|
||||
highlightAddon(),
|
||||
])
|
||||
);
|
||||
|
107
code/addons/essentials/src/preset.ts
Normal file
107
code/addons/essentials/src/preset.ts
Normal file
@ -0,0 +1,107 @@
|
||||
import { isAbsolute, join } from 'node:path';
|
||||
|
||||
import { serverRequire } from 'storybook/internal/common';
|
||||
import { logger } from 'storybook/internal/node-logger';
|
||||
|
||||
interface PresetOptions {
|
||||
/**
|
||||
* Allow to use @storybook/addon-actions
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-actions
|
||||
*/
|
||||
actions?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-backgrounds
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-backgrounds
|
||||
*/
|
||||
backgrounds?: boolean;
|
||||
configDir: string;
|
||||
/**
|
||||
* Allow to use @storybook/addon-controls
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-controls
|
||||
*/
|
||||
controls?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-docs
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-docs
|
||||
*/
|
||||
docs?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-measure
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-measure
|
||||
*/
|
||||
measure?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-outline
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-outline
|
||||
*/
|
||||
outline?: boolean;
|
||||
themes?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-toolbars
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-toolbars
|
||||
*/
|
||||
toolbars?: boolean;
|
||||
/**
|
||||
* Allow to use @storybook/addon-viewport
|
||||
*
|
||||
* @default true
|
||||
* @see https://storybook.js.org/addons/@storybook/addon-viewport
|
||||
*/
|
||||
viewport?: boolean;
|
||||
}
|
||||
|
||||
const requireMain = (configDir: string) => {
|
||||
const absoluteConfigDir = isAbsolute(configDir) ? configDir : join(process.cwd(), configDir);
|
||||
const mainFile = join(absoluteConfigDir, 'main');
|
||||
|
||||
return serverRequire(mainFile) ?? {};
|
||||
};
|
||||
|
||||
export function addons(options: PresetOptions) {
|
||||
const checkInstalled = (addonName: string, main: any) => {
|
||||
const addon = `@storybook/addon-${addonName}`;
|
||||
const existingAddon = main.addons?.find((entry: string | { name: string }) => {
|
||||
const name = typeof entry === 'string' ? entry : entry.name;
|
||||
return name?.startsWith(addon);
|
||||
});
|
||||
if (existingAddon) {
|
||||
logger.info(`Found existing addon ${JSON.stringify(existingAddon)}, skipping.`);
|
||||
}
|
||||
return !!existingAddon;
|
||||
};
|
||||
|
||||
const main = requireMain(options.configDir);
|
||||
|
||||
// NOTE: The order of these addons is important.
|
||||
return [
|
||||
'controls',
|
||||
'actions',
|
||||
'docs',
|
||||
'backgrounds',
|
||||
'viewport',
|
||||
'toolbars',
|
||||
'measure',
|
||||
'outline',
|
||||
'highlight',
|
||||
]
|
||||
.filter((key) => (options as any)[key] !== false)
|
||||
.filter((addon) => !checkInstalled(addon, main))
|
||||
.map((addon) => {
|
||||
// We point to the re-export from addon-essentials to support yarn pnp and pnpm.
|
||||
return `@storybook/addon-essentials/${addon}`;
|
||||
});
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
import { composeConfigs, definePreview } from 'storybook/internal/preview-api';
|
||||
|
||||
import actionsAddon from '@storybook/addon-actions';
|
||||
import backgroundsAddon from '@storybook/addon-backgrounds';
|
||||
import docsAddon from '@storybook/addon-docs';
|
||||
import highlightAddon from '@storybook/addon-highlight';
|
||||
import measureAddon from '@storybook/addon-measure';
|
||||
import outlineAddon from '@storybook/addon-outline';
|
||||
import viewportAddon from '@storybook/addon-viewport';
|
||||
|
||||
export default () =>
|
||||
definePreview(
|
||||
composeConfigs([
|
||||
actionsAddon(),
|
||||
docsAddon(),
|
||||
backgroundsAddon(),
|
||||
viewportAddon(),
|
||||
measureAddon(),
|
||||
outlineAddon(),
|
||||
highlightAddon(),
|
||||
])
|
||||
);
|
@ -37,12 +37,7 @@ export async function getAddonAnnotations(addon: string) {
|
||||
data.importPath = `@storybook/${addon}/preview`;
|
||||
}
|
||||
|
||||
// TODO: current workaround needed only for essentials, fix this once we change the preview entry-point for that package
|
||||
if (addon === '@storybook/addon-essentials') {
|
||||
data.importPath = '@storybook/addon-essentials/entry-preview';
|
||||
} else {
|
||||
require.resolve(path.join(addon, 'preview'));
|
||||
}
|
||||
require.resolve(path.join(addon, 'preview'));
|
||||
|
||||
return data;
|
||||
} catch (err) {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user