@storybook/cli 9.0.0-beta.8 → 9.0.0-beta.9

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 (2) hide show
  1. package/dist/bin/index.cjs +83 -71
  2. package/package.json +4 -4
@@ -103,14 +103,14 @@
103
103
  2. Upgrade to ${import_picocolors32.default.bold("Vitest 3")} to continue using the addon
104
104
 
105
105
  After addressing this, you can try running the upgrade command again.
106
- `}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors35=__toESM(require_picocolors(),1);var version="9.0.0-beta.8";var import_node_path2=require("path"),import_common3=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_prompts=__toESM(require("prompts"),1),import_semver=__toESM(require("semver"),1),import_ts_dedent2=require("ts-dedent");var import_babel=require("storybook/internal/babel"),defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return import_babel.types.isVariableDeclaration(node)&&node.declarations.length===1&&import_babel.types.isVariableDeclarator(node.declarations[0])&&import_babel.types.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||import_babel.types.isFunctionDeclaration(node)&&import_babel.types.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return import_babel.types.callExpression(import_babel.types.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[import_babel.types.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(import_babel.types.isStringLiteral(node))return cb(node),!0;if(import_babel.types.isObjectExpression(node)){let nameProperty=node.properties.find(property=>import_babel.types.isObjectProperty(property)&&import_babel.types.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&import_babel.types.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return import_babel.types.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return[...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&import_babel.types.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration={...import_babel.types.functionDeclaration(import_babel.types.identifier(defaultRequireWrapperName),[{...import_babel.types.identifier("value"),...isConfigTypescript?{typeAnnotation:import_babel.types.tsTypeAnnotation(import_babel.types.tSStringKeyword())}:{}}],import_babel.types.blockStatement([import_babel.types.returnStatement(import_babel.types.callExpression(import_babel.types.identifier("dirname"),[import_babel.types.callExpression(import_babel.types.memberExpression(import_babel.types.identifier("require"),import_babel.types.identifier("resolve")),[import_babel.types.callExpression(import_babel.types.identifier("join"),[import_babel.types.identifier("value"),import_babel.types.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:import_babel.types.tSTypeAnnotation(import_babel.types.tsAnyKeyword())}:{}};return import_babel.types.addComment(functionDeclaration,"leading",`*
106
+ `}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors35=__toESM(require_picocolors(),1);var version="9.0.0-beta.9";var import_node_path2=require("path"),import_common3=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_prompts=__toESM(require("prompts"),1),import_semver=__toESM(require("semver"),1),import_ts_dedent2=require("ts-dedent");var import_babel=require("storybook/internal/babel"),defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return import_babel.types.isVariableDeclaration(node)&&node.declarations.length===1&&import_babel.types.isVariableDeclarator(node.declarations[0])&&import_babel.types.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||import_babel.types.isFunctionDeclaration(node)&&import_babel.types.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return import_babel.types.callExpression(import_babel.types.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[import_babel.types.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(import_babel.types.isStringLiteral(node))return cb(node),!0;if(import_babel.types.isObjectExpression(node)){let nameProperty=node.properties.find(property=>import_babel.types.isObjectProperty(property)&&import_babel.types.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&import_babel.types.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return import_babel.types.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return[...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&import_babel.types.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration={...import_babel.types.functionDeclaration(import_babel.types.identifier(defaultRequireWrapperName),[{...import_babel.types.identifier("value"),...isConfigTypescript?{typeAnnotation:import_babel.types.tsTypeAnnotation(import_babel.types.tSStringKeyword())}:{}}],import_babel.types.blockStatement([import_babel.types.returnStatement(import_babel.types.callExpression(import_babel.types.identifier("dirname"),[import_babel.types.callExpression(import_babel.types.memberExpression(import_babel.types.identifier("require"),import_babel.types.identifier("resolve")),[import_babel.types.callExpression(import_babel.types.identifier("join"),[import_babel.types.identifier("value"),import_babel.types.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:import_babel.types.tSTypeAnnotation(import_babel.types.tsAnyKeyword())}:{}};return import_babel.types.addComment(functionDeclaration,"leading",`*
107
107
  * This function is used to resolve the absolute path of a package.
108
108
  * It is needed in projects that use Yarn PnP or are set up within a monorepo.
109
109
  `),functionDeclaration}function wrapValueWithRequireWrapper(config,node){isRequireWrapperNecessary(node,n=>{if(import_babel.types.isStringLiteral(n)){let wrapperNode=getReferenceToRequireWrapper(config,n.value);Object.keys(n).forEach(k=>{delete n[k]}),Object.keys(wrapperNode).forEach(k=>{n[k]=wrapperNode[k]})}import_babel.types.isObjectProperty(n)&&import_babel.types.isStringLiteral(n.value)&&(n.value=getReferenceToRequireWrapper(config,n.value.value)),import_babel.types.isArrayExpression(n)&&n.elements.forEach(element=>{element&&isRequireWrapperNecessary(element)&&wrapValueWithRequireWrapper(config,element)})})}var import_node_path=require("path"),import_common=require("storybook/internal/common"),import_common2=require("storybook/internal/common"),import_csf_tools=require("storybook/internal/csf-tools"),import_picocolors=__toESM(require_picocolors(),1),import_ts_dedent=require("ts-dedent"),logger=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;return packageNameOrPath?(0,import_common.extractProperFrameworkName)(packageNameOrPath):null};var getStorybookData=async({packageManager,configDir:userDefinedConfigDir})=>{let packageJson=await packageManager.retrievePackageJson(),{mainConfig:mainConfigPath,version:storybookVersionSpecifier,configDir:configDirFromScript,previewConfig:previewConfigPath}=(0,import_common.getStorybookInfo)(packageJson,userDefinedConfigDir),storybookVersion=await(0,import_common2.getCoercedStorybookVersion)(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await(0,import_common.loadMainConfig)({configDir,noCache:!0})}catch(err){throw new Error(import_ts_dedent.dedent`Unable to find or evaluate ${import_picocolors.default.blue(mainConfigPath)}: ${String(err)}`)}return{configDir,mainConfig,storybookVersionSpecifier,storybookVersion,mainConfigPath,previewConfigPath,packageJson}},updateMainConfig=async({mainConfigPath,dryRun},callback)=>{try{let main=await(0,import_csf_tools.readConfig)(mainConfigPath);await callback(main),dryRun||await(0,import_csf_tools.writeConfig)(main)}catch(e){logger.info(`\u274C The migration failed to update your ${import_picocolors.default.blue(mainConfigPath)} on your behalf because of the following error:
110
110
  ${e}
111
- `),logger.info(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${import_picocolors.default.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`)}};var postinstallAddon=async(addonName,options)=>{try{let modulePath=require.resolve(`${addonName}/postinstall`,{paths:[process.cwd()]}),postinstall=require(modulePath);try{console.log(`Running postinstall script for ${addonName}`),await postinstall(options)}catch(e){console.error(`Error running postinstall script for ${addonName}`),console.error(e)}}catch{}};var getVersionSpecifier=addon=>{let groups=/^(@{0,1}[^@]+)(?:@(.+))?$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]};var checkInstalled=(addonName,main)=>!!main.addons?.find(entry=>(typeof entry=="string"?entry:entry.name)?.endsWith(addonName)),isCoreAddon=addonName=>Object.hasOwn(import_common3.versions,addonName);async function add(addon,{packageManager:pkgMgr,skipPostinstall,configDir:userSpecifiedConfigDir,yes},logger16=console){let[addonName,inputVersion]=getVersionSpecifier(addon),packageManager=import_common3.JsPackageManagerFactory.getPackageManager({force:pkgMgr}),{mainConfig,mainConfigPath,configDir,previewConfigPath,storybookVersion}=await getStorybookData({packageManager,configDir:userSpecifiedConfigDir});if(typeof configDir>"u")throw new Error(import_ts_dedent2.dedent`
111
+ `),logger.info(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${import_picocolors.default.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`)}};var postinstallAddon=async(addonName,options)=>{try{let modulePath=require.resolve(`${addonName}/postinstall`,{paths:[process.cwd()]}),postinstall=require(modulePath);try{console.log(`Running postinstall script for ${addonName}`),await postinstall(options)}catch(e){console.error(`Error running postinstall script for ${addonName}`),console.error(e)}}catch{}};var getVersionSpecifier=addon=>{let groups=/^(@{0,1}[^@]+)(?:@(.+))?$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]};var checkInstalled=(addonName,main)=>!!main.addons?.find(entry=>(typeof entry=="string"?entry:entry.name)?.endsWith(addonName)),isCoreAddon=addonName=>Object.hasOwn(import_common3.versions,addonName);async function add(addon,{packageManager:pkgMgr,skipPostinstall,configDir:userSpecifiedConfigDir,yes},logger17=console){let[addonName,inputVersion]=getVersionSpecifier(addon),packageManager=import_common3.JsPackageManagerFactory.getPackageManager({force:pkgMgr}),{mainConfig,mainConfigPath,configDir,previewConfigPath,storybookVersion}=await getStorybookData({packageManager,configDir:userSpecifiedConfigDir});if(typeof configDir>"u")throw new Error(import_ts_dedent2.dedent`
112
112
  Unable to find storybook config directory. Please specify your Storybook config directory with the --config-dir flag.
113
- `);if(!mainConfigPath){logger16.error("Unable to find Storybook main.js config");return}let shouldAddToMain=!0;if(checkInstalled(addonName,mainConfig)&&(shouldAddToMain=!1,!yes)){logger16.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`);let{shouldForceInstall}=await(0,import_prompts.default)({type:"confirm",name:"shouldForceInstall",message:"Do you wish to install it again?"});if(!shouldForceInstall)return}let main=await(0,import_csf_tools2.readConfig)(mainConfigPath);logger16.log(`Verifying ${addonName}`);let version2=inputVersion;!version2&&isCoreAddon(addonName)&&storybookVersion&&(version2=storybookVersion),version2||(version2=await packageManager.latestVersion(addonName)),isCoreAddon(addonName)&&version2!==storybookVersion&&logger16.warn(`The version of ${addonName} (${version2}) you are installing is not the same as the version of Storybook you are using (${storybookVersion}). This may lead to unexpected behavior.`);let addonWithVersion=isValidVersion(version2)&&!version2.includes("-pr-")?`${addonName}@^${version2}`:`${addonName}@${version2}`;if(logger16.log(`Installing ${addonWithVersion}`),await packageManager.addDependencies({installAsDevDependencies:!0,writeOutputToFile:!1},[addonWithVersion]),shouldAddToMain){if(logger16.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`),main.getFieldNode(["addons"])&&getRequireWrapperName(main)!==null){let addonNode=main.valueToNode(addonName);main.appendNodeToArray(["addons"],addonNode),wrapValueWithRequireWrapper(main,addonNode)}else main.appendValueToArray(["addons"],addonName);await(0,import_csf_tools2.writeConfig)(main)}try{await(0,import_common3.syncStorybookAddons)(mainConfig,previewConfigPath)}catch{}!skipPostinstall&&isCoreAddon(addonName)&&await postinstallAddon(addonName,{packageManager:packageManager.type,configDir,yes})}function isValidVersion(version2){return import_semver.default.valid(version2)||version2.match(/^\d+$/)}var import_node_fs3=require("fs"),import_promises7=require("fs/promises"),import_node_path6=require("path"),import_common20=require("storybook/internal/common");var import_node_process2=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value(red,green,blue){return red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5)},enumerable:!1},hexToRgb:{value(hex){let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return[0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return[integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value(code){if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else{code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var import_node_process=__toESM(require("process"),1),import_node_os=__toESM(require("os"),1),import_node_tty=__toESM(require("tty"),1);function hasFlag(flag,argv=globalThis.Deno?globalThis.Deno.args:import_node_process.default.argv){let prefix=flag.startsWith("-")?"":flag.length===1?"-":"--",position=argv.indexOf(prefix+flag),terminatorPosition=argv.indexOf("--");return position!==-1&&(terminatorPosition===-1||position<terminatorPosition)}var{env}=import_node_process.default,flagForceColor;hasFlag("no-color")||hasFlag("no-colors")||hasFlag("color=false")||hasFlag("color=never")?flagForceColor=0:(hasFlag("color")||hasFlag("colors")||hasFlag("color=true")||hasFlag("color=always"))&&(flagForceColor=1);function envForceColor(){if("FORCE_COLOR"in env)return env.FORCE_COLOR==="true"?1:env.FORCE_COLOR==="false"?0:env.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(env.FORCE_COLOR,10),3)}function translateLevel(level){return level===0?!1:{level,hasBasic:!0,has256:level>=2,has16m:level>=3}}function _supportsColor(haveStream,{streamIsTTY,sniffFlags=!0}={}){let noFlagForceColor=envForceColor();noFlagForceColor!==void 0&&(flagForceColor=noFlagForceColor);let forceColor=sniffFlags?flagForceColor:noFlagForceColor;if(forceColor===0)return 0;if(sniffFlags){if(hasFlag("color=16m")||hasFlag("color=full")||hasFlag("color=truecolor"))return 3;if(hasFlag("color=256"))return 2}if("TF_BUILD"in env&&"AGENT_NAME"in env)return 1;if(haveStream&&!streamIsTTY&&forceColor===void 0)return 0;let min=forceColor||0;if(env.TERM==="dumb")return min;if(import_node_process.default.platform==="win32"){let osRelease=import_node_os.default.release().split(".");return Number(osRelease[0])>=10&&Number(osRelease[2])>=10586?Number(osRelease[2])>=14931?3:2:1}if("CI"in env)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(key=>key in env)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(sign=>sign in env)||env.CI_NAME==="codeship"?1:min;if("TEAMCITY_VERSION"in env)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION)?1:0;if(env.COLORTERM==="truecolor"||env.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in env){let version2=Number.parseInt((env.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(env.TERM_PROGRAM){case"iTerm.app":return version2>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(env.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)||"COLORTERM"in env?1:min}function createSupportsColor(stream,options={}){let level=_supportsColor(stream,{streamIsTTY:stream&&stream.isTTY,...options});return translateLevel(level)}var supportsColor={stdout:createSupportsColor({isTTY:import_node_tty.default.isatty(1)}),stderr:createSupportsColor({isTTY:import_node_tty.default.isatty(2)})},supports_color_default=supportsColor;function stringReplaceAll(string,substring,replacer){let index=string.indexOf(substring);if(index===-1)return string;let substringLength=substring.length,endIndex=0,returnValue="";do returnValue+=string.slice(endIndex,index)+substring+replacer,endIndex=index+substringLength,index=string.indexOf(substring,endIndex);while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}function stringEncaseCRLFWithFirstIndex(string,prefix,postfix,index){let endIndex=0,returnValue="";do{let gotCR=string[index-1]==="\r";returnValue+=string.slice(endIndex,gotCR?index-1:index)+prefix+(gotCR?`\r
113
+ `);if(!mainConfigPath){logger17.error("Unable to find Storybook main.js config");return}let shouldAddToMain=!0;if(checkInstalled(addonName,mainConfig)&&(shouldAddToMain=!1,!yes)){logger17.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`);let{shouldForceInstall}=await(0,import_prompts.default)({type:"confirm",name:"shouldForceInstall",message:"Do you wish to install it again?"});if(!shouldForceInstall)return}let main=await(0,import_csf_tools2.readConfig)(mainConfigPath);logger17.log(`Verifying ${addonName}`);let version2=inputVersion;!version2&&isCoreAddon(addonName)&&storybookVersion&&(version2=storybookVersion),version2||(version2=await packageManager.latestVersion(addonName)),isCoreAddon(addonName)&&version2!==storybookVersion&&logger17.warn(`The version of ${addonName} (${version2}) you are installing is not the same as the version of Storybook you are using (${storybookVersion}). This may lead to unexpected behavior.`);let addonWithVersion=isValidVersion(version2)&&!version2.includes("-pr-")?`${addonName}@^${version2}`:`${addonName}@${version2}`;if(logger17.log(`Installing ${addonWithVersion}`),await packageManager.addDependencies({installAsDevDependencies:!0,writeOutputToFile:!1},[addonWithVersion]),shouldAddToMain){if(logger17.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`),main.getFieldNode(["addons"])&&getRequireWrapperName(main)!==null){let addonNode=main.valueToNode(addonName);main.appendNodeToArray(["addons"],addonNode),wrapValueWithRequireWrapper(main,addonNode)}else main.appendValueToArray(["addons"],addonName);await(0,import_csf_tools2.writeConfig)(main)}try{await(0,import_common3.syncStorybookAddons)(mainConfig,previewConfigPath)}catch{}!skipPostinstall&&isCoreAddon(addonName)&&await postinstallAddon(addonName,{packageManager:packageManager.type,configDir,yes})}function isValidVersion(version2){return import_semver.default.valid(version2)||version2.match(/^\d+$/)}var import_node_fs3=require("fs"),import_promises7=require("fs/promises"),import_node_path6=require("path"),import_common20=require("storybook/internal/common");var import_node_process2=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value(red,green,blue){return red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5)},enumerable:!1},hexToRgb:{value(hex){let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return[0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return[integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value(code){if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else{code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var import_node_process=__toESM(require("process"),1),import_node_os=__toESM(require("os"),1),import_node_tty=__toESM(require("tty"),1);function hasFlag(flag,argv=globalThis.Deno?globalThis.Deno.args:import_node_process.default.argv){let prefix=flag.startsWith("-")?"":flag.length===1?"-":"--",position=argv.indexOf(prefix+flag),terminatorPosition=argv.indexOf("--");return position!==-1&&(terminatorPosition===-1||position<terminatorPosition)}var{env}=import_node_process.default,flagForceColor;hasFlag("no-color")||hasFlag("no-colors")||hasFlag("color=false")||hasFlag("color=never")?flagForceColor=0:(hasFlag("color")||hasFlag("colors")||hasFlag("color=true")||hasFlag("color=always"))&&(flagForceColor=1);function envForceColor(){if("FORCE_COLOR"in env)return env.FORCE_COLOR==="true"?1:env.FORCE_COLOR==="false"?0:env.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(env.FORCE_COLOR,10),3)}function translateLevel(level){return level===0?!1:{level,hasBasic:!0,has256:level>=2,has16m:level>=3}}function _supportsColor(haveStream,{streamIsTTY,sniffFlags=!0}={}){let noFlagForceColor=envForceColor();noFlagForceColor!==void 0&&(flagForceColor=noFlagForceColor);let forceColor=sniffFlags?flagForceColor:noFlagForceColor;if(forceColor===0)return 0;if(sniffFlags){if(hasFlag("color=16m")||hasFlag("color=full")||hasFlag("color=truecolor"))return 3;if(hasFlag("color=256"))return 2}if("TF_BUILD"in env&&"AGENT_NAME"in env)return 1;if(haveStream&&!streamIsTTY&&forceColor===void 0)return 0;let min=forceColor||0;if(env.TERM==="dumb")return min;if(import_node_process.default.platform==="win32"){let osRelease=import_node_os.default.release().split(".");return Number(osRelease[0])>=10&&Number(osRelease[2])>=10586?Number(osRelease[2])>=14931?3:2:1}if("CI"in env)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(key=>key in env)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(sign=>sign in env)||env.CI_NAME==="codeship"?1:min;if("TEAMCITY_VERSION"in env)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION)?1:0;if(env.COLORTERM==="truecolor"||env.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in env){let version2=Number.parseInt((env.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(env.TERM_PROGRAM){case"iTerm.app":return version2>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(env.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)||"COLORTERM"in env?1:min}function createSupportsColor(stream,options={}){let level=_supportsColor(stream,{streamIsTTY:stream&&stream.isTTY,...options});return translateLevel(level)}var supportsColor={stdout:createSupportsColor({isTTY:import_node_tty.default.isatty(1)}),stderr:createSupportsColor({isTTY:import_node_tty.default.isatty(2)})},supports_color_default=supportsColor;function stringReplaceAll(string,substring,replacer){let index=string.indexOf(substring);if(index===-1)return string;let substringLength=substring.length,endIndex=0,returnValue="";do returnValue+=string.slice(endIndex,index)+substring+replacer,endIndex=index+substringLength,index=string.indexOf(substring,endIndex);while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}function stringEncaseCRLFWithFirstIndex(string,prefix,postfix,index){let endIndex=0,returnValue="";do{let gotCR=string[index-1]==="\r";returnValue+=string.slice(endIndex,gotCR?index-1:index)+prefix+(gotCR?`\r
114
114
  `:`
115
115
  `)+postfix,endIndex=index+1,index=string.indexOf(`
116
116
  `,endIndex)}while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}var{stdout:stdoutColor,stderr:stderrColor}=supports_color_default,GENERATOR=Symbol("GENERATOR"),STYLER=Symbol("STYLER"),IS_EMPTY=Symbol("IS_EMPTY"),levelMapping=["ansi","ansi","ansi256","ansi16m"],styles2=Object.create(null),applyOptions=(object,options={})=>{if(options.level&&!(Number.isInteger(options.level)&&options.level>=0&&options.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let colorLevel=stdoutColor?stdoutColor.level:0;object.level=options.level===void 0?colorLevel:options.level};var chalkFactory=options=>{let chalk2=(...strings)=>strings.join(" ");return applyOptions(chalk2,options),Object.setPrototypeOf(chalk2,createChalk.prototype),chalk2};function createChalk(options){return chalkFactory(options)}Object.setPrototypeOf(createChalk.prototype,Function.prototype);for(let[styleName,style]of Object.entries(ansi_styles_default))styles2[styleName]={get(){let builder=createBuilder(this,createStyler(style.open,style.close,this[STYLER]),this[IS_EMPTY]);return Object.defineProperty(this,styleName,{value:builder}),builder}};styles2.visible={get(){let builder=createBuilder(this,this[STYLER],!0);return Object.defineProperty(this,"visible",{value:builder}),builder}};var getModelAnsi=(model,level,type,...arguments_)=>model==="rgb"?level==="ansi16m"?ansi_styles_default[type].ansi16m(...arguments_):level==="ansi256"?ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_)):ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_)):model==="hex"?getModelAnsi("rgb",level,type,...ansi_styles_default.hexToRgb(...arguments_)):ansi_styles_default[type][model](...arguments_),usedModels=["rgb","hex","ansi256"];for(let model of usedModels){styles2[model]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"color",...arguments_),ansi_styles_default.color.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}};let bgModel="bg"+model[0].toUpperCase()+model.slice(1);styles2[bgModel]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"bgColor",...arguments_),ansi_styles_default.bgColor.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}}}var proto=Object.defineProperties(()=>{},{...styles2,level:{enumerable:!0,get(){return this[GENERATOR].level},set(level){this[GENERATOR].level=level}}}),createStyler=(open,close,parent)=>{let openAll,closeAll;return parent===void 0?(openAll=open,closeAll=close):(openAll=parent.openAll+open,closeAll=close+parent.closeAll),{open,close,openAll,closeAll,parent}},createBuilder=(self,_styler,_isEmpty)=>{let builder=(...arguments_)=>applyStyle(builder,arguments_.length===1?""+arguments_[0]:arguments_.join(" "));return Object.setPrototypeOf(builder,proto),builder[GENERATOR]=self,builder[STYLER]=_styler,builder[IS_EMPTY]=_isEmpty,builder},applyStyle=(self,string)=>{if(self.level<=0||!string)return self[IS_EMPTY]?"":string;let styler=self[STYLER];if(styler===void 0)return string;let{openAll,closeAll}=styler;if(string.includes("\x1B"))for(;styler!==void 0;)string=stringReplaceAll(string,styler.close,styler.open),styler=styler.parent;let lfIndex=string.indexOf(`
@@ -133,7 +133,7 @@ ${packageVersions.join(", ")}`):acc.trivial.push(`${import_picocolors2.default.y
133
133
  ${packageVersions.join(", ")}`),acc},{critical:[],trivial:[]});return critical.length===0&&trivial.length===0||(critical.length>0&&(messages.push(`${import_picocolors2.default.bold("Critical:")} The following dependencies are duplicated and WILL cause unexpected behavior:`),messages.push(critical.join(messageDivider),`
134
134
  `)),trivial.length>0&&(messages.push(`${import_picocolors2.default.bold("Attention:")} The following dependencies are duplicated which might cause unexpected behavior:`),messages.push(trivial.join(messageDivider))),messages.push(`
135
135
  `,`Please try de-duplicating these dependencies by running ${import_picocolors2.default.cyan(`${installationMetadata.dedupeCommand}`)}`),messages.push(`
136
- `,`You can find more information for a given dependency by running ${import_picocolors2.default.cyan(`${installationMetadata.infoCommand} <package-name>`)}`)),messages}catch{return}}var import_common5=require("storybook/internal/common"),import_picocolors3=__toESM(require_picocolors(),1),import_semver3=__toESM(require("semver"),1),checkPackageCompatibility=async(dependency,context)=>{let{currentStorybookVersion,skipErrors,packageManager}=context;try{let dependencyPackageJson=await packageManager.getPackageJSON(dependency);if(dependencyPackageJson===null)return{packageName:dependency};let{version:packageVersion,name=dependency,dependencies,peerDependencies,homepage}=dependencyPackageJson,packageStorybookVersion=Object.entries({...dependencies,...peerDependencies}).filter(([dep])=>import_common5.versions[dep]).map(([_,versionRange])=>versionRange).find(versionRange=>versionRange&&import_semver3.default.validRange(versionRange)&&!import_semver3.default.satisfies(currentStorybookVersion,versionRange)),isCorePackage3=import_common5.versions[name],availableUpdate,availableCoreUpdate;return isCorePackage3&&packageVersion&&import_semver3.default.gt(currentStorybookVersion,packageVersion)&&(availableUpdate=currentStorybookVersion),isCorePackage3&&packageVersion&&import_semver3.default.gt(packageVersion,currentStorybookVersion)&&(availableCoreUpdate=packageVersion),{packageName:name,packageVersion,homepage,hasIncompatibleDependencies:packageStorybookVersion!=null,packageStorybookVersion,availableUpdate,availableCoreUpdate}}catch(err){return skipErrors||console.log(`Error checking compatibility for ${dependency}, please report an issue:
136
+ `,`You can find more information for a given dependency by running ${import_picocolors2.default.cyan(`${installationMetadata.infoCommand} <package-name>`)}`)),messages}catch{return}}var import_common5=require("storybook/internal/common"),import_picocolors3=__toESM(require_picocolors(),1),import_semver3=__toESM(require("semver"),1);var consolidatedPackages={"@storybook/channels":"storybook/internal/channels","@storybook/client-logger":"storybook/internal/client-logger","@storybook/core-common":"storybook/internal/common","@storybook/core-events":"storybook/internal/core-events","@storybook/csf-tools":"storybook/internal/csf-tools","@storybook/docs-tools":"storybook/internal/docs-tools","@storybook/node-logger":"storybook/internal/node-logger","@storybook/preview-api":"storybook/preview-api","@storybook/router":"storybook/internal/router","@storybook/telemetry":"storybook/internal/telemetry","@storybook/theming":"storybook/theming","@storybook/types":"storybook/internal/types","@storybook/manager-api":"storybook/manager-api","@storybook/manager":"storybook/internal/manager","@storybook/preview":"storybook/internal/preview","@storybook/core-server":"storybook/internal/core-server","@storybook/builder-manager":"storybook/internal/builder-manager","@storybook/components":"storybook/internal/components","@storybook/test":"storybook/test","@storybook/experimental-nextjs-vite":"@storybook/nextjs-vite","@storybook/instrumenter":"storybook/internal/instrumenter","@storybook/blocks":"@storybook/addon-docs/blocks"};var checkPackageCompatibility=async(dependency,context)=>{let{currentStorybookVersion,skipErrors,packageManager}=context;try{let dependencyPackageJson=await packageManager.getPackageJSON(dependency);if(dependencyPackageJson===null)return{packageName:dependency};let{version:packageVersion,name=dependency,dependencies,peerDependencies,homepage}=dependencyPackageJson,packageStorybookVersion=Object.entries({...dependencies,...peerDependencies}).filter(([dep])=>import_common5.versions[dep]||consolidatedPackages[dep]).map(([_,versionRange])=>versionRange).find(versionRange=>versionRange&&import_semver3.default.validRange(versionRange)&&!import_semver3.default.satisfies(currentStorybookVersion,versionRange)),isCorePackage3=import_common5.versions[name],availableUpdate,availableCoreUpdate;return isCorePackage3&&packageVersion&&import_semver3.default.gt(currentStorybookVersion,packageVersion)&&(availableUpdate=currentStorybookVersion),isCorePackage3&&packageVersion&&import_semver3.default.gt(packageVersion,currentStorybookVersion)&&(availableCoreUpdate=packageVersion),{packageName:name,packageVersion,homepage,hasIncompatibleDependencies:packageStorybookVersion!=null,packageStorybookVersion,availableUpdate,availableCoreUpdate}}catch(err){return skipErrors||console.log(`Error checking compatibility for ${dependency}, please report an issue:
137
137
  `,err),{packageName:dependency}}},getIncompatibleStorybookPackages=async context=>{let packageManager=context.packageManager??import_common5.JsPackageManagerFactory.getPackageManager(),allDeps=await packageManager.getAllDependencies(),storybookLikeDeps=Object.keys(allDeps).filter(dep=>dep.includes("storybook"));if(storybookLikeDeps.length===0&&!context.skipErrors)throw new Error("No Storybook dependencies found in the package.json");return Promise.all(storybookLikeDeps.map(dep=>checkPackageCompatibility(dep,{...context,packageManager})))},getIncompatiblePackagesSummary=(dependencyAnalysis,currentStorybookVersion)=>{let summaryMessage=[],incompatiblePackages=dependencyAnalysis.filter(dep=>dep.hasIncompatibleDependencies);return incompatiblePackages.length>0&&(summaryMessage.push(`You are currently using Storybook ${import_picocolors3.default.bold(currentStorybookVersion)} but you have packages which are incompatible with it:`),incompatiblePackages.forEach(({packageName:addonName,packageVersion:addonVersion,homepage,availableUpdate,packageStorybookVersion})=>{let packageDescription=`${import_picocolors3.default.cyan(addonName)}@${import_picocolors3.default.cyan(addonVersion)}`,updateMessage=availableUpdate?` (${availableUpdate} available!)`:"",dependsOnStorybook=packageStorybookVersion!=null?` which depends on ${import_picocolors3.default.red(packageStorybookVersion)}`:"",packageRepo=homepage?`
138
138
  Repo: ${import_picocolors3.default.yellow(homepage)}`:"";summaryMessage.push(`- ${packageDescription}${updateMessage}${dependsOnStorybook}${packageRepo}`)}),summaryMessage.push(`
139
139
  `,"Please consider updating your packages or contacting the maintainers for compatibility details.","For more on Storybook 9 compatibility, see the linked GitHub issue:",import_picocolors3.default.yellow("https://github.com/storybookjs/storybook/issues/30944")),incompatiblePackages.some(dep=>dep.availableCoreUpdate)&&summaryMessage.push(`
@@ -233,105 +233,117 @@ ${indentation}// 'off' - skip a11y checks entirely`;return lines.splice(paramete
233
233
  Would you like to update these files to use the new parameter name?
234
234
  `,run:async options=>{let{result,dryRun=!1}=options,{storyFilesToUpdate,previewFileToUpdate}=result,errors=[];if(previewFileToUpdate){let content=await(0,import_promises2.readFile)(previewFileToUpdate,"utf-8"),code=transformPreviewA11yParameters(content);if(code)if(dryRun)logger5.log("Would have updated",code.fileName);else try{await(0,import_csf_tools7.writeConfig)(code,previewFileToUpdate)}catch(error){errors.push({file:previewFileToUpdate,error})}}let{default:pLimit}=await import("p-limit"),limit=pLimit(10);if(await Promise.all(storyFilesToUpdate.map(file=>limit(async()=>{try{let content=await(0,import_promises2.readFile)(file,"utf-8"),code=transformStoryA11yParameters(content);code&&(dryRun?logger5.log("Would have updated",file):await(0,import_csf_tools7.writeCsf)(code,file))}catch(error){errors.push({file,error})}}))),errors.length>0)throw new Error(`Failed to process ${errors.length} files:
235
235
  ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
236
- `)}`)}};var import_common13=require("storybook/internal/common"),import_picocolors11=__toESM(require_picocolors(),1),import_ts_dedent7=require("ts-dedent"),consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},addonEssentialsRemoveDocs={id:"addon-essentials-remove-docs",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common13.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),installedAddons=Object.keys({...packageJson.dependencies,...packageJson.devDependencies});for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));typeof essentialsEntry=="object"&&(hasDocsDisabled=(essentialsEntry.options||{}).docs===!1)}return!hasEssentialsAddon&&additionalAddonsToRemove.length===0?null:{hasEssentials:hasEssentialsAddon,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}}catch{return null}},prompt({hasDocsDisabled,additionalAddonsToRemove,hasEssentials}){let message="";hasEssentials&&(message=import_ts_dedent7.dedent`
237
- We've detected that you have ${import_picocolors11.default.yellow("@storybook/addon-essentials")} installed.
238
-
239
- In Storybook 9.0, all features from ${import_picocolors11.default.yellow("@storybook/addon-essentials")} (except docs)
240
- have been moved into Storybook's core. You no longer need to install or configure them separately.
241
-
242
- We'll remove ${import_picocolors11.default.yellow("@storybook/addon-essentials")} from your configuration and dependencies.
243
- `);let additionalAddonsMessage=additionalAddonsToRemove.length>0?import_ts_dedent7.dedent`
244
- ${hasEssentials?"":"In Storybook 9.0, several features have been moved into Storybook's core."}\n\nWe've detected the following addons that are now part of Storybook core:
245
- ${additionalAddonsToRemove.map(addon=>`
246
- - ${import_picocolors11.default.yellow(addon)}`).join("")}
247
-
248
- These will be removed as they are no longer needed.
249
-
250
- We'll also need to update your code to use the new core addons.`:"";return hasDocsDisabled?`${message}${additionalAddonsMessage}`:hasEssentials?import_ts_dedent7.dedent`
251
- ${message}${additionalAddonsMessage}
252
-
253
- Since you were using the docs feature, we'll install ${import_picocolors11.default.yellow("@storybook/addon-docs")}
254
- separately and add it to your configuration.
255
- `:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common13.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common13.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
256
- ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
257
- `)}`);!hasDocsDisabled&&!hasDocsAddon&&(console.log("Adding @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir]))}}};var import_fs3=require("fs"),import_picocolors12=__toESM(require_picocolors(),1),import_ts_dedent8=require("ts-dedent"),logger6=console,addonExperimentalTest={id:"addon-experimental-test",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],promptType:"auto",async check({packageManager}){if(!await packageManager.getPackageVersion("@storybook/experimental-addon-test"))return null;let{globbySync}=await import("globby"),matchingFiles=globbySync(["**/.storybook/**/*.*","**/vitest.*.{js,ts,mjs,cjs}","**/vite.config.{js,ts,mjs,cjs}"],{ignore:["**/node_modules/**","**/dist/**"]}),filesWithExperimentalAddon=[];for(let file of matchingFiles)try{(0,import_fs3.readFileSync)(file,"utf-8").includes("@storybook/experimental-addon-test")&&filesWithExperimentalAddon.push(file)}catch{}return{matchingFiles:filesWithExperimentalAddon}},prompt({matchingFiles}){let fileCount=matchingFiles.length,fileList=matchingFiles.slice(0,5).map(file=>` - ${import_picocolors12.default.cyan(file)}`).join(`
258
- `),hasMoreFiles=fileCount>5;return import_ts_dedent8.dedent`
259
- We've detected you're using ${import_picocolors12.default.cyan("@storybook/experimental-addon-test")}, which is now available as a stable addon.
236
+ `)}`)}};var import_fs3=require("fs"),import_picocolors11=__toESM(require_picocolors(),1),import_ts_dedent7=require("ts-dedent"),logger6=console,addonExperimentalTest={id:"addon-experimental-test",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],promptType:"auto",async check({packageManager}){if(!await packageManager.getPackageVersion("@storybook/experimental-addon-test"))return null;let{globbySync}=await import("globby"),matchingFiles=globbySync(["**/.storybook/**/*.*","**/vitest.*.{js,ts,mjs,cjs}","**/vite.config.{js,ts,mjs,cjs}"],{ignore:["**/node_modules/**","**/dist/**"]}),filesWithExperimentalAddon=[];for(let file of matchingFiles)try{(0,import_fs3.readFileSync)(file,"utf-8").includes("@storybook/experimental-addon-test")&&filesWithExperimentalAddon.push(file)}catch{}return{matchingFiles:filesWithExperimentalAddon}},prompt({matchingFiles}){let fileCount=matchingFiles.length,fileList=matchingFiles.slice(0,5).map(file=>` - ${import_picocolors11.default.cyan(file)}`).join(`
237
+ `),hasMoreFiles=fileCount>5;return import_ts_dedent7.dedent`
238
+ We've detected you're using ${import_picocolors11.default.cyan("@storybook/experimental-addon-test")}, which is now available as a stable addon.
260
239
 
261
- We can automatically migrate your project to use ${import_picocolors12.default.cyan("@storybook/addon-vitest")} instead.
240
+ We can automatically migrate your project to use ${import_picocolors11.default.cyan("@storybook/addon-vitest")} instead.
262
241
 
263
242
  This will update ${fileCount} file(s) and your package.json:
264
243
  ${fileList}${hasMoreFiles?`
265
244
  ... and ${fileCount-5} more files`:""}
266
- `},async run({result:{matchingFiles},packageManager,dryRun}){for(let file of matchingFiles){let updatedContent=(0,import_fs3.readFileSync)(file,"utf-8").replace(/@storybook\/experimental-addon-test/g,"@storybook/addon-vitest");dryRun||(0,import_fs3.writeFileSync)(file,updatedContent,"utf-8")}if(!dryRun){let devDependencies=(await packageManager.retrievePackageJson()).devDependencies??{},storybookVersion=await packageManager.getPackageVersion("storybook"),isExperimentalAddonTestDevDependency=Object.keys(devDependencies).includes("@storybook/experimental-addon-test");await packageManager.removeDependencies({},["@storybook/experimental-addon-test"]),await packageManager.addDependencies({installAsDevDependencies:isExperimentalAddonTestDevDependency},[`@storybook/addon-vitest@${storybookVersion}`])}logger6.info(import_ts_dedent8.dedent`
267
- ✅ Successfully migrated from ${import_picocolors12.default.cyan("@storybook/experimental-addon-test")} to ${import_picocolors12.default.cyan("@storybook/addon-vitest")}
245
+ `},async run({result:{matchingFiles},packageManager,dryRun}){for(let file of matchingFiles){let updatedContent=(0,import_fs3.readFileSync)(file,"utf-8").replace(/@storybook\/experimental-addon-test/g,"@storybook/addon-vitest");dryRun||(0,import_fs3.writeFileSync)(file,updatedContent,"utf-8")}if(!dryRun){let devDependencies=(await packageManager.retrievePackageJson()).devDependencies??{},storybookVersion=await packageManager.getPackageVersion("storybook"),isExperimentalAddonTestDevDependency=Object.keys(devDependencies).includes("@storybook/experimental-addon-test");await packageManager.removeDependencies({},["@storybook/experimental-addon-test"]),await packageManager.addDependencies({installAsDevDependencies:isExperimentalAddonTestDevDependency},[`@storybook/addon-vitest@${storybookVersion}`])}logger6.info(import_ts_dedent7.dedent`
246
+ ✅ Successfully migrated from ${import_picocolors11.default.cyan("@storybook/experimental-addon-test")} to ${import_picocolors11.default.cyan("@storybook/addon-vitest")}
268
247
  ✅ Updated package.json dependency
269
248
  ✅ Updated ${matchingFiles.length} file(s)
270
- `)}};var import_common14=require("storybook/internal/common"),import_picocolors13=__toESM(require_picocolors(),1),import_ts_dedent9=require("ts-dedent"),addonMdxGfmRemove={id:"addon-mdx-gfm-remove",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig}){if(!mainConfigPath)return null;try{let hasMdxGfm=(0,import_common14.getAddonNames)(mainConfig).includes("@storybook/addon-mdx-gfm");return hasMdxGfm?{hasMdxGfm}:null}catch{return null}},prompt(){return import_ts_dedent9.dedent`
271
- We've detected that you have ${import_picocolors13.default.yellow("@storybook/addon-mdx-gfm")} installed.
249
+ `)}};var import_common13=require("storybook/internal/common"),import_picocolors12=__toESM(require_picocolors(),1),import_ts_dedent8=require("ts-dedent"),addonMdxGfmRemove={id:"addon-mdx-gfm-remove",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig}){if(!mainConfigPath)return null;try{let hasMdxGfm=(0,import_common13.getAddonNames)(mainConfig).includes("@storybook/addon-mdx-gfm");return hasMdxGfm?{hasMdxGfm}:null}catch{return null}},prompt(){return import_ts_dedent8.dedent`
250
+ We've detected that you have ${import_picocolors12.default.yellow("@storybook/addon-mdx-gfm")} installed.
272
251
 
273
252
  This package has been removed in Storybook 9.0. We'll remove it from your configuration and dependencies.
274
- `},async run({packageManager,configDir}){await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-mdx-gfm","--config-dir",configDir])}};var import_common15=require("storybook/internal/common"),import_picocolors14=__toESM(require_picocolors(),1),import_ts_dedent10=require("ts-dedent");var addonStorysourceRemove={id:"addon-storysource-remove",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig}){if(!mainConfigPath)return null;try{let hasStorysource=!1;return await updateMainConfig({mainConfigPath,dryRun:!0},()=>{hasStorysource=(0,import_common15.getAddonNames)(mainConfig).includes("@storybook/addon-storysource")}),hasStorysource?{hasStorysource}:null}catch{return null}},prompt(){return import_ts_dedent10.dedent`
275
- We've detected that you have ${import_picocolors14.default.yellow("@storybook/addon-storysource")} installed.
253
+ `},async run({packageManager,configDir}){await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-mdx-gfm","--config-dir",configDir])}};var import_common14=require("storybook/internal/common"),import_picocolors13=__toESM(require_picocolors(),1),import_ts_dedent9=require("ts-dedent");var logger7=console,addonStorysourceCodePanel={id:"addon-storysource-code-panel",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig}){if(!mainConfigPath)return null;let addonNames=(0,import_common14.getAddonNames)(mainConfig),hasStorysource=addonNames.includes("@storybook/addon-storysource"),hasDocs=addonNames.includes("@storybook/addon-docs");return hasStorysource?{hasStorysource,hasDocs}:null},prompt:({hasDocs})=>import_ts_dedent9.dedent`
254
+ We've detected that you're using ${import_picocolors13.default.yellow("@storybook/addon-storysource")}.
276
255
 
277
- This package has been removed in Storybook 9.0. We'll remove it from your configuration and dependencies.
278
-
279
- For more information, see the migration guide:
280
- https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#storysource-addon-removed
281
- `},async run({configDir,packageManager}){await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-storysource","--config-dir",configDir])}};var import_promises3=require("fs/promises"),import_common16=require("storybook/internal/common"),import_picocolors15=__toESM(require_picocolors(),1),import_ts_dedent11=require("ts-dedent");var consolidatedPackages={"@storybook/channels":"storybook/internal/channels","@storybook/client-logger":"storybook/internal/client-logger","@storybook/core-common":"storybook/internal/common","@storybook/core-events":"storybook/internal/core-events","@storybook/csf-tools":"storybook/internal/csf-tools","@storybook/docs-tools":"storybook/internal/docs-tools","@storybook/node-logger":"storybook/internal/node-logger","@storybook/preview-api":"storybook/preview-api","@storybook/router":"storybook/internal/router","@storybook/telemetry":"storybook/internal/telemetry","@storybook/theming":"storybook/theming","@storybook/types":"storybook/internal/types","@storybook/manager-api":"storybook/manager-api","@storybook/manager":"storybook/internal/manager","@storybook/preview":"storybook/internal/preview","@storybook/core-server":"storybook/internal/core-server","@storybook/builder-manager":"storybook/internal/builder-manager","@storybook/components":"storybook/internal/components","@storybook/test":"storybook/test","@storybook/experimental-nextjs-vite":"@storybook/nextjs-vite","@storybook/instrumenter":"storybook/internal/instrumenter","@storybook/blocks":"@storybook/addon-docs/blocks"};function transformPackageJson(content){let packageJson=JSON.parse(content),hasChanges=!1,packagesToAdd=new Set,depTypes=["dependencies","devDependencies"],storybookVersion=null,storybookDepType=null;for(let depType of depTypes)if(packageJson[depType]?.storybook){storybookVersion=packageJson[depType].storybook,storybookDepType=depType;break}for(let depType of depTypes)if(packageJson[depType]){for(let[dep]of Object.entries(packageJson[depType]))if(dep in consolidatedPackages){let newPackage=consolidatedPackages[dep];!newPackage.startsWith("storybook/")&&!newPackage.match(/(?:.*\/){2,}/)&&packagesToAdd.add(newPackage),delete packageJson[depType][dep],hasChanges=!0}}if(packagesToAdd.size>0){let version2=storybookVersion??import_common16.versions["@storybook/nextjs-vite"],depType=storybookDepType??"devDependencies";packageJson[depType]=packageJson[depType]||{};for(let pkg of packagesToAdd)packageJson[depType][pkg]=version2;hasChanges=!0}return hasChanges?JSON.stringify(packageJson,null,2):null}var transformPackageJsonFiles=async(files,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises3.readFile)(file,"utf-8"),transformed=transformPackageJson(contents);!dryRun&&transformed&&await(0,import_promises3.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},consolidatedImports={id:"consolidated-imports",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],check:async()=>{let projectRoot=(0,import_common16.getProjectRoot)(),globby=(await import("globby")).globby,packageJsonFiles=await globby(["**/package.json"],{...(0,import_common16.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),consolidatedDeps=new Set,affectedPackageJSONFiles=new Set;return await Promise.all(packageJsonFiles.map(async file=>{let contents=await(0,import_promises3.readFile)(file,"utf-8"),packageJson=JSON.parse(contents),allDeps={...packageJson.dependencies||{},...packageJson.devDependencies||{}},hasConsolidatedDeps=!1;Object.keys(allDeps).forEach(dep=>{dep in consolidatedPackages&&(consolidatedDeps.add(dep),hasConsolidatedDeps=!0)}),hasConsolidatedDeps&&affectedPackageJSONFiles.add(file)})),consolidatedDeps.size===0?null:{consolidatedDeps,packageJsonFiles:Array.from(affectedPackageJSONFiles)}},prompt:result=>import_ts_dedent11.dedent`
256
+ The ${import_picocolors13.default.yellow("@storybook/addon-storysource")} addon is being removed in Storybook 9.0.
257
+ Instead, Storybook now provides a Code Panel via ${import_picocolors13.default.yellow("@storybook/addon-docs")}
258
+ that offers similar functionality with improved integration and performance.
259
+
260
+ We'll remove ${import_picocolors13.default.yellow("@storybook/addon-storysource")} from your project and
261
+ enable the Code Panel in your preview configuration. ${hasDocs?"":`Additionally, we will install ${import_picocolors13.default.yellow("@storybook/addon-docs")} for you.`}
262
+
263
+ More info: ${import_picocolors13.default.cyan("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#storysource-addon-removed")}
264
+ `,run:async options=>{let{result,dryRun=!1,packageManager,configDir,previewConfigPath}=options,{hasStorysource,hasDocs}=result,errors=[];if(hasStorysource){if(!dryRun)if(logger7.log("Removing @storybook/addon-storysource..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-storysource","--config-dir",configDir]),hasDocs||(logger7.log("Installing @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir])),previewConfigPath)try{await updateMainConfig({mainConfigPath:previewConfigPath,dryRun},previewConfig=>{previewConfig.setFieldValue(["parameters","docs","codePanel"],!0)})}catch(error){console.log(error),errors.push({file:previewConfigPath,error})}else logger7.log("No preview config file found. Please manually add code panel parameters."),logger7.log(import_ts_dedent9.dedent`
265
+ Add this to your .storybook/preview.js:
266
+ export const parameters = {
267
+ docs: {
268
+ codePanel: true,
269
+ },
270
+ };`);if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
271
+ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
272
+ `)}`)}}};var import_promises3=require("fs/promises"),import_common15=require("storybook/internal/common"),import_picocolors14=__toESM(require_picocolors(),1),import_ts_dedent10=require("ts-dedent");function transformPackageJson(content){let packageJson=JSON.parse(content),hasChanges=!1,packagesToAdd=new Set,depTypes=["dependencies","devDependencies"],storybookVersion=null,storybookDepType=null;for(let depType of depTypes)if(packageJson[depType]?.storybook){storybookVersion=packageJson[depType].storybook,storybookDepType=depType;break}for(let depType of depTypes)if(packageJson[depType]){for(let[dep]of Object.entries(packageJson[depType]))if(dep in consolidatedPackages){let newPackage=consolidatedPackages[dep];!newPackage.startsWith("storybook/")&&!newPackage.match(/(?:.*\/){2,}/)&&packagesToAdd.add(newPackage),delete packageJson[depType][dep],hasChanges=!0}}if(packagesToAdd.size>0){let version2=storybookVersion??import_common15.versions["@storybook/nextjs-vite"],depType=storybookDepType??"devDependencies";packageJson[depType]=packageJson[depType]||{};for(let pkg of packagesToAdd)packageJson[depType][pkg]=version2;hasChanges=!0}return hasChanges?JSON.stringify(packageJson,null,2):null}var transformPackageJsonFiles=async(files,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises3.readFile)(file,"utf-8"),transformed=transformPackageJson(contents);!dryRun&&transformed&&await(0,import_promises3.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},consolidatedImports={id:"consolidated-imports",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],check:async()=>{let projectRoot=(0,import_common15.getProjectRoot)(),globby=(await import("globby")).globby,packageJsonFiles=await globby(["**/package.json"],{...(0,import_common15.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),consolidatedDeps=new Set,affectedPackageJSONFiles=new Set;return await Promise.all(packageJsonFiles.map(async file=>{let contents=await(0,import_promises3.readFile)(file,"utf-8"),packageJson=JSON.parse(contents),allDeps={...packageJson.dependencies||{},...packageJson.devDependencies||{}},hasConsolidatedDeps=!1;Object.keys(allDeps).forEach(dep=>{dep in consolidatedPackages&&(consolidatedDeps.add(dep),hasConsolidatedDeps=!0)}),hasConsolidatedDeps&&affectedPackageJSONFiles.add(file)})),consolidatedDeps.size===0?null:{consolidatedDeps,packageJsonFiles:Array.from(affectedPackageJSONFiles)}},prompt:result=>import_ts_dedent10.dedent`
282
273
  Found package.json files that contain consolidated or renamed Storybook packages that need to be updated:
283
274
  ${result.packageJsonFiles.map(file=>`- ${file}`).join(`
284
275
  `)}
285
276
 
286
277
  We will automatically rename the following packages:
287
- ${Array.from(result.consolidatedDeps).map(dep=>`- ${import_picocolors15.default.red(dep)} -> ${import_picocolors15.default.cyan(consolidatedPackages[dep])}`).join(`
278
+ ${Array.from(result.consolidatedDeps).map(dep=>`- ${import_picocolors14.default.red(dep)} -> ${import_picocolors14.default.cyan(consolidatedPackages[dep])}`).join(`
288
279
  `)}
289
280
 
290
- These packages have been renamed or consolidated into the main ${import_picocolors15.default.cyan("storybook")} package and should be removed.
291
- The main ${import_picocolors15.default.cyan("storybook")} package will be added to devDependencies if not already present.
281
+ These packages have been renamed or consolidated into the main ${import_picocolors14.default.cyan("storybook")} package and should be removed.
282
+ The main ${import_picocolors14.default.cyan("storybook")} package will be added to devDependencies if not already present.
292
283
 
293
284
  Would you like to:
294
285
  1. Update these package.json files
295
286
  2. Scan your codebase and update any imports from these updated packages
296
287
 
297
288
  This will ensure your project is properly updated to use the new updated package structure and to use the latest package names.
298
- `,run:async options=>{let{result,dryRun=!1}=options,{packageJsonFiles}=result,errors=[],packageJsonErrors=await transformPackageJsonFiles(packageJsonFiles,dryRun);errors.push(...packageJsonErrors);let importErrors=await(0,import_common16.scanAndTransformFiles)({dryRun:!!dryRun,promptMessage:"Enter a custom glob pattern:",transformFn:import_common16.transformImportFiles,transformOptions:consolidatedPackages});if(errors.push(...importErrors),errors.length>0)throw new Error(`Failed to process ${errors.length} files:
289
+ `,run:async options=>{let{result,dryRun=!1}=options,{packageJsonFiles}=result,errors=[],packageJsonErrors=await transformPackageJsonFiles(packageJsonFiles,dryRun);errors.push(...packageJsonErrors);let importErrors=await(0,import_common15.scanAndTransformFiles)({dryRun:!!dryRun,promptMessage:"Enter a custom glob pattern:",transformFn:import_common15.transformImportFiles,transformOptions:consolidatedPackages});if(errors.push(...importErrors),errors.length>0)throw new Error(`Failed to process ${errors.length} files:
299
290
  ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
300
- `)}`);!dryRun&&result.packageJsonFiles.length>0&&await options.packageManager.installDependencies()}};var import_cli=require("storybook/internal/cli"),import_picocolors16=__toESM(require_picocolors(),1),import_ts_dedent12=require("ts-dedent"),logger7=console,eslintPlugin={id:"eslintPlugin",versionRange:["*","*"],async check({packageManager}){let{hasEslint,eslintConfigFile,isStorybookPluginInstalled,unsupportedExtension,isFlatConfig}=await(0,import_cli.extractEslintInfo)(packageManager);return isStorybookPluginInstalled||!hasEslint?null:eslintConfigFile?{eslintConfigFile,unsupportedExtension,isFlatConfig}:(logger7.warn("Unable to find eslint config file, skipping"),null)},prompt(){return import_ts_dedent12.dedent`
291
+ `)}`);!dryRun&&result.packageJsonFiles.length>0&&await options.packageManager.installDependencies()}};var import_cli=require("storybook/internal/cli"),import_picocolors15=__toESM(require_picocolors(),1),import_ts_dedent11=require("ts-dedent"),logger8=console,eslintPlugin={id:"eslintPlugin",versionRange:["*","*"],async check({packageManager}){let{hasEslint,eslintConfigFile,isStorybookPluginInstalled,unsupportedExtension,isFlatConfig}=await(0,import_cli.extractEslintInfo)(packageManager);return isStorybookPluginInstalled||!hasEslint?null:eslintConfigFile?{eslintConfigFile,unsupportedExtension,isFlatConfig}:(logger8.warn("Unable to find eslint config file, skipping"),null)},prompt(){return import_ts_dedent11.dedent`
301
292
  We've detected you are not using the Storybook ESLint plugin.
302
293
 
303
294
  In order to have the best experience with Storybook and follow best practices, we advise you to install eslint-plugin-storybook.
304
295
 
305
296
  We can set it up automatically for you.
306
297
 
307
- More info: ${import_picocolors16.default.yellow("https://storybook.js.org/docs/9/configure/integration/eslint-plugin")}
308
- `},async run({result:{eslintConfigFile,unsupportedExtension,isFlatConfig},packageManager,dryRun,skipInstall,storybookVersion}){let deps=[`eslint-plugin-storybook@${storybookVersion}`];if(logger7.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall},deps),!dryRun&&unsupportedExtension){logger7.info(import_ts_dedent12.dedent`
298
+ More info: ${import_picocolors15.default.yellow("https://storybook.js.org/docs/9/configure/integration/eslint-plugin")}
299
+ `},async run({result:{eslintConfigFile,unsupportedExtension,isFlatConfig},packageManager,dryRun,skipInstall,storybookVersion}){let deps=[`eslint-plugin-storybook@${storybookVersion}`];if(logger8.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall},deps),!dryRun&&unsupportedExtension){logger8.info(import_ts_dedent11.dedent`
309
300
  ⚠️ The plugin was successfully installed but failed to be configured.
310
301
 
311
302
  Found an eslint config file with an unsupported automigration format: .eslintrc.${unsupportedExtension}.
312
303
  The supported formats for this automigration are: ${import_cli.SUPPORTED_ESLINT_EXTENSIONS.join(", ")}.
313
304
 
314
305
  Please refer to https://storybook.js.org/docs/configure/integration/eslint-plugin#configuration-eslintrc to finish setting up the plugin manually.
315
- `);return}dryRun||await(0,import_cli.configureEslintPlugin)({eslintConfigFile,packageManager,isFlatConfig})}};var import_promises4=require("fs/promises"),import_csf_tools8=require("storybook/internal/csf-tools"),import_picocolors17=__toESM(require_picocolors(),1),import_ts_dedent13=require("ts-dedent"),MIGRATION="https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewjs-globals-renamed-to-initialglobals",initialGlobals={id:"initial-globals",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({previewConfigPath}){if(!previewConfigPath)return null;let previewConfig=(0,import_csf_tools8.loadConfig)((await(0,import_promises4.readFile)(previewConfigPath)).toString()).parse(),globals=previewConfig.getFieldNode(["globals"]);return globals?{globals,previewConfig,previewConfigPath}:null},prompt({previewConfigPath}){return import_ts_dedent13.dedent`
316
- The ${import_picocolors17.default.cyan("globals")} setting in ${import_picocolors17.default.cyan(previewConfigPath)} was removed
317
- and has been renamed to ${import_picocolors17.default.cyan("initialGlobals")}.
306
+ `);return}dryRun||await(0,import_cli.configureEslintPlugin)({eslintConfigFile,packageManager,isFlatConfig})}};var import_promises4=require("fs/promises"),import_csf_tools8=require("storybook/internal/csf-tools"),import_picocolors16=__toESM(require_picocolors(),1),import_ts_dedent12=require("ts-dedent"),MIGRATION="https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewjs-globals-renamed-to-initialglobals",initialGlobals={id:"initial-globals",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({previewConfigPath}){if(!previewConfigPath)return null;let previewConfig=(0,import_csf_tools8.loadConfig)((await(0,import_promises4.readFile)(previewConfigPath)).toString()).parse(),globals=previewConfig.getFieldNode(["globals"]);return globals?{globals,previewConfig,previewConfigPath}:null},prompt({previewConfigPath}){return import_ts_dedent12.dedent`
307
+ The ${import_picocolors16.default.cyan("globals")} setting in ${import_picocolors16.default.cyan(previewConfigPath)} was removed
308
+ and has been renamed to ${import_picocolors16.default.cyan("initialGlobals")}.
318
309
 
319
- Learn more: ${import_picocolors17.default.yellow(MIGRATION)}
310
+ Learn more: ${import_picocolors16.default.yellow(MIGRATION)}
320
311
 
321
- Rename ${import_picocolors17.default.cyan("globals")} to ${import_picocolors17.default.cyan("initalGlobals")}?
322
- `},async run({dryRun,result}){result.previewConfig.removeField(["globals"]),result.previewConfig.setFieldNode(["initialGlobals"],result.globals),dryRun||await(0,import_promises4.writeFile)(result.previewConfigPath,(0,import_csf_tools8.formatConfig)(result.previewConfig))}};var import_common17=require("storybook/internal/common"),import_picocolors18=__toESM(require_picocolors(),1),import_ts_dedent14=require("ts-dedent"),removeAddonInteractions={id:"removeAddonInteractions",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfig}){return(0,import_common17.getAddonNames)(mainConfig).some(addon=>addon.includes("@storybook/addon-interactions"))?{}:null},prompt(){return import_ts_dedent14.dedent`
323
- ${import_picocolors18.default.magenta("@storybook/addon-interactions")} has been consolidated into Storybook core.
312
+ Rename ${import_picocolors16.default.cyan("globals")} to ${import_picocolors16.default.cyan("initalGlobals")}?
313
+ `},async run({dryRun,result}){result.previewConfig.removeField(["globals"]),result.previewConfig.setFieldNode(["initialGlobals"],result.globals),dryRun||await(0,import_promises4.writeFile)(result.previewConfigPath,(0,import_csf_tools8.formatConfig)(result.previewConfig))}};var import_common16=require("storybook/internal/common"),import_picocolors17=__toESM(require_picocolors(),1),import_ts_dedent13=require("ts-dedent"),removeAddonInteractions={id:"removeAddonInteractions",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfig}){return(0,import_common16.getAddonNames)(mainConfig).some(addon=>addon.includes("@storybook/addon-interactions"))?{}:null},prompt(){return import_ts_dedent13.dedent`
314
+ ${import_picocolors17.default.magenta("@storybook/addon-interactions")} has been consolidated into Storybook core.
324
315
 
325
316
  We'll remove it from your dependencies and unregister it from your Storybook configuration.
326
317
  The functionality will continue to work as before, but now it's built into Storybook core.
327
- `},async run({packageManager,dryRun,configDir}){dryRun||(console.log("Removing @storybook/addon-interactions..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-interactions","--config-dir",configDir]))}};var import_csf_tools9=require("storybook/internal/csf-tools"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent");var logger8={log:message=>{process.env.NODE_ENV!=="test"&&console.log(message)}},removeDocsAutodocs={id:"remove-docs-autodocs",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath}){if(!mainConfigPath)return null;try{let autodocs=(await(0,import_csf_tools9.readConfig)(mainConfigPath)).getSafeFieldValue(["docs","autodocs"]);return autodocs===void 0?null:{autodocs}}catch{return null}},prompt:()=>import_ts_dedent15.dedent`
318
+ `},async run({packageManager,dryRun,configDir}){dryRun||(console.log("Removing @storybook/addon-interactions..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-interactions","--config-dir",configDir]))}};var import_csf_tools9=require("storybook/internal/csf-tools"),import_picocolors18=__toESM(require_picocolors(),1),import_ts_dedent14=require("ts-dedent");var logger9={log:message=>{process.env.NODE_ENV!=="test"&&console.log(message)}},removeDocsAutodocs={id:"remove-docs-autodocs",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath}){if(!mainConfigPath)return null;try{let autodocs=(await(0,import_csf_tools9.readConfig)(mainConfigPath)).getSafeFieldValue(["docs","autodocs"]);return autodocs===void 0?null:{autodocs}}catch{return null}},prompt:()=>import_ts_dedent14.dedent`
328
319
  The \`docs.autodocs\` field in Storybook's main configuration has been removed in Storybook 9.
329
320
  This field was deprecated in Storybook 7-8 and is no longer supported.
330
321
 
331
322
  We can make the necessary changes in your configuration automatically.
332
323
 
333
324
  More info: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mainjs-docsautodocs-is-deprecated
334
- `,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger8.log(`\u{1F504} Updating ${import_picocolors19.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger8.log(`\u{1F504} Updating ${import_picocolors19.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_promises5=require("fs/promises"),import_common18=require("storybook/internal/common"),import_prompts3=__toESM(require("prompts"),1),import_ts_dedent16=require("ts-dedent"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common18.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common18.rendererPackages).filter(pkg=>dependencies.includes(pkg)),replaceImports=(source,renderer,framework)=>{let regex2=new RegExp(`(['"])${renderer}(['"])`,"g");return regex2.test(source)?source.replace(regex2,`$1${framework}$2`):null},transformSourceFiles=async(files,renderer,framework,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises5.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises5.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRenderersInPackageJson=async(packageJsonPath,renderers,dryRun)=>{try{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),hasChanges=!1;return renderers.forEach(renderer=>{packageJson.dependencies?.[renderer]&&(delete packageJson.dependencies[renderer],hasChanges=!0),packageJson.devDependencies?.[renderer]&&(delete packageJson.devDependencies[renderer],hasChanges=!0)}),!dryRun&&hasChanges&&await(0,import_promises5.writeFile)(packageJsonPath,JSON.stringify(packageJson,null,2)),hasChanges}catch(error){throw new Error(`Failed to update package.json: ${error}`)}},selectFramework=async frameworks=>frameworks.length===1?frameworks[0]:(await(0,import_prompts3.default)({type:"select",name:"framework",message:"Which framework would you like to use?",choices:frameworks.map(framework=>({title:framework,value:framework}))})).framework||null,checkPackageJson=async packageJsonPath=>{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),dependencies=getAllDependencies(packageJson),frameworks=detectFrameworks(dependencies);if(frameworks.length===0)return null;let renderers=detectRenderers(dependencies);return renderers.length===0?null:{frameworks,renderers}},rendererToFramework={id:"renderer-to-framework",versionRange:["<9.0.0","^9.0.0-0"],promptType:"auto",async check(){let projectRoot=await(0,import_common18.getProjectRoot)(),{globby}=await import("globby"),packageJsonFiles=await globby(["**/package.json"],{...(0,import_common18.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),validResults=(await Promise.all(packageJsonFiles.map(async file=>{try{return await checkPackageJson(file)}catch{return null}}))).filter(r=>r!==null&&r.renderers.length>0);return validResults.length===0?null:{frameworks:[...new Set(validResults.flatMap(r=>r.frameworks))],renderers:[...new Set(validResults.flatMap(r=>r.renderers))],packageJsonFiles:packageJsonFiles.filter((_,i)=>validResults[i]!==null)}},prompt(result){return result.frameworks.length>1?import_ts_dedent16.dedent`
325
+ `,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_common17=require("storybook/internal/common"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent"),consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},removeEssentials={id:"remove-essentials",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common17.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),installedAddons=Object.keys({...packageJson.dependencies,...packageJson.devDependencies});for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));typeof essentialsEntry=="object"&&(hasDocsDisabled=(essentialsEntry.options||{}).docs===!1)}return!hasEssentialsAddon&&additionalAddonsToRemove.length===0?null:{hasEssentials:hasEssentialsAddon,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}}catch{return null}},prompt({hasDocsDisabled,additionalAddonsToRemove,hasEssentials}){let message="";hasEssentials&&(message=import_ts_dedent15.dedent`
326
+ We've detected that you have ${import_picocolors19.default.yellow("@storybook/addon-essentials")} installed.
327
+
328
+ In Storybook 9.0, all features from ${import_picocolors19.default.yellow("@storybook/addon-essentials")} (except docs)
329
+ have been moved into Storybook's core. You no longer need to install or configure them separately.
330
+
331
+ We'll remove ${import_picocolors19.default.yellow("@storybook/addon-essentials")} from your configuration and dependencies.
332
+ `);let additionalAddonsMessage=additionalAddonsToRemove.length>0?import_ts_dedent15.dedent`
333
+ ${hasEssentials?"":"In Storybook 9.0, several features have been moved into Storybook's core."}\n\nWe've detected the following addons that are now part of Storybook core:
334
+ ${additionalAddonsToRemove.map(addon=>`
335
+ - ${import_picocolors19.default.yellow(addon)}`).join("")}
336
+
337
+ These will be removed as they are no longer needed.
338
+
339
+ We'll also need to update your code to use the new core addons.`:"";return hasDocsDisabled?`${message}${additionalAddonsMessage}`:hasEssentials?import_ts_dedent15.dedent`
340
+ ${message}${additionalAddonsMessage}
341
+
342
+ Since you were using the docs feature, we'll install ${import_picocolors19.default.yellow("@storybook/addon-docs")}
343
+ separately and add it to your configuration.
344
+ `:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common17.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common17.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
345
+ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
346
+ `)}`);!hasDocsDisabled&&!hasDocsAddon&&hasEssentials&&(console.log("Adding @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir]))}}};var import_promises5=require("fs/promises"),import_common18=require("storybook/internal/common"),import_prompts3=__toESM(require("prompts"),1),import_ts_dedent16=require("ts-dedent"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common18.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common18.rendererPackages).filter(pkg=>dependencies.includes(pkg)),replaceImports=(source,renderer,framework)=>{let regex2=new RegExp(`(['"])${renderer}(['"])`,"g");return regex2.test(source)?source.replace(regex2,`$1${framework}$2`):null},transformSourceFiles=async(files,renderer,framework,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises5.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises5.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRenderersInPackageJson=async(packageJsonPath,renderers,dryRun)=>{try{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),hasChanges=!1;return renderers.forEach(renderer=>{packageJson.dependencies?.[renderer]&&(delete packageJson.dependencies[renderer],hasChanges=!0),packageJson.devDependencies?.[renderer]&&(delete packageJson.devDependencies[renderer],hasChanges=!0)}),!dryRun&&hasChanges&&await(0,import_promises5.writeFile)(packageJsonPath,JSON.stringify(packageJson,null,2)),hasChanges}catch(error){throw new Error(`Failed to update package.json: ${error}`)}},selectFramework=async frameworks=>frameworks.length===1?frameworks[0]:(await(0,import_prompts3.default)({type:"select",name:"framework",message:"Which framework would you like to use?",choices:frameworks.map(framework=>({title:framework,value:framework}))})).framework||null,checkPackageJson=async packageJsonPath=>{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),dependencies=getAllDependencies(packageJson),frameworks=detectFrameworks(dependencies);if(frameworks.length===0)return null;let renderers=detectRenderers(dependencies);return renderers.length===0?null:{frameworks,renderers}},rendererToFramework={id:"renderer-to-framework",versionRange:["<9.0.0","^9.0.0-0"],promptType:"auto",async check(){let projectRoot=await(0,import_common18.getProjectRoot)(),{globby}=await import("globby"),packageJsonFiles=await globby(["**/package.json"],{...(0,import_common18.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),validResults=(await Promise.all(packageJsonFiles.map(async file=>{try{return await checkPackageJson(file)}catch{return null}}))).filter(r=>r!==null&&r.renderers.length>0);return validResults.length===0?null:{frameworks:[...new Set(validResults.flatMap(r=>r.frameworks))],renderers:[...new Set(validResults.flatMap(r=>r.renderers))],packageJsonFiles:packageJsonFiles.filter((_,i)=>validResults[i]!==null)}},prompt(result){return result.frameworks.length>1?import_ts_dedent16.dedent`
335
347
  As part of Storybook's evolution, we're moving from renderer-based to framework-based configuration.
336
348
  We've detected multiple framework packages in your project: ${result.frameworks.join(", ")}.
337
349
  You will be prompted to select which framework to use for your Storybook configuration.
@@ -382,7 +394,7 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
382
394
  `)}console.log()}};var import_cli2=require("storybook/internal/cli"),import_csf_tools10=require("storybook/internal/csf-tools"),import_picocolors22=__toESM(require_picocolors(),1),import_ts_dedent19=require("ts-dedent");var wrapRequire={id:"wrap-require",versionRange:["*","*"],async check({packageManager,storybookVersion,mainConfigPath}){let isStorybookInMonorepo=await packageManager.isStorybookInMonorepo(),isPnp=await(0,import_cli2.detectPnp)();if(!mainConfigPath)return null;let config=await(0,import_csf_tools10.readConfig)(mainConfigPath);if(!isStorybookInMonorepo&&!isPnp||!getFieldsForRequireWrapper(config).some(node=>isRequireWrapperNecessary(node)))return null;let isConfigTypescript=mainConfigPath.endsWith(".ts")||mainConfigPath.endsWith(".tsx");return{storybookVersion,isStorybookInMonorepo,isPnp,isConfigTypescript}},prompt({storybookVersion,isStorybookInMonorepo}){let sbFormatted=import_picocolors22.default.cyan(`Storybook ${storybookVersion}`);return import_ts_dedent19.dedent`We have detected that you're using ${sbFormatted} in a ${isStorybookInMonorepo?"monorepo":"PnP"} project.
383
395
  For Storybook to work correctly, some fields in your main config must be updated. We can do this for you automatically.
384
396
 
385
- More info: https://storybook.js.org/docs/faq#how-do-i-fix-module-resolution-in-special-environments`},async run({dryRun,mainConfigPath,result}){await updateMainConfig({dryRun:!!dryRun,mainConfigPath},mainConfig=>{getFieldsForRequireWrapper(mainConfig).forEach(node=>{wrapValueWithRequireWrapper(mainConfig,node)}),getRequireWrapperName(mainConfig)===null&&(mainConfig?.fileName?.endsWith(".cjs")||mainConfig?.fileName?.endsWith(".cts")||mainConfig?.fileName?.endsWith(".cjsx")||mainConfig?.fileName?.endsWith(".ctsx")?mainConfig.setRequireImport(["dirname","join"],"path"):mainConfig.setImport(["dirname","join"],"path"),mainConfig.setBodyDeclaration(getRequireWrapperAsCallExpression(result.isConfigTypescript)))})}};var allFixes=[eslintPlugin,wrapRequire,addonMdxGfmRemove,addonStorysourceRemove,upgradeStorybookRelatedDependencies,initialGlobals,addonA11yAddonTest,consolidatedImports,addonExperimentalTest,rnstorybookConfig,removeAddonInteractions,rendererToFramework,addonEssentialsRemoveDocs,addonA11yParameters,removeDocsAutodocs];var commandFixes=[csfFactories];var import_picocolors23=__toESM(require_picocolors(),1),import_ts_dedent20=require("ts-dedent");var messageDivider2=`
397
+ More info: https://storybook.js.org/docs/faq#how-do-i-fix-module-resolution-in-special-environments`},async run({dryRun,mainConfigPath,result}){await updateMainConfig({dryRun:!!dryRun,mainConfigPath},mainConfig=>{getFieldsForRequireWrapper(mainConfig).forEach(node=>{wrapValueWithRequireWrapper(mainConfig,node)}),getRequireWrapperName(mainConfig)===null&&(mainConfig?.fileName?.endsWith(".cjs")||mainConfig?.fileName?.endsWith(".cts")||mainConfig?.fileName?.endsWith(".cjsx")||mainConfig?.fileName?.endsWith(".ctsx")?mainConfig.setRequireImport(["dirname","join"],"path"):mainConfig.setImport(["dirname","join"],"path"),mainConfig.setBodyDeclaration(getRequireWrapperAsCallExpression(result.isConfigTypescript)))})}};var allFixes=[eslintPlugin,wrapRequire,addonMdxGfmRemove,addonStorysourceCodePanel,upgradeStorybookRelatedDependencies,initialGlobals,addonA11yAddonTest,consolidatedImports,addonExperimentalTest,rnstorybookConfig,removeAddonInteractions,rendererToFramework,removeEssentials,addonA11yParameters,removeDocsAutodocs];var commandFixes=[csfFactories];var import_picocolors23=__toESM(require_picocolors(),1),import_ts_dedent20=require("ts-dedent");var messageDivider2=`
386
398
 
387
399
  `,segmentDivider=`
388
400
 
@@ -396,15 +408,15 @@ ${error}`).join(`
396
408
 
397
409
  Please check the changelog and migration guide for manual migrations and more information: ${import_picocolors23.default.yellow("https://storybook.js.org/docs/migration-guide")}
398
410
  And reach out on Discord if you need help: ${import_picocolors23.default.yellow("https://discord.gg/storybook")}
399
- `);let hasNoFixes=Object.values(fixResults).every(r=>r==="unnecessary"),hasFailures=Object.values(fixResults).some(r=>r==="failed"||r==="check_failed"),title=hasNoFixes?"No migrations were applicable to your project":hasFailures?"Migration check ran with failures":"Migration check ran successfully";return boxen(messages.filter(Boolean).join(segmentDivider),{borderStyle:"round",padding:1,title,borderColor:hasFailures?"red":"green"})}var logger9=console,LOG_FILE_NAME2="migration-storybook.log",LOG_FILE_PATH2=(0,import_node_path6.join)(process.cwd(),LOG_FILE_NAME2),TEMP_LOG_FILE_PATH2="",originalStdOutWrite2=process.stdout.write.bind(process.stdout),originalStdErrWrite2=process.stderr.write.bind(process.stdout),augmentLogsToFile2=async()=>{TEMP_LOG_FILE_PATH2=await(0,import_common20.temporaryFile)({name:LOG_FILE_NAME2});let logStream=(0,import_node_fs3.createWriteStream)(TEMP_LOG_FILE_PATH2);process.stdout.write=d=>(originalStdOutWrite2(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d))},cleanup2=()=>{process.stdout.write=originalStdOutWrite2,process.stderr.write=originalStdErrWrite2},logAvailableMigrations=()=>{let availableFixes=[...allFixes,...commandFixes].map(f=>import_picocolors24.default.yellow(f.id)).map(x=>`- ${x}`).join(`
400
- `);console.log(),logger9.info(import_ts_dedent21.dedent`
411
+ `);let hasNoFixes=Object.values(fixResults).every(r=>r==="unnecessary"),hasFailures=Object.values(fixResults).some(r=>r==="failed"||r==="check_failed"),title=hasNoFixes?"No migrations were applicable to your project":hasFailures?"Migration check ran with failures":"Migration check ran successfully";return boxen(messages.filter(Boolean).join(segmentDivider),{borderStyle:"round",padding:1,title,borderColor:hasFailures?"red":"green"})}var logger10=console,LOG_FILE_NAME2="migration-storybook.log",LOG_FILE_PATH2=(0,import_node_path6.join)(process.cwd(),LOG_FILE_NAME2),TEMP_LOG_FILE_PATH2="",originalStdOutWrite2=process.stdout.write.bind(process.stdout),originalStdErrWrite2=process.stderr.write.bind(process.stdout),augmentLogsToFile2=async()=>{TEMP_LOG_FILE_PATH2=await(0,import_common20.temporaryFile)({name:LOG_FILE_NAME2});let logStream=(0,import_node_fs3.createWriteStream)(TEMP_LOG_FILE_PATH2);process.stdout.write=d=>(originalStdOutWrite2(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d))},cleanup2=()=>{process.stdout.write=originalStdOutWrite2,process.stderr.write=originalStdErrWrite2},logAvailableMigrations=()=>{let availableFixes=[...allFixes,...commandFixes].map(f=>import_picocolors24.default.yellow(f.id)).map(x=>`- ${x}`).join(`
412
+ `);console.log(),logger10.info(import_ts_dedent21.dedent`
401
413
  The following migrations are available:
402
414
  ${availableFixes}
403
- `)},doAutomigrate=async options=>{let packageManager=import_common20.JsPackageManagerFactory.getPackageManager({force:options.packageManager}),{mainConfig,mainConfigPath,previewConfigPath,storybookVersion,configDir,packageJson}=await getStorybookData({configDir:options.configDir,packageManager});if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");await automigrate({...options,packageJson,packageManager,storybookVersion,beforeVersion:storybookVersion,mainConfigPath,mainConfig,previewConfigPath,configDir,isUpgrade:!1,isLatest:!1})&&await doctor({configDir,packageManager:options.packageManager})},automigrate=async({fixId,fixes:inputFixes,dryRun,yes,packageManager,packageJson,list,configDir,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,beforeVersion,renderer:rendererPackage,skipInstall,hideMigrationSummary=!1,isUpgrade,isLatest})=>{if(list)return logAvailableMigrations(),null;let commandFix=commandFixes.find(f=>f.id===fixId);if(commandFix)return logger9.info(`\u{1F50E} Running migration ${import_picocolors24.default.magenta(fixId)}..`),await commandFix.run({mainConfigPath,previewConfigPath,packageManager,packageJson,configDir,dryRun,mainConfig,result:null,storybookVersion}),null;let selectedFixes=inputFixes||allFixes.filter(fix=>!(fix.id===upgradeStorybookRelatedDependencies.id&&isLatest===!1&&fixId!==upgradeStorybookRelatedDependencies.id)),fixes=fixId?selectedFixes.filter(f=>f.id===fixId):selectedFixes;if(fixId&&fixes.length===0)return logger9.info(`\u{1F4ED} No migrations found for ${import_picocolors24.default.magenta(fixId)}.`),logAvailableMigrations(),null;await augmentLogsToFile2(),logger9.info("\u{1F50E} checking possible migrations..");let{fixResults,fixSummary,preCheckFailure}=await runFixes({fixes,packageManager,packageJson,rendererPackage,skipInstall,configDir,previewConfigPath,mainConfig,mainConfigPath,storybookVersion,beforeVersion,isUpgrade:!!isUpgrade,dryRun,yes});if(Object.values(fixResults).some(r=>r==="failed"||r==="check_failed")?await(0,import_promises7.rename)(TEMP_LOG_FILE_PATH2,(0,import_node_path6.join)(process.cwd(),LOG_FILE_NAME2)):await(0,import_promises7.rm)(TEMP_LOG_FILE_PATH2,{recursive:!0,force:!0}),!hideMigrationSummary){let installationMetadata=await packageManager.findInstallations(["@storybook/*","storybook"]);logger9.info(),logger9.info(getMigrationSummary({fixResults,fixSummary,logFile:LOG_FILE_PATH2,installationMetadata})),logger9.info()}return cleanup2(),{fixResults,preCheckFailure}};async function runFixes({fixes,dryRun,yes,rendererPackage,skipInstall,configDir,packageManager,packageJson,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,beforeVersion,isUpgrade}){let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes.length;i+=1){let f=fixes[i],result;try{(isUpgrade&&import_semver6.default.satisfies(beforeVersion,f.versionRange[0],{includePrerelease:!0})&&import_semver6.default.satisfies(storybookVersion,f.versionRange[1],{includePrerelease:!0})||!isUpgrade)&&(result=await f.check({packageManager,configDir,rendererPackage,mainConfig,storybookVersion,previewConfigPath,mainConfigPath}))}catch(error){logger9.info(`\u26A0\uFE0F failed to check fix ${import_picocolors24.default.bold(f.id)}`),error instanceof Error&&(logger9.error(`
404
- ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed"}if(result){let promptType=typeof f.promptType=="function"?await f.promptType(result):f.promptType??"auto";logger9.info(`
405
- \u{1F50E} found a '${import_picocolors24.default.cyan(f.id)}' migration:`);let message=f.prompt(result),getTitle=()=>{switch(promptType){case"auto":return"Automigration detected";case"manual":return"Manual migration detected";case"notification":return"Migration notification"}};logger9.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",title:getTitle()}));let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},promptType==="manual"&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(promptType==="manual"){fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),logger9.info();let{shouldContinue}=await(0,import_prompts4.default)({type:"toggle",name:"shouldContinue",message:"Select continue once you have made the required changes, or quit to exit the migration process",initial:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}});if(!shouldContinue){fixResults[f.id]="manual_skipped";break}}else promptType==="auto"?runAnswer=await(0,import_prompts4.default)({type:"confirm",name:"fix",message:`Do you want to run the '${import_picocolors24.default.cyan(f.id)}' migration on your project?`,initial:f.promptDefaultValue??!0},{onCancel:()=>{throw new Error}}):promptType==="notification"&&(runAnswer=await(0,import_prompts4.default)({type:"confirm",name:"fix",message:"Do you want to continue?",initial:!0},{onCancel:()=>{throw new Error}}))}catch{break}if(promptType==="auto")if((0,import_tiny_invariant.default)(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{(0,import_tiny_invariant.default)(typeof f.run=="function","run method should be available in fix."),(0,import_tiny_invariant.default)(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,configDir,previewConfigPath,packageJson,mainConfig,skipInstall,storybookVersion}),logger9.info(`\u2705 ran ${import_picocolors24.default.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id)}catch(error){fixResults[f.id]="failed",fixSummary.failed[f.id]=error instanceof Error?error.message:"Failed to run migration",logger9.info(`\u274C error when running ${import_picocolors24.default.cyan(f.id)} migration`),logger9.info(error),logger9.info()}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id)}else fixResults[f.id]=fixResults[f.id]||"unnecessary"}return{fixResults,fixSummary}}var import_promises8=require("fs/promises"),import_node_path7=require("path"),import_node_logger=require("storybook/internal/node-logger"),import_cross_spawn=require("cross-spawn"),import_picocolors25=__toESM(require_picocolors(),1),exec2=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&import_node_logger.logger.info(startMessage),dryRun){import_node_logger.logger.info(`
415
+ `)},doAutomigrate=async options=>{let packageManager=import_common20.JsPackageManagerFactory.getPackageManager({force:options.packageManager}),{mainConfig,mainConfigPath,previewConfigPath,storybookVersion,configDir,packageJson}=await getStorybookData({configDir:options.configDir,packageManager});if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");await automigrate({...options,packageJson,packageManager,storybookVersion,beforeVersion:storybookVersion,mainConfigPath,mainConfig,previewConfigPath,configDir,isUpgrade:!1,isLatest:!1})&&await doctor({configDir,packageManager:options.packageManager})},automigrate=async({fixId,fixes:inputFixes,dryRun,yes,packageManager,packageJson,list,configDir,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,beforeVersion,renderer:rendererPackage,skipInstall,hideMigrationSummary=!1,isUpgrade,isLatest})=>{if(list)return logAvailableMigrations(),null;let commandFix=commandFixes.find(f=>f.id===fixId);if(commandFix)return logger10.info(`\u{1F50E} Running migration ${import_picocolors24.default.magenta(fixId)}..`),await commandFix.run({mainConfigPath,previewConfigPath,packageManager,packageJson,configDir,dryRun,mainConfig,result:null,storybookVersion}),null;let selectedFixes=inputFixes||allFixes.filter(fix=>!(fix.id===upgradeStorybookRelatedDependencies.id&&isLatest===!1&&fixId!==upgradeStorybookRelatedDependencies.id)),fixes=fixId?selectedFixes.filter(f=>f.id===fixId):selectedFixes;if(fixId&&fixes.length===0)return logger10.info(`\u{1F4ED} No migrations found for ${import_picocolors24.default.magenta(fixId)}.`),logAvailableMigrations(),null;await augmentLogsToFile2(),logger10.info("\u{1F50E} checking possible migrations..");let{fixResults,fixSummary,preCheckFailure}=await runFixes({fixes,packageManager,packageJson,rendererPackage,skipInstall,configDir,previewConfigPath,mainConfig,mainConfigPath,storybookVersion,beforeVersion,isUpgrade:!!isUpgrade,dryRun,yes});if(Object.values(fixResults).some(r=>r==="failed"||r==="check_failed")?await(0,import_promises7.rename)(TEMP_LOG_FILE_PATH2,(0,import_node_path6.join)(process.cwd(),LOG_FILE_NAME2)):await(0,import_promises7.rm)(TEMP_LOG_FILE_PATH2,{recursive:!0,force:!0}),!hideMigrationSummary){let installationMetadata=await packageManager.findInstallations(["@storybook/*","storybook"]);logger10.info(),logger10.info(getMigrationSummary({fixResults,fixSummary,logFile:LOG_FILE_PATH2,installationMetadata})),logger10.info()}return cleanup2(),{fixResults,preCheckFailure}};async function runFixes({fixes,dryRun,yes,rendererPackage,skipInstall,configDir,packageManager,packageJson,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,beforeVersion,isUpgrade}){let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes.length;i+=1){let f=fixes[i],result;try{(isUpgrade&&import_semver6.default.satisfies(beforeVersion,f.versionRange[0],{includePrerelease:!0})&&import_semver6.default.satisfies(storybookVersion,f.versionRange[1],{includePrerelease:!0})||!isUpgrade)&&(result=await f.check({packageManager,configDir,rendererPackage,mainConfig,storybookVersion,previewConfigPath,mainConfigPath}))}catch(error){logger10.info(`\u26A0\uFE0F failed to check fix ${import_picocolors24.default.bold(f.id)}`),error instanceof Error&&(logger10.error(`
416
+ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed"}if(result){let promptType=typeof f.promptType=="function"?await f.promptType(result):f.promptType??"auto";logger10.info(`
417
+ \u{1F50E} found a '${import_picocolors24.default.cyan(f.id)}' migration:`);let message=f.prompt(result),getTitle=()=>{switch(promptType){case"auto":return"Automigration detected";case"manual":return"Manual migration detected";case"notification":return"Migration notification"}};logger10.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",title:getTitle()}));let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},promptType==="manual"&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(promptType==="manual"){fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),logger10.info();let{shouldContinue}=await(0,import_prompts4.default)({type:"toggle",name:"shouldContinue",message:"Select continue once you have made the required changes, or quit to exit the migration process",initial:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}});if(!shouldContinue){fixResults[f.id]="manual_skipped";break}}else promptType==="auto"?runAnswer=await(0,import_prompts4.default)({type:"confirm",name:"fix",message:`Do you want to run the '${import_picocolors24.default.cyan(f.id)}' migration on your project?`,initial:f.promptDefaultValue??!0},{onCancel:()=>{throw new Error}}):promptType==="notification"&&(runAnswer=await(0,import_prompts4.default)({type:"confirm",name:"fix",message:"Do you want to continue?",initial:!0},{onCancel:()=>{throw new Error}}))}catch{break}if(promptType==="auto")if((0,import_tiny_invariant.default)(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{(0,import_tiny_invariant.default)(typeof f.run=="function","run method should be available in fix."),(0,import_tiny_invariant.default)(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,configDir,previewConfigPath,packageJson,mainConfig,skipInstall,storybookVersion}),logger10.info(`\u2705 ran ${import_picocolors24.default.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id)}catch(error){fixResults[f.id]="failed",fixSummary.failed[f.id]=error instanceof Error?error.message:"Failed to run migration",logger10.info(`\u274C error when running ${import_picocolors24.default.cyan(f.id)} migration`),logger10.info(error),logger10.info()}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id)}else fixResults[f.id]=fixResults[f.id]||"unnecessary"}return{fixResults,fixSummary}}var import_promises8=require("fs/promises"),import_node_path7=require("path"),import_node_logger=require("storybook/internal/node-logger"),import_cross_spawn=require("cross-spawn"),import_picocolors25=__toESM(require_picocolors(),1),exec2=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&import_node_logger.logger.info(startMessage),dryRun){import_node_logger.logger.info(`
406
418
  > ${command2}
407
- `);return}return import_node_logger.logger.info(command2),new Promise((resolve,reject)=>{let child=(0,import_cross_spawn.spawn)(command2,{...options,shell:!0,stdio:"pipe"});child.stderr.pipe(process.stdout),child.stdout.pipe(process.stdout),child.on("exit",code=>{code===0?resolve(void 0):(import_node_logger.logger.error(import_picocolors25.default.red(`An error occurred while executing: \`${command2}\``)),errorMessage&&import_node_logger.logger.info(errorMessage),reject(new Error(`command exited with code: ${code}: `)))})})},link=async({target,local,start})=>{let storybookDir=process.cwd();try{if(JSON.parse(await(0,import_promises8.readFile)("package.json",{encoding:"utf8"})).name!=="@storybook/root")throw new Error}catch{throw new Error("Expected to run link from the root of the storybook monorepo")}let reproDir=target,reproName=(0,import_node_path7.basename)(target);if(!local){let reprosDir=(0,import_node_path7.join)(storybookDir,"../storybook-repros");import_node_logger.logger.info(`Ensuring directory ${reprosDir}`),await(0,import_promises8.mkdir)(reprosDir,{recursive:!0}),import_node_logger.logger.info(`Cloning ${target}`),await exec2(`git clone ${target}`,{cwd:reprosDir}),reproName=(0,import_node_path7.basename)(target,(0,import_node_path7.extname)(target)),reproDir=(0,import_node_path7.join)(reprosDir,reproName)}let version2=(0,import_cross_spawn.sync)("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[2-4]\./.test(version2)){import_node_logger.logger.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`),import_node_logger.logger.warn(""),import_node_logger.logger.warn("Please set it up with `yarn set version berry`,"),import_node_logger.logger.warn(`then link '${reproDir}' with the '--local' flag.`);return}import_node_logger.logger.info(`Linking ${reproDir}`),await exec2(`yarn link --all --relative ${storybookDir}`,{cwd:reproDir}),import_node_logger.logger.info(`Installing ${reproName}`);let reproPackageJson=JSON.parse(await(0,import_promises8.readFile)((0,import_node_path7.join)(reproDir,"package.json"),{encoding:"utf8"}));reproPackageJson.devDependencies?.vite||(reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"webpack-hot-middleware":"*"}),reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"@types/node":"^22"},await(0,import_promises8.writeFile)((0,import_node_path7.join)(reproDir,"package.json"),JSON.stringify(reproPackageJson,null,2)),await exec2("yarn install",{cwd:reproDir}),start&&(import_node_logger.logger.info(`Running ${reproName} storybook`),await exec2("yarn run storybook",{cwd:reproDir}))};var import_codemod2=require("@storybook/codemod"),logger11=console;async function migrate(migration,{glob,dryRun,list,rename:rename4,parser,configDir:userSpecifiedConfigDir}){if(list)(0,import_codemod2.listCodemods)().forEach(key=>logger11.log(key));else if(migration)await(0,import_codemod2.runCodemod)(migration,{glob,dryRun,logger:logger11,rename:rename4,parser});else throw new Error("Migrate: please specify a migration name or --list")}var import_node_fs4=require("fs"),import_promises9=require("fs/promises"),import_node_path8=require("path"),import_common21=require("storybook/internal/common"),import_common22=require("storybook/internal/common");var import_giget=require("giget"),import_picocolors26=__toESM(require_picocolors(),1),import_prompts5=__toESM(require("prompts"),1),import_semver7=require("semver"),import_tiny_invariant2=__toESM(require("tiny-invariant"),1),import_ts_dedent22=require("ts-dedent");var baseTemplates={"cra/default-js":{name:"Create React App Latest (Webpack | JavaScript)",script:`
419
+ `);return}return import_node_logger.logger.info(command2),new Promise((resolve,reject)=>{let child=(0,import_cross_spawn.spawn)(command2,{...options,shell:!0,stdio:"pipe"});child.stderr.pipe(process.stdout),child.stdout.pipe(process.stdout),child.on("exit",code=>{code===0?resolve(void 0):(import_node_logger.logger.error(import_picocolors25.default.red(`An error occurred while executing: \`${command2}\``)),errorMessage&&import_node_logger.logger.info(errorMessage),reject(new Error(`command exited with code: ${code}: `)))})})},link=async({target,local,start})=>{let storybookDir=process.cwd();try{if(JSON.parse(await(0,import_promises8.readFile)("package.json",{encoding:"utf8"})).name!=="@storybook/root")throw new Error}catch{throw new Error("Expected to run link from the root of the storybook monorepo")}let reproDir=target,reproName=(0,import_node_path7.basename)(target);if(!local){let reprosDir=(0,import_node_path7.join)(storybookDir,"../storybook-repros");import_node_logger.logger.info(`Ensuring directory ${reprosDir}`),await(0,import_promises8.mkdir)(reprosDir,{recursive:!0}),import_node_logger.logger.info(`Cloning ${target}`),await exec2(`git clone ${target}`,{cwd:reprosDir}),reproName=(0,import_node_path7.basename)(target,(0,import_node_path7.extname)(target)),reproDir=(0,import_node_path7.join)(reprosDir,reproName)}let version2=(0,import_cross_spawn.sync)("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[2-4]\./.test(version2)){import_node_logger.logger.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`),import_node_logger.logger.warn(""),import_node_logger.logger.warn("Please set it up with `yarn set version berry`,"),import_node_logger.logger.warn(`then link '${reproDir}' with the '--local' flag.`);return}import_node_logger.logger.info(`Linking ${reproDir}`),await exec2(`yarn link --all --relative ${storybookDir}`,{cwd:reproDir}),import_node_logger.logger.info(`Installing ${reproName}`);let reproPackageJson=JSON.parse(await(0,import_promises8.readFile)((0,import_node_path7.join)(reproDir,"package.json"),{encoding:"utf8"}));reproPackageJson.devDependencies?.vite||(reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"webpack-hot-middleware":"*"}),reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"@types/node":"^22"},await(0,import_promises8.writeFile)((0,import_node_path7.join)(reproDir,"package.json"),JSON.stringify(reproPackageJson,null,2)),await exec2("yarn install",{cwd:reproDir}),start&&(import_node_logger.logger.info(`Running ${reproName} storybook`),await exec2("yarn run storybook",{cwd:reproDir}))};var import_codemod2=require("@storybook/codemod"),logger12=console;async function migrate(migration,{glob,dryRun,list,rename:rename4,parser,configDir:userSpecifiedConfigDir}){if(list)(0,import_codemod2.listCodemods)().forEach(key=>logger12.log(key));else if(migration)await(0,import_codemod2.runCodemod)(migration,{glob,dryRun,logger:logger12,rename:rename4,parser});else throw new Error("Migrate: please specify a migration name or --list")}var import_node_fs4=require("fs"),import_promises9=require("fs/promises"),import_node_path8=require("path"),import_common21=require("storybook/internal/common"),import_common22=require("storybook/internal/common");var import_giget=require("giget"),import_picocolors26=__toESM(require_picocolors(),1),import_prompts5=__toESM(require("prompts"),1),import_semver7=require("semver"),import_tiny_invariant2=__toESM(require("tiny-invariant"),1),import_ts_dedent22=require("ts-dedent");var baseTemplates={"cra/default-js":{name:"Create React App Latest (Webpack | JavaScript)",script:`
408
420
  npx create-react-app {{beforeDir}} && cd {{beforeDir}} && jq '.browserslist.production[0] = ">0.9%"' package.json > tmp.json && mv tmp.json package.json
409
421
  `,expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench","vitest-integration"],modifications:{useCsfFactory:!0,extraDependencies:["prop-types"],mainConfig:config=>({stories:config.getFieldValue(["stories"])?.map(s=>typeof s=="string"?s.replace(/\|(tsx?|ts)\b|\b(tsx?|ts)\|/g,""):s)})}},"cra/default-ts":{name:"Create React App Latest (Webpack | TypeScript)",script:`
410
422
  npx create-react-app {{beforeDir}} --template typescript && cd {{beforeDir}} && jq '.browserslist.production[0] = ">0.9%"' package.json > tmp.json && mv tmp.json package.json
@@ -412,14 +424,14 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_
412
424
  npm create vite --yes {{beforeDir}} -- --template react-ts && cd {{beforeDir}} && yarn add react@beta react-dom@beta && jq '.resolutions += {"@types/react": "npm:types-react@beta", "@types/react-dom": "npm:types-react-dom@beta"}' package.json > tmp.json && mv tmp.json package.json && yarn add --dev @types/react@npm:types-react@beta @types/react-dom@npm:types-react-dom@beta
413
425
  `,expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"],mainConfig:{features:{developmentModeForBuild:!0}}},skipTasks:["e2e-tests-dev","bench"]},"react-webpack/18-ts":{name:"React Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"react-webpack/17-ts":{name:"React v17 (Webpack | TypeScript)",script:'yarn create webpack5-react {{beforeDir}} --version-react="17" --version-react-dom="17"',expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"react-webpack/prerelease-ts":{name:"React Prerelease (Webpack | TypeScript)",script:`
414
426
  yarn create webpack5-react {{beforeDir}} --version-react="beta" --version-react-dom="beta" && cd {{beforeDir}} && jq '.resolutions += {"@types/react": "npm:types-react@beta", "@types/react-dom": "npm:types-react-dom@beta"}' package.json > tmp.json && mv tmp.json package.json && yarn add --dev @types/react@npm:types-react@beta @types/react-dom@npm:types-react-dom@beta
415
- `,expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"solid-vite/default-js":{name:"SolidJS Latest (Vite | JavaScript)",script:"npx degit solidjs/templates/js {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"solid-vite/default-ts":{name:"SolidJS Latest (Vite | TypeScript)",script:"npx degit solidjs/templates/ts {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-js":{name:"Vue v3 (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-ts":{name:"Vue v3 (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"nuxt-vite/default-ts":{name:"Nuxt v3 (Vite | TypeScript)",script:"npx nuxi init --packageManager yarn --gitInit false -M @nuxt/ui {{beforeDir}}",expected:{framework:"@storybook-vue/nuxt",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"html-vite/default-js":{name:"HTML Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"html-vite/default-ts":{name:"HTML Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"svelte-vite/default-js":{name:"Svelte Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-ts":{name:"Svelte Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte-ts",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"angular-cli/prerelease":{name:"Angular CLI Prerelease (Webpack | TypeScript)",script:"npx -p @angular/cli@next ng new angular-v16 --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"angular-cli/default-ts":{name:"Angular CLI Latest (Webpack | TypeScript)",script:"npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"svelte-kit/skeleton-ts":{name:"SvelteKit Latest (Vite | TypeScript)",script:"npx sv@latest create --template minimal --types ts --no-add-ons --no-install {{beforeDir}}",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"lit-vite/default-js":{name:"Lit Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench","vitest-integration"]},"lit-vite/default-ts":{name:"Lit Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench","vitest-integration"]},"preact-vite/default-js":{name:"Preact Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},modifications:{extraDependencies:["preact-render-to-string"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"preact-vite/default-ts":{name:"Preact Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact-ts",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},modifications:{extraDependencies:["preact-render-to-string"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"qwik-vite/default-ts":{name:"Qwik CLI Latest (Vite | TypeScript)",script:"npm create qwik playground {{beforeDir}}",inDevelopment:!0,expected:{framework:"storybook-framework-qwik",renderer:"storybook-framework-qwik",builder:"storybook-framework-qwik"},skipTasks:["e2e-tests","e2e-tests-dev","bench","vitest-integration"]},"ember/3-js":{name:"Ember v3 (Webpack | JavaScript)",script:"npx --package ember-cli@3.28.1 ember new {{beforeDir}}",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"ember/default-js":{name:"Ember v4 (Webpack | JavaScript)",script:"npx --package ember-cli@4.12.1 ember new {{beforeDir}} --yarn && cd {{beforeDir}} && yarn add --dev @storybook/ember-cli-storybook && yarn build",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"react-native-web-vite/expo-ts":{name:"React Native Expo Latest (Vite | TypeScript)",script:"npx create-expo-app -y {{beforeDir}}",expected:{framework:"@storybook/react-native-web-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},modifications:{useCsfFactory:!0},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"react-native-web-vite/rn-cli-ts":{name:"React Native CLI Latest (Vite | TypeScript)",script:"npx @react-native-community/cli@latest init --install-pods=false --directory={{beforeDir}} rnapp",expected:{framework:"@storybook/react-native-web-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]}},internalTemplates={"internal/react18-webpack-babel":{name:"React with Babel Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["@storybook/addon-webpack5-compiler-babel","prop-types"],editAddons:addons=>[...addons,"@storybook/addon-webpack5-compiler-babel"].filter(a=>a!=="@storybook/addon-webpack5-compiler-swc")},isInternal:!0,skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"internal/react16-webpack":{name:"React 16 (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}} --version-react=16 --version-react-dom=16 --version-@types/react=16 --version-@types/react-dom=16",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"],isInternal:!0},"internal/server-webpack5":{name:"Server Webpack5",script:'yarn init -y && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/server-webpack5",renderer:"@storybook/server",builder:"@storybook/builder-webpack5"},isInternal:!0,skipTasks:["bench","vitest-integration"]}},benchTemplates={"bench/react-vite-default-ts":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-webpack-18-ts":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-vite-default-ts-nodocs":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, no docs)",isInternal:!0,modifications:{skipTemplateStories:!0,disableDocs:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-vite-default-ts-test-build":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","vitest-integration"]},"bench/react-webpack-18-ts-test-build":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","vitest-integration"]}},allTemplates={...baseTemplates,...internalTemplates,...benchTemplates},normal=["react-vite/default-ts","angular-cli/default-ts","vue3-vite/default-ts","nuxt-vite/default-ts","lit-vite/default-ts","svelte-vite/default-ts","svelte-kit/skeleton-ts","nextjs/default-ts","nextjs-vite/default-ts","bench/react-vite-default-ts","bench/react-webpack-18-ts","bench/react-vite-default-ts-nodocs","bench/react-vite-default-ts-test-build","bench/react-webpack-18-ts-test-build","ember/default-js"],merged=[...normal,"react-webpack/18-ts","react-webpack/17-ts","preact-vite/default-ts","html-vite/default-ts"],daily=[...merged,"angular-cli/prerelease","react-vite/default-js","react-vite/prerelease-ts","react-webpack/prerelease-ts","vue3-vite/default-js","lit-vite/default-js","svelte-vite/default-js","nextjs/prerelease","qwik-vite/default-ts","preact-vite/default-js","html-vite/default-js","internal/react16-webpack","internal/react18-webpack-babel","react-native-web-vite/expo-ts"];var logger12=console,toChoices=c=>({title:allTemplates[c].name,value:c}),sandbox=async({output:outputDirectory,filterValue,init,...options})=>{let selectedConfig=allTemplates[filterValue],templateId=selectedConfig?filterValue:null,{packageManager:pkgMgr}=options,packageManager=import_common21.JsPackageManagerFactory.getPackageManager({force:pkgMgr}),latestVersion=await packageManager.latestVersion("storybook"),nextVersion=await packageManager.latestVersion("storybook@next").catch(e=>"0.0.0"),currentVersion=import_common22.versions.storybook,isPrerelease=(0,import_semver7.prerelease)(currentVersion),isOutdated=(0,import_semver7.lt)(currentVersion,isPrerelease?nextVersion:latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",downloadType=!isOutdated&&init?"after-storybook":"before-storybook",branch=isPrerelease?"next":"main",messages={welcome:`Creating a Storybook ${import_picocolors26.default.bold(currentVersion)} sandbox..`,notLatest:import_picocolors26.default.red(import_ts_dedent22.dedent`
427
+ `,expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"solid-vite/default-js":{name:"SolidJS Latest (Vite | JavaScript)",script:"npx degit solidjs/templates/js {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"solid-vite/default-ts":{name:"SolidJS Latest (Vite | TypeScript)",script:"npx degit solidjs/templates/ts {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-js":{name:"Vue v3 (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-ts":{name:"Vue v3 (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"nuxt-vite/default-ts":{name:"Nuxt v3 (Vite | TypeScript)",script:"npx nuxi init --packageManager yarn --gitInit false -M @nuxt/ui {{beforeDir}}",expected:{framework:"@storybook-vue/nuxt",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"html-vite/default-js":{name:"HTML Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"html-vite/default-ts":{name:"HTML Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"svelte-vite/default-js":{name:"Svelte Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-ts":{name:"Svelte Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte-ts",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"angular-cli/prerelease":{name:"Angular CLI Prerelease (Webpack | TypeScript)",script:"npx -p @angular/cli@next ng new angular-v16 --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"angular-cli/default-ts":{name:"Angular CLI Latest (Webpack | TypeScript)",script:"npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"svelte-kit/skeleton-ts":{name:"SvelteKit Latest (Vite | TypeScript)",script:"npx sv@latest create --template minimal --types ts --no-add-ons --no-install {{beforeDir}}",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"lit-vite/default-js":{name:"Lit Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench","vitest-integration"]},"lit-vite/default-ts":{name:"Lit Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench","vitest-integration"]},"preact-vite/default-js":{name:"Preact Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},modifications:{extraDependencies:["preact-render-to-string"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"preact-vite/default-ts":{name:"Preact Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact-ts",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},modifications:{extraDependencies:["preact-render-to-string"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"qwik-vite/default-ts":{name:"Qwik CLI Latest (Vite | TypeScript)",script:"npm create qwik playground {{beforeDir}}",inDevelopment:!0,expected:{framework:"storybook-framework-qwik",renderer:"storybook-framework-qwik",builder:"storybook-framework-qwik"},skipTasks:["e2e-tests","e2e-tests-dev","bench","vitest-integration"]},"ember/3-js":{name:"Ember v3 (Webpack | JavaScript)",script:"npx --package ember-cli@3.28.1 ember new {{beforeDir}}",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"ember/default-js":{name:"Ember v4 (Webpack | JavaScript)",script:"npx --package ember-cli@4.12.1 ember new {{beforeDir}} --yarn && cd {{beforeDir}} && yarn add --dev @storybook/ember-cli-storybook && yarn build",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"react-native-web-vite/expo-ts":{name:"React Native Expo Latest (Vite | TypeScript)",script:"npx create-expo-app -y {{beforeDir}}",expected:{framework:"@storybook/react-native-web-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},modifications:{useCsfFactory:!0},skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"react-native-web-vite/rn-cli-ts":{name:"React Native CLI Latest (Vite | TypeScript)",script:"npx @react-native-community/cli@latest init --install-pods=false --directory={{beforeDir}} rnapp",expected:{framework:"@storybook/react-native-web-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench","vitest-integration"]}},internalTemplates={"internal/react18-webpack-babel":{name:"React with Babel Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["@storybook/addon-webpack5-compiler-babel","prop-types"],editAddons:addons=>[...addons,"@storybook/addon-webpack5-compiler-babel"].filter(a=>a!=="@storybook/addon-webpack5-compiler-swc")},isInternal:!0,skipTasks:["e2e-tests-dev","bench","vitest-integration"]},"internal/react16-webpack":{name:"React 16 (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}} --version-react=16 --version-react-dom=16 --version-@types/react=16 --version-@types/react-dom=16",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{useCsfFactory:!0,extraDependencies:["prop-types"]},skipTasks:["e2e-tests-dev","bench","vitest-integration"],isInternal:!0},"internal/server-webpack5":{name:"Server Webpack5",script:'yarn init -y && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/server-webpack5",renderer:"@storybook/server",builder:"@storybook/builder-webpack5"},isInternal:!0,skipTasks:["bench","vitest-integration"]}},benchTemplates={"bench/react-vite-default-ts":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-webpack-18-ts":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-vite-default-ts-nodocs":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, no docs)",isInternal:!0,modifications:{skipTemplateStories:!0,disableDocs:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic","vitest-integration"]},"bench/react-vite-default-ts-test-build":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","vitest-integration"]},"bench/react-webpack-18-ts-test-build":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","vitest-integration"]}},allTemplates={...baseTemplates,...internalTemplates,...benchTemplates},normal=["react-vite/default-ts","angular-cli/default-ts","vue3-vite/default-ts","nuxt-vite/default-ts","lit-vite/default-ts","svelte-vite/default-ts","svelte-kit/skeleton-ts","nextjs/default-ts","nextjs-vite/default-ts","bench/react-vite-default-ts","bench/react-webpack-18-ts","bench/react-vite-default-ts-nodocs","bench/react-vite-default-ts-test-build","bench/react-webpack-18-ts-test-build","ember/default-js"],merged=[...normal,"react-webpack/18-ts","react-webpack/17-ts","preact-vite/default-ts","html-vite/default-ts"],daily=[...merged,"angular-cli/prerelease","react-vite/default-js","react-vite/prerelease-ts","react-webpack/prerelease-ts","vue3-vite/default-js","lit-vite/default-js","svelte-vite/default-js","nextjs/prerelease","qwik-vite/default-ts","preact-vite/default-js","html-vite/default-js","internal/react16-webpack","internal/react18-webpack-babel","react-native-web-vite/expo-ts"];var logger13=console,toChoices=c=>({title:allTemplates[c].name,value:c}),sandbox=async({output:outputDirectory,filterValue,init,...options})=>{let selectedConfig=allTemplates[filterValue],templateId=selectedConfig?filterValue:null,{packageManager:pkgMgr}=options,packageManager=import_common21.JsPackageManagerFactory.getPackageManager({force:pkgMgr}),latestVersion=await packageManager.latestVersion("storybook"),nextVersion=await packageManager.latestVersion("storybook@next").catch(e=>"0.0.0"),currentVersion=import_common22.versions.storybook,isPrerelease=(0,import_semver7.prerelease)(currentVersion),isOutdated=(0,import_semver7.lt)(currentVersion,isPrerelease?nextVersion:latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",downloadType=!isOutdated&&init?"after-storybook":"before-storybook",branch=isPrerelease?"next":"main",messages={welcome:`Creating a Storybook ${import_picocolors26.default.bold(currentVersion)} sandbox..`,notLatest:import_picocolors26.default.red(import_ts_dedent22.dedent`
416
428
  This version is behind the latest release, which is: ${import_picocolors26.default.bold(latestVersion)}!
417
429
  You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
418
430
  ${import_picocolors26.default.bold("npx storybook@latest sandbox")}
419
431
 
420
432
  You may want to CTRL+C to stop, and run with the latest version instead.
421
- `),longInitTime:import_picocolors26.default.yellow("The creation of the sandbox will take longer, because we will need to run init."),prerelease:import_picocolors26.default.yellow("This is a pre-release version.")};if(logger12.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(init&&(isOutdated||isPrerelease)?[messages.longInitTime]:[]).concat(isPrerelease?[messages.prerelease]:[]).join(`
422
- `),{borderStyle:"round",padding:1,borderColor})),!selectedConfig){let filterRegex=new RegExp(`^${filterValue||""}`,"i"),keys=Object.keys(allTemplates),choices=keys.reduce((acc,group)=>{let current=allTemplates[group];return(!filterValue||current.name.match(filterRegex)||group.match(filterRegex)||current.expected.builder.match(filterRegex)||current.expected.framework.match(filterRegex)||current.expected.renderer.match(filterRegex))&&acc.push(group),acc},[]);if(choices.length===0&&(logger12.info(boxen(import_ts_dedent22.dedent`
433
+ `),longInitTime:import_picocolors26.default.yellow("The creation of the sandbox will take longer, because we will need to run init."),prerelease:import_picocolors26.default.yellow("This is a pre-release version.")};if(logger13.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(init&&(isOutdated||isPrerelease)?[messages.longInitTime]:[]).concat(isPrerelease?[messages.prerelease]:[]).join(`
434
+ `),{borderStyle:"round",padding:1,borderColor})),!selectedConfig){let filterRegex=new RegExp(`^${filterValue||""}`,"i"),keys=Object.keys(allTemplates),choices=keys.reduce((acc,group)=>{let current=allTemplates[group];return(!filterValue||current.name.match(filterRegex)||group.match(filterRegex)||current.expected.builder.match(filterRegex)||current.expected.framework.match(filterRegex)||current.expected.renderer.match(filterRegex))&&acc.push(group),acc},[]);if(choices.length===0&&(logger13.info(boxen(import_ts_dedent22.dedent`
423
435
  🔎 You filtered out all templates. 🔍
424
436
 
425
437
  After filtering all the templates with "${import_picocolors26.default.yellow(filterValue)}", we found no results. Please try again with a different filter.
@@ -427,7 +439,7 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_
427
439
  Available templates:
428
440
  ${keys.map(key=>import_picocolors26.default.blue(`- ${key}`)).join(`
429
441
  `)}
430
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[templateId]=choices:(logger12.info(boxen(import_ts_dedent22.dedent`
442
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[templateId]=choices:(logger13.info(boxen(import_ts_dedent22.dedent`
431
443
  🤗 Welcome to ${import_picocolors26.default.yellow("sb sandbox")}! 🤗
432
444
 
433
445
  Create a ${import_picocolors26.default.green("new project")} to minimally reproduce Storybook issues.
@@ -436,13 +448,13 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_
436
448
  2. select a location for the reproduction, outside of your project.
437
449
 
438
450
  After the reproduction is ready, we'll guide you through the next steps.
439
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),templateId=await promptSelectedTemplate(choices)),!!!(templateId??null)){logger12.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=templateId?allTemplates[templateId]:void 0,!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||templateId;if(selectedDirectory&&(0,import_node_fs4.existsSync)(`${selectedDirectory}`)&&(logger12.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),await(0,import_promises9.rm)(selectedDirectory,{recursive:!0,force:!0})),!selectedDirectory){let{directory}=await(0,import_prompts5.default)({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName??void 0,validate:async directoryName=>(0,import_node_fs4.existsSync)(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger12.log("Command cancelled by the user. Exiting..."),process.exit(1)}});selectedDirectory=directory}(0,import_tiny_invariant2.default)(selectedDirectory);try{let templateDestination=(0,import_node_path8.isAbsolute)(selectedDirectory)?selectedDirectory:(0,import_node_path8.join)(process.cwd(),selectedDirectory);logger12.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger12.log(`\u{1F4E6} Downloading sandbox template (${import_picocolors26.default.bold(downloadType)})...`);try{let gitPath=`github:storybookjs/sandboxes/${templateId}/${downloadType}#${branch}`;if(await(0,import_giget.downloadTemplate)(gitPath,{force:!0,dir:templateDestination}),(await(0,import_promises9.readdir)(templateDestination)).length===0){let selected=import_picocolors26.default.yellow(templateId);throw new Error(import_ts_dedent22.dedent`
451
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),templateId=await promptSelectedTemplate(choices)),!!!(templateId??null)){logger13.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=templateId?allTemplates[templateId]:void 0,!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||templateId;if(selectedDirectory&&(0,import_node_fs4.existsSync)(`${selectedDirectory}`)&&(logger13.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),await(0,import_promises9.rm)(selectedDirectory,{recursive:!0,force:!0})),!selectedDirectory){let{directory}=await(0,import_prompts5.default)({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName??void 0,validate:async directoryName=>(0,import_node_fs4.existsSync)(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger13.log("Command cancelled by the user. Exiting..."),process.exit(1)}});selectedDirectory=directory}(0,import_tiny_invariant2.default)(selectedDirectory);try{let templateDestination=(0,import_node_path8.isAbsolute)(selectedDirectory)?selectedDirectory:(0,import_node_path8.join)(process.cwd(),selectedDirectory);logger13.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger13.log(`\u{1F4E6} Downloading sandbox template (${import_picocolors26.default.bold(downloadType)})...`);try{let gitPath=`github:storybookjs/sandboxes/${templateId}/${downloadType}#${branch}`;if(await(0,import_giget.downloadTemplate)(gitPath,{force:!0,dir:templateDestination}),(await(0,import_promises9.readdir)(templateDestination)).length===0){let selected=import_picocolors26.default.yellow(templateId);throw new Error(import_ts_dedent22.dedent`
440
452
  Template downloaded from ${import_picocolors26.default.blue(gitPath)} is empty.
441
453
  Are you use it exists? Or did you want to set ${selected} to inDevelopment first?
442
- `)}if(downloadType==="before-storybook"&&init){let before=process.cwd();process.chdir(templateDestination);let{initiate}=await import("create-storybook");await initiate({dev:process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true",...options,features:["docs","test"]}),process.chdir(before)}}catch(err){throw logger12.error(`\u{1F6A8} Failed to download sandbox template: ${String(err)}`),err}let initMessage=init?import_picocolors26.default.yellow(import_ts_dedent22.dedent`
454
+ `)}if(downloadType==="before-storybook"&&init){let before=process.cwd();process.chdir(templateDestination);let{initiate}=await import("create-storybook");await initiate({dev:process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true",...options,features:["docs","test"]}),process.chdir(before)}}catch(err){throw logger13.error(`\u{1F6A8} Failed to download sandbox template: ${String(err)}`),err}let initMessage=init?import_picocolors26.default.yellow(import_ts_dedent22.dedent`
443
455
  yarn install
444
456
  yarn storybook
445
- `):`Recreate your setup, then ${import_picocolors26.default.yellow("npx storybook@latest init")}`;logger12.info(boxen(import_ts_dedent22.dedent`
457
+ `):`Recreate your setup, then ${import_picocolors26.default.yellow("npx storybook@latest init")}`;logger13.info(boxen(import_ts_dedent22.dedent`
446
458
  🎉 Your Storybook reproduction project is ready to use! 🎉
447
459
 
448
460
  ${import_picocolors26.default.yellow(`cd ${selectedDirectory}`)}
@@ -455,7 +467,7 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_
455
467
  3. Link to the repro repository in your issue
456
468
 
457
469
  Having a clean repro helps us solve your issue faster! 🙏
458
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger12.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){let{template}=await(0,import_prompts5.default)({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)},{onCancel:()=>{logger12.log("Command cancelled by the user. Exiting..."),process.exit(1)}});return template||null}var import_cli4=require("storybook/internal/cli"),import_common24=require("storybook/internal/common"),import_core_server=require("storybook/internal/core-server"),import_node_logger3=require("storybook/internal/node-logger"),import_server_errors=require("storybook/internal/server-errors"),import_telemetry=require("storybook/internal/telemetry");var import_cross_spawn2=require("cross-spawn"),import_picocolors34=__toESM(require_picocolors(),1),import_semver12=__toESM(require("semver"),1),import_ts_dedent29=require("ts-dedent");var import_node_logger2=require("storybook/internal/node-logger");var import_picocolors33=__toESM(require_picocolors(),1),excludesFalse=x=>x!==!1,blockers=()=>[Promise.resolve().then(()=>(init_block_storystorev6(),block_storystorev6_exports)),Promise.resolve().then(()=>(init_block_dependencies_versions(),block_dependencies_versions_exports)),Promise.resolve().then(()=>(init_block_node_version(),block_node_version_exports)),Promise.resolve().then(()=>(init_block_svelte_webpack5(),block_svelte_webpack5_exports)),Promise.resolve().then(()=>(init_block_major_version(),block_major_version_exports)),Promise.resolve().then(()=>(init_block_experimental_addon_test(),block_experimental_addon_test_exports))],segmentDivider2=`
470
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger13.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){let{template}=await(0,import_prompts5.default)({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)},{onCancel:()=>{logger13.log("Command cancelled by the user. Exiting..."),process.exit(1)}});return template||null}var import_cli4=require("storybook/internal/cli"),import_common24=require("storybook/internal/common"),import_core_server=require("storybook/internal/core-server"),import_node_logger3=require("storybook/internal/node-logger"),import_server_errors=require("storybook/internal/server-errors"),import_telemetry=require("storybook/internal/telemetry");var import_cross_spawn2=require("cross-spawn"),import_picocolors34=__toESM(require_picocolors(),1),import_semver12=__toESM(require("semver"),1),import_ts_dedent29=require("ts-dedent");var import_node_logger2=require("storybook/internal/node-logger");var import_picocolors33=__toESM(require_picocolors(),1),excludesFalse=x=>x!==!1,blockers=()=>[Promise.resolve().then(()=>(init_block_storystorev6(),block_storystorev6_exports)),Promise.resolve().then(()=>(init_block_dependencies_versions(),block_dependencies_versions_exports)),Promise.resolve().then(()=>(init_block_node_version(),block_node_version_exports)),Promise.resolve().then(()=>(init_block_svelte_webpack5(),block_svelte_webpack5_exports)),Promise.resolve().then(()=>(init_block_major_version(),block_major_version_exports)),Promise.resolve().then(()=>(init_block_experimental_addon_test(),block_experimental_addon_test_exports))],segmentDivider2=`
459
471
 
460
472
  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
461
473
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/cli",
3
- "version": "9.0.0-beta.8",
3
+ "version": "9.0.0-beta.9",
4
4
  "description": "Storybook CLI",
5
5
  "keywords": [
6
6
  "storybook"
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/types": "^7.24.0",
45
- "@storybook/codemod": "9.0.0-beta.8",
45
+ "@storybook/codemod": "9.0.0-beta.9",
46
46
  "@types/semver": "^7.3.4",
47
47
  "commander": "^12.1.0",
48
- "create-storybook": "9.0.0-beta.8",
48
+ "create-storybook": "9.0.0-beta.9",
49
49
  "cross-spawn": "^7.0.6",
50
50
  "envinfo": "^7.7.3",
51
51
  "execa": "^9.5.2",
@@ -56,7 +56,7 @@
56
56
  "p-limit": "^6.2.0",
57
57
  "prompts": "^2.4.0",
58
58
  "semver": "^7.3.7",
59
- "storybook": "9.0.0-beta.8",
59
+ "storybook": "9.0.0-beta.9",
60
60
  "tiny-invariant": "^1.3.1",
61
61
  "ts-dedent": "^2.0.0"
62
62
  },