@analogjs/storybook-angular 3.0.0-alpha.18 → 3.0.0-alpha.19

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/storybook-angular",
3
- "version": "3.0.0-alpha.18",
3
+ "version": "3.0.0-alpha.19",
4
4
  "description": "Storybook Integration for Angular & Vite",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -45,7 +45,7 @@
45
45
  "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
46
46
  },
47
47
  "engines": {
48
- "node": ">=20.0.0"
48
+ "node": ">=22.0.0"
49
49
  },
50
50
  "builders": "./src/lib/builders.json",
51
51
  "ng-add": {
package/preset.js CHANGED
@@ -1 +1 @@
1
- export * from './src/lib/preset.js';
1
+ export * from './dist/src/lib/preset.js';
package/src/lib/preset.js CHANGED
@@ -3,6 +3,7 @@ import { resolve } from "node:path";
3
3
  import { addons, core as core$1 } from "@storybook/angular/preset";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import * as vite from "vite";
6
+ import angular from "@analogjs/vite-plugin-angular";
6
7
  //#region packages/storybook-angular/src/lib/preset.ts
7
8
  var previewAnnotations = async (entries = [], options) => {
8
9
  const config = fileURLToPath(import.meta.resolve("@storybook/angular/client/config"));
@@ -40,11 +41,9 @@ async function resolveExperimentalZoneless(frameworkOptions, angularBuilderOptio
40
41
  }
41
42
  var viteFinal = async (config, options) => {
42
43
  config.plugins = (config.plugins ?? []).flat().filter((plugin) => !plugin.name.includes("analogjs"));
43
- const { mergeConfig, normalizePath } = await import("vite");
44
- const { default: angular } = await import("@analogjs/vite-plugin-angular");
45
44
  const framework = await options.presets.apply("framework");
46
45
  const experimentalZoneless = await resolveExperimentalZoneless(framework.options, options?.angularBuilderOptions);
47
- return mergeConfig(config, {
46
+ return vite.mergeConfig(config, {
48
47
  optimizeDeps: { include: [
49
48
  "@storybook/angular/client",
50
49
  "@analogjs/storybook-angular",
@@ -63,7 +62,7 @@ var viteFinal = async (config, options) => {
63
62
  inlineStylesExtension: typeof framework.options?.inlineStylesExtension !== "undefined" ? framework.options?.inlineStylesExtension : "css"
64
63
  }),
65
64
  angularOptionsPlugin(options, {
66
- normalizePath,
65
+ normalizePath: vite.normalizePath,
67
66
  experimentalZoneless
68
67
  }),
69
68
  storybookTransformConfigPlugin()
@@ -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';\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 // Merge custom configuration into the default config\n const { mergeConfig, normalizePath } = await import('vite');\n const { default: angular } = await import('@analogjs/vite-plugin-angular');\n const framework = await options.presets.apply('framework');\n const experimentalZoneless = await resolveExperimentalZoneless(\n framework.options,\n options?.angularBuilderOptions,\n );\n return 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 liveReload:\n typeof framework.options?.liveReload !== 'undefined'\n ? framework.options?.liveReload\n : false,\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, { normalizePath, experimentalZoneless }),\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":"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"}
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 liveReload:\n typeof framework.options?.liveReload !== 'undefined'\n ? framework.options?.liveReload\n : false,\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,YACE,OAAO,UAAU,SAAS,eAAe,cACrC,UAAU,SAAS,aACnB;IACN,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"}