112 lines
3.6 KiB
TypeScript
112 lines
3.6 KiB
TypeScript
import {StorybookConfig} from '@storybook/angular';
|
|
import * as path from 'path';
|
|
|
|
const config: StorybookConfig = {
|
|
stories: ['../src/**/*.stories.@(js|jsx|ts|tsx|mdx)'],
|
|
addons: [
|
|
'@storybook/addon-links',
|
|
'@storybook/addon-docs',
|
|
// '@storybook/addon-viewport',
|
|
// Removed deprecated addons:
|
|
// '@storybook/addon-backgrounds' - no longer exists in Storybook 9.0+
|
|
// '@storybook/addon-controls' - no longer exists in Storybook 9.0+
|
|
// ... autres addons
|
|
],
|
|
staticDirs: ['../../my-workspace/projects/sae-lib/public'],
|
|
framework: {
|
|
name: '@storybook/angular',
|
|
options: {}
|
|
},
|
|
webpackFinal: async (config) => {
|
|
if (config.module?.rules) {
|
|
// Support MDX
|
|
config.module.rules.push({
|
|
test: /\.mdx?$/,
|
|
use: [{loader: require.resolve('@mdx-js/loader')}],
|
|
});
|
|
|
|
// Support fonts amélioré
|
|
config.module.rules.push({
|
|
test: /\.(woff|woff2|eot|ttf|otf)$/,
|
|
type: 'asset/resource',
|
|
generator: {filename: 'fonts/[name].[contenthash][ext]'},
|
|
});
|
|
|
|
// Support for remixicon font files specifically
|
|
config.module.rules.push({
|
|
test: /remixicon.*\.(woff|woff2|eot|ttf|svg)$/,
|
|
type: 'asset/resource',
|
|
generator: {filename: 'fonts/[name].[contenthash][ext]'},
|
|
});
|
|
|
|
// Add CSS loader rule to handle @font-face declarations
|
|
config.module.rules.push({
|
|
test: /\.css$/,
|
|
use: [
|
|
'style-loader',
|
|
{
|
|
loader: 'css-loader',
|
|
options: {
|
|
url: true
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
// NOUVELLE SOLUTION : Configurer css-loader pour gérer les URLs
|
|
const scssRules = config.module.rules.filter(rule => {
|
|
if (rule && typeof rule === 'object' && 'test' in rule && rule.test) {
|
|
const testString = rule.test.toString();
|
|
return testString.includes('scss') || testString.includes('sass');
|
|
}
|
|
return false;
|
|
});
|
|
|
|
scssRules.forEach(rule => {
|
|
if (rule && typeof rule === 'object' && 'use' in rule && Array.isArray(rule.use)) {
|
|
const cssLoaderIndex = rule.use.findIndex((loader: any) => {
|
|
if (typeof loader === 'string') {
|
|
return loader.includes('css-loader');
|
|
}
|
|
return loader && loader.loader && loader.loader.includes('css-loader');
|
|
});
|
|
|
|
if (cssLoaderIndex !== -1) {
|
|
const cssLoader = rule.use[cssLoaderIndex] as any;
|
|
if (typeof cssLoader === 'object' && cssLoader.options) {
|
|
cssLoader.options.url = {
|
|
filter: (url: string) => {
|
|
// Skip problematic URLs with complex relative paths
|
|
if (url.includes('../../../../my-workspace/')) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Alias
|
|
if (!config.resolve) config.resolve = {};
|
|
if (!config.resolve.alias) config.resolve.alias = {};
|
|
|
|
config.resolve.alias['~src'] = path.resolve(__dirname, '../src');
|
|
config.resolve.alias['sae-lib'] = path.resolve(__dirname, '../../my-workspace/projects/sae-lib');
|
|
|
|
// Ajouter un alias pour remixicon
|
|
config.resolve.alias['remixicon'] = path.resolve(__dirname, '../node_modules/remixicon');
|
|
|
|
// Modules resolution
|
|
if (!config.resolve.modules) config.resolve.modules = [];
|
|
config.resolve.modules.push(path.resolve(__dirname, '../node_modules'));
|
|
|
|
config.resolve.symlinks = true;
|
|
|
|
return config;
|
|
}
|
|
};
|
|
|
|
export default config;
|