/ .storybook / main.ts
main.ts
1 import { fileURLToPath } from "node:url"; 2 import { dirname } from "node:path"; 3 import type { StorybookConfig } from '@storybook/react-vite'; 4 5 const config: StorybookConfig = { 6 stories: [ 7 // stories/ has MDX docs + top-level stories (no component duplicates) 8 '../stories/Introduction.mdx', 9 '../stories/**/*.mdx', 10 // src/components/ is the canonical story source — don't load stories/ .tsx too 11 '../src/components/**/*.stories.@(js|jsx|mjs|ts|tsx)', 12 ], 13 addons: [ 14 getAbsolutePath("@storybook/addon-links"), 15 getAbsolutePath("@storybook/addon-a11y"), 16 getAbsolutePath("@chromatic-com/storybook"), 17 getAbsolutePath("@storybook/addon-docs"), 18 getAbsolutePath("@storybook/addon-mcp") 19 ], 20 framework: { 21 name: getAbsolutePath("@storybook/react-vite"), 22 options: {}, 23 }, 24 staticDirs: ['../public'], 25 viteFinal: async (config) => { 26 return config; 27 }, 28 }; 29 30 export default config; 31 32 function getAbsolutePath(value: string): any { 33 return dirname(fileURLToPath(import.meta.resolve(`${value}/package.json`))); 34 }