@chromatic-com/storybook 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/preset.js CHANGED
@@ -591,7 +591,7 @@ Content-Type: ${s.type||"application/octet-stream"}\r
591
591
  --`+t;let e=new Uint8Array(t.length);for(let r=0;r<t.length;r++)e[r]=t.charCodeAt(r),this.boundaryChars[e[r]]=!0;this.boundary=e,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=Or.START_BOUNDARY;}write(t){let e=0,r=t.length,i=this.index,{lookbehind:n,boundary:s,boundaryChars:a,index:o,state:u,flags:l}=this,c=this.boundary.length,A=c-1,f=t.length,p,d,h=S=>{this[S+"Mark"]=e;},g=S=>{delete this[S+"Mark"];},m=(S,E,w,b)=>{(E===void 0||E!==w)&&this[S](b&&b.subarray(E,w));},C=(S,E)=>{let w=S+"Mark";w in this&&(E?(m(S,this[w],e,t),delete this[w]):(m(S,this[w],t.length,t),this[w]=0));};for(e=0;e<r;e++)switch(p=t[e],u){case Or.START_BOUNDARY:if(o===s.length-2){if(p===vg)l|=Rl.LAST_BOUNDARY;else if(p!==ay)return;o++;break}else if(o-1===s.length-2){if(l&Rl.LAST_BOUNDARY&&p===vg)u=Or.END,l=0;else if(!(l&Rl.LAST_BOUNDARY)&&p===sy)o=0,m("onPartBegin"),u=Or.HEADER_FIELD_START;else return;break}p!==s[o+2]&&(o=-2),p===s[o+2]&&o++;break;case Or.HEADER_FIELD_START:u=Or.HEADER_FIELD,h("onHeaderField"),o=0;case Or.HEADER_FIELD:if(p===ay){g("onHeaderField"),u=Or.HEADERS_ALMOST_DONE;break}if(o++,p===vg)break;if(p===M6e){if(o===1)return;C("onHeaderField",!0),u=Or.HEADER_VALUE_START;break}if(d=j6e(p),d<K6e||d>q6e)return;break;case Or.HEADER_VALUE_START:if(p===O6e)break;h("onHeaderValue"),u=Or.HEADER_VALUE;case Or.HEADER_VALUE:p===ay&&(C("onHeaderValue",!0),m("onHeaderEnd"),u=Or.HEADER_VALUE_ALMOST_DONE);break;case Or.HEADER_VALUE_ALMOST_DONE:if(p!==sy)return;u=Or.HEADER_FIELD_START;break;case Or.HEADERS_ALMOST_DONE:if(p!==sy)return;m("onHeadersEnd"),u=Or.PART_DATA_START;break;case Or.PART_DATA_START:u=Or.PART_DATA,h("onPartData");case Or.PART_DATA:if(i=o,o===0){for(e+=A;e<f&&!(t[e]in a);)e+=c;e-=A,p=t[e];}if(o<s.length)s[o]===p?(o===0&&C("onPartData",!0),o++):o=0;else if(o===s.length)o++,p===ay?l|=Rl.PART_BOUNDARY:p===vg?l|=Rl.LAST_BOUNDARY:o=0;else if(o-1===s.length)if(l&Rl.PART_BOUNDARY){if(o=0,p===sy){l&=~Rl.PART_BOUNDARY,m("onPartEnd"),m("onPartBegin"),u=Or.HEADER_FIELD_START;break}}else l&Rl.LAST_BOUNDARY&&p===vg?(m("onPartEnd"),u=Or.END,l=0):o=0;if(o>0)n[o-1]=p;else if(i>0){let S=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);m("onPartData",0,i,S),i=0,h("onPartData"),e--;}break;case Or.END:break;default:throw new Error(`Unexpected state entered: ${u}`)}C("onHeaderField"),C("onHeaderValue"),C("onPartData"),this.index=o,this.state=u,this.flags=l;}end(){if(this.state===Or.HEADER_FIELD_START&&this.index===0||this.state===Or.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==Or.END)throw new Error("MultipartParser.end(): stream ended unexpectedly")}};}}),cBe={};nBe(cBe,{addToGlobalContext:()=>vir,computeStorybookMetadata:()=>dBe,getPrecedingUpgrade:()=>Cir,getStorybookMetadata:()=>hBe,metaFrameworks:()=>IL,oneWayHash:()=>SBe,sanitizeAddonName:()=>vL,telemetry:()=>Dir});bBe.exports=nrr(cBe);var U6e=TO(),grr=$i(fj()),G6e=$U(),R4=dA(),mrr=Nk(),Crr=$i(Io()),yrr=$i(L("path")),Y6e=async t=>{let e=Object.keys(t);return Promise.all(e.map(ABe))},ABe=async t=>{try{let e=await pBe(t);return {name:t,version:e.version}}catch{return {name:t,version:null}}},pBe=async t=>{let e=L.resolve(yrr.default.join(t,"package.json"),{paths:[process.cwd()]});return await Crr.readJson(e)},fL=$i(Io()),dL=$i(L("path")),Err=dA(),J6e={Nx:"nx.json",Turborepo:"turbo.json",Lerna:"lerna.json",Rush:"rush.json",Lage:"lage.config.json"},Irr=()=>{let t=(0, Err.getProjectRoot)();if(!t)return;let e=Object.keys(J6e).find(r=>{let i=dL.default.join(t,J6e[r]);return fL.default.existsSync(i)});if(e)return e;if(fL.default.existsSync(dL.default.join(t,"package.json"))&&fL.default.readJsonSync(dL.default.join(t,"package.json"))?.workspaces)return "Workspaces"},fBe=$i(L("path"));function H6e(t){return t.replace(/[-[/{}()*+?.\\^$|]/g,"\\$&")}function V6e(t=""){return t.replace(/\u001B\[[0-9;]*m/g,"")}function _L(t,e=fBe.default.sep){if(!t)return t;let r=process.cwd().split(e);for(;r.length>1;){let i=r.join(e),n=new RegExp(H6e(i),"gi");t=t.replace(n,"$SNIP");let s=r.join(e+e),a=new RegExp(H6e(s),"gi");t=t.replace(a,"$SNIP"),r.pop();}return t}function hL(t,e=fBe.default.sep){try{t={...JSON.parse(JSON.stringify(t)),message:V6e(t.message),stack:V6e(t.stack),cause:t.cause,name:t.name};let r=_L(JSON.stringify(t),e);return JSON.parse(r)}catch(r){return `Sanitization error: ${r?.message}`}}var vrr=$i(L("path")),Srr=dA(),wrr=["html","react","svelte","vue3","preact","server","vue","web-components","angular","ember"],brr=["builder-webpack5","builder-vite"];function W6e(t,e){let{name:r="",version:i,dependencies:n,devDependencies:s,peerDependencies:a}=t,o={[r]:i,...n,...s,...a};return e.map(u=>`@storybook/${u}`).find(u=>o[u])}var Brr=t=>{let e=vrr.default.normalize(t).replace(new RegExp(/\\/,"g"),"/");return Object.keys(Srr.frameworkPackages).find(r=>e.endsWith(r))||_L(t).replace(/.*node_modules[\\/]/,"")};async function Drr(t){if(!t?.framework)return {};let e=typeof t.framework=="string"?t.framework:t.framework?.name;if(!e)return {};let r=await pBe(e);if(!r)return {};let i=W6e(r,brr),n=W6e(r,wrr),s=Brr(e),a=typeof t.framework=="object"?t.framework.options:{};return {framework:{name:s,options:a},builder:i,renderer:n}}function xrr(t){return t.dependencies?.chromatic||t.devDependencies?.chromatic||t.peerDependencies?.chromatic||(t.scripts&&Object.values(t.scripts).find(r=>r?.match(/chromatic/))?"latest":void 0)}var IL={next:"Next","react-scripts":"CRA",gatsby:"Gatsby","@nuxtjs/storybook":"nuxt","@nrwl/storybook":"nx","@vue/cli-service":"vue-cli","@sveltejs/kit":"sveltekit"},vL=t=>_L(t).replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,""),dBe=async({packageJson:t,mainConfig:e})=>{let r={generatedAt:new Date().getTime(),hasCustomBabel:!1,hasCustomWebpack:!1,hasStaticDirs:!1,hasStorybookEslint:!1,refCount:0},i={...t?.dependencies,...t?.devDependencies,...t?.peerDependencies},n=Object.keys(i).find(h=>!!IL[h]);if(n){let{version:h}=await ABe(n);r.metaFramework={name:IL[n],packageName:n,version:h};}let s=Irr();s&&(r.monorepo=s);try{let h=await(0,G6e.detect)({cwd:(0,R4.getProjectRoot)()}),g=await(0,G6e.getNpmVersion)(h);r.packageManager={type:h,version:g};}catch{}r.hasCustomBabel=!!e.babel,r.hasCustomWebpack=!!e.webpackFinal,r.hasStaticDirs=!!e.staticDirs,typeof e.typescript=="object"&&(r.typescriptOptions=e.typescript);let a=await Drr(e);typeof e.refs=="object"&&(r.refCount=Object.keys(e.refs).length),typeof e.features=="object"&&(r.features=e.features);let o={};e.addons&&e.addons.forEach(h=>{let g,m;typeof h=="string"?g=vL(h):(h.name.includes("addon-essentials")&&(m=h.options),g=vL(h.name)),o[g]={options:m,version:void 0};});let u=xrr(t);u&&(o.chromatic={version:void 0,versionSpecifier:u,options:void 0}),(await Y6e(o)).forEach(({name:h,version:g})=>{o[h].version=g;});let l=Object.keys(o),c=Object.keys(i).filter(h=>h.includes("storybook")&&!l.includes(h)).reduce((h,g)=>({...h,[g]:{version:void 0}}),{});(await Y6e(c)).forEach(({name:h,version:g})=>{c[h].version=g;});let A=i.typescript?"typescript":"javascript",f=!!i["eslint-plugin-storybook"],p=(0, R4.getStorybookInfo)(t);try{let{previewConfig:h}=p;if(h){let g=await(0,mrr.readConfig)(h),m=!!(g.getFieldNode(["globals"])||g.getFieldNode(["globalTypes"]));r.preview={...r.preview,usesGlobals:m};}}catch{}let d=c[p.frameworkPackage]?.version;return {...r,...a,storybookVersion:d,storybookVersionSpecifier:p.version,language:A,storybookPackages:c,addons:o,hasStorybookEslint:f}},Q4,hBe=async t=>{if(Q4)return Q4;let{packageJson:e={}}=grr.default.sync({cwd:process.cwd(),normalize:!1})||{},r=(t||(0, R4.getStorybookConfiguration)(e?.scripts?.storybook||"","-c","--config-dir"))??".storybook",i=await(0, R4.loadMainConfig)({configDir:r});return Q4=await dBe({mainConfig:i,packageJson:e}),Q4},Trr=$i(L("os")),Qrr=$i(L("http"),1),_rr=$i(L("https"),1),Sg=$i(L("zlib"),1),wu=$i(L("stream"),1),_4=L("buffer");function Prr(t){if(!/^data:/i.test(t))throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');t=t.replace(/\r?\n/g,"");let e=t.indexOf(",");if(e===-1||e<=4)throw new TypeError("malformed data: URI");let r=t.substring(5,e).split(";"),i="",n=!1,s=r[0]||"text/plain",a=s;for(let c=1;c<r.length;c++)r[c]==="base64"?n=!0:r[c]&&(a+=`;${r[c]}`,r[c].indexOf("charset=")===0&&(i=r[c].substring(8)));!r[0]&&!i.length&&(a+=";charset=US-ASCII",i="US-ASCII");let o=n?"base64":"ascii",u=unescape(t.substring(e+1)),l=Buffer.from(u,o);return l.type=s,l.typeFull=a,l.charset=i,l}var Frr=Prr,Bu=$i(L("stream"),1),Dg=L("util"),eo=L("buffer");q4();QL();var j4=class extends Error{constructor(t,e){super(t),Error.captureStackTrace(this,this.constructor),this.type=e;}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},bu=class extends j4{constructor(t,e,r){super(t,e),r&&(this.code=this.errno=r.code,this.erroredSysCall=r.syscall);}},L4=Symbol.toStringTag,gBe=t=>typeof t=="object"&&typeof t.append=="function"&&typeof t.delete=="function"&&typeof t.get=="function"&&typeof t.getAll=="function"&&typeof t.has=="function"&&typeof t.set=="function"&&typeof t.sort=="function"&&t[L4]==="URLSearchParams",O4=t=>t&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&typeof t.constructor=="function"&&/^(Blob|File)$/.test(t[L4]),Nrr=t=>typeof t=="object"&&(t[L4]==="AbortSignal"||t[L4]==="EventTarget"),krr=(t,e)=>{let r=new URL(e).hostname,i=new URL(t).hostname;return r===i||r.endsWith(`.${i}`)},Rrr=(t,e)=>{let r=new URL(e).protocol,i=new URL(t).protocol;return r===i},Lrr=(0, Dg.promisify)(Bu.default.pipeline),$s=Symbol("Body internals"),py=class{constructor(t,{size:e=0}={}){let r=null;t===null?t=null:gBe(t)?t=eo.Buffer.from(t.toString()):O4(t)||eo.Buffer.isBuffer(t)||(Dg.types.isAnyArrayBuffer(t)?t=eo.Buffer.from(t):ArrayBuffer.isView(t)?t=eo.Buffer.from(t.buffer,t.byteOffset,t.byteLength):t instanceof Bu.default||(t instanceof Ay?(t=urr(t),r=t.type.split("=")[1]):t=eo.Buffer.from(String(t))));let i=t;eo.Buffer.isBuffer(t)?i=Bu.default.Readable.from(t):O4(t)&&(i=Bu.default.Readable.from(t.stream())),this[$s]={body:t,stream:i,boundary:r,disturbed:!1,error:null},this.size=e,t instanceof Bu.default&&t.on("error",n=>{let s=n instanceof j4?n:new bu(`Invalid response body while trying to fetch ${this.url}: ${n.message}`,"system",n);this[$s].error=s;});}get body(){return this[$s].stream}get bodyUsed(){return this[$s].disturbed}async arrayBuffer(){let{buffer:t,byteOffset:e,byteLength:r}=await gL(this);return t.slice(e,e+r)}async formData(){let t=this.headers.get("content-type");if(t.startsWith("application/x-www-form-urlencoded")){let r=new Ay,i=new URLSearchParams(await this.text());for(let[n,s]of i)r.append(n,s);return r}let{toFormData:e}=await Promise.resolve().then(()=>(hrr(),uBe));return e(this.body,t)}async blob(){let t=this.headers&&this.headers.get("content-type")||this[$s].body&&this[$s].body.type||"",e=await this.arrayBuffer();return new cy([e],{type:t})}async json(){let t=await this.text();return JSON.parse(t)}async text(){let t=await gL(this);return new TextDecoder().decode(t)}buffer(){return gL(this)}};py.prototype.buffer=(0, Dg.deprecate)(py.prototype.buffer,"Please use 'response.arrayBuffer()' instead of 'response.buffer()'","node-fetch#buffer");Object.defineProperties(py.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0},data:{get:(0, Dg.deprecate)(()=>{},"data doesn't exist, use json(), text(), arrayBuffer(), or body instead","https://github.com/node-fetch/node-fetch/issues/1000 (response)")}});async function gL(t){if(t[$s].disturbed)throw new TypeError(`body used already for: ${t.url}`);if(t[$s].disturbed=!0,t[$s].error)throw t[$s].error;let{body:e}=t;if(e===null||!(e instanceof Bu.default))return eo.Buffer.alloc(0);let r=[],i=0;try{for await(let n of e){if(t.size>0&&i+n.length>t.size){let s=new bu(`content size at ${t.url} over limit: ${t.size}`,"max-size");throw e.destroy(s),s}i+=n.length,r.push(n);}}catch(n){throw n instanceof j4?n:new bu(`Invalid response body while trying to fetch ${t.url}: ${n.message}`,"system",n)}if(e.readableEnded===!0||e._readableState.ended===!0)try{return r.every(n=>typeof n=="string")?eo.Buffer.from(r.join("")):eo.Buffer.concat(r,i)}catch(n){throw new bu(`Could not create Buffer from response body for ${t.url}: ${n.message}`,"system",n)}else throw new bu(`Premature close of server response while trying to fetch ${t.url}`)}var PL=(t,e)=>{let r,i,{body:n}=t[$s];if(t.bodyUsed)throw new Error("cannot clone body after it is used");return n instanceof Bu.default&&typeof n.getBoundary!="function"&&(r=new Bu.PassThrough({highWaterMark:e}),i=new Bu.PassThrough({highWaterMark:e}),n.pipe(r),n.pipe(i),t[$s].stream=r,n=i),n},Orr=(0, Dg.deprecate)(t=>t.getBoundary(),"form-data doesn't follow the spec and requires special treatment. Use alternative package","https://github.com/node-fetch/node-fetch/issues/1167"),mBe=(t,e)=>t===null?null:typeof t=="string"?"text/plain;charset=UTF-8":gBe(t)?"application/x-www-form-urlencoded;charset=UTF-8":O4(t)?t.type||null:eo.Buffer.isBuffer(t)||Dg.types.isAnyArrayBuffer(t)||ArrayBuffer.isView(t)?null:t instanceof Ay?`multipart/form-data; boundary=${e[$s].boundary}`:t&&typeof t.getBoundary=="function"?`multipart/form-data;boundary=${Orr(t)}`:t instanceof Bu.default?null:"text/plain;charset=UTF-8",Mrr=t=>{let{body:e}=t[$s];return e===null?0:O4(e)?e.size:eo.Buffer.isBuffer(e)?e.length:e&&typeof e.getLengthSync=="function"&&e.hasKnownLength&&e.hasKnownLength()?e.getLengthSync():null},Krr=async(t,{body:e})=>{e===null?t.end():await Lrr(e,t);},z6e=L("util"),M4=$i(L("http"),1),k4=typeof M4.default.validateHeaderName=="function"?M4.default.validateHeaderName:t=>{if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(t)){let e=new TypeError(`Header name must be a valid HTTP token [${t}]`);throw Object.defineProperty(e,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),e}},SL=typeof M4.default.validateHeaderValue=="function"?M4.default.validateHeaderValue:(t,e)=>{if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(e)){let r=new TypeError(`Invalid character in header content ["${t}"]`);throw Object.defineProperty(r,"code",{value:"ERR_INVALID_CHAR"}),r}},hf=class CBe extends URLSearchParams{constructor(e){let r=[];if(e instanceof CBe){let i=e.raw();for(let[n,s]of Object.entries(i))r.push(...s.map(a=>[n,a]));}else if(e!=null)if(typeof e=="object"&&!z6e.types.isBoxedPrimitive(e)){let i=e[Symbol.iterator];if(i==null)r.push(...Object.entries(e));else {if(typeof i!="function")throw new TypeError("Header pairs must be iterable");r=[...e].map(n=>{if(typeof n!="object"||z6e.types.isBoxedPrimitive(n))throw new TypeError("Each header pair must be an iterable object");return [...n]}).map(n=>{if(n.length!==2)throw new TypeError("Each header pair must be a name/value tuple");return [...n]});}}else throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");return r=r.length>0?r.map(([i,n])=>(k4(i),SL(i,String(n)),[String(i).toLowerCase(),String(n)])):void 0,super(r),new Proxy(this,{get(i,n,s){switch(n){case"append":case"set":return (a,o)=>(k4(a),SL(a,String(o)),URLSearchParams.prototype[n].call(i,String(a).toLowerCase(),String(o)));case"delete":case"has":case"getAll":return a=>(k4(a),URLSearchParams.prototype[n].call(i,String(a).toLowerCase()));case"keys":return ()=>(i.sort(),new Set(URLSearchParams.prototype.keys.call(i)).keys());default:return Reflect.get(i,n,s)}}})}get[Symbol.toStringTag](){return this.constructor.name}toString(){return Object.prototype.toString.call(this)}get(e){let r=this.getAll(e);if(r.length===0)return null;let i=r.join(", ");return /^content-encoding$/i.test(e)&&(i=i.toLowerCase()),i}forEach(e,r=void 0){for(let i of this.keys())Reflect.apply(e,r,[this.get(i),i,this]);}*values(){for(let e of this.keys())yield this.get(e);}*entries(){for(let e of this.keys())yield [e,this.get(e)];}[Symbol.iterator](){return this.entries()}raw(){return [...this.keys()].reduce((e,r)=>(e[r]=this.getAll(r),e),{})}[Symbol.for("nodejs.util.inspect.custom")](){return [...this.keys()].reduce((e,r)=>{let i=this.getAll(r);return r==="host"?e[r]=i[0]:e[r]=i.length>1?i:i[0],e},{})}};Object.defineProperties(hf.prototype,["get","entries","forEach","values"].reduce((t,e)=>(t[e]={enumerable:!0},t),{}));function qrr(t=[]){return new hf(t.reduce((e,r,i,n)=>(i%2===0&&e.push(n.slice(i,i+2)),e),[]).filter(([e,r])=>{try{return k4(e),SL(e,String(r)),!0}catch{return !1}}))}var jrr=new Set([301,302,303,307,308]),yBe=t=>jrr.has(t),Ko=Symbol("Response internals"),CA=class ly extends py{constructor(e=null,r={}){super(e,r);let i=r.status!=null?r.status:200,n=new hf(r.headers);if(e!==null&&!n.has("Content-Type")){let s=mBe(e,this);s&&n.append("Content-Type",s);}this[Ko]={type:"default",url:r.url,status:i,statusText:r.statusText||"",headers:n,counter:r.counter,highWaterMark:r.highWaterMark};}get type(){return this[Ko].type}get url(){return this[Ko].url||""}get status(){return this[Ko].status}get ok(){return this[Ko].status>=200&&this[Ko].status<300}get redirected(){return this[Ko].counter>0}get statusText(){return this[Ko].statusText}get headers(){return this[Ko].headers}get highWaterMark(){return this[Ko].highWaterMark}clone(){return new ly(PL(this,this.highWaterMark),{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size,highWaterMark:this.highWaterMark})}static redirect(e,r=302){if(!yBe(r))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');return new ly(null,{headers:{location:new URL(e).toString()},status:r})}static error(){let e=new ly(null,{status:0,statusText:""});return e[Ko].type="error",e}static json(e=void 0,r={}){let i=JSON.stringify(e);if(i===void 0)throw new TypeError("data is not JSON serializable");let n=new hf(r&&r.headers);return n.has("content-type")||n.set("content-type","application/json"),new ly(i,{...r,headers:n})}get[Symbol.toStringTag](){return "Response"}};Object.defineProperties(CA.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var Urr=L("url"),Grr=L("util"),Yrr=t=>{if(t.search)return t.search;let e=t.href.length-1,r=t.hash||(t.href[e]==="#"?"#":"");return t.href[e-r.length]==="?"?"?":""},Jrr=L("net");function X6e(t,e=!1){return t==null||(t=new URL(t),/^(about|blob|data):$/.test(t.protocol))?"no-referrer":(t.username="",t.password="",t.hash="",e&&(t.pathname="",t.search=""),t)}var EBe=new Set(["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"]),Hrr="strict-origin-when-cross-origin";function Vrr(t){if(!EBe.has(t))throw new TypeError(`Invalid referrerPolicy: ${t}`);return t}function Wrr(t){if(/^(http|ws)s:$/.test(t.protocol))return !0;let e=t.host.replace(/(^\[)|(]$)/g,""),r=(0, Jrr.isIP)(e);return r===4&&/^127\./.test(e)||r===6&&/^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(e)?!0:t.host==="localhost"||t.host.endsWith(".localhost")?!1:t.protocol==="file:"}function wg(t){return /^about:(blank|srcdoc)$/.test(t)||t.protocol==="data:"||/^(blob|filesystem):$/.test(t.protocol)?!0:Wrr(t)}function zrr(t,{referrerURLCallback:e,referrerOriginCallback:r}={}){if(t.referrer==="no-referrer"||t.referrerPolicy==="")return null;let i=t.referrerPolicy;if(t.referrer==="about:client")return "no-referrer";let n=t.referrer,s=X6e(n),a=X6e(n,!0);s.toString().length>4096&&(s=a),e&&(s=e(s)),r&&(a=r(a));let o=new URL(t.url);switch(i){case"no-referrer":return "no-referrer";case"origin":return a;case"unsafe-url":return s;case"strict-origin":return wg(s)&&!wg(o)?"no-referrer":a.toString();case"strict-origin-when-cross-origin":return s.origin===o.origin?s:wg(s)&&!wg(o)?"no-referrer":a;case"same-origin":return s.origin===o.origin?s:"no-referrer";case"origin-when-cross-origin":return s.origin===o.origin?s:a;case"no-referrer-when-downgrade":return wg(s)&&!wg(o)?"no-referrer":s;default:throw new TypeError(`Invalid referrerPolicy: ${i}`)}}function Xrr(t){let e=(t.get("referrer-policy")||"").split(/[,\s]+/),r="";for(let i of e)i&&EBe.has(i)&&(r=i);return r}var Sn=Symbol("Request internals"),oy=t=>typeof t=="object"&&typeof t[Sn]=="object",$rr=(0, Grr.deprecate)(()=>{},".data is not a valid RequestInit property, use .body instead","https://github.com/node-fetch/node-fetch/issues/1000 (request)"),wL=class IBe extends py{constructor(e,r={}){let i;if(oy(e)?i=new URL(e.url):(i=new URL(e),e={}),i.username!==""||i.password!=="")throw new TypeError(`${i} is an url with embedded credentials.`);let n=r.method||e.method||"GET";if(/^(delete|get|head|options|post|put)$/i.test(n)&&(n=n.toUpperCase()),!oy(r)&&"data"in r&&$rr(),(r.body!=null||oy(e)&&e.body!==null)&&(n==="GET"||n==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let s=r.body?r.body:oy(e)&&e.body!==null?PL(e):null;super(s,{size:r.size||e.size||0});let a=new hf(r.headers||e.headers||{});if(s!==null&&!a.has("Content-Type")){let l=mBe(s,this);l&&a.set("Content-Type",l);}let o=oy(e)?e.signal:null;if("signal"in r&&(o=r.signal),o!=null&&!Nrr(o))throw new TypeError("Expected signal to be an instanceof AbortSignal or EventTarget");let u=r.referrer==null?e.referrer:r.referrer;if(u==="")u="no-referrer";else if(u){let l=new URL(u);u=/^about:(\/\/)?client$/.test(l)?"client":l;}else u=void 0;this[Sn]={method:n,redirect:r.redirect||e.redirect||"follow",headers:a,parsedURL:i,signal:o,referrer:u},this.follow=r.follow===void 0?e.follow===void 0?20:e.follow:r.follow,this.compress=r.compress===void 0?e.compress===void 0?!0:e.compress:r.compress,this.counter=r.counter||e.counter||0,this.agent=r.agent||e.agent,this.highWaterMark=r.highWaterMark||e.highWaterMark||16384,this.insecureHTTPParser=r.insecureHTTPParser||e.insecureHTTPParser||!1,this.referrerPolicy=r.referrerPolicy||e.referrerPolicy||"";}get method(){return this[Sn].method}get url(){return (0, Urr.format)(this[Sn].parsedURL)}get headers(){return this[Sn].headers}get redirect(){return this[Sn].redirect}get signal(){return this[Sn].signal}get referrer(){if(this[Sn].referrer==="no-referrer")return "";if(this[Sn].referrer==="client")return "about:client";if(this[Sn].referrer)return this[Sn].referrer.toString()}get referrerPolicy(){return this[Sn].referrerPolicy}set referrerPolicy(e){this[Sn].referrerPolicy=Vrr(e);}clone(){return new IBe(this)}get[Symbol.toStringTag](){return "Request"}};Object.defineProperties(wL.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0},referrer:{enumerable:!0},referrerPolicy:{enumerable:!0}});var Zrr=t=>{let{parsedURL:e}=t[Sn],r=new hf(t[Sn].headers);r.has("Accept")||r.set("Accept","*/*");let i=null;if(t.body===null&&/^(post|put)$/i.test(t.method)&&(i="0"),t.body!==null){let o=Mrr(t);typeof o=="number"&&!Number.isNaN(o)&&(i=String(o));}i&&r.set("Content-Length",i),t.referrerPolicy===""&&(t.referrerPolicy=Hrr),t.referrer&&t.referrer!=="no-referrer"?t[Sn].referrer=zrr(t):t[Sn].referrer="no-referrer",t[Sn].referrer instanceof URL&&r.set("Referer",t.referrer),r.has("User-Agent")||r.set("User-Agent","node-fetch"),t.compress&&!r.has("Accept-Encoding")&&r.set("Accept-Encoding","gzip, deflate, br");let{agent:n}=t;typeof n=="function"&&(n=n(e));let s=Yrr(e),a={path:e.pathname+s,method:t.method,headers:r[Symbol.for("nodejs.util.inspect.custom")](),insecureHTTPParser:t.insecureHTTPParser,agent:n};return {parsedURL:e,options:a}},eir=class extends j4{constructor(t,e="aborted"){super(t,e);}};QL();oBe();var tir=new Set(["data:","http:","https:"]);async function vBe(t,e){return new Promise((r,i)=>{let n=new wL(t,e),{parsedURL:s,options:a}=Zrr(n);if(!tir.has(s.protocol))throw new TypeError(`node-fetch cannot load ${t}. URL scheme "${s.protocol.replace(/:$/,"")}" is not supported.`);if(s.protocol==="data:"){let d=Frr(n.url),h=new CA(d,{headers:{"Content-Type":d.typeFull}});r(h);return}let o=(s.protocol==="https:"?_rr.default:Qrr.default).request,{signal:u}=n,l=null,c=()=>{let d=new eir("The operation was aborted.");i(d),n.body&&n.body instanceof wu.default.Readable&&n.body.destroy(d),!(!l||!l.body)&&l.body.emit("error",d);};if(u&&u.aborted){c();return}let A=()=>{c(),p();},f=o(s.toString(),a);u&&u.addEventListener("abort",A);let p=()=>{f.abort(),u&&u.removeEventListener("abort",A);};f.on("error",d=>{i(new bu(`request to ${n.url} failed, reason: ${d.message}`,"system",d)),p();}),rir(f,d=>{l&&l.body&&l.body.destroy(d);}),process.version<"v14"&&f.on("socket",d=>{let h;d.prependListener("end",()=>{h=d._eventsCount;}),d.prependListener("close",g=>{if(l&&h<d._eventsCount&&!g){let m=new Error("Premature close");m.code="ERR_STREAM_PREMATURE_CLOSE",l.body.emit("error",m);}});}),f.on("response",d=>{f.setTimeout(0);let h=qrr(d.rawHeaders);if(yBe(d.statusCode)){let E=h.get("Location"),w=null;try{w=E===null?null:new URL(E,n.url);}catch{if(n.redirect!=="manual"){i(new bu(`uri requested responds with an invalid redirect URL: ${E}`,"invalid-redirect")),p();return}}switch(n.redirect){case"error":i(new bu(`uri requested responds with a redirect, redirect mode is set to error: ${n.url}`,"no-redirect")),p();return;case"manual":break;case"follow":{if(w===null)break;if(n.counter>=n.follow){i(new bu(`maximum redirect reached at: ${n.url}`,"max-redirect")),p();return}let b={headers:new hf(n.headers),follow:n.follow,counter:n.counter+1,agent:n.agent,compress:n.compress,method:n.method,body:PL(n),signal:n.signal,size:n.size,referrer:n.referrer,referrerPolicy:n.referrerPolicy};if(!krr(n.url,w)||!Rrr(n.url,w))for(let _ of ["authorization","www-authenticate","cookie","cookie2"])b.headers.delete(_);if(d.statusCode!==303&&n.body&&e.body instanceof wu.default.Readable){i(new bu("Cannot follow redirect with body being a readable stream","unsupported-redirect")),p();return}(d.statusCode===303||(d.statusCode===301||d.statusCode===302)&&n.method==="POST")&&(b.method="GET",b.body=void 0,b.headers.delete("content-length"));let x=Xrr(h);x&&(b.referrerPolicy=x),r(vBe(new wL(w,b))),p();return}default:return i(new TypeError(`Redirect option '${n.redirect}' is not a valid value of RequestRedirect`))}}u&&d.once("end",()=>{u.removeEventListener("abort",A);});let g=(0, wu.pipeline)(d,new wu.PassThrough,E=>{E&&i(E);});process.version<"v12.10"&&d.on("aborted",A);let m={url:n.url,status:d.statusCode,statusText:d.statusMessage,headers:h,size:n.size,counter:n.counter,highWaterMark:n.highWaterMark},C=h.get("Content-Encoding");if(!n.compress||n.method==="HEAD"||C===null||d.statusCode===204||d.statusCode===304){l=new CA(g,m),r(l);return}let S={flush:Sg.default.Z_SYNC_FLUSH,finishFlush:Sg.default.Z_SYNC_FLUSH};if(C==="gzip"||C==="x-gzip"){g=(0, wu.pipeline)(g,Sg.default.createGunzip(S),E=>{E&&i(E);}),l=new CA(g,m),r(l);return}if(C==="deflate"||C==="x-deflate"){let E=(0, wu.pipeline)(d,new wu.PassThrough,w=>{w&&i(w);});E.once("data",w=>{(w[0]&15)===8?g=(0, wu.pipeline)(g,Sg.default.createInflate(),b=>{b&&i(b);}):g=(0, wu.pipeline)(g,Sg.default.createInflateRaw(),b=>{b&&i(b);}),l=new CA(g,m),r(l);}),E.once("end",()=>{l||(l=new CA(g,m),r(l));});return}if(C==="br"){g=(0, wu.pipeline)(g,Sg.default.createBrotliDecompress(),E=>{E&&i(E);}),l=new CA(g,m),r(l);return}l=new CA(g,m),r(l);}),Krr(f,n).catch(i);})}function rir(t,e){let r=_4.Buffer.from(`0\r
592
592
  \r
593
593
  `),i=!1,n=!1,s;t.on("response",a=>{let{headers:o}=a;i=o["transfer-encoding"]==="chunked"&&!o["content-length"];}),t.on("socket",a=>{let o=()=>{if(i&&!n){let l=new Error("Premature close");l.code="ERR_STREAM_PREMATURE_CLOSE",e(l);}},u=l=>{n=_4.Buffer.compare(l.slice(-5),r)===0,!n&&s&&(n=_4.Buffer.compare(s.slice(-3),r.slice(0,3))===0&&_4.Buffer.compare(l.slice(-2),r.slice(3))===0),s=l;};a.prependListener("close",o),a.on("data",u),t.on("close",()=>{a.removeListener("close",o),a.removeListener("data",u);});});}var iir=$i(Q6e()),$6e=L("crypto"),nir="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",sir=128,df,Bg,air=t=>{!df||df.length<t?(df=Buffer.allocUnsafe(t*sir),(0, $6e.randomFillSync)(df),Bg=0):Bg+t>df.length&&((0, $6e.randomFillSync)(df),Bg=0),Bg+=t;},FL=(t=21)=>{air(t-=0);let e="";for(let r=Bg-t;r<Bg;r++)e+=nir[df[r]&63];return e},oir=$i(L("path")),uir=L("child_process"),lir=dA(),cir=L("crypto"),SBe=t=>{let e=(0, cir.createHash)("sha256");return e.update("storybook-telemetry-salt"),e.update(t),e.digest("hex")};function Air(t){return t.trim().replace(/#.*$/,"").replace(/^.*@/,"").replace(/^.*\/\//,"").replace(":","/")}var P4,pir=()=>{if(P4)return P4;let t;try{let e=(0,lir.getProjectRoot)(),r=oir.default.relative(e,process.cwd()),i=(0,uir.execSync)("git config --local --get remote.origin.url",{timeout:1e3,stdio:"pipe"});t=`${Air(String(i))}${r}`,P4=SBe(t);}catch{}return P4},bL=dA(),mL=Promise.resolve(),fir=async(t,e)=>{let r=await bL.cache.get("lastEvents")||{};r[t]={body:e,timestamp:Date.now()},await bL.cache.set("lastEvents",r);},dir=async(t,e)=>(await mL,mL=fir(t,e),mL),hir=t=>{let{body:e,timestamp:r}=t;return {timestamp:r,eventType:e?.eventType,eventId:e?.eventId,sessionId:e?.sessionId}},gir=["init","upgrade"],mir=["build","dev","error"],Z6e=(t,e)=>{let r=e.map(i=>t?.[i]).filter(Boolean).sort((i,n)=>n.timestamp-i.timestamp);return r.length>0?r[0]:void 0},Cir=async(t=void 0)=>{let e=t||await bL.cache.get("lastEvents")||{},r=Z6e(e,gir),i=Z6e(e,mir);if(r)return !i?.timestamp||r.timestamp>i.timestamp?hir(r):void 0},eBe=dA(),yir=1e3*60*60*2,uy,wBe=async()=>{let t=Date.now();if(!uy){let e=await eBe.cache.get("session");e&&e.lastUsed>=t-yir?uy=e.id:uy=FL();}return await eBe.cache.set("session",{id:uy,lastUsed:t}),uy},Eir=process.env.STORYBOOK_TELEMETRY_URL||"https://storybook.js.org/event-log",Iir=(0, iir.default)(vBe),F4=[],vir=(t,e)=>{BL[t]=e;},Sir=()=>{try{let t=Trr.platform();return t==="win32"?"Windows":t==="darwin"?"macOS":t==="linux"?"Linux":`Other: ${t}`}catch{return "Unknown"}},BL={inCI:!!process.env.CI,isTTY:process.stdout.isTTY,platform:Sir()},wir=async(t,e,r)=>{let{eventType:i,payload:n,metadata:s,...a}=t,o=await wBe(),u=FL(),l={...a,eventType:i,eventId:u,sessionId:o,metadata:s,payload:n,context:e};return Iir(Eir,{method:"POST",body:JSON.stringify(l),headers:{"Content-Type":"application/json"},retries:3,retryOn:[503,504],retryDelay:c=>2**c*(typeof r?.retryDelay=="number"&&!Number.isNaN(r?.retryDelay)?r.retryDelay:1e3)})};async function bir(t,e={retryDelay:1e3,immediate:!1}){let{eventType:r,payload:i,metadata:n,...s}=t,a=e.stripMetadata?BL:{...BL,anonymousId:pir()},o;try{o=wir(t,a,e),F4.push(o),e.immediate?await Promise.all(F4):await o;let u=await wBe(),l=FL(),c={...s,eventType:r,eventId:l,sessionId:u,metadata:n,payload:i,context:a};await dir(r,c);}catch{}finally{F4=F4.filter(u=>u!==o);}}var tBe=$i(h0()),rBe=dA(),iBe="telemetry-notification-date",bg=console,Bir=async()=>{await rBe.cache.get(iBe,null)||(rBe.cache.set(iBe,Date.now()),bg.log(),bg.log(`${tBe.default.magenta.bold("attention")} => Storybook now collects completely anonymous telemetry regarding usage.`),bg.log("This information is used to shape Storybook's roadmap and prioritize features."),bg.log("You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:"),bg.log(tBe.default.cyan("https://storybook.js.org/telemetry")),bg.log());},Dir=async(t,e={},r={})=>{t!=="boot"&&await Bir();let i={eventType:t,payload:e};try{r?.stripMetadata||(i.metadata=await hBe(r?.configDir));}catch(n){i.payload.metadataErrorMessage=hL(n).message,r?.enableCrashReports&&(i.payload.metadataError=hL(n));}finally{let{error:n}=i.payload;n&&(i.payload.error=hL(n)),(!i.payload.error||r?.enableCrashReports)&&(process.env?.STORYBOOK_TELEMETRY_DEBUG&&(U6e.logger.info(`
594
- [telemetry]`),U6e.logger.info(JSON.stringify(i,null,2))),await bir(i,r));}};});var zBe=vO(BBe());var {CHROMATIC_INDEX_URL:xir,CHROMATIC_BASE_URL:U4=xir||"https://www.chromatic.com",CHROMATIC_API_URL:dvr=`${U4}/api`}=process.env,DBe="@chromatic-com/storybook",vi="chromaui/addon-visual-tests",xBe=`${vi}/configInfo`,TBe=`${vi}/gitInfo`,QBe=`${vi}/gitInfoError`,_Be=`${vi}/projectInfo`,PBe=`${vi}/startBuild`,FBe=`${vi}/stopBuild`,NBe=`${vi}/localBuildProgress`,kBe=`${vi}/telemetry`,RBe=`${vi}/removeAddon`,LBe={autoAcceptChanges:!1,exitOnceUploaded:!1,exitZeroOnChanges:!0,forceRebuild:!0,fromCI:!1,interactive:!1,isLocalBuild:!0,skip:!1,skipUpdateCheck:!0,storybookBuildDir:void 0};var dy=t=>yA.includes(t),MBe=t=>["upload","snapshot"].includes(t),yA=["initialize","build","upload","verify","snapshot"],G4={initialize:{key:"initialize",emoji:"\u{1F680}",renderName:()=>"Initialize build",renderProgress:()=>"Initializing build...",renderComplete:()=>"Initialized",estimateDuration:2e3},build:{key:"build",emoji:"\u{1F3D7}",renderName:()=>"Build Storybook",renderProgress:()=>"Building your Storybook...",renderComplete:()=>"Storybook built",estimateDuration:2e4},upload:{key:"upload",emoji:"\u{1F4E1}",renderName:()=>"Publish your Storybook",renderProgress:({stepProgress:t})=>{let{numerator:e,denominator:r}=t.upload;if(!r||!e)return "Uploading files...";let{value:i,exponent:n}=filesize.filesize(r,{output:"object",round:1}),{value:s,symbol:a}=filesize.filesize(e,{exponent:n,output:"object",round:1});return `Uploading files (${s}/${i} ${a})...`},renderComplete:()=>"Publish complete",estimateDuration:2e4},verify:{key:"verify",emoji:"\u{1F50D}",renderName:()=>"Verify your Storybook",renderProgress:()=>"Verifying contents...",renderComplete:()=>"Storybook verified",estimateDuration:2e4},snapshot:{key:"snapshot",emoji:"\u{1F4F8}",renderName:()=>"Run visual tests",renderProgress:({stepProgress:t})=>{let{numerator:e,denominator:r}=t.snapshot;return r?`Running visual tests (${e}/${r})...`:"Running visual tests..."},renderComplete:()=>"Tested your stories",estimateDuration:9e4},aborted:{key:"aborted",emoji:"\u270B",renderName:()=>"Build canceled",renderProgress:()=>"Build canceled",renderComplete:()=>"Build canceled",estimateDuration:0},complete:{key:"complete",emoji:"\u{1F389}",renderName:()=>"Visual tests completed!",renderProgress:()=>"Visual tests completed!",renderComplete:()=>"Visual tests completed!",estimateDuration:0},error:{key:"error",emoji:"\u{1F6A8}",renderName:()=>"Build failed",renderProgress:()=>"Build failed",renderComplete:()=>"Build failed",estimateDuration:0},limited:{key:"error",emoji:"\u{1F6A8}",renderName:()=>"Build limited",renderProgress:()=>"Build limited",renderComplete:()=>"Build limited",estimateDuration:0}},Tir={buildProgressPercentage:0,currentStep:yA[0],stepProgress:Object.fromEntries(yA.map(t=>[t,{}]))},KBe=JSON.stringify(Tir);var qBe=2e3,hy,_ir=(t,e)=>{if(!dy(t))throw new Error(`Unknown step: ${t}`);let r=yA.map(l=>{let{startedAt:c,completedAt:A}=e?.[l]||{};return c&&A?A-c:G4[l].estimateDuration}),i=r.reduce((l,c)=>l+c,0),n=yA.indexOf(t),s=r.slice(0,n).reduce((l,c)=>l+c,0),a=s+r[n],o=s/i*100,u=a/i*100;return {...G4[t],startPercentage:o,endPercentage:u,stepPercentage:u-o}},NL=(t,e)=>(r,{progress:i,total:n}={})=>{if(clearTimeout(e),!dy(r.task))return;if(!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{buildProgressPercentage:s,stepProgress:a,previousBuildProgress:o}=t.value;if(a[r.task]?.completedAt)return;let{startPercentage:u,endPercentage:l,stepPercentage:c}=_ir(r.task,o),A=u;if(i&&n&&(A+=c*(i/n)),!MBe(r.task)){let{estimateDuration:f}=G4[r.task],p=yA.indexOf(r.task);A=Math.max(A,s)+qBe/f*c,e=setTimeout(()=>{if(!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{currentStep:d}=t.value;dy(d)&&yA.indexOf(d)<=p&&NL(t,e)(r);},qBe);}a[r.task]={startedAt:Date.now(),...a[r.task],...i&&n&&{numerator:i,denominator:n}},t.value={buildId:r.announcedBuild?.id,branch:r.git?.branch,buildProgressPercentage:Math.min(A,l),currentStep:r.task,stepProgress:a};},jBe=(t,e)=>(r,i)=>{if(clearTimeout(e),!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{buildProgressPercentage:n,stepProgress:s}=t.value,a={buildId:r.announcedBuild?.id,branch:r.git?.branch,buildProgressPercentage:n,stepProgress:s,previousBuildProgress:s};if(i){t.value={...a,currentStep:hy?.signal.aborted?"aborted":"error",formattedError:i.formattedError,originalError:i.originalError};return}r.task&&dy(r.task)&&(s[r.task]={...s[r.task],completedAt:Date.now()}),r.task==="verify"&&r.build?.wasLimited&&(t.value={...a,currentStep:"limited",stepProgress:s,errorDetailsUrl:r.build?.app.account?.billingUrl}),r.build&&r.task==="snapshot"&&(t.value={...a,buildProgressPercentage:100,currentStep:"complete",stepProgress:s,changeCount:r.build.changeCount,errorCount:r.build.errorCount});},UBe=async(t,e)=>{if(!e.projectId)throw new Error("Missing projectId");if(!e.userToken)throw new Error("Missing userToken");t.value=JSON.parse(KBe);let r;hy?.abort(),hy=new AbortController,process.env.SB_TESTBUILD="true",await node.run({flags:{interactive:!1},options:{...e,...LBe,experimental_onTaskStart:NL(t,r),experimental_onTaskProgress:NL(t,r),experimental_onTaskComplete:jBe(t,r),experimental_onTaskError:jBe(t,r),experimental_abortSignal:hy?.signal}});},GBe=()=>{hy?.abort(new Error("Build canceled from Storybook"));};var YBe="experimental_useSharedState_getValue",Y4="experimental_useSharedState_setValue",kL=new Map,Du=class{constructor(e){this.channel=e,this.listeners=[],this.state={},this.channel.on(Y4,(r,i,n)=>{this.state?.[r]?.index>=n||(this.state[r]={index:n,value:i});}),this.channel.on(YBe,r=>{let i=this.state[r]?.index??0,n=this.state[r]?.value;this.channel.emit(Y4,r,n,i);});}get(e){return this.state[e]||this.channel.emit(YBe,e),this.state[e]?.value}set(e,r){let i=(this.state[e]?.index??0)+1;this.state[e]={index:i,value:r},this.channel.emit(Y4,e,r,i);}static subscribe(e,r){let i=kL.get(e)||new Du(r);return kL.has(e)||(kL.set(e,i),i.channel.on(Y4,(n,s)=>{n===e&&i.listeners.forEach(a=>a(s));})),{get value(){return i.get(e)},set value(n){i.set(e,n);},on(n,s){if(n!=="change")throw new Error("unsupported event");i.listeners.push(s);},off(n,s){if(n!=="change")throw new Error("unsupported event");let a=i.listeners.indexOf(s);a>=0&&i.listeners.splice(a,1);}}}};async function JBe(t,e){let r=Object.entries(e).sort((i,n)=>i[0].localeCompare(n[0])).reduce((i,[n,s])=>s===null?i:Object.assign(i,{[n]:s}),{});await jsonfile.writeFile(t,r,{spaces:2});}function kir(t=[]){return [...t,L.resolve("./manager.mjs")]}var $Be=async()=>{let t=(async()=>{try{let e=L.resolve("@chromatic-com/storybook/package.json"),r=await promises.readFile(e,"utf-8");return JSON.parse(r).version||null}catch{return null}})();return $Be=()=>t,t},VBe=(t,e,r)=>Object.fromEntries(Object.entries(r).map(([i,n])=>[i,n===e[i]?null:n]).filter(([i,n])=>n!==null||t[i]!==void 0)),WBe=async(t,e)=>{let r={storybookBaseDir:".",storybookConfigDir:".storybook"},i={},n={},{repositoryRootDir:s}=await node.getGitInfo(),a=s&&path.normalize(path.relative(s,process.cwd()));a!==path.normalize(t.storybookBaseDir??"")&&(i.storybookBaseDir=a);let o=path.normalize(path.relative(process.cwd(),e.configDir));return o!==path.normalize(t.storybookConfigDir??"")&&(i.storybookConfigDir=o),t.onlyChanged===void 0&&(n.onlyChanged=!0),t.zip===void 0&&(n.zip=!0),{configuration:t,problems:VBe(t,r,i),suggestions:VBe(t,r,n)}},Rir=(t,e,r,i)=>{let n,s,a,o=async()=>{try{let u=await node.getGitInfo();Object.entries(u).some(([l,c])=>n?.[l]!==c)&&e(u,n),n=u,s=void 0,a=setTimeout(o,t);}catch(u){r(u),i&&s?.message!==u.message&&(console.error(`Failed to fetch git info, with error:
594
+ [telemetry]`),U6e.logger.info(JSON.stringify(i,null,2))),await bir(i,r));}};});var zBe=vO(BBe());var {CHROMATIC_INDEX_URL:xir,CHROMATIC_BASE_URL:U4=xir||"https://www.chromatic.com",CHROMATIC_API_URL:dvr=`${U4}/api`}=process.env,DBe="@chromatic-com/storybook",vi="chromaui/addon-visual-tests",xBe=`${vi}/configInfo`,TBe=`${vi}/gitInfo`,QBe=`${vi}/gitInfoError`,_Be=`${vi}/projectInfo`,PBe=`${vi}/startBuild`,FBe=`${vi}/stopBuild`,NBe=`${vi}/localBuildProgress`,kBe=`${vi}/telemetry`,RBe=`${vi}/removeAddon`;var LBe={autoAcceptChanges:!1,exitOnceUploaded:!1,exitZeroOnChanges:!0,forceRebuild:!0,fromCI:!1,interactive:!1,isLocalBuild:!0,skip:!1,skipUpdateCheck:!0,storybookBuildDir:void 0};var dy=t=>yA.includes(t),MBe=t=>["upload","snapshot"].includes(t),yA=["initialize","build","upload","verify","snapshot"],G4={initialize:{key:"initialize",emoji:"\u{1F680}",renderName:()=>"Initialize build",renderProgress:()=>"Initializing build...",renderComplete:()=>"Initialized",estimateDuration:2e3},build:{key:"build",emoji:"\u{1F3D7}",renderName:()=>"Build Storybook",renderProgress:()=>"Building your Storybook...",renderComplete:()=>"Storybook built",estimateDuration:2e4},upload:{key:"upload",emoji:"\u{1F4E1}",renderName:()=>"Publish your Storybook",renderProgress:({stepProgress:t})=>{let{numerator:e,denominator:r}=t.upload;if(!r||!e)return "Uploading files...";let{value:i,exponent:n}=filesize.filesize(r,{output:"object",round:1}),{value:s,symbol:a}=filesize.filesize(e,{exponent:n,output:"object",round:1});return `Uploading files (${s}/${i} ${a})...`},renderComplete:()=>"Publish complete",estimateDuration:2e4},verify:{key:"verify",emoji:"\u{1F50D}",renderName:()=>"Verify your Storybook",renderProgress:()=>"Verifying contents...",renderComplete:()=>"Storybook verified",estimateDuration:2e4},snapshot:{key:"snapshot",emoji:"\u{1F4F8}",renderName:()=>"Run visual tests",renderProgress:({stepProgress:t})=>{let{numerator:e,denominator:r}=t.snapshot;return r?`Running visual tests (${e}/${r})...`:"Running visual tests..."},renderComplete:()=>"Tested your stories",estimateDuration:9e4},aborted:{key:"aborted",emoji:"\u270B",renderName:()=>"Build canceled",renderProgress:()=>"Build canceled",renderComplete:()=>"Build canceled",estimateDuration:0},complete:{key:"complete",emoji:"\u{1F389}",renderName:()=>"Visual tests completed!",renderProgress:()=>"Visual tests completed!",renderComplete:()=>"Visual tests completed!",estimateDuration:0},error:{key:"error",emoji:"\u{1F6A8}",renderName:()=>"Build failed",renderProgress:()=>"Build failed",renderComplete:()=>"Build failed",estimateDuration:0},limited:{key:"error",emoji:"\u{1F6A8}",renderName:()=>"Build limited",renderProgress:()=>"Build limited",renderComplete:()=>"Build limited",estimateDuration:0}},Tir={buildProgressPercentage:0,currentStep:yA[0],stepProgress:Object.fromEntries(yA.map(t=>[t,{}]))},KBe=JSON.stringify(Tir);var qBe=2e3,hy,_ir=(t,e)=>{if(!dy(t))throw new Error(`Unknown step: ${t}`);let r=yA.map(l=>{let{startedAt:c,completedAt:A}=e?.[l]||{};return c&&A?A-c:G4[l].estimateDuration}),i=r.reduce((l,c)=>l+c,0),n=yA.indexOf(t),s=r.slice(0,n).reduce((l,c)=>l+c,0),a=s+r[n],o=s/i*100,u=a/i*100;return {...G4[t],startPercentage:o,endPercentage:u,stepPercentage:u-o}},NL=(t,e)=>(r,{progress:i,total:n}={})=>{if(clearTimeout(e),!dy(r.task))return;if(!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{buildProgressPercentage:s,stepProgress:a,previousBuildProgress:o}=t.value;if(a[r.task]?.completedAt)return;let{startPercentage:u,endPercentage:l,stepPercentage:c}=_ir(r.task,o),A=u;if(i&&n&&(A+=c*(i/n)),!MBe(r.task)){let{estimateDuration:f}=G4[r.task],p=yA.indexOf(r.task);A=Math.max(A,s)+qBe/f*c,e=setTimeout(()=>{if(!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{currentStep:d}=t.value;dy(d)&&yA.indexOf(d)<=p&&NL(t,e)(r);},qBe);}a[r.task]={startedAt:Date.now(),...a[r.task],...i&&n&&{numerator:i,denominator:n}},t.value={buildId:r.announcedBuild?.id,branch:r.git?.branch,buildProgressPercentage:Math.min(A,l),currentStep:r.task,stepProgress:a};},jBe=(t,e)=>(r,i)=>{if(clearTimeout(e),!t.value)throw new Error("Unexpected missing value for localBuildProgress");let{buildProgressPercentage:n,stepProgress:s}=t.value,a={buildId:r.announcedBuild?.id,branch:r.git?.branch,buildProgressPercentage:n,stepProgress:s,previousBuildProgress:s};if(i){t.value={...a,currentStep:hy?.signal.aborted?"aborted":"error",formattedError:i.formattedError,originalError:i.originalError};return}r.task&&dy(r.task)&&(s[r.task]={...s[r.task],completedAt:Date.now()}),r.task==="verify"&&r.build?.wasLimited&&(t.value={...a,currentStep:"limited",stepProgress:s,errorDetailsUrl:r.build?.app.account?.billingUrl}),r.build&&r.task==="snapshot"&&(t.value={...a,buildProgressPercentage:100,currentStep:"complete",stepProgress:s,changeCount:r.build.changeCount,errorCount:r.build.errorCount});},UBe=async(t,e)=>{if(!e.projectId)throw new Error("Missing projectId");if(!e.userToken)throw new Error("Missing userToken");t.value=JSON.parse(KBe);let r;hy?.abort(),hy=new AbortController,process.env.SB_TESTBUILD="true",await node.run({flags:{interactive:!1},options:{...e,...LBe,experimental_onTaskStart:NL(t,r),experimental_onTaskProgress:NL(t,r),experimental_onTaskComplete:jBe(t,r),experimental_onTaskError:jBe(t,r),experimental_abortSignal:hy?.signal}});},GBe=()=>{hy?.abort(new Error("Build canceled from Storybook"));};var YBe="experimental_useSharedState_getValue",Y4="experimental_useSharedState_setValue",kL=new Map,Du=class{constructor(e){this.channel=e,this.listeners=[],this.state={},this.channel.on(Y4,(r,i,n)=>{this.state?.[r]?.index>=n||(this.state[r]={index:n,value:i});}),this.channel.on(YBe,r=>{let i=this.state[r]?.index??0,n=this.state[r]?.value;this.channel.emit(Y4,r,n,i);});}get(e){return this.state[e]||this.channel.emit(YBe,e),this.state[e]?.value}set(e,r){let i=(this.state[e]?.index??0)+1;this.state[e]={index:i,value:r},this.channel.emit(Y4,e,r,i);}static subscribe(e,r){let i=kL.get(e)||new Du(r);return kL.has(e)||(kL.set(e,i),i.channel.on(Y4,(n,s)=>{n===e&&i.listeners.forEach(a=>a(s));})),{get value(){return i.get(e)},set value(n){i.set(e,n);},on(n,s){if(n!=="change")throw new Error("unsupported event");i.listeners.push(s);},off(n,s){if(n!=="change")throw new Error("unsupported event");let a=i.listeners.indexOf(s);a>=0&&i.listeners.splice(a,1);}}}};async function JBe(t,e){let r=Object.entries(e).sort((i,n)=>i[0].localeCompare(n[0])).reduce((i,[n,s])=>s===null?i:Object.assign(i,{[n]:s}),{});await jsonfile.writeFile(t,r,{spaces:2});}function kir(t=[]){return [...t,L.resolve("./manager.mjs")]}var $Be=async()=>{let t=(async()=>{try{let e=L.resolve("@chromatic-com/storybook/package.json"),r=await promises.readFile(e,"utf-8");return JSON.parse(r).version||null}catch{return null}})();return $Be=()=>t,t},VBe=(t,e,r)=>Object.fromEntries(Object.entries(r).map(([i,n])=>[i,n===e[i]?null:n]).filter(([i,n])=>n!==null||t[i]!==void 0)),WBe=async(t,e)=>{let r={storybookBaseDir:".",storybookConfigDir:".storybook"},i={},n={},{repositoryRootDir:s}=await node.getGitInfo(),a=s&&path.normalize(path.relative(s,process.cwd()));a!==path.normalize(t.storybookBaseDir??"")&&(i.storybookBaseDir=a);let o=path.normalize(path.relative(process.cwd(),e.configDir));return o!==path.normalize(t.storybookConfigDir??"")&&(i.storybookConfigDir=o),t.onlyChanged===void 0&&(n.onlyChanged=!0),t.zip===void 0&&(n.zip=!0),{configuration:t,problems:VBe(t,r,i),suggestions:VBe(t,r,n)}},Rir=(t,e,r,i)=>{let n,s,a,o=async()=>{try{let u=await node.getGitInfo();Object.entries(u).some(([l,c])=>n?.[l]!==c)&&e(u,n),n=u,s=void 0,a=setTimeout(o,t);}catch(u){r(u),i&&s?.message!==u.message&&(console.error(`Failed to fetch git info, with error:
595
595
  ${u}`),n=void 0,s=u),a=setTimeout(o,t);}};return o(),{cancel:()=>clearTimeout(a)}},Lir=async(t,e)=>{let r=await node.getConfiguration(t);await e(r),r.configFile&&fs.watch(r.configFile,async(i,n)=>{n&&await e(await node.getConfiguration(n));});};async function Oir(t,e){let{configFile:r,presets:i}=e,n=i.apply("experimental_serverAPI"),s=i.apply("core"),{projectId:a}=await node.getConfiguration(r),o=Du.subscribe(_Be,t);o.value=a?{projectId:a}:{};let u=a;o.on("change",async({projectId:d}={})=>{if(!d||d===u)return;u=d;let h=r;try{let{configFile:g,...m}=await node.getConfiguration(h),C=g||h||"chromatic.config.json",{problems:S,suggestions:E}=await WBe(m,e);await JBe(C,{...m,...S,...E,projectId:d}),o.value={...o.value,written:!0,dismissed:!1,configFile:C};}catch(g){console.warn(`Failed to update your main configuration:
596
596
 
597
597
  ${g}`),o.value={...o.value,written:!1,dismissed:!1,configFile:h};}});let l=Du.subscribe(NBe,t);t.on(PBe,async({accessToken:d})=>{let{projectId:h}=o.value||{};try{await UBe(l,{configFile:r,projectId:h,userToken:d});}catch(g){console.error(`Failed to run Chromatic build, with error:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chromatic-com/storybook",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "Catch unexpected visual changes & UI bugs in your stories",
5
5
  "keywords": [
6
6
  "storybook-addons",