| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import type { StorybookConfig } from "@storybook/react-webpack5";
- const config: StorybookConfig = {
- stories: ["../../../libs/**/*.@(mdx|stories.@(js|jsx|ts|tsx))", "../../../apps/**/*.@(mdx|stories.@(js|jsx|ts|tsx))"],
- staticDirs: ["../public"],
- addons: ["@nx/react/plugins/storybook", "@storybook/addon-docs", "../addons/theme-toggle/register"],
- webpackFinal(config) {
- const css_prefix = "ls-";
- const rules = config.module?.rules ?? [];
- for (const rule of rules) {
- if (!rule || typeof rule === "string") continue;
- const testString = rule.test?.toString() ?? "";
- const isCss = testString.includes("\\.css");
- const isScss = testString.includes("scss") || testString.includes("sass");
- if (isCss) {
- rule.exclude = /tailwind\.css/;
- }
- // Apply BEM class prefixing to non-module SCSS files
- if (isScss && rule.oneOf) {
- const scssRules = rule.oneOf.filter((r: any) => {
- if (!r.use) return false;
- const testString = r.test?.toString() ?? "";
- // Skip CSS modules and node_modules
- if (testString.match(/module/) || r.exclude?.toString().includes("node_modules")) return false;
- // Target rules with css-loader
- return (
- testString.match(/scss|sass/) &&
- Array.isArray(r.use) &&
- r.use.some((u: any) => u.loader && u.loader.includes("css-loader"))
- );
- });
- scssRules.forEach((r: any) => {
- const cssLoader = r.use.find((use: any) => use.loader && use.loader.includes("css-loader"));
- if (cssLoader && cssLoader.options) {
- cssLoader.options.modules = {
- localIdentName: `${css_prefix}[local]`,
- getLocalIdent(ctx: any, _ident: any, className: string) {
- // Skip prefixing for Storybook preview styles (targets Storybook DOM classes)
- if (ctx.resourcePath?.includes("preview.scss")) return className;
- if (className.includes("ant")) return className;
- },
- };
- }
- });
- }
- }
- return {
- ...config,
- module: {
- ...(config.module ?? {}),
- rules: [
- {
- test: /tailwind\.css/,
- exclude: /node_modules/,
- use: [
- "style-loader",
- {
- loader: "css-loader",
- options: {
- importLoaders: 1,
- },
- },
- "postcss-loader",
- ],
- },
- ...(config.module?.rules ?? []),
- ],
- },
- };
- },
- framework: "@storybook/react-webpack5",
- typescript: {
- reactDocgen: "react-docgen",
- },
- };
- export default config;
- // To customize your webpack configuration you can use the webpackFinal field.
- // Check https://storybook.js.org/docs/react/builders/webpack#extending-storybooks-webpack-config
- // and https://nx.dev/recipes/storybook/custom-builder-configs
|