/ .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  }