@storybook/nextjs 8.3.0-alpha.4 → 8.3.0-alpha.5

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.
Files changed (51) hide show
  1. package/dist/chunk-VO5G2M3L.mjs +20 -0
  2. package/dist/export-mocks/cache/index.d.ts +5 -5
  3. package/dist/export-mocks/headers/index.d.ts +18 -18
  4. package/dist/export-mocks/headers/index.js +1 -1
  5. package/dist/export-mocks/headers/index.mjs +1 -1
  6. package/dist/export-mocks/index.js +1 -1
  7. package/dist/export-mocks/index.mjs +4 -4
  8. package/dist/export-mocks/navigation/index.d.ts +11 -12
  9. package/dist/export-mocks/navigation/index.js +1 -1
  10. package/dist/export-mocks/navigation/index.mjs +2 -2
  11. package/dist/export-mocks/router/index.d.ts +7 -5
  12. package/dist/export-mocks/router/index.js +1 -1
  13. package/dist/export-mocks/router/index.mjs +1 -1
  14. package/dist/font/webpack/loader/storybook-nextjs-font-loader.js +4 -4
  15. package/dist/font/webpack/loader/storybook-nextjs-font-loader.mjs +9 -9
  16. package/dist/images/next-image.d.ts +1 -1
  17. package/dist/images/next-image.js +1 -1
  18. package/dist/images/next-image.mjs +1 -1
  19. package/dist/images/next-legacy-image.d.ts +1 -1
  20. package/dist/images/next-legacy-image.js +1 -1
  21. package/dist/images/next-legacy-image.mjs +1 -1
  22. package/dist/{index.d-e10eb603.d.ts → index.d-5a935e77.d.ts} +70 -27
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +1 -1
  25. package/dist/index.mjs +5 -5
  26. package/dist/next-image-loader-stub.d.ts +1 -1
  27. package/dist/next-image-loader-stub.js +1 -1
  28. package/dist/next-image-loader-stub.mjs +2 -2
  29. package/dist/preset.d.ts +2 -2
  30. package/dist/preset.js +1 -1
  31. package/dist/preview.js +1 -1
  32. package/dist/preview.mjs +1 -1
  33. package/dist/react-18-6AMDNICQ.mjs +7 -0
  34. package/dist/swc/next-swc-loader-patch.js +1 -1
  35. package/dist/swc/next-swc-loader-patch.mjs +2 -2
  36. package/package.json +9 -9
  37. package/template/cli/js/Button.jsx +2 -0
  38. package/template/cli/js/Button.stories.js +1 -0
  39. package/template/cli/js/Header.jsx +1 -0
  40. package/template/cli/js/Header.stories.js +1 -0
  41. package/template/cli/js/Page.stories.js +2 -1
  42. package/template/cli/ts-3-8/Button.stories.ts +1 -0
  43. package/template/cli/ts-3-8/Button.tsx +1 -0
  44. package/template/cli/ts-3-8/Page.stories.ts +1 -1
  45. package/template/cli/ts-4-9/Button.stories.ts +1 -0
  46. package/template/cli/ts-4-9/Button.tsx +1 -0
  47. package/template/cli/ts-4-9/Header.stories.ts +1 -0
  48. package/template/cli/ts-4-9/Page.stories.ts +1 -1
  49. package/dist/chunk-BLSRQDRO.mjs +0 -20
  50. package/dist/react-18-4VSW3XPO.mjs +0 -5
  51. package/dist/{types-6414f95f.d.ts → types-79ace3a8.d.ts} +2 -2
@@ -1,8 +1,8 @@
1
1
  import '../chunk-42AJV46F.mjs';
2
+ import { isAbsolute, relative } from 'node:path';
2
3
  import { isWasm, transform } from 'next/dist/build/swc';
3
4
  import { getLoaderSWCOptions } from 'next/dist/build/swc/options';
4
- import path, { isAbsolute } from 'path';
5
5
 
6
- var mockCurrentTraceSpan={traceChild:name=>mockCurrentTraceSpan,traceAsyncFn:async fn=>fn()};async function loaderTransform(parentTrace,source,inputSourceMap){let filename=this.resourcePath,loaderOptions=this.getOptions()||{},{isServer,rootDir,pagesDir,appDir,hasReactRefresh,nextConfig,jsConfig,supportedBrowsers,swcCacheDir,serverComponents,isReactServerLayer}=loaderOptions,isPageFile=filename.startsWith(pagesDir),relativeFilePathFromRoot=path.relative(rootDir,filename),programmaticOptions={...getLoaderSWCOptions({pagesDir,appDir,filename,isServer,isPageFile,development:this.mode==="development",hasReactRefresh,modularizeImports:nextConfig?.modularizeImports,optimizePackageImports:nextConfig?.experimental?.optimizePackageImports,swcPlugins:nextConfig?.experimental?.swcPlugins,compilerOptions:nextConfig?.compiler,optimizeServerReact:nextConfig?.experimental?.optimizeServerReact,jsConfig,supportedBrowsers,swcCacheDir,relativeFilePathFromRoot,serverComponents,isReactServerLayer}),filename,inputSourceMap:inputSourceMap&&typeof inputSourceMap=="object"?JSON.stringify(inputSourceMap):void 0,sourceMaps:this.sourceMap,inlineSourcesContent:this.sourceMap,sourceFileName:filename};return programmaticOptions.env.bugfixes=!0,programmaticOptions.inputSourceMap||delete programmaticOptions.inputSourceMap,this.mode&&programmaticOptions.jsc&&programmaticOptions.jsc.transform&&programmaticOptions.jsc.transform.react&&!Object.prototype.hasOwnProperty.call(programmaticOptions.jsc.transform.react,"development")&&(programmaticOptions.jsc.transform.react.development=this.mode==="development"),parentTrace.traceChild("next-swc-transform").traceAsyncFn(()=>transform(source,programmaticOptions).then(output=>{if(output.eliminatedPackages&&this.eliminatedPackages)for(let pkg of JSON.parse(output.eliminatedPackages))this.eliminatedPackages.add(pkg);return [output.code,output.map?JSON.parse(output.map):void 0]}))}var EXCLUDED_PATHS=/[\\/](cache[\\/][^\\/]+\.zip[\\/]node_modules|__virtual__)[\\/]/g;function pitch(){let callback=this.async();(async()=>{if(!process.versions.pnp&&!EXCLUDED_PATHS.test(this.resourcePath)&&this.loaders.length-1===this.loaderIndex&&isAbsolute(this.resourcePath)&&!await isWasm()){let loaderSpan=mockCurrentTraceSpan.traceChild("next-swc-loader");return this.addDependency(this.resourcePath),loaderSpan.traceAsyncFn(()=>loaderTransform.call(this,loaderSpan))}return null})().then(r=>r?callback(null,...r):(callback(),null),callback);}function swcLoader(inputSource,inputSourceMap){let loaderSpan=mockCurrentTraceSpan.traceChild("next-swc-loader"),callback=this.async();loaderSpan.traceAsyncFn(()=>loaderTransform.call(this,loaderSpan,inputSource,inputSourceMap)).then(([transformedSource,outputSourceMap])=>{callback(null,transformedSource,outputSourceMap||inputSourceMap);},err=>{callback(err);});}var raw=!0;
6
+ var mockCurrentTraceSpan={traceChild:name=>mockCurrentTraceSpan,traceAsyncFn:async fn=>fn()};async function loaderTransform(parentTrace,source,inputSourceMap){let filename=this.resourcePath,loaderOptions=this.getOptions()||{},{isServer,rootDir,pagesDir,appDir,hasReactRefresh,nextConfig,jsConfig,supportedBrowsers,swcCacheDir,serverComponents,isReactServerLayer}=loaderOptions,isPageFile=filename.startsWith(pagesDir),relativeFilePathFromRoot=relative(rootDir,filename),programmaticOptions={...getLoaderSWCOptions({pagesDir,appDir,filename,isServer,isPageFile,development:this.mode==="development",hasReactRefresh,modularizeImports:nextConfig?.modularizeImports,optimizePackageImports:nextConfig?.experimental?.optimizePackageImports,swcPlugins:nextConfig?.experimental?.swcPlugins,compilerOptions:nextConfig?.compiler,optimizeServerReact:nextConfig?.experimental?.optimizeServerReact,jsConfig,supportedBrowsers,swcCacheDir,relativeFilePathFromRoot,serverComponents,isReactServerLayer}),filename,inputSourceMap:inputSourceMap&&typeof inputSourceMap=="object"?JSON.stringify(inputSourceMap):void 0,sourceMaps:this.sourceMap,inlineSourcesContent:this.sourceMap,sourceFileName:filename};return programmaticOptions.env.bugfixes=!0,programmaticOptions.inputSourceMap||delete programmaticOptions.inputSourceMap,this.mode&&programmaticOptions.jsc&&programmaticOptions.jsc.transform&&programmaticOptions.jsc.transform.react&&!Object.prototype.hasOwnProperty.call(programmaticOptions.jsc.transform.react,"development")&&(programmaticOptions.jsc.transform.react.development=this.mode==="development"),parentTrace.traceChild("next-swc-transform").traceAsyncFn(()=>transform(source,programmaticOptions).then(output=>{if(output.eliminatedPackages&&this.eliminatedPackages)for(let pkg of JSON.parse(output.eliminatedPackages))this.eliminatedPackages.add(pkg);return [output.code,output.map?JSON.parse(output.map):void 0]}))}var EXCLUDED_PATHS=/[\\/](cache[\\/][^\\/]+\.zip[\\/]node_modules|__virtual__)[\\/]/g;function pitch(){let callback=this.async();(async()=>{if(!process.versions.pnp&&!EXCLUDED_PATHS.test(this.resourcePath)&&this.loaders.length-1===this.loaderIndex&&isAbsolute(this.resourcePath)&&!await isWasm()){let loaderSpan=mockCurrentTraceSpan.traceChild("next-swc-loader");return this.addDependency(this.resourcePath),loaderSpan.traceAsyncFn(()=>loaderTransform.call(this,loaderSpan))}return null})().then(r=>r?callback(null,...r):(callback(),null),callback);}function swcLoader(inputSource,inputSourceMap){let loaderSpan=mockCurrentTraceSpan.traceChild("next-swc-loader"),callback=this.async();loaderSpan.traceAsyncFn(()=>loaderTransform.call(this,loaderSpan,inputSource,inputSourceMap)).then(([transformedSource,outputSourceMap])=>{callback(null,transformedSource,outputSourceMap||inputSourceMap);},err=>{callback(err);});}var raw=!0;
7
7
 
8
8
  export { swcLoader as default, pitch, raw };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/nextjs",
3
- "version": "8.3.0-alpha.4",
3
+ "version": "8.3.0-alpha.5",
4
4
  "description": "Storybook for Next.js",
5
5
  "keywords": [
6
6
  "storybook",
@@ -121,8 +121,8 @@
121
121
  "!src/**/*"
122
122
  ],
123
123
  "scripts": {
124
- "check": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/check.ts",
125
- "prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts"
124
+ "check": "jiti ../../../scripts/prepare/check.ts",
125
+ "prep": "jiti ../../../scripts/prepare/bundle.ts"
126
126
  },
127
127
  "dependencies": {
128
128
  "@babel/core": "^7.24.4",
@@ -139,11 +139,11 @@
139
139
  "@babel/preset-typescript": "^7.24.1",
140
140
  "@babel/runtime": "^7.24.4",
141
141
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
142
- "@storybook/builder-webpack5": "8.3.0-alpha.4",
143
- "@storybook/preset-react-webpack": "8.3.0-alpha.4",
144
- "@storybook/react": "8.3.0-alpha.4",
145
- "@storybook/test": "8.3.0-alpha.4",
146
- "@types/node": "^18.0.0",
142
+ "@storybook/builder-webpack5": "8.3.0-alpha.5",
143
+ "@storybook/preset-react-webpack": "8.3.0-alpha.5",
144
+ "@storybook/react": "8.3.0-alpha.5",
145
+ "@storybook/test": "8.3.0-alpha.5",
146
+ "@types/node": "^22.0.0",
147
147
  "@types/semver": "^7.3.4",
148
148
  "babel-loader": "^9.1.3",
149
149
  "css-loader": "^6.7.3",
@@ -180,7 +180,7 @@
180
180
  "next": "^13.5.0 || ^14.0.0",
181
181
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
182
182
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
183
- "storybook": "^8.3.0-alpha.4",
183
+ "storybook": "^8.3.0-alpha.5",
184
184
  "webpack": "^5.0.0"
185
185
  },
186
186
  "peerDependenciesMeta": {
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
+
2
3
  import PropTypes from 'prop-types';
4
+
3
5
  import './button.css';
4
6
 
5
7
  /**
@@ -1,4 +1,5 @@
1
1
  import { fn } from '@storybook/test';
2
+
2
3
  import { Button } from './Button';
3
4
 
4
5
  // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+
2
3
  import PropTypes from 'prop-types';
3
4
 
4
5
  import { Button } from './Button';
@@ -1,4 +1,5 @@
1
1
  import { fn } from '@storybook/test';
2
+
2
3
  import { Header } from './Header';
3
4
 
4
5
  export default {
@@ -1,4 +1,5 @@
1
- import { within, userEvent, expect } from '@storybook/test';
1
+ import { expect, userEvent, within } from '@storybook/test';
2
+
2
3
  import { Page } from './Page';
3
4
 
4
5
  export default {
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { fn } from '@storybook/test';
3
+
3
4
  import { Button } from './Button';
4
5
 
5
6
  // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+
2
3
  import './button.css';
3
4
 
4
5
  export interface ButtonProps {
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
- import { within, userEvent, expect } from '@storybook/test';
2
+ import { expect, userEvent, within } from '@storybook/test';
3
3
 
4
4
  import { Page } from './Page';
5
5
 
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { fn } from '@storybook/test';
3
+
3
4
  import { Button } from './Button';
4
5
 
5
6
  // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+
2
3
  import './button.css';
3
4
 
4
5
  export interface ButtonProps {
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { fn } from '@storybook/test';
3
+
3
4
  import { Header } from './Header';
4
5
 
5
6
  const meta = {
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
- import { within, userEvent, expect } from '@storybook/test';
2
+ import { expect, userEvent, within } from '@storybook/test';
3
3
 
4
4
  import { Page } from './Page';
5
5
 
@@ -1,20 +0,0 @@
1
- import { ImageDecorator } from './chunk-NQ32RFK2.mjs';
2
- import { __export } from './chunk-42AJV46F.mjs';
3
- import { setConfig } from 'next/config';
4
- import * as React from 'react';
5
- import React__default, { useMemo } from 'react';
6
- import { GlobalLayoutRouterContext, AppRouterContext, LayoutRouterContext } from 'next/dist/shared/lib/app-router-context.shared-runtime';
7
- import { PathParamsContext, PathnameContext, SearchParamsContext } from 'next/dist/shared/lib/hooks-client-context.shared-runtime';
8
- import { PAGE_SEGMENT_KEY } from 'next/dist/shared/lib/segment';
9
- import { createNavigation, getRouter } from '@storybook/nextjs/navigation.mock';
10
- import { RouterContext } from 'next/dist/shared/lib/router-context.shared-runtime';
11
- import { createRouter, getRouter as getRouter$1 } from '@storybook/nextjs/router.mock';
12
- import { RedirectBoundary } from 'next/dist/client/components/redirect-boundary';
13
- import { StyleRegistry } from 'styled-jsx';
14
- import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context.shared-runtime';
15
- import initHeadManager from 'next/dist/client/head-manager';
16
- import { isNextRouterError } from 'next/dist/client/components/is-next-router-error';
17
-
18
- var preview_exports={};__export(preview_exports,{decorators:()=>decorators,loaders:()=>loaders,parameters:()=>parameters});setConfig(process.env.__NEXT_RUNTIME_CONFIG);function getSelectedParams(currentTree,params={}){let parallelRoutes=currentTree[1];for(let parallelRoute of Object.values(parallelRoutes)){let segment=parallelRoute[0],isDynamicParameter=Array.isArray(segment),segmentValue=isDynamicParameter?segment[1]:segment;if(!segmentValue||segmentValue.startsWith(PAGE_SEGMENT_KEY))continue;isDynamicParameter&&(segment[2]==="c"||segment[2]==="oc")?params[segment[0]]=segment[1].split("/"):isDynamicParameter&&(params[segment[0]]=segment[1]),params=getSelectedParams(parallelRoute,params);}return params}var getParallelRoutes=segmentsList=>{let segment=segmentsList.shift();return segment?[segment,{children:getParallelRoutes(segmentsList)}]:[]},AppRouterProvider=({children,routeParams})=>{let{pathname,query,segments=[]}=routeParams,tree=[pathname,{children:getParallelRoutes([...segments])}],pathParams=useMemo(()=>getSelectedParams(tree),[tree]);return React__default.createElement(PathParamsContext.Provider,{value:pathParams},React__default.createElement(PathnameContext.Provider,{value:pathname},React__default.createElement(SearchParamsContext.Provider,{value:new URLSearchParams(query)},React__default.createElement(GlobalLayoutRouterContext.Provider,{value:{changeByServerResponse(){},buildId:"storybook",tree,focusAndScrollRef:{apply:!1,hashFragment:null,segmentPaths:[tree],onlyHashChange:!1},nextUrl:pathname}},React__default.createElement(AppRouterContext.Provider,{value:getRouter()},React__default.createElement(LayoutRouterContext.Provider,{value:{childNodes:new Map,tree,url:pathname}},children))))))};var PageRouterProvider=({children})=>React__default.createElement(RouterContext.Provider,{value:getRouter$1()},children);var defaultRouterParams={pathname:"/",query:{}},RouterDecorator=(Story,{parameters:parameters2})=>parameters2.nextjs?.appDirectory??!1?AppRouterProvider?React.createElement(AppRouterProvider,{routeParams:{...defaultRouterParams,...parameters2.nextjs?.navigation}},React.createElement(RedirectBoundary,null,React.createElement(Story,null))):null:React.createElement(PageRouterProvider,null,React.createElement(Story,null));var StyledJsxDecorator=Story=>React.createElement(StyleRegistry,null,React.createElement(Story,null));var HeadManagerProvider=({children})=>{let headManager=useMemo(initHeadManager,[]);return headManager.getIsSsr=()=>!1,React__default.createElement(HeadManagerContext.Provider,{value:headManager},children)},head_manager_provider_default=HeadManagerProvider;var HeadManagerDecorator=Story=>React.createElement(head_manager_provider_default,null,React.createElement(Story,null));function addNextHeadCount(){let meta=document.createElement("meta");meta.name="next-head-count",meta.content="0",document.head.appendChild(meta);}function isAsyncClientComponentError(error){return typeof error=="string"&&(error.includes("A component was suspended by an uncached promise.")||error.includes("async/await is not yet supported in Client Components"))}addNextHeadCount();var origConsoleError=globalThis.console.error;globalThis.console.error=(...args)=>{let error=args[0];isNextRouterError(error)||isAsyncClientComponentError(error)||origConsoleError.apply(globalThis.console,args);};globalThis.addEventListener("error",ev=>{if(isNextRouterError(ev.error)||isAsyncClientComponentError(ev.error)){ev.preventDefault();return}});var decorators=[StyledJsxDecorator,ImageDecorator,RouterDecorator,HeadManagerDecorator],loaders=async({globals,parameters:parameters2})=>{let{router,appDirectory}=parameters2.nextjs??{};appDirectory?createNavigation(router):createRouter({locale:globals.locale,...router});},parameters={docs:{source:{excludeDecorators:!0}},react:{rootOptions:{onCaughtError(error){isNextRouterError(error)||console.error(error);}}}};
19
-
20
- export { decorators, loaders, parameters, preview_exports };
@@ -1,5 +0,0 @@
1
- import { __commonJS, __require } from './chunk-42AJV46F.mjs';
2
-
3
- var require_react_18=__commonJS({"../../lib/react-dom-shim/dist/react-18.js"(exports,module){var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0});},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),react_18_exports={};__export(react_18_exports,{renderElement:()=>renderElement,unmountElement:()=>unmountElement});module.exports=__toCommonJS(react_18_exports);var React=__toESM(__require("react")),ReactDOM=__toESM(__require("react-dom/client")),nodes=new Map,WithCallback=({callback,children})=>{let once=React.useRef();return React.useLayoutEffect(()=>{once.current!==callback&&(once.current=callback,callback());},[callback]),children},renderElement=async(node,el,rootOptions)=>{let root=await getReactRoot(el,rootOptions);return new Promise(resolve=>{root.render(React.createElement(WithCallback,{callback:()=>resolve(null)},node));})},unmountElement=(el,shouldUseNewRootApi)=>{let root=nodes.get(el);root&&(root.unmount(),nodes.delete(el));},getReactRoot=async(el,rootOptions)=>{let root=nodes.get(el);return root||(root=ReactDOM.createRoot(el,rootOptions),nodes.set(el,root)),root};}});var react184VSW3XPO = require_react_18();
4
-
5
- export { react184VSW3XPO as default };
@@ -1,6 +1,6 @@
1
- import { ReactOptions, StorybookConfig as StorybookConfig$1, TypescriptOptions as TypescriptOptions$1 } from '@storybook/preset-react-webpack';
2
- import { BuilderOptions, StorybookConfigWebpack, TypescriptOptions } from '@storybook/builder-webpack5';
3
1
  import { CompatibleString } from 'storybook/internal/types';
2
+ import { BuilderOptions, StorybookConfigWebpack, TypescriptOptions } from '@storybook/builder-webpack5';
3
+ import { ReactOptions, StorybookConfig as StorybookConfig$1, TypescriptOptions as TypescriptOptions$1 } from '@storybook/preset-react-webpack';
4
4
  import * as _NextImage from 'next/image';
5
5
 
6
6
  type FrameworkName = CompatibleString<'@storybook/nextjs'>;