@gruum/cli 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/gruum.mjs +48 -45
  2. package/package.json +1 -1
package/gruum.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{chmodSync as du,existsSync as De,rmSync as Xn}from"node:fs";import T from"node:path";import{createInterface as Yn}from"node:readline";function Be(e){return e instanceof Error&&e.name==="AbortError"&&(e.message==="Aborted with Ctrl+C"||e.message==="Aborted with Ctrl+D")}function _e(e){e.on("SIGINT",()=>{process.stderr.write(`
3
- `),process.exit(130)})}var ui=new Set(["display","position","inset","top","right","bottom","left","z-index","order","flex","flex-grow","flex-shrink","flex-basis","align-self","justify-self","align-items","justify-content","place-items","place-content","gap","text-align","min-width","max-width","overflow","white-space","cursor"]),pi=new Set(["page","index","layout","route","default"]);function fi(e){return ui.has(e.property)||/^(margin|transition|grid-)/.test(e.property)?!0:(e.property==="width"||e.property==="height")&&/^(100%|auto)$/.test(e.value)}function Fe(e){return e.flatMap(t=>t.declarations.filter(n=>!fi(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function di(e){return Fe(e.states)}function gi(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function rs(e){return e.charAt(0).toUpperCase()+e.slice(1)}function mi(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return rs(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return rs((n??e.value).replace(/-/g," "))}function hi(e){let t=gi(e),n=u=>t.findLast(f=>f.property===u),s=n("background-color")??n("background"),r=s!==void 0&&!/^(transparent|none|initial|inherit)\b/.test(s.value),o=n("border-width")?.value,i=o!==void 0&&!/^0(px)?$/.test(o)&&n("border-style")?.value!=="none",a=n("width")?.value,l=a!==void 0&&a===n("height")?.value&&!/^(auto|100%|fit-content)$/.test(a);return n("inset")?.value==="0"?"Overlay":i?l?"Outline icon":"Outline":r?`${mi(s)} ${l?"icon":"fill"}`:l?"Icon":t.some(u=>u.property.startsWith("padding")||u.property==="border-radius"||u.property==="height"&&u.value!=="auto")?"Ghost":"Text"}function bi(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return pi.has(n)&&s?`${s}/${n}`:n}function yi(e){let t=[...new Set(e.map(s=>bi(s.path)))],n=t.slice(0,2).join(", ");return t.length>2?`${n} +${t.length-2}`:n}var os=(e,t)=>e.path.localeCompare(t.path)||e.line-t.line;function is(e){let t=new Map;for(let r of e){let o=hi(r.variant),i=t.get(o)??new Map,a=di(r.variant),l=i.get(a)??{looks:[],sites:[]};l.looks.push(r.variant),l.sites.push(...r.sites),i.set(a,l),t.set(o,i)}let n=[],s=new Map;for(let[r,o]of t){let i=[...o.values()];for(let h of i)h.sites.sort(os);i.sort((h,w)=>w.sites.length-h.sites.length||os(h.sites[0],w.sites[0]));let[a,...l]=i,c=a.looks[0],u=l.map(h=>yi(h.sites)),f=l.map((h,w)=>{let C=h.looks[0],g={title:u.filter(p=>p===u[w]).length>1?`${u[w]} \xB7 line ${h.sites[0].line}`:u[w],selector:C.selector,path:h.sites[0].path,line:h.sites[0].line,element:C.element,usage:C.usage,states:C.states,alike:!0};return s.set(g,h.sites),g}),m={...c,title:r,axis:null,base:!1,path:a.sites[0].path,line:a.sites[0].line,markup:!0,places:a.sites.map(h=>({path:h.path,line:h.line})),...f.length?{modifiers:f}:{}};s.set(m,a.sites),n.push(m)}return{variants:n,sites:s}}var ls=1,cs=["style.new","state.changed","state.missing","token.unknown","value.hardcoded","native.element","prop.unknown","style.removed","guidance.rule"],Vt={"style.new":"block","state.changed":"block","state.missing":"block","token.unknown":"block","value.hardcoded":"block","native.element":"block","prop.unknown":"block","style.removed":"warn","guidance.rule":"warn"};function zt(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function as(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${zt(t)}`}function le(e){return e.context?`${e.state} @ ${e.context}`:e.state}var xi=/var\(\s*(--[\w-]+)/g;function ki(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(xi))t.add(r[1]);return[...t].sort()}function wi(e){let t=new Map;for(let n of e)t.set(n.property,n.value.trim());return[...t].map(([n,s])=>({property:n,value:s})).sort((n,s)=>n.property.localeCompare(s.property))}function vi(e){let t=new Map;for(let n of e){let s=le(n),r=t.get(s),o=wi([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function $i(e){let t=[{path:e.path,line:e.line},...e.places??[]],n=new Set;return t.filter(s=>{let r=`${s.path}:${s.line}`;return n.has(r)?!1:(n.add(r),!0)})}function us(e){let t=new Map,n=(s,r,o)=>{let i=as(s),a=t.get(i),l=vi([...a?Ci(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(le(u))||c.set(le(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:ki(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=as(s);if(n({kind:"look",title:s.title,selector:s.selector,path:s.path,axis:s.axis,...s.usage.via?{selectedBy:s.usage.via}:{},...s.element?{element:s.element.tag}:{},...s.markup?{markup:!0}:{}},s.states,s.line),s.places?.length){let o=t.get(r);o&&(o.places=s.places)}for(let o of s.modifiers??[])n({kind:"modifier",title:`${s.title} \xB7 ${o.title}`,selector:o.selector,path:o.path,hostId:r,...o.usage.via?{selectedBy:o.usage.via}:{},...o.element?{element:o.element.tag}:{},...o.alike?{markup:!0}:{}},o.states,o.line);for(let o of s.contexts??[])n({kind:"context",title:`${s.title} in ${o.selector}`,selector:o.selector,path:o.path,hostId:r,role:o.role,...o.element?{element:o.element.tag}:{}},o.states,o.line)}return t}function Ci(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function Si(e){let t=new Map,n=/^:root\{([^}]*)\}/.exec(e);if(!n)return t;for(let s of n[1].split(";")){let r=s.indexOf(":");if(r<=0)continue;let o=s.slice(0,r).trim();o.startsWith("--")&&t.set(o,s.slice(r+1).trim())}return t}var Ft=/^(\d+) native /;function Ri(e,t){if(e==="native")return`native:${t.refs[0]?.path??""}`;if(t.styles?.length){let n=[...new Set(t.refs.map(s=>s.path))].sort().join(",");return`${e}:${[...t.styles].sort().join(",")}:${n}`}return`${e}:${t.refs.map(n=>n.path).join(",")}:${t.message}`}var nt={hardcoded:"value.hardcoded",native:"native.element",props:"prop.unknown"},Ai=new Set(Object.values(nt));function ps(e){let t=e.find(n=>n.toLowerCase()==="button");return t||(e.length===1?e[0]:null)}var _i={"value.hardcoded":()=>"Replace each literal with the spec token named, or with a spec token for that property.","native.element":e=>{let t=ps(e.components);return t?`Render ${t} instead of a raw <button>, or ask for an exception.`:"Use a spec button instead of a raw <button>, or ask for an exception."},"prop.unknown":()=>"Use one of the values listed, or ask for an exception to add the look."};function fs(e){let t=[];for(let n of e.audit)if(n.status==="attention")for(let s of n.findings)t.push({check:n.id,finding:s,key:Ri(n.id,s)});return t}function Tt(e){return`${e.path}#${zt(e.text.replace(/\s+/g," ").trim())}`}function ds(e,t={}){let n=Si(e.previewCss),s=[...us(e.variants).values()].map(({line:i,stateLines:a,places:l,...c})=>c),r=new Set(e.tokens.map(i=>i.name)),o=[];for(let i of e.guidance.files)if(i.kind!=="record")for(let a of i.passages)a.rule&&o.push({path:a.path,headings:a.headings,text:a.text,styles:a.styles});return{schema:ls,concept:e.concept,label:e.label,version:t.version??0,sourceRef:e.repo.ref,publishedAt:t.publishedAt??null,components:[...e.components].sort(),tokens:[...new Set([...e.tokens.map(i=>i.name),...s.flatMap(i=>i.tokens).filter(i=>!r.has(i))])].map(i=>{let a=n.get(i);return a===void 0?{name:i}:{name:i,value:a}}).sort((i,a)=>i.name.localeCompare(a.name)),styles:s,rules:o,content:e.content.map(i=>i.id),acceptedFindings:fs(e).filter(({check:i})=>i in nt).map(({check:i,finding:a,key:l})=>({check:i,key:l,message:a.message})),settings:{severity:{...Vt,...t.settings?.severity??{}}}}}function Ii(e,t){let n=new Map(e.map(o=>[o.property,o.value])),s=new Map(t.map(o=>[o.property,o.value])),r=[];for(let[o,i]of s){let a=n.get(o);a===void 0?r.push(`added ${o}: ${i}`):a!==i&&r.push(`${o}: ${a} \u2192 ${i}`)}for(let[o,i]of n)s.has(o)||r.push(`removed ${o}: ${i}`);return r}function Ut(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function Bt(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function Ei(e,t){let n=e.replace(/^--/,"").split("-")[0]??"",s=n?t.filter(r=>r.startsWith(`--${n}`)):[];return(s.length?s:t).slice(0,3)}function gs(e,t){let n={...Vt,...t.settings.severity},s=[],r=(p,d="")=>{s.push({id:`${p.kind}:${zt(`${p.styleId??""}|${p.state??""}|${d}`)}`,severity:n[p.kind],...p})},o=us(e.variants),i=new Map(t.styles.map(p=>[p.id,p])),a=t.styles.filter(p=>p.kind==="look"),l=new Set([...t.tokens.map(p=>p.name),...t.styles.flatMap(p=>p.tokens)]),c=[...l],u=new Map;for(let p of t.styles)p.markup&&u.set(Fe(p.states),p);let f=new Map;for(let p of o.values()){if(!p.markup)continue;let d=u.get(Fe(p.states));d&&f.set(p.id,d)}let m=new Set([...f.values()].map(p=>p.id)),h=p=>p.markup?`${p.title} (as in ${p.path})`:p.selector;for(let p of o.values()){if(i.has(p.id)||f.has(p.id))continue;let d=p.hostId?i.get(p.hostId):void 0,y=p.markup?a.filter(R=>R.markup):a,k=y.filter(R=>R.path===p.path),x=(k.length?k:y).map(h),v=p.markup?`This one-off ${p.element??"button"} (${Bt((p.states[0]?.declarations??[]).map(R=>`${R.property}: ${R.value}`),3)})`:p.selector,E=ps(t.components),j=p.markup?E?`render ${E} with a spec look,`:x.length?`copy ${Bt(x,3)},`:"use a spec style,":d?`restyle ${d.selector} only through spec modifiers`:x.length?`use ${Bt(x,3)},`:"use a spec style,";r({kind:"style.new",styleId:p.id,title:`${p.title} is not in the spec`,baseline:null,observed:{declarations:p.states[0]?.declarations??[],states:p.states,...p.markup?{markup:!0}:{}},refs:$i(p),fix:`${v} is not in the spec; ${j} or ask for an exception.`},p.markup?Fe(p.states):p.selector)}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Map(d.states.map(k=>[le(k),k]));for(let k of p.states){let x=le(k),v=y.get(x),E=Ii(v?.declarations??[],k.declarations);E.length!==0&&r({kind:"state.changed",styleId:p.id,title:v?`${p.title}: ${x} changed`:`${p.title}: new ${x} state`,state:x,baseline:v?{declarations:v.declarations}:null,observed:{declarations:k.declarations},refs:[{path:p.path,line:p.stateLines.get(x)??p.line}],fix:v?`Restore ${p.selector} ${x} to the spec (${E.slice(0,3).join("; ")}), or ask for an exception.`:`${x} is not a spec state of ${p.selector}; remove it, or ask for an exception.`},Ut(k.declarations))}}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Set(p.states.map(le));for(let k of d.states){let x=le(k);y.has(x)||r({kind:"state.missing",styleId:p.id,title:`${p.title}: ${x} state is missing`,state:x,baseline:{declarations:k.declarations},observed:null,refs:[{path:p.path,line:p.line}],fix:`Define ${p.selector} ${x} again: ${Ut(k.declarations)||"as in the spec"}.`})}}for(let p of o.values())for(let d of p.tokens){if(l.has(d))continue;let y=Ei(d,c);r({kind:"token.unknown",styleId:p.id,title:`${p.title} reads ${d}, which is not a spec token`,baseline:null,observed:{token:d},refs:[{path:p.path,line:p.line}],fix:y.length?`Use a spec token such as ${y.join(", ")} instead of ${d}, or ask for an exception.`:`${d} is not a spec token; ask for an exception to add it.`},d)}let w=new Map;for(let p of t.acceptedFindings)w.set(p.key,[...w.get(p.key)??[],p]);let C=fs(e).filter(({check:p})=>p in nt);for(let p of cs)if(Ai.has(p))for(let{check:d,finding:y,key:k}of C){if(nt[d]!==p)continue;let x=w.get(k)??[];if(x.some(R=>!ji(d,R.message,y.message)))continue;let v=x[0],E=y.styles?.[0],j=E?[...o.values()].find(R=>R.title===E):void 0;if(p==="native.element"){let R=y.refs[0]?.path??"",A=Number(Ft.exec(y.message)?.[1]??"1");if(s.filter(N=>N.kind==="style.new"&&N.observed?.markup===!0&&N.refs.some(V=>V.path===R)).length>=A)continue}r({kind:p,styleId:j?.id??null,title:y.message,baseline:v?{message:v.message}:null,observed:{message:y.message,...p==="native.element"?{element:"button"}:{}},waiverKey:k,refs:y.refs.map(({path:R,line:A})=>({path:R,line:A})),fix:_i[p](t)},k)}for(let p of t.styles)o.has(p.id)||m.has(p.id)||r({kind:"style.removed",styleId:p.id,title:p.markup?`${p.title} is in the spec but no longer written anywhere`:`${p.title} is in the spec but no longer in CSS`,baseline:{declarations:p.states[0]?.declarations??[]},observed:null,refs:[{path:p.path,line:0}],fix:p.markup?`Nothing renders ${p.title} any more; ask the designer to retire it from the spec if that is intended.`:`Restore ${p.selector} in ${p.path}, or ask the designer to retire it from the spec.`});let $=new Map(e.guidance.files.map(p=>[p.path,p])),g=new Set;for(let p of e.guidance.files)for(let d of p.passages)d.rule&&g.add(Tt(d));for(let p of t.rules){if(g.has(Tt(p)))continue;let d=$.get(p.path);d&&d.total>d.passages.length||r({kind:"guidance.rule",styleId:null,title:`A written rule in ${p.path} changed or was removed`,baseline:{text:p.text},observed:null,refs:[{path:p.path,line:0}],fix:`Restore the rule under ${p.headings.join(" \u203A ")||p.path}, or publish a new spec.`},Tt(p))}return s}function ji(e,t,n){if(t===n)return!1;if(e==="native"){let s=Ft.exec(t)?.[1],r=Ft.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}var Pi={product:"Gruum button spec",what:"The designer-published spec for this repository's buttons. Write buttons against it; drift from it is checked deterministically.",howToUse:["Use the components listed in `components`; do not render a raw <button> where a component exists.","Pick a look from `looks`. `selectedBy` says which prop or attribute value selects it.","Use only the tokens listed in `tokens`. Do not write a literal color or size a token already has.","Follow `rules`; they are the repository's written rules, quoted.","Do not add a look, modifier, or state, and do not change a state's declarations.",'If the spec has no button for the job, stop and ask the user: "You asked for a design element that is not in the spec. 1. Use an existing spec style for it. 2. Add it as it is and request review." Do not write that look, and do not request a review, until they answer. After they choose review, call gruum_request_exception, or run `npx @gruum/cli request <drift id> --reason "..."`. Never edit generated Gruum files, including .gruum/project.json, to make a check pass.']};function Wt(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...Pi,drift:cs.map(n=>({kind:n,severity:e.settings.severity[n]??Vt[n]}))},spec:{concept:e.concept,version:e.version,sourceRef:e.sourceRef,components:e.components,looks:e.styles.filter(n=>n.kind==="look").map(n=>({title:n.title,selector:n.selector,path:n.path,...n.selectedBy?{selectedBy:n.selectedBy}:{},tokens:n.tokens,states:Object.fromEntries(n.states.map(s=>[le(s),Ut(s.declarations)])),modifiers:t(n.id,"modifier"),contexts:t(n.id,"context")})),tokens:e.tokens,rules:e.rules.map(n=>({path:n.path,under:n.headings.join(" \u203A "),text:n.text}))}}}function Ue(e){if(!e||typeof e!="object")return null;let t=e;return t.schema!==ls||typeof t.concept!="string"||!Array.isArray(t.styles)||!Array.isArray(t.tokens)||!Array.isArray(t.acceptedFindings)||!Array.isArray(t.rules)||!t.settings?.severity?null:t}function Li(e){let t=new Map;for(let n of e){let s=n.refs[0]?.path??"(no file)";t.set(s,[...t.get(s)??[],n])}return[...t].sort(([n],[s])=>n.localeCompare(s))}function Gt(e,t){if(t.length===0)return e;let n=new Set(t.map(s=>s.replace(/^\.\//,"")));return e.filter(s=>s.refs.some(r=>n.has(r.path)))}function ms(e,t,n={}){let s=[];if(e.length===0)return s.push(`No drift against spec v${t.baselineVersion} (${t.files} files indexed, ${t.skipped} skipped).`),s.join(`
2
+ import{chmodSync as gu,existsSync as De,rmSync as Xn}from"node:fs";import T from"node:path";import{createInterface as Yn}from"node:readline";function Be(e){return e instanceof Error&&e.name==="AbortError"&&(e.message==="Aborted with Ctrl+C"||e.message==="Aborted with Ctrl+D")}function _e(e){e.on("SIGINT",()=>{process.stderr.write(`
3
+ `),process.exit(130)})}var ui=new Set(["display","position","inset","top","right","bottom","left","z-index","order","flex","flex-grow","flex-shrink","flex-basis","align-self","justify-self","align-items","justify-content","place-items","place-content","gap","text-align","min-width","max-width","overflow","white-space","cursor"]),pi=new Set(["page","index","layout","route","default"]);function fi(e){return ui.has(e.property)||/^(margin|transition|grid-)/.test(e.property)?!0:(e.property==="width"||e.property==="height")&&/^(100%|auto)$/.test(e.value)}function Fe(e){return e.flatMap(t=>t.declarations.filter(n=>!fi(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function di(e){return Fe(e.states)}function gi(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function rs(e){return e.charAt(0).toUpperCase()+e.slice(1)}function mi(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return rs(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return rs((n??e.value).replace(/-/g," "))}function hi(e){let t=gi(e),n=u=>t.findLast(f=>f.property===u),s=n("background-color")??n("background"),r=s!==void 0&&!/^(transparent|none|initial|inherit)\b/.test(s.value),o=n("border-width")?.value,i=o!==void 0&&!/^0(px)?$/.test(o)&&n("border-style")?.value!=="none",a=n("width")?.value,l=a!==void 0&&a===n("height")?.value&&!/^(auto|100%|fit-content)$/.test(a);return n("inset")?.value==="0"?"Overlay":i?l?"Outline icon":"Outline":r?`${mi(s)} ${l?"icon":"fill"}`:l?"Icon":t.some(u=>u.property.startsWith("padding")||u.property==="border-radius"||u.property==="height"&&u.value!=="auto")?"Ghost":"Text"}function bi(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return pi.has(n)&&s?`${s}/${n}`:n}function yi(e){let t=[...new Set(e.map(s=>bi(s.path)))],n=t.slice(0,2).join(", ");return t.length>2?`${n} +${t.length-2}`:n}var os=(e,t)=>e.path.localeCompare(t.path)||e.line-t.line;function is(e){let t=new Map;for(let r of e){let o=hi(r.variant),i=t.get(o)??new Map,a=di(r.variant),l=i.get(a)??{looks:[],sites:[]};l.looks.push(r.variant),l.sites.push(...r.sites),i.set(a,l),t.set(o,i)}let n=[],s=new Map;for(let[r,o]of t){let i=[...o.values()];for(let h of i)h.sites.sort(os);i.sort((h,w)=>w.sites.length-h.sites.length||os(h.sites[0],w.sites[0]));let[a,...l]=i,c=a.looks[0],u=l.map(h=>yi(h.sites)),f=l.map((h,w)=>{let C=h.looks[0],g={title:u.filter(p=>p===u[w]).length>1?`${u[w]} \xB7 line ${h.sites[0].line}`:u[w],selector:C.selector,path:h.sites[0].path,line:h.sites[0].line,element:C.element,usage:C.usage,states:C.states,alike:!0};return s.set(g,h.sites),g}),m={...c,title:r,axis:null,base:!1,path:a.sites[0].path,line:a.sites[0].line,markup:!0,places:a.sites.map(h=>({path:h.path,line:h.line})),...f.length?{modifiers:f}:{}};s.set(m,a.sites),n.push(m)}return{variants:n,sites:s}}var ls=1,cs=["style.new","state.changed","state.missing","token.unknown","value.hardcoded","native.element","prop.unknown","style.removed","guidance.rule"],Vt={"style.new":"block","state.changed":"block","state.missing":"block","token.unknown":"block","value.hardcoded":"block","native.element":"block","prop.unknown":"block","style.removed":"warn","guidance.rule":"warn"};function zt(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function as(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${zt(t)}`}function le(e){return e.context?`${e.state} @ ${e.context}`:e.state}var xi=/var\(\s*(--[\w-]+)/g;function ki(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(xi))t.add(r[1]);return[...t].sort()}function wi(e){let t=new Map;for(let n of e)t.set(n.property,n.value.trim());return[...t].map(([n,s])=>({property:n,value:s})).sort((n,s)=>n.property.localeCompare(s.property))}function vi(e){let t=new Map;for(let n of e){let s=le(n),r=t.get(s),o=wi([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function $i(e){let t=[{path:e.path,line:e.line},...e.places??[]],n=new Set;return t.filter(s=>{let r=`${s.path}:${s.line}`;return n.has(r)?!1:(n.add(r),!0)})}function us(e){let t=new Map,n=(s,r,o)=>{let i=as(s),a=t.get(i),l=vi([...a?Ci(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(le(u))||c.set(le(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:ki(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=as(s);if(n({kind:"look",title:s.title,selector:s.selector,path:s.path,axis:s.axis,...s.usage.via?{selectedBy:s.usage.via}:{},...s.element?{element:s.element.tag}:{},...s.markup?{markup:!0}:{}},s.states,s.line),s.places?.length){let o=t.get(r);o&&(o.places=s.places)}for(let o of s.modifiers??[])n({kind:"modifier",title:`${s.title} \xB7 ${o.title}`,selector:o.selector,path:o.path,hostId:r,...o.usage.via?{selectedBy:o.usage.via}:{},...o.element?{element:o.element.tag}:{},...o.alike?{markup:!0}:{}},o.states,o.line);for(let o of s.contexts??[])n({kind:"context",title:`${s.title} in ${o.selector}`,selector:o.selector,path:o.path,hostId:r,role:o.role,...o.element?{element:o.element.tag}:{}},o.states,o.line)}return t}function Ci(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function Si(e){let t=new Map,n=/^:root\{([^}]*)\}/.exec(e);if(!n)return t;for(let s of n[1].split(";")){let r=s.indexOf(":");if(r<=0)continue;let o=s.slice(0,r).trim();o.startsWith("--")&&t.set(o,s.slice(r+1).trim())}return t}var Ft=/^(\d+) native /;function Ri(e,t){if(e==="native")return`native:${t.refs[0]?.path??""}`;if(t.styles?.length){let n=[...new Set(t.refs.map(s=>s.path))].sort().join(",");return`${e}:${[...t.styles].sort().join(",")}:${n}`}return`${e}:${t.refs.map(n=>n.path).join(",")}:${t.message}`}var nt={hardcoded:"value.hardcoded",native:"native.element",props:"prop.unknown"},Ai=new Set(Object.values(nt));function ps(e){let t=e.find(n=>n.toLowerCase()==="button");return t||(e.length===1?e[0]:null)}var _i={"value.hardcoded":()=>"Replace each literal with the spec token named, or with a spec token for that property.","native.element":e=>{let t=ps(e.components);return t?`Render ${t} instead of a raw <button>, or ask for an exception.`:"Use a spec button instead of a raw <button>, or ask for an exception."},"prop.unknown":()=>"Use one of the values listed, or ask for an exception to add the look."};function fs(e){let t=[];for(let n of e.audit)if(n.status==="attention")for(let s of n.findings)t.push({check:n.id,finding:s,key:Ri(n.id,s)});return t}function Tt(e){return`${e.path}#${zt(e.text.replace(/\s+/g," ").trim())}`}function ds(e,t={}){let n=Si(e.previewCss),s=[...us(e.variants).values()].map(({line:i,stateLines:a,places:l,...c})=>c),r=new Set(e.tokens.map(i=>i.name)),o=[];for(let i of e.guidance.files)if(i.kind!=="record")for(let a of i.passages)a.rule&&o.push({path:a.path,headings:a.headings,text:a.text,styles:a.styles});return{schema:ls,concept:e.concept,label:e.label,version:t.version??0,sourceRef:e.repo.ref,publishedAt:t.publishedAt??null,components:[...e.components].sort(),tokens:[...new Set([...e.tokens.map(i=>i.name),...s.flatMap(i=>i.tokens).filter(i=>!r.has(i))])].map(i=>{let a=n.get(i);return a===void 0?{name:i}:{name:i,value:a}}).sort((i,a)=>i.name.localeCompare(a.name)),styles:s,rules:o,content:e.content.map(i=>i.id),acceptedFindings:fs(e).filter(({check:i})=>i in nt).map(({check:i,finding:a,key:l})=>({check:i,key:l,message:a.message})),settings:{severity:{...Vt,...t.settings?.severity??{}}}}}function Ei(e,t){let n=new Map(e.map(o=>[o.property,o.value])),s=new Map(t.map(o=>[o.property,o.value])),r=[];for(let[o,i]of s){let a=n.get(o);a===void 0?r.push(`added ${o}: ${i}`):a!==i&&r.push(`${o}: ${a} \u2192 ${i}`)}for(let[o,i]of n)s.has(o)||r.push(`removed ${o}: ${i}`);return r}function Ut(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function Bt(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function Ii(e,t){let n=e.replace(/^--/,"").split("-")[0]??"",s=n?t.filter(r=>r.startsWith(`--${n}`)):[];return(s.length?s:t).slice(0,3)}function gs(e,t){let n={...Vt,...t.settings.severity},s=[],r=(p,d="")=>{s.push({id:`${p.kind}:${zt(`${p.styleId??""}|${p.state??""}|${d}`)}`,severity:n[p.kind],...p})},o=us(e.variants),i=new Map(t.styles.map(p=>[p.id,p])),a=t.styles.filter(p=>p.kind==="look"),l=new Set([...t.tokens.map(p=>p.name),...t.styles.flatMap(p=>p.tokens)]),c=[...l],u=new Map;for(let p of t.styles)p.markup&&u.set(Fe(p.states),p);let f=new Map;for(let p of o.values()){if(!p.markup)continue;let d=u.get(Fe(p.states));d&&f.set(p.id,d)}let m=new Set([...f.values()].map(p=>p.id)),h=p=>p.markup?`${p.title} (as in ${p.path})`:p.selector;for(let p of o.values()){if(i.has(p.id)||f.has(p.id))continue;let d=p.hostId?i.get(p.hostId):void 0,y=p.markup?a.filter(R=>R.markup):a,k=y.filter(R=>R.path===p.path),x=(k.length?k:y).map(h),v=p.markup?`This one-off ${p.element??"button"} (${Bt((p.states[0]?.declarations??[]).map(R=>`${R.property}: ${R.value}`),3)})`:p.selector,I=ps(t.components),j=p.markup?I?`render ${I} with a spec look,`:x.length?`copy ${Bt(x,3)},`:"use a spec style,":d?`restyle ${d.selector} only through spec modifiers`:x.length?`use ${Bt(x,3)},`:"use a spec style,";r({kind:"style.new",styleId:p.id,title:`${p.title} is not in the spec`,baseline:null,observed:{declarations:p.states[0]?.declarations??[],states:p.states,...p.markup?{markup:!0}:{}},refs:$i(p),fix:`${v} is not in the spec; ${j} or ask for an exception.`},p.markup?Fe(p.states):p.selector)}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Map(d.states.map(k=>[le(k),k]));for(let k of p.states){let x=le(k),v=y.get(x),I=Ei(v?.declarations??[],k.declarations);I.length!==0&&r({kind:"state.changed",styleId:p.id,title:v?`${p.title}: ${x} changed`:`${p.title}: new ${x} state`,state:x,baseline:v?{declarations:v.declarations}:null,observed:{declarations:k.declarations},refs:[{path:p.path,line:p.stateLines.get(x)??p.line}],fix:v?`Restore ${p.selector} ${x} to the spec (${I.slice(0,3).join("; ")}), or ask for an exception.`:`${x} is not a spec state of ${p.selector}; remove it, or ask for an exception.`},Ut(k.declarations))}}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Set(p.states.map(le));for(let k of d.states){let x=le(k);y.has(x)||r({kind:"state.missing",styleId:p.id,title:`${p.title}: ${x} state is missing`,state:x,baseline:{declarations:k.declarations},observed:null,refs:[{path:p.path,line:p.line}],fix:`Define ${p.selector} ${x} again: ${Ut(k.declarations)||"as in the spec"}.`})}}for(let p of o.values())for(let d of p.tokens){if(l.has(d))continue;let y=Ii(d,c);r({kind:"token.unknown",styleId:p.id,title:`${p.title} reads ${d}, which is not a spec token`,baseline:null,observed:{token:d},refs:[{path:p.path,line:p.line}],fix:y.length?`Use a spec token such as ${y.join(", ")} instead of ${d}, or ask for an exception.`:`${d} is not a spec token; ask for an exception to add it.`},d)}let w=new Map;for(let p of t.acceptedFindings)w.set(p.key,[...w.get(p.key)??[],p]);let C=fs(e).filter(({check:p})=>p in nt);for(let p of cs)if(Ai.has(p))for(let{check:d,finding:y,key:k}of C){if(nt[d]!==p)continue;let x=w.get(k)??[];if(x.some(R=>!ji(d,R.message,y.message)))continue;let v=x[0],I=y.styles?.[0],j=I?[...o.values()].find(R=>R.title===I):void 0;if(p==="native.element"){let R=y.refs[0]?.path??"",A=Number(Ft.exec(y.message)?.[1]??"1");if(s.filter(N=>N.kind==="style.new"&&N.observed?.markup===!0&&N.refs.some(V=>V.path===R)).length>=A)continue}r({kind:p,styleId:j?.id??null,title:y.message,baseline:v?{message:v.message}:null,observed:{message:y.message,...p==="native.element"?{element:"button"}:{}},waiverKey:k,refs:y.refs.map(({path:R,line:A})=>({path:R,line:A})),fix:_i[p](t)},k)}for(let p of t.styles)o.has(p.id)||m.has(p.id)||r({kind:"style.removed",styleId:p.id,title:p.markup?`${p.title} is in the spec but no longer written anywhere`:`${p.title} is in the spec but no longer in CSS`,baseline:{declarations:p.states[0]?.declarations??[]},observed:null,refs:[{path:p.path,line:0}],fix:p.markup?`Nothing renders ${p.title} any more; ask the designer to retire it from the spec if that is intended.`:`Restore ${p.selector} in ${p.path}, or ask the designer to retire it from the spec.`});let $=new Map(e.guidance.files.map(p=>[p.path,p])),g=new Set;for(let p of e.guidance.files)for(let d of p.passages)d.rule&&g.add(Tt(d));for(let p of t.rules){if(g.has(Tt(p)))continue;let d=$.get(p.path);d&&d.total>d.passages.length||r({kind:"guidance.rule",styleId:null,title:`A written rule in ${p.path} changed or was removed`,baseline:{text:p.text},observed:null,refs:[{path:p.path,line:0}],fix:`Restore the rule under ${p.headings.join(" \u203A ")||p.path}, or publish a new spec.`},Tt(p))}return s}function ji(e,t,n){if(t===n)return!1;if(e==="native"){let s=Ft.exec(t)?.[1],r=Ft.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}var Pi={product:"Gruum button spec",what:"The designer-published spec for this repository's buttons. Write buttons against it; drift from it is checked deterministically.",howToUse:["Use the components listed in `components`; do not render a raw <button> where a component exists.","Pick a look from `looks`. `selectedBy` says which prop or attribute value selects it.","Use only the tokens listed in `tokens`. Do not write a literal color or size a token already has.","Follow `rules`; they are the repository's written rules, quoted.","Do not add a look, modifier, or state, and do not change a state's declarations.",'If the spec has no button for the job, stop and ask the user: "You asked for a design element that is not in the spec. 1. Use an existing spec style for it. 2. Add it as it is and request review." Do not write that look, and do not request a review, until they answer. After they choose review, call gruum_request_exception, or run `npx @gruum/cli request <drift id> --reason "..."`. Never edit generated Gruum files, including .gruum/project.json, to make a check pass.']};function Wt(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...Pi,drift:cs.map(n=>({kind:n,severity:e.settings.severity[n]??Vt[n]}))},spec:{concept:e.concept,version:e.version,sourceRef:e.sourceRef,components:e.components,looks:e.styles.filter(n=>n.kind==="look").map(n=>({title:n.title,selector:n.selector,path:n.path,...n.selectedBy?{selectedBy:n.selectedBy}:{},tokens:n.tokens,states:Object.fromEntries(n.states.map(s=>[le(s),Ut(s.declarations)])),modifiers:t(n.id,"modifier"),contexts:t(n.id,"context")})),tokens:e.tokens,rules:e.rules.map(n=>({path:n.path,under:n.headings.join(" \u203A "),text:n.text}))}}}function Ue(e){if(!e||typeof e!="object")return null;let t=e;return t.schema!==ls||typeof t.concept!="string"||!Array.isArray(t.styles)||!Array.isArray(t.tokens)||!Array.isArray(t.acceptedFindings)||!Array.isArray(t.rules)||!t.settings?.severity?null:t}function Li(e){let t=new Map;for(let n of e){let s=n.refs[0]?.path??"(no file)";t.set(s,[...t.get(s)??[],n])}return[...t].sort(([n],[s])=>n.localeCompare(s))}function Gt(e,t){if(t.length===0)return e;let n=new Set(t.map(s=>s.replace(/^\.\//,"")));return e.filter(s=>s.refs.some(r=>n.has(r.path)))}function ms(e,t,n={}){let s=[];if(e.length===0)return s.push(`No drift against spec v${t.baselineVersion} (${t.files} files indexed, ${t.skipped} skipped).`),s.join(`
4
4
  `);for(let[o,i]of Li(e)){s.push(o);for(let a of i){let l=a.refs[0]?.line,c=n[a.id],u=c?`${a.severity}, exception ${c}`:a.severity;s.push(` ${l?`${l}: `:""}[${u}] ${a.kind} ${a.title}`),s.push(` fix: ${a.fix}`)}s.push("")}let r=e.filter(o=>o.severity==="block").length;return s.push(`${e.length} drift item${e.length===1?"":"s"} against spec v${t.baselineVersion}: ${r} block, ${e.length-r} warn (${t.files} files indexed, ${t.skipped} skipped).`),s.join(`
5
5
  `)}function hs(e){return{schema:1,checkedAt:e,baselineVersion:null,items:[],followups:{}}}function bs(e,t){if(!e||typeof e!="object")return hs(t);let n=e;return n.schema!==1||!Array.isArray(n.items)?hs(t):{schema:1,checkedAt:typeof n.checkedAt=="string"?n.checkedAt:t,baselineVersion:typeof n.baselineVersion=="number"?n.baselineVersion:null,items:n.items,followups:n.followups&&typeof n.followups=="object"?n.followups:{}}}function ze(e,t={}){return e.filter(n=>{if(n.severity!=="block")return!1;let s=t[n.id];return s!=="pending"&&s!=="accepted"})}var Ve={exceptions:!1,denyGit:[],maxFollowups:2};function ys(e){let t=e?.block===!0,n=Array.isArray(e?.denyGit)?e.denyGit.filter(r=>r==="commit"||r==="push"):t?["commit","push"]:Ve.denyGit,s=typeof e?.maxFollowups=="number"&&e.maxFollowups>=0?Math.floor(e.maxFollowups):Ve.maxFollowups;return{block:t,hooks:{...Ve,denyGit:n,maxFollowups:s}}}var Ht=8;function xs(e){let t=e.slice(0,Ht).map(n=>{let s=n.refs[0],r=s?` (${s.path}${s.line?`:${s.line}`:""})`:"";return`- ${n.title}${r}. ${n.fix}`});return e.length>Ht&&t.push(`- and ${e.length-Ht} more; run \`gruum check\`.`),t.join(`
6
6
  `)}var Kt="You asked for a design element that is not in the spec. 1. Use an existing spec style for it. 2. Add it as it is and request review.";function ks(e){let t="If gruum_button_spec is not available, read .gruum/baseline.json. Do not search the computer for a gruum program, and do not read the CLI package.",n=`Ask the user before you do anything else: "${Kt}" If they choose 1, restyle it to a spec look (call gruum_button_spec).`,s=e.exceptions?'If they choose 2, keep it and call gruum_request_exception with the drift id and a reason. If that tool is not available, run `npx @gruum/cli request <drift id> --reason "..."`. Do not request a review until they choose 2. Do not edit .gruum files.':"If they choose 2, stop and tell the developer which review you need. Do not invent a style.";return`${n} ${s} ${t}`}function ws(e,t,n=Ve,s={}){let r=ze(e.items,s),o=t.conversation_id??"",i=typeof t.loop_count=="number"?t.loop_count:e.followups[o]??0;return r.length===0||t.status==="aborted"?{output:{},ledger:e}:i>=n.maxFollowups?{output:{},ledger:e}:{output:{followup_message:`Gruum found ${r.length} button${r.length===1?"":"s"} that drift from the published spec:
@@ -10,8 +10,8 @@ ${ks(n)}`},ledger:{...e,followups:{...e.followups,[o]:i+1}}}}function Jt(e){let
10
10
  ${xs(o)}
11
11
 
12
12
  ${ks(n)}`}}var We="npx --no-install @gruum/cli",Cs="npx --yes @gruum/cli",qt="npx --yes @gruum/cli",$s={afterFileEdit:"after-file-edit",stop:"stop",beforeShellExecution:"before-shell"},Oi=/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+hook\s+(after-file-edit|stop|before-shell)\s*$/;function Zt(e){return typeof e=="string"&&Oi.test(e)}function st(e,t){if(e===null||e.trim()==="")return{ok:!0,value:{}};try{let n=JSON.parse(e);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,error:`${t} is not a JSON object; fix it or move it aside, then run init again.`}:{ok:!0,value:n}}catch{return{ok:!1,error:`${t} is not valid JSON; fix it or move it aside, then run init again.`}}}function rt(e){return`${JSON.stringify(e,null,2)}
13
- `}function Ss(e,t){let n=Xt(e),s=Yt(t);return!n.ok||!s.ok?!1:n.changed||s.changed}function Xt(e,t=We){let n=".cursor/hooks.json",s=st(e,n);if(!s.ok)return s;let r=s.value;if(r.hooks!==void 0&&(typeof r.hooks!="object"||Array.isArray(r.hooks)||r.hooks===null))return{ok:!1,error:`${n} has a "hooks" value that is not an object.`};let o={...r.hooks??{}},i=e===null||e.trim()==="";for(let a of Object.keys($s)){let l=o[a]??[];if(!Array.isArray(l))return{ok:!1,error:`${n} has a "${a}" value that is not an array.`};let c=`${t} hook ${$s[a]}`,u=l.filter(f=>Zt(f?.command));u.length===1&&u[0].command===c||(o[a]=[...l.filter(f=>!Zt(f?.command)),{command:c}],i=!0)}return i?{ok:!0,text:rt({version:r.version??1,...r,hooks:o}),changed:!0}:{ok:!0,text:e,changed:!1}}function Rs(e){let t=".cursor/hooks.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=st(e,t);if(!n.ok)return n;let s=n.value,r={...s.hooks??{}},o=!1;for(let a of Object.keys(r)){let l=r[a];if(!Array.isArray(l))continue;let c=l.filter(u=>!Zt(u?.command));c.length!==l.length&&(o=!0,c.length?r[a]=c:delete r[a])}if(!o)return{ok:!0,text:e,changed:!1};let i=Object.keys(s).every(a=>a==="version"||a==="hooks");return Object.keys(r).length===0&&i?{ok:!0,text:"",changed:!0}:{ok:!0,text:rt({...s,hooks:r}),changed:!0}}function Mi(e){let[t,...n]=e.trim().split(/\s+/);return{command:t,args:[...n,"mcp"]}}function Yt(e,t=qt){let n=".cursor/mcp.json",s=st(e,n);if(!s.ok)return s;let r=s.value,o=r.mcpServers??{};if(typeof o!="object"||Array.isArray(o)||o===null)return{ok:!1,error:`${n} has an "mcpServers" value that is not an object.`};let i=Mi(t),a=o.gruum;return JSON.stringify(a)===JSON.stringify(i)?{ok:!0,text:e,changed:!1}:{ok:!0,text:rt({...r,mcpServers:{...o,gruum:i}}),changed:!0}}function As(e){let t=".cursor/mcp.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=st(e,t);if(!n.ok)return n;let s=n.value,r={...s.mcpServers??{}};return"gruum"in r?(delete r.gruum,Object.keys(r).length===0&&Object.keys(s).every(o=>o==="mcpServers")?{ok:!0,text:"",changed:!0}:{ok:!0,text:rt({...s,mcpServers:r}),changed:!0}):{ok:!0,text:e,changed:!1}}var Y=".cursor/rules/gruum-buttons.mdc",_s="<!-- written by gruum init cursor -->",Ni=20,Is=["**/*.css","**/*.scss","**/*.tsx","**/*.jsx"];function Es(e){let t=(e?.findings??[]).filter(s=>s.role==="implements"||s.role==="styles").map(s=>s.path).filter(s=>!/[,"\n]/.test(s)),n=[...new Set(t)].sort().slice(0,Ni);return n.length?n:Is}var Di=["The button spec for this repository lives in Gruum. Before writing or restyling a button, call the Cursor tool `gruum_button_spec`.","Before you stop, call the Cursor tool `gruum_check_buttons` and fix every drift item it reports to the spec.","If those tools are not available, read `.gruum/baseline.json` and follow that spec. Do not search the computer for a gruum program, and do not read the CLI package.",`When the request needs a button the spec does not have, stop and ask the user exactly: "${Kt}" Do not write that look, and do not request a review, until they answer. After they choose review, call gruum_request_exception, or run \`npx @gruum/cli request <drift id> --reason "..."\`. Never edit Gruum's generated files, including .gruum/project.json, to make a check pass.`];function Qt(e){return["---","description: Buttons in this repository follow a spec published in Gruum.",`globs: ${e.join(",")}`,"alwaysApply: false","---",_s,"",...Di,""].join(`
14
- `)}function js(e){let n=(e.match(/^globs: (.*)$/m)?.[1]??"").split(",").map(r=>r.trim()).filter(Boolean),s=Qt(n.length?n:Is);return{text:s,changed:s!==e}}function en(e){return e.includes(_s)}function Ti(e){let t=e.trim();if(!t||t.startsWith("#")||t.startsWith("!"))return!1;let n=t.replace(/\s+#.*$/,"").trim();return/^(?:\/|\*\*\/)?\.gruum(?:\/|\*\*|\/\*\*|\/\*)?$/.test(n)}function ot(e){let t=e??"";if(t.split(/\r?\n/).some(Ti))return{text:t,changed:!1};let n=t===""||t.endsWith(`
13
+ `}function Ss(e,t){let n=Xt(e),s=Yt(t);return!n.ok||!s.ok?!1:n.changed||s.changed}function Xt(e,t=We){let n=".cursor/hooks.json",s=st(e,n);if(!s.ok)return s;let r=s.value;if(r.hooks!==void 0&&(typeof r.hooks!="object"||Array.isArray(r.hooks)||r.hooks===null))return{ok:!1,error:`${n} has a "hooks" value that is not an object.`};let o={...r.hooks??{}},i=e===null||e.trim()==="";for(let a of Object.keys($s)){let l=o[a]??[];if(!Array.isArray(l))return{ok:!1,error:`${n} has a "${a}" value that is not an array.`};let c=`${t} hook ${$s[a]}`,u=l.filter(f=>Zt(f?.command));u.length===1&&u[0].command===c||(o[a]=[...l.filter(f=>!Zt(f?.command)),{command:c}],i=!0)}return i?{ok:!0,text:rt({version:r.version??1,...r,hooks:o}),changed:!0}:{ok:!0,text:e,changed:!1}}function Rs(e){let t=".cursor/hooks.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=st(e,t);if(!n.ok)return n;let s=n.value,r={...s.hooks??{}},o=!1;for(let a of Object.keys(r)){let l=r[a];if(!Array.isArray(l))continue;let c=l.filter(u=>!Zt(u?.command));c.length!==l.length&&(o=!0,c.length?r[a]=c:delete r[a])}if(!o)return{ok:!0,text:e,changed:!1};let i=Object.keys(s).every(a=>a==="version"||a==="hooks");return Object.keys(r).length===0&&i?{ok:!0,text:"",changed:!0}:{ok:!0,text:rt({...s,hooks:r}),changed:!0}}function Mi(e){let[t,...n]=e.trim().split(/\s+/);return{command:t,args:[...n,"mcp"]}}function Yt(e,t=qt){let n=".cursor/mcp.json",s=st(e,n);if(!s.ok)return s;let r=s.value,o=r.mcpServers??{};if(typeof o!="object"||Array.isArray(o)||o===null)return{ok:!1,error:`${n} has an "mcpServers" value that is not an object.`};let i=Mi(t),a=o.gruum;return JSON.stringify(a)===JSON.stringify(i)?{ok:!0,text:e,changed:!1}:{ok:!0,text:rt({...r,mcpServers:{...o,gruum:i}}),changed:!0}}function As(e){let t=".cursor/mcp.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=st(e,t);if(!n.ok)return n;let s=n.value,r={...s.mcpServers??{}};return"gruum"in r?(delete r.gruum,Object.keys(r).length===0&&Object.keys(s).every(o=>o==="mcpServers")?{ok:!0,text:"",changed:!0}:{ok:!0,text:rt({...s,mcpServers:r}),changed:!0}):{ok:!0,text:e,changed:!1}}var Y=".cursor/rules/gruum-buttons.mdc",_s="<!-- written by gruum init cursor -->",Ni=20,Es=["**/*.css","**/*.scss","**/*.tsx","**/*.jsx"];function Is(e){let t=(e?.findings??[]).filter(s=>s.role==="implements"||s.role==="styles").map(s=>s.path).filter(s=>!/[,"\n]/.test(s)),n=[...new Set(t)].sort().slice(0,Ni);return n.length?n:Es}var Di=["The button spec for this repository lives in Gruum. Before writing or restyling a button, call the Cursor tool `gruum_button_spec`.","Before you stop, call the Cursor tool `gruum_check_buttons` and fix every drift item it reports to the spec.","If those tools are not available, read `.gruum/baseline.json` and follow that spec. Do not search the computer for a gruum program, and do not read the CLI package.",`When the request needs a button the spec does not have, stop and ask the user exactly: "${Kt}" Do not write that look, and do not request a review, until they answer. After they choose review, call gruum_request_exception, or run \`npx @gruum/cli request <drift id> --reason "..."\`. Never edit Gruum's generated files, including .gruum/project.json, to make a check pass.`];function Qt(e){return["---","description: Buttons in this repository follow a spec published in Gruum.",`globs: ${e.join(",")}`,"alwaysApply: false","---",_s,"",...Di,""].join(`
14
+ `)}function js(e){let n=(e.match(/^globs: (.*)$/m)?.[1]??"").split(",").map(r=>r.trim()).filter(Boolean),s=Qt(n.length?n:Es);return{text:s,changed:s!==e}}function en(e){return e.includes(_s)}function Ti(e){let t=e.trim();if(!t||t.startsWith("#")||t.startsWith("!"))return!1;let n=t.replace(/\s+#.*$/,"").trim();return/^(?:\/|\*\*\/)?\.gruum(?:\/|\*\*|\/\*\*|\/\*)?$/.test(n)}function ot(e){let t=e??"";if(t.split(/\r?\n/).some(Ti))return{text:t,changed:!1};let n=t===""||t.endsWith(`
15
15
  `)?"":`
16
16
  `;return{text:`${t}${n}# Gruum local state
17
17
  .gruum/
@@ -26,7 +26,10 @@ ${ks(n)}`}}var We="npx --no-install @gruum/cli",Cs="npx --yes @gruum/cli",qt="np
26
26
  `;return{kind:s,path:r,text:`${i}${a}${n}
27
27
  `,changed:!0}}function Os(e){return/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+check\s+--staged\s*$/.test(e.trim())}function Ms(e){let t=e.split(`
28
28
  `),n=t.filter(o=>!Os(o)),s=n.length!==t.length,r=n.join(`
29
- `);return s&&/^(#!\/bin\/sh)?\s*$/.test(r)?{text:"",changed:s}:{text:r,changed:s}}var Ie=[{name:"login",args:[],blurb:"Sign this computer in",usage:"npx @gruum/cli login"},{name:"check",args:[],blurb:"Compare this checkout to the spec",usage:"npx @gruum/cli check"},{name:"baseline",args:["--write"],blurb:"Draft a spec from this checkout and publish it",usage:"npx @gruum/cli baseline --write"}];function Ns(e){let t=Ie.map((n,s)=>` ${s+1} ${n.name.padEnd(10)} ${n.blurb}`);return`gruum ${e}
29
+ `);return s&&/^(#!\/bin\/sh)?\s*$/.test(r)?{text:"",changed:s}:{text:r,changed:s}}var Fi=[" .d8888b.","d88P Y88b","888 888","888 888d888 888 888 888 888 88888b.d88b.",'888 88888 888P" 888 888 888 888 888 "888 "88b',"888 888 888 888 888 888 888 888 888 888","Y88b d88P 888 Y88b 888 Y88b 888 888 888 888",' "Y8888P88 888 "Y88888 "Y88888 888 888 888'].join(`
30
+ `),Ee=[{name:"login",args:[],blurb:"Sign this computer in",usage:"npx @gruum/cli login"},{name:"check",args:[],blurb:"Compare this checkout to the spec",usage:"npx @gruum/cli check"},{name:"baseline",args:["--write"],blurb:"Draft a spec from this checkout and publish it",usage:"npx @gruum/cli baseline --write"}];function Ns(e){let t=Ee.map((n,s)=>` ${s+1} ${n.name.padEnd(10)} ${n.blurb}`);return`${Fi}
31
+
32
+ gruum ${e}
30
33
 
31
34
  ${t.join(`
32
35
  `)}
@@ -36,33 +39,33 @@ Would you like to run a (c) check, (b) baseline, or (q) quit? `,Bs=`
36
39
  You have no baseline. Would you like to run it? (Enter) baseline, (q) quit: `;function Fs(e){return`
37
40
  ${e?"This repo uses Cursor and Claude. Gruum can set up Cursor.":"This repo uses Cursor."}
38
41
 
39
- Set up Gruum in Cursor so checks run while you edit and before a commit? (Enter) yes, (n) no: `}function Us(e){let t=e.trim().toLowerCase();return t==="n"||t==="no"||t==="q"||t==="quit"?"no":!t||t==="y"||t==="yes"?"yes":null}function Vs(e){let t=e.trim().toLowerCase();return!t||t==="q"||t==="quit"?"quit":t==="c"||t==="check"?"check":t==="b"||t==="baseline"?"baseline":null}function zs(e){let t=e.trim().toLowerCase();return t==="q"||t==="quit"||t==="n"||t==="no"?"quit":!t||t==="b"||t==="baseline"||t==="y"||t==="yes"?"baseline":null}function Ws(e){let t=e.trim().toLowerCase();if(!t)return"quit";let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Ie.length?Ie[n-1]:Ie.find(s=>s.name===t)??null}var Fi="2025-06-18",it=`Check before you finish. If the request needs a button the spec does not have, ask the user: "You asked for a design element that is not in the spec. 1. Use an existing spec style for it. 2. Add it as it is and request review." Do not request a review until they choose 2. Never edit Gruum's generated files, including .gruum/project.json, to make a check pass.`,at={gruum_button_spec:`The designer-published button spec for this repository: components, looks and how to select them, tokens, and written rules. Read it before writing or restyling a button. ${it}`,gruum_check_buttons:`Check the working tree's buttons against the spec and list drift items with a one-line fix each. Run it before you stop. ${it}`,gruum_request_exception:`Ask a designer to review one drift item. Call this only after the user chooses to add the element as it is and request review. Send the drift id from gruum_check_buttons and a reason. If this tool is missing, run \`npx @gruum/cli request <drift id> --reason "..."\` instead of reading the CLI package. ${it}`,gruum_exception_status:`Pending, accepted, or rejected for this branch's exception requests. Pass an id to read one. ${it}`};function Gs(e){return[{name:"gruum_button_spec",description:at.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:at.gruum_check_buttons,inputSchema:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Only report drift in these files (relative to the repository root). Omit to check everything."}},additionalProperties:!1},run:t=>{let n=Array.isArray(t.paths)?t.paths.filter(s=>typeof s=="string"):[];return e.check(n)}},{name:"gruum_request_exception",description:at.gruum_request_exception,inputSchema:{type:"object",properties:{driftId:{type:"string",description:"The drift item id from gruum_check_buttons."},reason:{type:"string",description:"Why the spec has no button for this job."}},required:["driftId","reason"],additionalProperties:!1},run:t=>e.request(typeof t.driftId=="string"?t.driftId:"",typeof t.reason=="string"?t.reason:"")},{name:"gruum_exception_status",description:at.gruum_exception_status,inputSchema:{type:"object",properties:{id:{type:"string",description:"One request id. Omit to list this branch."}},additionalProperties:!1},run:t=>e.status(typeof t.id=="string"?t.id:void 0)}]}function Ge(e,t){return{jsonrpc:"2.0",id:e,result:t}}function lt(e,t,n){return{jsonrpc:"2.0",id:e,error:{code:t,message:n}}}async function Hs(e,t,n){if(!e||typeof e!="object")return lt(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:lt(o,-32600,"Invalid request");let i=s.params??{};switch(s.method){case"initialize":{let a=i.protocolVersion;return Ge(o,{protocolVersion:typeof a=="string"?a:Fi,capabilities:{tools:{listChanged:!1}},serverInfo:n})}case"ping":return Ge(o,{});case"tools/list":return Ge(o,{tools:t.map(({name:a,description:l,inputSchema:c})=>({name:a,description:l,inputSchema:c}))});case"tools/call":{let a=t.find(c=>c.name===i.name);if(!a)return lt(o,-32602,`Unknown tool: ${String(i.name)}`);let l=i.arguments&&typeof i.arguments=="object"?i.arguments:{};try{let c=await a.run(l);return Ge(o,{content:[{type:"text",text:c.text}],isError:c.isError??!1})}catch(c){return Ge(o,{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0})}}default:return r?null:lt(o,-32601,`Method not found: ${s.method}`)}}var Ui=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,Vi=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,zi=/\.(png|jpe?g|gif|webp|avif|ico|icns|bmp|tiff?|svgz|woff2?|ttf|otf|eot|mp[34]|wav|ogg|webm|mov|zip|gz|tgz|bz2|7z|rar|jar|pdf|docx?|xlsx?|pptx?|exe|dll|so|dylib|wasm|bin|dat|sqlite|db|psd|ai|sketch|fig)$/i,Wi=/(^|\/)\.gruum\//;function tn(e){return!Ui.test(`${e}/`)&&!Wi.test(`${e}/`)}function nn(e,t){return Vi.test(e)||zi.test(e)?!1:t<=3e5}function Ks(e){let t=Math.min(e.length,8e3);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}var Gi=/\.(css|scss|sass|less|styl|tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx?|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2|json)$/i;function Js(e){return Gi.test(e)}function sn(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function rn(e,t){let n=sn(t),s=e.replace(/\\/g,"/");return n?s.startsWith(`${n}/`)?s.slice(n.length+1):null:s}function Zs(e,t,n){let s=new Map(e);for(let r of t){let o=rn(r.path,n);o===null||!tn(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):nn(o,r.content.length)&&s.set(o,r.content))}return s}function qs(e){let t=e.split("\0").filter(Boolean),n=[];for(let s=0;s<t.length;s++){let r=t[s];if(/^[RC]/.test(r)){let i=t[++s],a=t[++s];r.startsWith("R")&&i&&n.push({path:i,deleted:!0}),a&&n.push({path:a,deleted:!1});continue}let o=t[++s];o&&n.push({path:o,deleted:r.startsWith("D")})}return n}function ct(e){let t=/^(?:git@|ssh:\/\/git@|https?:\/\/(?:[^@/]+@)?)github\.com[:/]([^/\s]+)\/([^/\s]+?)(?:\.git)?\/?$/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}var Xs=e=>e.replace(/\\(.)/g,"$1");function Hi(e){let t=e;for(;;){let n=/:(?:global|local)\(/i.exec(t);if(!n)break;let s=0,r=-1;for(let i=n.index+n[0].length-1;i<t.length;i++){let a=t[i];if(a==="(")s++;else if(a===")"&&--s===0){r=i;break}}if(r<0)break;let o=t.slice(n.index+n[0].length,r).trim();t=`${t.slice(0,n.index)}${o}${t.slice(r+1)}`}return t.replace(/:(?:global|local)(?=\s|$)/gi,"").trim()}var on=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function er(e){let t=[];on.lastIndex=0;let n=0;for(;n<e.length;){on.lastIndex=n;let s=on.exec(e);if(!s||s.index!==n)return null;let r=s[0];if(n+=r.length,r==="*")t.push({kind:"universal",raw:r});else if(s[1]!==void 0)t.push({kind:"class",raw:r,name:Xs(s[1])});else if(s[2]!==void 0)t.push({kind:"id",raw:r,name:Xs(s[2])});else if(s[3]!==void 0)t.push({kind:"attr",raw:r,name:s[3],op:s[4]??null,value:s[4]?s[5]??s[6]??s[7]??"":null});else if(s[8]!==void 0)t.push({kind:"pseudoElement",raw:r,name:s[8].toLowerCase()});else if(s[9]!==void 0){let o=s[9].toLowerCase();/^(?:before|after|first-line|first-letter)$/.test(o)?t.push({kind:"pseudoElement",raw:r,name:o}):t.push({kind:"pseudo",raw:r,name:o,args:s[10]?s[10].slice(1,-1).trim():null})}else if(t.length===0)t.push({kind:"tag",raw:r,name:r.toLowerCase()});else return null}return t.length?t:null}function Q(e){let t=Hi(e),n=[],s=0,r=0,o=null,i=!0,a=l=>{let c=t.slice(r,l).trim();if(!c)return!0;let u=er(c);return u?(n.push({combinator:i?null:o??" ",simples:u}),i=!1,o=null,!0):!1};for(let l=0;l<t.length;l++){let c=t[l];if(c==="("||c==="[")s++;else if(c===")"||c==="]")s=Math.max(0,s-1);else if(s===0&&(c===">"||c==="+"||c==="~")){if(!a(l)||o)return null;o=c,r=l+1}else if(s===0&&/\s/.test(c)){if(!a(l))return null;r=l+1}}return!a(t.length)||o?null:n.length?n:null}function He(e){return e.map(t=>t.raw).join("")}function Ke(e){return e.map((t,n)=>{let s=He(t.simples);return n===0?s:t.combinator===" "?` ${s}`:` ${t.combinator} ${s}`}).join("")}function W(e){let t=[],n=0,s=0;for(let r=0;r<e.length;r++){let o=e[r];o==="("||o==="["?n++:o===")"||o==="]"?n=Math.max(0,n-1):o===","&&n===0&&(t.push(e.slice(s,r).trim()),s=r+1)}return t.push(e.slice(s).trim()),t.filter(Boolean)}var tr=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Ys(e,t){let n=e.toLowerCase();return t.some(s=>n.includes(s.toLowerCase()))}function an(e,t){let n=t.excludeClassKeywords;if(!n?.length)return!1;let s=new Set(n.flatMap(r=>[r.toLowerCase(),`${r.toLowerCase()}s`]));return e.some(r=>r.kind==="class"&&tr(r.name).some(o=>s.has(o)))}var Ki=new Set(["html","body"]),Ji=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function pt(e,t){for(let n of e)switch(n.kind){case"tag":if(t.elements.includes(n.name))return!0;break;case"class":if(Ys(n.name,t.classKeywords))return!0;break;case"attr":if(n.name==="role"&&n.value!==null&&t.roles.includes(n.value.toLowerCase())||n.name==="data-component"&&n.value!==null&&Ys(n.value,t.classKeywords))return!0;break;case"pseudo":if((n.name==="is"||n.name==="where")&&n.args){let s=W(n.args).map(Q);if(s.length>0&&s.every(r=>r!==null&&pt(r[r.length-1].simples,t)))return!0}break;default:break}return!1}function nr(e){return e.some(n=>n.kind==="universal")?e.length===1:e.some(n=>n.kind==="tag"&&Ki.has(n.name))?!0:!e.some(n=>n.kind==="tag"||n.kind==="class"||n.kind==="attr"||n.kind==="id"||n.kind==="pseudo"&&(n.name==="is"||n.name==="where"))}function sr(e){return e.some(t=>t.kind==="tag"&&Ji.has(t.name))}var ut=["hover","focus","active","selected","current","loading","disabled"],Zi={hover:"hover",hovered:"hover",focus:"focus",focused:"focus","focus-visible":"focus","focus-within":"focus",active:"selected",pressed:"selected",selected:"selected",checked:"selected",on:"selected",current:"current",loading:"loading",busy:"loading",pending:"loading",disabled:"disabled"},qi={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},Xi={disabled:"disabled","aria-disabled":"disabled","data-disabled":"disabled","aria-pressed":"selected","aria-selected":"selected","aria-expanded":"selected","aria-checked":"selected","data-active":"selected","data-selected":"selected","data-pressed":"selected","data-checked":"selected","data-highlighted":"selected","aria-current":"current","aria-busy":"loading","data-loading":"loading","data-busy":"loading","data-hover":"hover","data-hovered":"hover","data-focus":"focus","data-focused":"focus","data-focus-visible":"focus","data-open":"open","data-expanded":"open"},Yi=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),Qs=e=>Zi[e.toLowerCase()]??e.toLowerCase(),ce={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function rr(e){if(e.kind==="pseudo"){let t=qi[e.name];if(!t)return null;let n=ce[t];return{state:t,marker:n?{classes:[n],attrs:{}}:{classes:[],attrs:{[e.name==="checked"?"checked":"disabled"]:""}}}}if(e.kind==="attr"){if(e.name==="data-state"&&e.value!==null)return{state:Qs(e.value),marker:{classes:[],attrs:{"data-state":e.value}}};let t=Xi[e.name];if(!t||e.value!==null&&/^(?:false|off|0)$/i.test(e.value))return null;let n=e.value??(e.name.startsWith("aria-")?"true":"");return{state:t,marker:{classes:[],attrs:{[e.name]:n}}}}if(e.kind==="class"){let t=/^(?:is|has)-(.+)$/i.exec(e.name),n=t?t[1]:Yi.has(e.name.toLowerCase())?e.name:null;return n?{state:Qs(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function Qi(e){return e.kind!=="pseudo"||e.name!=="not"||!e.args?!1:W(e.args).every(t=>{let n=er(t);return n!==null&&n.every(s=>rr(s)!==null)})}function ft(e){let t=[],n=new Map;for(let o of e){if(Qi(o))continue;let i=rr(o);if(!i){t.push(o);continue}let a=n.get(i.state)??{classes:[],attrs:{}};for(let l of i.marker.classes)a.classes.includes(l)||a.classes.push(l);Object.assign(a.attrs,i.marker.attrs),n.set(i.state,a)}let s=[...n.keys()].sort((o,i)=>H(o)-H(i)||o.localeCompare(i)),r={classes:[],attrs:{}};for(let o of s){let i=n.get(o);r.classes.push(...i.classes),Object.assign(r.attrs,i.attrs)}return{identity:t,states:s,marker:r}}function H(e){if(e==="default")return-1;let t=ut.indexOf(e);return t===-1?ut.length:t}function be(e){return e.length?e.join(" + "):"default"}function ln(e){return e.replace(/:hover\b/g,`.${ce.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${ce.focus}`).replace(/:active\b/g,`.${ce.active}`)}var ea=new Set(["background","background-color","background-image","background-position","background-size","background-repeat","background-clip","background-origin","background-attachment","color","border-color","border-top-color","border-right-color","border-bottom-color","border-left-color","outline","outline-color","outline-offset","box-shadow","filter","backdrop-filter","opacity","fill","stroke","caret-color","accent-color","text-decoration-color","mix-blend-mode"]),ta=new Set(["width","min-width","max-width","flex","flex-grow","flex-shrink","flex-basis","align-self","justify-self","order","margin","margin-top","margin-right","margin-bottom","margin-left","margin-inline","margin-block","margin-inline-start","margin-inline-end","margin-block-start","margin-block-end","position","inset","inset-inline","inset-block","top","right","bottom","left","z-index","float","clear","grid-column","grid-row","grid-area","place-self"]),na=new Set(["cursor","user-select","pointer-events","transition","transition-property","transition-duration","transition-timing-function","transition-delay","will-change","touch-action","-webkit-tap-highlight-color","appearance","-webkit-appearance","scroll-margin","scroll-margin-top"]);function Je(e){let t=e.toLowerCase();return ea.has(t)?"paint":ta.has(t)?"layout":na.has(t)?"hint":"box"}var sa={shadow:/^box-shadow$/,cursor:/^cursor$/,rounded:/^border(?:-[a-z]+)*-radius$/,radius:/^border(?:-[a-z]+)*-radius$/};function or(e,t){let n=e.filter(o=>o.kind==="class");if(n.length!==1||e.length!==1)return!1;let s=tr(n[0].name)[0],r=s?sa[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var Tu={hover:{classes:[ce.hover],attrs:{}},focus:{classes:[ce.focus],attrs:{}},active:{classes:[ce.active],attrs:{}},selected:{classes:[],attrs:{"aria-pressed":"true"}},current:{classes:[],attrs:{"aria-current":"true"}},loading:{classes:[],attrs:{"aria-busy":"true"}},disabled:{classes:[],attrs:{disabled:""}}};var ra="data-gs-sheet";function ar(e){return`[${ra}="${e.replace(/["\\]/g,"")}"]`}function ir(e){return/\.module\.[a-z]+$/i.test(e)}var oa=new Set(["button","a","div","span","input","summary","label"]);function ye(e){let t=0,n=0;for(let s=0;s<e.length;s++){let r=e[s];r==="("||r==="["?t++:r===")"||r==="]"?t=Math.max(0,t-1):t===0&&/[\s>+~]/.test(r)&&(n=s+1)}return n}function ia(e){let t={tag:"",classes:[],attrs:{}};for(let n of e)switch(n.kind){case"pseudoElement":return null;case"tag":t.tag=n.name;break;case"class":t.classes.push(n.name);break;case"attr":t.attrs[n.name]=n.value??"";break;default:break}return t}function dt(e,t){let n=Q(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>ia(c.simples));if(s.some(c=>c===null))return null;let r=s,o=r[r.length-1],i=o.tag&&o.tag!=="*"?o.tag:"button";if(!oa.has(i)||o.classes.length===0&&Object.keys(o.attrs).length===0&&!o.tag)return null;let a=[...new Set([...t,...o.classes])],l=r.slice(0,-1).filter(c=>c.tag||c.classes.length||Object.keys(c.attrs).length).map(c=>({...c,tag:c.tag&&c.tag!=="*"?c.tag:"div"}));return{tag:i,classes:a,attrs:o.attrs,ancestors:l}}function cn(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function gt(e){let t=cn(e,"display");if(/^none\b/i.test(t))return"display: none";let n=cn(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=cn(e,"opacity");return/^(0|0\.0+)$/.test(s)?"opacity: 0":null}function lr(e,t){return e===t||!ir(e)&&!ir(t)}function se(e,t){if(/[<>]|@import|expression\(|javascript:|behavior\s*:/i.test(t))return!1;for(let n of t.matchAll(/url\(\s*(['"]?)([^'")]*)\1\s*\)/gi))if(!/^data:image\//i.test(n[2]))return!1;return/^-{0,2}[a-z][\w-]*$/i.test(e)}var aa=40,ee=(e,t)=>({path:e,line:t});function te(e,t,n,s){return{...e,status:t.length===0?"ok":"attention",summary:t.length===0?n:s(t.length),findings:t.slice(0,aa)}}function xe(e,t){return{...e,status:"na",summary:t,findings:[]}}var un=e=>e.state.split(" + ");function dr(e,t){if(!e.element||!t.element||e!==t&&!lr(e.path,t.path)||e.element.ancestors.length>0||e.element.tag!==t.element.tag)return!1;let n=new Set(t.element.classes);return e.element.classes.every(s=>n.has(s))?Object.entries(e.element.attrs).every(([s,r])=>t.element.attrs[s]===r):!1}function gr(e,t){return t.filter(n=>dr(n,e)).flatMap(n=>n.states)}function la(e,t,n){return gr(e,t).some(s=>un(s).includes(n))||t.filter(s=>dr(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var ca=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function ua(e){let t={id:"states",title:"Missing states",description:"Styles with no hover, focus, disabled, or active rule, counting rules they inherit from a shared base class."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return xe(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of ca){let i=n.filter(a=>!la(a,e.variants,r));i.length!==0&&s.push({severity:o,message:i.length===n.length?`No style defines a ${r} state.`:`${i.length} of ${n.length} styles have no ${r} state.`,styles:i.length===n.length?void 0:i.map(a=>a.title),refs:i.slice(0,6).map(a=>ee(a.path,a.line))})}return te(t,s,"Every style has hover, focus, disabled, and active rules.",r=>`${r} state${r===1?"":"s"} missing on some styles.`)}var cr=new Set(["outline","outline-style","outline-width"]),ur=/^(?:none|0|0px)(?:\s+(?:none|0|0px))*$/i,pa=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function fa(e){let t={id:"focus",title:"Focus indicator removed",description:"Styles that remove the outline and give keyboard focus nothing in its place."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return xe(t,"No styles that can be drawn on their own.");let s=[];for(let r of n){let o=gr(r,e.variants),i=o.filter(l=>{let c=un(l);return c.includes("default")||c.includes("focus")}).flatMap(l=>l.declarations.map(c=>({s:l,d:c}))).find(({d:l})=>cr.has(l.property)&&ur.test(l.value.replace(/\s*!important/i,"")));!i||o.filter(l=>un(l).includes("focus")).some(l=>l.declarations.some(c=>pa.test(c.property)&&!(cr.has(c.property)&&ur.test(c.value))&&!/^(?:none|0|0px)$/i.test(c.value)&&!(c.property==="box-shadow"&&/^none$/i.test(c.value))))||s.push({severity:"issue",message:`${r.title} removes the outline (${i.d.property}: ${i.d.value}) and no focus rule replaces it.`,styles:[r.title],refs:[ee(r.path,i.s.line)]})}return te(t,s,"No style removes the outline without a focus replacement.",r=>`${r} style${r===1?"":"s"} lose the focus indicator.`)}function da(e){let t={id:"tokens",title:"Undefined tokens",description:`Custom properties the ${e.noun} styles read that no scanned stylesheet defines.`};if(e.tokens.length===0)return xe(t,`The ${e.noun} styles read no custom properties.`);let s=e.tokens.filter(r=>r.definedIn.length===0&&!r.name.startsWith("--tw-")).map(r=>{let o=e.variants.filter(i=>i.states.some(a=>a.declarations.some(l=>l.value.includes(`var(${r.name}`)||new RegExp(`var\\(\\s*${r.name}\\b`).test(l.value))));return{severity:"note",message:`${r.name} is read but never defined here. It may be set outside the scanned files (a framework, a theme provider).`,styles:o.slice(0,8).map(i=>i.title),refs:o.slice(0,3).map(i=>ee(i.path,i.line))}});return te(t,s,`All ${e.tokens.length} tokens read are defined.`,r=>`${r} token${r===1?"":"s"} with no definition.`)}var ga=/var\((?:[^()]|\([^()]*\))*\)/g,pr=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,ma=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,ha=/(?<![\w.-])(\d+(?:\.\d+)?)px\b/g;function fr(e){let t=e.trim().toLowerCase().replace(/\s+/g,""),n=/^#([0-9a-f]{3})$/.exec(t);return n?`#${[...n[1]].map(s=>s+s).join("")}`:t}function pn(e,t,n=0){return n>6?e:e.replace(/var\(\s*(--[\w-]+)\s*(?:,\s*([^)]*))?\)/g,(s,r,o)=>{let i=t.get(r);return i!==void 0?pn(i,t,n+1):o!==void 0?pn(o.trim(),t,n+1):s})}var ba=[[/^(?:padding|margin|gap|row-gap|column-gap)/,/space|spacing|gap|pad|inset|gutter/i],[/height$/,/height|control|size/i],[/^border-radius/,/radius|round|corner/i],[/^font-size$/,/text|font|size|type/i],[/^letter-spacing$/,/tracking|letter|spacing/i]];function ya(e,t){if(!t)return null;let n=ba.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function xa(e){let t={id:"hardcoded",title:"Hard-coded values",description:`Raw colors, and pixel sizes that exactly match a token, written into ${e.noun} styles instead of using the token.`},n=new Map,s=new Map;for(let[o,i]of e.tokenValues){let a=pn(i,e.tokenValues).trim();if(new RegExp(`^(?:${pr.source})$`,"i").test(a)){let l=fr(a);n.set(l,[...n.get(l)??[],o])}else/^\d+(?:\.\d+)?px$/.test(a)&&s.set(a,[...s.get(a)??[],o])}if(n.size===0&&s.size===0)return xe(t,"No color or size tokens were found to compare against.");let r=[];for(let o of e.variants){let i=[],a=null;for(let c of o.states)for(let u of c.declarations){if(u.via)continue;let f=u.value.replace(ga," ");for(let m of f.matchAll(pr)){let h=n.get(fr(m[0]));i.push(h?`${m[0]} in ${u.property} is the value of ${h[0]}`:`${m[0]} in ${u.property} is not a token`),a??=c}if(ma.test(u.property))for(let m of f.matchAll(ha)){let h=ya(u.property,s.get(`${m[1]}px`));!h||Number(m[1])<=1||(i.push(`${m[1]}px in ${u.property} is the value of ${h}`),a??=c)}}if(i.length===0||!a)continue;let l=[...new Set(i)];r.push({severity:"issue",message:`${o.title}: ${l.slice(0,4).join("; ")}${l.length>4?`; and ${l.length-4} more`:""}.`,styles:[o.title],refs:[ee(o.path,a.line)]})}return te(t,r,`No ${e.noun} style hard-codes a value a token already has.`,o=>`${o} style${o===1?"":"s"} hard-code values.`)}function ka(e){let t={id:"unused",title:"Unused styles",description:"Styles defined in CSS that no component, page, or template references."},n=e.variants.filter(r=>r.element&&r.usage.status!=="unknown");if(n.length===0)return xe(t,"No styles with a class name to look for.");let s=[];for(let r of n)r.usage.status==="unreferenced"?s.push({severity:"issue",message:`${r.title} (${r.selector}) is defined but no reference to it was found.`,styles:[r.title],refs:[ee(r.path,r.line)]}):r.usage.status==="dynamic"&&s.push({severity:"note",message:`${r.title} (${r.selector}) is built at runtime and nothing selects it by value.`,styles:[r.title],refs:[ee(r.path,r.line),...r.usage.files.slice(0,2)]});return s.sort((r,o)=>+(o.severity==="issue")-+(r.severity==="issue")),te(t,s,`All ${n.length} styles are referenced.`,r=>`${r} style${r===1?"":"s"} unreferenced or unconfirmed.`)}function wa(e){let t={id:"duplicates",title:"Duplicate styles",description:"Different styles whose default declarations are identical."},n=new Map;for(let r of e.variants){if(!r.element)continue;let o=r.states.filter(a=>a.state==="default"&&a.context==="").flatMap(a=>a.declarations).map(a=>`${a.property}:${a.value.replace(/\s+/g," ").trim()}`);if(o.length<2)continue;let i=[...new Set(o)].sort().join(";");n.set(i,[...n.get(i)??[],r])}let s=[...n.values()].filter(r=>r.length>1).map(r=>({severity:"issue",message:`${r.map(o=>o.title).join(", ")} declare the same default styles (${r.map(o=>o.selector).join(", ")}).`,styles:r.map(o=>o.title),refs:r.map(o=>ee(o.path,o.line))}));return te(t,s,"No two styles share the same default declarations.",r=>`${r} group${r===1?"":"s"} of identical styles.`)}function va(e){let t={id:"native",title:`Native <${e.element}> instead of the component`,description:`Files that render a raw <${e.element}> although the repository has a shared ${e.element} component.`};if(!e.hasComponent)return xe(t,`No shared ${e.element} component was found, so native elements are expected.`);let n=e.nativeUses.map(s=>({severity:"issue",message:`${s.count} native <${e.element}> element${s.count===1?"":"s"} in ${s.path}.`,refs:[ee(s.path,s.line)]}));return te(t,n,`Every <${e.element}> goes through the component.`,s=>`${s} file${s===1?"":"s"} bypass the component.`)}function $a(e){let t={id:"props",title:"Prop values with no look",description:`Calls to a ${e.element} component with a literal prop value the component has no style for.`};if(!e.hasComponent)return xe(t,`No shared ${e.element} component was found.`);let n=(e.unknownProps??[]).map(s=>({severity:"issue",message:`<${s.component} ${s.prop}="${s.value}"> in ${s.path}: ${s.component} has no ${s.prop} "${s.value}" (it has ${s.known.join(", ")}).`,refs:[ee(s.path,s.line)]}));return te(t,n,"Every literal prop value picks a look the component has.",s=>`${s} call${s===1?"":"s"} ask for a look the component does not have.`)}function Ca(e){let t={id:"undocumented",title:"Styles without written guidance",description:"Styles that no instruction file or doc names, so nothing written says how they should be used."},{guidance:n}=e;if(n.files.length===0)return{...t,status:"attention",summary:`Nothing in the repository mentions ${e.noun}.`,findings:[{severity:"note",message:`No instruction file or doc says how ${e.noun} should look or be built.`,refs:[]}]};if(n.undocumented.length===0)return te(t,[],"Every style is named in written guidance.",()=>"");let s=e.variants.filter(r=>r.element&&n.undocumented.includes(r.title));return te(t,[{severity:"note",message:`${n.undocumented.length} of ${n.documented.length+n.undocumented.length} styles are named in no guidance.`,styles:n.undocumented,refs:s.slice(0,6).map(r=>ee(r.path,r.line))}],"",r=>`${r} finding${r===1?"":"s"}.`)}function mr(e){return[ua(e),fa(e),ka(e),wa(e),da(e),xa(e),va(e),$a(e),Ca(e)]}var Sa=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,hr=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,Ra=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),Aa=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),_a=new Set(["classNames","classnames","clsx","cn","cx"]),Ia=/^(?:ref|key|style|dangerouslySetInnerHTML)$/i;function xr(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
42
+ Set up Gruum in Cursor so checks run while you edit and before a commit? (Enter) yes, (n) no: `}function Us(e){let t=e.trim().toLowerCase();return t==="n"||t==="no"||t==="q"||t==="quit"?"no":!t||t==="y"||t==="yes"?"yes":null}function Vs(e){let t=e.trim().toLowerCase();return!t||t==="q"||t==="quit"?"quit":t==="c"||t==="check"?"check":t==="b"||t==="baseline"?"baseline":null}function zs(e){let t=e.trim().toLowerCase();return t==="q"||t==="quit"||t==="n"||t==="no"?"quit":!t||t==="b"||t==="baseline"||t==="y"||t==="yes"?"baseline":null}function Ws(e){let t=e.trim().toLowerCase();if(!t)return"quit";let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Ee.length?Ee[n-1]:Ee.find(s=>s.name===t)??null}var Ui="2025-06-18",it=`Check before you finish. If the request needs a button the spec does not have, ask the user: "You asked for a design element that is not in the spec. 1. Use an existing spec style for it. 2. Add it as it is and request review." Do not request a review until they choose 2. Never edit Gruum's generated files, including .gruum/project.json, to make a check pass.`,at={gruum_button_spec:`The designer-published button spec for this repository: components, looks and how to select them, tokens, and written rules. Read it before writing or restyling a button. ${it}`,gruum_check_buttons:`Check the working tree's buttons against the spec and list drift items with a one-line fix each. Run it before you stop. ${it}`,gruum_request_exception:`Ask a designer to review one drift item. Call this only after the user chooses to add the element as it is and request review. Send the drift id from gruum_check_buttons and a reason. If this tool is missing, run \`npx @gruum/cli request <drift id> --reason "..."\` instead of reading the CLI package. ${it}`,gruum_exception_status:`Pending, accepted, or rejected for this branch's exception requests. Pass an id to read one. ${it}`};function Gs(e){return[{name:"gruum_button_spec",description:at.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:at.gruum_check_buttons,inputSchema:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Only report drift in these files (relative to the repository root). Omit to check everything."}},additionalProperties:!1},run:t=>{let n=Array.isArray(t.paths)?t.paths.filter(s=>typeof s=="string"):[];return e.check(n)}},{name:"gruum_request_exception",description:at.gruum_request_exception,inputSchema:{type:"object",properties:{driftId:{type:"string",description:"The drift item id from gruum_check_buttons."},reason:{type:"string",description:"Why the spec has no button for this job."}},required:["driftId","reason"],additionalProperties:!1},run:t=>e.request(typeof t.driftId=="string"?t.driftId:"",typeof t.reason=="string"?t.reason:"")},{name:"gruum_exception_status",description:at.gruum_exception_status,inputSchema:{type:"object",properties:{id:{type:"string",description:"One request id. Omit to list this branch."}},additionalProperties:!1},run:t=>e.status(typeof t.id=="string"?t.id:void 0)}]}function Ge(e,t){return{jsonrpc:"2.0",id:e,result:t}}function lt(e,t,n){return{jsonrpc:"2.0",id:e,error:{code:t,message:n}}}async function Hs(e,t,n){if(!e||typeof e!="object")return lt(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:lt(o,-32600,"Invalid request");let i=s.params??{};switch(s.method){case"initialize":{let a=i.protocolVersion;return Ge(o,{protocolVersion:typeof a=="string"?a:Ui,capabilities:{tools:{listChanged:!1}},serverInfo:n})}case"ping":return Ge(o,{});case"tools/list":return Ge(o,{tools:t.map(({name:a,description:l,inputSchema:c})=>({name:a,description:l,inputSchema:c}))});case"tools/call":{let a=t.find(c=>c.name===i.name);if(!a)return lt(o,-32602,`Unknown tool: ${String(i.name)}`);let l=i.arguments&&typeof i.arguments=="object"?i.arguments:{};try{let c=await a.run(l);return Ge(o,{content:[{type:"text",text:c.text}],isError:c.isError??!1})}catch(c){return Ge(o,{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0})}}default:return r?null:lt(o,-32601,`Method not found: ${s.method}`)}}var Vi=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,zi=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,Wi=/\.(png|jpe?g|gif|webp|avif|ico|icns|bmp|tiff?|svgz|woff2?|ttf|otf|eot|mp[34]|wav|ogg|webm|mov|zip|gz|tgz|bz2|7z|rar|jar|pdf|docx?|xlsx?|pptx?|exe|dll|so|dylib|wasm|bin|dat|sqlite|db|psd|ai|sketch|fig)$/i,Gi=/(^|\/)\.gruum\//;function tn(e){return!Vi.test(`${e}/`)&&!Gi.test(`${e}/`)}function nn(e,t){return zi.test(e)||Wi.test(e)?!1:t<=3e5}function Ks(e){let t=Math.min(e.length,8e3);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}var Hi=/\.(css|scss|sass|less|styl|tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx?|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2|json)$/i;function Js(e){return Hi.test(e)}function sn(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function rn(e,t){let n=sn(t),s=e.replace(/\\/g,"/");return n?s.startsWith(`${n}/`)?s.slice(n.length+1):null:s}function Zs(e,t,n){let s=new Map(e);for(let r of t){let o=rn(r.path,n);o===null||!tn(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):nn(o,r.content.length)&&s.set(o,r.content))}return s}function qs(e){let t=e.split("\0").filter(Boolean),n=[];for(let s=0;s<t.length;s++){let r=t[s];if(/^[RC]/.test(r)){let i=t[++s],a=t[++s];r.startsWith("R")&&i&&n.push({path:i,deleted:!0}),a&&n.push({path:a,deleted:!1});continue}let o=t[++s];o&&n.push({path:o,deleted:r.startsWith("D")})}return n}function ct(e){let t=/^(?:git@|ssh:\/\/git@|https?:\/\/(?:[^@/]+@)?)github\.com[:/]([^/\s]+)\/([^/\s]+?)(?:\.git)?\/?$/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}var Xs=e=>e.replace(/\\(.)/g,"$1");function Ki(e){let t=e;for(;;){let n=/:(?:global|local)\(/i.exec(t);if(!n)break;let s=0,r=-1;for(let i=n.index+n[0].length-1;i<t.length;i++){let a=t[i];if(a==="(")s++;else if(a===")"&&--s===0){r=i;break}}if(r<0)break;let o=t.slice(n.index+n[0].length,r).trim();t=`${t.slice(0,n.index)}${o}${t.slice(r+1)}`}return t.replace(/:(?:global|local)(?=\s|$)/gi,"").trim()}var on=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function er(e){let t=[];on.lastIndex=0;let n=0;for(;n<e.length;){on.lastIndex=n;let s=on.exec(e);if(!s||s.index!==n)return null;let r=s[0];if(n+=r.length,r==="*")t.push({kind:"universal",raw:r});else if(s[1]!==void 0)t.push({kind:"class",raw:r,name:Xs(s[1])});else if(s[2]!==void 0)t.push({kind:"id",raw:r,name:Xs(s[2])});else if(s[3]!==void 0)t.push({kind:"attr",raw:r,name:s[3],op:s[4]??null,value:s[4]?s[5]??s[6]??s[7]??"":null});else if(s[8]!==void 0)t.push({kind:"pseudoElement",raw:r,name:s[8].toLowerCase()});else if(s[9]!==void 0){let o=s[9].toLowerCase();/^(?:before|after|first-line|first-letter)$/.test(o)?t.push({kind:"pseudoElement",raw:r,name:o}):t.push({kind:"pseudo",raw:r,name:o,args:s[10]?s[10].slice(1,-1).trim():null})}else if(t.length===0)t.push({kind:"tag",raw:r,name:r.toLowerCase()});else return null}return t.length?t:null}function Q(e){let t=Ki(e),n=[],s=0,r=0,o=null,i=!0,a=l=>{let c=t.slice(r,l).trim();if(!c)return!0;let u=er(c);return u?(n.push({combinator:i?null:o??" ",simples:u}),i=!1,o=null,!0):!1};for(let l=0;l<t.length;l++){let c=t[l];if(c==="("||c==="[")s++;else if(c===")"||c==="]")s=Math.max(0,s-1);else if(s===0&&(c===">"||c==="+"||c==="~")){if(!a(l)||o)return null;o=c,r=l+1}else if(s===0&&/\s/.test(c)){if(!a(l))return null;r=l+1}}return!a(t.length)||o?null:n.length?n:null}function He(e){return e.map(t=>t.raw).join("")}function Ke(e){return e.map((t,n)=>{let s=He(t.simples);return n===0?s:t.combinator===" "?` ${s}`:` ${t.combinator} ${s}`}).join("")}function W(e){let t=[],n=0,s=0;for(let r=0;r<e.length;r++){let o=e[r];o==="("||o==="["?n++:o===")"||o==="]"?n=Math.max(0,n-1):o===","&&n===0&&(t.push(e.slice(s,r).trim()),s=r+1)}return t.push(e.slice(s).trim()),t.filter(Boolean)}var tr=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Ys(e,t){let n=e.toLowerCase();return t.some(s=>n.includes(s.toLowerCase()))}function an(e,t){let n=t.excludeClassKeywords;if(!n?.length)return!1;let s=new Set(n.flatMap(r=>[r.toLowerCase(),`${r.toLowerCase()}s`]));return e.some(r=>r.kind==="class"&&tr(r.name).some(o=>s.has(o)))}var Ji=new Set(["html","body"]),Zi=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function pt(e,t){for(let n of e)switch(n.kind){case"tag":if(t.elements.includes(n.name))return!0;break;case"class":if(Ys(n.name,t.classKeywords))return!0;break;case"attr":if(n.name==="role"&&n.value!==null&&t.roles.includes(n.value.toLowerCase())||n.name==="data-component"&&n.value!==null&&Ys(n.value,t.classKeywords))return!0;break;case"pseudo":if((n.name==="is"||n.name==="where")&&n.args){let s=W(n.args).map(Q);if(s.length>0&&s.every(r=>r!==null&&pt(r[r.length-1].simples,t)))return!0}break;default:break}return!1}function nr(e){return e.some(n=>n.kind==="universal")?e.length===1:e.some(n=>n.kind==="tag"&&Ji.has(n.name))?!0:!e.some(n=>n.kind==="tag"||n.kind==="class"||n.kind==="attr"||n.kind==="id"||n.kind==="pseudo"&&(n.name==="is"||n.name==="where"))}function sr(e){return e.some(t=>t.kind==="tag"&&Zi.has(t.name))}var ut=["hover","focus","active","selected","current","loading","disabled"],qi={hover:"hover",hovered:"hover",focus:"focus",focused:"focus","focus-visible":"focus","focus-within":"focus",active:"selected",pressed:"selected",selected:"selected",checked:"selected",on:"selected",current:"current",loading:"loading",busy:"loading",pending:"loading",disabled:"disabled"},Xi={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},Yi={disabled:"disabled","aria-disabled":"disabled","data-disabled":"disabled","aria-pressed":"selected","aria-selected":"selected","aria-expanded":"selected","aria-checked":"selected","data-active":"selected","data-selected":"selected","data-pressed":"selected","data-checked":"selected","data-highlighted":"selected","aria-current":"current","aria-busy":"loading","data-loading":"loading","data-busy":"loading","data-hover":"hover","data-hovered":"hover","data-focus":"focus","data-focused":"focus","data-focus-visible":"focus","data-open":"open","data-expanded":"open"},Qi=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),Qs=e=>qi[e.toLowerCase()]??e.toLowerCase(),ce={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function rr(e){if(e.kind==="pseudo"){let t=Xi[e.name];if(!t)return null;let n=ce[t];return{state:t,marker:n?{classes:[n],attrs:{}}:{classes:[],attrs:{[e.name==="checked"?"checked":"disabled"]:""}}}}if(e.kind==="attr"){if(e.name==="data-state"&&e.value!==null)return{state:Qs(e.value),marker:{classes:[],attrs:{"data-state":e.value}}};let t=Yi[e.name];if(!t||e.value!==null&&/^(?:false|off|0)$/i.test(e.value))return null;let n=e.value??(e.name.startsWith("aria-")?"true":"");return{state:t,marker:{classes:[],attrs:{[e.name]:n}}}}if(e.kind==="class"){let t=/^(?:is|has)-(.+)$/i.exec(e.name),n=t?t[1]:Qi.has(e.name.toLowerCase())?e.name:null;return n?{state:Qs(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function ea(e){return e.kind!=="pseudo"||e.name!=="not"||!e.args?!1:W(e.args).every(t=>{let n=er(t);return n!==null&&n.every(s=>rr(s)!==null)})}function ft(e){let t=[],n=new Map;for(let o of e){if(ea(o))continue;let i=rr(o);if(!i){t.push(o);continue}let a=n.get(i.state)??{classes:[],attrs:{}};for(let l of i.marker.classes)a.classes.includes(l)||a.classes.push(l);Object.assign(a.attrs,i.marker.attrs),n.set(i.state,a)}let s=[...n.keys()].sort((o,i)=>H(o)-H(i)||o.localeCompare(i)),r={classes:[],attrs:{}};for(let o of s){let i=n.get(o);r.classes.push(...i.classes),Object.assign(r.attrs,i.attrs)}return{identity:t,states:s,marker:r}}function H(e){if(e==="default")return-1;let t=ut.indexOf(e);return t===-1?ut.length:t}function be(e){return e.length?e.join(" + "):"default"}function ln(e){return e.replace(/:hover\b/g,`.${ce.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${ce.focus}`).replace(/:active\b/g,`.${ce.active}`)}var ta=new Set(["background","background-color","background-image","background-position","background-size","background-repeat","background-clip","background-origin","background-attachment","color","border-color","border-top-color","border-right-color","border-bottom-color","border-left-color","outline","outline-color","outline-offset","box-shadow","filter","backdrop-filter","opacity","fill","stroke","caret-color","accent-color","text-decoration-color","mix-blend-mode"]),na=new Set(["width","min-width","max-width","flex","flex-grow","flex-shrink","flex-basis","align-self","justify-self","order","margin","margin-top","margin-right","margin-bottom","margin-left","margin-inline","margin-block","margin-inline-start","margin-inline-end","margin-block-start","margin-block-end","position","inset","inset-inline","inset-block","top","right","bottom","left","z-index","float","clear","grid-column","grid-row","grid-area","place-self"]),sa=new Set(["cursor","user-select","pointer-events","transition","transition-property","transition-duration","transition-timing-function","transition-delay","will-change","touch-action","-webkit-tap-highlight-color","appearance","-webkit-appearance","scroll-margin","scroll-margin-top"]);function Je(e){let t=e.toLowerCase();return ta.has(t)?"paint":na.has(t)?"layout":sa.has(t)?"hint":"box"}var ra={shadow:/^box-shadow$/,cursor:/^cursor$/,rounded:/^border(?:-[a-z]+)*-radius$/,radius:/^border(?:-[a-z]+)*-radius$/};function or(e,t){let n=e.filter(o=>o.kind==="class");if(n.length!==1||e.length!==1)return!1;let s=tr(n[0].name)[0],r=s?ra[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var Bu={hover:{classes:[ce.hover],attrs:{}},focus:{classes:[ce.focus],attrs:{}},active:{classes:[ce.active],attrs:{}},selected:{classes:[],attrs:{"aria-pressed":"true"}},current:{classes:[],attrs:{"aria-current":"true"}},loading:{classes:[],attrs:{"aria-busy":"true"}},disabled:{classes:[],attrs:{disabled:""}}};var oa="data-gs-sheet";function ar(e){return`[${oa}="${e.replace(/["\\]/g,"")}"]`}function ir(e){return/\.module\.[a-z]+$/i.test(e)}var ia=new Set(["button","a","div","span","input","summary","label"]);function ye(e){let t=0,n=0;for(let s=0;s<e.length;s++){let r=e[s];r==="("||r==="["?t++:r===")"||r==="]"?t=Math.max(0,t-1):t===0&&/[\s>+~]/.test(r)&&(n=s+1)}return n}function aa(e){let t={tag:"",classes:[],attrs:{}};for(let n of e)switch(n.kind){case"pseudoElement":return null;case"tag":t.tag=n.name;break;case"class":t.classes.push(n.name);break;case"attr":t.attrs[n.name]=n.value??"";break;default:break}return t}function dt(e,t){let n=Q(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>aa(c.simples));if(s.some(c=>c===null))return null;let r=s,o=r[r.length-1],i=o.tag&&o.tag!=="*"?o.tag:"button";if(!ia.has(i)||o.classes.length===0&&Object.keys(o.attrs).length===0&&!o.tag)return null;let a=[...new Set([...t,...o.classes])],l=r.slice(0,-1).filter(c=>c.tag||c.classes.length||Object.keys(c.attrs).length).map(c=>({...c,tag:c.tag&&c.tag!=="*"?c.tag:"div"}));return{tag:i,classes:a,attrs:o.attrs,ancestors:l}}function cn(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function gt(e){let t=cn(e,"display");if(/^none\b/i.test(t))return"display: none";let n=cn(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=cn(e,"opacity");return/^(0|0\.0+)$/.test(s)?"opacity: 0":null}function lr(e,t){return e===t||!ir(e)&&!ir(t)}function se(e,t){if(/[<>]|@import|expression\(|javascript:|behavior\s*:/i.test(t))return!1;for(let n of t.matchAll(/url\(\s*(['"]?)([^'")]*)\1\s*\)/gi))if(!/^data:image\//i.test(n[2]))return!1;return/^-{0,2}[a-z][\w-]*$/i.test(e)}var la=40,ee=(e,t)=>({path:e,line:t});function te(e,t,n,s){return{...e,status:t.length===0?"ok":"attention",summary:t.length===0?n:s(t.length),findings:t.slice(0,la)}}function xe(e,t){return{...e,status:"na",summary:t,findings:[]}}var un=e=>e.state.split(" + ");function dr(e,t){if(!e.element||!t.element||e!==t&&!lr(e.path,t.path)||e.element.ancestors.length>0||e.element.tag!==t.element.tag)return!1;let n=new Set(t.element.classes);return e.element.classes.every(s=>n.has(s))?Object.entries(e.element.attrs).every(([s,r])=>t.element.attrs[s]===r):!1}function gr(e,t){return t.filter(n=>dr(n,e)).flatMap(n=>n.states)}function ca(e,t,n){return gr(e,t).some(s=>un(s).includes(n))||t.filter(s=>dr(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var ua=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function pa(e){let t={id:"states",title:"Missing states",description:"Styles with no hover, focus, disabled, or active rule, counting rules they inherit from a shared base class."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return xe(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of ua){let i=n.filter(a=>!ca(a,e.variants,r));i.length!==0&&s.push({severity:o,message:i.length===n.length?`No style defines a ${r} state.`:`${i.length} of ${n.length} styles have no ${r} state.`,styles:i.length===n.length?void 0:i.map(a=>a.title),refs:i.slice(0,6).map(a=>ee(a.path,a.line))})}return te(t,s,"Every style has hover, focus, disabled, and active rules.",r=>`${r} state${r===1?"":"s"} missing on some styles.`)}var cr=new Set(["outline","outline-style","outline-width"]),ur=/^(?:none|0|0px)(?:\s+(?:none|0|0px))*$/i,fa=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function da(e){let t={id:"focus",title:"Focus indicator removed",description:"Styles that remove the outline and give keyboard focus nothing in its place."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return xe(t,"No styles that can be drawn on their own.");let s=[];for(let r of n){let o=gr(r,e.variants),i=o.filter(l=>{let c=un(l);return c.includes("default")||c.includes("focus")}).flatMap(l=>l.declarations.map(c=>({s:l,d:c}))).find(({d:l})=>cr.has(l.property)&&ur.test(l.value.replace(/\s*!important/i,"")));!i||o.filter(l=>un(l).includes("focus")).some(l=>l.declarations.some(c=>fa.test(c.property)&&!(cr.has(c.property)&&ur.test(c.value))&&!/^(?:none|0|0px)$/i.test(c.value)&&!(c.property==="box-shadow"&&/^none$/i.test(c.value))))||s.push({severity:"issue",message:`${r.title} removes the outline (${i.d.property}: ${i.d.value}) and no focus rule replaces it.`,styles:[r.title],refs:[ee(r.path,i.s.line)]})}return te(t,s,"No style removes the outline without a focus replacement.",r=>`${r} style${r===1?"":"s"} lose the focus indicator.`)}function ga(e){let t={id:"tokens",title:"Undefined tokens",description:`Custom properties the ${e.noun} styles read that no scanned stylesheet defines.`};if(e.tokens.length===0)return xe(t,`The ${e.noun} styles read no custom properties.`);let s=e.tokens.filter(r=>r.definedIn.length===0&&!r.name.startsWith("--tw-")).map(r=>{let o=e.variants.filter(i=>i.states.some(a=>a.declarations.some(l=>l.value.includes(`var(${r.name}`)||new RegExp(`var\\(\\s*${r.name}\\b`).test(l.value))));return{severity:"note",message:`${r.name} is read but never defined here. It may be set outside the scanned files (a framework, a theme provider).`,styles:o.slice(0,8).map(i=>i.title),refs:o.slice(0,3).map(i=>ee(i.path,i.line))}});return te(t,s,`All ${e.tokens.length} tokens read are defined.`,r=>`${r} token${r===1?"":"s"} with no definition.`)}var ma=/var\((?:[^()]|\([^()]*\))*\)/g,pr=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,ha=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,ba=/(?<![\w.-])(\d+(?:\.\d+)?)px\b/g;function fr(e){let t=e.trim().toLowerCase().replace(/\s+/g,""),n=/^#([0-9a-f]{3})$/.exec(t);return n?`#${[...n[1]].map(s=>s+s).join("")}`:t}function pn(e,t,n=0){return n>6?e:e.replace(/var\(\s*(--[\w-]+)\s*(?:,\s*([^)]*))?\)/g,(s,r,o)=>{let i=t.get(r);return i!==void 0?pn(i,t,n+1):o!==void 0?pn(o.trim(),t,n+1):s})}var ya=[[/^(?:padding|margin|gap|row-gap|column-gap)/,/space|spacing|gap|pad|inset|gutter/i],[/height$/,/height|control|size/i],[/^border-radius/,/radius|round|corner/i],[/^font-size$/,/text|font|size|type/i],[/^letter-spacing$/,/tracking|letter|spacing/i]];function xa(e,t){if(!t)return null;let n=ya.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function ka(e){let t={id:"hardcoded",title:"Hard-coded values",description:`Raw colors, and pixel sizes that exactly match a token, written into ${e.noun} styles instead of using the token.`},n=new Map,s=new Map;for(let[o,i]of e.tokenValues){let a=pn(i,e.tokenValues).trim();if(new RegExp(`^(?:${pr.source})$`,"i").test(a)){let l=fr(a);n.set(l,[...n.get(l)??[],o])}else/^\d+(?:\.\d+)?px$/.test(a)&&s.set(a,[...s.get(a)??[],o])}if(n.size===0&&s.size===0)return xe(t,"No color or size tokens were found to compare against.");let r=[];for(let o of e.variants){let i=[],a=null;for(let c of o.states)for(let u of c.declarations){if(u.via)continue;let f=u.value.replace(ma," ");for(let m of f.matchAll(pr)){let h=n.get(fr(m[0]));i.push(h?`${m[0]} in ${u.property} is the value of ${h[0]}`:`${m[0]} in ${u.property} is not a token`),a??=c}if(ha.test(u.property))for(let m of f.matchAll(ba)){let h=xa(u.property,s.get(`${m[1]}px`));!h||Number(m[1])<=1||(i.push(`${m[1]}px in ${u.property} is the value of ${h}`),a??=c)}}if(i.length===0||!a)continue;let l=[...new Set(i)];r.push({severity:"issue",message:`${o.title}: ${l.slice(0,4).join("; ")}${l.length>4?`; and ${l.length-4} more`:""}.`,styles:[o.title],refs:[ee(o.path,a.line)]})}return te(t,r,`No ${e.noun} style hard-codes a value a token already has.`,o=>`${o} style${o===1?"":"s"} hard-code values.`)}function wa(e){let t={id:"unused",title:"Unused styles",description:"Styles defined in CSS that no component, page, or template references."},n=e.variants.filter(r=>r.element&&r.usage.status!=="unknown");if(n.length===0)return xe(t,"No styles with a class name to look for.");let s=[];for(let r of n)r.usage.status==="unreferenced"?s.push({severity:"issue",message:`${r.title} (${r.selector}) is defined but no reference to it was found.`,styles:[r.title],refs:[ee(r.path,r.line)]}):r.usage.status==="dynamic"&&s.push({severity:"note",message:`${r.title} (${r.selector}) is built at runtime and nothing selects it by value.`,styles:[r.title],refs:[ee(r.path,r.line),...r.usage.files.slice(0,2)]});return s.sort((r,o)=>+(o.severity==="issue")-+(r.severity==="issue")),te(t,s,`All ${n.length} styles are referenced.`,r=>`${r} style${r===1?"":"s"} unreferenced or unconfirmed.`)}function va(e){let t={id:"duplicates",title:"Duplicate styles",description:"Different styles whose default declarations are identical."},n=new Map;for(let r of e.variants){if(!r.element)continue;let o=r.states.filter(a=>a.state==="default"&&a.context==="").flatMap(a=>a.declarations).map(a=>`${a.property}:${a.value.replace(/\s+/g," ").trim()}`);if(o.length<2)continue;let i=[...new Set(o)].sort().join(";");n.set(i,[...n.get(i)??[],r])}let s=[...n.values()].filter(r=>r.length>1).map(r=>({severity:"issue",message:`${r.map(o=>o.title).join(", ")} declare the same default styles (${r.map(o=>o.selector).join(", ")}).`,styles:r.map(o=>o.title),refs:r.map(o=>ee(o.path,o.line))}));return te(t,s,"No two styles share the same default declarations.",r=>`${r} group${r===1?"":"s"} of identical styles.`)}function $a(e){let t={id:"native",title:`Native <${e.element}> instead of the component`,description:`Files that render a raw <${e.element}> although the repository has a shared ${e.element} component.`};if(!e.hasComponent)return xe(t,`No shared ${e.element} component was found, so native elements are expected.`);let n=e.nativeUses.map(s=>({severity:"issue",message:`${s.count} native <${e.element}> element${s.count===1?"":"s"} in ${s.path}.`,refs:[ee(s.path,s.line)]}));return te(t,n,`Every <${e.element}> goes through the component.`,s=>`${s} file${s===1?"":"s"} bypass the component.`)}function Ca(e){let t={id:"props",title:"Prop values with no look",description:`Calls to a ${e.element} component with a literal prop value the component has no style for.`};if(!e.hasComponent)return xe(t,`No shared ${e.element} component was found.`);let n=(e.unknownProps??[]).map(s=>({severity:"issue",message:`<${s.component} ${s.prop}="${s.value}"> in ${s.path}: ${s.component} has no ${s.prop} "${s.value}" (it has ${s.known.join(", ")}).`,refs:[ee(s.path,s.line)]}));return te(t,n,"Every literal prop value picks a look the component has.",s=>`${s} call${s===1?"":"s"} ask for a look the component does not have.`)}function Sa(e){let t={id:"undocumented",title:"Styles without written guidance",description:"Styles that no instruction file or doc names, so nothing written says how they should be used."},{guidance:n}=e;if(n.files.length===0)return{...t,status:"attention",summary:`Nothing in the repository mentions ${e.noun}.`,findings:[{severity:"note",message:`No instruction file or doc says how ${e.noun} should look or be built.`,refs:[]}]};if(n.undocumented.length===0)return te(t,[],"Every style is named in written guidance.",()=>"");let s=e.variants.filter(r=>r.element&&n.undocumented.includes(r.title));return te(t,[{severity:"note",message:`${n.undocumented.length} of ${n.documented.length+n.undocumented.length} styles are named in no guidance.`,styles:n.undocumented,refs:s.slice(0,6).map(r=>ee(r.path,r.line))}],"",r=>`${r} finding${r===1?"":"s"}.`)}function mr(e){return[pa(e),da(e),wa(e),va(e),ga(e),ka(e),$a(e),Ca(e),Sa(e)]}var Ra=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,hr=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,Aa=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),_a=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),Ea=new Set(["classNames","classnames","clsx","cn","cx"]),Ia=/^(?:ref|key|style|dangerouslySetInnerHTML)$/i;function xr(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
40
43
  `&&n++;return n}function br(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function kr(e){let t=e.filter(s=>s.trim()).map(s=>/^ */.exec(s)?.[0].length??0),n=t.length?Math.min(...t):0;return e.map(s=>{let r=s.slice(n);return r.length>200?`${r.slice(0,200)}\u2026`:r}).join(`
41
- `)}function Ea(e,t,n){let s=Math.max(0,Math.min(t,e.length)),r=Math.max(s,Math.min(n,e.length)),o=xr(e,s),i=e.slice(s,r).split(`
44
+ `)}function ja(e,t,n){let s=Math.max(0,Math.min(t,e.length)),r=Math.max(s,Math.min(n,e.length)),o=xr(e,s),i=e.slice(s,r).split(`
42
45
  `).slice(0,12),a=e.slice(s,r).split(`
43
46
  `).length>12;return{source:kr(i)+(a?`
44
- \u2026`:""),startLine:o}}function ja(e,t){let n=xr(e,Math.max(0,t)),s=e.split(`
45
- `),r=Math.max(0,n-1);return{source:kr(s.slice(r,r+12)),startLine:r+1}}function yr(e,t){return{kind:"other",...ja(e,t)}}function yt(e,t){let n=hr.exec(e.slice(t));if(!n)return null;let s=n[1],r=n[2]??"",o=t+n[0].length;if(/\/\s*$/.test(r)||Ra.has(s.toLowerCase()))return{tag:s,attrs:r,openStart:t,openEnd:o,closeEnd:o,body:""};let a=1,l=o,c=Math.min(e.length,t+4e3);for(;l<c;){if(e[l]!=="<"){l++;continue}if(e.startsWith("</",l)){let f=/^<\/([A-Za-z][\w.-]*)\s*>/.exec(e.slice(l));if(f&&f[1].toLowerCase()===s.toLowerCase()){if(a--,a===0){let m=l+f[0].length;return{tag:s,attrs:r,openStart:t,openEnd:o,closeEnd:m,body:e.slice(o,l)}}l+=f?f[0].length:2;continue}l+=f?f[0].length:2;continue}let u=hr.exec(e.slice(l));if(u&&u[1].toLowerCase()===s.toLowerCase()&&!/\/\s*$/.test(u[2]??"")&&(a++,a>6))return"too-big";l+=u?u[0].length:1}return l>=c&&o+(c-t)>=4e3?"too-big":null}function dn(e,t){let n=Math.max(0,t-8e3),s=Math.min(t,e.length-1);for(;s>=n;){let r=e.lastIndexOf("<",s);if(r<n)return null;if(e[r+1]==="/"||e[r+1]==="!"||e[r+1]==="?"){s=r-1;continue}let o=yt(e,r);if(o==="too-big")return"too-big";if(o&&t>=o.openStart&&t<o.closeEnd)return o;s=r-1}return null}function wr(e){return e.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function je(e){return e.split(/\s+/).filter(Boolean)}function ue(e,t){let n=e[t];if(n!=='"'&&n!=="'"&&n!=="`")return null;let s="";for(let r=t+1;r<e.length;r++){let o=e[r];if(o==="\\"){s+=e[r+1]??"",r++;continue}if(n==="`"&&o==="$"&&e[r+1]==="{")return null;if(o===n)return{value:s,end:r+1};s+=o}return null}function vr(e){let t=[],n="",s=0,r=null;for(let o=0;o<e.length;o++){let i=e[o];if(r){if(n+=i,i==="\\"){n+=e[o+1]??"",o++;continue}i===r&&(r=null);continue}if(i==='"'||i==="'"||i==="`"){r=i,n+=i;continue}if(i==="("||i==="["||i==="{")s++;else if(i===")"||i==="]"||i==="}")s=Math.max(0,s-1);else if(i===","&&s===0){n.trim()&&t.push(n.trim()),n="";continue}n+=i}return n.trim()&&t.push(n.trim()),t}function ht(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var fn=/^[A-Za-z_$][\w$]*$/;function gn(e,t){let n=0,s=null;for(let r=0;r<e.length;r++){let o=e[r];if(s){o==="\\"?r++:o===s&&(s=null);continue}if(o==='"'||o==="'"||o==="`"){s=o;continue}if(o==="("||o==="["||o==="{")n++;else if(o===")"||o==="]"||o==="}")n--;else if(n===0&&e.startsWith(t,r))return r}return-1}function mn(e){let t=e.trim();for(;t.startsWith("(")&&t.endsWith(")");){let n=0,s=!0;for(let r=0;r<t.length-1&&s;r++)t[r]==="("?n++:t[r]===")"&&n--,n===0&&(s=!1);if(!s)break;t=t.slice(1,-1).trim()}return t}function $r(e,t,n){if(e==="true")return!0;if(e==="false"||e==="undefined"||e==="null")return!1;let s=t.aliases.get(e);return s!==void 0&&!t.values.has(e)?Pe(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function Pe(e,t,n=0){if(n>4)return null;let s=mn(e);for(let c of["||","&&"]){let u=gn(s,c);if(u<0)continue;let f=Pe(s.slice(0,u),t,n+1),m=Pe(s.slice(u+2),t,n+1);return f===null||m===null?null:c==="||"?f||m:f&&m}let r=/^(!\s*)?([A-Za-z_$][\w$]*)$/.exec(s);if(r){let c=$r(r[2],t,n);return c===null?null:r[1]?!c:c}let o=/^([A-Za-z_$][\w$]*)\s*(===|==|!==|!=)\s*(["'])(.*?)\3$/.exec(s);if(!o)return null;let i=t.values.get(o[1]);typeof i=="string"&&t.strings.add(o[1]);let a=typeof i=="string"?i:"";return o[2]==="==="||o[2]==="=="?a===o[4]:a!==o[4]}function Cr(e){let t=0,n=null,s=-1;for(let r=0;r<e.length;r++){let o=e[r];if(n){o==="\\"?r++:o===n&&(n=null);continue}if(o==='"'||o==="'"||o==="`"){n=o;continue}if(o==="("||o==="["||o==="{")t++;else if(o===")"||o==="]"||o==="}")t--;else if(o==="?"&&t===0){s=r;break}}if(s<0)return null;t=0,n=null;for(let r=s+1;r<e.length;r++){let o=e[r];if(n){o==="\\"?r++:o===n&&(n=null);continue}if(o==='"'||o==="'"||o==="`"){n=o;continue}if(o==="("||o==="["||o==="{")t++;else if(o===")"||o==="]"||o==="}")t--;else if(o===":"&&t===0)return{condition:e.slice(0,s),yes:e.slice(s+1,r),no:e.slice(r+1)}}return null}function Ee(e,t=ht()){let n=mn(e);if(!n)return{classes:[],dynamic:!1};let s=Cr(n);if(s){let c=Pe(s.condition,t);return c===null?{classes:[],dynamic:!0}:Ee(c?s.yes:s.no,t)}let r=gn(n,"&&");if(r>=0){let c=Pe(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?Ee(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:je(n.slice(1,-1)),dynamic:!1};if(n.startsWith("`")&&n.endsWith("`")){let c=n.slice(1,-1),u="",f=0;for(;f<c.length;){let m=c.indexOf("${",f);if(m<0){u+=c.slice(f);break}u+=c.slice(f,m);let h=c.indexOf("}",m+2);if(h<0)return{classes:[],dynamic:!0};let w=c.slice(m+2,h).trim();if(fn.test(w)){let C=t.values.get(w);if(typeof C!="string")return{classes:[],dynamic:!0};t.strings.add(w);let $=/[\w-]*$/.exec(u)?.[0];$&&t.prefixes.set(w,$),u+=C}else{let C=Ee(w,t);if(C.dynamic)return{classes:[],dynamic:!0};u+=C.classes.join(" ")}f=h+1}return{classes:je(u),dynamic:!1}}if(fn.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:je(c),dynamic:!1})}let o=/^(?:styles?|classes|css|cls)\.([A-Za-z_]\w*)$/.exec(n);if(o)return{classes:[wr(o[1])],dynamic:!1};let i=/^(?:styles?|classes|css|cls)\[\s*["']([\w-]+)["']\s*\]$/.exec(n);if(i)return{classes:[i[1]],dynamic:!1};let a=/^(?:styles?|classes|css|cls)\[\s*(`[^`]*`)\s*\]$/.exec(n);if(a){let c=Ee(a[1],t);return c.dynamic||c.classes.length!==1?{classes:[],dynamic:!0}:c}let l=/^([A-Za-z_][\w]*)\s*\(([\s\S]*)\)$/.exec(n);if(l&&_a.has(l[1])){let c=[];for(let u of vr(l[2])){let f=Ee(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function xt(e){let t=[],n=!1,s=0;for(;s<e.length;){if(/\s/.test(e[s])){s++;continue}if(e[s]==="{"){let i=0,a=s;for(let l=s;l<e.length;l++)if(e[l]==="{")i++;else if(e[l]==="}"&&(i--,i===0)){s=l+1;break}s===a&&(s=e.length),/^\{\s*\.\.\./.test(e.slice(a))&&(n=!0);continue}let r=/^([A-Za-z_:][\w:.-]*)/.exec(e.slice(s));if(!r){s++;continue}for(s+=r[0].length;s<e.length&&/\s/.test(e[s]);)s++;if(e[s]!=="="){t.push({name:r[1]});continue}for(s++;s<e.length&&/\s/.test(e[s]);)s++;let o=ue(e,s);if(o){t.push({name:r[1],value:o.value}),s=o.end;continue}if(e[s]==="{"){let i=0,a=s;for(let u=s;u<e.length;u++)if(e[u]==="{")i++;else if(e[u]==="}"&&(i--,i===0)){s=u+1;break}s===a&&(s=e.length);let l=e.slice(a+1,s-1).trim(),c=ue(l,0);c&&c.end===l.length?t.push({name:r[1],value:c.value}):t.push({name:r[1],expr:l});continue}s++}return{list:t,spread:n}}function hn(e,t){let n=xt(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:je(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:Ee(n.expr,t):null}function Sr(e,t){return/[<>]/.test(t)?!1:e==="href"||e==="src"||e==="action"?/^(?:https?:|mailto:|\/|#)/i.test(t):!0}function Pa(e){return e==="class"||e==="className"?!1:!Ia.test(e)&&!/^on/i.test(e)}function Rr(e){let t={};for(let n of xt(e).list){if(!Pa(n.name)||n.expr!==void 0)continue;let s=n.value??"";Sr(n.name,s)&&(t[n.name]=s)}return t}var La=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,Oa=new Set(["disabled","hidden"]);function mt(e,t,n=0){if(n>4)return null;let s=mn(e),r=ue(s,0);if(r&&r.end===s.length)return r.value;let o=Cr(s);if(o){let l=Pe(o.condition,t);return l===null?null:mt(l?o.yes:o.no,t,n+1)}let i=gn(s,"||");if(i>=0){let l=mt(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:mt(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!fn.test(s))return null;let a=t.values.get(s);if(typeof a=="string")return t.strings.add(s),a;if(typeof a=="boolean"||t.aliases.has(s)){let l=$r(s,t,n);return l===null?null:l?"true":void 0}return t.values.has(s)?void 0:null}function Ma(e,t){let n={};for(let s of xt(e).list){if(s.expr===void 0||!La.test(s.name))continue;let r=mt(s.expr,t);if(r!=null){if(Oa.has(s.name)){r!=="false"&&(n[s.name]="");continue}Sr(s.name,r)&&(n[s.name]=r)}}return n}function Na(e,t){let n=/([A-Za-z_][\w-]*)\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*["']([^"']*)["']\s*\})/g;for(let s of e.matchAll(n)){let r=s.index??0;if(t>=r&&t<r+s[0].length){let o=s[1];return o==="class"||o==="className"?{}:{prop:o,value:s[2]??s[3]??s[4]}}}return{}}function bt(e,t=0){if(t>6)return"";let n="",s=0;for(;s<e.length;){if(e[s]==="{"){let i=0,a=s;for(let u=s;u<e.length;u++)if(e[u]==="{")i++;else if(e[u]==="}"&&(i--,i===0)){a=u+1;break}if(a===s)break;let l=e.slice(s+1,a-1).trim();/^[A-Za-z_$][\w$]*$/.exec(l)?.[0]&&(n+='<span class="__gs-slot">Text</span>'),s=a;continue}if(e[s]==="<"){if(e.startsWith("<!--",s)){let l=e.indexOf("-->",s);s=l===-1?e.length:l+3;continue}if(e.startsWith("</",s)){let l=/^<\/[A-Za-z][\w.-]*\s*>/.exec(e.slice(s));s+=l?l[0].length:1;continue}let i=yt(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=bt(i.body,t+1);else if(Aa.has(a)){let l=hn(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${br(l.classes.join(" "))}"`:"",u=bt(i.body,t+1);n+=`<${a}${c}>${u}</${a}>`}s=i.closeEnd;continue}let r=e.slice(s).search(/[<{}]/),o=r===-1?e.length:s+r;n+=br(e.slice(s,o)),s=o}return n}function Da(e){let t=hn(e.attrs);return!t||t.dynamic||t.classes.length===0?null:{tag:e.tag.toLowerCase(),classes:t.classes,attrs:Rr(e.attrs)}}function Ar(e,t){let n=[],s=t-1;for(;n.length<3&&s>=0;){let r=dn(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=Da(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var Ta=8;function Ba(e){let t=e.trim(),n=ue(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function Fa(e,t){let n=0,s=-1;for(let i=t;i<e.length&&i<t+2e3;i++){let a=e[i];if(a==='"'||a==="'"||a==="`"){let l=ue(e,i);if(!l)return null;i=l.end-1;continue}if(a==="{")n++;else if(a==="}"&&(n--,n===0)){s=i;break}}if(s<0)return null;let r=e.slice(s+1).trimStart()[0];if(r!==")"&&r!==":")return null;let o=new Map;for(let i of vr(e.slice(t+1,s))){if(i.startsWith("..."))continue;let a=/^([A-Za-z_$][\w$]*)(?:\s*:\s*([A-Za-z_$][\w$]*))?(?:\s*=\s*([\s\S]+))?$/.exec(i);if(!a)continue;let l=a[2]??a[1];if(a[3]===void 0){o.set(l,void 0);continue}let c=Ba(a[3]);c!==null&&o.set(l,c)}return{values:o,end:s}}function Ua(e,t){let n=new Set(t.attrs.match(/[A-Za-z_$][\w$]*/g)??[]),s=Math.max(0,t.openStart-8e3),o=[...e.slice(s,t.openStart).matchAll(/\(\s*\{/g)].reverse();for(let i of o){let a=s+(i.index??0)+i[0].length-1,l=Fa(e,a);if(!l||![...l.values.keys()].some(f=>n.has(f)))continue;let c=new Map,u=e.slice(l.end,t.openStart);for(let f of u.matchAll(/\bconst\s+([A-Za-z_$][\w$]*)\s*=\s*([^;\n]+);/g))n.has(f[1])&&c.set(f[1],f[2].trim());return ht(l.values,c)}return ht()}function Va(e,t){let n=new Map;for(let s of e.matchAll(/([\w-]+)\$\{\s*([A-Za-z_$][\w$]*)\s*\}/g)){let r=s[1],o=t.find(i=>i.startsWith(r)&&i.length>r.length);o&&n.set(s[2],o.slice(r.length))}return n}function za(e,t,n,s){let r=Ea(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let m=Na(e.slice(t.openStart,t.openEnd),n-t.openStart);return{kind:"component",...r,component:{tag:t.tag,...m}}}let o=Ua(e,t);for(let[m,h]of Va(t.attrs,s))o.values.set(m,h);let i={};for(let[m,h]of o.values)i[m]=h??null;let a={attrs:t.attrs,values:i,aliases:Object.fromEntries(o.aliases)},l=ht(new Map(o.values),o.aliases),c=Wa(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:Ar(e,t.openStart),bodyHtml:bt(t.body)},f=[...[...l.strings].filter(m=>typeof o.values.get(m)=="string").map(m=>({name:m,kind:"text",...l.prefixes.has(m)?{prefix:l.prefixes.get(m)}:{}})),...[...l.flags].slice(0,Ta).map(m=>({name:m,kind:"flag"}))];return f.length===0?{kind:"markup",...r,element:u}:{kind:"markup",...r,element:u,params:f,redraw:a}}function Wa(e,t){let n=hn(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...Rr(e),...Ma(e,t)}}}function bn(e,t,n,s){if(Sa.test(s))return yr(e,t);let r=dn(e,t);return r==="too-big"||!r?yr(e,t):za(e,r,t,n)}function Ga(e){let t={},n=new Set,{list:s,spread:r}=xt(e);for(let o of s)o.expr===void 0?t[o.name]=o.value??"true":o.expr==="true"||o.expr==="false"?t[o.name]=o.expr:n.add(o.name);return{literals:t,dynamic:n,spread:r}}function _r(e,t){let n=Ga(t),s=new Map,r=[],o=[],i=[],a=n.spread;for(let l of e.axes){if(l.opaque){a=!0;continue}if(!l.locked&&n.dynamic.has(l.prop)){a=!0;continue}let c=l.locked?l.defaultValue:n.literals[l.prop]??(n.spread?void 0:l.defaultValue);if(c===void 0)continue;s.set(l.prop,c);let u=!l.locked&&n.literals[l.prop]===c;if(l.prefix){o.push(`${l.prefix}${c}`),u&&c!==l.defaultValue&&i.push({prop:l.prop,value:c,known:l.defaultValue?[l.defaultValue]:[],cls:`${l.prefix}${c}`});continue}let f=l.values.find(m=>m.value===c);if(!f){a=!0,u&&l.values.length>0&&i.push({prop:l.prop,value:c,known:l.values.map(m=>m.value)});continue}for(let m of f.classes)m.startsWith("__gs-recipe-")&&r.push(m),o.push(m)}if(!a){for(let l of e.compounds)if(l.when.every(u=>s.get(u.prop)===u.value))for(let u of l.classes)u.startsWith("__gs-recipe-")&&r.push(u),o.push(u)}return e.classNameProp&&(n.dynamic.has("className")?a=!0:n.literals.className&&o.push(...je(n.literals.className))),{draw:a?null:[...e.staticClasses,...o],selects:r,unknown:i}}function yn(e){let t=[],n=/import\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;for(let s of e.matchAll(n)){let r=s[2];for(let o of s[1].split(",")){let i=o.trim().split(/\s+as\s+/),a=i[0]?.trim(),l=(i[1]??i[0])?.trim();a&&l&&t.push({local:l,imported:a,spec:r})}}return t}function Ha(e,t,n,s,r){for(let o of yn(t)){if(o.local!==n)continue;let i=r(e,o.spec),a=s.find(l=>l.path===i&&l.component===o.imported);if(a)return a}return s.find(o=>o.path===e&&o.component===n)}function Ir(e,t,n,s,r,o){if(e.kind!=="component"||!e.component||r.length===0)return e;let i=Ha(s,t,e.component.tag,r,o);if(!i)return e;let a=dn(t,n),l=e.component.tag;if(!a||a==="too-big"||a.tag!==l&&a.tag!==i.component)return e;let c=_r(i,a.attrs);return c.draw?{kind:"markup",source:e.source,startLine:e.startLine,component:e.component,element:{tag:i.rootTag,classes:c.draw,attrs:{},ancestors:Ar(t,a.openStart),bodyHtml:bt(a.body)}}:e}function kt(e,t,n,s){let r=[],o=new Set,i=(l,c)=>{let u=`${l}\0${c.path}`;o.has(u)||(o.add(u),r.push({local:l,binding:c}))};for(let l of yn(t)){let c=s(e,l.spec),u=n.find(f=>f.path===c&&f.component===l.imported);u&&i(l.local,u)}for(let l of n)l.path===e&&i(l.component,l);let a=[];for(let{local:l,binding:c}of r){let u=0,f=`<${l}`;for(;u<t.length;){let m=t.indexOf(f,u);if(m<0)break;let h=t[m+f.length];if(h&&/[\w.]/.test(h)){u=m+f.length;continue}let w=yt(t,m);if(!w||w==="too-big"){u=m+f.length;continue}let C=_r(c,w.attrs);(C.selects.length||C.unknown.length)&&a.push({offset:m,component:l,selects:C.selects,unknown:C.unknown}),u=Math.max(w.closeEnd,m+f.length)}}return a}function Ka(e,t){let n=e.slice(t,t+700),s=n.indexOf("{");if(s<0)return{};let r=n.indexOf("}",s),o=n.slice(s,r<0?s+400:r+1),i={};for(let a of o.matchAll(/([A-Za-z_$][\w$]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g))i[a[1]]=a[2]??a[3]??"";return i}function Ja(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=ue(e,n);if(s)return s.value;if(e[n]!=="{")return null;let r=0;for(let o=n;o<e.length;o++)if(e[o]==="{")r++;else if(e[o]==="}"&&(r--,r===0))return e.slice(n+1,o);return null}function Za(e,t){let n=t+1;for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===")")return{rename:{},fixed:{},opaque:[]};if(e[n]!=="{")return null;let s={rename:{},fixed:{},opaque:[]};for(n++;n<e.length;){for(;n<e.length&&/[\s,]/.test(e[n]);)n++;if(e[n]==="}")return s;if(e.startsWith("...",n))return null;let r=/^[A-Za-z_$][\w$]*/.exec(e.slice(n));if(!r)return null;for(n+=r[0].length;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===","||e[n]==="}"){s.rename[r[0]]=r[0];continue}if(e[n]!==":")return null;for(n++;n<e.length&&/\s/.test(e[n]);)n++;let o=ue(e,n);if(o){s.fixed[r[0]]=o.value,n=o.end;continue}let i=/^[A-Za-z_$][\w$]*/.exec(e.slice(n));if(i){s.rename[r[0]]=i[0],n+=i[0].length;continue}s.opaque.push(r[0]);let a=0;for(;n<e.length;){let l=e[n];if(l==='"'||l==="'"||l==="`"){let c=ue(e,n);if(!c)return null;n=c.end;continue}if(l==="("||l==="["||l==="{")a++;else if(l===")"||l==="]"||l==="}"){if(a===0)break;a--}else if(l===","&&a===0)break;n++}}return null}function qa(e,t,n,s){let r=[];for(let o of yn(e)){let i=s(t,o.spec),a=n.find(l=>l.path===i&&l.name===o.imported);a&&r.push({local:o.local,recipe:a})}for(let o of n)o.path===t&&o.name&&r.push({local:o.name,recipe:o});return r}function Xa(e){let t=[],n=/(?:styles?|classes|css|cls)\s*\.\s*([A-Za-z_]\w*)/g;for(let c of e.matchAll(n))t.push({at:c.index??0,kind:"static",text:wr(c[1])});let s=/(?:styles?|classes|css|cls)\s*\[\s*["']([^"']+)["']\s*\]/g;for(let c of e.matchAll(s))t.push({at:c.index??0,kind:"static",text:c[1]});let r=/(?:styles?|classes|css|cls)\s*\[\s*`([^`$]*)\$\{\s*([A-Za-z_$][\w$]*)\s*\}`\s*\]/g;for(let c of e.matchAll(r))t.push({at:c.index??0,kind:"prefix",text:c[1],prop:c[2]});let o=/(?:styles?|classes|css|cls)\s*\[\s*["']([^"']+)["']\s*\+\s*([A-Za-z_$][\w$]*)\s*\]/g;for(let c of e.matchAll(o))t.push({at:c.index??0,kind:"prefix",text:c[1],prop:c[2]});/[[{(]/.test(e)||t.push({at:0,kind:"static",text:e.trim()}),t.sort((c,u)=>c.at-u.at);let i=[],a=[];for(let c of t)c.kind==="prefix"&&c.prop?a.push({prop:c.prop,prefix:c.text}):i.push(...je(c.text));let l=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:i,prefixes:a,classNameProp:l}}function Ya(e,t,n,s,r){let o=l=>t.rename[l]??l,i=e.axes.map(l=>{let c=t.fixed[l.prop],u=o(l.prop);return{prop:u,values:c?l.values.filter(f=>f.value===c):l.values,defaultValue:c??n[u]??l.defaultValue,opaque:t.opaque.includes(l.prop),locked:!!c}}),a=e.compounds.map(l=>({classes:l.classes,when:l.when.map(c=>({prop:o(c.prop),value:t.fixed[c.prop]??c.value}))}));return{staticClasses:[...e.staticClasses,...s],axes:i,compounds:a,classNameProp:r}}function Er(e,t,n){let s=[];for(let r of e){let o=qa(r.source,r.path,t,n);for(let i of r.names){let a=new RegExp(`(?:function\\s+${i}\\b|(?:const|let|var)\\s+${i}\\b)`,"g"),l=[...r.source.matchAll(a)],c=null;for(let u of l){let f=u.index??0,h=r.source.slice(f+u[0].length).search(/\nexport\s/),w=r.source.slice(f,f+u[0].length+(h<0?8e3:h)),C=Ka(r.source,f),$=0;for(;$<w.length;){if(w[$]!=="<"||w[$+1]==="/"||w[$+1]==="!"){$++;continue}let g=yt(w,$);if(!g||g==="too-big"){$++;continue}if($=g.openEnd,/^[A-Z]/.test(g.tag))continue;let p=Ja(g.attrs);if(!p)continue;let d=Xa(p),y=d.prefixes.length?2:d.staticClasses.length?1:0,k=null,x=o.find(v=>new RegExp(`(?:^|[^\\w$])${v.local}\\s*\\(`).test(p));if(x){let v=p.search(new RegExp(`(?:^|[^\\w$])${x.local}\\s*\\(`)),E=p.indexOf("(",v),j=E<0?null:Za(p,E);if(j){y=3,k=Ya(x.recipe,j,C,d.staticClasses,d.classNameProp);for(let R of d.prefixes)k.axes.push({prop:R.prop,values:[],prefix:R.prefix,defaultValue:C[R.prop]})}}!k&&(d.prefixes.length||d.staticClasses.length)&&(k={staticClasses:d.staticClasses,axes:d.prefixes.map(v=>({prop:v.prop,values:[],prefix:v.prefix,defaultValue:C[v.prop]})),compounds:[],classNameProp:d.classNameProp}),k&&(!c||y>c.score)&&(c={score:y,tag:g.tag.toLowerCase(),body:k})}}c&&s.push({component:i,path:r.path,rootTag:c.tag,...c.body})}}return s}var Qa=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,el=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,tl=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),nl=new Set(["icon","glyph","svg"]),sl=new Set(["label","text","title","caption"]),rl=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Pr(e){let t=e.flatMap(rl);return t.some(n=>nl.has(n))?"icon":t.some(n=>sl.has(n))?"label":null}function ol(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(Qa)){let r=s[1];if(!tl.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(el)].map(a=>a[1]??a[2]),i=Pr(o);i&&n.push({index:s.index??0,role:i,tag:r.toLowerCase(),classes:o})}return n}function il(e,t,n){if(!t.some(r=>r.property.toLowerCase()==="display"&&/^none\b/i.test(r.value.trim()))||n.size===0)return null;for(let r of W(e)){let o=Q(r);if(!o||o.length<2)continue;let i=o[o.length-1];if(i.combinator!==" "&&i.combinator!==">")continue;let a=i.simples.filter(m=>m.kind==="class");if(a.length!==1||a[0].kind!=="class"||!n.has(a[0].name))continue;let l=o[o.length-2];if(l.simples.filter(m=>m.kind!=="class"&&m.kind!=="attr"&&m.kind!=="tag").length>0)continue;let u=l.simples.filter(m=>m.kind==="class"),f=l.simples.filter(m=>m.kind==="attr");if(u.length===1&&f.length===0&&u[0].kind==="class"&&!/^(?:is|has)-/.test(u[0].name))return{classes:[u[0].name],attrs:{}};if(u.length===0&&f.length===1&&f[0].kind==="attr"&&f[0].value)return{classes:[],attrs:{[f[0].name]:f[0].value}}}return null}var al=["text","icon-start","icon-end","icon"],jr={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function ll(e,t){let n=null,s=null;for(let i of t)i.index<e.index?n=i:s||(s=i);if(!n&&!s)return null;let r=n?e.index-n.index:1/0;return(s?s.index-e.index:1/0)<=r?"start":"end"}function Le(e){return{role:e.role,tag:e.tag,classes:e.classes}}function Lr(e){let t=new Map,n=(s,r)=>{let o=t.get(s)??[];o.some(i=>i.path===r.path)||o.push(r),t.set(s,o)};for(let s of e){let r=s.sources.flatMap(ol),o=r.filter(h=>h.role==="label"),i=r.filter(h=>h.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[Le(a)],classes:[],attrs:{}});let l=new Set(o.flatMap(h=>h.classes.filter(w=>Pr([w])==="label"))),c=null,u=null;for(let h of i){let w=ll(h,o),C=o.reduce(($,g)=>{let p=Math.abs(g.index-h.index);return!$||p<$.dist?{hit:g,dist:p}:$},null);w==="start"&&C&&!c&&(c={icon:h,label:C.hit}),w==="end"&&C&&!u&&(u={icon:h,label:C.hit})}c&&n("icon-start",{path:s.sheet,slots:[Le(c.icon),Le(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[Le(u.label),Le(u.icon)],classes:[],attrs:{}});let f=null;for(let h of s.rules)if(f=il(h.selector,h.declarations,l),f)break;let m=c?.icon??u?.icon??i[0]??null;f&&m&&n("icon",{path:s.sheet,slots:[Le(m)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:jr.text,sheets:t.get("text")??[]},...al.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:jr[s],sheets:t.get(s)??[]}))]}function cl(e,t){if(!e)return t;let n=W(e);return W(t).flatMap(s=>n.map(r=>s.includes("&")?s.replaceAll("&",r):`${r} ${s}`)).join(", ")}var ul=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function ke(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,i=>i.replace(/[^\n]/g," ")),n=[],s=[],r=0,o=1;for(let i=0;i<t.length;i++){let a=t[i];if(a===`
46
- `&&o++,a==="{"){let l=t.slice(r,i).trim(),c=s[s.length-1];c&&(c.own+=t.slice(c.segStart,r));let u=/^@theme\b/i.test(l),f=l.startsWith("@")&&!u,m=[...s].reverse().find(h=>!h.isAt)??null;s.push({selector:l,resolved:f?l:u?":root":cl(m?.resolved??null,l),isAt:f,skip:(c?.skip??!1)||f&&ul.test(l),start:i+1,line:o,own:"",segStart:i+1}),r=i+1}else if(a==="}"){let l=s.pop();if(l){l.own+=t.slice(l.segStart,i),!l.isAt&&!l.skip&&n.push({selector:l.resolved,body:t.slice(l.start,i),ownBody:l.own,line:l.line,context:s.filter(u=>u.isAt).map(u=>u.selector.replace(/\s+/g," ")).join(" \xB7 ")});let c=s[s.length-1];c&&(c.segStart=i+1)}r=i+1}else a===";"&&(r=i+1)}return n}function pe(e){let t=[],n=0,s=0,r=o=>{let i=o.indexOf(":");if(i<=0)return;let a=o.slice(0,i).trim(),l=o.slice(i+1).replace(/\s+/g," ").trim();/^-{0,2}[a-z][\w-]*$/i.test(a)&&l&&a!=="composes"&&t.push({property:a,value:l})};for(let o=0;o<e.length;o++){let i=e[o];i==="("?n++:i===")"?n=Math.max(0,n-1):i===";"&&n===0&&(r(e.slice(s,o)),s=o+1)}return r(e.slice(s)),t}var pl=25,fl=12,Or=700,dl=/\b(?:must(?: not)?|never|always|should(?: not|n't)?|do not|don't|avoid|prefer|forbidden|not allowed|no more than)\b/i,re=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function gl(e){let t=e.split(`
47
+ \u2026`:""),startLine:o}}function Pa(e,t){let n=xr(e,Math.max(0,t)),s=e.split(`
48
+ `),r=Math.max(0,n-1);return{source:kr(s.slice(r,r+12)),startLine:r+1}}function yr(e,t){return{kind:"other",...Pa(e,t)}}function yt(e,t){let n=hr.exec(e.slice(t));if(!n)return null;let s=n[1],r=n[2]??"",o=t+n[0].length;if(/\/\s*$/.test(r)||Aa.has(s.toLowerCase()))return{tag:s,attrs:r,openStart:t,openEnd:o,closeEnd:o,body:""};let a=1,l=o,c=Math.min(e.length,t+4e3);for(;l<c;){if(e[l]!=="<"){l++;continue}if(e.startsWith("</",l)){let f=/^<\/([A-Za-z][\w.-]*)\s*>/.exec(e.slice(l));if(f&&f[1].toLowerCase()===s.toLowerCase()){if(a--,a===0){let m=l+f[0].length;return{tag:s,attrs:r,openStart:t,openEnd:o,closeEnd:m,body:e.slice(o,l)}}l+=f?f[0].length:2;continue}l+=f?f[0].length:2;continue}let u=hr.exec(e.slice(l));if(u&&u[1].toLowerCase()===s.toLowerCase()&&!/\/\s*$/.test(u[2]??"")&&(a++,a>6))return"too-big";l+=u?u[0].length:1}return l>=c&&o+(c-t)>=4e3?"too-big":null}function dn(e,t){let n=Math.max(0,t-8e3),s=Math.min(t,e.length-1);for(;s>=n;){let r=e.lastIndexOf("<",s);if(r<n)return null;if(e[r+1]==="/"||e[r+1]==="!"||e[r+1]==="?"){s=r-1;continue}let o=yt(e,r);if(o==="too-big")return"too-big";if(o&&t>=o.openStart&&t<o.closeEnd)return o;s=r-1}return null}function wr(e){return e.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function je(e){return e.split(/\s+/).filter(Boolean)}function ue(e,t){let n=e[t];if(n!=='"'&&n!=="'"&&n!=="`")return null;let s="";for(let r=t+1;r<e.length;r++){let o=e[r];if(o==="\\"){s+=e[r+1]??"",r++;continue}if(n==="`"&&o==="$"&&e[r+1]==="{")return null;if(o===n)return{value:s,end:r+1};s+=o}return null}function vr(e){let t=[],n="",s=0,r=null;for(let o=0;o<e.length;o++){let i=e[o];if(r){if(n+=i,i==="\\"){n+=e[o+1]??"",o++;continue}i===r&&(r=null);continue}if(i==='"'||i==="'"||i==="`"){r=i,n+=i;continue}if(i==="("||i==="["||i==="{")s++;else if(i===")"||i==="]"||i==="}")s=Math.max(0,s-1);else if(i===","&&s===0){n.trim()&&t.push(n.trim()),n="";continue}n+=i}return n.trim()&&t.push(n.trim()),t}function ht(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var fn=/^[A-Za-z_$][\w$]*$/;function gn(e,t){let n=0,s=null;for(let r=0;r<e.length;r++){let o=e[r];if(s){o==="\\"?r++:o===s&&(s=null);continue}if(o==='"'||o==="'"||o==="`"){s=o;continue}if(o==="("||o==="["||o==="{")n++;else if(o===")"||o==="]"||o==="}")n--;else if(n===0&&e.startsWith(t,r))return r}return-1}function mn(e){let t=e.trim();for(;t.startsWith("(")&&t.endsWith(")");){let n=0,s=!0;for(let r=0;r<t.length-1&&s;r++)t[r]==="("?n++:t[r]===")"&&n--,n===0&&(s=!1);if(!s)break;t=t.slice(1,-1).trim()}return t}function $r(e,t,n){if(e==="true")return!0;if(e==="false"||e==="undefined"||e==="null")return!1;let s=t.aliases.get(e);return s!==void 0&&!t.values.has(e)?Pe(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function Pe(e,t,n=0){if(n>4)return null;let s=mn(e);for(let c of["||","&&"]){let u=gn(s,c);if(u<0)continue;let f=Pe(s.slice(0,u),t,n+1),m=Pe(s.slice(u+2),t,n+1);return f===null||m===null?null:c==="||"?f||m:f&&m}let r=/^(!\s*)?([A-Za-z_$][\w$]*)$/.exec(s);if(r){let c=$r(r[2],t,n);return c===null?null:r[1]?!c:c}let o=/^([A-Za-z_$][\w$]*)\s*(===|==|!==|!=)\s*(["'])(.*?)\3$/.exec(s);if(!o)return null;let i=t.values.get(o[1]);typeof i=="string"&&t.strings.add(o[1]);let a=typeof i=="string"?i:"";return o[2]==="==="||o[2]==="=="?a===o[4]:a!==o[4]}function Cr(e){let t=0,n=null,s=-1;for(let r=0;r<e.length;r++){let o=e[r];if(n){o==="\\"?r++:o===n&&(n=null);continue}if(o==='"'||o==="'"||o==="`"){n=o;continue}if(o==="("||o==="["||o==="{")t++;else if(o===")"||o==="]"||o==="}")t--;else if(o==="?"&&t===0){s=r;break}}if(s<0)return null;t=0,n=null;for(let r=s+1;r<e.length;r++){let o=e[r];if(n){o==="\\"?r++:o===n&&(n=null);continue}if(o==='"'||o==="'"||o==="`"){n=o;continue}if(o==="("||o==="["||o==="{")t++;else if(o===")"||o==="]"||o==="}")t--;else if(o===":"&&t===0)return{condition:e.slice(0,s),yes:e.slice(s+1,r),no:e.slice(r+1)}}return null}function Ie(e,t=ht()){let n=mn(e);if(!n)return{classes:[],dynamic:!1};let s=Cr(n);if(s){let c=Pe(s.condition,t);return c===null?{classes:[],dynamic:!0}:Ie(c?s.yes:s.no,t)}let r=gn(n,"&&");if(r>=0){let c=Pe(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?Ie(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:je(n.slice(1,-1)),dynamic:!1};if(n.startsWith("`")&&n.endsWith("`")){let c=n.slice(1,-1),u="",f=0;for(;f<c.length;){let m=c.indexOf("${",f);if(m<0){u+=c.slice(f);break}u+=c.slice(f,m);let h=c.indexOf("}",m+2);if(h<0)return{classes:[],dynamic:!0};let w=c.slice(m+2,h).trim();if(fn.test(w)){let C=t.values.get(w);if(typeof C!="string")return{classes:[],dynamic:!0};t.strings.add(w);let $=/[\w-]*$/.exec(u)?.[0];$&&t.prefixes.set(w,$),u+=C}else{let C=Ie(w,t);if(C.dynamic)return{classes:[],dynamic:!0};u+=C.classes.join(" ")}f=h+1}return{classes:je(u),dynamic:!1}}if(fn.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:je(c),dynamic:!1})}let o=/^(?:styles?|classes|css|cls)\.([A-Za-z_]\w*)$/.exec(n);if(o)return{classes:[wr(o[1])],dynamic:!1};let i=/^(?:styles?|classes|css|cls)\[\s*["']([\w-]+)["']\s*\]$/.exec(n);if(i)return{classes:[i[1]],dynamic:!1};let a=/^(?:styles?|classes|css|cls)\[\s*(`[^`]*`)\s*\]$/.exec(n);if(a){let c=Ie(a[1],t);return c.dynamic||c.classes.length!==1?{classes:[],dynamic:!0}:c}let l=/^([A-Za-z_][\w]*)\s*\(([\s\S]*)\)$/.exec(n);if(l&&Ea.has(l[1])){let c=[];for(let u of vr(l[2])){let f=Ie(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function xt(e){let t=[],n=!1,s=0;for(;s<e.length;){if(/\s/.test(e[s])){s++;continue}if(e[s]==="{"){let i=0,a=s;for(let l=s;l<e.length;l++)if(e[l]==="{")i++;else if(e[l]==="}"&&(i--,i===0)){s=l+1;break}s===a&&(s=e.length),/^\{\s*\.\.\./.test(e.slice(a))&&(n=!0);continue}let r=/^([A-Za-z_:][\w:.-]*)/.exec(e.slice(s));if(!r){s++;continue}for(s+=r[0].length;s<e.length&&/\s/.test(e[s]);)s++;if(e[s]!=="="){t.push({name:r[1]});continue}for(s++;s<e.length&&/\s/.test(e[s]);)s++;let o=ue(e,s);if(o){t.push({name:r[1],value:o.value}),s=o.end;continue}if(e[s]==="{"){let i=0,a=s;for(let u=s;u<e.length;u++)if(e[u]==="{")i++;else if(e[u]==="}"&&(i--,i===0)){s=u+1;break}s===a&&(s=e.length);let l=e.slice(a+1,s-1).trim(),c=ue(l,0);c&&c.end===l.length?t.push({name:r[1],value:c.value}):t.push({name:r[1],expr:l});continue}s++}return{list:t,spread:n}}function hn(e,t){let n=xt(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:je(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:Ie(n.expr,t):null}function Sr(e,t){return/[<>]/.test(t)?!1:e==="href"||e==="src"||e==="action"?/^(?:https?:|mailto:|\/|#)/i.test(t):!0}function La(e){return e==="class"||e==="className"?!1:!Ia.test(e)&&!/^on/i.test(e)}function Rr(e){let t={};for(let n of xt(e).list){if(!La(n.name)||n.expr!==void 0)continue;let s=n.value??"";Sr(n.name,s)&&(t[n.name]=s)}return t}var Oa=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,Ma=new Set(["disabled","hidden"]);function mt(e,t,n=0){if(n>4)return null;let s=mn(e),r=ue(s,0);if(r&&r.end===s.length)return r.value;let o=Cr(s);if(o){let l=Pe(o.condition,t);return l===null?null:mt(l?o.yes:o.no,t,n+1)}let i=gn(s,"||");if(i>=0){let l=mt(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:mt(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!fn.test(s))return null;let a=t.values.get(s);if(typeof a=="string")return t.strings.add(s),a;if(typeof a=="boolean"||t.aliases.has(s)){let l=$r(s,t,n);return l===null?null:l?"true":void 0}return t.values.has(s)?void 0:null}function Na(e,t){let n={};for(let s of xt(e).list){if(s.expr===void 0||!Oa.test(s.name))continue;let r=mt(s.expr,t);if(r!=null){if(Ma.has(s.name)){r!=="false"&&(n[s.name]="");continue}Sr(s.name,r)&&(n[s.name]=r)}}return n}function Da(e,t){let n=/([A-Za-z_][\w-]*)\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*["']([^"']*)["']\s*\})/g;for(let s of e.matchAll(n)){let r=s.index??0;if(t>=r&&t<r+s[0].length){let o=s[1];return o==="class"||o==="className"?{}:{prop:o,value:s[2]??s[3]??s[4]}}}return{}}function bt(e,t=0){if(t>6)return"";let n="",s=0;for(;s<e.length;){if(e[s]==="{"){let i=0,a=s;for(let u=s;u<e.length;u++)if(e[u]==="{")i++;else if(e[u]==="}"&&(i--,i===0)){a=u+1;break}if(a===s)break;let l=e.slice(s+1,a-1).trim();/^[A-Za-z_$][\w$]*$/.exec(l)?.[0]&&(n+='<span class="__gs-slot">Text</span>'),s=a;continue}if(e[s]==="<"){if(e.startsWith("<!--",s)){let l=e.indexOf("-->",s);s=l===-1?e.length:l+3;continue}if(e.startsWith("</",s)){let l=/^<\/[A-Za-z][\w.-]*\s*>/.exec(e.slice(s));s+=l?l[0].length:1;continue}let i=yt(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=bt(i.body,t+1);else if(_a.has(a)){let l=hn(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${br(l.classes.join(" "))}"`:"",u=bt(i.body,t+1);n+=`<${a}${c}>${u}</${a}>`}s=i.closeEnd;continue}let r=e.slice(s).search(/[<{}]/),o=r===-1?e.length:s+r;n+=br(e.slice(s,o)),s=o}return n}function Ta(e){let t=hn(e.attrs);return!t||t.dynamic||t.classes.length===0?null:{tag:e.tag.toLowerCase(),classes:t.classes,attrs:Rr(e.attrs)}}function Ar(e,t){let n=[],s=t-1;for(;n.length<3&&s>=0;){let r=dn(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=Ta(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var Ba=8;function Fa(e){let t=e.trim(),n=ue(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function Ua(e,t){let n=0,s=-1;for(let i=t;i<e.length&&i<t+2e3;i++){let a=e[i];if(a==='"'||a==="'"||a==="`"){let l=ue(e,i);if(!l)return null;i=l.end-1;continue}if(a==="{")n++;else if(a==="}"&&(n--,n===0)){s=i;break}}if(s<0)return null;let r=e.slice(s+1).trimStart()[0];if(r!==")"&&r!==":")return null;let o=new Map;for(let i of vr(e.slice(t+1,s))){if(i.startsWith("..."))continue;let a=/^([A-Za-z_$][\w$]*)(?:\s*:\s*([A-Za-z_$][\w$]*))?(?:\s*=\s*([\s\S]+))?$/.exec(i);if(!a)continue;let l=a[2]??a[1];if(a[3]===void 0){o.set(l,void 0);continue}let c=Fa(a[3]);c!==null&&o.set(l,c)}return{values:o,end:s}}function Va(e,t){let n=new Set(t.attrs.match(/[A-Za-z_$][\w$]*/g)??[]),s=Math.max(0,t.openStart-8e3),o=[...e.slice(s,t.openStart).matchAll(/\(\s*\{/g)].reverse();for(let i of o){let a=s+(i.index??0)+i[0].length-1,l=Ua(e,a);if(!l||![...l.values.keys()].some(f=>n.has(f)))continue;let c=new Map,u=e.slice(l.end,t.openStart);for(let f of u.matchAll(/\bconst\s+([A-Za-z_$][\w$]*)\s*=\s*([^;\n]+);/g))n.has(f[1])&&c.set(f[1],f[2].trim());return ht(l.values,c)}return ht()}function za(e,t){let n=new Map;for(let s of e.matchAll(/([\w-]+)\$\{\s*([A-Za-z_$][\w$]*)\s*\}/g)){let r=s[1],o=t.find(i=>i.startsWith(r)&&i.length>r.length);o&&n.set(s[2],o.slice(r.length))}return n}function Wa(e,t,n,s){let r=ja(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let m=Da(e.slice(t.openStart,t.openEnd),n-t.openStart);return{kind:"component",...r,component:{tag:t.tag,...m}}}let o=Va(e,t);for(let[m,h]of za(t.attrs,s))o.values.set(m,h);let i={};for(let[m,h]of o.values)i[m]=h??null;let a={attrs:t.attrs,values:i,aliases:Object.fromEntries(o.aliases)},l=ht(new Map(o.values),o.aliases),c=Ga(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:Ar(e,t.openStart),bodyHtml:bt(t.body)},f=[...[...l.strings].filter(m=>typeof o.values.get(m)=="string").map(m=>({name:m,kind:"text",...l.prefixes.has(m)?{prefix:l.prefixes.get(m)}:{}})),...[...l.flags].slice(0,Ba).map(m=>({name:m,kind:"flag"}))];return f.length===0?{kind:"markup",...r,element:u}:{kind:"markup",...r,element:u,params:f,redraw:a}}function Ga(e,t){let n=hn(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...Rr(e),...Na(e,t)}}}function bn(e,t,n,s){if(Ra.test(s))return yr(e,t);let r=dn(e,t);return r==="too-big"||!r?yr(e,t):Wa(e,r,t,n)}function Ha(e){let t={},n=new Set,{list:s,spread:r}=xt(e);for(let o of s)o.expr===void 0?t[o.name]=o.value??"true":o.expr==="true"||o.expr==="false"?t[o.name]=o.expr:n.add(o.name);return{literals:t,dynamic:n,spread:r}}function _r(e,t){let n=Ha(t),s=new Map,r=[],o=[],i=[],a=n.spread;for(let l of e.axes){if(l.opaque){a=!0;continue}if(!l.locked&&n.dynamic.has(l.prop)){a=!0;continue}let c=l.locked?l.defaultValue:n.literals[l.prop]??(n.spread?void 0:l.defaultValue);if(c===void 0)continue;s.set(l.prop,c);let u=!l.locked&&n.literals[l.prop]===c;if(l.prefix){o.push(`${l.prefix}${c}`),u&&c!==l.defaultValue&&i.push({prop:l.prop,value:c,known:l.defaultValue?[l.defaultValue]:[],cls:`${l.prefix}${c}`});continue}let f=l.values.find(m=>m.value===c);if(!f){a=!0,u&&l.values.length>0&&i.push({prop:l.prop,value:c,known:l.values.map(m=>m.value)});continue}for(let m of f.classes)m.startsWith("__gs-recipe-")&&r.push(m),o.push(m)}if(!a){for(let l of e.compounds)if(l.when.every(u=>s.get(u.prop)===u.value))for(let u of l.classes)u.startsWith("__gs-recipe-")&&r.push(u),o.push(u)}return e.classNameProp&&(n.dynamic.has("className")?a=!0:n.literals.className&&o.push(...je(n.literals.className))),{draw:a?null:[...e.staticClasses,...o],selects:r,unknown:i}}function yn(e){let t=[],n=/import\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;for(let s of e.matchAll(n)){let r=s[2];for(let o of s[1].split(",")){let i=o.trim().split(/\s+as\s+/),a=i[0]?.trim(),l=(i[1]??i[0])?.trim();a&&l&&t.push({local:l,imported:a,spec:r})}}return t}function Ka(e,t,n,s,r){for(let o of yn(t)){if(o.local!==n)continue;let i=r(e,o.spec),a=s.find(l=>l.path===i&&l.component===o.imported);if(a)return a}return s.find(o=>o.path===e&&o.component===n)}function Er(e,t,n,s,r,o){if(e.kind!=="component"||!e.component||r.length===0)return e;let i=Ka(s,t,e.component.tag,r,o);if(!i)return e;let a=dn(t,n),l=e.component.tag;if(!a||a==="too-big"||a.tag!==l&&a.tag!==i.component)return e;let c=_r(i,a.attrs);return c.draw?{kind:"markup",source:e.source,startLine:e.startLine,component:e.component,element:{tag:i.rootTag,classes:c.draw,attrs:{},ancestors:Ar(t,a.openStart),bodyHtml:bt(a.body)}}:e}function kt(e,t,n,s){let r=[],o=new Set,i=(l,c)=>{let u=`${l}\0${c.path}`;o.has(u)||(o.add(u),r.push({local:l,binding:c}))};for(let l of yn(t)){let c=s(e,l.spec),u=n.find(f=>f.path===c&&f.component===l.imported);u&&i(l.local,u)}for(let l of n)l.path===e&&i(l.component,l);let a=[];for(let{local:l,binding:c}of r){let u=0,f=`<${l}`;for(;u<t.length;){let m=t.indexOf(f,u);if(m<0)break;let h=t[m+f.length];if(h&&/[\w.]/.test(h)){u=m+f.length;continue}let w=yt(t,m);if(!w||w==="too-big"){u=m+f.length;continue}let C=_r(c,w.attrs);(C.selects.length||C.unknown.length)&&a.push({offset:m,component:l,selects:C.selects,unknown:C.unknown}),u=Math.max(w.closeEnd,m+f.length)}}return a}function Ja(e,t){let n=e.slice(t,t+700),s=n.indexOf("{");if(s<0)return{};let r=n.indexOf("}",s),o=n.slice(s,r<0?s+400:r+1),i={};for(let a of o.matchAll(/([A-Za-z_$][\w$]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g))i[a[1]]=a[2]??a[3]??"";return i}function Za(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=ue(e,n);if(s)return s.value;if(e[n]!=="{")return null;let r=0;for(let o=n;o<e.length;o++)if(e[o]==="{")r++;else if(e[o]==="}"&&(r--,r===0))return e.slice(n+1,o);return null}function qa(e,t){let n=t+1;for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===")")return{rename:{},fixed:{},opaque:[]};if(e[n]!=="{")return null;let s={rename:{},fixed:{},opaque:[]};for(n++;n<e.length;){for(;n<e.length&&/[\s,]/.test(e[n]);)n++;if(e[n]==="}")return s;if(e.startsWith("...",n))return null;let r=/^[A-Za-z_$][\w$]*/.exec(e.slice(n));if(!r)return null;for(n+=r[0].length;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===","||e[n]==="}"){s.rename[r[0]]=r[0];continue}if(e[n]!==":")return null;for(n++;n<e.length&&/\s/.test(e[n]);)n++;let o=ue(e,n);if(o){s.fixed[r[0]]=o.value,n=o.end;continue}let i=/^[A-Za-z_$][\w$]*/.exec(e.slice(n));if(i){s.rename[r[0]]=i[0],n+=i[0].length;continue}s.opaque.push(r[0]);let a=0;for(;n<e.length;){let l=e[n];if(l==='"'||l==="'"||l==="`"){let c=ue(e,n);if(!c)return null;n=c.end;continue}if(l==="("||l==="["||l==="{")a++;else if(l===")"||l==="]"||l==="}"){if(a===0)break;a--}else if(l===","&&a===0)break;n++}}return null}function Xa(e,t,n,s){let r=[];for(let o of yn(e)){let i=s(t,o.spec),a=n.find(l=>l.path===i&&l.name===o.imported);a&&r.push({local:o.local,recipe:a})}for(let o of n)o.path===t&&o.name&&r.push({local:o.name,recipe:o});return r}function Ya(e){let t=[],n=/(?:styles?|classes|css|cls)\s*\.\s*([A-Za-z_]\w*)/g;for(let c of e.matchAll(n))t.push({at:c.index??0,kind:"static",text:wr(c[1])});let s=/(?:styles?|classes|css|cls)\s*\[\s*["']([^"']+)["']\s*\]/g;for(let c of e.matchAll(s))t.push({at:c.index??0,kind:"static",text:c[1]});let r=/(?:styles?|classes|css|cls)\s*\[\s*`([^`$]*)\$\{\s*([A-Za-z_$][\w$]*)\s*\}`\s*\]/g;for(let c of e.matchAll(r))t.push({at:c.index??0,kind:"prefix",text:c[1],prop:c[2]});let o=/(?:styles?|classes|css|cls)\s*\[\s*["']([^"']+)["']\s*\+\s*([A-Za-z_$][\w$]*)\s*\]/g;for(let c of e.matchAll(o))t.push({at:c.index??0,kind:"prefix",text:c[1],prop:c[2]});/[[{(]/.test(e)||t.push({at:0,kind:"static",text:e.trim()}),t.sort((c,u)=>c.at-u.at);let i=[],a=[];for(let c of t)c.kind==="prefix"&&c.prop?a.push({prop:c.prop,prefix:c.text}):i.push(...je(c.text));let l=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:i,prefixes:a,classNameProp:l}}function Qa(e,t,n,s,r){let o=l=>t.rename[l]??l,i=e.axes.map(l=>{let c=t.fixed[l.prop],u=o(l.prop);return{prop:u,values:c?l.values.filter(f=>f.value===c):l.values,defaultValue:c??n[u]??l.defaultValue,opaque:t.opaque.includes(l.prop),locked:!!c}}),a=e.compounds.map(l=>({classes:l.classes,when:l.when.map(c=>({prop:o(c.prop),value:t.fixed[c.prop]??c.value}))}));return{staticClasses:[...e.staticClasses,...s],axes:i,compounds:a,classNameProp:r}}function Ir(e,t,n){let s=[];for(let r of e){let o=Xa(r.source,r.path,t,n);for(let i of r.names){let a=new RegExp(`(?:function\\s+${i}\\b|(?:const|let|var)\\s+${i}\\b)`,"g"),l=[...r.source.matchAll(a)],c=null;for(let u of l){let f=u.index??0,h=r.source.slice(f+u[0].length).search(/\nexport\s/),w=r.source.slice(f,f+u[0].length+(h<0?8e3:h)),C=Ja(r.source,f),$=0;for(;$<w.length;){if(w[$]!=="<"||w[$+1]==="/"||w[$+1]==="!"){$++;continue}let g=yt(w,$);if(!g||g==="too-big"){$++;continue}if($=g.openEnd,/^[A-Z]/.test(g.tag))continue;let p=Za(g.attrs);if(!p)continue;let d=Ya(p),y=d.prefixes.length?2:d.staticClasses.length?1:0,k=null,x=o.find(v=>new RegExp(`(?:^|[^\\w$])${v.local}\\s*\\(`).test(p));if(x){let v=p.search(new RegExp(`(?:^|[^\\w$])${x.local}\\s*\\(`)),I=p.indexOf("(",v),j=I<0?null:qa(p,I);if(j){y=3,k=Qa(x.recipe,j,C,d.staticClasses,d.classNameProp);for(let R of d.prefixes)k.axes.push({prop:R.prop,values:[],prefix:R.prefix,defaultValue:C[R.prop]})}}!k&&(d.prefixes.length||d.staticClasses.length)&&(k={staticClasses:d.staticClasses,axes:d.prefixes.map(v=>({prop:v.prop,values:[],prefix:v.prefix,defaultValue:C[v.prop]})),compounds:[],classNameProp:d.classNameProp}),k&&(!c||y>c.score)&&(c={score:y,tag:g.tag.toLowerCase(),body:k})}}c&&s.push({component:i,path:r.path,rootTag:c.tag,...c.body})}}return s}var el=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,tl=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,nl=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),sl=new Set(["icon","glyph","svg"]),rl=new Set(["label","text","title","caption"]),ol=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Pr(e){let t=e.flatMap(ol);return t.some(n=>sl.has(n))?"icon":t.some(n=>rl.has(n))?"label":null}function il(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(el)){let r=s[1];if(!nl.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(tl)].map(a=>a[1]??a[2]),i=Pr(o);i&&n.push({index:s.index??0,role:i,tag:r.toLowerCase(),classes:o})}return n}function al(e,t,n){if(!t.some(r=>r.property.toLowerCase()==="display"&&/^none\b/i.test(r.value.trim()))||n.size===0)return null;for(let r of W(e)){let o=Q(r);if(!o||o.length<2)continue;let i=o[o.length-1];if(i.combinator!==" "&&i.combinator!==">")continue;let a=i.simples.filter(m=>m.kind==="class");if(a.length!==1||a[0].kind!=="class"||!n.has(a[0].name))continue;let l=o[o.length-2];if(l.simples.filter(m=>m.kind!=="class"&&m.kind!=="attr"&&m.kind!=="tag").length>0)continue;let u=l.simples.filter(m=>m.kind==="class"),f=l.simples.filter(m=>m.kind==="attr");if(u.length===1&&f.length===0&&u[0].kind==="class"&&!/^(?:is|has)-/.test(u[0].name))return{classes:[u[0].name],attrs:{}};if(u.length===0&&f.length===1&&f[0].kind==="attr"&&f[0].value)return{classes:[],attrs:{[f[0].name]:f[0].value}}}return null}var ll=["text","icon-start","icon-end","icon"],jr={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function cl(e,t){let n=null,s=null;for(let i of t)i.index<e.index?n=i:s||(s=i);if(!n&&!s)return null;let r=n?e.index-n.index:1/0;return(s?s.index-e.index:1/0)<=r?"start":"end"}function Le(e){return{role:e.role,tag:e.tag,classes:e.classes}}function Lr(e){let t=new Map,n=(s,r)=>{let o=t.get(s)??[];o.some(i=>i.path===r.path)||o.push(r),t.set(s,o)};for(let s of e){let r=s.sources.flatMap(il),o=r.filter(h=>h.role==="label"),i=r.filter(h=>h.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[Le(a)],classes:[],attrs:{}});let l=new Set(o.flatMap(h=>h.classes.filter(w=>Pr([w])==="label"))),c=null,u=null;for(let h of i){let w=cl(h,o),C=o.reduce(($,g)=>{let p=Math.abs(g.index-h.index);return!$||p<$.dist?{hit:g,dist:p}:$},null);w==="start"&&C&&!c&&(c={icon:h,label:C.hit}),w==="end"&&C&&!u&&(u={icon:h,label:C.hit})}c&&n("icon-start",{path:s.sheet,slots:[Le(c.icon),Le(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[Le(u.label),Le(u.icon)],classes:[],attrs:{}});let f=null;for(let h of s.rules)if(f=al(h.selector,h.declarations,l),f)break;let m=c?.icon??u?.icon??i[0]??null;f&&m&&n("icon",{path:s.sheet,slots:[Le(m)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:jr.text,sheets:t.get("text")??[]},...ll.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:jr[s],sheets:t.get(s)??[]}))]}function ul(e,t){if(!e)return t;let n=W(e);return W(t).flatMap(s=>n.map(r=>s.includes("&")?s.replaceAll("&",r):`${r} ${s}`)).join(", ")}var pl=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function ke(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,i=>i.replace(/[^\n]/g," ")),n=[],s=[],r=0,o=1;for(let i=0;i<t.length;i++){let a=t[i];if(a===`
49
+ `&&o++,a==="{"){let l=t.slice(r,i).trim(),c=s[s.length-1];c&&(c.own+=t.slice(c.segStart,r));let u=/^@theme\b/i.test(l),f=l.startsWith("@")&&!u,m=[...s].reverse().find(h=>!h.isAt)??null;s.push({selector:l,resolved:f?l:u?":root":ul(m?.resolved??null,l),isAt:f,skip:(c?.skip??!1)||f&&pl.test(l),start:i+1,line:o,own:"",segStart:i+1}),r=i+1}else if(a==="}"){let l=s.pop();if(l){l.own+=t.slice(l.segStart,i),!l.isAt&&!l.skip&&n.push({selector:l.resolved,body:t.slice(l.start,i),ownBody:l.own,line:l.line,context:s.filter(u=>u.isAt).map(u=>u.selector.replace(/\s+/g," ")).join(" \xB7 ")});let c=s[s.length-1];c&&(c.segStart=i+1)}r=i+1}else a===";"&&(r=i+1)}return n}function pe(e){let t=[],n=0,s=0,r=o=>{let i=o.indexOf(":");if(i<=0)return;let a=o.slice(0,i).trim(),l=o.slice(i+1).replace(/\s+/g," ").trim();/^-{0,2}[a-z][\w-]*$/i.test(a)&&l&&a!=="composes"&&t.push({property:a,value:l})};for(let o=0;o<e.length;o++){let i=e[o];i==="("?n++:i===")"?n=Math.max(0,n-1):i===";"&&n===0&&(r(e.slice(s,o)),s=o+1)}return r(e.slice(s)),t}var fl=25,dl=12,Or=700,gl=/\b(?:must(?: not)?|never|always|should(?: not|n't)?|do not|don't|avoid|prefer|forbidden|not allowed|no more than)\b/i,re=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ml(e){let t=e.split(`
47
50
  `),n=[],s=[],r=null,o=null,i=0;if(t[0]?.trim()==="---"){let l=t.findIndex((c,u)=>u>0&&c.trim()==="---");l>0&&(i=l+1)}let a=l=>{r&&(n.push({start:r.start,end:l,text:r.lines.join(`
48
- `).trimEnd(),headings:r.headings}),r=null)};for(;i<t.length;i++){let l=t[i],c=i+1,u=/^\s*(```|~~~)/.exec(l)?.[1];if(o){r.lines.push(l),u===o&&(o=null,a(c));continue}if(u){a(c-1),o=u,r={start:c,lines:[l],headings:[...s]};continue}let f=/^(#{1,6})\s+(.+?)\s*#*\s*$/.exec(l);if(f){a(c-1),s=[...s.slice(0,f[1].length-1),f[2]];continue}if(l.trim()===""){a(c-1);continue}r??={start:c,lines:[],headings:[...s]},r.lines.push(l)}return a(t.length),n}function ml(e,t){let n=e.map(re).join("|"),s=e.map(r=>re(r.charAt(0).toUpperCase()+r.slice(1))).join("|");return new RegExp(`${t.source}|\\b(?:${n})s?\\b|[a-z](?:${s})s?\\b|\\b(?:${n})[-_]|[-_](?:${n})\\b`,"i")}function hl(e,t){let n=t.map(re).join("|"),s=new Map;for(let r of e){if(r.base||r.title==="Unnamed"||r.title.startsWith("In ")||!r.element)continue;let i=s.get(r.title)??{title:r.title,tests:[],heading:null},a=r.selector.slice(ye(r.selector));for(let l of a.matchAll(/\.((?:\\.|[\w-])+)/g)){let c=l[1].replace(/\\(.)/g,"$1");if(t.includes(c.toLowerCase()))continue;let u=/[-_]|[a-z][A-Z]/.test(c);i.tests.push(new RegExp(u?`(?<![\\w-])${re(c)}(?![\\w-])`:`(?:\\.|["'\`])${re(c)}(?![\\w-])`))}if(!r.title.includes(" + ")){let l=r.title.toLowerCase().split(/\s+/).map(re).join("[\\s_-]+");i.tests.push(new RegExp(`\\b${l}[\\s_-]+(?:${n})s?\\b|\\b(?:${n})s?[_-]+${l}\\b`,"i")),r.axis&&/^[a-z]+$/i.test(r.title)&&i.tests.push(new RegExp(`\\b${re(r.axis)}\\s*[=:]\\s*\\{?\\s*["'\`]${re(r.title.toLowerCase())}["'\`]`,"i")),i.heading=r.title.toLowerCase()}s.set(r.title,i)}return[...s.values()]}function bl(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(re).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function yl(e){return e.length>Or?`${e.slice(0,Or).trimEnd()}\u2026`:e}function Mr(e,t,n,s){let r=ml(n.classKeywords,n.prose),o=hl(s,n.classKeywords),i=new Set,a=[];for(let u of t){let f=e.get(u.path);if(f===void 0)continue;let m=[];for(let h of gl(f)){if(!r.test(h.text)&&!h.headings.some($=>r.test($)))continue;let w=h.headings.length?bl(h.headings[h.headings.length-1],n.classKeywords):"",C=o.filter($=>$.tests.some(g=>g.test(h.text))||w!==""&&$.heading===w).map($=>$.title);for(let $ of C)i.add($);m.push({path:u.path,line:h.start,endLine:h.end,headings:h.headings,text:yl(h.text),rule:dl.test(h.text),styles:C})}m.length!==0&&a.push({path:u.path,kind:u.kind,passages:m.slice(0,fl),total:m.length,rules:m.filter(h=>h.rule).length})}let l={instruction:0,documentation:1,record:2};a.sort((u,f)=>l[u.kind]-l[f.kind]||f.rules-u.rules||f.total-u.total||u.path.localeCompare(f.path));let c=new Map;for(let u of s)u.element&&!u.base&&u.title!=="Unnamed"&&!u.title.startsWith("In ")&&c.set(u.title,!0);return{files:a.slice(0,pl).map(({rules:u,...f})=>f),documented:[...i].sort(),undocumented:[...c.keys()].filter(u=>!i.has(u))}}var Nr=new Set(["tone","size","variant","kind","type","style","theme","color","colour","appearance","intent","emphasis","shape","level"]),xl=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),kl={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},wl=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function kn(e){return e.replace(/\\(.)/g,"$1").replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(Boolean).map(t=>t.toLowerCase())}function vl(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function xn(e){let t=e.map(n=>wl.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function Oe(e,t){let n=kn(e).filter(r=>!t.has(r)&&!xl.has(r)),s=null;return n.length>1&&Nr.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>kl[r]??[r]),axis:s}}var Dr=/\.((?:\\.|[\w-])+)/g,$l=/\[\s*([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*))\s*\]/g;function Cl(e,t){let n=e.split("/"),s=(n.pop()??"").replace(/(\.module)?\.[a-z]+$/i,""),r=n.pop()??"";return kn(s).some(a=>t.has(a))||kn(r).some(a=>t.has(a))?Oe(s,t).words:[]}function Sl(e,t){let n=[];for(let s of e.split(/[\s>+~]+/).filter(Boolean)){let r=[...s.matchAll(Dr)].map(o=>o[1]);if(r.length)for(let o of r)n.push(...Oe(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...Oe(o,t).words)}}return n}function Me(e,t){let n=vl(t),s=ye(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(Dr)].map(u=>Oe(u[1],n));for(let u of o.matchAll($l)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!Nr.has(f))continue;let m=u[2]??u[3]??u[4]??"",h=Oe(m,n);i.push({words:h.words,axis:f})}let a=i.filter(u=>u.words.length>0);if(a.length>0)return{title:a.map(u=>xn(u.words)).join(" + "),axis:a.length===1?a[0].axis:null};let l=Sl(r,n);if(l.length>0)return{title:`In ${l.join(" ")}`,axis:null};let c=Cl(e.path,n);if(c.length>0)return{title:xn(c),axis:null};if(e.base){let u=Rl(e.path,n);return u.length>0?{title:`${xn(u)} Base`,axis:null}:{title:"Base",axis:null}}return{title:"Unnamed",axis:null}}function Rl(e,t){let n=e.split("/").pop()??"";if(!/\.module\.[a-z]+$/i.test(n))return[];let s=n.replace(/\.module\.[a-z]+$/i,"");return Oe(s,t).words}var Al=60;function Ze(e,t,n){let s=Q(e);if(!s)return null;let r=s.length-1,o=s[r].simples;if(nr(o)||an(o,t))return null;if(pt(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(pt(a,t)&&!an(a,t))return{compounds:s,at:i}}return!n||r===0&&sr(o)?null:{compounds:s,at:0}}function Tr(e,t,n){return Ke([...e,{combinator:e.length?t.combinator:null,simples:n}])}function Br(e,t){return e.kind!==t.kind?!1:e.kind==="attr"&&t.kind==="attr"?e.name===t.name&&e.op===t.op&&e.value===t.value:e.raw===t.raw}function _l(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>Br(n,s)))}function Il(e,t){if(e.length!==1)return!1;let n=e[0];return n.kind==="tag"?t.elements.includes(n.name):n.kind==="class"?t.classKeywords.some(s=>s.toLowerCase()===n.name.toLowerCase()):!1}function El(e,t){for(let n of t.classes)e.classes.includes(n)||e.classes.push(n);Object.assign(e.attrs,t.attrs)}function Fr(e){let t=new Set(e.map(n=>Je(n.property)).filter(n=>n!=="hint"));return t.size===0||t.size===1&&t.has("layout")?"placement":t.size===1&&t.has("paint")?"effect":"override"}function jl(e){let t=e.filter(o=>o.context===""),n=t.length?t:e;if(n.some(o=>o.state==="default"))return null;let r=[...n.map(o=>new Set(o.state.split(" + "))).reduce((o,i)=>o?new Set([...o].filter(a=>i.has(a))):i,null)??[]].filter(o=>H(o)===ut.length);return r.length===1?r[0]:null}function wn(e){return e.sort((t,n)=>+(t.context!=="")-+(n.context!=="")||H(t.state.split(" + ")[0])-H(n.state.split(" + ")[0])||t.state.localeCompare(n.state))}function Ur(e,t,n,s,r={parts:new Set,controls:new Set}){let o=new Map,i=[];for(let g of t)if(g.declarations.length!==0)for(let p of W(g.selector)){let d=Ze(p,n,s);if(!d)continue;let{compounds:y,at:k}=d,x=y[k],v=ft(x.simples);if(v.identity.length===0)continue;let E=y.slice(0,k),j=Tr(E,x,v.identity),R=be(v.states);if(k<y.length-1){i.push({hostKey:j,part:{selector:Ke(y),path:e,line:g.line,state:R}});continue}if(or(v.identity,g.declarations))continue;let A=o.get(j);if(!A){if(o.size>=Al)continue;A={key:j,prefix:E,identity:v.identity,line:g.line,states:[],modifiers:[],contexts:[],parts:[],movedInto:null},o.set(j,A)}let P=A.states.find(N=>N.state===R&&N.context===g.context);P||(P={state:R,context:g.context,line:g.line,declarations:[]},v.states.length&&(P.marker={classes:[],attrs:{}}),A.states.push(P)),P.marker&&El(P.marker,v.marker),P.declarations.push(...g.declarations)}for(let[g,p]of o){let d=p.states.flatMap(x=>x.declarations),y=p.states.every(x=>gt(x.declarations)),k=d.every(x=>Je(x.property)==="hint");(y||k)&&o.delete(g)}let a=new Map;for(let g of o.values()){let p=He(g.identity);a.set(p,[...a.get(p)??[],g])}for(let g of a.values()){let p=g.map(x=>jl(x.states)),d=p[0];if(!d||p.some(x=>x!==d))continue;let y=g.flatMap(x=>x.states).find(x=>x.marker&&x.state.split(" + ").includes(d))?.marker;if(!y)continue;let k=[...y.classes.map(x=>({kind:"class",raw:`.${x}`,name:x})),...Object.entries(y.attrs).map(([x,v])=>({kind:"attr",raw:`[${x}="${v}"]`,name:x,op:"=",value:v}))];for(let x of g){let v=[...x.identity,...k],E={combinator:x.prefix.length?" ":null,simples:v},j=Tr(x.prefix,E,v);for(let R of x.states){let A=R.state.split(" + ").filter(P=>P!==d);if(R.state=be(A),A.length===0)delete R.marker;else if(R.marker){R.marker.classes=R.marker.classes.filter(P=>!y.classes.includes(P));for(let P of Object.keys(y.attrs))delete R.marker.attrs[P]}}o.delete(x.key),o.set(j,{...x,key:j,identity:v})}}let l=()=>[...o.values()].filter(g=>g.prefix.length===0),c=g=>g.states.filter(p=>p.state==="default").reduce((p,d)=>p+d.declarations.length,0),u=l().find(g=>Il(g.identity,n))??(s?l().filter(g=>{let p=g.identity.length===1?g.identity[0]:null;return p?.kind==="class"&&r.controls.has(p.name)}).sort((g,p)=>c(p)-c(g)||g.line-p.line)[0]??null:null),f=u&&u.identity[0].kind==="class"?[u.identity[0].name]:[],m=(g,p,d)=>{p[d].push(g),g.movedInto=p,o.delete(g.key)},h=[...o.values()],w=g=>{let p=h.find(d=>d.key===g)??null;for(;p?.movedInto;)p=p.movedInto;return p};for(let g of l()){let p=g.identity.length===1?g.identity[0]:null;if(!(p?.kind!=="class"||!r.parts.has(p.name))&&(o.delete(g.key),u&&g!==u)){g.movedInto=u;for(let d of g.states)u.parts.push({selector:g.key,path:e,line:d.line,state:d.state})}}let C=l().filter(g=>g.identity.filter(p=>p.kind!=="tag"&&p.kind!=="universal").length>=2).sort((g,p)=>g.identity.length-p.identity.length);for(let g of C){let p=h.filter(y=>y!==g&&y!==u&&y.prefix.length===0&&_l(y.identity,g.identity));if(p.length===0)continue;p.sort((y,k)=>k.identity.length-y.identity.length||c(k)-c(y)||y.line-k.line);let d=w(p[0].key);d&&d!==g&&m(g,d,"modifiers")}for(let{hostKey:g,part:p}of i){let d=w(g)??(s?u:null);d&&o.has(d.key)&&d.parts.push(p)}let $=g=>{let p=g===u,d=dt(g.key,f);return{...Me({selector:g.key,path:e,base:p},n.classKeywords),element:d,usage:{status:"unknown",files:[],fileCount:0},selector:g.key,path:e,line:g.line,base:p,states:wn(g.states),modifiers:g.modifiers.length?g.modifiers.map(y=>{let k=y.identity.filter(x=>!g.identity.some(v=>Br(v,x)));return{title:Me({selector:k.map(x=>x.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:y.key,path:e,line:y.line,element:dt(y.key,f),usage:{status:"unknown",files:[],fileCount:0},states:wn(y.states)}}):void 0,contexts:g.contexts.length?g.contexts.map(y=>{let k=Fr(y.states.flatMap(x=>x.declarations));return{selector:y.key,path:e,line:y.line,role:k,element:k==="override"?dt(y.key,f):null,states:wn(y.states)}}):void 0,parts:g.parts.length?g.parts:void 0}};return[...o.values()].map($)}function Vr(e){let t=new Map;for(let i of e){let a=i.base?/^\.([\w-]+)$/.exec(i.selector):null;a&&t.set(i.path,[...t.get(i.path)??[],a[1]])}let n=i=>{let a=Q(i.selector);if(!a)return null;let l=a[a.length-1].simples,c=t.get(i.path)??[],u=l.filter(f=>!(f.kind==="class"&&c.includes(f.name)));return{depth:a.length-1,subject:He(l),bareTag:!l.some(f=>f.kind==="class"||f.kind==="attr"||f.kind==="id"),bare:u.length&&u.length<l.length?He(u):null}},s=new Map(e.map(i=>[i,n(i)])),r=new Set,o=i=>{let a=s.get(i);if(!a||a.depth===0)return null;let l=e.filter(c=>{if(c===i||r.has(c))return!1;let u=s.get(c);return u!=null&&u.depth<a.depth&&(!a.bareTag||u.depth===0)&&(u.subject===a.subject||a.bare!==null&&u.subject===a.bare)});return l.sort((c,u)=>+(u.path===i.path)-+(c.path===i.path)||s.get(c).depth-s.get(u).depth),l[0]??null};for(let i of[...e].sort((a,l)=>(s.get(l)?.depth??0)-(s.get(a)?.depth??0))){let a=o(i);if(!a)continue;for(;r.has(a);)a=o(a)??a;let l=Fr(i.states.flatMap(c=>c.declarations));a.contexts=[...a.contexts??[],{selector:i.selector,path:i.path,line:i.line,role:l,element:l==="override"?i.element:null,states:i.states}],i.parts?.length&&(a.parts=[...a.parts??[],...i.parts]),i.modifiers?.length&&(a.modifiers=[...a.modifiers??[],...i.modifiers]),r.add(i)}return e.filter(i=>!r.has(i))}var Pl={slate:{50:"#f8fafc",100:"#f1f5f9",200:"#e2e8f0",300:"#cbd5e1",400:"#94a3b8",500:"#64748b",600:"#475569",700:"#334155",800:"#1e293b",900:"#0f172a",950:"#020617"},gray:{50:"#f9fafb",100:"#f3f4f6",200:"#e5e7eb",300:"#d1d5db",400:"#9ca3af",500:"#6b7280",600:"#4b5563",700:"#374151",800:"#1f2937",900:"#111827",950:"#030712"},zinc:{50:"#fafafa",100:"#f4f4f5",200:"#e4e4e7",300:"#d4d4d8",400:"#a1a1aa",500:"#71717a",600:"#52525b",700:"#3f3f46",800:"#27272a",900:"#18181b",950:"#09090b"},neutral:{50:"#fafafa",100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",500:"#737373",600:"#525252",700:"#404040",800:"#262626",900:"#171717",950:"#0a0a0a"},stone:{50:"#fafaf9",100:"#f5f5f4",200:"#e7e5e4",300:"#d6d3d1",400:"#a8a29e",500:"#78716c",600:"#57534e",700:"#44403c",800:"#292524",900:"#1c1917",950:"#0c0a09"},red:{50:"#fef2f2",100:"#fee2e2",200:"#fecaca",300:"#fca5a5",400:"#f87171",500:"#ef4444",600:"#dc2626",700:"#b91c1c",800:"#991b1b",900:"#7f1d1d",950:"#450a0a"},orange:{50:"#fff7ed",100:"#ffedd5",200:"#fed7aa",300:"#fdba74",400:"#fb923c",500:"#f97316",600:"#ea580c",700:"#c2410c",800:"#9a3412",900:"#7c2d12",950:"#431407"},amber:{50:"#fffbeb",100:"#fef3c7",200:"#fde68a",300:"#fcd34d",400:"#fbbf24",500:"#f59e0b",600:"#d97706",700:"#b45309",800:"#92400e",900:"#78350f",950:"#451a03"},yellow:{50:"#fefce8",100:"#fef9c3",200:"#fef08a",300:"#fde047",400:"#facc15",500:"#eab308",600:"#ca8a04",700:"#a16207",800:"#854d0e",900:"#713f12",950:"#422006"},lime:{50:"#f7fee7",100:"#ecfccb",200:"#d9f99d",300:"#bef264",400:"#a3e635",500:"#84cc16",600:"#65a30d",700:"#4d7c0f",800:"#3f6212",900:"#365314",950:"#1a2e05"},green:{50:"#f0fdf4",100:"#dcfce7",200:"#bbf7d0",300:"#86efac",400:"#4ade80",500:"#22c55e",600:"#16a34a",700:"#15803d",800:"#166534",900:"#14532d",950:"#052e16"},emerald:{50:"#ecfdf5",100:"#d1fae5",200:"#a7f3d0",300:"#6ee7b7",400:"#34d399",500:"#10b981",600:"#059669",700:"#047857",800:"#065f46",900:"#064e3b",950:"#022c22"},teal:{50:"#f0fdfa",100:"#ccfbf1",200:"#99f6e4",300:"#5eead4",400:"#2dd4bf",500:"#14b8a6",600:"#0d9488",700:"#0f766e",800:"#115e59",900:"#134e4a",950:"#042f2e"},cyan:{50:"#ecfeff",100:"#cffafe",200:"#a5f3fc",300:"#67e8f9",400:"#22d3ee",500:"#06b6d4",600:"#0891b2",700:"#0e7490",800:"#155e75",900:"#164e63",950:"#083344"},sky:{50:"#f0f9ff",100:"#e0f2fe",200:"#bae6fd",300:"#7dd3fc",400:"#38bdf8",500:"#0ea5e9",600:"#0284c7",700:"#0369a1",800:"#075985",900:"#0c4a6e",950:"#082f49"},blue:{50:"#eff6ff",100:"#dbeafe",200:"#bfdbfe",300:"#93c5fd",400:"#60a5fa",500:"#3b82f6",600:"#2563eb",700:"#1d4ed8",800:"#1e40af",900:"#1e3a8a",950:"#172554"},indigo:{50:"#eef2ff",100:"#e0e7ff",200:"#c7d2fe",300:"#a5b4fc",400:"#818cf8",500:"#6366f1",600:"#4f46e5",700:"#4338ca",800:"#3730a3",900:"#312e81",950:"#1e1b4b"},violet:{50:"#f5f3ff",100:"#ede9fe",200:"#ddd6fe",300:"#c4b5fd",400:"#a78bfa",500:"#8b5cf6",600:"#7c3aed",700:"#6d28d9",800:"#5b21b6",900:"#4c1d95",950:"#2e1065"},purple:{50:"#faf5ff",100:"#f3e8ff",200:"#e9d5ff",300:"#d8b4fe",400:"#c084fc",500:"#a855f7",600:"#9333ea",700:"#7e22ce",800:"#6b21a8",900:"#581c87",950:"#3b0764"},fuchsia:{50:"#fdf4ff",100:"#fae8ff",200:"#f5d0fe",300:"#f0abfc",400:"#e879f9",500:"#d946ef",600:"#c026d3",700:"#a21caf",800:"#86198f",900:"#701a75",950:"#4a044e"},pink:{50:"#fdf2f8",100:"#fce7f3",200:"#fbcfe8",300:"#f9a8d4",400:"#f472b6",500:"#ec4899",600:"#db2777",700:"#be185d",800:"#9d174d",900:"#831843",950:"#500724"},rose:{50:"#fff1f2",100:"#ffe4e6",200:"#fecdd3",300:"#fda4af",400:"#fb7185",500:"#f43f5e",600:"#e11d48",700:"#be123c",800:"#9f1239",900:"#881337",950:"#4c0519"}};function zr(e){let t=e.lastIndexOf("-");return t<=0?null:Pl[e.slice(0,t)]?.[e.slice(t+1)]??null}var I=(e,t)=>({property:e,value:t});function Rn(e){if(!e.startsWith("[")||!e.endsWith("]"))return null;let t=e.slice(1,-1).replace(/_/g," ").trim();return/^-?[\d.]+(?:px|rem|em|%|vh|vw)$/.test(t)||/^var\(\s*--[\w-]+\s*\)$/.test(t)?t.replace(/\s+/g,""):null}function Sn(e){let t=Rn(e);if(t)return t;if(e==="px")return"1px";if(!/^\d+(?:\.\d+)?$/.test(e))return null;let n=Number(e);if(n>96)return null;let s=Math.round(n*2);if(Math.abs(n*2-s)>1e-6)return null;if(s===0)return"0";let r=Math.floor(s/8),o=["",".125",".25",".375",".5",".625",".75",".875"][s%8];return r===0?`0${o}rem`:`${r}${o}rem`}function Ll(e){let t=/^(\d+)\/(\d+)$/.exec(e);if(!t)return null;let n=Number(t[1])/Number(t[2])*100;return Number.isFinite(n)?`${Number(n.toFixed(4))}%`:null}function Wr(e,t){return{full:"100%",screen:t==="w"?"100vw":"100vh",auto:"auto",fit:"fit-content",min:"min-content",max:"max-content"}[e]??Ll(e)??Rn(e)??Sn(e)}var Ol={xs:{size:"0.75rem",leading:"1rem"},sm:{size:"0.875rem",leading:"1.25rem"},base:{size:"1rem",leading:"1.5rem"},lg:{size:"1.125rem",leading:"1.75rem"},xl:{size:"1.25rem",leading:"1.75rem"},"2xl":{size:"1.5rem",leading:"2rem"},"3xl":{size:"1.875rem",leading:"2.25rem"},"4xl":{size:"2.25rem",leading:"2.5rem"},"5xl":{size:"3rem",leading:"1"},"6xl":{size:"3.75rem",leading:"1"}},Ml={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},Nl={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},Dl={none:"0",sm:"0.125rem","":"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},Tl={sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)","":"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},Bl={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function vn(e,t){let n=null;if(e.startsWith("[")&&e.endsWith("]")){let r=e.slice(1,-1).replace(/_/g," ").trim();if(r.startsWith("--"))n=`var(${r})`;else if(/^var\(\s*--[\w-]+\s*\)$/.test(r))n=r.replace(/\s+/g,"");else if(/^#[0-9a-f]{3,8}$/i.test(r)||/^(?:rgb|hsl|oklch|oklab|color)\(/i.test(r))n=r;else return null}else e==="white"?n="#fff":e==="black"?n="#000":e==="transparent"?n="transparent":e==="current"?n="currentColor":e==="inherit"?n="inherit":n=zr(e)??(/^[a-z][\w-]*$/i.test(e)?`var(--${e}, var(--color-${e}))`:null);if(!n)return null;if(!t)return n;if(!/^\d+(?:\.\d+)?$/.test(t))return null;let s=Number(t)<=1?Number(t)*100:Number(t);return s<0||s>100?null:s===100?n:`color-mix(in srgb, ${n} ${s}%, transparent)`}function Fl(e){let t=0,n=-1;for(let s=0;s<e.length;s++){let r=e[s];r==="["?t++:r==="]"?t=Math.max(0,t-1):r==="/"&&t===0&&(n=s)}return n<0?{body:e,opacity:null}:{body:e.slice(0,n),opacity:e.slice(n+1)}}function $n(){return I("box-shadow","0 0 0 var(--gs-ring-w, 3px) var(--gs-ring-c, currentColor)")}var Ul={flex:"flex","inline-flex":"inline-flex",block:"block","inline-block":"inline-block",inline:"inline",grid:"grid","inline-grid":"inline-grid",hidden:"none",contents:"contents"},Cn={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch",between:"space-between",around:"space-around",evenly:"space-evenly"};function Gr(e){let t=e.startsWith("-"),n=t?e.slice(1):e,{body:s,opacity:r}=Fl(n),o=Ul[s];if(o&&!t&&!r)return[I("display",o)];let i=/^flex-(row|col|row-reverse|col-reverse)$/.exec(s);if(i&&!t&&!r){let A=i[1]==="col"?"column":i[1]==="col-reverse"?"column-reverse":i[1];return[I("flex-direction",A)]}if(s==="flex-wrap"&&!t)return[I("flex-wrap","wrap")];if(s==="flex-nowrap"&&!t)return[I("flex-wrap","nowrap")];if(s==="flex-1"&&!t)return[I("flex","1 1 0%")];if(s==="shrink-0"&&!t)return[I("flex-shrink","0")];if(s==="grow-0"&&!t)return[I("flex-grow","0")];if(s==="grow"&&!t)return[I("flex-grow","1")];let a=/^items-(start|end|center|baseline|stretch)$/.exec(s);if(a&&!t)return[I("align-items",Cn[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[I("justify-content",Cn[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[I("align-self",c[1]==="auto"?"auto":Cn[c[1]])];if(s==="whitespace-nowrap")return[I("white-space","nowrap")];if(s==="whitespace-normal")return[I("white-space","normal")];if(s==="truncate")return[I("overflow","hidden"),I("text-overflow","ellipsis"),I("white-space","nowrap")];if(s==="underline")return[I("text-decoration-line","underline")];if(s==="no-underline")return[I("text-decoration-line","none")];if(s==="line-through")return[I("text-decoration-line","line-through")];let u=/^(uppercase|lowercase|capitalize|normal-case)$/.exec(s);if(u)return[I("text-transform",u[1]==="normal-case"?"none":u[1])];let f=/^text-(left|center|right|justify|start|end)$/.exec(s);if(f&&!r)return[I("text-align",f[1])];let m=Ol[s.replace(/^text-/,"")];if(s.startsWith("text-")&&m&&!r&&!t)return[I("font-size",m.size),I("line-height",m.leading)];let h=Ml[s.replace(/^font-/,"")];if(s.startsWith("font-")&&h&&!r)return[I("font-weight",h)];if(s.startsWith("leading-")&&!r){let A=s.slice(8),N=Nl[A]??Sn(A);if(N)return[I("line-height",N)]}let w=/^cursor-(pointer|default|not-allowed|wait|text|move)$/.exec(s);if(w)return[I("cursor",w[1])];if(s==="pointer-events-none")return[I("pointer-events","none")];if(s==="pointer-events-auto")return[I("pointer-events","auto")];if(s==="select-none")return[I("user-select","none")];let C=/^opacity-(\d+)$/.exec(s);if(C&&!t)return[I("opacity",String(Number(C[1])/100))];if(s==="transition"||s==="transition-colors"||s==="transition-all")return[I("transition-property",s==="transition-colors"?"color, background-color, border-color, text-decoration-color, fill, stroke":s==="transition-all"?"all":"color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter"),I("transition-timing-function","cubic-bezier(0.4, 0, 0.2, 1)"),I("transition-duration","150ms")];let $=/^duration-(\d+)$/.exec(s);if($)return[I("transition-duration",`${$[1]}ms`)];let g={linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"};if(s.startsWith("ease-")&&g[s.slice(4)])return[I("transition-timing-function",g[s.slice(4)])];if(s==="outline-none")return[I("outline","2px solid transparent"),I("outline-offset","2px")];if(s==="outline")return[I("outline-style","solid")];let p=/^outline-(\d+)$/.exec(s);if(p)return[I("outline-width",`${p[1]}px`)];if(s==="shadow"||s.startsWith("shadow-")){let A=s==="shadow"?"":s.slice(7),P=Tl[A];if(P)return[I("box-shadow",P)]}if(s==="ring"||/^ring(?:-(?:0|1|2|4|8))?$/.test(s)){let A=s==="ring"?"":s.slice(5),P=Bl[A];if(P)return[I("--gs-ring-w",P),$n()]}if(s.startsWith("ring-")&&r===null){let A=vn(s.slice(5),null);if(A)return[I("--gs-ring-c",A),$n()]}if(s.startsWith("ring-")&&r){let A=vn(s.slice(5),r);if(A)return[I("--gs-ring-c",A),$n()]}let d=s==="rounded"?"":s.startsWith("rounded-")?s.slice(8):null;if(d!==null&&!t){let A=/^(t|r|b|l|s|e|tl|tr|bl|br|ss|se)(?:-(.+))?$/.exec(d),P=A?A[2]??"":d,N=Dl[P];if(!N)return null;if(!A)return[I("border-radius",N)];let X={t:["border-top-left-radius","border-top-right-radius"],r:["border-top-right-radius","border-bottom-right-radius"],b:["border-bottom-left-radius","border-bottom-right-radius"],l:["border-top-left-radius","border-bottom-left-radius"],s:["border-start-start-radius","border-end-start-radius"],e:["border-start-end-radius","border-end-end-radius"],tl:["border-top-left-radius"],tr:["border-top-right-radius"],bl:["border-bottom-left-radius"],br:["border-bottom-right-radius"],ss:["border-start-start-radius"],se:["border-start-end-radius"]}[A[1]];return X?X.map(tt=>I(tt,N)):null}if(/^border(?:-[trblxy])?$/.test(s)&&!r)return[I("border-width","1px"),I("border-style","solid")];let y=/^border-(\d+)$/.exec(s);if(y&&!r)return[I("border-width",`${y[1]}px`),I("border-style","solid")];let k=/^border-(solid|dashed|dotted|double|none|hidden)$/.exec(s);if(k)return[I("border-style",k[1])];let x=/^(p|px|py|pt|pr|pb|pl|ps|pe|m|mx|my|mt|mr|mb|ml|ms|me|gap|gap-x|gap-y|w|h|min-w|min-h|max-w|max-h|size|inset|top|right|bottom|left)-(.+)$/.exec(s),v=x?.[1],E=x?.[2];if(v&&E&&!r){let A=v==="w"||v==="min-w"||v==="max-w"?Wr(E,"w"):v==="h"||v==="min-h"||v==="max-h"?Wr(E,"h"):Sn(E);if(!A)return null;let P=t?A==="0"?"0":`-${A}`:A,V={p:["padding"],px:["padding-inline"],py:["padding-block"],pt:["padding-top"],pr:["padding-right"],pb:["padding-bottom"],pl:["padding-left"],ps:["padding-inline-start"],pe:["padding-inline-end"],m:["margin"],mx:["margin-inline"],my:["margin-block"],mt:["margin-top"],mr:["margin-right"],mb:["margin-bottom"],ml:["margin-left"],ms:["margin-inline-start"],me:["margin-inline-end"],gap:["gap"],"gap-x":["column-gap"],"gap-y":["row-gap"],w:["width"],h:["height"],"min-w":["min-width"],"min-h":["min-height"],"max-w":["max-width"],"max-h":["max-height"],size:["width","height"],inset:["inset"],top:["top"],right:["right"],bottom:["bottom"],left:["left"]}[v];return V?V.map(X=>I(X,P)):null}let j={bg:"background-color",text:"color",border:"border-color",outline:"outline-color",decoration:"text-decoration-color",accent:"accent-color",caret:"caret-color",fill:"fill",stroke:"stroke"};for(let[A,P]of Object.entries(j))if(s===A||s.startsWith(`${A}-`)){let N=s===A?"":s.slice(A.length+1);if(!N||/^(?:gradient|clip|ellipsis|wrap|nowrap|balance|pretty|opacity)/.test(N))return null;if(A==="text"&&!t){let X=Rn(N);if(X)return[I("font-size",X)]}let V=vn(N,r);return!V||t?null:[I(P,V)]}let R=/^\[([a-z-]+):(.+)\]$/i.exec(s);if(R&&!t&&!r){let A=R[1].toLowerCase(),P=R[2].replace(/_/g," ").trim();if(/^[a-z][\w-]*$/.test(A)&&P&&!/[<>]/.test(P))return[I(A,P)]}return null}var Vl=48,zl={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},Wl=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function fe(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
49
- `&&n++;return n}function Gl(e){let t=n=>n.replace(/[^\n]/g," ");return e.replace(/\/\*[\s\S]*?\*\//g,t).replace(/(^|\s)\/\/[^\n]*/g,(n,s)=>s+t(n.slice(s.length)))}function G(e,t){for(;t<e.length&&/\s/.test(e[t]);)t++;return t}function wt(e,t){let n=e[t];if(n!=='"'&&n!=="'"&&n!=="`")return null;let s="",r=!1;for(let o=t+1;o<e.length;o++){let i=e[o];if(i==="\\"){let a=e[o+1];if(a===void 0)return null;s+=a==="n"?`
50
- `:a,o++;continue}if(n==="`"&&i==="$"&&e[o+1]==="{"){r=!0;let a=1;for(o+=2;o<e.length&&a>0;o++)e[o]==="{"?a++:e[o]==="}"&&a--;o--;continue}if(i===n)return{v:r?null:s,end:o+1};s+=i}return null}function In(e,t,n,s){let r=0;for(let o=t;o<e.length;o++){let i=e[o];if(i==='"'||i==="'"||i==="`"){let a=wt(e,o);if(!a)return e.length;o=a.end-1;continue}if(i===n)r++;else if(i===s&&(r--,r===0))return o+1}return e.length}function Hl(e,t){let n=0;for(let s=t;s<e.length;s++){let r=e[s];if(r==='"'||r==="'"||r==="`"){let o=wt(e,s);if(!o)return e.length;s=o.end-1;continue}if(r==="("||r==="["||r==="{")n++;else if(r===")"||r==="]"||r==="}"){if(n===0)return s;n--}else if(r===","&&n===0)return s}return e.length}function Hr(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){let s=Hr(n);s&&t.push(s)}return t.join(" ")||null}return e.t==="obj"&&e.entries.filter(n=>n.value.t==="bool"&&n.value.v).map(n=>n.key).join(" ")||null}function Kl(e,t){let n=t+1,s=[];for(;n<e.length;){if(n=G(e,n),e[n]===")")return{v:s.join(" ").replace(/\s+/g," ").trim()||null,end:n+1};if(e[n]===","){n++;continue}let r=ne(e,n);if(!r)return null;let o=G(e,r.end);if(e[o]===","||e[o]===")"){let i=Hr(r.val);i&&s.push(i),n=r.end;continue}n=Hl(e,n)}return null}function ne(e,t){if(t=G(e,t),t>=e.length)return null;let n=e[t];if(n==='"'||n==="'"||n==="`"){let r=wt(e,t);return r?{val:{t:"str",v:r.v,at:t},end:r.end}:null}if(n==="["){let r=t+1,o=[];for(;r<e.length;){if(r=G(e,r),e[r]==="]")return{val:{t:"arr",items:o,at:t},end:r+1};if(e[r]===","){r++;continue}let i=ne(e,r);if(!i)return null;o.push(i.val),r=i.end}return null}if(n==="{"){let r=t+1,o=[];for(;r<e.length;){if(r=G(e,r),e[r]==="}")return{val:{t:"obj",entries:o,at:t},end:r+1};if(e[r]===","){r++;continue}if(e.slice(r,r+3)==="..."){let c=ne(e,r+3);if(!c)return null;r=c.end;continue}let i="",a=r;if(e[r]==='"'||e[r]==="'"||e[r]==="`"){let c=wt(e,r);if(!c||c.v===null)return null;i=c.v,r=c.end}else if(/[\w$]/.test(e[r])){for(a=r;r<e.length&&/[\w$]/.test(e[r]);)r++;i=e.slice(a,r)}else return null;if(r=G(e,r),e[r]!==":"){e[r]==="("&&(r=In(e,r,"(",")"));continue}let l=ne(e,r+1);if(!l)return null;o.push({key:i,at:a,value:l.val}),r=l.end}return null}let s=t;if(n==="."||n==="-"||/\d/.test(n)){let r=t+1;for(;r<e.length&&/[\d.]/.test(e[r]);)r++;let o=e.slice(t,r);if(/^-?\d+(?:\.\d+)?$/.test(o))return{val:{t:"num",v:Number(o),at:s},end:r};for(;r<e.length&&/[\w$.+-]/.test(e[r]);)r++;return{val:{t:"other",at:s},end:r}}if(/[\w$]/.test(n)){let r=t;for(;r<e.length&&/[\w$]/.test(e[r]);)r++;let o=e.slice(t,r),i=G(e,r);if(e[i]==="("){if(Wl.has(o)){let a=Kl(e,i);return a?{val:{t:"str",v:a.v,at:s},end:a.end}:null}return{val:{t:"other",at:s},end:In(e,i,"(",")")}}return o==="true"||o==="false"?{val:{t:"bool",v:o==="true",at:s},end:r}:{val:{t:"other",at:s},end:i}}return null}function vt(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){if(n.t!=="str"||n.v===null)return null;t.push(n.v)}return t.join(" ")}return null}function Kr(e){let t=[],n="",s=0;for(let r of e)r==="["?s++:r==="]"&&(s=Math.max(0,s-1)),/\s/.test(r)&&s===0?(n&&t.push(n),n=""):(!/\s/.test(r)||s>0)&&(n+=r);return n&&t.push(n),t}var An={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function Jl(e,t,n,s){let r=zl[e];if(r)return t.includes(r)||t.push(r),!0;if(e==="dark")return s.on=!0,!0;if(An[e])return n.min.push(An[e]),!0;let o=/^max-(sm|md|lg|xl|2xl)$/.exec(e);if(o)return n.below.push(An[o[1]]),!0;let i=/^min-\[([\d.]+(?:px|rem|em))\]$/.exec(e);if(i)return n.min.push(i[1]),!0;let a=/^max-\[([\d.]+(?:px|rem|em))\]$/.exec(e);return a?(n.max.push(a[1]),!0):!1}function Zl(e,t){let n=[];for(let s of e.min)n.push(`(min-width: ${s})`);for(let s of e.max)n.push(`(max-width: ${s})`);for(let s of e.below)n.push(`not all and (min-width: ${s})`);return t&&n.push("(prefers-color-scheme: dark)"),n.length?`@media ${n.join(" and ")}`:""}function Jr(e){let t=e.trim();if(!t)return null;let n=!1;t.startsWith("!")&&(n=!0,t=t.slice(1)),t.endsWith("!")&&(n=!0,t=t.slice(0,-1));let s=[],r="",o=0;for(let f of t)f==="["?o++:f==="]"&&(o=Math.max(0,o-1)),f===":"&&o===0?(s.push(r),r=""):r+=f;s.push(r);let i=s.pop()??"";if(!i)return null;let a=[],l={min:[],max:[],below:[]},c={on:!1};for(let f of s)if(!f||!Jl(f,a,l,c))return null;a.sort((f,m)=>H(f)-H(m));let u=/^[\w-]+$/.test(i)?i:null;return{token:e,state:be(a),context:Zl(l,c.on),utility:i,important:n,stem:u}}function Zr(e){let t=Gr(e.utility);return t?t.map(n=>({property:n.property,value:e.important?`${n.value} !important`:n.value,via:e.token})):[]}function ql(e){return e.some(t=>Je(t.property)!=="hint")}function $t(e){let t=[];for(let n of e.matchAll(/@apply\s+([^;{}]+)/g))for(let s of Kr(n[1])){let r=Jr(s);if(!r)continue;let o=Zr(r).filter(i=>se(i.property,i.value));o.length!==0&&t.push({state:r.state,context:r.context,declarations:o})}return t}function qr(e){return e==="default"?"":e.split(" + ").map(t=>t==="hover"?":hover":t==="focus"?":focus":t==="active"?":active":t==="disabled"?":disabled":"").join("")}function Pn(e,t,n){let s=t.map(f=>`${f.property}:${f.value}`).join(";");if(!s)return[];let r=ln(e),o=`${r}{${s}}`,i=n.split(" \xB7 ").map(f=>f.trim()).filter(f=>f&&!/^@layer\b/i.test(f));if(i.length===0)return[o];if(i.length!==1||!i[0].startsWith("@media"))return[];let a=i[0],l=[`${a}{${o}}`];if(!a.includes("prefers-color-scheme: dark"))return l;let c=a.replace(/^@media\s+/,"").split(/\s+and\s+/).filter(f=>!f.includes("prefers-color-scheme")).join(" and "),u=`html[data-theme="dark"] ${r}{${s}}`;return l.push(c?`@media ${c}{${u}}`:u),l}function Xl(e,t){let n=e.slice(Math.max(0,t-160),t);return/(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:await\s+)?$/.exec(n)?.[1]??null}function Yl(e){if(e.t!=="obj")return{};let t=e.entries.find(s=>s.key==="defaultVariants")?.value;if(!t||t.t!=="obj")return{};let n={};for(let s of t.entries)s.value.t==="str"&&s.value.v?n[s.key]=s.value.v:s.value.t==="bool"&&(n[s.key]=s.value.v?"true":"false");return n}function Ql(e,t,n,s,r){let o=ne(e,t),i={slots:[],defaults:{}};if(!o)return i;let a=vt(o.val)??"",l=G(e,o.end);if(e[l]!==",")return a.trim()?{slots:[_n(a,fe(e,t),r)],defaults:{}}:i;let c=ne(e,l+1);if(!c||c.val.t!=="obj")return a.trim()?{slots:[_n(a,fe(e,t),r)],defaults:{}}:i;let u=c.val.entries.find(h=>h.key==="variants")?.value,f=[],m=new Map;if(a.trim()&&f.push(_n(a,fe(e,t),r)),u&&u.t==="obj"){for(let h of u.entries)if(h.value.t==="obj")for(let w of h.value.entries){let C=vt(w.value);if(!C||!C.trim()||w.key==="false")continue;m.set(`${h.key}\0${w.key}`,C);let $=w.key==="true"?`.${h.key}`:`.${h.key}-${w.key}`,g=Me({selector:$,path:s,base:!1},n.classKeywords);f.push({title:g.title,axis:w.key==="true"?h.key:g.axis??h.key,base:!1,classes:`${a} ${C}`.trim(),line:fe(e,w.at),group:r,prop:h.key,value:w.key})}}return f.push(...ec(c.val,a,m,n,s,e,r)),{slots:f,defaults:Yl(c.val)}}function Xr(e){if(e.t==="str"&&e.v)return[e.v];if(e.t==="bool")return[e.v?"true":"false"];if(e.t==="arr"){let t=[];for(let n of e.items){let s=Xr(n);if(!s||s.length!==1)return null;t.push(s[0])}return t.length?t:null}return null}function ec(e,t,n,s,r,o,i){let a=e.entries.find(c=>c.key==="compoundVariants")?.value;if(!a||a.t!=="arr")return[];let l=[];for(let c of a.items){if(c.t!=="obj")continue;let u=[],f="",m=c.at,h=!1;for(let C of c.entries){if(C.key==="class"||C.key==="className"){f=vt(C.value)??"",m=C.at,C.value.t!=="str"&&C.value.t!=="arr"&&f===""&&(h=!0);continue}let $=Xr(C.value);if(!$){h=!0;break}u.push({axis:C.key,values:$})}if(h)continue;let w=[[]];for(let C of u){let $=[];for(let g of w){for(let p of C.values)if($.push([...g,{axis:C.axis,value:p}]),$.length>=8)break;if($.length>=8)break}w=$}for(let C of w){if(C.length<2&&!f.trim())continue;let $=[t],g=[];for(let y of C){let k=n.get(`${y.axis}\0${y.value}`);k&&$.push(k),g.push(y.value==="true"?y.axis:y.value)}f.trim()&&$.push(f);let p=$.join(" ").replace(/\s+/g," ").trim();if(!p)continue;let d=Me({selector:`.${g.join("-")}`,path:r,base:!1},s.classKeywords);l.push({title:d.title,axis:d.axis,base:!1,classes:p,line:fe(o,m),group:i,when:C.map(y=>({prop:y.axis,value:y.value}))})}}return l}function _n(e,t,n){return{title:"Base",axis:null,base:!0,classes:e,line:t,group:n}}function Yr(e,t){return t.elements.includes(e.toLowerCase())?!0:t.identifier.test(e)}function tc(e){let t=e.match(/\bclassName\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*"([^"]*)"\s*\}|\{\s*'([^']*)'\s*\})/);return t?.[1]??t?.[2]??t?.[3]??t?.[4]??null}var nc=new Set(["opacity","z-index","font-weight","line-height","flex","flex-grow","flex-shrink","order","zoom"]);function sc(e){return e.replace(/^[A-Z]/,t=>`-${t.toLowerCase()}`).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function rc(e,t){return t.t==="str"?t.v:t.t==="num"?nc.has(e)?String(t.v):`${t.v}px`:null}function Ct(e,t){if(e.t!=="obj")return[];let n=[],s=[];for(let o of e.entries){if(o.value.t==="obj"){let l=o.key.replace(/^&/,""),c=l===":hover"?"hover":l===":focus"||l===":focus-visible"?"focus":l===":active"?"active":l===":disabled"?"disabled":null;c&&s.push(...Ct(o.value,c));continue}let i=sc(o.key),a=rc(i,o.value);!a||!se(i,a)||n.push({property:i,value:a,via:"style"})}return[...n.length?[{state:t,context:"",declarations:n}]:[],...s]}function En(e,t){if(e[t]!=="`")return null;let n="";for(let s=t+1;s<e.length;s++){let r=e[s];if(r==="\\"){let o=e[s+1];if(o===void 0)return null;n+=o==="n"?`
51
- `:o,s++;continue}if(r==="$"&&e[s+1]==="{"){let o=1;for(s+=2;s<e.length&&o>0;s++)e[s]==="{"?o++:e[s]==="}"&&o--;s--,n+=" ";continue}if(r==="`")return{css:n,end:s+1};n+=r}return null}function oc(e,t){if(e==="default")return t;if(t==="default")return e;let n=[...new Set([...e.split(" + "),...t.split(" + ")])];return n.sort((s,r)=>H(s)-H(r)||s.localeCompare(r)),be(n)}function jn(e){let t=[];for(let n of ke(`.__gs {
51
+ `).trimEnd(),headings:r.headings}),r=null)};for(;i<t.length;i++){let l=t[i],c=i+1,u=/^\s*(```|~~~)/.exec(l)?.[1];if(o){r.lines.push(l),u===o&&(o=null,a(c));continue}if(u){a(c-1),o=u,r={start:c,lines:[l],headings:[...s]};continue}let f=/^(#{1,6})\s+(.+?)\s*#*\s*$/.exec(l);if(f){a(c-1),s=[...s.slice(0,f[1].length-1),f[2]];continue}if(l.trim()===""){a(c-1);continue}r??={start:c,lines:[],headings:[...s]},r.lines.push(l)}return a(t.length),n}function hl(e,t){let n=e.map(re).join("|"),s=e.map(r=>re(r.charAt(0).toUpperCase()+r.slice(1))).join("|");return new RegExp(`${t.source}|\\b(?:${n})s?\\b|[a-z](?:${s})s?\\b|\\b(?:${n})[-_]|[-_](?:${n})\\b`,"i")}function bl(e,t){let n=t.map(re).join("|"),s=new Map;for(let r of e){if(r.base||r.title==="Unnamed"||r.title.startsWith("In ")||!r.element)continue;let i=s.get(r.title)??{title:r.title,tests:[],heading:null},a=r.selector.slice(ye(r.selector));for(let l of a.matchAll(/\.((?:\\.|[\w-])+)/g)){let c=l[1].replace(/\\(.)/g,"$1");if(t.includes(c.toLowerCase()))continue;let u=/[-_]|[a-z][A-Z]/.test(c);i.tests.push(new RegExp(u?`(?<![\\w-])${re(c)}(?![\\w-])`:`(?:\\.|["'\`])${re(c)}(?![\\w-])`))}if(!r.title.includes(" + ")){let l=r.title.toLowerCase().split(/\s+/).map(re).join("[\\s_-]+");i.tests.push(new RegExp(`\\b${l}[\\s_-]+(?:${n})s?\\b|\\b(?:${n})s?[_-]+${l}\\b`,"i")),r.axis&&/^[a-z]+$/i.test(r.title)&&i.tests.push(new RegExp(`\\b${re(r.axis)}\\s*[=:]\\s*\\{?\\s*["'\`]${re(r.title.toLowerCase())}["'\`]`,"i")),i.heading=r.title.toLowerCase()}s.set(r.title,i)}return[...s.values()]}function yl(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(re).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function xl(e){return e.length>Or?`${e.slice(0,Or).trimEnd()}\u2026`:e}function Mr(e,t,n,s){let r=hl(n.classKeywords,n.prose),o=bl(s,n.classKeywords),i=new Set,a=[];for(let u of t){let f=e.get(u.path);if(f===void 0)continue;let m=[];for(let h of ml(f)){if(!r.test(h.text)&&!h.headings.some($=>r.test($)))continue;let w=h.headings.length?yl(h.headings[h.headings.length-1],n.classKeywords):"",C=o.filter($=>$.tests.some(g=>g.test(h.text))||w!==""&&$.heading===w).map($=>$.title);for(let $ of C)i.add($);m.push({path:u.path,line:h.start,endLine:h.end,headings:h.headings,text:xl(h.text),rule:gl.test(h.text),styles:C})}m.length!==0&&a.push({path:u.path,kind:u.kind,passages:m.slice(0,dl),total:m.length,rules:m.filter(h=>h.rule).length})}let l={instruction:0,documentation:1,record:2};a.sort((u,f)=>l[u.kind]-l[f.kind]||f.rules-u.rules||f.total-u.total||u.path.localeCompare(f.path));let c=new Map;for(let u of s)u.element&&!u.base&&u.title!=="Unnamed"&&!u.title.startsWith("In ")&&c.set(u.title,!0);return{files:a.slice(0,fl).map(({rules:u,...f})=>f),documented:[...i].sort(),undocumented:[...c.keys()].filter(u=>!i.has(u))}}var Nr=new Set(["tone","size","variant","kind","type","style","theme","color","colour","appearance","intent","emphasis","shape","level"]),kl=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),wl={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},vl=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function kn(e){return e.replace(/\\(.)/g,"$1").replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(Boolean).map(t=>t.toLowerCase())}function $l(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function xn(e){let t=e.map(n=>vl.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function Oe(e,t){let n=kn(e).filter(r=>!t.has(r)&&!kl.has(r)),s=null;return n.length>1&&Nr.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>wl[r]??[r]),axis:s}}var Dr=/\.((?:\\.|[\w-])+)/g,Cl=/\[\s*([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*))\s*\]/g;function Sl(e,t){let n=e.split("/"),s=(n.pop()??"").replace(/(\.module)?\.[a-z]+$/i,""),r=n.pop()??"";return kn(s).some(a=>t.has(a))||kn(r).some(a=>t.has(a))?Oe(s,t).words:[]}function Rl(e,t){let n=[];for(let s of e.split(/[\s>+~]+/).filter(Boolean)){let r=[...s.matchAll(Dr)].map(o=>o[1]);if(r.length)for(let o of r)n.push(...Oe(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...Oe(o,t).words)}}return n}function Me(e,t){let n=$l(t),s=ye(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(Dr)].map(u=>Oe(u[1],n));for(let u of o.matchAll(Cl)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!Nr.has(f))continue;let m=u[2]??u[3]??u[4]??"",h=Oe(m,n);i.push({words:h.words,axis:f})}let a=i.filter(u=>u.words.length>0);if(a.length>0)return{title:a.map(u=>xn(u.words)).join(" + "),axis:a.length===1?a[0].axis:null};let l=Rl(r,n);if(l.length>0)return{title:`In ${l.join(" ")}`,axis:null};let c=Sl(e.path,n);if(c.length>0)return{title:xn(c),axis:null};if(e.base){let u=Al(e.path,n);return u.length>0?{title:`${xn(u)} Base`,axis:null}:{title:"Base",axis:null}}return{title:"Unnamed",axis:null}}function Al(e,t){let n=e.split("/").pop()??"";if(!/\.module\.[a-z]+$/i.test(n))return[];let s=n.replace(/\.module\.[a-z]+$/i,"");return Oe(s,t).words}var _l=60;function Ze(e,t,n){let s=Q(e);if(!s)return null;let r=s.length-1,o=s[r].simples;if(nr(o)||an(o,t))return null;if(pt(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(pt(a,t)&&!an(a,t))return{compounds:s,at:i}}return!n||r===0&&sr(o)?null:{compounds:s,at:0}}function Tr(e,t,n){return Ke([...e,{combinator:e.length?t.combinator:null,simples:n}])}function Br(e,t){return e.kind!==t.kind?!1:e.kind==="attr"&&t.kind==="attr"?e.name===t.name&&e.op===t.op&&e.value===t.value:e.raw===t.raw}function El(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>Br(n,s)))}function Il(e,t){if(e.length!==1)return!1;let n=e[0];return n.kind==="tag"?t.elements.includes(n.name):n.kind==="class"?t.classKeywords.some(s=>s.toLowerCase()===n.name.toLowerCase()):!1}function jl(e,t){for(let n of t.classes)e.classes.includes(n)||e.classes.push(n);Object.assign(e.attrs,t.attrs)}function Fr(e){let t=new Set(e.map(n=>Je(n.property)).filter(n=>n!=="hint"));return t.size===0||t.size===1&&t.has("layout")?"placement":t.size===1&&t.has("paint")?"effect":"override"}function Pl(e){let t=e.filter(o=>o.context===""),n=t.length?t:e;if(n.some(o=>o.state==="default"))return null;let r=[...n.map(o=>new Set(o.state.split(" + "))).reduce((o,i)=>o?new Set([...o].filter(a=>i.has(a))):i,null)??[]].filter(o=>H(o)===ut.length);return r.length===1?r[0]:null}function wn(e){return e.sort((t,n)=>+(t.context!=="")-+(n.context!=="")||H(t.state.split(" + ")[0])-H(n.state.split(" + ")[0])||t.state.localeCompare(n.state))}function Ur(e,t,n,s,r={parts:new Set,controls:new Set}){let o=new Map,i=[];for(let g of t)if(g.declarations.length!==0)for(let p of W(g.selector)){let d=Ze(p,n,s);if(!d)continue;let{compounds:y,at:k}=d,x=y[k],v=ft(x.simples);if(v.identity.length===0)continue;let I=y.slice(0,k),j=Tr(I,x,v.identity),R=be(v.states);if(k<y.length-1){i.push({hostKey:j,part:{selector:Ke(y),path:e,line:g.line,state:R}});continue}if(or(v.identity,g.declarations))continue;let A=o.get(j);if(!A){if(o.size>=_l)continue;A={key:j,prefix:I,identity:v.identity,line:g.line,states:[],modifiers:[],contexts:[],parts:[],movedInto:null},o.set(j,A)}let P=A.states.find(N=>N.state===R&&N.context===g.context);P||(P={state:R,context:g.context,line:g.line,declarations:[]},v.states.length&&(P.marker={classes:[],attrs:{}}),A.states.push(P)),P.marker&&jl(P.marker,v.marker),P.declarations.push(...g.declarations)}for(let[g,p]of o){let d=p.states.flatMap(x=>x.declarations),y=p.states.every(x=>gt(x.declarations)),k=d.every(x=>Je(x.property)==="hint");(y||k)&&o.delete(g)}let a=new Map;for(let g of o.values()){let p=He(g.identity);a.set(p,[...a.get(p)??[],g])}for(let g of a.values()){let p=g.map(x=>Pl(x.states)),d=p[0];if(!d||p.some(x=>x!==d))continue;let y=g.flatMap(x=>x.states).find(x=>x.marker&&x.state.split(" + ").includes(d))?.marker;if(!y)continue;let k=[...y.classes.map(x=>({kind:"class",raw:`.${x}`,name:x})),...Object.entries(y.attrs).map(([x,v])=>({kind:"attr",raw:`[${x}="${v}"]`,name:x,op:"=",value:v}))];for(let x of g){let v=[...x.identity,...k],I={combinator:x.prefix.length?" ":null,simples:v},j=Tr(x.prefix,I,v);for(let R of x.states){let A=R.state.split(" + ").filter(P=>P!==d);if(R.state=be(A),A.length===0)delete R.marker;else if(R.marker){R.marker.classes=R.marker.classes.filter(P=>!y.classes.includes(P));for(let P of Object.keys(y.attrs))delete R.marker.attrs[P]}}o.delete(x.key),o.set(j,{...x,key:j,identity:v})}}let l=()=>[...o.values()].filter(g=>g.prefix.length===0),c=g=>g.states.filter(p=>p.state==="default").reduce((p,d)=>p+d.declarations.length,0),u=l().find(g=>Il(g.identity,n))??(s?l().filter(g=>{let p=g.identity.length===1?g.identity[0]:null;return p?.kind==="class"&&r.controls.has(p.name)}).sort((g,p)=>c(p)-c(g)||g.line-p.line)[0]??null:null),f=u&&u.identity[0].kind==="class"?[u.identity[0].name]:[],m=(g,p,d)=>{p[d].push(g),g.movedInto=p,o.delete(g.key)},h=[...o.values()],w=g=>{let p=h.find(d=>d.key===g)??null;for(;p?.movedInto;)p=p.movedInto;return p};for(let g of l()){let p=g.identity.length===1?g.identity[0]:null;if(!(p?.kind!=="class"||!r.parts.has(p.name))&&(o.delete(g.key),u&&g!==u)){g.movedInto=u;for(let d of g.states)u.parts.push({selector:g.key,path:e,line:d.line,state:d.state})}}let C=l().filter(g=>g.identity.filter(p=>p.kind!=="tag"&&p.kind!=="universal").length>=2).sort((g,p)=>g.identity.length-p.identity.length);for(let g of C){let p=h.filter(y=>y!==g&&y!==u&&y.prefix.length===0&&El(y.identity,g.identity));if(p.length===0)continue;p.sort((y,k)=>k.identity.length-y.identity.length||c(k)-c(y)||y.line-k.line);let d=w(p[0].key);d&&d!==g&&m(g,d,"modifiers")}for(let{hostKey:g,part:p}of i){let d=w(g)??(s?u:null);d&&o.has(d.key)&&d.parts.push(p)}let $=g=>{let p=g===u,d=dt(g.key,f);return{...Me({selector:g.key,path:e,base:p},n.classKeywords),element:d,usage:{status:"unknown",files:[],fileCount:0},selector:g.key,path:e,line:g.line,base:p,states:wn(g.states),modifiers:g.modifiers.length?g.modifiers.map(y=>{let k=y.identity.filter(x=>!g.identity.some(v=>Br(v,x)));return{title:Me({selector:k.map(x=>x.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:y.key,path:e,line:y.line,element:dt(y.key,f),usage:{status:"unknown",files:[],fileCount:0},states:wn(y.states)}}):void 0,contexts:g.contexts.length?g.contexts.map(y=>{let k=Fr(y.states.flatMap(x=>x.declarations));return{selector:y.key,path:e,line:y.line,role:k,element:k==="override"?dt(y.key,f):null,states:wn(y.states)}}):void 0,parts:g.parts.length?g.parts:void 0}};return[...o.values()].map($)}function Vr(e){let t=new Map;for(let i of e){let a=i.base?/^\.([\w-]+)$/.exec(i.selector):null;a&&t.set(i.path,[...t.get(i.path)??[],a[1]])}let n=i=>{let a=Q(i.selector);if(!a)return null;let l=a[a.length-1].simples,c=t.get(i.path)??[],u=l.filter(f=>!(f.kind==="class"&&c.includes(f.name)));return{depth:a.length-1,subject:He(l),bareTag:!l.some(f=>f.kind==="class"||f.kind==="attr"||f.kind==="id"),bare:u.length&&u.length<l.length?He(u):null}},s=new Map(e.map(i=>[i,n(i)])),r=new Set,o=i=>{let a=s.get(i);if(!a||a.depth===0)return null;let l=e.filter(c=>{if(c===i||r.has(c))return!1;let u=s.get(c);return u!=null&&u.depth<a.depth&&(!a.bareTag||u.depth===0)&&(u.subject===a.subject||a.bare!==null&&u.subject===a.bare)});return l.sort((c,u)=>+(u.path===i.path)-+(c.path===i.path)||s.get(c).depth-s.get(u).depth),l[0]??null};for(let i of[...e].sort((a,l)=>(s.get(l)?.depth??0)-(s.get(a)?.depth??0))){let a=o(i);if(!a)continue;for(;r.has(a);)a=o(a)??a;let l=Fr(i.states.flatMap(c=>c.declarations));a.contexts=[...a.contexts??[],{selector:i.selector,path:i.path,line:i.line,role:l,element:l==="override"?i.element:null,states:i.states}],i.parts?.length&&(a.parts=[...a.parts??[],...i.parts]),i.modifiers?.length&&(a.modifiers=[...a.modifiers??[],...i.modifiers]),r.add(i)}return e.filter(i=>!r.has(i))}var Ll={slate:{50:"#f8fafc",100:"#f1f5f9",200:"#e2e8f0",300:"#cbd5e1",400:"#94a3b8",500:"#64748b",600:"#475569",700:"#334155",800:"#1e293b",900:"#0f172a",950:"#020617"},gray:{50:"#f9fafb",100:"#f3f4f6",200:"#e5e7eb",300:"#d1d5db",400:"#9ca3af",500:"#6b7280",600:"#4b5563",700:"#374151",800:"#1f2937",900:"#111827",950:"#030712"},zinc:{50:"#fafafa",100:"#f4f4f5",200:"#e4e4e7",300:"#d4d4d8",400:"#a1a1aa",500:"#71717a",600:"#52525b",700:"#3f3f46",800:"#27272a",900:"#18181b",950:"#09090b"},neutral:{50:"#fafafa",100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",500:"#737373",600:"#525252",700:"#404040",800:"#262626",900:"#171717",950:"#0a0a0a"},stone:{50:"#fafaf9",100:"#f5f5f4",200:"#e7e5e4",300:"#d6d3d1",400:"#a8a29e",500:"#78716c",600:"#57534e",700:"#44403c",800:"#292524",900:"#1c1917",950:"#0c0a09"},red:{50:"#fef2f2",100:"#fee2e2",200:"#fecaca",300:"#fca5a5",400:"#f87171",500:"#ef4444",600:"#dc2626",700:"#b91c1c",800:"#991b1b",900:"#7f1d1d",950:"#450a0a"},orange:{50:"#fff7ed",100:"#ffedd5",200:"#fed7aa",300:"#fdba74",400:"#fb923c",500:"#f97316",600:"#ea580c",700:"#c2410c",800:"#9a3412",900:"#7c2d12",950:"#431407"},amber:{50:"#fffbeb",100:"#fef3c7",200:"#fde68a",300:"#fcd34d",400:"#fbbf24",500:"#f59e0b",600:"#d97706",700:"#b45309",800:"#92400e",900:"#78350f",950:"#451a03"},yellow:{50:"#fefce8",100:"#fef9c3",200:"#fef08a",300:"#fde047",400:"#facc15",500:"#eab308",600:"#ca8a04",700:"#a16207",800:"#854d0e",900:"#713f12",950:"#422006"},lime:{50:"#f7fee7",100:"#ecfccb",200:"#d9f99d",300:"#bef264",400:"#a3e635",500:"#84cc16",600:"#65a30d",700:"#4d7c0f",800:"#3f6212",900:"#365314",950:"#1a2e05"},green:{50:"#f0fdf4",100:"#dcfce7",200:"#bbf7d0",300:"#86efac",400:"#4ade80",500:"#22c55e",600:"#16a34a",700:"#15803d",800:"#166534",900:"#14532d",950:"#052e16"},emerald:{50:"#ecfdf5",100:"#d1fae5",200:"#a7f3d0",300:"#6ee7b7",400:"#34d399",500:"#10b981",600:"#059669",700:"#047857",800:"#065f46",900:"#064e3b",950:"#022c22"},teal:{50:"#f0fdfa",100:"#ccfbf1",200:"#99f6e4",300:"#5eead4",400:"#2dd4bf",500:"#14b8a6",600:"#0d9488",700:"#0f766e",800:"#115e59",900:"#134e4a",950:"#042f2e"},cyan:{50:"#ecfeff",100:"#cffafe",200:"#a5f3fc",300:"#67e8f9",400:"#22d3ee",500:"#06b6d4",600:"#0891b2",700:"#0e7490",800:"#155e75",900:"#164e63",950:"#083344"},sky:{50:"#f0f9ff",100:"#e0f2fe",200:"#bae6fd",300:"#7dd3fc",400:"#38bdf8",500:"#0ea5e9",600:"#0284c7",700:"#0369a1",800:"#075985",900:"#0c4a6e",950:"#082f49"},blue:{50:"#eff6ff",100:"#dbeafe",200:"#bfdbfe",300:"#93c5fd",400:"#60a5fa",500:"#3b82f6",600:"#2563eb",700:"#1d4ed8",800:"#1e40af",900:"#1e3a8a",950:"#172554"},indigo:{50:"#eef2ff",100:"#e0e7ff",200:"#c7d2fe",300:"#a5b4fc",400:"#818cf8",500:"#6366f1",600:"#4f46e5",700:"#4338ca",800:"#3730a3",900:"#312e81",950:"#1e1b4b"},violet:{50:"#f5f3ff",100:"#ede9fe",200:"#ddd6fe",300:"#c4b5fd",400:"#a78bfa",500:"#8b5cf6",600:"#7c3aed",700:"#6d28d9",800:"#5b21b6",900:"#4c1d95",950:"#2e1065"},purple:{50:"#faf5ff",100:"#f3e8ff",200:"#e9d5ff",300:"#d8b4fe",400:"#c084fc",500:"#a855f7",600:"#9333ea",700:"#7e22ce",800:"#6b21a8",900:"#581c87",950:"#3b0764"},fuchsia:{50:"#fdf4ff",100:"#fae8ff",200:"#f5d0fe",300:"#f0abfc",400:"#e879f9",500:"#d946ef",600:"#c026d3",700:"#a21caf",800:"#86198f",900:"#701a75",950:"#4a044e"},pink:{50:"#fdf2f8",100:"#fce7f3",200:"#fbcfe8",300:"#f9a8d4",400:"#f472b6",500:"#ec4899",600:"#db2777",700:"#be185d",800:"#9d174d",900:"#831843",950:"#500724"},rose:{50:"#fff1f2",100:"#ffe4e6",200:"#fecdd3",300:"#fda4af",400:"#fb7185",500:"#f43f5e",600:"#e11d48",700:"#be123c",800:"#9f1239",900:"#881337",950:"#4c0519"}};function zr(e){let t=e.lastIndexOf("-");return t<=0?null:Ll[e.slice(0,t)]?.[e.slice(t+1)]??null}var E=(e,t)=>({property:e,value:t});function Rn(e){if(!e.startsWith("[")||!e.endsWith("]"))return null;let t=e.slice(1,-1).replace(/_/g," ").trim();return/^-?[\d.]+(?:px|rem|em|%|vh|vw)$/.test(t)||/^var\(\s*--[\w-]+\s*\)$/.test(t)?t.replace(/\s+/g,""):null}function Sn(e){let t=Rn(e);if(t)return t;if(e==="px")return"1px";if(!/^\d+(?:\.\d+)?$/.test(e))return null;let n=Number(e);if(n>96)return null;let s=Math.round(n*2);if(Math.abs(n*2-s)>1e-6)return null;if(s===0)return"0";let r=Math.floor(s/8),o=["",".125",".25",".375",".5",".625",".75",".875"][s%8];return r===0?`0${o}rem`:`${r}${o}rem`}function Ol(e){let t=/^(\d+)\/(\d+)$/.exec(e);if(!t)return null;let n=Number(t[1])/Number(t[2])*100;return Number.isFinite(n)?`${Number(n.toFixed(4))}%`:null}function Wr(e,t){return{full:"100%",screen:t==="w"?"100vw":"100vh",auto:"auto",fit:"fit-content",min:"min-content",max:"max-content"}[e]??Ol(e)??Rn(e)??Sn(e)}var Ml={xs:{size:"0.75rem",leading:"1rem"},sm:{size:"0.875rem",leading:"1.25rem"},base:{size:"1rem",leading:"1.5rem"},lg:{size:"1.125rem",leading:"1.75rem"},xl:{size:"1.25rem",leading:"1.75rem"},"2xl":{size:"1.5rem",leading:"2rem"},"3xl":{size:"1.875rem",leading:"2.25rem"},"4xl":{size:"2.25rem",leading:"2.5rem"},"5xl":{size:"3rem",leading:"1"},"6xl":{size:"3.75rem",leading:"1"}},Nl={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},Dl={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},Tl={none:"0",sm:"0.125rem","":"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},Bl={sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)","":"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},Fl={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function vn(e,t){let n=null;if(e.startsWith("[")&&e.endsWith("]")){let r=e.slice(1,-1).replace(/_/g," ").trim();if(r.startsWith("--"))n=`var(${r})`;else if(/^var\(\s*--[\w-]+\s*\)$/.test(r))n=r.replace(/\s+/g,"");else if(/^#[0-9a-f]{3,8}$/i.test(r)||/^(?:rgb|hsl|oklch|oklab|color)\(/i.test(r))n=r;else return null}else e==="white"?n="#fff":e==="black"?n="#000":e==="transparent"?n="transparent":e==="current"?n="currentColor":e==="inherit"?n="inherit":n=zr(e)??(/^[a-z][\w-]*$/i.test(e)?`var(--${e}, var(--color-${e}))`:null);if(!n)return null;if(!t)return n;if(!/^\d+(?:\.\d+)?$/.test(t))return null;let s=Number(t)<=1?Number(t)*100:Number(t);return s<0||s>100?null:s===100?n:`color-mix(in srgb, ${n} ${s}%, transparent)`}function Ul(e){let t=0,n=-1;for(let s=0;s<e.length;s++){let r=e[s];r==="["?t++:r==="]"?t=Math.max(0,t-1):r==="/"&&t===0&&(n=s)}return n<0?{body:e,opacity:null}:{body:e.slice(0,n),opacity:e.slice(n+1)}}function $n(){return E("box-shadow","0 0 0 var(--gs-ring-w, 3px) var(--gs-ring-c, currentColor)")}var Vl={flex:"flex","inline-flex":"inline-flex",block:"block","inline-block":"inline-block",inline:"inline",grid:"grid","inline-grid":"inline-grid",hidden:"none",contents:"contents"},Cn={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch",between:"space-between",around:"space-around",evenly:"space-evenly"};function Gr(e){let t=e.startsWith("-"),n=t?e.slice(1):e,{body:s,opacity:r}=Ul(n),o=Vl[s];if(o&&!t&&!r)return[E("display",o)];let i=/^flex-(row|col|row-reverse|col-reverse)$/.exec(s);if(i&&!t&&!r){let A=i[1]==="col"?"column":i[1]==="col-reverse"?"column-reverse":i[1];return[E("flex-direction",A)]}if(s==="flex-wrap"&&!t)return[E("flex-wrap","wrap")];if(s==="flex-nowrap"&&!t)return[E("flex-wrap","nowrap")];if(s==="flex-1"&&!t)return[E("flex","1 1 0%")];if(s==="shrink-0"&&!t)return[E("flex-shrink","0")];if(s==="grow-0"&&!t)return[E("flex-grow","0")];if(s==="grow"&&!t)return[E("flex-grow","1")];let a=/^items-(start|end|center|baseline|stretch)$/.exec(s);if(a&&!t)return[E("align-items",Cn[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[E("justify-content",Cn[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[E("align-self",c[1]==="auto"?"auto":Cn[c[1]])];if(s==="whitespace-nowrap")return[E("white-space","nowrap")];if(s==="whitespace-normal")return[E("white-space","normal")];if(s==="truncate")return[E("overflow","hidden"),E("text-overflow","ellipsis"),E("white-space","nowrap")];if(s==="underline")return[E("text-decoration-line","underline")];if(s==="no-underline")return[E("text-decoration-line","none")];if(s==="line-through")return[E("text-decoration-line","line-through")];let u=/^(uppercase|lowercase|capitalize|normal-case)$/.exec(s);if(u)return[E("text-transform",u[1]==="normal-case"?"none":u[1])];let f=/^text-(left|center|right|justify|start|end)$/.exec(s);if(f&&!r)return[E("text-align",f[1])];let m=Ml[s.replace(/^text-/,"")];if(s.startsWith("text-")&&m&&!r&&!t)return[E("font-size",m.size),E("line-height",m.leading)];let h=Nl[s.replace(/^font-/,"")];if(s.startsWith("font-")&&h&&!r)return[E("font-weight",h)];if(s.startsWith("leading-")&&!r){let A=s.slice(8),N=Dl[A]??Sn(A);if(N)return[E("line-height",N)]}let w=/^cursor-(pointer|default|not-allowed|wait|text|move)$/.exec(s);if(w)return[E("cursor",w[1])];if(s==="pointer-events-none")return[E("pointer-events","none")];if(s==="pointer-events-auto")return[E("pointer-events","auto")];if(s==="select-none")return[E("user-select","none")];let C=/^opacity-(\d+)$/.exec(s);if(C&&!t)return[E("opacity",String(Number(C[1])/100))];if(s==="transition"||s==="transition-colors"||s==="transition-all")return[E("transition-property",s==="transition-colors"?"color, background-color, border-color, text-decoration-color, fill, stroke":s==="transition-all"?"all":"color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter"),E("transition-timing-function","cubic-bezier(0.4, 0, 0.2, 1)"),E("transition-duration","150ms")];let $=/^duration-(\d+)$/.exec(s);if($)return[E("transition-duration",`${$[1]}ms`)];let g={linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"};if(s.startsWith("ease-")&&g[s.slice(4)])return[E("transition-timing-function",g[s.slice(4)])];if(s==="outline-none")return[E("outline","2px solid transparent"),E("outline-offset","2px")];if(s==="outline")return[E("outline-style","solid")];let p=/^outline-(\d+)$/.exec(s);if(p)return[E("outline-width",`${p[1]}px`)];if(s==="shadow"||s.startsWith("shadow-")){let A=s==="shadow"?"":s.slice(7),P=Bl[A];if(P)return[E("box-shadow",P)]}if(s==="ring"||/^ring(?:-(?:0|1|2|4|8))?$/.test(s)){let A=s==="ring"?"":s.slice(5),P=Fl[A];if(P)return[E("--gs-ring-w",P),$n()]}if(s.startsWith("ring-")&&r===null){let A=vn(s.slice(5),null);if(A)return[E("--gs-ring-c",A),$n()]}if(s.startsWith("ring-")&&r){let A=vn(s.slice(5),r);if(A)return[E("--gs-ring-c",A),$n()]}let d=s==="rounded"?"":s.startsWith("rounded-")?s.slice(8):null;if(d!==null&&!t){let A=/^(t|r|b|l|s|e|tl|tr|bl|br|ss|se)(?:-(.+))?$/.exec(d),P=A?A[2]??"":d,N=Tl[P];if(!N)return null;if(!A)return[E("border-radius",N)];let X={t:["border-top-left-radius","border-top-right-radius"],r:["border-top-right-radius","border-bottom-right-radius"],b:["border-bottom-left-radius","border-bottom-right-radius"],l:["border-top-left-radius","border-bottom-left-radius"],s:["border-start-start-radius","border-end-start-radius"],e:["border-start-end-radius","border-end-end-radius"],tl:["border-top-left-radius"],tr:["border-top-right-radius"],bl:["border-bottom-left-radius"],br:["border-bottom-right-radius"],ss:["border-start-start-radius"],se:["border-start-end-radius"]}[A[1]];return X?X.map(tt=>E(tt,N)):null}if(/^border(?:-[trblxy])?$/.test(s)&&!r)return[E("border-width","1px"),E("border-style","solid")];let y=/^border-(\d+)$/.exec(s);if(y&&!r)return[E("border-width",`${y[1]}px`),E("border-style","solid")];let k=/^border-(solid|dashed|dotted|double|none|hidden)$/.exec(s);if(k)return[E("border-style",k[1])];let x=/^(p|px|py|pt|pr|pb|pl|ps|pe|m|mx|my|mt|mr|mb|ml|ms|me|gap|gap-x|gap-y|w|h|min-w|min-h|max-w|max-h|size|inset|top|right|bottom|left)-(.+)$/.exec(s),v=x?.[1],I=x?.[2];if(v&&I&&!r){let A=v==="w"||v==="min-w"||v==="max-w"?Wr(I,"w"):v==="h"||v==="min-h"||v==="max-h"?Wr(I,"h"):Sn(I);if(!A)return null;let P=t?A==="0"?"0":`-${A}`:A,V={p:["padding"],px:["padding-inline"],py:["padding-block"],pt:["padding-top"],pr:["padding-right"],pb:["padding-bottom"],pl:["padding-left"],ps:["padding-inline-start"],pe:["padding-inline-end"],m:["margin"],mx:["margin-inline"],my:["margin-block"],mt:["margin-top"],mr:["margin-right"],mb:["margin-bottom"],ml:["margin-left"],ms:["margin-inline-start"],me:["margin-inline-end"],gap:["gap"],"gap-x":["column-gap"],"gap-y":["row-gap"],w:["width"],h:["height"],"min-w":["min-width"],"min-h":["min-height"],"max-w":["max-width"],"max-h":["max-height"],size:["width","height"],inset:["inset"],top:["top"],right:["right"],bottom:["bottom"],left:["left"]}[v];return V?V.map(X=>E(X,P)):null}let j={bg:"background-color",text:"color",border:"border-color",outline:"outline-color",decoration:"text-decoration-color",accent:"accent-color",caret:"caret-color",fill:"fill",stroke:"stroke"};for(let[A,P]of Object.entries(j))if(s===A||s.startsWith(`${A}-`)){let N=s===A?"":s.slice(A.length+1);if(!N||/^(?:gradient|clip|ellipsis|wrap|nowrap|balance|pretty|opacity)/.test(N))return null;if(A==="text"&&!t){let X=Rn(N);if(X)return[E("font-size",X)]}let V=vn(N,r);return!V||t?null:[E(P,V)]}let R=/^\[([a-z-]+):(.+)\]$/i.exec(s);if(R&&!t&&!r){let A=R[1].toLowerCase(),P=R[2].replace(/_/g," ").trim();if(/^[a-z][\w-]*$/.test(A)&&P&&!/[<>]/.test(P))return[E(A,P)]}return null}var zl=48,Wl={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},Gl=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function fe(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
52
+ `&&n++;return n}function Hl(e){let t=n=>n.replace(/[^\n]/g," ");return e.replace(/\/\*[\s\S]*?\*\//g,t).replace(/(^|\s)\/\/[^\n]*/g,(n,s)=>s+t(n.slice(s.length)))}function G(e,t){for(;t<e.length&&/\s/.test(e[t]);)t++;return t}function wt(e,t){let n=e[t];if(n!=='"'&&n!=="'"&&n!=="`")return null;let s="",r=!1;for(let o=t+1;o<e.length;o++){let i=e[o];if(i==="\\"){let a=e[o+1];if(a===void 0)return null;s+=a==="n"?`
53
+ `:a,o++;continue}if(n==="`"&&i==="$"&&e[o+1]==="{"){r=!0;let a=1;for(o+=2;o<e.length&&a>0;o++)e[o]==="{"?a++:e[o]==="}"&&a--;o--;continue}if(i===n)return{v:r?null:s,end:o+1};s+=i}return null}function En(e,t,n,s){let r=0;for(let o=t;o<e.length;o++){let i=e[o];if(i==='"'||i==="'"||i==="`"){let a=wt(e,o);if(!a)return e.length;o=a.end-1;continue}if(i===n)r++;else if(i===s&&(r--,r===0))return o+1}return e.length}function Kl(e,t){let n=0;for(let s=t;s<e.length;s++){let r=e[s];if(r==='"'||r==="'"||r==="`"){let o=wt(e,s);if(!o)return e.length;s=o.end-1;continue}if(r==="("||r==="["||r==="{")n++;else if(r===")"||r==="]"||r==="}"){if(n===0)return s;n--}else if(r===","&&n===0)return s}return e.length}function Hr(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){let s=Hr(n);s&&t.push(s)}return t.join(" ")||null}return e.t==="obj"&&e.entries.filter(n=>n.value.t==="bool"&&n.value.v).map(n=>n.key).join(" ")||null}function Jl(e,t){let n=t+1,s=[];for(;n<e.length;){if(n=G(e,n),e[n]===")")return{v:s.join(" ").replace(/\s+/g," ").trim()||null,end:n+1};if(e[n]===","){n++;continue}let r=ne(e,n);if(!r)return null;let o=G(e,r.end);if(e[o]===","||e[o]===")"){let i=Hr(r.val);i&&s.push(i),n=r.end;continue}n=Kl(e,n)}return null}function ne(e,t){if(t=G(e,t),t>=e.length)return null;let n=e[t];if(n==='"'||n==="'"||n==="`"){let r=wt(e,t);return r?{val:{t:"str",v:r.v,at:t},end:r.end}:null}if(n==="["){let r=t+1,o=[];for(;r<e.length;){if(r=G(e,r),e[r]==="]")return{val:{t:"arr",items:o,at:t},end:r+1};if(e[r]===","){r++;continue}let i=ne(e,r);if(!i)return null;o.push(i.val),r=i.end}return null}if(n==="{"){let r=t+1,o=[];for(;r<e.length;){if(r=G(e,r),e[r]==="}")return{val:{t:"obj",entries:o,at:t},end:r+1};if(e[r]===","){r++;continue}if(e.slice(r,r+3)==="..."){let c=ne(e,r+3);if(!c)return null;r=c.end;continue}let i="",a=r;if(e[r]==='"'||e[r]==="'"||e[r]==="`"){let c=wt(e,r);if(!c||c.v===null)return null;i=c.v,r=c.end}else if(/[\w$]/.test(e[r])){for(a=r;r<e.length&&/[\w$]/.test(e[r]);)r++;i=e.slice(a,r)}else return null;if(r=G(e,r),e[r]!==":"){e[r]==="("&&(r=En(e,r,"(",")"));continue}let l=ne(e,r+1);if(!l)return null;o.push({key:i,at:a,value:l.val}),r=l.end}return null}let s=t;if(n==="."||n==="-"||/\d/.test(n)){let r=t+1;for(;r<e.length&&/[\d.]/.test(e[r]);)r++;let o=e.slice(t,r);if(/^-?\d+(?:\.\d+)?$/.test(o))return{val:{t:"num",v:Number(o),at:s},end:r};for(;r<e.length&&/[\w$.+-]/.test(e[r]);)r++;return{val:{t:"other",at:s},end:r}}if(/[\w$]/.test(n)){let r=t;for(;r<e.length&&/[\w$]/.test(e[r]);)r++;let o=e.slice(t,r),i=G(e,r);if(e[i]==="("){if(Gl.has(o)){let a=Jl(e,i);return a?{val:{t:"str",v:a.v,at:s},end:a.end}:null}return{val:{t:"other",at:s},end:En(e,i,"(",")")}}return o==="true"||o==="false"?{val:{t:"bool",v:o==="true",at:s},end:r}:{val:{t:"other",at:s},end:i}}return null}function vt(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){if(n.t!=="str"||n.v===null)return null;t.push(n.v)}return t.join(" ")}return null}function Kr(e){let t=[],n="",s=0;for(let r of e)r==="["?s++:r==="]"&&(s=Math.max(0,s-1)),/\s/.test(r)&&s===0?(n&&t.push(n),n=""):(!/\s/.test(r)||s>0)&&(n+=r);return n&&t.push(n),t}var An={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function Zl(e,t,n,s){let r=Wl[e];if(r)return t.includes(r)||t.push(r),!0;if(e==="dark")return s.on=!0,!0;if(An[e])return n.min.push(An[e]),!0;let o=/^max-(sm|md|lg|xl|2xl)$/.exec(e);if(o)return n.below.push(An[o[1]]),!0;let i=/^min-\[([\d.]+(?:px|rem|em))\]$/.exec(e);if(i)return n.min.push(i[1]),!0;let a=/^max-\[([\d.]+(?:px|rem|em))\]$/.exec(e);return a?(n.max.push(a[1]),!0):!1}function ql(e,t){let n=[];for(let s of e.min)n.push(`(min-width: ${s})`);for(let s of e.max)n.push(`(max-width: ${s})`);for(let s of e.below)n.push(`not all and (min-width: ${s})`);return t&&n.push("(prefers-color-scheme: dark)"),n.length?`@media ${n.join(" and ")}`:""}function Jr(e){let t=e.trim();if(!t)return null;let n=!1;t.startsWith("!")&&(n=!0,t=t.slice(1)),t.endsWith("!")&&(n=!0,t=t.slice(0,-1));let s=[],r="",o=0;for(let f of t)f==="["?o++:f==="]"&&(o=Math.max(0,o-1)),f===":"&&o===0?(s.push(r),r=""):r+=f;s.push(r);let i=s.pop()??"";if(!i)return null;let a=[],l={min:[],max:[],below:[]},c={on:!1};for(let f of s)if(!f||!Zl(f,a,l,c))return null;a.sort((f,m)=>H(f)-H(m));let u=/^[\w-]+$/.test(i)?i:null;return{token:e,state:be(a),context:ql(l,c.on),utility:i,important:n,stem:u}}function Zr(e){let t=Gr(e.utility);return t?t.map(n=>({property:n.property,value:e.important?`${n.value} !important`:n.value,via:e.token})):[]}function Xl(e){return e.some(t=>Je(t.property)!=="hint")}function $t(e){let t=[];for(let n of e.matchAll(/@apply\s+([^;{}]+)/g))for(let s of Kr(n[1])){let r=Jr(s);if(!r)continue;let o=Zr(r).filter(i=>se(i.property,i.value));o.length!==0&&t.push({state:r.state,context:r.context,declarations:o})}return t}function qr(e){return e==="default"?"":e.split(" + ").map(t=>t==="hover"?":hover":t==="focus"?":focus":t==="active"?":active":t==="disabled"?":disabled":"").join("")}function Pn(e,t,n){let s=t.map(f=>`${f.property}:${f.value}`).join(";");if(!s)return[];let r=ln(e),o=`${r}{${s}}`,i=n.split(" \xB7 ").map(f=>f.trim()).filter(f=>f&&!/^@layer\b/i.test(f));if(i.length===0)return[o];if(i.length!==1||!i[0].startsWith("@media"))return[];let a=i[0],l=[`${a}{${o}}`];if(!a.includes("prefers-color-scheme: dark"))return l;let c=a.replace(/^@media\s+/,"").split(/\s+and\s+/).filter(f=>!f.includes("prefers-color-scheme")).join(" and "),u=`html[data-theme="dark"] ${r}{${s}}`;return l.push(c?`@media ${c}{${u}}`:u),l}function Yl(e,t){let n=e.slice(Math.max(0,t-160),t);return/(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:await\s+)?$/.exec(n)?.[1]??null}function Ql(e){if(e.t!=="obj")return{};let t=e.entries.find(s=>s.key==="defaultVariants")?.value;if(!t||t.t!=="obj")return{};let n={};for(let s of t.entries)s.value.t==="str"&&s.value.v?n[s.key]=s.value.v:s.value.t==="bool"&&(n[s.key]=s.value.v?"true":"false");return n}function ec(e,t,n,s,r){let o=ne(e,t),i={slots:[],defaults:{}};if(!o)return i;let a=vt(o.val)??"",l=G(e,o.end);if(e[l]!==",")return a.trim()?{slots:[_n(a,fe(e,t),r)],defaults:{}}:i;let c=ne(e,l+1);if(!c||c.val.t!=="obj")return a.trim()?{slots:[_n(a,fe(e,t),r)],defaults:{}}:i;let u=c.val.entries.find(h=>h.key==="variants")?.value,f=[],m=new Map;if(a.trim()&&f.push(_n(a,fe(e,t),r)),u&&u.t==="obj"){for(let h of u.entries)if(h.value.t==="obj")for(let w of h.value.entries){let C=vt(w.value);if(!C||!C.trim()||w.key==="false")continue;m.set(`${h.key}\0${w.key}`,C);let $=w.key==="true"?`.${h.key}`:`.${h.key}-${w.key}`,g=Me({selector:$,path:s,base:!1},n.classKeywords);f.push({title:g.title,axis:w.key==="true"?h.key:g.axis??h.key,base:!1,classes:`${a} ${C}`.trim(),line:fe(e,w.at),group:r,prop:h.key,value:w.key})}}return f.push(...tc(c.val,a,m,n,s,e,r)),{slots:f,defaults:Ql(c.val)}}function Xr(e){if(e.t==="str"&&e.v)return[e.v];if(e.t==="bool")return[e.v?"true":"false"];if(e.t==="arr"){let t=[];for(let n of e.items){let s=Xr(n);if(!s||s.length!==1)return null;t.push(s[0])}return t.length?t:null}return null}function tc(e,t,n,s,r,o,i){let a=e.entries.find(c=>c.key==="compoundVariants")?.value;if(!a||a.t!=="arr")return[];let l=[];for(let c of a.items){if(c.t!=="obj")continue;let u=[],f="",m=c.at,h=!1;for(let C of c.entries){if(C.key==="class"||C.key==="className"){f=vt(C.value)??"",m=C.at,C.value.t!=="str"&&C.value.t!=="arr"&&f===""&&(h=!0);continue}let $=Xr(C.value);if(!$){h=!0;break}u.push({axis:C.key,values:$})}if(h)continue;let w=[[]];for(let C of u){let $=[];for(let g of w){for(let p of C.values)if($.push([...g,{axis:C.axis,value:p}]),$.length>=8)break;if($.length>=8)break}w=$}for(let C of w){if(C.length<2&&!f.trim())continue;let $=[t],g=[];for(let y of C){let k=n.get(`${y.axis}\0${y.value}`);k&&$.push(k),g.push(y.value==="true"?y.axis:y.value)}f.trim()&&$.push(f);let p=$.join(" ").replace(/\s+/g," ").trim();if(!p)continue;let d=Me({selector:`.${g.join("-")}`,path:r,base:!1},s.classKeywords);l.push({title:d.title,axis:d.axis,base:!1,classes:p,line:fe(o,m),group:i,when:C.map(y=>({prop:y.axis,value:y.value}))})}}return l}function _n(e,t,n){return{title:"Base",axis:null,base:!0,classes:e,line:t,group:n}}function Yr(e,t){return t.elements.includes(e.toLowerCase())?!0:t.identifier.test(e)}function nc(e){let t=e.match(/\bclassName\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*"([^"]*)"\s*\}|\{\s*'([^']*)'\s*\})/);return t?.[1]??t?.[2]??t?.[3]??t?.[4]??null}var sc=new Set(["opacity","z-index","font-weight","line-height","flex","flex-grow","flex-shrink","order","zoom"]);function rc(e){return e.replace(/^[A-Z]/,t=>`-${t.toLowerCase()}`).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function oc(e,t){return t.t==="str"?t.v:t.t==="num"?sc.has(e)?String(t.v):`${t.v}px`:null}function Ct(e,t){if(e.t!=="obj")return[];let n=[],s=[];for(let o of e.entries){if(o.value.t==="obj"){let l=o.key.replace(/^&/,""),c=l===":hover"?"hover":l===":focus"||l===":focus-visible"?"focus":l===":active"?"active":l===":disabled"?"disabled":null;c&&s.push(...Ct(o.value,c));continue}let i=rc(o.key),a=oc(i,o.value);!a||!se(i,a)||n.push({property:i,value:a,via:"style"})}return[...n.length?[{state:t,context:"",declarations:n}]:[],...s]}function In(e,t){if(e[t]!=="`")return null;let n="";for(let s=t+1;s<e.length;s++){let r=e[s];if(r==="\\"){let o=e[s+1];if(o===void 0)return null;n+=o==="n"?`
54
+ `:o,s++;continue}if(r==="$"&&e[s+1]==="{"){let o=1;for(s+=2;s<e.length&&o>0;s++)e[s]==="{"?o++:e[s]==="}"&&o--;s--,n+=" ";continue}if(r==="`")return{css:n,end:s+1};n+=r}return null}function ic(e,t){if(e==="default")return t;if(t==="default")return e;let n=[...new Set([...e.split(" + "),...t.split(" + ")])];return n.sort((s,r)=>H(s)-H(r)||s.localeCompare(r)),be(n)}function jn(e){let t=[];for(let n of ke(`.__gs {
52
55
  ${e}
53
- }`)){let s=Q(n.selector),r=s?.[s.length-1];if(!r)continue;let o=ft(r.simples),i=be(o.states),a=pe(n.ownBody).filter(l=>se(l.property,l.value));a.length&&t.push({state:i,context:n.context,declarations:a});for(let l of $t(n.ownBody))t.push({state:oc(i,l.state),context:[n.context,l.context].filter(Boolean).join(" \xB7 "),declarations:l.declarations})}return t}function ic(e){let t=e.match(/\bstyle\s*=\s*"([^"]*)"/);if(t){let i=pe(t[1]).filter(a=>se(a.property,a.value));return i.length?[{state:"default",context:"",declarations:i}]:[]}let n=e.search(/\bstyle\s*=\s*\{/);if(n<0)return[];let s=e.indexOf("{",n),r=G(e,s+1);e[r]==="{"&&(s=r);let o=ne(e,s);return o?Ct(o.val,"default"):[]}function ac(e){let t=tc(e);if(t)return{classes:t,painted:[]};let n=e.search(/\bclassName\s*=\s*\{/);if(n<0)return{classes:"",painted:[]};let s=e.indexOf("{",n),r=G(e,s+1);if(e.startsWith("css",r)&&!/[\w$]/.test(e[r+3]??"")){let i=G(e,r+3);if(e[i]==="`"){let a=En(e,i);return{classes:"",painted:a?jn(a.css):[]}}if(e[i]==="("){let a=ne(e,i+1);return{classes:"",painted:a?Ct(a.val,"default"):[]}}}let o=ne(e,r);return o?{classes:vt(o.val)??"",painted:[]}:{classes:"",painted:[]}}function lc(e,t){if(t.identifier.test(e))return!0;let n=e.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);return t.classKeywords.some(s=>n.includes(s.toLowerCase()))}function cc(e,t){let n=[],s=/(?:^|[^\w$])styled(?:\.([A-Za-z][\w]*)|\(\s*(?:["']([A-Za-z][\w]*)["']|([A-Za-z][\w]*))\s*\))/g;for(let o of e.matchAll(s)){let i=o[1]??o[2]??o[3]??"";if(!Yr(i,t))continue;let a=G(e,(o.index??0)+o[0].length);e.startsWith(".attrs",a)&&(a=G(e,a+6),e[a]==="("&&(a=In(e,a,"(",")")),a=G(e,a));let l=[];if(e[a]==="`"){let c=En(e,a);c&&(l=jn(c.css))}else if(e[a]==="("){let c=ne(e,a+1);c&&(l=Ct(c.val,"default"))}l.length!==0&&n.push({title:"Styled",axis:null,base:!0,classes:"",line:fe(e,o.index??0),painted:l})}let r=/(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*css\s*`/g;for(let o of e.matchAll(r)){let i=o[1]??"";if(!lc(i,t))continue;let a=e.indexOf("`",o.index??0),l=a<0?null:En(e,a);if(!l)continue;let c=jn(l.css);c.length!==0&&n.push({title:"Css",axis:null,base:!0,classes:"",line:fe(e,o.index??0),painted:c})}return n}function uc(e,t){if(t==="default")return`.${e}`;let n=`.${e}`;for(let s of t.split(" + "))s==="hover"?n+=":hover":s==="focus"?n+=":focus":s==="active"?n+=":active":s==="disabled"&&(n+=":disabled");return n}function pc(e,t,n,s,r){let o=Kr(e.classes).map(Jr).filter(d=>d!==null),i=o.filter(d=>d.stem===null||!s.has(d.stem)),a=(e.painted??[]).filter(d=>d.declarations.length>0);if(i.length===0&&a.length===0)return null;let l=new Map,c=(d,y,k)=>{if(k.length===0)return;let x=`${d}\0${y}`,v=l.get(x)??{state:d,context:y,declarations:[]};v.declarations.push(...k),l.set(x,v)},u=[r];for(let d of o){let y=Zr(d).filter(k=>se(k.property,k.value));c(d.state,d.context,y),d.state==="default"&&d.context===""&&d.stem&&u.push(d.stem)}for(let d of a)c(d.state,d.context,d.declarations);let f=[...l.values()].flatMap(d=>d.declarations);if(!ql(f))return null;let m=l.get("default\0")?.declarations??[];if(gt(m))return null;let h=[...l.values()].map(d=>({state:d.state,context:d.context,line:e.line,declarations:d.declarations})).sort((d,y)=>d.state!==y.state?d.state==="default"?-1:y.state==="default"?1:H(d.state.split(" + ")[0])-H(y.state.split(" + ")[0])||d.state.localeCompare(y.state):d.context===""?-1:y.context===""?1:d.context.localeCompare(y.context)),w=[...new Set(o.map(d=>d.stem).filter(d=>d!==null))],C=w.length?w.map(d=>`.${d}`).join(""):n.elements[0]??"button",$=h.flatMap(d=>Pn(uc(r,d.state),d.declarations,d.context)),g=n.elements[0]??"button";return{variant:{title:e.title,axis:e.axis,element:{tag:g,classes:u,attrs:{},ancestors:[]},usage:{status:"unknown",files:[],fileCount:0},selector:C,path:t,line:e.line,base:e.base,states:h},rules:$}}function Qr(e,t,n,s,r){let o=Gl(t),i=[],a=[],l=/(?:^|[^\w$])(cva|tv)\s*\(/g;for(let p of o.matchAll(l)){let d=(p.index??0)+Math.max(0,p[0].indexOf(p[1])),y=(p.index??0)+p[0].length,k=a.length,x=Ql(o,y,n,e,k);a.push({name:Xl(o,d),defaults:x.defaults}),i.push(...x.slots)}i.push(...cc(o,n));let c=/<([A-Za-z][\w.]*)\b([^>]*?)>/g;for(let p of o.matchAll(c)){let d=p[1];if(!Yr(d,n))continue;let y=p[2]??"",k=ac(y),x=[...k.painted,...ic(y)],v=k.classes.trim();if(!v&&x.length===0)continue;let E=p.index??0,j=fe(o,E);i.push({title:v?"Base":k.painted.length?"Css":"Inline",axis:null,base:!0,classes:v,line:j,painted:x,...v&&x.length===0?{site:{path:e,line:j,offset:E}}:{}})}let u=[],f=[],m=new Map,h=[],w=new Map,C=new Map,$=r;for(let p=0;p<i.length;p++){let d=i[p];if(u.length+f.length>=Vl)break;let y=(d.painted??[]).map(j=>`${j.state}|${j.context}|${j.declarations.map(R=>`${R.property}:${R.value}`).join(";")}`).join("||"),k=`${d.classes.replace(/\s+/g," ").trim()}##${y}`,x=w.get(k);if(x){d.group!==void 0&&C.set(p,x),d.site&&m.get(x)?.sites.push(d.site);continue}$+=1;let v=`__gs-recipe-${$}`,E=pc(d,e,n,s,v);if(E){if(w.set(k,v),d.group!==void 0&&C.set(p,v),d.site){let j={variant:E.variant,sites:[d.site]};m.set(v,j),f.push(j)}else u.push(E.variant);h.push(...E.rules)}}let g=[];for(let p=0;p<a.length;p++){let d=a[p],y={path:e,name:d.name,staticClasses:[],axes:[],compounds:[]},k=new Map;for(let x=0;x<i.length;x++){let v=i[x];if(v.group!==p)continue;let E=C.get(x);if(!E)continue;if(!v.prop&&!v.when){y.staticClasses.push(E);continue}if(v.when){y.compounds.push({when:v.when,classes:[E]});continue}let j=k.get(v.prop)??[];j.push({value:v.value,classes:[E]}),k.set(v.prop,j)}for(let[x,v]of k)y.axes.push({prop:x,values:v,...d.defaults[x]?{defaultValue:d.defaults[x]}:{}});(y.staticClasses.length||y.axes.length||y.compounds.length)&&g.push(y)}return{variants:u,inline:f,previewRules:h,nextId:$,recipes:g}}function eo(e,t){let s=(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);return t.some(r=>{let o=r.toLowerCase();return s.includes(o)||s.includes(`${o}s`)})}var Ln=6,fc=/"([^"\\\n]{0,400})"|'([^'\\\n]{0,400})'|`([^`\\]{0,400})`/g,dc=/\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)')/g,gc=/\b(?:styles?|classes|css|cls|s)\.([A-Za-z_]\w*)/g,qe=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function mc(e){let t=n=>n.replace(/[^\n]/g," ");return e.replace(/\/\*[\s\S]*?\*\//g,t).replace(/<!--[\s\S]*?-->/g,t).replace(/(^|\s)\/\/[^\n]*/g,(n,s)=>s+t(n.slice(s.length)))}function hc(e,t){let n=mc(t),s=new Map,r=new Map,o=(a,l,c)=>{let u=a.get(l);u?u.push(c):a.set(l,[c])},i=(a,l)=>{for(let c of a.matchAll(/[\w-]+/g))o(s,c[0],l)};for(let a of n.matchAll(fc))i(a[1]??a[2]??a[3]??"",a.index);for(let a of n.matchAll(dc))i(a[1]??a[2]??"",a.index);for(let a of n.matchAll(gc))o(r,a[1],a.index);return{path:e,text:n,original:t,words:s,ids:r}}function to(e,t){let n=1;for(let s=e.indexOf(`
56
+ }`)){let s=Q(n.selector),r=s?.[s.length-1];if(!r)continue;let o=ft(r.simples),i=be(o.states),a=pe(n.ownBody).filter(l=>se(l.property,l.value));a.length&&t.push({state:i,context:n.context,declarations:a});for(let l of $t(n.ownBody))t.push({state:ic(i,l.state),context:[n.context,l.context].filter(Boolean).join(" \xB7 "),declarations:l.declarations})}return t}function ac(e){let t=e.match(/\bstyle\s*=\s*"([^"]*)"/);if(t){let i=pe(t[1]).filter(a=>se(a.property,a.value));return i.length?[{state:"default",context:"",declarations:i}]:[]}let n=e.search(/\bstyle\s*=\s*\{/);if(n<0)return[];let s=e.indexOf("{",n),r=G(e,s+1);e[r]==="{"&&(s=r);let o=ne(e,s);return o?Ct(o.val,"default"):[]}function lc(e){let t=nc(e);if(t)return{classes:t,painted:[]};let n=e.search(/\bclassName\s*=\s*\{/);if(n<0)return{classes:"",painted:[]};let s=e.indexOf("{",n),r=G(e,s+1);if(e.startsWith("css",r)&&!/[\w$]/.test(e[r+3]??"")){let i=G(e,r+3);if(e[i]==="`"){let a=In(e,i);return{classes:"",painted:a?jn(a.css):[]}}if(e[i]==="("){let a=ne(e,i+1);return{classes:"",painted:a?Ct(a.val,"default"):[]}}}let o=ne(e,r);return o?{classes:vt(o.val)??"",painted:[]}:{classes:"",painted:[]}}function cc(e,t){if(t.identifier.test(e))return!0;let n=e.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);return t.classKeywords.some(s=>n.includes(s.toLowerCase()))}function uc(e,t){let n=[],s=/(?:^|[^\w$])styled(?:\.([A-Za-z][\w]*)|\(\s*(?:["']([A-Za-z][\w]*)["']|([A-Za-z][\w]*))\s*\))/g;for(let o of e.matchAll(s)){let i=o[1]??o[2]??o[3]??"";if(!Yr(i,t))continue;let a=G(e,(o.index??0)+o[0].length);e.startsWith(".attrs",a)&&(a=G(e,a+6),e[a]==="("&&(a=En(e,a,"(",")")),a=G(e,a));let l=[];if(e[a]==="`"){let c=In(e,a);c&&(l=jn(c.css))}else if(e[a]==="("){let c=ne(e,a+1);c&&(l=Ct(c.val,"default"))}l.length!==0&&n.push({title:"Styled",axis:null,base:!0,classes:"",line:fe(e,o.index??0),painted:l})}let r=/(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*css\s*`/g;for(let o of e.matchAll(r)){let i=o[1]??"";if(!cc(i,t))continue;let a=e.indexOf("`",o.index??0),l=a<0?null:In(e,a);if(!l)continue;let c=jn(l.css);c.length!==0&&n.push({title:"Css",axis:null,base:!0,classes:"",line:fe(e,o.index??0),painted:c})}return n}function pc(e,t){if(t==="default")return`.${e}`;let n=`.${e}`;for(let s of t.split(" + "))s==="hover"?n+=":hover":s==="focus"?n+=":focus":s==="active"?n+=":active":s==="disabled"&&(n+=":disabled");return n}function fc(e,t,n,s,r){let o=Kr(e.classes).map(Jr).filter(d=>d!==null),i=o.filter(d=>d.stem===null||!s.has(d.stem)),a=(e.painted??[]).filter(d=>d.declarations.length>0);if(i.length===0&&a.length===0)return null;let l=new Map,c=(d,y,k)=>{if(k.length===0)return;let x=`${d}\0${y}`,v=l.get(x)??{state:d,context:y,declarations:[]};v.declarations.push(...k),l.set(x,v)},u=[r];for(let d of o){let y=Zr(d).filter(k=>se(k.property,k.value));c(d.state,d.context,y),d.state==="default"&&d.context===""&&d.stem&&u.push(d.stem)}for(let d of a)c(d.state,d.context,d.declarations);let f=[...l.values()].flatMap(d=>d.declarations);if(!Xl(f))return null;let m=l.get("default\0")?.declarations??[];if(gt(m))return null;let h=[...l.values()].map(d=>({state:d.state,context:d.context,line:e.line,declarations:d.declarations})).sort((d,y)=>d.state!==y.state?d.state==="default"?-1:y.state==="default"?1:H(d.state.split(" + ")[0])-H(y.state.split(" + ")[0])||d.state.localeCompare(y.state):d.context===""?-1:y.context===""?1:d.context.localeCompare(y.context)),w=[...new Set(o.map(d=>d.stem).filter(d=>d!==null))],C=w.length?w.map(d=>`.${d}`).join(""):n.elements[0]??"button",$=h.flatMap(d=>Pn(pc(r,d.state),d.declarations,d.context)),g=n.elements[0]??"button";return{variant:{title:e.title,axis:e.axis,element:{tag:g,classes:u,attrs:{},ancestors:[]},usage:{status:"unknown",files:[],fileCount:0},selector:C,path:t,line:e.line,base:e.base,states:h},rules:$}}function Qr(e,t,n,s,r){let o=Hl(t),i=[],a=[],l=/(?:^|[^\w$])(cva|tv)\s*\(/g;for(let p of o.matchAll(l)){let d=(p.index??0)+Math.max(0,p[0].indexOf(p[1])),y=(p.index??0)+p[0].length,k=a.length,x=ec(o,y,n,e,k);a.push({name:Yl(o,d),defaults:x.defaults}),i.push(...x.slots)}i.push(...uc(o,n));let c=/<([A-Za-z][\w.]*)\b([^>]*?)>/g;for(let p of o.matchAll(c)){let d=p[1];if(!Yr(d,n))continue;let y=p[2]??"",k=lc(y),x=[...k.painted,...ac(y)],v=k.classes.trim();if(!v&&x.length===0)continue;let I=p.index??0,j=fe(o,I);i.push({title:v?"Base":k.painted.length?"Css":"Inline",axis:null,base:!0,classes:v,line:j,painted:x,...v&&x.length===0?{site:{path:e,line:j,offset:I}}:{}})}let u=[],f=[],m=new Map,h=[],w=new Map,C=new Map,$=r;for(let p=0;p<i.length;p++){let d=i[p];if(u.length+f.length>=zl)break;let y=(d.painted??[]).map(j=>`${j.state}|${j.context}|${j.declarations.map(R=>`${R.property}:${R.value}`).join(";")}`).join("||"),k=`${d.classes.replace(/\s+/g," ").trim()}##${y}`,x=w.get(k);if(x){d.group!==void 0&&C.set(p,x),d.site&&m.get(x)?.sites.push(d.site);continue}$+=1;let v=`__gs-recipe-${$}`,I=fc(d,e,n,s,v);if(I){if(w.set(k,v),d.group!==void 0&&C.set(p,v),d.site){let j={variant:I.variant,sites:[d.site]};m.set(v,j),f.push(j)}else u.push(I.variant);h.push(...I.rules)}}let g=[];for(let p=0;p<a.length;p++){let d=a[p],y={path:e,name:d.name,staticClasses:[],axes:[],compounds:[]},k=new Map;for(let x=0;x<i.length;x++){let v=i[x];if(v.group!==p)continue;let I=C.get(x);if(!I)continue;if(!v.prop&&!v.when){y.staticClasses.push(I);continue}if(v.when){y.compounds.push({when:v.when,classes:[I]});continue}let j=k.get(v.prop)??[];j.push({value:v.value,classes:[I]}),k.set(v.prop,j)}for(let[x,v]of k)y.axes.push({prop:x,values:v,...d.defaults[x]?{defaultValue:d.defaults[x]}:{}});(y.staticClasses.length||y.axes.length||y.compounds.length)&&g.push(y)}return{variants:u,inline:f,previewRules:h,nextId:$,recipes:g}}function eo(e,t){let s=(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);return t.some(r=>{let o=r.toLowerCase();return s.includes(o)||s.includes(`${o}s`)})}var Ln=6,dc=/"([^"\\\n]{0,400})"|'([^'\\\n]{0,400})'|`([^`\\]{0,400})`/g,gc=/\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)')/g,mc=/\b(?:styles?|classes|css|cls|s)\.([A-Za-z_]\w*)/g,qe=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function hc(e){let t=n=>n.replace(/[^\n]/g," ");return e.replace(/\/\*[\s\S]*?\*\//g,t).replace(/<!--[\s\S]*?-->/g,t).replace(/(^|\s)\/\/[^\n]*/g,(n,s)=>s+t(n.slice(s.length)))}function bc(e,t){let n=hc(t),s=new Map,r=new Map,o=(a,l,c)=>{let u=a.get(l);u?u.push(c):a.set(l,[c])},i=(a,l)=>{for(let c of a.matchAll(/[\w-]+/g))o(s,c[0],l)};for(let a of n.matchAll(dc))i(a[1]??a[2]??a[3]??"",a.index);for(let a of n.matchAll(gc))i(a[1]??a[2]??"",a.index);for(let a of n.matchAll(mc))o(r,a[1],a.index);return{path:e,text:n,original:t,words:s,ids:r}}function to(e,t){let n=1;for(let s=e.indexOf(`
54
57
  `);s!==-1&&s<t;)n++,s=e.indexOf(`
55
- `,s+1);return n}var bc=e=>e.replace(/[-_]+(\w)/g,(t,n)=>n.toUpperCase()),yc=/\[\s*([\w-]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*\]/g,xc=new Set(["data-component","data-slot","role"]);function kc(e,t){return[...e.slice(ye(e)).matchAll(yc)].map(s=>({name:s[1],value:s[2]??s[3]??s[4]??null})).filter(s=>!xc.has(s.name)&&!(s.value!==null&&t.has(s.value.toLowerCase())))}function wc(e){return[...e.slice(ye(e)).matchAll(/\.((?:\\.|[\w-])+)/g)].map(n=>n[1].replace(/\\(.)/g,"$1"))}function On(e,t,n,s,r=!1,o=[],i=()=>null){let a=null,l=()=>a??=t.map(g=>hc(g,e.get(g)??"")),c=new Map,u=g=>{let p=c.get(g);if(!p){let d=new RegExp(`["'\`]${qe(g)}["'\`]\\s*\\+`);p=l().filter(y=>y.text.includes(`${g}\${`)||d.test(y.text)),c.set(g,p)}return p},f=(g,p,d)=>Ir(bn(g.original,p,d,g.path),g.original,p,g.path,o,i),m=(g,p)=>({files:g.slice(0,Ln).map(({file:d,offset:y,example:k})=>({path:d.path,line:to(d.text,y),...r?{example:k??f(d,y,p)}:{}})),fileCount:g.length}),h=(g,p)=>{let d=[],y=bc(g);for(let k of l()){let x=[...s.has(g)?[]:k.words.get(g)??[],...k.ids.get(y)??k.ids.get(g)??[]],v=x[0];if(v===void 0)continue;let E=v,j;if(r)for(let R of x){let A=f(k,R,p);if(A.kind!=="other"){E=R,j=A;break}}d.push({file:k,offset:E,example:j})}if(d.length)return{status:"used",...m(d,p)};for(let k=g.length-1;k>0;k--){if(g[k]!=="-"&&g[k]!=="_")continue;let x=g.slice(0,k+1),v=g.slice(k+1),E=u(x);if(E.length===0||!v)continue;let j=x.slice(0,-1),R=new RegExp(`\\b${qe(j)}\\s*[=:]\\s*\\{?\\s*["'\`]${qe(v)}["'\`]`),A=[];for(let P of l()){let N=R.exec(P.text);N&&A.push({file:P,offset:N.index})}return A.length?{status:"used",via:`via ${j} prop`,...m(A,p)}:{status:"dynamic",via:`built as ${x}\${\u2026}`,...m(E.map(P=>({file:P,offset:0})),p)}}return{status:"unreferenced",files:[],fileCount:0}},w=(g,p)=>{let d=qe(g.name),y=g.value===null?new RegExp(`\\b${d}\\b`):new RegExp(`\\b${d}\\s*[=:]\\s*\\{?\\s*["'\`]${qe(g.value)}["'\`]`),k=[];for(let E of l()){let j=y.exec(E.text);j&&k.push({file:E,offset:j.index})}if(k.length)return{status:"used",via:`via ${g.name} attribute`,...m(k,p)};let x=new RegExp(`\\b${d}\\s*=\\s*\\{(?!\\s*["'\`])`),v=[];for(let E of l()){let j=x.exec(E.text);j&&v.push({file:E,offset:j.index})}return v.length?{status:"dynamic",via:`${g.name} is set from a variable`,...m(v,p)}:{status:"unreferenced",files:[],fileCount:0}},C=new Map;if(r&&o.length>0)for(let g of l())for(let p of kt(g.path,g.text,o,i))for(let d of p.selects){let y=C.get(d)??[];y.push({file:g,offset:p.offset}),C.set(d,y)}let $={used:0,unknown:0,dynamic:1,unreferenced:2};for(let g of n){let p=wc(g.selector),d=kc(g.selector,s);if(p.length===0&&d.length===0){g.usage={status:"unknown",files:[],fileCount:0};continue}let y=[...p.map(R=>h(R,p)),...d.map(R=>w(R,p))];g.usage=y.reduce((R,A)=>$[A.status]>=$[R.status]?A:R);let k=g.element?.classes.find(R=>R.startsWith("__gs-recipe-")),x=k?C.get(k):void 0;if(!x||x.length===0)continue;let v=new Set(g.usage.files.map(R=>R.path)),E=g.usage.fileCount,j=[...g.usage.files];for(let R of x)v.has(R.file.path)||(v.add(R.file.path),E+=1,!(j.length>=Ln)&&j.push({path:R.file.path,line:to(R.file.text,R.offset),...r?{example:f(R.file,R.offset,[])}:{}}));g.usage={...g.usage,status:g.usage.status==="unknown"?"unknown":"used",files:j,fileCount:E}}}function no(e,t,n){let s=[],r=new Set;for(let o of t)r.has(o.path)||(r.add(o.path),!(s.length>=Ln)&&s.push({path:o.path,line:o.line,...n?{example:bn(e.get(o.path)??"",o.offset,[],o.path)}:{}}));return{status:"used",files:s,fileCount:r.size}}var vc={id:"button",label:"Buttons",identifier:/^[A-Z][A-Za-z0-9]*Button[A-Za-z0-9]*$|^Button[A-Za-z0-9]*$/,elements:["button"],roles:["button"],classKeywords:["btn","button"],excludeClassKeywords:["switch","switcher"],prose:/\bbuttons?\b/i},lo={button:vc},co=12,Nn=200,we=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro)$/i,so=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,Xe=/\.(css|scss|sass|less|styl)$/i,ro=/\.(mdx?|markdown|txt|rst|adoc)$/i,oo=/(^|\/)(tokens?|design-tokens?|theme)[^/]*\.json$/i,Z=/(^|\/)(__tests__|tests?|spec|e2e|cypress|playwright)(\/|$)|\.(test|spec)\.[a-z]+$/i,$c=/(^|\/)(plans?|results?|changelogs?|history|archive)(\/|\.|$)|(^|\/)CHANGELOG/i;function Cc(e){return St.test(e)&&!/(^|\/)README\.md$/i.test(e)?"instruction":$c.test(e)?"record":"documentation"}var St=/(^|\/)(AGENTS|CLAUDE|CONTRIBUTING|README|GUIDELINES?)\.md$|(^|\/)(eslint|stylelint|\.eslintrc|\.stylelintrc)[^/]*$|(^|\/)\.cursor\/|(^|\/)\.claude\//i;function de(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Sc(e){return(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"")}function io(e,t){let n=Sc(e).toLowerCase();return t.some(s=>{let r=s.toLowerCase();return n===r||n===`${r}s`})}function Rc(e,t){let n=1;for(let s=0;s<t;s++)e.charCodeAt(s)===10&&n++;return n}function ge(e,t){let n=e.split(`
56
- `),s=0,r=[];for(let o=0;o<n.length;o++){let i=n[o];if(t.lastIndex=0,!!t.test(i)&&(s++,r.length<co)){let a=i.trim();r.push({line:o+1,text:a.length>Nn?`${a.slice(0,Nn)}\u2026`:a})}}return{count:s,lines:r}}function uo(e){let t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function po(e){let t=[];for(let n of e.split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return t.join("/")}var Ac=["",".tsx",".ts",".jsx",".js",".mjs",".vue",".svelte",".css",".module.css",".scss","/index.tsx","/index.ts","/index.js"];function ve(e,t,n){let s;if(t.startsWith("."))s=po(`${uo(e)}/${t}`);else if(t.startsWith("@/"))s=t.slice(2);else if(t.startsWith("~/"))s=t.slice(2);else if(t.startsWith("/"))s=t.slice(1);else return null;for(let r of Ac)if(n(s+r))return s+r;return null}var _c=/import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]|require\(\s*['"]([^'"]+)['"]\s*\)|@import\s+(?:url\()?['"]([^'"]+)['"]/g;function Mn(e){let t=[];for(let n of e.matchAll(_c)){let s=n[1]??n[2]??n[3];s&&t.push(s)}return t}var Ic=/export\s+(?:default\s+)?(?:async\s+)?(?:function|const|let|class|var)\s+([A-Za-z_$][\w$]*)|export\s*\{([^}]*)\}/g;function ao(e){let t=new Set;for(let n of e.matchAll(Ic))if(n[1]&&t.add(n[1]),n[2])for(let s of n[2].split(",")){let r=s.trim().split(/\s+as\s+/).pop()?.trim();r&&t.add(r)}return[...t]}var Dn=/var\(\s*(--[\w-]+)/g;function Rt(e){return e.split(" \xB7 ").every(t=>t===""||/^@layer\b/i.test(t))}function fo(e){let t=[];for(let n of e.matchAll(/(?:^|[;{}])\s*composes\s*:\s*([^;]+)/g)){let s=n[1].trim(),r=/^(.*?)\s+from\s+(['"]?)([^'"]+)\2\s*$/.exec(s);r?t.push({names:r[1].split(/\s+/).filter(Boolean),from:r[3]}):t.push({names:s.split(/\s+/).filter(Boolean),from:null})}return t}function Ec(e,t,n){let s=t.startsWith(".")?po(`${uo(e)}/${t}`):t.startsWith("@/")?t.slice(2):t.startsWith("~/")||t.startsWith("/")?t.replace(/^~?\//,""):null;return s&&n(s)?s:ve(e,t.replace(/\.(?:module\.)?(?:css|scss|sass|less)$/i,""),n)}function jc(e){let t=new Map;for(let[n,s]of e)if(Xe.test(n)){for(let r of ke(s))if(Rt(r.context))for(let o of W(r.selector)){let i=/^\.([\w-]+)$/.exec(o.trim())?.[1];if(!i)continue;let a=`${n}\0${i}`,l=t.get(a)??{decls:[],composes:[]};l.decls.push(...pe(r.ownBody));for(let c of $t(r.ownBody))c.state==="default"&&c.context===""&&l.decls.push(...c.declarations);l.composes.push(...fo(r.ownBody)),t.set(a,l)}}return t}function Pc(e,t,n,s){let r=[],o=new Set,i=(l,c,u)=>{if(u>4)return;let f=`${l}\0${c}`;if(o.has(f))return;o.add(f);let m=n.get(f);if(m){for(let h of m.composes)a(l,h,u+1);r.push(...m.decls)}},a=(l,c,u)=>{for(let f of c.names)if(c.from==="global")for(let m of n.keys()){let h=m.indexOf("\0"),w=m.slice(0,h);m.slice(h+1)!==f||/\.module\./i.test(w)||i(w,f,u)}else if(c.from){let m=Ec(l,c.from,s);m&&i(m,f,u)}else i(l,f,u)};for(let l of fo(t))a(e,l,0);return r}function Lc(e,t){let n=qr(t);return n?W(e).map(s=>{let r=Math.max(s.lastIndexOf(" "),s.lastIndexOf(">"),s.lastIndexOf("+"),s.lastIndexOf("~"));return r<0?`${s}${n}`:`${s.slice(0,r+1)}${s.slice(r+1)}${n}`}).join(", "):e}var Oc=/^(?::root|html|body|\*)$/i,Mc=25e4,Nc=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,Dc=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,Tc=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]);function Bc(e){let t=new Set,n=new Set;for(let s of e.matchAll(Nc)){let r=s[1],o=Tc.has(r.toLowerCase())&&r===r.toLowerCase()?t:n;for(let i of s[2].matchAll(Dc))o.add(i[1]??i[2])}return{parts:new Set([...t].filter(s=>!n.has(s))),controls:n}}function Fc(e,t){let n=new Map;for(let s of t)if(Xe.test(s)){for(let r of ke(e.get(s)))if(Rt(r.context)&&W(r.selector).some(o=>Oc.test(o)))for(let o of pe(r.ownBody))o.property.startsWith("--")&&!n.has(o.property)&&n.set(o.property,o.value)}return n}function Uc(e,t){let n=new Set,s=[],r=a=>{for(let l of a.matchAll(Dn))n.has(l[1])||(n.add(l[1]),s.push(l[1]))};for(let a of t)r(a);let o=[];for(let a=s.shift();a;a=s.shift()){let l=e.get(a);l===void 0||!se(a,l)||(o.push(`${a}:${l}`),r(l))}return`${o.length?`:root{${o.join(";")}}
58
+ `,s+1);return n}var yc=e=>e.replace(/[-_]+(\w)/g,(t,n)=>n.toUpperCase()),xc=/\[\s*([\w-]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*\]/g,kc=new Set(["data-component","data-slot","role"]);function wc(e,t){return[...e.slice(ye(e)).matchAll(xc)].map(s=>({name:s[1],value:s[2]??s[3]??s[4]??null})).filter(s=>!kc.has(s.name)&&!(s.value!==null&&t.has(s.value.toLowerCase())))}function vc(e){return[...e.slice(ye(e)).matchAll(/\.((?:\\.|[\w-])+)/g)].map(n=>n[1].replace(/\\(.)/g,"$1"))}function On(e,t,n,s,r=!1,o=[],i=()=>null){let a=null,l=()=>a??=t.map(g=>bc(g,e.get(g)??"")),c=new Map,u=g=>{let p=c.get(g);if(!p){let d=new RegExp(`["'\`]${qe(g)}["'\`]\\s*\\+`);p=l().filter(y=>y.text.includes(`${g}\${`)||d.test(y.text)),c.set(g,p)}return p},f=(g,p,d)=>Er(bn(g.original,p,d,g.path),g.original,p,g.path,o,i),m=(g,p)=>({files:g.slice(0,Ln).map(({file:d,offset:y,example:k})=>({path:d.path,line:to(d.text,y),...r?{example:k??f(d,y,p)}:{}})),fileCount:g.length}),h=(g,p)=>{let d=[],y=yc(g);for(let k of l()){let x=[...s.has(g)?[]:k.words.get(g)??[],...k.ids.get(y)??k.ids.get(g)??[]],v=x[0];if(v===void 0)continue;let I=v,j;if(r)for(let R of x){let A=f(k,R,p);if(A.kind!=="other"){I=R,j=A;break}}d.push({file:k,offset:I,example:j})}if(d.length)return{status:"used",...m(d,p)};for(let k=g.length-1;k>0;k--){if(g[k]!=="-"&&g[k]!=="_")continue;let x=g.slice(0,k+1),v=g.slice(k+1),I=u(x);if(I.length===0||!v)continue;let j=x.slice(0,-1),R=new RegExp(`\\b${qe(j)}\\s*[=:]\\s*\\{?\\s*["'\`]${qe(v)}["'\`]`),A=[];for(let P of l()){let N=R.exec(P.text);N&&A.push({file:P,offset:N.index})}return A.length?{status:"used",via:`via ${j} prop`,...m(A,p)}:{status:"dynamic",via:`built as ${x}\${\u2026}`,...m(I.map(P=>({file:P,offset:0})),p)}}return{status:"unreferenced",files:[],fileCount:0}},w=(g,p)=>{let d=qe(g.name),y=g.value===null?new RegExp(`\\b${d}\\b`):new RegExp(`\\b${d}\\s*[=:]\\s*\\{?\\s*["'\`]${qe(g.value)}["'\`]`),k=[];for(let I of l()){let j=y.exec(I.text);j&&k.push({file:I,offset:j.index})}if(k.length)return{status:"used",via:`via ${g.name} attribute`,...m(k,p)};let x=new RegExp(`\\b${d}\\s*=\\s*\\{(?!\\s*["'\`])`),v=[];for(let I of l()){let j=x.exec(I.text);j&&v.push({file:I,offset:j.index})}return v.length?{status:"dynamic",via:`${g.name} is set from a variable`,...m(v,p)}:{status:"unreferenced",files:[],fileCount:0}},C=new Map;if(r&&o.length>0)for(let g of l())for(let p of kt(g.path,g.text,o,i))for(let d of p.selects){let y=C.get(d)??[];y.push({file:g,offset:p.offset}),C.set(d,y)}let $={used:0,unknown:0,dynamic:1,unreferenced:2};for(let g of n){let p=vc(g.selector),d=wc(g.selector,s);if(p.length===0&&d.length===0){g.usage={status:"unknown",files:[],fileCount:0};continue}let y=[...p.map(R=>h(R,p)),...d.map(R=>w(R,p))];g.usage=y.reduce((R,A)=>$[A.status]>=$[R.status]?A:R);let k=g.element?.classes.find(R=>R.startsWith("__gs-recipe-")),x=k?C.get(k):void 0;if(!x||x.length===0)continue;let v=new Set(g.usage.files.map(R=>R.path)),I=g.usage.fileCount,j=[...g.usage.files];for(let R of x)v.has(R.file.path)||(v.add(R.file.path),I+=1,!(j.length>=Ln)&&j.push({path:R.file.path,line:to(R.file.text,R.offset),...r?{example:f(R.file,R.offset,[])}:{}}));g.usage={...g.usage,status:g.usage.status==="unknown"?"unknown":"used",files:j,fileCount:I}}}function no(e,t,n){let s=[],r=new Set;for(let o of t)r.has(o.path)||(r.add(o.path),!(s.length>=Ln)&&s.push({path:o.path,line:o.line,...n?{example:bn(e.get(o.path)??"",o.offset,[],o.path)}:{}}));return{status:"used",files:s,fileCount:r.size}}var $c={id:"button",label:"Buttons",identifier:/^[A-Z][A-Za-z0-9]*Button[A-Za-z0-9]*$|^Button[A-Za-z0-9]*$/,elements:["button"],roles:["button"],classKeywords:["btn","button"],excludeClassKeywords:["switch","switcher"],prose:/\bbuttons?\b/i},lo={button:$c},co=12,Nn=200,we=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro)$/i,so=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,Xe=/\.(css|scss|sass|less|styl)$/i,ro=/\.(mdx?|markdown|txt|rst|adoc)$/i,oo=/(^|\/)(tokens?|design-tokens?|theme)[^/]*\.json$/i,Z=/(^|\/)(__tests__|tests?|spec|e2e|cypress|playwright)(\/|$)|\.(test|spec)\.[a-z]+$/i,Cc=/(^|\/)(plans?|results?|changelogs?|history|archive)(\/|\.|$)|(^|\/)CHANGELOG/i;function Sc(e){return St.test(e)&&!/(^|\/)README\.md$/i.test(e)?"instruction":Cc.test(e)?"record":"documentation"}var St=/(^|\/)(AGENTS|CLAUDE|CONTRIBUTING|README|GUIDELINES?)\.md$|(^|\/)(eslint|stylelint|\.eslintrc|\.stylelintrc)[^/]*$|(^|\/)\.cursor\/|(^|\/)\.claude\//i;function de(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Rc(e){return(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"")}function io(e,t){let n=Rc(e).toLowerCase();return t.some(s=>{let r=s.toLowerCase();return n===r||n===`${r}s`})}function Ac(e,t){let n=1;for(let s=0;s<t;s++)e.charCodeAt(s)===10&&n++;return n}function ge(e,t){let n=e.split(`
59
+ `),s=0,r=[];for(let o=0;o<n.length;o++){let i=n[o];if(t.lastIndex=0,!!t.test(i)&&(s++,r.length<co)){let a=i.trim();r.push({line:o+1,text:a.length>Nn?`${a.slice(0,Nn)}\u2026`:a})}}return{count:s,lines:r}}function uo(e){let t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function po(e){let t=[];for(let n of e.split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return t.join("/")}var _c=["",".tsx",".ts",".jsx",".js",".mjs",".vue",".svelte",".css",".module.css",".scss","/index.tsx","/index.ts","/index.js"];function ve(e,t,n){let s;if(t.startsWith("."))s=po(`${uo(e)}/${t}`);else if(t.startsWith("@/"))s=t.slice(2);else if(t.startsWith("~/"))s=t.slice(2);else if(t.startsWith("/"))s=t.slice(1);else return null;for(let r of _c)if(n(s+r))return s+r;return null}var Ec=/import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]|require\(\s*['"]([^'"]+)['"]\s*\)|@import\s+(?:url\()?['"]([^'"]+)['"]/g;function Mn(e){let t=[];for(let n of e.matchAll(Ec)){let s=n[1]??n[2]??n[3];s&&t.push(s)}return t}var Ic=/export\s+(?:default\s+)?(?:async\s+)?(?:function|const|let|class|var)\s+([A-Za-z_$][\w$]*)|export\s*\{([^}]*)\}/g;function ao(e){let t=new Set;for(let n of e.matchAll(Ic))if(n[1]&&t.add(n[1]),n[2])for(let s of n[2].split(",")){let r=s.trim().split(/\s+as\s+/).pop()?.trim();r&&t.add(r)}return[...t]}var Dn=/var\(\s*(--[\w-]+)/g;function Rt(e){return e.split(" \xB7 ").every(t=>t===""||/^@layer\b/i.test(t))}function fo(e){let t=[];for(let n of e.matchAll(/(?:^|[;{}])\s*composes\s*:\s*([^;]+)/g)){let s=n[1].trim(),r=/^(.*?)\s+from\s+(['"]?)([^'"]+)\2\s*$/.exec(s);r?t.push({names:r[1].split(/\s+/).filter(Boolean),from:r[3]}):t.push({names:s.split(/\s+/).filter(Boolean),from:null})}return t}function jc(e,t,n){let s=t.startsWith(".")?po(`${uo(e)}/${t}`):t.startsWith("@/")?t.slice(2):t.startsWith("~/")||t.startsWith("/")?t.replace(/^~?\//,""):null;return s&&n(s)?s:ve(e,t.replace(/\.(?:module\.)?(?:css|scss|sass|less)$/i,""),n)}function Pc(e){let t=new Map;for(let[n,s]of e)if(Xe.test(n)){for(let r of ke(s))if(Rt(r.context))for(let o of W(r.selector)){let i=/^\.([\w-]+)$/.exec(o.trim())?.[1];if(!i)continue;let a=`${n}\0${i}`,l=t.get(a)??{decls:[],composes:[]};l.decls.push(...pe(r.ownBody));for(let c of $t(r.ownBody))c.state==="default"&&c.context===""&&l.decls.push(...c.declarations);l.composes.push(...fo(r.ownBody)),t.set(a,l)}}return t}function Lc(e,t,n,s){let r=[],o=new Set,i=(l,c,u)=>{if(u>4)return;let f=`${l}\0${c}`;if(o.has(f))return;o.add(f);let m=n.get(f);if(m){for(let h of m.composes)a(l,h,u+1);r.push(...m.decls)}},a=(l,c,u)=>{for(let f of c.names)if(c.from==="global")for(let m of n.keys()){let h=m.indexOf("\0"),w=m.slice(0,h);m.slice(h+1)!==f||/\.module\./i.test(w)||i(w,f,u)}else if(c.from){let m=jc(l,c.from,s);m&&i(m,f,u)}else i(l,f,u)};for(let l of fo(t))a(e,l,0);return r}function Oc(e,t){let n=qr(t);return n?W(e).map(s=>{let r=Math.max(s.lastIndexOf(" "),s.lastIndexOf(">"),s.lastIndexOf("+"),s.lastIndexOf("~"));return r<0?`${s}${n}`:`${s.slice(0,r+1)}${s.slice(r+1)}${n}`}).join(", "):e}var Mc=/^(?::root|html|body|\*)$/i,Nc=25e4,Dc=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,Tc=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,Bc=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]);function Fc(e){let t=new Set,n=new Set;for(let s of e.matchAll(Dc)){let r=s[1],o=Bc.has(r.toLowerCase())&&r===r.toLowerCase()?t:n;for(let i of s[2].matchAll(Tc))o.add(i[1]??i[2])}return{parts:new Set([...t].filter(s=>!n.has(s))),controls:n}}function Uc(e,t){let n=new Map;for(let s of t)if(Xe.test(s)){for(let r of ke(e.get(s)))if(Rt(r.context)&&W(r.selector).some(o=>Mc.test(o)))for(let o of pe(r.ownBody))o.property.startsWith("--")&&!n.has(o.property)&&n.set(o.property,o.value)}return n}function Vc(e,t){let n=new Set,s=[],r=a=>{for(let l of a.matchAll(Dn))n.has(l[1])||(n.add(l[1]),s.push(l[1]))};for(let a of t)r(a);let o=[];for(let a=s.shift();a;a=s.shift()){let l=e.get(a);l===void 0||!se(a,l)||(o.push(`${a}:${l}`),r(l))}return`${o.length?`:root{${o.join(";")}}
57
60
  `:""}${t.join(`
58
- `)}`.slice(0,Mc)}function go(e,t){let n=[...e.keys()].sort(),s=b=>e.has(b),r=new Map,o=(b,S,_,L)=>{let M=`${S}:${b}`,F=r.get(M);if(F){F.note.includes(_)||(F.note+=`; ${_}`);return}r.set(M,{path:b,role:S,note:_,matches:L.count,lines:L.lines})},i=new Set,a=new Set;for(let b of n){if(!we.test(b)||Z.test(b))continue;let S=e.get(b),_=ao(S).filter(O=>t.identifier.test(O)),L=b.split("/").pop()??"",M=new RegExp(t.classKeywords.join("|"),"i").test(L);if(_.length===0&&!M)continue;for(let O of _)i.add(O);a.add(b);let F=_.length?new RegExp(`\\b(?:${_.map(de).join("|")})\\b`,"g"):t.prose;o(b,"implements",_.length?`exports ${_.join(", ")}`:"named for the concept",ge(S,F))}let l=new Set,c=[],u=[],f=new Map,m=b=>io(b,t.classKeywords)||/\.module\.[a-z]+$/i.test(b)&&f.has(b),h=null,w=()=>h??=jc(e),C=b=>{let S=m(b),_=[],L=0;for(let O of ke(e.get(b))){let U=W(O.selector).filter(D=>Ze(D,t,S));if(U.length===0)continue;L+=1;for(let D of O.ownBody.matchAll(Dn))l.add(D[1]);let z=$t(O.ownBody),ae=[...Pc(b,O.ownBody,w(),s),...pe(O.ownBody),...z.filter(D=>D.state==="default"&&D.context==="").flatMap(D=>D.declarations)];for(let D of ae)for(let J of D.value.matchAll(Dn))l.add(J[1]);_.push({block:O,parts:U,declarations:ae,previewContext:Rt(O.context)?"":null,listed:!0});for(let D of z){if(D.state==="default"&&D.context==="")continue;let J=Lc(U.join(", "),D.state),Te=W(J).filter(ci=>Ze(ci,t,S));if(Te.length===0)continue;let li=[O.context,D.context].filter(Boolean).join(" \xB7 ");_.push({block:{...O,selector:J,context:li},parts:Te,declarations:D.declarations,previewContext:Rt(O.context)?D.context:null,listed:!1})}}let M={parts:new Set,controls:new Set};for(let O of f.get(b)??[]){let U=Bc(e.get(O)??"");for(let z of U.parts)M.parts.add(z);for(let z of U.controls)M.controls.add(z)}c.push(...Ur(b,_.map(({block:O,parts:U,declarations:z})=>({selector:U.join(", "),declarations:z,line:O.line,context:O.context})),t,S,M));let F=/\.module\.[a-z]+$/i.test(b)?`${ar(b)} `:"";for(let{parts:O,declarations:U,previewContext:z}of _){if(z===null)continue;let ae=O.flatMap(J=>{let Te=Ze(J,t,S);return Te?[`${F}${Ke(Te.compounds)}`]:[]}),D=U.filter(J=>se(J.property,J.value));if(!(ae.length===0||D.length===0))for(let J of ae)u.push(...Pn(J,D,z))}return{count:L,lines:_.filter(O=>O.listed).slice(0,co).map(({block:O})=>({line:O.line,text:O.selector.replace(/\s+/g," ").slice(0,Nn)}))}},$=new Map;for(let b of a)for(let S of Mn(e.get(b))){let _=ve(b,S,s);if(_&&Xe.test(_)){let L=$.get(_)??[];L.push(b.split("/").pop()??b),$.set(_,L),io(b,t.classKeywords)&&f.set(_,[...f.get(_)??[],b])}}for(let b of n){if(!Xe.test(b))continue;let S=C(b),_=$.get(b);if(S.count===0)continue;let L=[];_&&L.push(`imported by ${_.join(", ")}`),S.count>0&&L.push(`${S.count} matching rule${S.count===1?"":"s"}`),o(b,"styles",L.join("; "),S)}let g=new Set;for(let b of c)for(let S of b.selector.matchAll(/\.((?:\\.|[\w-])+)/g))g.add(S[1].replace(/\\(.)/g,"$1"));let p=new Set(a),d=new RegExp([...t.elements.map(b=>`<${de(b)}\\b`),...t.roles.map(b=>`role=["']${de(b)}["']`)].join("|"));for(let b of n)!we.test(b)||Z.test(b)||d.test(e.get(b)??"")&&p.add(b);for(let b of a)for(let S of Mn(e.get(b))){let _=ve(b,S,s);!_||!we.test(_)||Z.test(_)||eo(_,t.classKeywords)&&p.add(_)}let y=0,k=[],x=[];for(let b of p){let S=Qr(b,e.get(b)??"",t,g,y);y=S.nextId,k.push(...S.recipes),c.push(...S.variants),x.push(...S.inline),u.push(...S.previewRules)}let v=is(x);c.push(...v.variants);let E=Er([...a].map(b=>({path:b,source:e.get(b)??"",names:ao(e.get(b)??"").filter(S=>t.identifier.test(S))})),k,(b,S)=>ve(b,S,s)),j=[];if(l.size>0){let b=new RegExp(`(?:^|[\\s{;])(${[...l].map(de).join("|")})\\s*:`),S=new Map;for(let _ of n){if(!Xe.test(_)&&!oo.test(_))continue;let L=e.get(_),M=ge(L,b);if(M.count!==0){for(let F of L.matchAll(new RegExp(b.source,"gm"))){let O=S.get(F[1])??[];O.includes(_)||O.push(_),S.set(F[1],O)}o(_,"tokens",`defines ${M.count} token${M.count===1?"":"s"} read by ${t.label.toLowerCase()} styles`,M)}}for(let _ of[...l].sort())j.push({name:_,definedIn:S.get(_)??[]})}for(let b of n){if(!oo.test(b))continue;let S=ge(e.get(b),t.prose);S.count>0&&o(b,"tokens","token file mentions the concept",S)}let R=[...i],A=new RegExp([...R.length?[`<(?:${R.map(de).join("|")})\\b`]:[],...t.elements.map(b=>`<${de(b)}\\b`),...t.roles.map(b=>`role=["']${de(b)}["']`)].join("|"));for(let b of n){if(!we.test(b)||a.has(b))continue;let S=e.get(b),_=Z.test(b),L=ge(S,A),M=Mn(S).some(O=>{let U=ve(b,O,s);return U!=null&&a.has(U)});if(L.count===0&&!M)continue;let F=L.count>0?`${L.count} render${L.count===1?"":"s"}`:"imports a button component";o(b,_?"tests":"uses",F,L.count?L:ge(S,t.prose))}for(let b of n){if(!(ro.test(b)||St.test(b)))continue;let _=e.get(b),L=ge(_,t.prose);L.count!==0&&o(b,Z.test(b)?"tests":"describes",St.test(b)?"repo rules / instructions":"documentation",L)}for(let b of n){if(!Z.test(b)||r.has(`tests:${b}`)||!we.test(b))continue;let S=ge(e.get(b),t.prose);S.count>0&&o(b,"tests","mentions the concept",S)}let P=[...r.values()].sort((b,S)=>S.matches-b.matches||b.path.localeCompare(S.path)),N={implements:0,styles:0,tokens:0,uses:0,describes:0,tests:0};for(let b of P)N[b.role]++;let V=Vr(c);On(e,n.filter(b=>so.test(b)&&!Z.test(b)),V,new Set(t.elements),!0,E,(b,S)=>ve(b,S,s)),On(e,n.filter(b=>so.test(b)&&!Z.test(b)),V.flatMap(b=>b.modifiers??[]),new Set(t.elements));for(let[b,S]of v.sites)b.usage=no(e,S,!("alike"in b));let X=Fc(e,n),tt=[];if(i.size>0){let b=new RegExp(t.elements.map(S=>`<${de(S)}\\b`).join("|"),"g");for(let S of n){if(!we.test(S)||Z.test(S)||a.has(S))continue;let _=e.get(S),L=(_.match(b)??[]).length;if(L===0)continue;let M=ge(_,new RegExp(b.source));tt.push({path:S,line:M.lines[0]?.line??1,count:L})}}let ts=[],ns=new Set;for(let b of n){if(!we.test(b)||Z.test(b))continue;let S=e.get(b),_=kt(b,S,E,(L,M)=>ve(L,M,s));for(let L of _)for(let M of L.unknown){let F=[...M.known].sort();if(M.cls!==void 0){if(g.has(M.cls))continue;let z=M.cls.slice(0,M.cls.length-M.value.length),ae=[...g].filter(D=>D.startsWith(z)&&D.length>z.length).map(D=>D.slice(z.length));if(ae.length===0)continue;F=[...new Set([...M.known,...ae])].sort()}if(F.length===0)continue;let O=Rc(S,L.offset),U=`${b}\0${L.component}\0${M.prop}\0${M.value}`;ns.has(U)||(ns.add(U),ts.push({path:b,line:O,component:L.component,prop:M.prop,value:M.value,known:F}))}}let ii=n.filter(b=>(ro.test(b)||St.test(b))&&!Z.test(b)).map(b=>({path:b,kind:Cc(b)}));V.sort((b,S)=>Number(S.base)-Number(b.base)||b.path.localeCompare(S.path)||b.line-S.line);let ss=Mr(e,ii,t,V),ai=Lr([...f.entries()].map(([b,S])=>({sheet:b,sources:S.map(_=>e.get(_)??""),rules:ke(e.get(b)??"").map(_=>({selector:_.selector,declarations:pe(_.ownBody)}))})));return{components:R.sort(),tokens:j,findings:P,variants:V,audit:mr({variants:V,tokens:j,tokenValues:X,hasComponent:i.size>0,nativeUses:tt,unknownProps:ts,guidance:ss,noun:t.label.toLowerCase(),element:t.elements[0]??t.id}),guidance:ss,content:ai,previewCss:Uc(X,u),counts:N}}import{execFileSync as zc}from"node:child_process";import{readdirSync as Wc,readFileSync as Gc,statSync as Hc}from"node:fs";import At from"node:path";function $e(e,t){try{return zc("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],maxBuffer:64*1024*1024})}catch{return null}}function Tn(e,t=""){let s=$e(e,["rev-parse","--show-toplevel"])?.trim()||e;return{repoDir:s,root:sn(t),stateDir:At.join(s,".gruum")}}function _t(e){let t=At.join(e.repoDir,e.root),n=new Map,s=new TextDecoder("utf-8",{fatal:!1}),r=0,o=0,i=!1,a=(l,c)=>{if(i)return;let u;try{u=Wc(l).sort()}catch{return}for(let f of u){let m=c?`${c}/${f}`:f,h=At.join(l,f),w;try{w=Hc(h)}catch{continue}if(w.isDirectory()){tn(m)&&a(h,m);continue}if(!w.isFile())continue;if(!nn(m,w.size)){o++;continue}let C=Gc(h);if(Ks(C)){o++;continue}if(r+C.length>4e7){i=!0;return}r+=C.length,n.set(m,s.decode(C))}};return a(t,""),{files:n,truncated:i,skipped:o}}function mo(e,t){let n=$e(e.repoDir,["diff","--cached","--name-status","-z"]);if(n===null)return t;let s=qs(n).map(({path:r,deleted:o})=>({path:r,content:o?null:$e(e.repoDir,["show",`:${r}`])}));return{...t,files:Zs(t.files,s,e.root)}}function ho(e){let t=$e(e.repoDir,["remote","get-url","origin"])?.trim()??"",n=ct(t)??At.basename(e.repoDir),s=$e(e.repoDir,["rev-parse","HEAD"])?.trim()||"working-tree";return{fullName:n,ref:s,rootPath:e.root,htmlUrl:n.includes("/")?`https://github.com/${n}`:""}}function bo(e){let t=$e(e.repoDir,["config","--get","core.hooksPath"])?.trim();return t||$e(e.repoDir,["rev-parse","--git-path","hooks"])?.trim()||null}function It(e,t={}){let n=lo[t.concept??"button"],s=_t(e);return t.staged&&(s=mo(e,s)),{concept:n.id,label:n.label,...go(s.files,n),repo:ho(e),index:{files:s.files.size,truncated:s.truncated,skipped:s.skipped}}}function Ce(e,t,n={}){let s=It(e,{concept:t.concept,...n});return{result:s,baseline:t,items:gs(s,t)}}import{mkdirSync as Kc,readFileSync as Jc,writeFileSync as yo}from"node:fs";import oe from"node:path";function Se(e){try{return Jc(e,"utf8")}catch{return null}}function Et(e){let t=Se(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function me(e,t){Kc(oe.dirname(e),{recursive:!0}),yo(e,t)}function ie(e,t){me(e,`${JSON.stringify(t,null,2)}
59
- `),Zc(e)}function Zc(e){let t=e.split(oe.sep),n=t.lastIndexOf(".gruum");if(n<=0)return;let s=oe.join(t.slice(0,n).join(oe.sep),".gitignore"),r=ot(Se(s));r.changed&&(yo(s,r.text),process.stderr.write(`Added .gruum/ to .gitignore.
60
- `))}var Re=e=>oe.join(e.stateDir,"baseline.json"),xo=e=>oe.join(e.stateDir,"drift.json"),Bn=e=>oe.join(e.stateDir,"exceptions.json"),qc=e=>oe.join(e.stateDir,"config.json");function he(e,t){return Ue(Et(t?oe.resolve(t):Re(e)))}function jt(e){return bs(Et(xo(e)),new Date().toISOString())}function Fn(e,t){ie(xo(e),t)}function Xc(e){if(!e||typeof e!="object")return{};let t={};for(let[n,s]of Object.entries(e))(s==="pending"||s==="accepted"||s==="rejected")&&(t[n]=s);return t}function Pt(e){return Xc(Et(Bn(e)))}function Lt(e){let t=Et(qc(e)),{block:n,hooks:s}=ys(t);return{...typeof t?.root=="string"?{root:t.root}:{},block:n,hooks:s}}import{chmodSync as eu,mkdirSync as tu,readFileSync as Fo,writeFileSync as nu}from"node:fs";import{hostname as su,homedir as ru}from"node:os";import Wn from"node:path";import{createInterface as Uo}from"node:readline/promises";function ko(e){return`/v2/projects/${encodeURIComponent(e)}`}function Un(e,t,n,s){return!(!e||e.repo!==t||!e.workspaceId||!e.host&&s||n&&!n.includes(e.id))}function wo(e,t){if(e.length===0)return null;if(e.length===1)return e[0];let n=t.replace(/^\/+|\/+$/g,""),s=e.filter(r=>r.rootPath===n);if(s.length===1)return s[0];if(!n){let r=e.filter(o=>o.rootPath==="");if(r.length===1)return r[0]}return null}function vo(e){if(typeof e!="string")return{error:"Send a URL."};let t=e.trim();if(!t)return{error:"Enter a live URL."};if(!/^https:\/\//i.test(t))return{error:"URL must start with https://"};let n;try{n=new URL(t)}catch{return{error:"That doesn\u2019t look like a URL."}}if(n.protocol!=="https:")return{error:"URL must start with https://"};if(n.username||n.password)return{error:"That doesn\u2019t look like a URL."};let s=n.hostname.toLowerCase().replace(/^www\./,"");return!s||!s.includes(".")?{error:"That doesn\u2019t look like a URL."}:s==="localhost"||s==="127.0.0.1"?{error:"Public hosts only for Live URL (localhost needs the extension later)."}:{value:s}}var $o="http://localhost:3000";function Co(e){return((e.split("/").pop()||e).replace(/\.git$/i,"").split(/[-_]/)[0]??"").toLowerCase().replace(/[^a-z]/g,"")}function So(e,t){if(!/^[a-z]+$/.test(t))return null;let n=new RegExp(`https?://(?:[a-z0-9-]+\\.)*${t}\\.\\w{2,3}(?![\\w.])`,"gi"),s=null;for(let r of e.matchAll(n)){let o=r[0].toLowerCase();if(o.startsWith("https://"))return o;s??=o}return s}function Ro(e){let t=e?`For example: ${$o} or ${e}.`:`For example: ${$o}.`,n=e?`URL (${e}): `:"URL: ";return`
61
+ `)}`.slice(0,Nc)}function go(e,t){let n=[...e.keys()].sort(),s=b=>e.has(b),r=new Map,o=(b,S,_,L)=>{let M=`${S}:${b}`,F=r.get(M);if(F){F.note.includes(_)||(F.note+=`; ${_}`);return}r.set(M,{path:b,role:S,note:_,matches:L.count,lines:L.lines})},i=new Set,a=new Set;for(let b of n){if(!we.test(b)||Z.test(b))continue;let S=e.get(b),_=ao(S).filter(O=>t.identifier.test(O)),L=b.split("/").pop()??"",M=new RegExp(t.classKeywords.join("|"),"i").test(L);if(_.length===0&&!M)continue;for(let O of _)i.add(O);a.add(b);let F=_.length?new RegExp(`\\b(?:${_.map(de).join("|")})\\b`,"g"):t.prose;o(b,"implements",_.length?`exports ${_.join(", ")}`:"named for the concept",ge(S,F))}let l=new Set,c=[],u=[],f=new Map,m=b=>io(b,t.classKeywords)||/\.module\.[a-z]+$/i.test(b)&&f.has(b),h=null,w=()=>h??=Pc(e),C=b=>{let S=m(b),_=[],L=0;for(let O of ke(e.get(b))){let U=W(O.selector).filter(D=>Ze(D,t,S));if(U.length===0)continue;L+=1;for(let D of O.ownBody.matchAll(Dn))l.add(D[1]);let z=$t(O.ownBody),ae=[...Lc(b,O.ownBody,w(),s),...pe(O.ownBody),...z.filter(D=>D.state==="default"&&D.context==="").flatMap(D=>D.declarations)];for(let D of ae)for(let J of D.value.matchAll(Dn))l.add(J[1]);_.push({block:O,parts:U,declarations:ae,previewContext:Rt(O.context)?"":null,listed:!0});for(let D of z){if(D.state==="default"&&D.context==="")continue;let J=Oc(U.join(", "),D.state),Te=W(J).filter(ci=>Ze(ci,t,S));if(Te.length===0)continue;let li=[O.context,D.context].filter(Boolean).join(" \xB7 ");_.push({block:{...O,selector:J,context:li},parts:Te,declarations:D.declarations,previewContext:Rt(O.context)?D.context:null,listed:!1})}}let M={parts:new Set,controls:new Set};for(let O of f.get(b)??[]){let U=Fc(e.get(O)??"");for(let z of U.parts)M.parts.add(z);for(let z of U.controls)M.controls.add(z)}c.push(...Ur(b,_.map(({block:O,parts:U,declarations:z})=>({selector:U.join(", "),declarations:z,line:O.line,context:O.context})),t,S,M));let F=/\.module\.[a-z]+$/i.test(b)?`${ar(b)} `:"";for(let{parts:O,declarations:U,previewContext:z}of _){if(z===null)continue;let ae=O.flatMap(J=>{let Te=Ze(J,t,S);return Te?[`${F}${Ke(Te.compounds)}`]:[]}),D=U.filter(J=>se(J.property,J.value));if(!(ae.length===0||D.length===0))for(let J of ae)u.push(...Pn(J,D,z))}return{count:L,lines:_.filter(O=>O.listed).slice(0,co).map(({block:O})=>({line:O.line,text:O.selector.replace(/\s+/g," ").slice(0,Nn)}))}},$=new Map;for(let b of a)for(let S of Mn(e.get(b))){let _=ve(b,S,s);if(_&&Xe.test(_)){let L=$.get(_)??[];L.push(b.split("/").pop()??b),$.set(_,L),io(b,t.classKeywords)&&f.set(_,[...f.get(_)??[],b])}}for(let b of n){if(!Xe.test(b))continue;let S=C(b),_=$.get(b);if(S.count===0)continue;let L=[];_&&L.push(`imported by ${_.join(", ")}`),S.count>0&&L.push(`${S.count} matching rule${S.count===1?"":"s"}`),o(b,"styles",L.join("; "),S)}let g=new Set;for(let b of c)for(let S of b.selector.matchAll(/\.((?:\\.|[\w-])+)/g))g.add(S[1].replace(/\\(.)/g,"$1"));let p=new Set(a),d=new RegExp([...t.elements.map(b=>`<${de(b)}\\b`),...t.roles.map(b=>`role=["']${de(b)}["']`)].join("|"));for(let b of n)!we.test(b)||Z.test(b)||d.test(e.get(b)??"")&&p.add(b);for(let b of a)for(let S of Mn(e.get(b))){let _=ve(b,S,s);!_||!we.test(_)||Z.test(_)||eo(_,t.classKeywords)&&p.add(_)}let y=0,k=[],x=[];for(let b of p){let S=Qr(b,e.get(b)??"",t,g,y);y=S.nextId,k.push(...S.recipes),c.push(...S.variants),x.push(...S.inline),u.push(...S.previewRules)}let v=is(x);c.push(...v.variants);let I=Ir([...a].map(b=>({path:b,source:e.get(b)??"",names:ao(e.get(b)??"").filter(S=>t.identifier.test(S))})),k,(b,S)=>ve(b,S,s)),j=[];if(l.size>0){let b=new RegExp(`(?:^|[\\s{;])(${[...l].map(de).join("|")})\\s*:`),S=new Map;for(let _ of n){if(!Xe.test(_)&&!oo.test(_))continue;let L=e.get(_),M=ge(L,b);if(M.count!==0){for(let F of L.matchAll(new RegExp(b.source,"gm"))){let O=S.get(F[1])??[];O.includes(_)||O.push(_),S.set(F[1],O)}o(_,"tokens",`defines ${M.count} token${M.count===1?"":"s"} read by ${t.label.toLowerCase()} styles`,M)}}for(let _ of[...l].sort())j.push({name:_,definedIn:S.get(_)??[]})}for(let b of n){if(!oo.test(b))continue;let S=ge(e.get(b),t.prose);S.count>0&&o(b,"tokens","token file mentions the concept",S)}let R=[...i],A=new RegExp([...R.length?[`<(?:${R.map(de).join("|")})\\b`]:[],...t.elements.map(b=>`<${de(b)}\\b`),...t.roles.map(b=>`role=["']${de(b)}["']`)].join("|"));for(let b of n){if(!we.test(b)||a.has(b))continue;let S=e.get(b),_=Z.test(b),L=ge(S,A),M=Mn(S).some(O=>{let U=ve(b,O,s);return U!=null&&a.has(U)});if(L.count===0&&!M)continue;let F=L.count>0?`${L.count} render${L.count===1?"":"s"}`:"imports a button component";o(b,_?"tests":"uses",F,L.count?L:ge(S,t.prose))}for(let b of n){if(!(ro.test(b)||St.test(b)))continue;let _=e.get(b),L=ge(_,t.prose);L.count!==0&&o(b,Z.test(b)?"tests":"describes",St.test(b)?"repo rules / instructions":"documentation",L)}for(let b of n){if(!Z.test(b)||r.has(`tests:${b}`)||!we.test(b))continue;let S=ge(e.get(b),t.prose);S.count>0&&o(b,"tests","mentions the concept",S)}let P=[...r.values()].sort((b,S)=>S.matches-b.matches||b.path.localeCompare(S.path)),N={implements:0,styles:0,tokens:0,uses:0,describes:0,tests:0};for(let b of P)N[b.role]++;let V=Vr(c);On(e,n.filter(b=>so.test(b)&&!Z.test(b)),V,new Set(t.elements),!0,I,(b,S)=>ve(b,S,s)),On(e,n.filter(b=>so.test(b)&&!Z.test(b)),V.flatMap(b=>b.modifiers??[]),new Set(t.elements));for(let[b,S]of v.sites)b.usage=no(e,S,!("alike"in b));let X=Uc(e,n),tt=[];if(i.size>0){let b=new RegExp(t.elements.map(S=>`<${de(S)}\\b`).join("|"),"g");for(let S of n){if(!we.test(S)||Z.test(S)||a.has(S))continue;let _=e.get(S),L=(_.match(b)??[]).length;if(L===0)continue;let M=ge(_,new RegExp(b.source));tt.push({path:S,line:M.lines[0]?.line??1,count:L})}}let ts=[],ns=new Set;for(let b of n){if(!we.test(b)||Z.test(b))continue;let S=e.get(b),_=kt(b,S,I,(L,M)=>ve(L,M,s));for(let L of _)for(let M of L.unknown){let F=[...M.known].sort();if(M.cls!==void 0){if(g.has(M.cls))continue;let z=M.cls.slice(0,M.cls.length-M.value.length),ae=[...g].filter(D=>D.startsWith(z)&&D.length>z.length).map(D=>D.slice(z.length));if(ae.length===0)continue;F=[...new Set([...M.known,...ae])].sort()}if(F.length===0)continue;let O=Ac(S,L.offset),U=`${b}\0${L.component}\0${M.prop}\0${M.value}`;ns.has(U)||(ns.add(U),ts.push({path:b,line:O,component:L.component,prop:M.prop,value:M.value,known:F}))}}let ii=n.filter(b=>(ro.test(b)||St.test(b))&&!Z.test(b)).map(b=>({path:b,kind:Sc(b)}));V.sort((b,S)=>Number(S.base)-Number(b.base)||b.path.localeCompare(S.path)||b.line-S.line);let ss=Mr(e,ii,t,V),ai=Lr([...f.entries()].map(([b,S])=>({sheet:b,sources:S.map(_=>e.get(_)??""),rules:ke(e.get(b)??"").map(_=>({selector:_.selector,declarations:pe(_.ownBody)}))})));return{components:R.sort(),tokens:j,findings:P,variants:V,audit:mr({variants:V,tokens:j,tokenValues:X,hasComponent:i.size>0,nativeUses:tt,unknownProps:ts,guidance:ss,noun:t.label.toLowerCase(),element:t.elements[0]??t.id}),guidance:ss,content:ai,previewCss:Vc(X,u),counts:N}}import{execFileSync as Wc}from"node:child_process";import{readdirSync as Gc,readFileSync as Hc,statSync as Kc}from"node:fs";import At from"node:path";function $e(e,t){try{return Wc("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],maxBuffer:64*1024*1024})}catch{return null}}function Tn(e,t=""){let s=$e(e,["rev-parse","--show-toplevel"])?.trim()||e;return{repoDir:s,root:sn(t),stateDir:At.join(s,".gruum")}}function _t(e){let t=At.join(e.repoDir,e.root),n=new Map,s=new TextDecoder("utf-8",{fatal:!1}),r=0,o=0,i=!1,a=(l,c)=>{if(i)return;let u;try{u=Gc(l).sort()}catch{return}for(let f of u){let m=c?`${c}/${f}`:f,h=At.join(l,f),w;try{w=Kc(h)}catch{continue}if(w.isDirectory()){tn(m)&&a(h,m);continue}if(!w.isFile())continue;if(!nn(m,w.size)){o++;continue}let C=Hc(h);if(Ks(C)){o++;continue}if(r+C.length>4e7){i=!0;return}r+=C.length,n.set(m,s.decode(C))}};return a(t,""),{files:n,truncated:i,skipped:o}}function mo(e,t){let n=$e(e.repoDir,["diff","--cached","--name-status","-z"]);if(n===null)return t;let s=qs(n).map(({path:r,deleted:o})=>({path:r,content:o?null:$e(e.repoDir,["show",`:${r}`])}));return{...t,files:Zs(t.files,s,e.root)}}function ho(e){let t=$e(e.repoDir,["remote","get-url","origin"])?.trim()??"",n=ct(t)??At.basename(e.repoDir),s=$e(e.repoDir,["rev-parse","HEAD"])?.trim()||"working-tree";return{fullName:n,ref:s,rootPath:e.root,htmlUrl:n.includes("/")?`https://github.com/${n}`:""}}function bo(e){let t=$e(e.repoDir,["config","--get","core.hooksPath"])?.trim();return t||$e(e.repoDir,["rev-parse","--git-path","hooks"])?.trim()||null}function Et(e,t={}){let n=lo[t.concept??"button"],s=_t(e);return t.staged&&(s=mo(e,s)),{concept:n.id,label:n.label,...go(s.files,n),repo:ho(e),index:{files:s.files.size,truncated:s.truncated,skipped:s.skipped}}}function Ce(e,t,n={}){let s=Et(e,{concept:t.concept,...n});return{result:s,baseline:t,items:gs(s,t)}}import{mkdirSync as Jc,readFileSync as Zc,writeFileSync as yo}from"node:fs";import oe from"node:path";function Se(e){try{return Zc(e,"utf8")}catch{return null}}function It(e){let t=Se(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function me(e,t){Jc(oe.dirname(e),{recursive:!0}),yo(e,t)}function ie(e,t){me(e,`${JSON.stringify(t,null,2)}
62
+ `),qc(e)}function qc(e){let t=e.split(oe.sep),n=t.lastIndexOf(".gruum");if(n<=0)return;let s=oe.join(t.slice(0,n).join(oe.sep),".gitignore"),r=ot(Se(s));r.changed&&(yo(s,r.text),process.stderr.write(`Added .gruum/ to .gitignore.
63
+ `))}var Re=e=>oe.join(e.stateDir,"baseline.json"),xo=e=>oe.join(e.stateDir,"drift.json"),Bn=e=>oe.join(e.stateDir,"exceptions.json"),Xc=e=>oe.join(e.stateDir,"config.json");function he(e,t){return Ue(It(t?oe.resolve(t):Re(e)))}function jt(e){return bs(It(xo(e)),new Date().toISOString())}function Fn(e,t){ie(xo(e),t)}function Yc(e){if(!e||typeof e!="object")return{};let t={};for(let[n,s]of Object.entries(e))(s==="pending"||s==="accepted"||s==="rejected")&&(t[n]=s);return t}function Pt(e){return Yc(It(Bn(e)))}function Lt(e){let t=It(Xc(e)),{block:n,hooks:s}=ys(t);return{...typeof t?.root=="string"?{root:t.root}:{},block:n,hooks:s}}import{chmodSync as tu,mkdirSync as nu,readFileSync as Fo,writeFileSync as su}from"node:fs";import{hostname as ru,homedir as ou}from"node:os";import Wn from"node:path";import{createInterface as Uo}from"node:readline/promises";function ko(e){return`/v2/projects/${encodeURIComponent(e)}`}function Un(e,t,n,s){return!(!e||e.repo!==t||!e.workspaceId||!e.host&&s||n&&!n.includes(e.id))}function wo(e,t){if(e.length===0)return null;if(e.length===1)return e[0];let n=t.replace(/^\/+|\/+$/g,""),s=e.filter(r=>r.rootPath===n);if(s.length===1)return s[0];if(!n){let r=e.filter(o=>o.rootPath==="");if(r.length===1)return r[0]}return null}function vo(e){if(typeof e!="string")return{error:"Send a URL."};let t=e.trim();if(!t)return{error:"Enter a live URL."};if(!/^https:\/\//i.test(t))return{error:"URL must start with https://"};let n;try{n=new URL(t)}catch{return{error:"That doesn\u2019t look like a URL."}}if(n.protocol!=="https:")return{error:"URL must start with https://"};if(n.username||n.password)return{error:"That doesn\u2019t look like a URL."};let s=n.hostname.toLowerCase().replace(/^www\./,"");return!s||!s.includes(".")?{error:"That doesn\u2019t look like a URL."}:s==="localhost"||s==="127.0.0.1"?{error:"Public hosts only for Live URL (localhost needs the extension later)."}:{value:s}}var $o="http://localhost:3000";function Co(e){return((e.split("/").pop()||e).replace(/\.git$/i,"").split(/[-_]/)[0]??"").toLowerCase().replace(/[^a-z]/g,"")}function So(e,t){if(!/^[a-z]+$/.test(t))return null;let n=new RegExp(`https?://(?:[a-z0-9-]+\\.)*${t}\\.\\w{2,3}(?![\\w.])`,"gi"),s=null;for(let r of e.matchAll(n)){let o=r[0].toLowerCase();if(o.startsWith("https://"))return o;s??=o}return s}function Ro(e){let t=e?`For example: ${$o} or ${e}.`:`For example: ${$o}.`,n=e?`URL (${e}): `:"URL: ";return`
61
64
  Live URL for this repo's website.
62
65
  ${t}
63
66
  You may not use wildcards.
64
67
 
65
- ${n}`}function Yc(e){let t=e.toLowerCase().replace(/:\d+$/,"");return t==="localhost"||t==="127.0.0.1"}function Ao(e){if(typeof e!="string")return{error:"Enter a live URL."};let t=e.trim();if(!t)return{error:"Enter a live URL."};if(t.includes("*"))return{error:"You may not use wildcards."};let n=Qc(t);if(n)return n;let s=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`;return vo(s)}function Qc(e){let t=/^https?:\/\//i.test(e)?e:`http://${e}`,n;try{n=new URL(t)}catch{return null}let s=n.hostname.toLowerCase();if(s!=="localhost"&&s!=="127.0.0.1")return null;if(n.username||n.password)return{error:"That doesn\u2019t look like a URL."};let r=n.port;return{value:r&&r!=="80"&&r!=="443"?`${s}:${r}`:s}}function _o(e){return Yc(e)?`http://${e}`:`https://${e}`}function Io(e,t){let n=e.filter(r=>r.workspaces.length>0);if(n.length===0)return{step:"none"};if(t){let r=n.find(o=>o.id===t);if(!r)return{step:"none"};if(r.workspaces.length===1){let o=r.workspaces[0];return{step:"use",workspaceId:o.id,orgName:r.name,workspaceName:o.name}}return{step:"workspace",orgId:r.id,orgName:r.name,workspaces:r.workspaces}}if(n.reduce((r,o)=>r+o.workspaces.length,0)===1){let r=n[0],o=r.workspaces[0];return{step:"use",workspaceId:o.id,orgName:r.name,workspaceName:o.name}}if(n.length===1){let r=n[0];return{step:"workspace",orgId:r.id,orgName:r.name,workspaces:r.workspaces}}return{step:"org",orgs:n.map(r=>({id:r.id,name:r.name}))}}var Eo="No project for this repo found. Creating\u2026";function jo(e,t){let n=t.workspaceId;if(n)for(let s of e){let r=s.workspaces.find(o=>o.id===n);if(r)return`${s.name} / ${r.name} / ${t.name}`}return t.name}function Po(e){let t=e.length===1?`Use ${e[0]}, or create a new one.`:"This repo is already in more than one project. Use one, or create a new one.",s=[...e,"Create a new one"].map((o,i)=>` ${i+1} ${o}`),r=e.length===1?"Which project should this checkout use? (1): ":"Which project should this checkout use? ";return`
68
+ ${n}`}function Qc(e){let t=e.toLowerCase().replace(/:\d+$/,"");return t==="localhost"||t==="127.0.0.1"}function Ao(e){if(typeof e!="string")return{error:"Enter a live URL."};let t=e.trim();if(!t)return{error:"Enter a live URL."};if(t.includes("*"))return{error:"You may not use wildcards."};let n=eu(t);if(n)return n;let s=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`;return vo(s)}function eu(e){let t=/^https?:\/\//i.test(e)?e:`http://${e}`,n;try{n=new URL(t)}catch{return null}let s=n.hostname.toLowerCase();if(s!=="localhost"&&s!=="127.0.0.1")return null;if(n.username||n.password)return{error:"That doesn\u2019t look like a URL."};let r=n.port;return{value:r&&r!=="80"&&r!=="443"?`${s}:${r}`:s}}function _o(e){return Qc(e)?`http://${e}`:`https://${e}`}function Eo(e,t){let n=e.filter(r=>r.workspaces.length>0);if(n.length===0)return{step:"none"};if(t){let r=n.find(o=>o.id===t);if(!r)return{step:"none"};if(r.workspaces.length===1){let o=r.workspaces[0];return{step:"use",workspaceId:o.id,orgName:r.name,workspaceName:o.name}}return{step:"workspace",orgId:r.id,orgName:r.name,workspaces:r.workspaces}}if(n.reduce((r,o)=>r+o.workspaces.length,0)===1){let r=n[0],o=r.workspaces[0];return{step:"use",workspaceId:o.id,orgName:r.name,workspaceName:o.name}}if(n.length===1){let r=n[0];return{step:"workspace",orgId:r.id,orgName:r.name,workspaces:r.workspaces}}return{step:"org",orgs:n.map(r=>({id:r.id,name:r.name}))}}var Io="No project for this repo found. Creating\u2026";function jo(e,t){let n=t.workspaceId;if(n)for(let s of e){let r=s.workspaces.find(o=>o.id===n);if(r)return`${s.name} / ${r.name} / ${t.name}`}return t.name}function Po(e){let t=e.length===1?`Use ${e[0]}, or create a new one.`:"This repo is already in more than one project. Use one, or create a new one.",s=[...e,"Create a new one"].map((o,i)=>` ${i+1} ${o}`),r=e.length===1?"Which project should this checkout use? (1): ":"Which project should this checkout use? ";return`
66
69
  ${t}
67
70
  ${s.join(`
68
71
  `)}
@@ -77,35 +80,35 @@ ${e}
77
80
  ${s.join(`
78
81
  `)}
79
82
 
80
- Which ${n} should this project live in? `}function Do(e,t){let n=e.trim().toLowerCase();if(!n)return null;let s=Number(n);if(Number.isInteger(s)&&s>=1&&s<=t.length)return s-1;let r=t.flatMap((o,i)=>o.name.trim().toLowerCase()===n?[i]:[]);return r.length===1?r[0]:null}function To(e){return`/workspace/${encodeURIComponent(e)}`}import{spawnSync as ou}from"node:child_process";var Ne="https://app.getgruum.com",Vo=()=>Wn.join(ru(),".config","gruum","credentials.json");function Gn(){let e=process.env.GRUUM_TOKEN?.trim();if(e)return{token:e,apiOrigin:process.env.GRUUM_API_ORIGIN?.trim()||Ne};try{let t=JSON.parse(Fo(Vo(),"utf8"));return typeof t.token!="string"||!t.token?null:{token:t.token,apiOrigin:typeof t.apiOrigin=="string"&&t.apiOrigin?t.apiOrigin:Ne}}catch{return null}}function iu(e){let t=Vo();tu(Wn.dirname(t),{recursive:!0}),nu(t,`${JSON.stringify(e,null,2)}
81
- `,{mode:384}),eu(t,384)}function Ot(e){return(e?.apiOrigin||Ne).replace(/\/$/,"")}async function K(e,t,n={}){let s=new Headers(n.headers);return e&&s.set("Authorization",`Bearer ${e.token}`),n.body&&!s.has("Content-Type")&&s.set("Content-Type","application/json"),fetch(`${Ot(e)}${t}`,{...n,headers:s})}function Hn(e,t){let n=ou("git",t,{cwd:e,encoding:"utf8"});return n.status!==0?null:n.stdout.trim()||null}function au(e){let t=Hn(e,["remote","get-url","origin"]);return t?ct(t):null}function Mt(e){let t=Hn(e,["rev-parse","--abbrev-ref","HEAD"]);return t&&t!=="HEAD"?t:""}function zo(e){return Hn(e,["rev-parse","HEAD"])}function Wo(e){return Wn.join(e.stateDir,"project.json")}function lu(e){try{let t=JSON.parse(Fo(Wo(e),"utf8"));return typeof t.id!="string"||typeof t.repo!="string"||!("host"in t)?null:{id:t.id,name:typeof t.name=="string"?t.name:t.repo,repo:t.repo,rootPath:typeof t.rootPath=="string"?t.rootPath:"",host:typeof t.host=="string"&&t.host?t.host:null,workspaceId:typeof t.workspaceId=="string"&&t.workspaceId?t.workspaceId:null,hostDeclined:t.hostDeclined===!0}}catch{return null}}function Kn(e,t){return`${e}${ko(t)}`}function Bo(e,t,n,s){let r=Kn(e,t.id),o=s?` in ${s}`:"",i=t.workspaceId?`${e}${To(t.workspaceId)}
83
+ Which ${n} should this project live in? `}function Do(e,t){let n=e.trim().toLowerCase();if(!n)return null;let s=Number(n);if(Number.isInteger(s)&&s>=1&&s<=t.length)return s-1;let r=t.flatMap((o,i)=>o.name.trim().toLowerCase()===n?[i]:[]);return r.length===1?r[0]:null}function To(e){return`/workspace/${encodeURIComponent(e)}`}import{spawnSync as iu}from"node:child_process";var Ne="https://app.getgruum.com",Vo=()=>Wn.join(ou(),".config","gruum","credentials.json");function Gn(){let e=process.env.GRUUM_TOKEN?.trim();if(e)return{token:e,apiOrigin:process.env.GRUUM_API_ORIGIN?.trim()||Ne};try{let t=JSON.parse(Fo(Vo(),"utf8"));return typeof t.token!="string"||!t.token?null:{token:t.token,apiOrigin:typeof t.apiOrigin=="string"&&t.apiOrigin?t.apiOrigin:Ne}}catch{return null}}function au(e){let t=Vo();nu(Wn.dirname(t),{recursive:!0}),su(t,`${JSON.stringify(e,null,2)}
84
+ `,{mode:384}),tu(t,384)}function Ot(e){return(e?.apiOrigin||Ne).replace(/\/$/,"")}async function K(e,t,n={}){let s=new Headers(n.headers);return e&&s.set("Authorization",`Bearer ${e.token}`),n.body&&!s.has("Content-Type")&&s.set("Content-Type","application/json"),fetch(`${Ot(e)}${t}`,{...n,headers:s})}function Hn(e,t){let n=iu("git",t,{cwd:e,encoding:"utf8"});return n.status!==0?null:n.stdout.trim()||null}function lu(e){let t=Hn(e,["remote","get-url","origin"]);return t?ct(t):null}function Mt(e){let t=Hn(e,["rev-parse","--abbrev-ref","HEAD"]);return t&&t!=="HEAD"?t:""}function zo(e){return Hn(e,["rev-parse","HEAD"])}function Wo(e){return Wn.join(e.stateDir,"project.json")}function cu(e){try{let t=JSON.parse(Fo(Wo(e),"utf8"));return typeof t.id!="string"||typeof t.repo!="string"||!("host"in t)?null:{id:t.id,name:typeof t.name=="string"?t.name:t.repo,repo:t.repo,rootPath:typeof t.rootPath=="string"?t.rootPath:"",host:typeof t.host=="string"&&t.host?t.host:null,workspaceId:typeof t.workspaceId=="string"&&t.workspaceId?t.workspaceId:null,hostDeclined:t.hostDeclined===!0}}catch{return null}}function Kn(e,t){return`${e}${ko(t)}`}function Bo(e,t,n,s){let r=Kn(e,t.id),o=s?` in ${s}`:"",i=t.workspaceId?`${e}${To(t.workspaceId)}
82
85
  `:"";process.stderr.write(n?`Created a Gruum project for ${t.repo}${o}.
83
86
  ${i}${r}
84
87
  `:`Gruum project: ${r}
85
- ${i}`)}function cu(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!="object")continue;let s=n;if(typeof s.id!="string"||typeof s.name!="string")continue;let r=Array.isArray(s.workspaces)?s.workspaces.flatMap(o=>{if(!o||typeof o!="object")return[];let i=o;return typeof i.id!="string"||typeof i.name!="string"?[]:[{id:i.id,name:i.name}]}):[];t.push({id:s.id,name:s.name,workspaces:r})}return t}async function Go(e,t,n){let s=Uo({input:process.stdin,output:process.stderr});_e(s);try{for(;;){let r=t(await s.question(e));if(r!=null)return r;process.stderr.write(n)}}finally{s.close()}}async function Ho(e,t,n){return Go(e,s=>!s.trim()&&n!=null?n:Do(s,t),`gruum: enter one of the numbers.
88
+ ${i}`)}function uu(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!="object")continue;let s=n;if(typeof s.id!="string"||typeof s.name!="string")continue;let r=Array.isArray(s.workspaces)?s.workspaces.flatMap(o=>{if(!o||typeof o!="object")return[];let i=o;return typeof i.id!="string"||typeof i.name!="string"?[]:[{id:i.id,name:i.name}]}):[];t.push({id:s.id,name:s.name,workspaces:r})}return t}async function Go(e,t,n){let s=Uo({input:process.stdin,output:process.stderr});_e(s);try{for(;;){let r=t(await s.question(e));if(r!=null)return r;process.stderr.write(n)}}finally{s.close()}}async function Ho(e,t,n){return Go(e,s=>!s.trim()&&n!=null?n:Do(s,t),`gruum: enter one of the numbers.
86
89
  `)}async function Ko(e){let t=await K(e,"/api/v2/cli/workspaces");if(t.status===401)return process.stderr.write("gruum: sign-in expired. Run `npx @gruum/cli login` again.\n"),null;if(!t.ok)return process.stderr.write(`gruum: couldn't list workspaces (${t.status}).
87
- `),null;let n=await t.json();return cu(n.orgs)}async function uu(e,t,n,s){let r=s??await Ko(e);if(!r)return null;let o=null;for(;;){let i=Io(r,o);if(i.step==="none")return{workspaceId:"",label:""};if(i.step==="use")return{workspaceId:i.workspaceId,label:`${i.orgName} / ${i.workspaceName}`};if(i.step==="workspace"){let h=Lo(i.workspaces,Vn(n));if(h)return{workspaceId:h.id,label:`${i.orgName} / ${h.name}`}}if(!t)return process.stderr.write("gruum: this account has more than one workspace. Run `npx @gruum/cli check` in a terminal and choose where the project should live.\n"),null;if(i.step==="org"){let h=await Ho(No("This account has more than one organization.",i.orgs,"organization"),i.orgs);o=i.orgs[h].id;continue}let a=Vn(n),l=await Go(Oo(i.orgName,i.workspaces,a),h=>Mo(h,i.workspaces),`gruum: enter C, or one of the numbers.
90
+ `),null;let n=await t.json();return uu(n.orgs)}async function pu(e,t,n,s){let r=s??await Ko(e);if(!r)return null;let o=null;for(;;){let i=Eo(r,o);if(i.step==="none")return{workspaceId:"",label:""};if(i.step==="use")return{workspaceId:i.workspaceId,label:`${i.orgName} / ${i.workspaceName}`};if(i.step==="workspace"){let h=Lo(i.workspaces,Vn(n));if(h)return{workspaceId:h.id,label:`${i.orgName} / ${h.name}`}}if(!t)return process.stderr.write("gruum: this account has more than one workspace. Run `npx @gruum/cli check` in a terminal and choose where the project should live.\n"),null;if(i.step==="org"){let h=await Ho(No("This account has more than one organization.",i.orgs,"organization"),i.orgs);o=i.orgs[h].id;continue}let a=Vn(n),l=await Go(Oo(i.orgName,i.workspaces,a),h=>Mo(h,i.workspaces),`gruum: enter C, or one of the numbers.
88
91
  `);if(l!=="create"){let h=i.workspaces[l];return{workspaceId:h.id,label:`${i.orgName} / ${h.name}`}}let c=await K(e,"/api/v2/cli/workspaces",{method:"POST",body:JSON.stringify({orgId:i.orgId,name:a})}),u=await c.json().catch(()=>({})),f=u.workspace?.id,m=typeof u.workspace?.name=="string"?u.workspace.name:a;if(!c.ok||typeof f!="string"){process.stderr.write(`gruum: ${u.error||`couldn't create that workspace (${c.status})`}
89
- `);continue}return{workspaceId:f,label:`${i.orgName} / ${m}`}}}function pu(e,t){let n=Co(t),s=null;for(let r of _t(e).files.values()){let o=So(r,n);if(o){if(o.startsWith("https://"))return o;s??=o}}return s}async function fu(e,t){let n=pu(e,t),s=Ro(n),r=Uo({input:process.stdin,output:process.stderr});_e(r);try{for(;;){let i=(await r.question(s)).trim()||n||"",a=Ao(i);if("error"in a){process.stderr.write(`gruum: ${a.error}
90
- `);continue}return i}}finally{r.close()}}async function Jo(){let e=`Cursor on ${su()}`,t=await K(null,"/api/cli/pair/start",{method:"POST",body:JSON.stringify({label:e})});if(!t.ok)return process.stderr.write(`gruum: couldn't start sign-in (${t.status}). Is Gruum running at ${Ne}?
92
+ `);continue}return{workspaceId:f,label:`${i.orgName} / ${m}`}}}function fu(e,t){let n=Co(t),s=null;for(let r of _t(e).files.values()){let o=So(r,n);if(o){if(o.startsWith("https://"))return o;s??=o}}return s}async function du(e,t){let n=fu(e,t),s=Ro(n),r=Uo({input:process.stdin,output:process.stderr});_e(r);try{for(;;){let i=(await r.question(s)).trim()||n||"",a=Ao(i);if("error"in a){process.stderr.write(`gruum: ${a.error}
93
+ `);continue}return i}}finally{r.close()}}async function Jo(){let e=`Cursor on ${ru()}`,t=await K(null,"/api/cli/pair/start",{method:"POST",body:JSON.stringify({label:e})});if(!t.ok)return process.stderr.write(`gruum: couldn't start sign-in (${t.status}). Is Gruum running at ${Ne}?
91
94
  `),1;let n=await t.json(),s=`${Ne}/extension/connect?code=${encodeURIComponent(n.userCode)}`;process.stdout.write(`Sign in to Gruum to connect this CLI.
92
95
 
93
96
  Code: ${n.userCode}
94
97
  ${s}
95
98
 
96
99
  Waiting for confirmation\u2026
97
- `);let r=Date.now()+600*1e3;for(;Date.now()<r;){await new Promise(a=>setTimeout(a,2e3));let o=await K(null,`/api/cli/pair/poll?pairingId=${encodeURIComponent(n.pairingId)}&verifier=${encodeURIComponent(n.verifier)}`);if(!o.ok)continue;let i=await o.json();if(i.status==="expired")return process.stderr.write("gruum: that code expired. Run `npx @gruum/cli login` again.\n"),1;if(i.status==="connected"&&i.token)return iu({token:i.token,apiOrigin:Ne}),process.stdout.write(`Signed in. This CLI can read specs for your projects.
98
- `),0}return process.stderr.write("gruum: sign-in timed out. Run `npx @gruum/cli login` again.\n"),1}function zn(e){if(!e||typeof e!="object")return null;let t=e;return typeof t.id!="string"||typeof t.repo!="string"?null:{id:t.id,name:typeof t.name=="string"?t.name:t.repo,repo:t.repo,rootPath:typeof t.rootPath=="string"?t.rootPath:"",host:typeof t.host=="string"&&t.host?t.host:null,workspaceId:typeof t.workspaceId=="string"&&t.workspaceId?t.workspaceId:null}}async function Jn(e,t){let n=au(e.repoDir);if(!n)return process.stderr.write(`gruum: this folder has no GitHub origin, so it can't be matched to a Gruum project.
99
- `),null;let s=!!process.stdin.isTTY,r=lu(e),o=Ot(t),i=await K(t,`/api/v2/cli/projects?repo=${encodeURIComponent(n)}`);if(i.status===401)return process.stderr.write("gruum: sign-in expired. Run `npx @gruum/cli login` again.\n"),null;if(!i.ok)return Un(r,n,null,s)?r:null;let a=await i.json(),l=Array.isArray(a.projects)?a.projects.map(zn).filter($=>$!==null):[];if(Un(r,n,l.map($=>$.id),s))return r;if(!!r&&r.repo===n&&!!r.workspaceId&&!!(r.host||!s)&&(process.stderr.write(`gruum: the saved project was not found. Do not edit .gruum/project.json.
100
+ `);let r=Date.now()+600*1e3;for(;Date.now()<r;){await new Promise(a=>setTimeout(a,2e3));let o=await K(null,`/api/cli/pair/poll?pairingId=${encodeURIComponent(n.pairingId)}&verifier=${encodeURIComponent(n.verifier)}`);if(!o.ok)continue;let i=await o.json();if(i.status==="expired")return process.stderr.write("gruum: that code expired. Run `npx @gruum/cli login` again.\n"),1;if(i.status==="connected"&&i.token)return au({token:i.token,apiOrigin:Ne}),process.stdout.write(`Signed in. This CLI can read specs for your projects.
101
+ `),0}return process.stderr.write("gruum: sign-in timed out. Run `npx @gruum/cli login` again.\n"),1}function zn(e){if(!e||typeof e!="object")return null;let t=e;return typeof t.id!="string"||typeof t.repo!="string"?null:{id:t.id,name:typeof t.name=="string"?t.name:t.repo,repo:t.repo,rootPath:typeof t.rootPath=="string"?t.rootPath:"",host:typeof t.host=="string"&&t.host?t.host:null,workspaceId:typeof t.workspaceId=="string"&&t.workspaceId?t.workspaceId:null}}async function Jn(e,t){let n=lu(e.repoDir);if(!n)return process.stderr.write(`gruum: this folder has no GitHub origin, so it can't be matched to a Gruum project.
102
+ `),null;let s=!!process.stdin.isTTY,r=cu(e),o=Ot(t),i=await K(t,`/api/v2/cli/projects?repo=${encodeURIComponent(n)}`);if(i.status===401)return process.stderr.write("gruum: sign-in expired. Run `npx @gruum/cli login` again.\n"),null;if(!i.ok)return Un(r,n,null,s)?r:null;let a=await i.json(),l=Array.isArray(a.projects)?a.projects.map(zn).filter($=>$!==null):[];if(Un(r,n,l.map($=>$.id),s))return r;if(!!r&&r.repo===n&&!!r.workspaceId&&!!(r.host||!s)&&(process.stderr.write(`gruum: the saved project was not found. Do not edit .gruum/project.json.
100
103
  `),l.length===0&&!s))return process.stderr.write("gruum: this repo has no project this sign-in can see. Run `npx @gruum/cli check` in a terminal to choose one.\n"),null;let u=!1,f="",m;if(l.length>0&&s){let $=await Ko(t);if(!$)return null;m=$;let g=l.map(y=>jo($,y)),p=[...g.map(y=>({name:y})),{name:"Create a new one"}],d=await Ho(Po(g),p,g.length===1?0:void 0);d===g.length?(l=[],process.stderr.write(`Creating\u2026
101
- `)):l=[l[d]]}if(l.length===0){m||process.stderr.write(`${Eo}
102
- `);let $=await uu(t,s,n,m);if(!$)return null;let g=await K(t,"/api/v2/cli/projects",{method:"POST",body:JSON.stringify({repo:n,rootPath:e.root,...$.workspaceId?{workspaceId:$.workspaceId}:{}})}),p=await g.json().catch(()=>({}));typeof p.place?.org=="string"&&typeof p.place.workspace=="string"?f=`${p.place.org} / ${p.place.workspace}`:f=$.label;let d=zn(p.project);if(u=p.created!==!1,!g.ok||!d){let y=typeof p.path=="string"?p.path:"";return process.stderr.write(`gruum: ${p.error||`couldn't create a project (${g.status})`}
104
+ `)):l=[l[d]]}if(l.length===0){m||process.stderr.write(`${Io}
105
+ `);let $=await pu(t,s,n,m);if(!$)return null;let g=await K(t,"/api/v2/cli/projects",{method:"POST",body:JSON.stringify({repo:n,rootPath:e.root,...$.workspaceId?{workspaceId:$.workspaceId}:{}})}),p=await g.json().catch(()=>({}));typeof p.place?.org=="string"&&typeof p.place.workspace=="string"?f=`${p.place.org} / ${p.place.workspace}`:f=$.label;let d=zn(p.project);if(u=p.created!==!1,!g.ok||!d){let y=typeof p.path=="string"?p.path:"";return process.stderr.write(`gruum: ${p.error||`couldn't create a project (${g.status})`}
103
106
  `),y&&process.stderr.write(`${o}${y}
104
107
  `),null}l=[d]}let h=wo(l,e.root);if(!h){let $=l.map(g=>` ${g.name}${g.rootPath?` #${g.rootPath}`:""}
105
108
  ${Kn(o,g.id)}`).join(`
106
109
  `);return process.stderr.write(`gruum: ${n} matches more than one project. Set "root" in .gruum/config.json to the folder alias, then run \`npx @gruum/cli check\` again.
107
110
  ${$}
108
- `),null}let w=h.host??null;if(!w&&s)for(Bo(o,{...h,host:w},u,f);!w;){let $=await fu(e,n),g=await K(t,`/api/v2/cli/projects/${encodeURIComponent(h.id)}/url`,{method:"POST",body:JSON.stringify({url:$})}),p=await g.json().catch(()=>({})),d=zn(p.project);if(!g.ok||!d?.host){process.stderr.write(`gruum: ${p.error||`couldn't save that URL (${g.status})`}
111
+ `),null}let w=h.host??null;if(!w&&s)for(Bo(o,{...h,host:w},u,f);!w;){let $=await du(e,n),g=await K(t,`/api/v2/cli/projects/${encodeURIComponent(h.id)}/url`,{method:"POST",body:JSON.stringify({url:$})}),p=await g.json().catch(()=>({})),d=zn(p.project);if(!g.ok||!d?.host){process.stderr.write(`gruum: ${p.error||`couldn't save that URL (${g.status})`}
109
112
  `);continue}w=d.host,process.stderr.write(`Live URL set to ${_o(w)}.
110
113
  `)}else Bo(o,{...h,host:w},u,f),!w&&!s&&process.stderr.write(`No live URL yet. Add one on that page.
111
114
  `);let C={...h,host:w,workspaceId:h.workspaceId??null,hostDeclined:!1};return ie(Wo(e),C),C}async function Zn(e,t,n={}){if(!t)return null;let s=Gn();if(!s)return n.announceLocal!==!1&&process.stderr.write("This spec is only on this computer. Sign in with `npx @gruum/cli login` to publish it.\n"),null;try{let r=await Jn(e,s);if(!r)return process.stderr.write(`This spec is only on this computer. It was not published.
@@ -119,7 +122,7 @@ ${Kn(Ot(s),r.id)}
119
122
  `)}catch{process.stderr.write(`gruum: couldn't reach Gruum to report this check. The local result still stands.
120
123
  `)}}async function qo(e,t,n){let s=await qn(e);if(!s)return{ok:!1,text:"Sign in with gruum login before requesting an exception."};let r=Mt(e.repoDir);if(!r)return{ok:!1,text:"This folder is not on a named git branch."};try{let o=await K(s.credentials,`/api/v2/cli/projects/${encodeURIComponent(s.project.id)}/drift`,{method:"POST",body:JSON.stringify({action:"request",concept:"button",branch:r,commit:zo(e.repoDir),reason:n,item:t})}),i=await o.json().catch(()=>({}));if(!o.ok){let c=i.error||`Request failed (${o.status}).`;return{ok:!1,text:o.status===404?`${c} Run \`npx @gruum/cli check\` so this folder points at a project that exists. Do not edit .gruum/project.json.`:c}}let a=i.reviewUrl?`${Ot(s.credentials)}${i.reviewUrl}`:"",l=i.created?`Exception request ${i.id} is pending review.`:`An exception for this change is already pending (${i.id}).`;return{ok:!0,text:a?`${l}
121
124
  ${a}`:l}}catch{return{ok:!1,text:"Couldn't reach Gruum to request an exception."}}}async function Xo(e,t){let n=await qn(e);if(!n)return{ok:!1,text:"Sign in with gruum login to see exception status."};let s=Mt(e.repoDir);try{let r=await K(n.credentials,`/api/v2/cli/projects/${encodeURIComponent(n.project.id)}/drift?concept=button&branch=${encodeURIComponent(s)}`);if(!r.ok)return{ok:!1,text:`Couldn't load exceptions (${r.status}).`};let o=await r.json(),i=Array.isArray(o.requests)?o.requests:[],a=t?i.filter(l=>l.id===t):i;return a.length===0?{ok:!0,text:t?`No exception request ${t} on ${s||"this branch"}.`:`No exception requests on ${s||"this branch"}.`}:{ok:!0,text:a.map(l=>`${l.id} ${l.status} ${l.title} (${l.branch})`).join(`
122
- `)}}catch{return{ok:!1,text:"Couldn't reach Gruum to read exception status."}}}var Dt="0.2.4",Yo=`gruum ${Dt}: keep buttons on the Gruum spec
125
+ `)}}catch{return{ok:!1,text:"Couldn't reach Gruum to read exception status."}}}var Dt="0.2.5",Yo=`gruum ${Dt}: keep buttons on the Gruum spec
123
126
 
124
127
  Run it as \`npx @gruum/cli <command>\`.
125
128
 
@@ -152,38 +155,38 @@ Usage:
152
155
  gruum mcp
153
156
  Stdio MCP server: gruum_button_spec, gruum_check_buttons,
154
157
  gruum_request_exception, and gruum_exception_status.
155
- `,gu=new Set(["--baseline","--root","--out","--cli","--files","--reason"]);function Qn(e){let t=[],n=new Map;for(let s=0;s<e.length;s++){let r=e[s];if(!r.startsWith("--")){t.push(r);continue}let o=r.indexOf("="),i=o===-1?r:r.slice(0,o),a=o===-1?void 0:r.slice(o+1),l=n.get(i)??[];if(a!==void 0)l.push(a);else if(i==="--files")for(;e[s+1]&&!e[s+1].startsWith("--");)l.push(e[++s]);else gu.has(i)&&e[s+1]!==void 0&&l.push(e[++s]);n.set(i,l)}return{positional:t,flags:n}}var B=(e,t)=>e.flags.has(t),q=(e,t)=>e.flags.get(t)?.[0];function Ae(e,t=process.cwd()){let n=Tn(t),s=q(e,"--root")??Lt(n).root??"";return Tn(t,s)}var et="No spec found. Publish one from Gruum, or draft one locally with `npx @gruum/cli baseline --write`.";function mu(e,t){let n=he(e,q(t,"--baseline"));return n||process.stderr.write(`gruum: ${et}
158
+ `,mu=new Set(["--baseline","--root","--out","--cli","--files","--reason"]);function Qn(e){let t=[],n=new Map;for(let s=0;s<e.length;s++){let r=e[s];if(!r.startsWith("--")){t.push(r);continue}let o=r.indexOf("="),i=o===-1?r:r.slice(0,o),a=o===-1?void 0:r.slice(o+1),l=n.get(i)??[];if(a!==void 0)l.push(a);else if(i==="--files")for(;e[s+1]&&!e[s+1].startsWith("--");)l.push(e[++s]);else mu.has(i)&&e[s+1]!==void 0&&l.push(e[++s]);n.set(i,l)}return{positional:t,flags:n}}var B=(e,t)=>e.flags.has(t),q=(e,t)=>e.flags.get(t)?.[0];function Ae(e,t=process.cwd()){let n=Tn(t),s=q(e,"--root")??Lt(n).root??"";return Tn(t,s)}var et="No spec found. Publish one from Gruum, or draft one locally with `npx @gruum/cli baseline --write`.";function hu(e,t){let n=he(e,q(t,"--baseline"));return n||process.stderr.write(`gruum: ${et}
156
159
  `),n}function Qe(e,t,n){let s={...t,checkedAt:new Date().toISOString(),baselineVersion:n.baseline.version,items:n.items};return Fn(e,s),s}async function es(e,t){let n=Yn({input:process.stdin,output:process.stdout});_e(n);try{for(;;){let s=await new Promise(o=>{n.question(e,o)}),r=t(s);if(r)return r;process.stdout.write(`Enter one of the letters in the question.
157
160
  `)}}finally{n.close()}}function Qo(e){return!!process.stdin.isTTY&&!B(e,"--ci")&&!B(e,"--json")&&!B(e,"--staged")}async function ti(e){if(!process.stdin.isTTY||!De(T.join(e.repoDir,".cursor")))return;let t=Se(T.join(e.repoDir,".cursor/hooks.json")),n=Se(T.join(e.repoDir,".cursor/mcp.json"));if(!Ss(t,n))return;let s=De(T.join(e.repoDir,".claude"));await es(Fs(s),Us)==="yes"&&ri(Qn(["init","cursor"]))}async function ni(e,t=!1){let n=Ae(e);await Ye(n,B(e,"--baseline"));let s=he(n,q(e,"--baseline"));if(s?.version===0&&!t&&!B(e,"--baseline")){let f=await Zn(n,s,{announceLocal:!1});f&&(s=f)}if(!s){if(!t&&Qo(e)){if(await es(Bs,zs)!=="baseline")return 0;let m=["baseline","--write"],h=q(e,"--root");h&&m.push("--root",h);let w=await si(Qn(m),!1);return w!==0?w:ni(e,!0)}return process.stderr.write(`gruum: ${et}
158
161
  `),0}let r=Ce(n,s,{staged:B(e,"--staged")});B(e,"--staged")||Qe(n,jt(n),r);let o=(e.flags.get("--files")??[]).map(f=>T.relative(T.join(n.repoDir,n.root),T.resolve(f)).split(T.sep).join("/")),i=Gt(r.items,o),a=Pt(n);(B(e,"--ci")||B(e,"--report"))&&await Zo(n,i,s.version,B(e,"--ci")?"ci":"local"),B(e,"--json")?process.stdout.write(`${JSON.stringify({baselineVersion:s.version,items:i,exceptions:a},null,2)}
159
162
  `):process.stdout.write(`${ms(i,{baselineVersion:s.version,files:r.result.index.files,skipped:r.result.index.skipped},a)}
160
163
  `);let l=ze(i,a),c=B(e,"--ci")||B(e,"--strict")||Lt(n).block,u=0;if(c&&B(e,"--strict")){let f=i.some(m=>m.severity==="block"&&a[m.id]==="pending");u=l.length>0||f?1:0}else c&&(u=l.length>0?1:0);if(B(e,"--ci")&&l.length===0){let f=i.filter(m=>a[m.id]==="pending");f.length>0&&process.stdout.write(`${f.length} pending exception${f.length===1?"":"s"}; this run does not fail on them.
161
- `)}return Qo(e)&&await ti(n),u}async function hu(e){let t=Ae(e);await Ye(t,B(e,"--baseline"));let n=mu(t,e);return n?(process.stdout.write(`${JSON.stringify(Wt(n),null,2)}
164
+ `)}return Qo(e)&&await ti(n),u}async function bu(e){let t=Ae(e);await Ye(t,B(e,"--baseline"));let n=hu(t,e);return n?(process.stdout.write(`${JSON.stringify(Wt(n),null,2)}
162
165
  `),0):1}async function si(e,t=!0){if(!B(e,"--write"))return process.stderr.write(`gruum: pass --write to draft a spec from the working tree.
163
- `),2;let n=Ae(e),s=It(n),r=ds(s,{version:0}),o=q(e,"--out")?T.resolve(q(e,"--out")):Re(n);ie(o,r);let i=T.relative(process.cwd(),o)||o;process.stdout.write(`Drafted a spec from ${s.index.files} files: ${r.styles.length} styles, ${r.tokens.length} tokens, ${r.rules.length} rules, ${r.acceptedFindings.length} accepted findings.
166
+ `),2;let n=Ae(e),s=Et(n),r=ds(s,{version:0}),o=q(e,"--out")?T.resolve(q(e,"--out")):Re(n);ie(o,r);let i=T.relative(process.cwd(),o)||o;process.stdout.write(`Drafted a spec from ${s.index.files} files: ${r.styles.length} styles, ${r.tokens.length} tokens, ${r.rules.length} rules, ${r.acceptedFindings.length} accepted findings.
164
167
  Wrote ${i}.
165
168
  `);let a=await Zn(n,r);return a&&o!==Re(n)&&ie(o,a),a&&t&&await ti(n),0}function ei(e,t,n,s){if(!n.ok)return process.stderr.write(`gruum: ${n.error}
166
169
  `),!1;if(!n.changed)return s.push(`unchanged ${t}`),!0;let r=T.join(e.repoDir,t);return n.text===""?(Xn(r,{force:!0}),s.push(`removed ${t}`)):(me(r,n.text),s.push(`wrote ${t}`)),!0}function ri(e){if(e.positional[1]!=="cursor")return process.stderr.write(`gruum: usage: gruum init cursor [--remove] [--force] [--cli "<command>"]
167
170
  `),2;let t=Ae(e),n=q(e,"--cli"),s=n??We,r=n??Cs,o=n??qt,i=B(e,"--remove"),a=d=>Se(T.join(t.repoDir,d)),l=[],c=i?Rs(a(".cursor/hooks.json")):Xt(a(".cursor/hooks.json"),s),u=i?As(a(".cursor/mcp.json")):Yt(a(".cursor/mcp.json"),o);for(let d of[c,u])if(!d.ok)return process.stderr.write(`gruum: ${d.error}
168
- `),1;ei(t,".cursor/hooks.json",c,l),ei(t,".cursor/mcp.json",u,l);let f=a(Y);if(i)f!==null&&en(f)&&(Xn(T.join(t.repoDir,Y)),l.push(`removed ${Y}`));else if(f===null||B(e,"--force")){let d=he(t,q(e,"--baseline")),y=Es(d?null:bu(t)),k=d?[...new Set(d.styles.map(x=>x.path))].sort():[];me(T.join(t.repoDir,Y),Qt(k.length?k:y)),l.push(`wrote ${Y}`)}else if(en(f)){let d=js(f);d.changed?(me(T.join(t.repoDir,Y),d.text),l.push(`wrote ${Y}`)):l.push(`unchanged ${Y}`)}else l.push(`kept ${Y} (exists; --force replaces it)`);let m=i?Ps(a(".gitignore")):ot(a(".gitignore"));m.changed&&(me(T.join(t.repoDir,".gitignore"),m.text),l.push("wrote .gitignore"));let h=De(T.join(t.repoDir,".husky")),w=["lefthook.yml","lefthook.yaml",".lefthook.yml"].some(d=>De(T.join(t.repoDir,d))),C=bo(t),$=h?".husky/pre-commit":C?`${C}/pre-commit`:null,g=$?T.resolve(t.repoDir,$):null,p=g?Se(g):null;if(i){if(g&&p!==null){let d=Ms(p);d.changed&&d.text===""?(Xn(g,{force:!0}),l.push(`removed ${$}`)):d.changed&&(me(g,d.text),l.push(`edited ${$}`))}}else{let d=Ls({husky:h,lefthook:w,hookText:p,gitHooksDir:C},r);if(d.kind==="print")l.push(`pre-commit ${d.reason}:
169
- ${d.snippet}`);else if(d.changed&&g){if(me(g,d.text),d.kind==="git")try{du(g,493)}catch{}l.push(`wrote ${$}${d.kind==="git"?" (local only; not shared through git)":""}`)}else l.push(`unchanged ${$}`)}return process.stdout.write(`${l.join(`
171
+ `),1;ei(t,".cursor/hooks.json",c,l),ei(t,".cursor/mcp.json",u,l);let f=a(Y);if(i)f!==null&&en(f)&&(Xn(T.join(t.repoDir,Y)),l.push(`removed ${Y}`));else if(f===null||B(e,"--force")){let d=he(t,q(e,"--baseline")),y=Is(d?null:yu(t)),k=d?[...new Set(d.styles.map(x=>x.path))].sort():[];me(T.join(t.repoDir,Y),Qt(k.length?k:y)),l.push(`wrote ${Y}`)}else if(en(f)){let d=js(f);d.changed?(me(T.join(t.repoDir,Y),d.text),l.push(`wrote ${Y}`)):l.push(`unchanged ${Y}`)}else l.push(`kept ${Y} (exists; --force replaces it)`);let m=i?Ps(a(".gitignore")):ot(a(".gitignore"));m.changed&&(me(T.join(t.repoDir,".gitignore"),m.text),l.push("wrote .gitignore"));let h=De(T.join(t.repoDir,".husky")),w=["lefthook.yml","lefthook.yaml",".lefthook.yml"].some(d=>De(T.join(t.repoDir,d))),C=bo(t),$=h?".husky/pre-commit":C?`${C}/pre-commit`:null,g=$?T.resolve(t.repoDir,$):null,p=g?Se(g):null;if(i){if(g&&p!==null){let d=Ms(p);d.changed&&d.text===""?(Xn(g,{force:!0}),l.push(`removed ${$}`)):d.changed&&(me(g,d.text),l.push(`edited ${$}`))}}else{let d=Ls({husky:h,lefthook:w,hookText:p,gitHooksDir:C},r);if(d.kind==="print")l.push(`pre-commit ${d.reason}:
172
+ ${d.snippet}`);else if(d.changed&&g){if(me(g,d.text),d.kind==="git")try{gu(g,493)}catch{}l.push(`wrote ${$}${d.kind==="git"?" (local only; not shared through git)":""}`)}else l.push(`unchanged ${$}`)}return process.stdout.write(`${l.join(`
170
173
  `)}
171
174
  `),i||process.stdout.write(`
172
175
  Commit the .cursor/ files so teammates get the same guardrails. Tokens never go in the repository.
173
- `),0}function bu(e){try{return It(e)}catch{return null}}async function yu(){if(process.stdin.isTTY)return{};let e=[];for await(let t of process.stdin)e.push(t);try{let t=JSON.parse(Buffer.concat(e).toString("utf8")||"{}");return t&&typeof t=="object"?t:{}}catch{return{}}}function xu(e){let t=e.workspace_roots,n=Array.isArray(t)&&typeof t[0]=="string"&&De(t[0])?t[0]:typeof e.cwd=="string"&&De(e.cwd)?e.cwd:process.cwd();return Ae({positional:[],flags:new Map},n)}async function ku(e){let t=e.positional[1],n=await yu(),s=t==="before-shell"?{permission:"allow"}:{};try{let r=xu(n),o=Lt(r),i={...o.hooks,exceptions:!0},a=he(r),l=jt(r),c=Pt(r),u=s;if(t==="after-file-edit"){let f=typeof n.file_path=="string"?n.file_path:"",m=rn(T.relative(r.repoDir,T.resolve(r.repoDir,f)).split(T.sep).join("/"),r.root);a&&m!==null&&Js(m)&&Qe(r,l,Ce(r,a))}else if(t==="stop"){if(a){let f=Qe(r,l,Ce(r,a)),m=ws(f,n,i,c);Fn(r,m.ledger),u=m.output}}else if(t==="before-shell"){let f=typeof n.command=="string"?n.command:"",m=Jt(f).some(h=>o.hooks.denyGit.includes(h));if(a&&m){let h=Qe(r,l,Ce(r,a));u=vs(h,n,i,c)}}else return process.stderr.write(`gruum: unknown hook ${String(t)}
176
+ `),0}function yu(e){try{return Et(e)}catch{return null}}async function xu(){if(process.stdin.isTTY)return{};let e=[];for await(let t of process.stdin)e.push(t);try{let t=JSON.parse(Buffer.concat(e).toString("utf8")||"{}");return t&&typeof t=="object"?t:{}}catch{return{}}}function ku(e){let t=e.workspace_roots,n=Array.isArray(t)&&typeof t[0]=="string"&&De(t[0])?t[0]:typeof e.cwd=="string"&&De(e.cwd)?e.cwd:process.cwd();return Ae({positional:[],flags:new Map},n)}async function wu(e){let t=e.positional[1],n=await xu(),s=t==="before-shell"?{permission:"allow"}:{};try{let r=ku(n),o=Lt(r),i={...o.hooks,exceptions:!0},a=he(r),l=jt(r),c=Pt(r),u=s;if(t==="after-file-edit"){let f=typeof n.file_path=="string"?n.file_path:"",m=rn(T.relative(r.repoDir,T.resolve(r.repoDir,f)).split(T.sep).join("/"),r.root);a&&m!==null&&Js(m)&&Qe(r,l,Ce(r,a))}else if(t==="stop"){if(a){let f=Qe(r,l,Ce(r,a)),m=ws(f,n,i,c);Fn(r,m.ledger),u=m.output}}else if(t==="before-shell"){let f=typeof n.command=="string"?n.command:"",m=Jt(f).some(h=>o.hooks.denyGit.includes(h));if(a&&m){let h=Qe(r,l,Ce(r,a));u=vs(h,n,i,c)}}else return process.stderr.write(`gruum: unknown hook ${String(t)}
174
177
  `),2;process.stdout.write(`${JSON.stringify(u)}
175
178
  `)}catch(r){process.stderr.write(`gruum hook ${t}: ${r instanceof Error?r.message:String(r)}
176
179
  `),process.stdout.write(`${JSON.stringify(s)}
177
- `)}return 0}async function oi(e,t,n){await Ye(e,!1);let s=he(e);if(!s)return{ok:!1,text:et};let o=Ce(e,s).items.find(i=>i.id===t);return o?qo(e,o,n):{ok:!1,text:`No drift item ${t}. Run gruum_check_buttons or \`npx @gruum/cli check\` and use an id from that list. Do not edit .gruum files.`}}async function wu(e){let t=e.positional[1]??"",n=q(e,"--reason")?.trim()??"";if(!t||!n)return process.stderr.write(`Usage: npx @gruum/cli request <drift id> --reason "why this button should stay"
180
+ `)}return 0}async function oi(e,t,n){await Ye(e,!1);let s=he(e);if(!s)return{ok:!1,text:et};let o=Ce(e,s).items.find(i=>i.id===t);return o?qo(e,o,n):{ok:!1,text:`No drift item ${t}. Run gruum_check_buttons or \`npx @gruum/cli check\` and use an id from that list. Do not edit .gruum files.`}}async function vu(e){let t=e.positional[1]??"",n=q(e,"--reason")?.trim()??"";if(!t||!n)return process.stderr.write(`Usage: npx @gruum/cli request <drift id> --reason "why this button should stay"
178
181
  `),2;let s=await oi(Ae(e),t,n);return(s.ok?process.stdout:process.stderr).write(`${s.text}
179
- `),s.ok?0:1}async function vu(e){let t=Ae(e),n=Gs({spec:async()=>{let o=he(t,q(e,"--baseline"));return o?{text:JSON.stringify(Wt(o),null,2)}:{text:et,isError:!0}},check:async o=>{let i=he(t,q(e,"--baseline"));if(!i)return{text:et,isError:!0};let a=Ce(t,i);Qe(t,jt(t),a);let l=Gt(a.items,o);return{text:JSON.stringify({baselineVersion:i.version,blocking:ze(l,Pt(t)).length,items:l},null,2)}},request:async(o,i)=>{let a=await oi(t,o,i);return{text:a.text,isError:!a.ok}},status:async o=>{let i=await Xo(t,o);return{text:i.text,isError:!i.ok}}}),s={name:"gruum",version:Dt},r=Yn({input:process.stdin,crlfDelay:1/0});for await(let o of r){if(!o.trim())continue;let i;try{i=JSON.parse(o)}catch{process.stdout.write(`${JSON.stringify({jsonrpc:"2.0",id:null,error:{code:-32700,message:"Parse error"}})}
182
+ `),s.ok?0:1}async function $u(e){let t=Ae(e),n=Gs({spec:async()=>{let o=he(t,q(e,"--baseline"));return o?{text:JSON.stringify(Wt(o),null,2)}:{text:et,isError:!0}},check:async o=>{let i=he(t,q(e,"--baseline"));if(!i)return{text:et,isError:!0};let a=Ce(t,i);Qe(t,jt(t),a);let l=Gt(a.items,o);return{text:JSON.stringify({baselineVersion:i.version,blocking:ze(l,Pt(t)).length,items:l},null,2)}},request:async(o,i)=>{let a=await oi(t,o,i);return{text:a.text,isError:!a.ok}},status:async o=>{let i=await Xo(t,o);return{text:i.text,isError:!i.ok}}}),s={name:"gruum",version:Dt},r=Yn({input:process.stdin,crlfDelay:1/0});for await(let o of r){if(!o.trim())continue;let i;try{i=JSON.parse(o)}catch{process.stdout.write(`${JSON.stringify({jsonrpc:"2.0",id:null,error:{code:-32700,message:"Parse error"}})}
180
183
  `);continue}let a=await Hs(i,n,s);a&&process.stdout.write(`${JSON.stringify(a)}
181
- `)}return 0}async function $u(){if(process.stdout.write(Ns(Dt)),!process.stdin.isTTY)return process.stdout.write(`
182
- ${Ie.map(n=>n.usage).join(`
184
+ `)}return 0}async function Cu(){if(process.stdout.write(Ns(Dt)),!process.stdin.isTTY)return process.stdout.write(`
185
+ ${Ee.map(n=>n.usage).join(`
183
186
  `)}
184
187
  `),0;let e=Yn({input:process.stdin,output:process.stdout});_e(e);let t=null;try{for(;;){let n=await new Promise(s=>{e.question(Ds,s)});if(t=Ws(n),t==="quit"||t)break;process.stdout.write(`Enter 1, 2, or 3.
185
188
  `)}}finally{e.close()}return!t||t==="quit"?0:Nt([t.name,...t.args])}async function Nt(e){let t=Qn(e),n=t.positional[0];if(B(t,"--version"))return process.stdout.write(`${Dt}
186
- `),0;if(B(t,"--help")||n==="help")return process.stdout.write(Yo),0;switch(n){case"login":{let s=await Jo();if(s!==0||!process.stdin.isTTY)return s;let r=await es(Ts,Vs);return r==="check"?Nt(["check"]):r==="baseline"?Nt(["baseline","--write"]):0}case"check":return ni(t);case"request":return wu(t);case"spec":return hu(t);case"baseline":return si(t);case"init":return ri(t);case"hook":return ku(t);case"mcp":return vu(t);case void 0:return $u();default:return process.stderr.write(`gruum: unknown command ${n}
189
+ `),0;if(B(t,"--help")||n==="help")return process.stdout.write(Yo),0;switch(n){case"login":{let s=await Jo();if(s!==0||!process.stdin.isTTY)return s;let r=await es(Ts,Vs);return r==="check"?Nt(["check"]):r==="baseline"?Nt(["baseline","--write"]):0}case"check":return ni(t);case"request":return vu(t);case"spec":return bu(t);case"baseline":return si(t);case"init":return ri(t);case"hook":return wu(t);case"mcp":return $u(t);case void 0:return Cu();default:return process.stderr.write(`gruum: unknown command ${n}
187
190
 
188
191
  ${Yo}`),2}}Nt(process.argv.slice(2)).then(e=>{process.exitCode=e},e=>{Be(e)&&process.exit(130),process.stderr.write(`gruum: ${e instanceof Error?e.message:String(e)}
189
192
  `),process.exitCode=1});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gruum/cli",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Keep buttons on the Gruum spec: a local drift check, Cursor hooks, and an MCP server.",
5
5
  "keywords": [
6
6
  "design",