import type { StorybookConfig } from 'storybook-react-rsbuild';

/* Dev-only playground. Never shipped — package `files` is ["dist"]. */
const config: StorybookConfig = {
  rsbuildFinal: (config) => {
    config.tools ??= {};
    // Append our rule without clobbering storybook-react-rsbuild's own
    // tools.rspack hook (it injects the storybook-config-entry virtual module
    // in build mode). Mutate in place and return nothing so its config stays.
    const prev = config.tools.rspack;
    config.tools.rspack = [
      ...(Array.isArray(prev) ? prev : prev ? [prev] : []),
      (rspackConfig) => {
        rspackConfig.module ??= {};
        rspackConfig.module.rules ??= [];
        (rspackConfig.module.rules as unknown[]).push({
          test: /\.mjs$/,
          type: 'javascript/auto',
          resolve: { fullySpecified: false },
        });
      },
    ];
    return config;
  },
  stories: ['../src/**/*.mdx', '../src/**/*.stories.@(ts|tsx)'],
  addons: ['@storybook/addon-docs'],
  staticDirs: ['../src/assets'],
  framework: {
    name: 'storybook-react-rsbuild',
    options: {},
  },
  typescript: {
    // Prop tables in autodocs come from the components' TS types.
    reactDocgen: 'react-docgen-typescript',
    reactDocgenTypescriptOptions: {
      shouldExtractLiteralValuesFromEnum: true,
      // Keep our own props + Radix primitives; drop other node_modules noise.
      propFilter: (prop) =>
        prop.parent
          ? !/node_modules/.test(prop.parent.fileName) ||
            /node_modules\/radix-ui/.test(prop.parent.fileName)
          : true,
    },
  },
};

export default config;
