@storybook/nextjs 7.1.0-alpha.36 → 7.1.0-alpha.37

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/README.md CHANGED
@@ -28,7 +28,7 @@
28
28
  - [Set `nextjs.appDirectory` to `true`](#set-nextjsappdirectory-to-true)
29
29
  - [Overriding defaults](#overriding-defaults-1)
30
30
  - [Global Defaults](#global-defaults-1)
31
- - [`useSelectedLayoutSegment` and `useSelectedLayoutSegments` hook](#useselectedlayoutsegment-and-useselectedlayoutsegments-hook)
31
+ - [`useSelectedLayoutSegment` `useSelectedLayoutSegments` and `useParams` hook](#useselectedlayoutsegment-useselectedlayoutsegments-and-useparams-hook)
32
32
  - [Default Navigation Context](#default-navigation-context)
33
33
  - [Actions Integration Caveats](#actions-integration-caveats-1)
34
34
  - [Next.js Head](#nextjs-head)
@@ -503,9 +503,9 @@ export const parameters = {
503
503
  };
504
504
  ```
505
505
 
506
- #### `useSelectedLayoutSegment` and `useSelectedLayoutSegments` hook
506
+ #### `useSelectedLayoutSegment` `useSelectedLayoutSegments` and `useParams` hook
507
507
 
508
- The `useSelectedLayoutSegment` and `useSelectedLayoutSegments` hooks are supported in Storybook. You have to set the `nextjs.navigation.segments` parameter to return the segments you want to use.
508
+ The `useSelectedLayoutSegment` `useSelectedLayoutSegments` and `useParams` hooks are supported in Storybook. You have to set the `nextjs.navigation.segments` parameter to return the segments or the params you want to use.
509
509
 
510
510
  ```js
511
511
  // SomeComponentThatUsesTheNavigation.stories.js
@@ -526,11 +526,46 @@ export default {
526
526
  export const Example = {};
527
527
 
528
528
  // SomeComponentThatUsesTheNavigation.js
529
- import { useSelectedLayoutSegment, useSelectedLayoutSegments } from 'next/navigation';
529
+ import { useSelectedLayoutSegment, useSelectedLayoutSegments, useParams } from 'next/navigation';
530
530
 
531
531
  export default function SomeComponentThatUsesTheNavigation() {
532
532
  const segment = useSelectedLayoutSegment(); // dashboard
533
533
  const segments = useSelectedLayoutSegments(); // ["dashboard", "analytics"]
534
+ const params = useParams(); // {}
535
+ ...
536
+ }
537
+ ```
538
+
539
+ To use `useParams`, you have to use a two string elements array for a segment, the first array element is the param key and the second array element is the param value.
540
+
541
+ ```js
542
+ // SomeComponentThatUsesParams.stories.js
543
+ import SomeComponentThatUsesParams from './SomeComponentThatUsesParams';
544
+
545
+ export default {
546
+ component: SomeComponentThatUsesParams,
547
+ parameters: {
548
+ nextjs: {
549
+ appDirectory: true,
550
+ navigation: {
551
+ segments: [
552
+ ['slug', 'hello'],
553
+ ['framework', 'nextjs'],
554
+ ]
555
+ },
556
+ },
557
+ },
558
+ };
559
+
560
+ export const Example = {};
561
+
562
+ // SomeComponentThatUsesParams.js
563
+ import { useSelectedLayoutSegment, useSelectedLayoutSegments, useParams } from 'next/navigation';
564
+
565
+ export default function SomeComponentThatUsesParams() {
566
+ const segment = useSelectedLayoutSegment(); // hello
567
+ const segments = useSelectedLayoutSegments(); // ["hello", "nextjs"]
568
+ const params = useParams(); // { slug: "hello", framework: "nextjs" }
534
569
  ...
535
570
  }
536
571
  ```
@@ -22,7 +22,7 @@
22
22
  }
23
23
 
24
24
  ${options.variable?`.${variableClassName} { ${options.variable}: '${options.fontFamily}'; }`:""}
25
- `,fontFaceCSS=`${changeFontDisplayToSwap(options.fontFaceCSS)}`;return{className,fontFaceCSS,classNamesCSS,style,...options.variable?{variableClassName}:{}}}function getClassName({styles,weights,fontFamily}){let font=fontFamily.replace(" ","-").toLowerCase(),style=isNextCSSPropertyValid(styles)?styles[0]:null,weight=isNextCSSPropertyValid(weights)?weights[0]:null;return`${font}${style?`-${style}`:""}${weight?`-${weight}`:""}`}function getStylesObj({styles,weights,fontFamily}){return{fontFamily,...isNextCSSPropertyValid(styles)?{fontStyle:styles[0]}:{},...isNextCSSPropertyValid(weights)?{fontWeight:weights[0]}:{}}}function isNextCSSPropertyValid(prop){return prop.length===1&&prop[0]!=="variable"}function changeFontDisplayToSwap(css){return css.replaceAll("font-display: optional;","font-display: block;")}function setFontDeclarationsInHead({id,fontFaceCSS,classNamesCSS}){return`
25
+ `,fontFaceCSS=`${changeFontDisplayToSwap(options.fontFaceCSS)}`;return{className,fontFaceCSS,classNamesCSS,style,...options.variable?{variableClassName}:{}}}function getClassName({styles,weights,fontFamily}){let font=fontFamily.replaceAll(" ","-").toLowerCase(),style=isNextCSSPropertyValid(styles)?styles[0]:null,weight=isNextCSSPropertyValid(weights)?weights[0]:null;return`${font}${style?`-${style}`:""}${weight?`-${weight}`:""}`}function getStylesObj({styles,weights,fontFamily}){return{fontFamily,...isNextCSSPropertyValid(styles)?{fontStyle:styles[0]}:{},...isNextCSSPropertyValid(weights)?{fontWeight:weights[0]}:{}}}function isNextCSSPropertyValid(prop){return prop.length===1&&prop[0]!=="variable"}function changeFontDisplayToSwap(css){return css.replaceAll("font-display: optional;","font-display: block;")}function setFontDeclarationsInHead({id,fontFaceCSS,classNamesCSS}){return`
26
26
  if (!document.getElementById('id-${id}')) {
27
27
  const fontDeclarations = \`${fontFaceCSS}\`;
28
28
  const style = document.createElement('style');
@@ -27,7 +27,7 @@ var google_font_utils_exports={};__export(google_font_utils_exports,{fetchCSSFro
27
27
  }
28
28
 
29
29
  ${options.variable?`.${variableClassName} { ${options.variable}: '${options.fontFamily}'; }`:""}
30
- `,fontFaceCSS=`${changeFontDisplayToSwap(options.fontFaceCSS)}`;return {className,fontFaceCSS,classNamesCSS,style,...options.variable?{variableClassName}:{}}}function getClassName({styles,weights,fontFamily}){let font=fontFamily.replace(" ","-").toLowerCase(),style=isNextCSSPropertyValid(styles)?styles[0]:null,weight=isNextCSSPropertyValid(weights)?weights[0]:null;return `${font}${style?`-${style}`:""}${weight?`-${weight}`:""}`}function getStylesObj({styles,weights,fontFamily}){return {fontFamily,...isNextCSSPropertyValid(styles)?{fontStyle:styles[0]}:{},...isNextCSSPropertyValid(weights)?{fontWeight:weights[0]}:{}}}function isNextCSSPropertyValid(prop){return prop.length===1&&prop[0]!=="variable"}function changeFontDisplayToSwap(css){return css.replaceAll("font-display: optional;","font-display: block;")}function setFontDeclarationsInHead({id,fontFaceCSS,classNamesCSS}){return `
30
+ `,fontFaceCSS=`${changeFontDisplayToSwap(options.fontFaceCSS)}`;return {className,fontFaceCSS,classNamesCSS,style,...options.variable?{variableClassName}:{}}}function getClassName({styles,weights,fontFamily}){let font=fontFamily.replaceAll(" ","-").toLowerCase(),style=isNextCSSPropertyValid(styles)?styles[0]:null,weight=isNextCSSPropertyValid(weights)?weights[0]:null;return `${font}${style?`-${style}`:""}${weight?`-${weight}`:""}`}function getStylesObj({styles,weights,fontFamily}){return {fontFamily,...isNextCSSPropertyValid(styles)?{fontStyle:styles[0]}:{},...isNextCSSPropertyValid(weights)?{fontWeight:weights[0]}:{}}}function isNextCSSPropertyValid(prop){return prop.length===1&&prop[0]!=="variable"}function changeFontDisplayToSwap(css){return css.replaceAll("font-display: optional;","font-display: block;")}function setFontDeclarationsInHead({id,fontFaceCSS,classNamesCSS}){return `
31
31
  if (!document.getElementById('id-${id}')) {
32
32
  const fontDeclarations = \`${fontFaceCSS}\`;
33
33
  const style = document.createElement('style');
package/dist/preview.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __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};var __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);var preview_exports={};__export(preview_exports,{decorators:()=>decorators,parameters:()=>parameters});module.exports=__toCommonJS(preview_exports);var import_config=require("next/config");(0,import_config.setConfig)(process.env.__NEXT_RUNTIME_CONFIG);var React=__toESM(require("react"));var import_react=require("react"),ImageContext=(0,import_react.createContext)({});var ImageDecorator=(Story,{parameters:parameters2})=>{var _a;return(_a=parameters2.nextjs)!=null&&_a.image?React.createElement(ImageContext.Provider,{value:parameters2.nextjs.image},React.createElement(Story,null)):React.createElement(Story,null)};var React4=__toESM(require("react"));var import_react2=__toESM(require("react")),AppRouterContext,LayoutRouterContext,PathnameContext,SearchParamsContext;try{AppRouterContext=require("next/dist/shared/lib/app-router-context").AppRouterContext,LayoutRouterContext=require("next/dist/shared/lib/app-router-context").LayoutRouterContext,PathnameContext=require("next/dist/shared/lib/hooks-client-context").PathnameContext,SearchParamsContext=require("next/dist/shared/lib/hooks-client-context").SearchParamsContext}catch{AppRouterContext=import_react2.default.Fragment,LayoutRouterContext=import_react2.default.Fragment,PathnameContext=import_react2.default.Fragment,SearchParamsContext=import_react2.default.Fragment}var getParallelRoutes=segmentsList=>{let segment=segmentsList.shift();return segment?[segment,{children:getParallelRoutes(segmentsList)}]:[]},AppRouterProvider=({children,action:action2,routeParams})=>{let{pathname,query,segments=[],...restRouteParams}=routeParams;return import_react2.default.createElement(AppRouterContext.Provider,{value:{push(...args){action2("nextNavigation.push")(...args)},replace(...args){action2("nextNavigation.replace")(...args)},forward(...args){action2("nextNavigation.forward")(...args)},back(...args){action2("nextNavigation.back")(...args)},prefetch(...args){action2("nextNavigation.prefetch")(...args)},refresh:()=>{action2("nextNavigation.refresh")()},...restRouteParams}},import_react2.default.createElement(SearchParamsContext.Provider,{value:new URLSearchParams(query)},import_react2.default.createElement(LayoutRouterContext.Provider,{value:{childNodes:new Map,tree:[pathname,{children:getParallelRoutes([...segments])}],url:pathname,headRenderedAboveThisLevel:!0}},import_react2.default.createElement(PathnameContext.Provider,{value:pathname},children))))},app_router_provider_default=AppRouterProvider;var import_router_context=require("next/dist/shared/lib/router-context"),import_react3=__toESM(require("react")),PageRouterProvider=({children,action:action2,routeParams,globals})=>import_react3.default.createElement(import_router_context.RouterContext.Provider,{value:{push(...args){return action2("nextRouter.push")(...args),Promise.resolve(!0)},replace(...args){return action2("nextRouter.replace")(...args),Promise.resolve(!0)},reload(...args){action2("nextRouter.reload")(...args)},back(...args){action2("nextRouter.back")(...args)},forward(){action2("nextRouter.forward")()},prefetch(...args){return action2("nextRouter.prefetch")(...args),Promise.resolve()},beforePopState(...args){action2("nextRouter.beforePopState")(...args)},events:{on(...args){action2("nextRouter.events.on")(...args)},off(...args){action2("nextRouter.events.off")(...args)},emit(...args){action2("nextRouter.events.emit")(...args)}},locale:globals==null?void 0:globals.locale,route:"/",asPath:"/",basePath:"/",isFallback:!1,isLocaleDomain:!1,isReady:!0,isPreview:!1,...routeParams}},children),page_router_provider_default=PageRouterProvider;var action;try{action=require("@storybook/addon-actions").action}catch{action=()=>()=>{}}var defaultRouterParams={pathname:"/",query:{}},RouterDecorator=(Story,{globals,parameters:parameters2})=>{var _a,_b,_c;return((_a=parameters2.nextjs)==null?void 0:_a.appDirectory)??!1?React4.createElement(app_router_provider_default,{action,routeParams:{...defaultRouterParams,...(_b=parameters2.nextjs)==null?void 0:_b.navigation}},React4.createElement(Story,null)):React4.createElement(page_router_provider_default,{action,globals,routeParams:{...defaultRouterParams,...(_c=parameters2.nextjs)==null?void 0:_c.router}},React4.createElement(Story,null))};var React5=__toESM(require("react")),StyleRegistry;try{StyleRegistry=require("styled-jsx").StyleRegistry}catch{StyleRegistry=React5.Fragment}var StyledJsxDecorator=Story=>React5.createElement(StyleRegistry,null,React5.createElement(Story,null));var React6=__toESM(require("react")),import_semver=__toESM(require("semver"));var defaultLoader=({src,width,quality})=>{let missingValues=[];if(src||missingValues.push("src"),width||missingValues.push("width"),missingValues.length>0)throw new Error(`Next Image Optimization requires ${missingValues.join(", ")} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({src,width,quality})}`);return`${src}?w=${width}&q=${quality??75}`},NextImage=require("next/image"),OriginalNextImage=NextImage.default;Object.defineProperty(NextImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});if(import_semver.default.satisfies(process.env.__NEXT_VERSION,"^13.0.0")){let OriginalNextLegacyImage=require("next/legacy/image").default;Object.defineProperty(OriginalNextLegacyImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextLegacyImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}})}if(import_semver.default.satisfies(process.env.__NEXT_VERSION,"^12.2.0")){let OriginalNextFutureImage=require("next/future/image").default;Object.defineProperty(OriginalNextFutureImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextFutureImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}})}var React8=__toESM(require("react"));var import_react4=__toESM(require("react")),import_head_manager_context=require("next/dist/shared/lib/head-manager-context"),import_head_manager=__toESM(require("next/dist/client/head-manager")),HeadManagerProvider=({children})=>{let headManager=(0,import_react4.useMemo)(import_head_manager.default,[]);return headManager.getIsSsr=()=>!1,import_react4.default.createElement(import_head_manager_context.HeadManagerContext.Provider,{value:headManager},children)},head_manager_provider_default=HeadManagerProvider;var HeadManagerDecorator=Story=>React8.createElement(head_manager_provider_default,null,React8.createElement(Story,null));function addNextHeadCount(){let meta=document.createElement("meta");meta.name="next-head-count",meta.content="0",document.head.appendChild(meta)}addNextHeadCount();var decorators=[StyledJsxDecorator,ImageDecorator,RouterDecorator,HeadManagerDecorator],parameters={docs:{source:{excludeDecorators:!0}}};0&&(module.exports={decorators,parameters});
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __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};var __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);var preview_exports={};__export(preview_exports,{decorators:()=>decorators,parameters:()=>parameters});module.exports=__toCommonJS(preview_exports);var import_config=require("next/config");(0,import_config.setConfig)(process.env.__NEXT_RUNTIME_CONFIG);var React=__toESM(require("react"));var import_react=require("react"),ImageContext=(0,import_react.createContext)({});var ImageDecorator=(Story,{parameters:parameters2})=>{var _a;return(_a=parameters2.nextjs)!=null&&_a.image?React.createElement(ImageContext.Provider,{value:parameters2.nextjs.image},React.createElement(Story,null)):React.createElement(Story,null)};var React4=__toESM(require("react"));var import_react2=__toESM(require("react")),AppRouterContext,LayoutRouterContext,PathnameContext,SearchParamsContext,GlobalLayoutRouterContext;try{AppRouterContext=require("next/dist/shared/lib/app-router-context").AppRouterContext,LayoutRouterContext=require("next/dist/shared/lib/app-router-context").LayoutRouterContext,PathnameContext=require("next/dist/shared/lib/hooks-client-context").PathnameContext,SearchParamsContext=require("next/dist/shared/lib/hooks-client-context").SearchParamsContext,GlobalLayoutRouterContext=require("next/dist/shared/lib/app-router-context").GlobalLayoutRouterContext}catch{AppRouterContext=import_react2.default.Fragment,LayoutRouterContext=import_react2.default.Fragment,PathnameContext=import_react2.default.Fragment,SearchParamsContext=import_react2.default.Fragment,GlobalLayoutRouterContext=import_react2.default.Fragment}var getParallelRoutes=segmentsList=>{let segment=segmentsList.shift();return segment?[segment,{children:getParallelRoutes(segmentsList)}]:[]},AppRouterProvider=({children,action:action2,routeParams})=>{let{pathname,query,segments=[],...restRouteParams}=routeParams,tree=[pathname,{children:getParallelRoutes([...segments])}];return import_react2.default.createElement(PathnameContext.Provider,{value:pathname},import_react2.default.createElement(SearchParamsContext.Provider,{value:new URLSearchParams(query)},import_react2.default.createElement(GlobalLayoutRouterContext.Provider,{value:{changeByServerResponse(){},tree,focusAndScrollRef:{apply:!1,hashFragment:null,segmentPaths:[tree]},nextUrl:pathname}},import_react2.default.createElement(AppRouterContext.Provider,{value:{push(...args){action2("nextNavigation.push")(...args)},replace(...args){action2("nextNavigation.replace")(...args)},forward(...args){action2("nextNavigation.forward")(...args)},back(...args){action2("nextNavigation.back")(...args)},prefetch(...args){action2("nextNavigation.prefetch")(...args)},refresh:()=>{action2("nextNavigation.refresh")()},...restRouteParams}},import_react2.default.createElement(LayoutRouterContext.Provider,{value:{childNodes:new Map,tree,url:pathname}},children)))))},app_router_provider_default=AppRouterProvider;var import_router_context=require("next/dist/shared/lib/router-context"),import_react3=__toESM(require("react")),PageRouterProvider=({children,action:action2,routeParams,globals})=>import_react3.default.createElement(import_router_context.RouterContext.Provider,{value:{push(...args){return action2("nextRouter.push")(...args),Promise.resolve(!0)},replace(...args){return action2("nextRouter.replace")(...args),Promise.resolve(!0)},reload(...args){action2("nextRouter.reload")(...args)},back(...args){action2("nextRouter.back")(...args)},forward(){action2("nextRouter.forward")()},prefetch(...args){return action2("nextRouter.prefetch")(...args),Promise.resolve()},beforePopState(...args){action2("nextRouter.beforePopState")(...args)},events:{on(...args){action2("nextRouter.events.on")(...args)},off(...args){action2("nextRouter.events.off")(...args)},emit(...args){action2("nextRouter.events.emit")(...args)}},locale:globals==null?void 0:globals.locale,route:"/",asPath:"/",basePath:"/",isFallback:!1,isLocaleDomain:!1,isReady:!0,isPreview:!1,...routeParams}},children),page_router_provider_default=PageRouterProvider;var action;try{action=require("@storybook/addon-actions").action}catch{action=()=>()=>{}}var defaultRouterParams={pathname:"/",query:{}},RouterDecorator=(Story,{globals,parameters:parameters2})=>{var _a,_b,_c;return((_a=parameters2.nextjs)==null?void 0:_a.appDirectory)??!1?React4.createElement(app_router_provider_default,{action,routeParams:{...defaultRouterParams,...(_b=parameters2.nextjs)==null?void 0:_b.navigation}},React4.createElement(Story,null)):React4.createElement(page_router_provider_default,{action,globals,routeParams:{...defaultRouterParams,...(_c=parameters2.nextjs)==null?void 0:_c.router}},React4.createElement(Story,null))};var React5=__toESM(require("react")),StyleRegistry;try{StyleRegistry=require("styled-jsx").StyleRegistry}catch{StyleRegistry=React5.Fragment}var StyledJsxDecorator=Story=>React5.createElement(StyleRegistry,null,React5.createElement(Story,null));var React6=__toESM(require("react")),import_semver=__toESM(require("semver"));var defaultLoader=({src,width,quality})=>{let missingValues=[];if(src||missingValues.push("src"),width||missingValues.push("width"),missingValues.length>0)throw new Error(`Next Image Optimization requires ${missingValues.join(", ")} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({src,width,quality})}`);return`${src}?w=${width}&q=${quality??75}`},NextImage=require("next/image"),OriginalNextImage=NextImage.default;Object.defineProperty(NextImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});if(import_semver.default.satisfies(process.env.__NEXT_VERSION,"^13.0.0")){let OriginalNextLegacyImage=require("next/legacy/image").default;Object.defineProperty(OriginalNextLegacyImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextLegacyImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}})}if(import_semver.default.satisfies(process.env.__NEXT_VERSION,"^12.2.0")){let OriginalNextFutureImage=require("next/future/image").default;Object.defineProperty(OriginalNextFutureImage,"default",{configurable:!0,value:props=>{let imageParameters=React6.useContext(ImageContext);return React6.createElement(OriginalNextFutureImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}})}var React8=__toESM(require("react"));var import_react4=__toESM(require("react")),import_head_manager_context=require("next/dist/shared/lib/head-manager-context"),import_head_manager=__toESM(require("next/dist/client/head-manager")),HeadManagerProvider=({children})=>{let headManager=(0,import_react4.useMemo)(import_head_manager.default,[]);return headManager.getIsSsr=()=>!1,import_react4.default.createElement(import_head_manager_context.HeadManagerContext.Provider,{value:headManager},children)},head_manager_provider_default=HeadManagerProvider;var HeadManagerDecorator=Story=>React8.createElement(head_manager_provider_default,null,React8.createElement(Story,null));function addNextHeadCount(){let meta=document.createElement("meta");meta.name="next-head-count",meta.content="0",document.head.appendChild(meta)}addNextHeadCount();var decorators=[StyledJsxDecorator,ImageDecorator,RouterDecorator,HeadManagerDecorator],parameters={docs:{source:{excludeDecorators:!0}}};0&&(module.exports={decorators,parameters});
package/dist/preview.mjs CHANGED
@@ -7,6 +7,6 @@ import semver from 'semver';
7
7
  import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context';
8
8
  import initHeadManager from 'next/dist/client/head-manager';
9
9
 
10
- setConfig(process.env.__NEXT_RUNTIME_CONFIG);var ImageContext=createContext({});var ImageDecorator=(Story,{parameters:parameters2})=>parameters2.nextjs?.image?React2.createElement(ImageContext.Provider,{value:parameters2.nextjs.image},React2.createElement(Story,null)):React2.createElement(Story,null);var AppRouterContext,LayoutRouterContext,PathnameContext,SearchParamsContext;try{AppRouterContext=__require("next/dist/shared/lib/app-router-context").AppRouterContext,LayoutRouterContext=__require("next/dist/shared/lib/app-router-context").LayoutRouterContext,PathnameContext=__require("next/dist/shared/lib/hooks-client-context").PathnameContext,SearchParamsContext=__require("next/dist/shared/lib/hooks-client-context").SearchParamsContext;}catch{AppRouterContext=React2__default.Fragment,LayoutRouterContext=React2__default.Fragment,PathnameContext=React2__default.Fragment,SearchParamsContext=React2__default.Fragment;}var getParallelRoutes=segmentsList=>{let segment=segmentsList.shift();return segment?[segment,{children:getParallelRoutes(segmentsList)}]:[]},AppRouterProvider=({children,action:action2,routeParams})=>{let{pathname,query,segments=[],...restRouteParams}=routeParams;return React2__default.createElement(AppRouterContext.Provider,{value:{push(...args){action2("nextNavigation.push")(...args);},replace(...args){action2("nextNavigation.replace")(...args);},forward(...args){action2("nextNavigation.forward")(...args);},back(...args){action2("nextNavigation.back")(...args);},prefetch(...args){action2("nextNavigation.prefetch")(...args);},refresh:()=>{action2("nextNavigation.refresh")();},...restRouteParams}},React2__default.createElement(SearchParamsContext.Provider,{value:new URLSearchParams(query)},React2__default.createElement(LayoutRouterContext.Provider,{value:{childNodes:new Map,tree:[pathname,{children:getParallelRoutes([...segments])}],url:pathname,headRenderedAboveThisLevel:!0}},React2__default.createElement(PathnameContext.Provider,{value:pathname},children))))},app_router_provider_default=AppRouterProvider;var PageRouterProvider=({children,action:action2,routeParams,globals})=>React2__default.createElement(RouterContext.Provider,{value:{push(...args){return action2("nextRouter.push")(...args),Promise.resolve(!0)},replace(...args){return action2("nextRouter.replace")(...args),Promise.resolve(!0)},reload(...args){action2("nextRouter.reload")(...args);},back(...args){action2("nextRouter.back")(...args);},forward(){action2("nextRouter.forward")();},prefetch(...args){return action2("nextRouter.prefetch")(...args),Promise.resolve()},beforePopState(...args){action2("nextRouter.beforePopState")(...args);},events:{on(...args){action2("nextRouter.events.on")(...args);},off(...args){action2("nextRouter.events.off")(...args);},emit(...args){action2("nextRouter.events.emit")(...args);}},locale:globals?.locale,route:"/",asPath:"/",basePath:"/",isFallback:!1,isLocaleDomain:!1,isReady:!0,isPreview:!1,...routeParams}},children),page_router_provider_default=PageRouterProvider;var action;try{action=__require("@storybook/addon-actions").action;}catch{action=()=>()=>{};}var defaultRouterParams={pathname:"/",query:{}},RouterDecorator=(Story,{globals,parameters:parameters2})=>parameters2.nextjs?.appDirectory??!1?React2.createElement(app_router_provider_default,{action,routeParams:{...defaultRouterParams,...parameters2.nextjs?.navigation}},React2.createElement(Story,null)):React2.createElement(page_router_provider_default,{action,globals,routeParams:{...defaultRouterParams,...parameters2.nextjs?.router}},React2.createElement(Story,null));var StyleRegistry;try{StyleRegistry=__require("styled-jsx").StyleRegistry;}catch{StyleRegistry=React2.Fragment;}var StyledJsxDecorator=Story=>React2.createElement(StyleRegistry,null,React2.createElement(Story,null));var defaultLoader=({src,width,quality})=>{let missingValues=[];if(src||missingValues.push("src"),width||missingValues.push("width"),missingValues.length>0)throw new Error(`Next Image Optimization requires ${missingValues.join(", ")} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({src,width,quality})}`);return `${src}?w=${width}&q=${quality??75}`},NextImage=__require("next/image"),OriginalNextImage=NextImage.default;Object.defineProperty(NextImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});if(semver.satisfies(process.env.__NEXT_VERSION,"^13.0.0")){let OriginalNextLegacyImage=__require("next/legacy/image").default;Object.defineProperty(OriginalNextLegacyImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextLegacyImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});}if(semver.satisfies(process.env.__NEXT_VERSION,"^12.2.0")){let OriginalNextFutureImage=__require("next/future/image").default;Object.defineProperty(OriginalNextFutureImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextFutureImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});}var HeadManagerProvider=({children})=>{let headManager=useMemo(initHeadManager,[]);return headManager.getIsSsr=()=>!1,React2__default.createElement(HeadManagerContext.Provider,{value:headManager},children)},head_manager_provider_default=HeadManagerProvider;var HeadManagerDecorator=Story=>React2.createElement(head_manager_provider_default,null,React2.createElement(Story,null));function addNextHeadCount(){let meta=document.createElement("meta");meta.name="next-head-count",meta.content="0",document.head.appendChild(meta);}addNextHeadCount();var decorators=[StyledJsxDecorator,ImageDecorator,RouterDecorator,HeadManagerDecorator],parameters={docs:{source:{excludeDecorators:!0}}};
10
+ setConfig(process.env.__NEXT_RUNTIME_CONFIG);var ImageContext=createContext({});var ImageDecorator=(Story,{parameters:parameters2})=>parameters2.nextjs?.image?React2.createElement(ImageContext.Provider,{value:parameters2.nextjs.image},React2.createElement(Story,null)):React2.createElement(Story,null);var AppRouterContext,LayoutRouterContext,PathnameContext,SearchParamsContext,GlobalLayoutRouterContext;try{AppRouterContext=__require("next/dist/shared/lib/app-router-context").AppRouterContext,LayoutRouterContext=__require("next/dist/shared/lib/app-router-context").LayoutRouterContext,PathnameContext=__require("next/dist/shared/lib/hooks-client-context").PathnameContext,SearchParamsContext=__require("next/dist/shared/lib/hooks-client-context").SearchParamsContext,GlobalLayoutRouterContext=__require("next/dist/shared/lib/app-router-context").GlobalLayoutRouterContext;}catch{AppRouterContext=React2__default.Fragment,LayoutRouterContext=React2__default.Fragment,PathnameContext=React2__default.Fragment,SearchParamsContext=React2__default.Fragment,GlobalLayoutRouterContext=React2__default.Fragment;}var getParallelRoutes=segmentsList=>{let segment=segmentsList.shift();return segment?[segment,{children:getParallelRoutes(segmentsList)}]:[]},AppRouterProvider=({children,action:action2,routeParams})=>{let{pathname,query,segments=[],...restRouteParams}=routeParams,tree=[pathname,{children:getParallelRoutes([...segments])}];return React2__default.createElement(PathnameContext.Provider,{value:pathname},React2__default.createElement(SearchParamsContext.Provider,{value:new URLSearchParams(query)},React2__default.createElement(GlobalLayoutRouterContext.Provider,{value:{changeByServerResponse(){},tree,focusAndScrollRef:{apply:!1,hashFragment:null,segmentPaths:[tree]},nextUrl:pathname}},React2__default.createElement(AppRouterContext.Provider,{value:{push(...args){action2("nextNavigation.push")(...args);},replace(...args){action2("nextNavigation.replace")(...args);},forward(...args){action2("nextNavigation.forward")(...args);},back(...args){action2("nextNavigation.back")(...args);},prefetch(...args){action2("nextNavigation.prefetch")(...args);},refresh:()=>{action2("nextNavigation.refresh")();},...restRouteParams}},React2__default.createElement(LayoutRouterContext.Provider,{value:{childNodes:new Map,tree,url:pathname}},children)))))},app_router_provider_default=AppRouterProvider;var PageRouterProvider=({children,action:action2,routeParams,globals})=>React2__default.createElement(RouterContext.Provider,{value:{push(...args){return action2("nextRouter.push")(...args),Promise.resolve(!0)},replace(...args){return action2("nextRouter.replace")(...args),Promise.resolve(!0)},reload(...args){action2("nextRouter.reload")(...args);},back(...args){action2("nextRouter.back")(...args);},forward(){action2("nextRouter.forward")();},prefetch(...args){return action2("nextRouter.prefetch")(...args),Promise.resolve()},beforePopState(...args){action2("nextRouter.beforePopState")(...args);},events:{on(...args){action2("nextRouter.events.on")(...args);},off(...args){action2("nextRouter.events.off")(...args);},emit(...args){action2("nextRouter.events.emit")(...args);}},locale:globals?.locale,route:"/",asPath:"/",basePath:"/",isFallback:!1,isLocaleDomain:!1,isReady:!0,isPreview:!1,...routeParams}},children),page_router_provider_default=PageRouterProvider;var action;try{action=__require("@storybook/addon-actions").action;}catch{action=()=>()=>{};}var defaultRouterParams={pathname:"/",query:{}},RouterDecorator=(Story,{globals,parameters:parameters2})=>parameters2.nextjs?.appDirectory??!1?React2.createElement(app_router_provider_default,{action,routeParams:{...defaultRouterParams,...parameters2.nextjs?.navigation}},React2.createElement(Story,null)):React2.createElement(page_router_provider_default,{action,globals,routeParams:{...defaultRouterParams,...parameters2.nextjs?.router}},React2.createElement(Story,null));var StyleRegistry;try{StyleRegistry=__require("styled-jsx").StyleRegistry;}catch{StyleRegistry=React2.Fragment;}var StyledJsxDecorator=Story=>React2.createElement(StyleRegistry,null,React2.createElement(Story,null));var defaultLoader=({src,width,quality})=>{let missingValues=[];if(src||missingValues.push("src"),width||missingValues.push("width"),missingValues.length>0)throw new Error(`Next Image Optimization requires ${missingValues.join(", ")} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({src,width,quality})}`);return `${src}?w=${width}&q=${quality??75}`},NextImage=__require("next/image"),OriginalNextImage=NextImage.default;Object.defineProperty(NextImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});if(semver.satisfies(process.env.__NEXT_VERSION,"^13.0.0")){let OriginalNextLegacyImage=__require("next/legacy/image").default;Object.defineProperty(OriginalNextLegacyImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextLegacyImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});}if(semver.satisfies(process.env.__NEXT_VERSION,"^12.2.0")){let OriginalNextFutureImage=__require("next/future/image").default;Object.defineProperty(OriginalNextFutureImage,"default",{configurable:!0,value:props=>{let imageParameters=React2.useContext(ImageContext);return React2.createElement(OriginalNextFutureImage,{...imageParameters,...props,loader:props.loader??defaultLoader})}});}var HeadManagerProvider=({children})=>{let headManager=useMemo(initHeadManager,[]);return headManager.getIsSsr=()=>!1,React2__default.createElement(HeadManagerContext.Provider,{value:headManager},children)},head_manager_provider_default=HeadManagerProvider;var HeadManagerDecorator=Story=>React2.createElement(head_manager_provider_default,null,React2.createElement(Story,null));function addNextHeadCount(){let meta=document.createElement("meta");meta.name="next-head-count",meta.content="0",document.head.appendChild(meta);}addNextHeadCount();var decorators=[StyledJsxDecorator,ImageDecorator,RouterDecorator,HeadManagerDecorator],parameters={docs:{source:{excludeDecorators:!0}}};
11
11
 
12
12
  export { decorators, parameters };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/nextjs",
3
- "version": "7.1.0-alpha.36",
3
+ "version": "7.1.0-alpha.37",
4
4
  "description": "Storybook for Next.js",
5
5
  "keywords": [
6
6
  "storybook",
@@ -70,13 +70,13 @@
70
70
  "@babel/preset-react": "^7.22.0",
71
71
  "@babel/preset-typescript": "^7.21.0",
72
72
  "@babel/runtime": "^7.22.0",
73
- "@storybook/addon-actions": "7.1.0-alpha.36",
74
- "@storybook/builder-webpack5": "7.1.0-alpha.36",
75
- "@storybook/core-common": "7.1.0-alpha.36",
76
- "@storybook/node-logger": "7.1.0-alpha.36",
77
- "@storybook/preset-react-webpack": "7.1.0-alpha.36",
78
- "@storybook/preview-api": "7.1.0-alpha.36",
79
- "@storybook/react": "7.1.0-alpha.36",
73
+ "@storybook/addon-actions": "7.1.0-alpha.37",
74
+ "@storybook/builder-webpack5": "7.1.0-alpha.37",
75
+ "@storybook/core-common": "7.1.0-alpha.37",
76
+ "@storybook/node-logger": "7.1.0-alpha.37",
77
+ "@storybook/preset-react-webpack": "7.1.0-alpha.37",
78
+ "@storybook/preview-api": "7.1.0-alpha.37",
79
+ "@storybook/react": "7.1.0-alpha.37",
80
80
  "@types/node": "^16.0.0",
81
81
  "css-loader": "^6.7.3",
82
82
  "find-up": "^5.0.0",
@@ -147,5 +147,5 @@
147
147
  ],
148
148
  "platform": "node"
149
149
  },
150
- "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16"
150
+ "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17"
151
151
  }
@@ -2,6 +2,7 @@ import {
2
2
  useRouter,
3
3
  usePathname,
4
4
  useSearchParams,
5
+ useParams,
5
6
  useSelectedLayoutSegment,
6
7
  useSelectedLayoutSegments,
7
8
  } from 'next/navigation';
@@ -11,6 +12,7 @@ function Component() {
11
12
  const router = useRouter();
12
13
  const pathname = usePathname();
13
14
  const searchParams = useSearchParams();
15
+ const params = useParams();
14
16
  const segment = useSelectedLayoutSegment();
15
17
  const segments = useSelectedLayoutSegments();
16
18
 
@@ -58,6 +60,16 @@ function Component() {
58
60
  ))}
59
61
  </ul>
60
62
  </div>
63
+ <div>
64
+ params:{' '}
65
+ <ul>
66
+ {Object.entries(params).map(([key, value]) => (
67
+ <li key={key}>
68
+ {key}: {value}
69
+ </li>
70
+ ))}
71
+ </ul>
72
+ </div>
61
73
  {routerActions.map(({ cb, name }) => (
62
74
  <div key={name} style={{ marginBottom: '1em' }}>
63
75
  <button type="button" onClick={cb}>
@@ -96,3 +108,17 @@ export const WithSegmentDefined = {
96
108
  },
97
109
  },
98
110
  };
111
+
112
+ export const WithSegmentDefinedForParams = {
113
+ parameters: {
114
+ nextjs: {
115
+ appDirectory: true,
116
+ navigation: {
117
+ segments: [
118
+ ['slug', 'hello'],
119
+ ['framework', 'nextjs'],
120
+ ],
121
+ },
122
+ },
123
+ },
124
+ };