@analogjs/storybook-angular 3.0.0-alpha.32 → 3.0.0-alpha.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/lib/debug.d.ts +1 -0
- package/src/lib/debug.js +7 -0
- package/src/lib/debug.js.map +1 -0
- package/src/lib/preset.js +44 -9
- package/src/lib/preset.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/storybook-angular",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.33",
|
|
4
4
|
"description": "Storybook Integration for Angular & Vite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"main": "./src/index.js",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@storybook/builder-vite": "^10.3.5"
|
|
39
|
+
"@storybook/builder-vite": "^10.3.5",
|
|
40
|
+
"obug": "^2.1.1"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
43
|
"@storybook/angular": "^10.0.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const debugStyles: unknown;
|
package/src/lib/debug.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createDebug } from "../../node_modules/.pnpm/obug@2.1.1/node_modules/obug/dist/browser.js";
|
|
2
|
+
//#region packages/storybook-angular/src/lib/debug.ts
|
|
3
|
+
var debugStyles = createDebug("analog-storybook:styles");
|
|
4
|
+
//#endregion
|
|
5
|
+
export { debugStyles };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","names":[],"sources":["../../../src/lib/debug.ts"],"sourcesContent":["import { createDebug } from 'obug';\n\nexport const debugStyles = createDebug('analog-storybook:styles');\n"],"mappings":";;AAEA,IAAa,cAAc,YAAY,0BAA0B"}
|
package/src/lib/preset.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { debugStyles } from "./debug.js";
|
|
1
2
|
import { existsSync } from "node:fs";
|
|
2
3
|
import { resolve } from "node:path";
|
|
3
4
|
import { addons, core as core$1 } from "@storybook/angular/preset";
|
|
@@ -73,6 +74,22 @@ var viteFinal = async (config, options) => {
|
|
|
73
74
|
};
|
|
74
75
|
function angularOptionsPlugin(options, { normalizePath, experimentalZoneless }) {
|
|
75
76
|
let resolvedConfig;
|
|
77
|
+
const resolveStyleImport = (extraImport, projectRoot, workspaceRoot) => {
|
|
78
|
+
const resolvedProjectImport = resolve(projectRoot, extraImport);
|
|
79
|
+
const resolvedWorkspaceImport = resolve(workspaceRoot, extraImport);
|
|
80
|
+
if (extraImport.startsWith(".") || extraImport.startsWith("src") || existsSync(resolvedProjectImport)) return {
|
|
81
|
+
specifier: resolvedProjectImport,
|
|
82
|
+
source: "project"
|
|
83
|
+
};
|
|
84
|
+
if (existsSync(resolvedWorkspaceImport)) return {
|
|
85
|
+
specifier: resolvedWorkspaceImport,
|
|
86
|
+
source: "workspace"
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
specifier: extraImport,
|
|
90
|
+
source: "bare"
|
|
91
|
+
};
|
|
92
|
+
};
|
|
76
93
|
return {
|
|
77
94
|
name: "analogjs-storybook-options-plugin",
|
|
78
95
|
config(userConfig) {
|
|
@@ -81,9 +98,17 @@ function angularOptionsPlugin(options, { normalizePath, experimentalZoneless })
|
|
|
81
98
|
const sassOptions = options?.angularBuilderOptions?.stylePreprocessorOptions?.sass;
|
|
82
99
|
if (Array.isArray(loadPaths)) {
|
|
83
100
|
const workspaceRoot = options.angularBuilderContext?.workspaceRoot ?? userConfig?.root ?? process.cwd();
|
|
101
|
+
const resolvedLoadPaths = loadPaths.map((loadPath) => `${resolve(workspaceRoot, loadPath)}`);
|
|
102
|
+
debugStyles("resolved SCSS load paths", {
|
|
103
|
+
configDir: options.configDir,
|
|
104
|
+
workspaceRoot,
|
|
105
|
+
projectRoot: userConfig?.root ?? process.cwd(),
|
|
106
|
+
loadPaths,
|
|
107
|
+
resolvedLoadPaths
|
|
108
|
+
});
|
|
84
109
|
return { css: { preprocessorOptions: { scss: {
|
|
85
110
|
...sassOptions,
|
|
86
|
-
loadPaths:
|
|
111
|
+
loadPaths: resolvedLoadPaths
|
|
87
112
|
} } } };
|
|
88
113
|
}
|
|
89
114
|
},
|
|
@@ -92,18 +117,28 @@ function angularOptionsPlugin(options, { normalizePath, experimentalZoneless })
|
|
|
92
117
|
const imports = [];
|
|
93
118
|
const styles = options?.angularBuilderOptions?.styles;
|
|
94
119
|
const workspaceRoot = options?.angularBuilderContext?.workspaceRoot ?? process.cwd();
|
|
95
|
-
if (Array.isArray(styles))
|
|
96
|
-
|
|
97
|
-
|
|
120
|
+
if (Array.isArray(styles)) {
|
|
121
|
+
debugStyles("injecting Storybook global styles", {
|
|
122
|
+
configDir: options.configDir,
|
|
123
|
+
workspaceRoot,
|
|
124
|
+
projectRoot: resolvedConfig?.root ?? process.cwd(),
|
|
125
|
+
styles
|
|
126
|
+
});
|
|
127
|
+
styles.forEach((style) => {
|
|
128
|
+
imports.push(style);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
98
131
|
if (!experimentalZoneless) imports.push("zone.js");
|
|
99
132
|
const projectRoot = resolvedConfig?.root ?? process.cwd();
|
|
100
133
|
return { code: `
|
|
101
134
|
${imports.map((extraImport) => {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
135
|
+
const resolved = resolveStyleImport(extraImport, projectRoot, workspaceRoot);
|
|
136
|
+
debugStyles("resolved Storybook style import", {
|
|
137
|
+
input: extraImport,
|
|
138
|
+
source: resolved.source,
|
|
139
|
+
specifier: resolved.specifier
|
|
140
|
+
});
|
|
141
|
+
return `import '${resolved.specifier}';`;
|
|
107
142
|
}).join("\n")}
|
|
108
143
|
${code}
|
|
109
144
|
` };
|
package/src/lib/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","names":[],"sources":["../../../src/lib/preset.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { core as PresetCore } from '@storybook/angular/preset';\nimport { fileURLToPath } from 'node:url';\nimport * as vite from 'vite';\nimport type { Plugin, UserConfig } from 'vite';\nimport angular from '@analogjs/vite-plugin-angular';\n\nexport const previewAnnotations = async (\n entries: string[] = [],\n options: any,\n): Promise<string[]> => {\n const config = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/config'),\n );\n const annotations = [...entries, config];\n\n if (options.enableProdMode) {\n const previewProdPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/preview-prod'),\n );\n annotations.unshift(previewProdPath);\n }\n\n const docsConfig = await options.presets.apply('docs', {}, options);\n const docsEnabled = Object.keys(docsConfig).length > 0;\n if (docsEnabled) {\n const docsConfigPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/docs/config'),\n );\n annotations.push(docsConfigPath);\n }\n return annotations;\n};\n\nexport const core = async (config: any, options: any): Promise<any> => {\n const presetCore = await PresetCore(config, options);\n return {\n ...presetCore,\n builder: {\n name: import.meta.resolve('@storybook/builder-vite'),\n options: { ...presetCore.options },\n },\n };\n};\n\nasync function resolveExperimentalZoneless(\n frameworkOptions: any,\n angularBuilderOptions: any,\n) {\n // 1. Explicit framework option (user's .storybook/main.ts)\n if (typeof frameworkOptions?.experimentalZoneless === 'boolean') {\n return frameworkOptions.experimentalZoneless;\n }\n\n // 2. Angular builder options (set by start-storybook/build-storybook)\n if (typeof angularBuilderOptions?.experimentalZoneless === 'boolean') {\n return angularBuilderOptions.experimentalZoneless;\n }\n\n // 3. Auto-detect Angular 21+ (matches @storybook/angular builder behavior)\n try {\n const { VERSION } = await import('@angular/core');\n return !!(VERSION.major && Number(VERSION.major) >= 21);\n } catch {\n return false;\n }\n}\n\nexport const viteFinal = async (config: any, options: any): Promise<any> => {\n // Remove any loaded analogjs plugins from a vite.config.(m)ts file\n config.plugins = (config.plugins ?? [])\n .flat()\n .filter((plugin: any) => !plugin.name.includes('analogjs'));\n\n // @ts-expect-error - untyped storybook presets API\n const framework = await options.presets.apply('framework');\n const experimentalZoneless = await resolveExperimentalZoneless(\n framework.options,\n options?.angularBuilderOptions,\n );\n return vite.mergeConfig(config, {\n // Add dependencies to pre-optimization\n optimizeDeps: {\n include: [\n '@storybook/angular/client',\n '@analogjs/storybook-angular',\n '@angular/compiler',\n '@angular/platform-browser',\n '@angular/platform-browser/animations',\n 'tslib',\n ...(experimentalZoneless ? [] : ['zone.js']),\n ],\n },\n resolve: {\n alias: {\n '@storybook/globalThis': '@storybook/global',\n },\n },\n plugins: [\n angular({\n jit:\n typeof framework.options?.jit !== 'undefined'\n ? framework.options?.jit\n : true,\n hmr:\n typeof framework.options?.hmr !== 'undefined'\n ? framework.options?.hmr\n : typeof framework.options?.liveReload !== 'undefined'\n ? framework.options?.liveReload\n : false,\n liveReload: framework.options?.liveReload,\n tsconfig:\n typeof framework.options?.tsconfig !== 'undefined'\n ? framework.options?.tsconfig\n : (options?.tsConfig ?? './.storybook/tsconfig.json'),\n inlineStylesExtension:\n typeof framework.options?.inlineStylesExtension !== 'undefined'\n ? framework.options?.inlineStylesExtension\n : 'css',\n }),\n angularOptionsPlugin(options, {\n normalizePath: vite.normalizePath,\n experimentalZoneless,\n }),\n storybookTransformConfigPlugin(),\n ],\n define: {\n STORYBOOK_ANGULAR_OPTIONS: JSON.stringify({\n experimentalZoneless: !!experimentalZoneless,\n }),\n },\n });\n};\n\nfunction angularOptionsPlugin(\n options: any,\n {\n normalizePath,\n experimentalZoneless,\n }: { normalizePath: (path: string) => string; experimentalZoneless: boolean },\n): Plugin {\n let resolvedConfig: UserConfig | undefined;\n return {\n name: 'analogjs-storybook-options-plugin',\n config(userConfig: UserConfig) {\n resolvedConfig = userConfig;\n const loadPaths =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.loadPaths;\n const sassOptions =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.sass;\n\n if (Array.isArray(loadPaths)) {\n const workspaceRoot =\n options.angularBuilderContext?.workspaceRoot ??\n userConfig?.root ??\n process.cwd();\n return {\n css: {\n preprocessorOptions: {\n scss: {\n ...sassOptions,\n loadPaths: loadPaths.map(\n (loadPath) => `${resolve(workspaceRoot, loadPath)}`,\n ),\n },\n },\n },\n };\n }\n\n return;\n },\n async transform(code: string, id: string) {\n if (\n normalizePath(id).endsWith(\n normalizePath(`${options.configDir}/preview.ts`),\n )\n ) {\n const imports = [];\n const styles = options?.angularBuilderOptions?.styles;\n const workspaceRoot =\n options?.angularBuilderContext?.workspaceRoot ?? process.cwd();\n\n if (Array.isArray(styles)) {\n styles.forEach((style) => {\n imports.push(style);\n });\n }\n\n if (!experimentalZoneless) {\n imports.push('zone.js');\n }\n\n // Use vite config root when angularBuilderContext is not available\n // (e.g., when running via Vitest instead of Angular builders)\n const projectRoot = resolvedConfig?.root ?? process.cwd();\n\n return {\n code: `\n ${imports\n .map((extraImport) => {\n const resolvedProjectImport = resolve(projectRoot, extraImport);\n const resolvedWorkspaceImport = resolve(\n workspaceRoot,\n extraImport,\n );\n\n if (\n extraImport.startsWith('.') ||\n extraImport.startsWith('src') ||\n existsSync(resolvedProjectImport)\n ) {\n // relative to root\n return `import '${resolvedProjectImport}';`;\n }\n\n if (existsSync(resolvedWorkspaceImport)) {\n return `import '${resolvedWorkspaceImport}';`;\n }\n\n // absolute import\n return `import '${extraImport}';`;\n })\n .join('\\n')}\n ${code}\n `,\n };\n }\n\n return;\n },\n };\n}\n\nfunction storybookTransformConfigPlugin(): Plugin {\n const configKey = vite.rolldownVersion ? 'oxc' : 'esbuild';\n\n return {\n name: 'analogjs-storybook-transform-config',\n apply: 'build',\n config() {\n return {\n [configKey]: {\n // Don't mangle class names during the build\n // This fixes display of compodoc argtypes\n keepNames: true,\n },\n };\n },\n };\n}\n\nexport { addons } from '@storybook/angular/preset';\n"],"mappings":";;;;;;;AAQA,IAAa,qBAAqB,OAChC,UAAoB,EAAE,EACtB,YACsB;CACtB,MAAM,SAAS,cACb,OAAO,KAAK,QAAQ,mCAAmC,CACxD;CACD,MAAM,cAAc,CAAC,GAAG,SAAS,OAAO;AAExC,KAAI,QAAQ,gBAAgB;EAC1B,MAAM,kBAAkB,cACtB,OAAO,KAAK,QAAQ,yCAAyC,CAC9D;AACD,cAAY,QAAQ,gBAAgB;;CAGtC,MAAM,aAAa,MAAM,QAAQ,QAAQ,MAAM,QAAQ,EAAE,EAAE,QAAQ;AAEnE,KADoB,OAAO,KAAK,WAAW,CAAC,SAAS,GACpC;EACf,MAAM,iBAAiB,cACrB,OAAO,KAAK,QAAQ,wCAAwC,CAC7D;AACD,cAAY,KAAK,eAAe;;AAElC,QAAO;;AAGT,IAAa,OAAO,OAAO,QAAa,YAA+B;CACrE,MAAM,aAAa,MAAM,OAAW,QAAQ,QAAQ;AACpD,QAAO;EACL,GAAG;EACH,SAAS;GACP,MAAM,OAAO,KAAK,QAAQ,0BAA0B;GACpD,SAAS,EAAE,GAAG,WAAW,SAAS;GACnC;EACF;;AAGH,eAAe,4BACb,kBACA,uBACA;AAEA,KAAI,OAAO,kBAAkB,yBAAyB,UACpD,QAAO,iBAAiB;AAI1B,KAAI,OAAO,uBAAuB,yBAAyB,UACzD,QAAO,sBAAsB;AAI/B,KAAI;EACF,MAAM,EAAE,YAAY,MAAM,OAAO;AACjC,SAAO,CAAC,EAAE,QAAQ,SAAS,OAAO,QAAQ,MAAM,IAAI;SAC9C;AACN,SAAO;;;AAIX,IAAa,YAAY,OAAO,QAAa,YAA+B;AAE1E,QAAO,WAAW,OAAO,WAAW,EAAE,EACnC,MAAM,CACN,QAAQ,WAAgB,CAAC,OAAO,KAAK,SAAS,WAAW,CAAC;CAG7D,MAAM,YAAY,MAAM,QAAQ,QAAQ,MAAM,YAAY;CAC1D,MAAM,uBAAuB,MAAM,4BACjC,UAAU,SACV,SAAS,sBACV;AACD,QAAO,KAAK,YAAY,QAAQ;EAE9B,cAAc,EACZ,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA,GAAI,uBAAuB,EAAE,GAAG,CAAC,UAAU;GAC5C,EACF;EACD,SAAS,EACP,OAAO,EACL,yBAAyB,qBAC1B,EACF;EACD,SAAS;GACP,QAAQ;IACN,KACE,OAAO,UAAU,SAAS,QAAQ,cAC9B,UAAU,SAAS,MACnB;IACN,KACE,OAAO,UAAU,SAAS,QAAQ,cAC9B,UAAU,SAAS,MACnB,OAAO,UAAU,SAAS,eAAe,cACvC,UAAU,SAAS,aACnB;IACR,YAAY,UAAU,SAAS;IAC/B,UACE,OAAO,UAAU,SAAS,aAAa,cACnC,UAAU,SAAS,WAClB,SAAS,YAAY;IAC5B,uBACE,OAAO,UAAU,SAAS,0BAA0B,cAChD,UAAU,SAAS,wBACnB;IACP,CAAC;GACF,qBAAqB,SAAS;IAC5B,eAAe,KAAK;IACpB;IACD,CAAC;GACF,gCAAgC;GACjC;EACD,QAAQ,EACN,2BAA2B,KAAK,UAAU,EACxC,sBAAsB,CAAC,CAAC,sBACzB,CAAC,EACH;EACF,CAAC;;AAGJ,SAAS,qBACP,SACA,EACE,eACA,wBAEM;CACR,IAAI;AACJ,QAAO;EACL,MAAM;EACN,OAAO,YAAwB;AAC7B,oBAAiB;GACjB,MAAM,YACJ,SAAS,uBAAuB,0BAA0B;GAC5D,MAAM,cACJ,SAAS,uBAAuB,0BAA0B;AAE5D,OAAI,MAAM,QAAQ,UAAU,EAAE;IAC5B,MAAM,gBACJ,QAAQ,uBAAuB,iBAC/B,YAAY,QACZ,QAAQ,KAAK;AACf,WAAO,EACL,KAAK,EACH,qBAAqB,EACnB,MAAM;KACJ,GAAG;KACH,WAAW,UAAU,KAClB,aAAa,GAAG,QAAQ,eAAe,SAAS,GAClD;KACF,EACF,EACF,EACF;;;EAKL,MAAM,UAAU,MAAc,IAAY;AACxC,OACE,cAAc,GAAG,CAAC,SAChB,cAAc,GAAG,QAAQ,UAAU,aAAa,CACjD,EACD;IACA,MAAM,UAAU,EAAE;IAClB,MAAM,SAAS,SAAS,uBAAuB;IAC/C,MAAM,gBACJ,SAAS,uBAAuB,iBAAiB,QAAQ,KAAK;AAEhE,QAAI,MAAM,QAAQ,OAAO,CACvB,QAAO,SAAS,UAAU;AACxB,aAAQ,KAAK,MAAM;MACnB;AAGJ,QAAI,CAAC,qBACH,SAAQ,KAAK,UAAU;IAKzB,MAAM,cAAc,gBAAgB,QAAQ,QAAQ,KAAK;AAEzD,WAAO,EACL,MAAM;cACF,QACC,KAAK,gBAAgB;KACpB,MAAM,wBAAwB,QAAQ,aAAa,YAAY;KAC/D,MAAM,0BAA0B,QAC9B,eACA,YACD;AAED,SACE,YAAY,WAAW,IAAI,IAC3B,YAAY,WAAW,MAAM,IAC7B,WAAW,sBAAsB,CAGjC,QAAO,WAAW,sBAAsB;AAG1C,SAAI,WAAW,wBAAwB,CACrC,QAAO,WAAW,wBAAwB;AAI5C,YAAO,WAAW,YAAY;MAC9B,CACD,KAAK,KAAK,CAAC;cACZ,KAAK;aAEV;;;EAKN;;AAGH,SAAS,iCAAyC;CAChD,MAAM,YAAY,KAAK,kBAAkB,QAAQ;AAEjD,QAAO;EACL,MAAM;EACN,OAAO;EACP,SAAS;AACP,UAAO,GACJ,YAAY,EAGX,WAAW,MACZ,EACF;;EAEJ"}
|
|
1
|
+
{"version":3,"file":"preset.js","names":[],"sources":["../../../src/lib/preset.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { core as PresetCore } from '@storybook/angular/preset';\nimport { fileURLToPath } from 'node:url';\nimport * as vite from 'vite';\nimport type { Plugin, UserConfig } from 'vite';\nimport angular from '@analogjs/vite-plugin-angular';\nimport { debugStyles } from './debug';\n\nexport const previewAnnotations = async (\n entries: string[] = [],\n options: any,\n): Promise<string[]> => {\n const config = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/config'),\n );\n const annotations = [...entries, config];\n\n if (options.enableProdMode) {\n const previewProdPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/preview-prod'),\n );\n annotations.unshift(previewProdPath);\n }\n\n const docsConfig = await options.presets.apply('docs', {}, options);\n const docsEnabled = Object.keys(docsConfig).length > 0;\n if (docsEnabled) {\n const docsConfigPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/docs/config'),\n );\n annotations.push(docsConfigPath);\n }\n return annotations;\n};\n\nexport const core = async (config: any, options: any): Promise<any> => {\n const presetCore = await PresetCore(config, options);\n return {\n ...presetCore,\n builder: {\n name: import.meta.resolve('@storybook/builder-vite'),\n options: { ...presetCore.options },\n },\n };\n};\n\nasync function resolveExperimentalZoneless(\n frameworkOptions: any,\n angularBuilderOptions: any,\n) {\n // 1. Explicit framework option (user's .storybook/main.ts)\n if (typeof frameworkOptions?.experimentalZoneless === 'boolean') {\n return frameworkOptions.experimentalZoneless;\n }\n\n // 2. Angular builder options (set by start-storybook/build-storybook)\n if (typeof angularBuilderOptions?.experimentalZoneless === 'boolean') {\n return angularBuilderOptions.experimentalZoneless;\n }\n\n // 3. Auto-detect Angular 21+ (matches @storybook/angular builder behavior)\n try {\n const { VERSION } = await import('@angular/core');\n return !!(VERSION.major && Number(VERSION.major) >= 21);\n } catch {\n return false;\n }\n}\n\nexport const viteFinal = async (config: any, options: any): Promise<any> => {\n // Remove any loaded analogjs plugins from a vite.config.(m)ts file\n config.plugins = (config.plugins ?? [])\n .flat()\n .filter((plugin: any) => !plugin.name.includes('analogjs'));\n\n // @ts-expect-error - untyped storybook presets API\n const framework = await options.presets.apply('framework');\n const experimentalZoneless = await resolveExperimentalZoneless(\n framework.options,\n options?.angularBuilderOptions,\n );\n return vite.mergeConfig(config, {\n // Add dependencies to pre-optimization\n optimizeDeps: {\n include: [\n '@storybook/angular/client',\n '@analogjs/storybook-angular',\n '@angular/compiler',\n '@angular/platform-browser',\n '@angular/platform-browser/animations',\n 'tslib',\n ...(experimentalZoneless ? [] : ['zone.js']),\n ],\n },\n resolve: {\n alias: {\n '@storybook/globalThis': '@storybook/global',\n },\n },\n plugins: [\n angular({\n jit:\n typeof framework.options?.jit !== 'undefined'\n ? framework.options?.jit\n : true,\n hmr:\n typeof framework.options?.hmr !== 'undefined'\n ? framework.options?.hmr\n : typeof framework.options?.liveReload !== 'undefined'\n ? framework.options?.liveReload\n : false,\n liveReload: framework.options?.liveReload,\n tsconfig:\n typeof framework.options?.tsconfig !== 'undefined'\n ? framework.options?.tsconfig\n : (options?.tsConfig ?? './.storybook/tsconfig.json'),\n inlineStylesExtension:\n typeof framework.options?.inlineStylesExtension !== 'undefined'\n ? framework.options?.inlineStylesExtension\n : 'css',\n }),\n angularOptionsPlugin(options, {\n normalizePath: vite.normalizePath,\n experimentalZoneless,\n }),\n storybookTransformConfigPlugin(),\n ],\n define: {\n STORYBOOK_ANGULAR_OPTIONS: JSON.stringify({\n experimentalZoneless: !!experimentalZoneless,\n }),\n },\n });\n};\n\nfunction angularOptionsPlugin(\n options: any,\n {\n normalizePath,\n experimentalZoneless,\n }: { normalizePath: (path: string) => string; experimentalZoneless: boolean },\n): Plugin {\n let resolvedConfig: UserConfig | undefined;\n\n const resolveStyleImport = (\n extraImport: string,\n projectRoot: string,\n workspaceRoot: string,\n ) => {\n const resolvedProjectImport = resolve(projectRoot, extraImport);\n const resolvedWorkspaceImport = resolve(workspaceRoot, extraImport);\n\n if (\n extraImport.startsWith('.') ||\n extraImport.startsWith('src') ||\n existsSync(resolvedProjectImport)\n ) {\n return {\n specifier: resolvedProjectImport,\n source: 'project',\n } as const;\n }\n\n if (existsSync(resolvedWorkspaceImport)) {\n return {\n specifier: resolvedWorkspaceImport,\n source: 'workspace',\n } as const;\n }\n\n return {\n specifier: extraImport,\n source: 'bare',\n } as const;\n };\n\n return {\n name: 'analogjs-storybook-options-plugin',\n config(userConfig: UserConfig) {\n resolvedConfig = userConfig;\n const loadPaths =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.loadPaths;\n const sassOptions =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.sass;\n\n if (Array.isArray(loadPaths)) {\n const workspaceRoot =\n options.angularBuilderContext?.workspaceRoot ??\n userConfig?.root ??\n process.cwd();\n const resolvedLoadPaths = loadPaths.map(\n (loadPath) => `${resolve(workspaceRoot, loadPath)}`,\n );\n\n debugStyles('resolved SCSS load paths', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: userConfig?.root ?? process.cwd(),\n loadPaths,\n resolvedLoadPaths,\n });\n\n return {\n css: {\n preprocessorOptions: {\n scss: {\n ...sassOptions,\n loadPaths: resolvedLoadPaths,\n },\n },\n },\n };\n }\n\n return;\n },\n async transform(code: string, id: string) {\n if (\n normalizePath(id).endsWith(\n normalizePath(`${options.configDir}/preview.ts`),\n )\n ) {\n const imports = [];\n const styles = options?.angularBuilderOptions?.styles;\n const workspaceRoot =\n options?.angularBuilderContext?.workspaceRoot ?? process.cwd();\n\n if (Array.isArray(styles)) {\n debugStyles('injecting Storybook global styles', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: resolvedConfig?.root ?? process.cwd(),\n styles,\n });\n\n styles.forEach((style) => {\n imports.push(style);\n });\n }\n\n if (!experimentalZoneless) {\n imports.push('zone.js');\n }\n\n // Use vite config root when angularBuilderContext is not available\n // (e.g., when running via Vitest instead of Angular builders)\n const projectRoot = resolvedConfig?.root ?? process.cwd();\n\n return {\n code: `\n ${imports\n .map((extraImport) => {\n const resolved = resolveStyleImport(\n extraImport,\n projectRoot,\n workspaceRoot,\n );\n\n debugStyles('resolved Storybook style import', {\n input: extraImport,\n source: resolved.source,\n specifier: resolved.specifier,\n });\n\n return `import '${resolved.specifier}';`;\n })\n .join('\\n')}\n ${code}\n `,\n };\n }\n\n return;\n },\n };\n}\n\nfunction storybookTransformConfigPlugin(): Plugin {\n const configKey = vite.rolldownVersion ? 'oxc' : 'esbuild';\n\n return {\n name: 'analogjs-storybook-transform-config',\n apply: 'build',\n config() {\n return {\n [configKey]: {\n // Don't mangle class names during the build\n // This fixes display of compodoc argtypes\n keepNames: true,\n },\n };\n },\n };\n}\n\nexport { addons } from '@storybook/angular/preset';\n"],"mappings":"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"}
|