@gruum/cli 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gruum.mjs +97 -91
- package/package.json +15 -2
package/gruum.mjs
CHANGED
|
@@ -1,114 +1,120 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{chmodSync as
|
|
3
|
-
`),process.exit(130)})}var Go=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"]),Ho=new Set(["page","index","layout","route","default"]);function Ko(e){return Go.has(e.property)||/^(margin|transition|grid-)/.test(e.property)?!0:(e.property==="width"||e.property==="height")&&/^(100%|auto)$/.test(e.value)}function Te(e){return e.flatMap(t=>t.declarations.filter(n=>!Ko(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function Jo(e){return Te(e.states)}function Zo(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function Un(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Xo(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return Un(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return Un((n??e.value).replace(/-/g," "))}function qo(e){let t=Zo(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?`${Xo(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 Yo(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return Ho.has(n)&&s?`${s}/${n}`:n}function Qo(e){let t=[...new Set(e.map(s=>Yo(s.path)))],n=t.slice(0,2).join(", ");return t.length>2?`${n} +${t.length-2}`:n}var zn=(e,t)=>e.path.localeCompare(t.path)||e.line-t.line;function Wn(e){let t=new Map;for(let r of e){let o=qo(r.variant),i=t.get(o)??new Map,a=Jo(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(zn);i.sort((h,$)=>$.sites.length-h.sites.length||zn(h.sites[0],$.sites[0]));let[a,...l]=i,c=a.looks[0],u=l.map(h=>Qo(h.sites)),f=l.map((h,$)=>{let w=h.looks[0],g={title:u.filter(p=>p===u[$]).length>1?`${u[$]} \xB7 line ${h.sites[0].line}`:u[$],selector:w.selector,path:h.sites[0].path,line:h.sites[0].line,element:w.element,usage:w.usage,states:w.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,...f.length?{modifiers:f}:{}};s.set(m,a.sites),n.push(m)}return{variants:n,sites:s}}var Kn=1,Jn=["style.new","state.changed","state.missing","token.unknown","value.hardcoded","native.element","prop.unknown","style.removed","guidance.rule"],Dt={"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 Vt(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function Gn(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${Vt(t)}`}function oe(e){return e.context?`${e.state} @ ${e.context}`:e.state}var ei=/var\(\s*(--[\w-]+)/g;function ti(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(ei))t.add(r[1]);return[...t].sort()}function ni(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 si(e){let t=new Map;for(let n of e){let s=oe(n),r=t.get(s),o=ni([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function Zn(e){let t=new Map,n=(s,r,o)=>{let i=Gn(s),a=t.get(i),l=si([...a?ri(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(oe(u))||c.set(oe(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:ti(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=Gn(s);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);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 ri(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function oi(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 Hn=/^(\d+) native /;function ii(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 Ye={hardcoded:"value.hardcoded",native:"native.element",props:"prop.unknown"},ai=new Set(Object.values(Ye));var li={"value.hardcoded":()=>"Replace each literal with the spec token named, or with a spec token for that property.","native.element":e=>`Render ${e.components[0]??"the shared component"} 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 Xn(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:ii(n.id,s)});return t}function Mt(e){return`${e.path}#${Vt(e.text.replace(/\s+/g," ").trim())}`}function qn(e,t={}){let n=oi(e.previewCss),s=[...Zn(e.variants).values()].map(({line:i,stateLines:a,...l})=>l),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:Kn,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:Xn(e).filter(({check:i})=>i in Ye).map(({check:i,finding:a,key:l})=>({check:i,key:l,message:a.message})),settings:{severity:{...Dt,...t.settings?.severity??{}}}}}function ci(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 Tt(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function Nt(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function ui(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 Yn(e,t){let n={...Dt,...t.settings.severity},s=[],r=(p,d="")=>{s.push({id:`${p.kind}:${Vt(`${p.styleId??""}|${p.state??""}|${d}`)}`,severity:n[p.kind],...p})},o=Zn(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(Te(p.states),p);let f=new Map;for(let p of o.values()){if(!p.markup)continue;let d=u.get(Te(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(I=>I.markup):a,v=y.filter(I=>I.path===p.path),x=(v.length?v:y).map(h),C=p.markup?`This one-off ${p.element??"button"} (${Nt((p.states[0]?.declarations??[]).map(I=>`${I.property}: ${I.value}`),3)})`:p.selector,j=p.markup?t.components.length?`render ${t.components[0]} with a spec look,`:x.length?`copy ${Nt(x,3)},`:"use a spec style,":d?`restyle ${d.selector} only through spec modifiers`:x.length?`use ${Nt(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:[{path:p.path,line:p.line}],fix:`${C} is not in the spec; ${j} or ask for an exception.`},p.markup?Te(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(v=>[oe(v),v]));for(let v of p.states){let x=oe(v),C=y.get(x),j=ci(C?.declarations??[],v.declarations);j.length!==0&&r({kind:"state.changed",styleId:p.id,title:C?`${p.title}: ${x} changed`:`${p.title}: new ${x} state`,state:x,baseline:C?{declarations:C.declarations}:null,observed:{declarations:v.declarations},refs:[{path:p.path,line:p.stateLines.get(x)??p.line}],fix:C?`Restore ${p.selector} ${x} to the spec (${j.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.`},Tt(v.declarations))}}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Set(p.states.map(oe));for(let v of d.states){let x=oe(v);y.has(x)||r({kind:"state.missing",styleId:p.id,title:`${p.title}: ${x} state is missing`,state:x,baseline:{declarations:v.declarations},observed:null,refs:[{path:p.path,line:p.line}],fix:`Define ${p.selector} ${x} again: ${Tt(v.declarations)||"as in the spec"}.`})}}for(let p of o.values())for(let d of p.tokens){if(l.has(d))continue;let y=ui(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 $=new Map;for(let p of t.acceptedFindings)$.set(p.key,[...$.get(p.key)??[],p]);let w=Xn(e).filter(({check:p})=>p in Ye);for(let p of Jn)if(ai.has(p))for(let{check:d,finding:y,key:v}of w){if(Ye[d]!==p)continue;let x=$.get(v)??[];if(x.some(A=>!pi(d,A.message,y.message)))continue;let C=x[0],j=y.styles?.[0],I=j?[...o.values()].find(A=>A.title===j):void 0;r({kind:p,styleId:I?.id??null,title:y.message,baseline:C?{message:C.message}:null,observed:{message:y.message,...p==="native.element"?{element:"button"}:{}},waiverKey:v,refs:y.refs.map(({path:A,line:R})=>({path:A,line:R})),fix:li[p](t)},v)}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 k=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(Mt(d));for(let p of t.rules){if(g.has(Mt(p)))continue;let d=k.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.`},Mt(p))}return s}function pi(e,t,n){if(t===n)return!1;if(e==="native"){let s=Hn.exec(t)?.[1],r=Hn.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}var fi={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, ask for an exception with a reason instead of inventing one. Never edit generated Gruum files to make a check pass."]};function Ft(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...fi,drift:Jn.map(n=>({kind:n,severity:e.settings.severity[n]??Dt[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=>[oe(s),Tt(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 Qe(e){if(!e||typeof e!="object")return null;let t=e;return t.schema!==Kn||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 di(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 Bt(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 Qn(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
|
-
`);for(let[o,i]of
|
|
5
|
-
`)}function
|
|
6
|
-
`)}function
|
|
7
|
-
${
|
|
2
|
+
import{chmodSync as Xc,existsSync as Lt,rmSync as Un}from"node:fs";import V from"node:path";import{createInterface as zn}from"node:readline";function De(e){return e instanceof Error&&e.name==="AbortError"&&(e.message==="Aborted with Ctrl+C"||e.message==="Aborted with Ctrl+D")}function Se(e){e.on("SIGINT",()=>{process.stderr.write(`
|
|
3
|
+
`),process.exit(130)})}var Ko=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"]),Jo=new Set(["page","index","layout","route","default"]);function Zo(e){return Ko.has(e.property)||/^(margin|transition|grid-)/.test(e.property)?!0:(e.property==="width"||e.property==="height")&&/^(100%|auto)$/.test(e.value)}function Ve(e){return e.flatMap(t=>t.declarations.filter(n=>!Zo(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function Xo(e){return Ve(e.states)}function qo(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function Kn(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Yo(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return Kn(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return Kn((n??e.value).replace(/-/g," "))}function Qo(e){let t=qo(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?`${Yo(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 ei(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return Jo.has(n)&&s?`${s}/${n}`:n}function ti(e){let t=[...new Set(e.map(s=>ei(s.path)))],n=t.slice(0,2).join(", ");return t.length>2?`${n} +${t.length-2}`:n}var Jn=(e,t)=>e.path.localeCompare(t.path)||e.line-t.line;function Zn(e){let t=new Map;for(let r of e){let o=Qo(r.variant),i=t.get(o)??new Map,a=Xo(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(Jn);i.sort((h,$)=>$.sites.length-h.sites.length||Jn(h.sites[0],$.sites[0]));let[a,...l]=i,c=a.looks[0],u=l.map(h=>ti(h.sites)),f=l.map((h,$)=>{let k=h.looks[0],g={title:u.filter(p=>p===u[$]).length>1?`${u[$]} \xB7 line ${h.sites[0].line}`:u[$],selector:k.selector,path:h.sites[0].path,line:h.sites[0].line,element:k.element,usage:k.usage,states:k.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,...f.length?{modifiers:f}:{}};s.set(m,a.sites),n.push(m)}return{variants:n,sites:s}}var Yn=1,Qn=["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 Bt(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function Xn(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${Bt(t)}`}function ie(e){return e.context?`${e.state} @ ${e.context}`:e.state}var ni=/var\(\s*(--[\w-]+)/g;function si(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(ni))t.add(r[1]);return[...t].sort()}function ri(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 oi(e){let t=new Map;for(let n of e){let s=ie(n),r=t.get(s),o=ri([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function es(e){let t=new Map,n=(s,r,o)=>{let i=Xn(s),a=t.get(i),l=oi([...a?ii(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(ie(u))||c.set(ie(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:si(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=Xn(s);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);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 ii(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function ai(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 qn=/^(\d+) native /;function li(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 et={hardcoded:"value.hardcoded",native:"native.element",props:"prop.unknown"},ci=new Set(Object.values(et));var ui={"value.hardcoded":()=>"Replace each literal with the spec token named, or with a spec token for that property.","native.element":e=>`Render ${e.components[0]??"the shared component"} 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 ts(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:li(n.id,s)});return t}function Nt(e){return`${e.path}#${Bt(e.text.replace(/\s+/g," ").trim())}`}function ns(e,t={}){let n=ai(e.previewCss),s=[...es(e.variants).values()].map(({line:i,stateLines:a,...l})=>l),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:Yn,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:ts(e).filter(({check:i})=>i in et).map(({check:i,finding:a,key:l})=>({check:i,key:l,message:a.message})),settings:{severity:{...Vt,...t.settings?.severity??{}}}}}function pi(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 Dt(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function Tt(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function fi(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 ss(e,t){let n={...Vt,...t.settings.severity},s=[],r=(p,d="")=>{s.push({id:`${p.kind}:${Bt(`${p.styleId??""}|${p.state??""}|${d}`)}`,severity:n[p.kind],...p})},o=es(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(Ve(p.states),p);let f=new Map;for(let p of o.values()){if(!p.markup)continue;let d=u.get(Ve(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(I=>I.markup):a,v=y.filter(I=>I.path===p.path),x=(v.length?v:y).map(h),C=p.markup?`This one-off ${p.element??"button"} (${Tt((p.states[0]?.declarations??[]).map(I=>`${I.property}: ${I.value}`),3)})`:p.selector,j=p.markup?t.components.length?`render ${t.components[0]} with a spec look,`:x.length?`copy ${Tt(x,3)},`:"use a spec style,":d?`restyle ${d.selector} only through spec modifiers`:x.length?`use ${Tt(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:[{path:p.path,line:p.line}],fix:`${C} is not in the spec; ${j} or ask for an exception.`},p.markup?Ve(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(v=>[ie(v),v]));for(let v of p.states){let x=ie(v),C=y.get(x),j=pi(C?.declarations??[],v.declarations);j.length!==0&&r({kind:"state.changed",styleId:p.id,title:C?`${p.title}: ${x} changed`:`${p.title}: new ${x} state`,state:x,baseline:C?{declarations:C.declarations}:null,observed:{declarations:v.declarations},refs:[{path:p.path,line:p.stateLines.get(x)??p.line}],fix:C?`Restore ${p.selector} ${x} to the spec (${j.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.`},Dt(v.declarations))}}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Set(p.states.map(ie));for(let v of d.states){let x=ie(v);y.has(x)||r({kind:"state.missing",styleId:p.id,title:`${p.title}: ${x} state is missing`,state:x,baseline:{declarations:v.declarations},observed:null,refs:[{path:p.path,line:p.line}],fix:`Define ${p.selector} ${x} again: ${Dt(v.declarations)||"as in the spec"}.`})}}for(let p of o.values())for(let d of p.tokens){if(l.has(d))continue;let y=fi(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 $=new Map;for(let p of t.acceptedFindings)$.set(p.key,[...$.get(p.key)??[],p]);let k=ts(e).filter(({check:p})=>p in et);for(let p of Qn)if(ci.has(p))for(let{check:d,finding:y,key:v}of k){if(et[d]!==p)continue;let x=$.get(v)??[];if(x.some(A=>!di(d,A.message,y.message)))continue;let C=x[0],j=y.styles?.[0],I=j?[...o.values()].find(A=>A.title===j):void 0;r({kind:p,styleId:I?.id??null,title:y.message,baseline:C?{message:C.message}:null,observed:{message:y.message,...p==="native.element"?{element:"button"}:{}},waiverKey:v,refs:y.refs.map(({path:A,line:R})=>({path:A,line:R})),fix:ui[p](t)},v)}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 w=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(Nt(d));for(let p of t.rules){if(g.has(Nt(p)))continue;let d=w.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.`},Nt(p))}return s}function di(e,t,n){if(t===n)return!1;if(e==="native"){let s=qn.exec(t)?.[1],r=qn.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}var gi={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, ask for an exception with a reason instead of inventing one. Never edit generated Gruum files to make a check pass."]};function Ft(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...gi,drift:Qn.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=>[ie(s),Dt(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 Be(e){if(!e||typeof e!="object")return null;let t=e;return t.schema!==Yn||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 mi(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 Ut(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 rs(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
|
+
`);for(let[o,i]of mi(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
|
+
`)}function os(e){return{schema:1,checkedAt:e,baselineVersion:null,items:[],followups:{}}}function is(e,t){if(!e||typeof e!="object")return os(t);let n=e;return n.schema!==1||!Array.isArray(n.items)?os(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 Fe(e,t={}){return e.filter(n=>{if(n.severity!=="block")return!1;let s=t[n.id];return s!=="pending"&&s!=="accepted"})}var Re={exceptions:!1,denyGit:["commit","push"],maxFollowups:2},zt=8;function as(e){let t=e.slice(0,zt).map(n=>{let s=n.refs[0],r=s?` (${s.path}${s.line?`:${s.line}`:""})`:"";return`- ${n.title}${r}. ${n.fix}`});return e.length>zt&&t.push(`- and ${e.length-zt} more; run \`gruum check\`.`),t.join(`
|
|
6
|
+
`)}function ls(e){return e.exceptions?"Fix each to the spec (call gruum_button_spec), or call gruum_request_exception with a reason when the spec has no button for the job.":"Fix each to the spec (call gruum_button_spec). If the spec has no button for the job, stop and tell the developer which exception you need; do not invent a style."}function cs(e,t,n=Re,s={}){let r=Fe(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:
|
|
7
|
+
${as(r)}
|
|
8
8
|
|
|
9
|
-
${
|
|
10
|
-
${
|
|
9
|
+
${ls(n)}`},ledger:{...e,followups:{...e.followups,[o]:i+1}}}}function Wt(e){let t=[];for(let n of e.split(/&&|\|\||[;|\n]/)){let s=n.trim().split(/\s+/).filter(Boolean),r=0;for(;r<s.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(s[r]);)r++;if((s[r]==="command"||s[r]==="exec")&&r++,!!/(^|\/)git$/.test(s[r]??"")){for(r++;r<s.length&&s[r].startsWith("-");){let o=s[r];r+=/^(-C|-c|--git-dir|--work-tree|--namespace)$/.test(o)?2:1}s[r]&&t.push(s[r])}}return t}function us(e,t,n=Re,s={}){let r=Wt(t.command??"").filter(i=>n.denyGit.includes(i));if(r.length===0)return{permission:"allow"};let o=Fe(e.items,s);return o.length===0?{permission:"allow"}:{permission:"deny",user_message:`Gruum blocked git ${r[0]}: ${o.length} button drift item${o.length===1?"":"s"} against the spec. Run \`gruum check\` for details.`,agent_message:`git ${r[0]} is blocked until button drift is resolved:
|
|
10
|
+
${as(o)}
|
|
11
11
|
|
|
12
|
-
${
|
|
13
|
-
`}function
|
|
14
|
-
`)}function
|
|
12
|
+
${ls(n)}`}}var Ue="npx --no-install @gruum/cli",ps={afterFileEdit:"after-file-edit",stop:"stop",beforeShellExecution:"before-shell"},hi=/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+hook\s+(after-file-edit|stop|before-shell)\s*$/;function Gt(e){return typeof e=="string"&&hi.test(e)}function tt(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 nt(e){return`${JSON.stringify(e,null,2)}
|
|
13
|
+
`}function fs(e,t=Ue){let n=".cursor/hooks.json",s=tt(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(ps)){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 ${ps[a]}`,u=l.filter(f=>Gt(f?.command));u.length===1&&u[0].command===c||(o[a]=[...l.filter(f=>!Gt(f?.command)),{command:c}],i=!0)}return i?{ok:!0,text:nt({version:r.version??1,...r,hooks:o}),changed:!0}:{ok:!0,text:e,changed:!1}}function ds(e){let t=".cursor/hooks.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=tt(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=>!Gt(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:nt({...s,hooks:r}),changed:!0}}function bi(e){let[t,...n]=e.trim().split(/\s+/);return{command:t,args:[...n,"mcp"]}}function gs(e,t=Ue){let n=".cursor/mcp.json",s=tt(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=bi(t),a=o.gruum;return JSON.stringify(a)===JSON.stringify(i)?{ok:!0,text:e,changed:!1}:{ok:!0,text:nt({...r,mcpServers:{...o,gruum:i}}),changed:!0}}function ms(e){let t=".cursor/mcp.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=tt(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:nt({...s,mcpServers:r}),changed:!0}):{ok:!0,text:e,changed:!1}}var ge=".cursor/rules/gruum-buttons.mdc",hs="<!-- written by gruum init cursor -->",yi=20,xi=["**/*.css","**/*.scss","**/*.tsx","**/*.jsx"];function bs(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,yi);return n.length?n:xi}function ys(e){return["---","description: Buttons in this repository follow a spec published in Gruum.",`globs: ${e.join(",")}`,"alwaysApply: false","---",hs,"","The button spec for this repository lives in Gruum; call the `gruum_button_spec` tool before writing or restyling a button.","Run `gruum_check_buttons` before you stop, and fix every drift item it reports to the spec.","When the spec has no button for the job, ask for an exception with a reason rather than inventing a style, and never edit Gruum's generated files to make a check pass.",""].join(`
|
|
14
|
+
`)}function xs(e){return e.includes(hs)}function ws(e){let t=e??"";if(t.split(/\r?\n/).some(r=>/^\/?\.gruum\/?(\*\*?)?$/.test(r.trim())))return{text:t,changed:!1};let s=t===""||t.endsWith(`
|
|
15
15
|
`)?"":`
|
|
16
16
|
`;return{text:`${t}${s}# Gruum local state
|
|
17
17
|
.gruum/
|
|
18
|
-
`,changed:!0}}function
|
|
18
|
+
`,changed:!0}}function ks(e){if(e===null)return{text:"",changed:!1};let t=e.replace(/(^|\n)# Gruum local state\n\.gruum\/\n/,"$1");return{text:t,changed:t!==e}}var wi=e=>`${e} check --staged`;function vs(e,t=Ue){let n=wi(t);if(e.lefthook)return{kind:"print",reason:"lefthook config found; add this to the pre-commit commands",snippet:`pre-commit:
|
|
19
19
|
commands:
|
|
20
20
|
gruum:
|
|
21
21
|
run: ${n}
|
|
22
22
|
`};let s=e.husky?"husky":e.gitHooksDir?"git":null;if(!s)return{kind:"print",reason:"no hook directory found; add this to your pre-commit hook",snippet:`${n}
|
|
23
|
-
`};let r=e.husky?".husky/pre-commit":`${e.gitHooksDir}/pre-commit`,o=e.hookText;if(o!==null&&o.split(/\r?\n/).some(l
|
|
23
|
+
`};let r=e.husky?".husky/pre-commit":`${e.gitHooksDir}/pre-commit`,o=e.hookText;if(o!==null&&o.split(/\r?\n/).some(l=>$s(l)))return{kind:s,path:r,text:o,changed:!1};let i=o===null?s==="git"?`#!/bin/sh
|
|
24
24
|
`:"":o,a=i===""||i.endsWith(`
|
|
25
25
|
`)?"":`
|
|
26
26
|
`;return{kind:s,path:r,text:`${i}${a}${n}
|
|
27
|
-
`,changed:!0}}function
|
|
28
|
-
`),n=t.filter(o
|
|
29
|
-
`);return s&&/^(#!\/bin\/sh)?\s*$/.test(r)?{text:"",changed:s}:{text:r,changed:s}}var
|
|
27
|
+
`,changed:!0}}function $s(e){return/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+check\s+--staged\s*$/.test(e.trim())}function Cs(e){let t=e.split(`
|
|
28
|
+
`),n=t.filter(o=>!$s(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 Ae=[{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 Ss(e){let t=Ae.map((n,s)=>` ${s+1} ${n.name.padEnd(10)} ${n.blurb}`);return`gruum ${e}
|
|
30
30
|
|
|
31
31
|
${t.join(`
|
|
32
32
|
`)}
|
|
33
|
-
`}var
|
|
34
|
-
Choose 1\u20133, or press Enter to quit: `,
|
|
35
|
-
Would you like to run a (c) check, (b) baseline, or (q) quit?
|
|
36
|
-
You have no baseline. Would you like to run it? (b) baseline, (q) quit: `;function Cs(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 Ss(e){let t=e.trim().toLowerCase();return!t||t==="q"||t==="quit"||t==="n"||t==="no"?"quit":t==="b"||t==="baseline"||t==="y"||t==="yes"?"baseline":null}function Rs(e){let t=e.trim().toLowerCase();if(!t)return"quit";let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Re.length?Re[n-1]:Re.find(s=>s.name===t)??null}var xi="2025-06-18",nt="Check before you finish, fix to the spec when you can, ask for an exception with a reason when you cannot, and never edit Gruum's generated files to make a check pass.",st={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. ${nt}`,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. ${nt}`,gruum_request_exception:`Ask a designer to allow one drift item the spec has no button for. Send the drift id from gruum_check_buttons and a reason. ${nt}`,gruum_exception_status:`Pending, accepted, or rejected for this branch's exception requests. Pass an id to read one. ${nt}`};function As(e){return[{name:"gruum_button_spec",description:st.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:st.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:st.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:st.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 Fe(e,t){return{jsonrpc:"2.0",id:e,result:t}}function rt(e,t,n){return{jsonrpc:"2.0",id:e,error:{code:t,message:n}}}async function _s(e,t,n){if(!e||typeof e!="object")return rt(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:rt(o,-32600,"Invalid request");let i=s.params??{};switch(s.method){case"initialize":{let a=i.protocolVersion;return Fe(o,{protocolVersion:typeof a=="string"?a:xi,capabilities:{tools:{listChanged:!1}},serverInfo:n})}case"ping":return Fe(o,{});case"tools/list":return Fe(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 rt(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 Fe(o,{content:[{type:"text",text:c.text}],isError:c.isError??!1})}catch(c){return Fe(o,{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0})}}default:return r?null:rt(o,-32601,`Method not found: ${s.method}`)}}var ki=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,wi=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,vi=/\.(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,$i=/(^|\/)\.gruum\//;function Gt(e){return!ki.test(`${e}/`)&&!$i.test(`${e}/`)}function Ht(e,t){return wi.test(e)||vi.test(e)?!1:t<=3e5}function Es(e){let t=Math.min(e.length,8e3);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}var Ci=/\.(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 Is(e){return Ci.test(e)}function Kt(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function Jt(e,t){let n=Kt(t),s=e.replace(/\\/g,"/");return n?s.startsWith(`${n}/`)?s.slice(n.length+1):null:s}function js(e,t,n){let s=new Map(e);for(let r of t){let o=Jt(r.path,n);o===null||!Gt(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):Ht(o,r.content.length)&&s.set(o,r.content))}return s}function Ps(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 ot(e){let t=/^(?:git@|ssh:\/\/git@|https?:\/\/(?:[^@/]+@)?)github\.com[:/]([^/\s]+)\/([^/\s]+?)(?:\.git)?\/?$/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}var Ls=e=>e.replace(/\\(.)/g,"$1");function Si(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 Zt=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function Ns(e){let t=[];Zt.lastIndex=0;let n=0;for(;n<e.length;){Zt.lastIndex=n;let s=Zt.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:Ls(s[1])});else if(s[2]!==void 0)t.push({kind:"id",raw:r,name:Ls(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=Si(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=Ns(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 Be(e){return e.map(t=>t.raw).join("")}function Ue(e){return e.map((t,n)=>{let s=Be(t.simples);return n===0?s:t.combinator===" "?` ${s}`:` ${t.combinator} ${s}`}).join("")}function z(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 Ts=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Os(e,t){let n=e.toLowerCase();return t.some(s=>n.includes(s.toLowerCase()))}function Xt(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"&&Ts(r.name).some(o=>s.has(o)))}var Ri=new Set(["html","body"]),Ai=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function at(e,t){for(let n of e)switch(n.kind){case"tag":if(t.elements.includes(n.name))return!0;break;case"class":if(Os(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&&Os(n.value,t.classKeywords))return!0;break;case"pseudo":if((n.name==="is"||n.name==="where")&&n.args){let s=z(n.args).map(q);if(s.length>0&&s.every(r=>r!==null&&at(r[r.length-1].simples,t)))return!0}break;default:break}return!1}function Ds(e){return e.some(n=>n.kind==="universal")?e.length===1:e.some(n=>n.kind==="tag"&&Ri.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 Vs(e){return e.some(t=>t.kind==="tag"&&Ai.has(t.name))}var it=["hover","focus","active","selected","current","loading","disabled"],_i={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"},Ei={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},Ii={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"},ji=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),Ms=e=>_i[e.toLowerCase()]??e.toLowerCase(),ie={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function Fs(e){if(e.kind==="pseudo"){let t=Ei[e.name];if(!t)return null;let n=ie[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:Ms(e.value),marker:{classes:[],attrs:{"data-state":e.value}}};let t=Ii[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]:ji.has(e.name.toLowerCase())?e.name:null;return n?{state:Ms(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function Pi(e){return e.kind!=="pseudo"||e.name!=="not"||!e.args?!1:z(e.args).every(t=>{let n=Ns(t);return n!==null&&n.every(s=>Fs(s)!==null)})}function lt(e){let t=[],n=new Map;for(let o of e){if(Pi(o))continue;let i=Fs(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=it.indexOf(e);return t===-1?it.length:t}function ge(e){return e.length?e.join(" + "):"default"}function qt(e){return e.replace(/:hover\b/g,`.${ie.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${ie.focus}`).replace(/:active\b/g,`.${ie.active}`)}var Li=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"]),Oi=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"]),Mi=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 ze(e){let t=e.toLowerCase();return Li.has(t)?"paint":Oi.has(t)?"layout":Mi.has(t)?"hint":"box"}var Ni={shadow:/^box-shadow$/,cursor:/^cursor$/,rounded:/^border(?:-[a-z]+)*-radius$/,radius:/^border(?:-[a-z]+)*-radius$/};function Bs(e,t){let n=e.filter(o=>o.kind==="class");if(n.length!==1||e.length!==1)return!1;let s=Ts(n[0].name)[0],r=s?Ni[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var xu={hover:{classes:[ie.hover],attrs:{}},focus:{classes:[ie.focus],attrs:{}},active:{classes:[ie.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 Ti="data-gs-sheet";function zs(e){return`[${Ti}="${e.replace(/["\\]/g,"")}"]`}function Us(e){return/\.module\.[a-z]+$/i.test(e)}var Di=new Set(["button","a","div","span","input","summary","label"]);function me(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 Vi(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 ct(e,t){let n=q(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>Vi(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(!Di.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 Yt(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function ut(e){let t=Yt(e,"display");if(/^none\b/i.test(t))return"display: none";let n=Yt(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=Yt(e,"opacity");return/^(0|0\.0+)$/.test(s)?"opacity: 0":null}function Ws(e,t){return e===t||!Us(e)&&!Us(t)}function ne(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 Fi=40,Y=(e,t)=>({path:e,line:t});function Q(e,t,n,s){return{...e,status:t.length===0?"ok":"attention",summary:t.length===0?n:s(t.length),findings:t.slice(0,Fi)}}function he(e,t){return{...e,status:"na",summary:t,findings:[]}}var Qt=e=>e.state.split(" + ");function Zs(e,t){if(!e.element||!t.element||e!==t&&!Ws(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 Xs(e,t){return t.filter(n=>Zs(n,e)).flatMap(n=>n.states)}function Bi(e,t,n){return Xs(e,t).some(s=>Qt(s).includes(n))||t.filter(s=>Zs(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var Ui=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function zi(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 he(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of Ui){let i=n.filter(a=>!Bi(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=>Y(a.path,a.line))})}return Q(t,s,"Every style has hover, focus, disabled, and active rules.",r=>`${r} state${r===1?"":"s"} missing on some styles.`)}var Gs=new Set(["outline","outline-style","outline-width"]),Hs=/^(?:none|0|0px)(?:\s+(?:none|0|0px))*$/i,Wi=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function Gi(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 he(t,"No styles that can be drawn on their own.");let s=[];for(let r of n){let o=Xs(r,e.variants),i=o.filter(l=>{let c=Qt(l);return c.includes("default")||c.includes("focus")}).flatMap(l=>l.declarations.map(c=>({s:l,d:c}))).find(({d:l})=>Gs.has(l.property)&&Hs.test(l.value.replace(/\s*!important/i,"")));!i||o.filter(l=>Qt(l).includes("focus")).some(l=>l.declarations.some(c=>Wi.test(c.property)&&!(Gs.has(c.property)&&Hs.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:[Y(r.path,i.s.line)]})}return Q(t,s,"No style removes the outline without a focus replacement.",r=>`${r} style${r===1?"":"s"} lose the focus indicator.`)}function Hi(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 he(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=>Y(i.path,i.line))}});return Q(t,s,`All ${e.tokens.length} tokens read are defined.`,r=>`${r} token${r===1?"":"s"} with no definition.`)}var Ki=/var\((?:[^()]|\([^()]*\))*\)/g,Ks=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,Ji=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,Zi=/(?<![\w.-])(\d+(?:\.\d+)?)px\b/g;function Js(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 en(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?en(i,t,n+1):o!==void 0?en(o.trim(),t,n+1):s})}var Xi=[[/^(?: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 qi(e,t){if(!t)return null;let n=Xi.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function Yi(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=en(i,e.tokenValues).trim();if(new RegExp(`^(?:${Ks.source})$`,"i").test(a)){let l=Js(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 he(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(Ki," ");for(let m of f.matchAll(Ks)){let h=n.get(Js(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(Ji.test(u.property))for(let m of f.matchAll(Zi)){let h=qi(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:[Y(o.path,a.line)]})}return Q(t,r,`No ${e.noun} style hard-codes a value a token already has.`,o=>`${o} style${o===1?"":"s"} hard-code values.`)}function Qi(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 he(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:[Y(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:[Y(r.path,r.line),...r.usage.files.slice(0,2)]});return s.sort((r,o)=>+(o.severity==="issue")-+(r.severity==="issue")),Q(t,s,`All ${n.length} styles are referenced.`,r=>`${r} style${r===1?"":"s"} unreferenced or unconfirmed.`)}function ea(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=>Y(o.path,o.line))}));return Q(t,s,"No two styles share the same default declarations.",r=>`${r} group${r===1?"":"s"} of identical styles.`)}function ta(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 he(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:[Y(s.path,s.line)]}));return Q(t,n,`Every <${e.element}> goes through the component.`,s=>`${s} file${s===1?"":"s"} bypass the component.`)}function na(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 he(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:[Y(s.path,s.line)]}));return Q(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 Q(t,[],"Every style is named in written guidance.",()=>"");let s=e.variants.filter(r=>r.element&&n.undocumented.includes(r.title));return Q(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=>Y(r.path,r.line))}],"",r=>`${r} finding${r===1?"":"s"}.`)}function qs(e){return[zi(e),Gi(e),Qi(e),ea(e),Hi(e),Yi(e),ta(e),na(e),sa(e)]}var ra=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,Ys=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,oa=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),ia=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),aa=new Set(["classNames","classnames","clsx","cn","cx"]),la=/^(?:ref|key|style|dangerouslySetInnerHTML)$/i;function tr(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
37
|
-
`&&n++;return n}function
|
|
38
|
-
`)}function
|
|
33
|
+
`}var Rs=`
|
|
34
|
+
Choose 1\u20133, or press Enter to quit: `,As=`
|
|
35
|
+
Would you like to run a (c) check, (b) baseline, or (q) quit? `,_s=`
|
|
36
|
+
You have no baseline. Would you like to run it? (b) baseline, (q) quit: `;function Es(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 Is(e){let t=e.trim().toLowerCase();return!t||t==="q"||t==="quit"||t==="n"||t==="no"?"quit":t==="b"||t==="baseline"||t==="y"||t==="yes"?"baseline":null}function js(e){let t=e.trim().toLowerCase();if(!t)return"quit";let n=Number(t);return Number.isInteger(n)&&n>=1&&n<=Ae.length?Ae[n-1]:Ae.find(s=>s.name===t)??null}var ki="2025-06-18",st="Check before you finish, fix to the spec when you can, ask for an exception with a reason when you cannot, and never edit Gruum's generated files to make a check pass.",rt={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. ${st}`,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. ${st}`,gruum_request_exception:`Ask a designer to allow one drift item the spec has no button for. Send the drift id from gruum_check_buttons and a reason. ${st}`,gruum_exception_status:`Pending, accepted, or rejected for this branch's exception requests. Pass an id to read one. ${st}`};function Ps(e){return[{name:"gruum_button_spec",description:rt.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:rt.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:rt.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:rt.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 ze(e,t){return{jsonrpc:"2.0",id:e,result:t}}function ot(e,t,n){return{jsonrpc:"2.0",id:e,error:{code:t,message:n}}}async function Ls(e,t,n){if(!e||typeof e!="object")return ot(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:ot(o,-32600,"Invalid request");let i=s.params??{};switch(s.method){case"initialize":{let a=i.protocolVersion;return ze(o,{protocolVersion:typeof a=="string"?a:ki,capabilities:{tools:{listChanged:!1}},serverInfo:n})}case"ping":return ze(o,{});case"tools/list":return ze(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 ot(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 ze(o,{content:[{type:"text",text:c.text}],isError:c.isError??!1})}catch(c){return ze(o,{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0})}}default:return r?null:ot(o,-32601,`Method not found: ${s.method}`)}}var vi=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,$i=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,Ci=/\.(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,Si=/(^|\/)\.gruum\//;function Ht(e){return!vi.test(`${e}/`)&&!Si.test(`${e}/`)}function Kt(e,t){return $i.test(e)||Ci.test(e)?!1:t<=3e5}function Os(e){let t=Math.min(e.length,8e3);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}var Ri=/\.(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 Ms(e){return Ri.test(e)}function Jt(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function Zt(e,t){let n=Jt(t),s=e.replace(/\\/g,"/");return n?s.startsWith(`${n}/`)?s.slice(n.length+1):null:s}function Ns(e,t,n){let s=new Map(e);for(let r of t){let o=Zt(r.path,n);o===null||!Ht(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):Kt(o,r.content.length)&&s.set(o,r.content))}return s}function Ts(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 it(e){let t=/^(?:git@|ssh:\/\/git@|https?:\/\/(?:[^@/]+@)?)github\.com[:/]([^/\s]+)\/([^/\s]+?)(?:\.git)?\/?$/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}var Ds=e=>e.replace(/\\(.)/g,"$1");function Ai(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 Xt=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function Fs(e){let t=[];Xt.lastIndex=0;let n=0;for(;n<e.length;){Xt.lastIndex=n;let s=Xt.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:Ds(s[1])});else if(s[2]!==void 0)t.push({kind:"id",raw:r,name:Ds(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=Ai(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=Fs(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 We(e){return e.map(t=>t.raw).join("")}function Ge(e){return e.map((t,n)=>{let s=We(t.simples);return n===0?s:t.combinator===" "?` ${s}`:` ${t.combinator} ${s}`}).join("")}function z(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 Us=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Vs(e,t){let n=e.toLowerCase();return t.some(s=>n.includes(s.toLowerCase()))}function qt(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"&&Us(r.name).some(o=>s.has(o)))}var _i=new Set(["html","body"]),Ei=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function lt(e,t){for(let n of e)switch(n.kind){case"tag":if(t.elements.includes(n.name))return!0;break;case"class":if(Vs(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&&Vs(n.value,t.classKeywords))return!0;break;case"pseudo":if((n.name==="is"||n.name==="where")&&n.args){let s=z(n.args).map(q);if(s.length>0&&s.every(r=>r!==null&<(r[r.length-1].simples,t)))return!0}break;default:break}return!1}function zs(e){return e.some(n=>n.kind==="universal")?e.length===1:e.some(n=>n.kind==="tag"&&_i.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 Ws(e){return e.some(t=>t.kind==="tag"&&Ei.has(t.name))}var at=["hover","focus","active","selected","current","loading","disabled"],Ii={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"},ji={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},Pi={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"},Li=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),Bs=e=>Ii[e.toLowerCase()]??e.toLowerCase(),ae={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function Gs(e){if(e.kind==="pseudo"){let t=ji[e.name];if(!t)return null;let n=ae[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:Bs(e.value),marker:{classes:[],attrs:{"data-state":e.value}}};let t=Pi[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]:Li.has(e.name.toLowerCase())?e.name:null;return n?{state:Bs(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function Oi(e){return e.kind!=="pseudo"||e.name!=="not"||!e.args?!1:z(e.args).every(t=>{let n=Fs(t);return n!==null&&n.every(s=>Gs(s)!==null)})}function ct(e){let t=[],n=new Map;for(let o of e){if(Oi(o))continue;let i=Gs(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=at.indexOf(e);return t===-1?at.length:t}function me(e){return e.length?e.join(" + "):"default"}function Yt(e){return e.replace(/:hover\b/g,`.${ae.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${ae.focus}`).replace(/:active\b/g,`.${ae.active}`)}var Mi=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"]),Ni=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"]),Ti=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 He(e){let t=e.toLowerCase();return Mi.has(t)?"paint":Ni.has(t)?"layout":Ti.has(t)?"hint":"box"}var Di={shadow:/^box-shadow$/,cursor:/^cursor$/,rounded:/^border(?:-[a-z]+)*-radius$/,radius:/^border(?:-[a-z]+)*-radius$/};function Hs(e,t){let n=e.filter(o=>o.kind==="class");if(n.length!==1||e.length!==1)return!1;let s=Us(n[0].name)[0],r=s?Di[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var ku={hover:{classes:[ae.hover],attrs:{}},focus:{classes:[ae.focus],attrs:{}},active:{classes:[ae.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 Vi="data-gs-sheet";function Js(e){return`[${Vi}="${e.replace(/["\\]/g,"")}"]`}function Ks(e){return/\.module\.[a-z]+$/i.test(e)}var Bi=new Set(["button","a","div","span","input","summary","label"]);function he(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 Fi(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 ut(e,t){let n=q(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>Fi(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(!Bi.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 Qt(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function pt(e){let t=Qt(e,"display");if(/^none\b/i.test(t))return"display: none";let n=Qt(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=Qt(e,"opacity");return/^(0|0\.0+)$/.test(s)?"opacity: 0":null}function Zs(e,t){return e===t||!Ks(e)&&!Ks(t)}function ne(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 Ui=40,Y=(e,t)=>({path:e,line:t});function Q(e,t,n,s){return{...e,status:t.length===0?"ok":"attention",summary:t.length===0?n:s(t.length),findings:t.slice(0,Ui)}}function be(e,t){return{...e,status:"na",summary:t,findings:[]}}var en=e=>e.state.split(" + ");function er(e,t){if(!e.element||!t.element||e!==t&&!Zs(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 tr(e,t){return t.filter(n=>er(n,e)).flatMap(n=>n.states)}function zi(e,t,n){return tr(e,t).some(s=>en(s).includes(n))||t.filter(s=>er(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var Wi=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function Gi(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 be(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of Wi){let i=n.filter(a=>!zi(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=>Y(a.path,a.line))})}return Q(t,s,"Every style has hover, focus, disabled, and active rules.",r=>`${r} state${r===1?"":"s"} missing on some styles.`)}var Xs=new Set(["outline","outline-style","outline-width"]),qs=/^(?:none|0|0px)(?:\s+(?:none|0|0px))*$/i,Hi=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function Ki(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 be(t,"No styles that can be drawn on their own.");let s=[];for(let r of n){let o=tr(r,e.variants),i=o.filter(l=>{let c=en(l);return c.includes("default")||c.includes("focus")}).flatMap(l=>l.declarations.map(c=>({s:l,d:c}))).find(({d:l})=>Xs.has(l.property)&&qs.test(l.value.replace(/\s*!important/i,"")));!i||o.filter(l=>en(l).includes("focus")).some(l=>l.declarations.some(c=>Hi.test(c.property)&&!(Xs.has(c.property)&&qs.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:[Y(r.path,i.s.line)]})}return Q(t,s,"No style removes the outline without a focus replacement.",r=>`${r} style${r===1?"":"s"} lose the focus indicator.`)}function Ji(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 be(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=>Y(i.path,i.line))}});return Q(t,s,`All ${e.tokens.length} tokens read are defined.`,r=>`${r} token${r===1?"":"s"} with no definition.`)}var Zi=/var\((?:[^()]|\([^()]*\))*\)/g,Ys=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,Xi=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,qi=/(?<![\w.-])(\d+(?:\.\d+)?)px\b/g;function Qs(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 tn(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?tn(i,t,n+1):o!==void 0?tn(o.trim(),t,n+1):s})}var Yi=[[/^(?: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 Qi(e,t){if(!t)return null;let n=Yi.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function ea(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=tn(i,e.tokenValues).trim();if(new RegExp(`^(?:${Ys.source})$`,"i").test(a)){let l=Qs(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 be(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(Zi," ");for(let m of f.matchAll(Ys)){let h=n.get(Qs(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(Xi.test(u.property))for(let m of f.matchAll(qi)){let h=Qi(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:[Y(o.path,a.line)]})}return Q(t,r,`No ${e.noun} style hard-codes a value a token already has.`,o=>`${o} style${o===1?"":"s"} hard-code values.`)}function ta(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 be(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:[Y(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:[Y(r.path,r.line),...r.usage.files.slice(0,2)]});return s.sort((r,o)=>+(o.severity==="issue")-+(r.severity==="issue")),Q(t,s,`All ${n.length} styles are referenced.`,r=>`${r} style${r===1?"":"s"} unreferenced or unconfirmed.`)}function na(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=>Y(o.path,o.line))}));return Q(t,s,"No two styles share the same default declarations.",r=>`${r} group${r===1?"":"s"} of identical styles.`)}function sa(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 be(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:[Y(s.path,s.line)]}));return Q(t,n,`Every <${e.element}> goes through the component.`,s=>`${s} file${s===1?"":"s"} bypass the component.`)}function ra(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 be(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:[Y(s.path,s.line)]}));return Q(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 oa(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 Q(t,[],"Every style is named in written guidance.",()=>"");let s=e.variants.filter(r=>r.element&&n.undocumented.includes(r.title));return Q(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=>Y(r.path,r.line))}],"",r=>`${r} finding${r===1?"":"s"}.`)}function nr(e){return[Gi(e),Ki(e),ta(e),na(e),Ji(e),ea(e),sa(e),ra(e),oa(e)]}var ia=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,sr=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,aa=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),la=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),ca=new Set(["classNames","classnames","clsx","cn","cx"]),ua=/^(?:ref|key|style|dangerouslySetInnerHTML)$/i;function ir(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
37
|
+
`&&n++;return n}function rr(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ar(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(`
|
|
38
|
+
`)}function pa(e,t,n){let s=Math.max(0,Math.min(t,e.length)),r=Math.max(s,Math.min(n,e.length)),o=ir(e,s),i=e.slice(s,r).split(`
|
|
39
39
|
`).slice(0,12),a=e.slice(s,r).split(`
|
|
40
|
-
`).length>12;return{source:
|
|
41
|
-
\u2026`:""),startLine:o}}function
|
|
42
|
-
`),r=Math.max(0,n-1);return{source:nr(s.slice(r,r+12)),startLine:r+1}}function er(e,t){return{kind:"other",...ua(e,t)}}function gt(e,t){let n=Ys.exec(e.slice(t));if(!n)return null;let s=n[1],r=n[2]??"",o=t+n[0].length;if(/\/\s*$/.test(r)||oa.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=Ys.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 nn(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=gt(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 sr(e){return e.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function _e(e){return e.split(/\s+/).filter(Boolean)}function ae(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 rr(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 ft(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var tn=/^[A-Za-z_$][\w$]*$/;function sn(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 rn(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 or(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)?Ee(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function Ee(e,t,n=0){if(n>4)return null;let s=rn(e);for(let c of["||","&&"]){let u=sn(s,c);if(u<0)continue;let f=Ee(s.slice(0,u),t,n+1),m=Ee(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=or(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 ir(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 Ae(e,t=ft()){let n=rn(e);if(!n)return{classes:[],dynamic:!1};let s=ir(n);if(s){let c=Ee(s.condition,t);return c===null?{classes:[],dynamic:!0}:Ae(c?s.yes:s.no,t)}let r=sn(n,"&&");if(r>=0){let c=Ee(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?Ae(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:_e(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 $=c.slice(m+2,h).trim();if(tn.test($)){let w=t.values.get($);if(typeof w!="string")return{classes:[],dynamic:!0};t.strings.add($);let k=/[\w-]*$/.exec(u)?.[0];k&&t.prefixes.set($,k),u+=w}else{let w=Ae($,t);if(w.dynamic)return{classes:[],dynamic:!0};u+=w.classes.join(" ")}f=h+1}return{classes:_e(u),dynamic:!1}}if(tn.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:_e(c),dynamic:!1})}let o=/^(?:styles?|classes|css|cls)\.([A-Za-z_]\w*)$/.exec(n);if(o)return{classes:[sr(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=Ae(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&&aa.has(l[1])){let c=[];for(let u of rr(l[2])){let f=Ae(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function mt(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=ae(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=ae(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 on(e,t){let n=mt(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:_e(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:Ae(n.expr,t):null}function ar(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:!la.test(e)&&!/^on/i.test(e)}function lr(e){let t={};for(let n of mt(e).list){if(!pa(n.name)||n.expr!==void 0)continue;let s=n.value??"";ar(n.name,s)&&(t[n.name]=s)}return t}var fa=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,da=new Set(["disabled","hidden"]);function pt(e,t,n=0){if(n>4)return null;let s=rn(e),r=ae(s,0);if(r&&r.end===s.length)return r.value;let o=ir(s);if(o){let l=Ee(o.condition,t);return l===null?null:pt(l?o.yes:o.no,t,n+1)}let i=sn(s,"||");if(i>=0){let l=pt(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:pt(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!tn.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=or(s,t,n);return l===null?null:l?"true":void 0}return t.values.has(s)?void 0:null}function ga(e,t){let n={};for(let s of mt(e).list){if(s.expr===void 0||!fa.test(s.name))continue;let r=pt(s.expr,t);if(r!=null){if(da.has(s.name)){r!=="false"&&(n[s.name]="");continue}ar(s.name,r)&&(n[s.name]=r)}}return n}function ma(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 dt(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=gt(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=dt(i.body,t+1);else if(ia.has(a)){let l=on(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${Qs(l.classes.join(" "))}"`:"",u=dt(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+=Qs(e.slice(s,o)),s=o}return n}function ha(e){let t=on(e.attrs);return!t||t.dynamic||t.classes.length===0?null:{tag:e.tag.toLowerCase(),classes:t.classes,attrs:lr(e.attrs)}}function cr(e,t){let n=[],s=t-1;for(;n.length<3&&s>=0;){let r=nn(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=ha(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var ba=8;function ya(e){let t=e.trim(),n=ae(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function xa(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=ae(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 rr(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=ya(a[3]);c!==null&&o.set(l,c)}return{values:o,end:s}}function ka(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=xa(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 ft(l.values,c)}return ft()}function wa(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 va(e,t,n,s){let r=ca(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let m=ma(e.slice(t.openStart,t.openEnd),n-t.openStart);return{kind:"component",...r,component:{tag:t.tag,...m}}}let o=ka(e,t);for(let[m,h]of wa(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=ft(new Map(o.values),o.aliases),c=$a(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:cr(e,t.openStart),bodyHtml:dt(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 $a(e,t){let n=on(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...lr(e),...ga(e,t)}}}function an(e,t,n,s){if(ra.test(s))return er(e,t);let r=nn(e,t);return r==="too-big"||!r?er(e,t):va(e,r,t,n)}function Ca(e){let t={},n=new Set,{list:s,spread:r}=mt(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 ur(e,t){let n=Ca(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(..._e(n.literals.className))),{draw:a?null:[...e.staticClasses,...o],selects:r,unknown:i}}function ln(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 Sa(e,t,n,s,r){for(let o of ln(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 pr(e,t,n,s,r,o){if(e.kind!=="component"||!e.component||r.length===0)return e;let i=Sa(s,t,e.component.tag,r,o);if(!i)return e;let a=nn(t,n),l=e.component.tag;if(!a||a==="too-big"||a.tag!==l&&a.tag!==i.component)return e;let c=ur(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:cr(t,a.openStart),bodyHtml:dt(a.body)}}:e}function ht(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 ln(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 $=gt(t,m);if(!$||$==="too-big"){u=m+f.length;continue}let w=ur(c,$.attrs);(w.selects.length||w.unknown.length)&&a.push({offset:m,component:l,selects:w.selects,unknown:w.unknown}),u=Math.max($.closeEnd,m+f.length)}}return a}function Ra(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 Aa(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=ae(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 _a(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=ae(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=ae(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 Ea(e,t,n,s){let r=[];for(let o of ln(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 Ia(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:sr(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(..._e(c.text));let l=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:i,prefixes:a,classNameProp:l}}function ja(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 fr(e,t,n){let s=[];for(let r of e){let o=Ea(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/),$=r.source.slice(f,f+u[0].length+(h<0?8e3:h)),w=Ra(r.source,f),k=0;for(;k<$.length;){if($[k]!=="<"||$[k+1]==="/"||$[k+1]==="!"){k++;continue}let g=gt($,k);if(!g||g==="too-big"){k++;continue}if(k=g.openEnd,/^[A-Z]/.test(g.tag))continue;let p=Aa(g.attrs);if(!p)continue;let d=Ia(p),y=d.prefixes.length?2:d.staticClasses.length?1:0,v=null,x=o.find(C=>new RegExp(`(?:^|[^\\w$])${C.local}\\s*\\(`).test(p));if(x){let C=p.search(new RegExp(`(?:^|[^\\w$])${x.local}\\s*\\(`)),j=p.indexOf("(",C),I=j<0?null:_a(p,j);if(I){y=3,v=ja(x.recipe,I,w,d.staticClasses,d.classNameProp);for(let A of d.prefixes)v.axes.push({prop:A.prop,values:[],prefix:A.prefix,defaultValue:w[A.prop]})}}!v&&(d.prefixes.length||d.staticClasses.length)&&(v={staticClasses:d.staticClasses,axes:d.prefixes.map(C=>({prop:C.prop,values:[],prefix:C.prefix,defaultValue:w[C.prop]})),compounds:[],classNameProp:d.classNameProp}),v&&(!c||y>c.score)&&(c={score:y,tag:g.tag.toLowerCase(),body:v})}}c&&s.push({component:i,path:r.path,rootTag:c.tag,...c.body})}}return s}var Pa=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,La=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,Oa=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),Ma=new Set(["icon","glyph","svg"]),Na=new Set(["label","text","title","caption"]),Ta=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function gr(e){let t=e.flatMap(Ta);return t.some(n=>Ma.has(n))?"icon":t.some(n=>Na.has(n))?"label":null}function Da(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(Pa)){let r=s[1];if(!Oa.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(La)].map(a=>a[1]??a[2]),i=gr(o);i&&n.push({index:s.index??0,role:i,tag:r.toLowerCase(),classes:o})}return n}function Va(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 z(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 Fa=["text","icon-start","icon-end","icon"],dr={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function Ba(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 Ie(e){return{role:e.role,tag:e.tag,classes:e.classes}}function mr(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(Da),o=r.filter(h=>h.role==="label"),i=r.filter(h=>h.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[Ie(a)],classes:[],attrs:{}});let l=new Set(o.flatMap(h=>h.classes.filter($=>gr([$])==="label"))),c=null,u=null;for(let h of i){let $=Ba(h,o),w=o.reduce((k,g)=>{let p=Math.abs(g.index-h.index);return!k||p<k.dist?{hit:g,dist:p}:k},null);$==="start"&&w&&!c&&(c={icon:h,label:w.hit}),$==="end"&&w&&!u&&(u={icon:h,label:w.hit})}c&&n("icon-start",{path:s.sheet,slots:[Ie(c.icon),Ie(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[Ie(u.label),Ie(u.icon)],classes:[],attrs:{}});let f=null;for(let h of s.rules)if(f=Va(h.selector,h.declarations,l),f)break;let m=c?.icon??u?.icon??i[0]??null;f&&m&&n("icon",{path:s.sheet,slots:[Ie(m)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:dr.text,sheets:t.get("text")??[]},...Fa.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:dr[s],sheets:t.get(s)??[]}))]}function Ua(e,t){if(!e)return t;let n=z(e);return z(t).flatMap(s=>n.map(r=>s.includes("&")?s.replaceAll("&",r):`${r} ${s}`)).join(", ")}var za=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function be(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===`
|
|
43
|
-
`&&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":
|
|
40
|
+
`).length>12;return{source:ar(i)+(a?`
|
|
41
|
+
\u2026`:""),startLine:o}}function fa(e,t){let n=ir(e,Math.max(0,t)),s=e.split(`
|
|
42
|
+
`),r=Math.max(0,n-1);return{source:ar(s.slice(r,r+12)),startLine:r+1}}function or(e,t){return{kind:"other",...fa(e,t)}}function mt(e,t){let n=sr.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=sr.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 sn(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=mt(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 lr(e){return e.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function Ee(e){return e.split(/\s+/).filter(Boolean)}function le(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 cr(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 dt(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var nn=/^[A-Za-z_$][\w$]*$/;function rn(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 on(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 ur(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)?Ie(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function Ie(e,t,n=0){if(n>4)return null;let s=on(e);for(let c of["||","&&"]){let u=rn(s,c);if(u<0)continue;let f=Ie(s.slice(0,u),t,n+1),m=Ie(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=ur(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 pr(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 _e(e,t=dt()){let n=on(e);if(!n)return{classes:[],dynamic:!1};let s=pr(n);if(s){let c=Ie(s.condition,t);return c===null?{classes:[],dynamic:!0}:_e(c?s.yes:s.no,t)}let r=rn(n,"&&");if(r>=0){let c=Ie(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?_e(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:Ee(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 $=c.slice(m+2,h).trim();if(nn.test($)){let k=t.values.get($);if(typeof k!="string")return{classes:[],dynamic:!0};t.strings.add($);let w=/[\w-]*$/.exec(u)?.[0];w&&t.prefixes.set($,w),u+=k}else{let k=_e($,t);if(k.dynamic)return{classes:[],dynamic:!0};u+=k.classes.join(" ")}f=h+1}return{classes:Ee(u),dynamic:!1}}if(nn.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:Ee(c),dynamic:!1})}let o=/^(?:styles?|classes|css|cls)\.([A-Za-z_]\w*)$/.exec(n);if(o)return{classes:[lr(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=_e(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&&ca.has(l[1])){let c=[];for(let u of cr(l[2])){let f=_e(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function ht(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=le(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=le(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 an(e,t){let n=ht(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:Ee(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:_e(n.expr,t):null}function fr(e,t){return/[<>]/.test(t)?!1:e==="href"||e==="src"||e==="action"?/^(?:https?:|mailto:|\/|#)/i.test(t):!0}function da(e){return e==="class"||e==="className"?!1:!ua.test(e)&&!/^on/i.test(e)}function dr(e){let t={};for(let n of ht(e).list){if(!da(n.name)||n.expr!==void 0)continue;let s=n.value??"";fr(n.name,s)&&(t[n.name]=s)}return t}var ga=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,ma=new Set(["disabled","hidden"]);function ft(e,t,n=0){if(n>4)return null;let s=on(e),r=le(s,0);if(r&&r.end===s.length)return r.value;let o=pr(s);if(o){let l=Ie(o.condition,t);return l===null?null:ft(l?o.yes:o.no,t,n+1)}let i=rn(s,"||");if(i>=0){let l=ft(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:ft(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!nn.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=ur(s,t,n);return l===null?null:l?"true":void 0}return t.values.has(s)?void 0:null}function ha(e,t){let n={};for(let s of ht(e).list){if(s.expr===void 0||!ga.test(s.name))continue;let r=ft(s.expr,t);if(r!=null){if(ma.has(s.name)){r!=="false"&&(n[s.name]="");continue}fr(s.name,r)&&(n[s.name]=r)}}return n}function ba(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 gt(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=mt(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=gt(i.body,t+1);else if(la.has(a)){let l=an(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${rr(l.classes.join(" "))}"`:"",u=gt(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+=rr(e.slice(s,o)),s=o}return n}function ya(e){let t=an(e.attrs);return!t||t.dynamic||t.classes.length===0?null:{tag:e.tag.toLowerCase(),classes:t.classes,attrs:dr(e.attrs)}}function gr(e,t){let n=[],s=t-1;for(;n.length<3&&s>=0;){let r=sn(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=ya(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var xa=8;function wa(e){let t=e.trim(),n=le(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function ka(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=le(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 cr(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=wa(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=ka(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 dt(l.values,c)}return dt()}function $a(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 Ca(e,t,n,s){let r=pa(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let m=ba(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 $a(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=dt(new Map(o.values),o.aliases),c=Sa(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:gr(e,t.openStart),bodyHtml:gt(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,xa).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 Sa(e,t){let n=an(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...dr(e),...ha(e,t)}}}function ln(e,t,n,s){if(ia.test(s))return or(e,t);let r=sn(e,t);return r==="too-big"||!r?or(e,t):Ca(e,r,t,n)}function Ra(e){let t={},n=new Set,{list:s,spread:r}=ht(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 mr(e,t){let n=Ra(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(...Ee(n.literals.className))),{draw:a?null:[...e.staticClasses,...o],selects:r,unknown:i}}function cn(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 Aa(e,t,n,s,r){for(let o of cn(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 hr(e,t,n,s,r,o){if(e.kind!=="component"||!e.component||r.length===0)return e;let i=Aa(s,t,e.component.tag,r,o);if(!i)return e;let a=sn(t,n),l=e.component.tag;if(!a||a==="too-big"||a.tag!==l&&a.tag!==i.component)return e;let c=mr(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:gr(t,a.openStart),bodyHtml:gt(a.body)}}:e}function bt(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 cn(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 $=mt(t,m);if(!$||$==="too-big"){u=m+f.length;continue}let k=mr(c,$.attrs);(k.selects.length||k.unknown.length)&&a.push({offset:m,component:l,selects:k.selects,unknown:k.unknown}),u=Math.max($.closeEnd,m+f.length)}}return a}function _a(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 Ea(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=le(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 Ia(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=le(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=le(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 ja(e,t,n,s){let r=[];for(let o of cn(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 Pa(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:lr(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(...Ee(c.text));let l=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:i,prefixes:a,classNameProp:l}}function La(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 br(e,t,n){let s=[];for(let r of e){let o=ja(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/),$=r.source.slice(f,f+u[0].length+(h<0?8e3:h)),k=_a(r.source,f),w=0;for(;w<$.length;){if($[w]!=="<"||$[w+1]==="/"||$[w+1]==="!"){w++;continue}let g=mt($,w);if(!g||g==="too-big"){w++;continue}if(w=g.openEnd,/^[A-Z]/.test(g.tag))continue;let p=Ea(g.attrs);if(!p)continue;let d=Pa(p),y=d.prefixes.length?2:d.staticClasses.length?1:0,v=null,x=o.find(C=>new RegExp(`(?:^|[^\\w$])${C.local}\\s*\\(`).test(p));if(x){let C=p.search(new RegExp(`(?:^|[^\\w$])${x.local}\\s*\\(`)),j=p.indexOf("(",C),I=j<0?null:Ia(p,j);if(I){y=3,v=La(x.recipe,I,k,d.staticClasses,d.classNameProp);for(let A of d.prefixes)v.axes.push({prop:A.prop,values:[],prefix:A.prefix,defaultValue:k[A.prop]})}}!v&&(d.prefixes.length||d.staticClasses.length)&&(v={staticClasses:d.staticClasses,axes:d.prefixes.map(C=>({prop:C.prop,values:[],prefix:C.prefix,defaultValue:k[C.prop]})),compounds:[],classNameProp:d.classNameProp}),v&&(!c||y>c.score)&&(c={score:y,tag:g.tag.toLowerCase(),body:v})}}c&&s.push({component:i,path:r.path,rootTag:c.tag,...c.body})}}return s}var Oa=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,Ma=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,Na=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),Ta=new Set(["icon","glyph","svg"]),Da=new Set(["label","text","title","caption"]),Va=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function xr(e){let t=e.flatMap(Va);return t.some(n=>Ta.has(n))?"icon":t.some(n=>Da.has(n))?"label":null}function Ba(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(Oa)){let r=s[1];if(!Na.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(Ma)].map(a=>a[1]??a[2]),i=xr(o);i&&n.push({index:s.index??0,role:i,tag:r.toLowerCase(),classes:o})}return n}function Fa(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 z(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 Ua=["text","icon-start","icon-end","icon"],yr={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function za(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 je(e){return{role:e.role,tag:e.tag,classes:e.classes}}function wr(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(Ba),o=r.filter(h=>h.role==="label"),i=r.filter(h=>h.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[je(a)],classes:[],attrs:{}});let l=new Set(o.flatMap(h=>h.classes.filter($=>xr([$])==="label"))),c=null,u=null;for(let h of i){let $=za(h,o),k=o.reduce((w,g)=>{let p=Math.abs(g.index-h.index);return!w||p<w.dist?{hit:g,dist:p}:w},null);$==="start"&&k&&!c&&(c={icon:h,label:k.hit}),$==="end"&&k&&!u&&(u={icon:h,label:k.hit})}c&&n("icon-start",{path:s.sheet,slots:[je(c.icon),je(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[je(u.label),je(u.icon)],classes:[],attrs:{}});let f=null;for(let h of s.rules)if(f=Fa(h.selector,h.declarations,l),f)break;let m=c?.icon??u?.icon??i[0]??null;f&&m&&n("icon",{path:s.sheet,slots:[je(m)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:yr.text,sheets:t.get("text")??[]},...Ua.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:yr[s],sheets:t.get(s)??[]}))]}function Wa(e,t){if(!e)return t;let n=z(e);return z(t).flatMap(s=>n.map(r=>s.includes("&")?s.replaceAll("&",r):`${r} ${s}`)).join(", ")}var Ga=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function ye(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===`
|
|
43
|
+
`&&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":Wa(m?.resolved??null,l),isAt:f,skip:(c?.skip??!1)||f&&Ga.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 ce(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 Ha=25,Ka=12,kr=700,Ja=/\b(?:must(?: not)?|never|always|should(?: not|n't)?|do not|don't|avoid|prefer|forbidden|not allowed|no more than)\b/i,se=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Za(e){let t=e.split(`
|
|
44
44
|
`),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(`
|
|
45
|
-
`).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 Ja(e,t){let n=e.map(se).join("|"),s=e.map(r=>se(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 Za(e,t){let n=t.map(se).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(me(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-])${se(c)}(?![\\w-])`:`(?:\\.|["'\`])${se(c)}(?![\\w-])`))}if(!r.title.includes(" + ")){let l=r.title.toLowerCase().split(/\s+/).map(se).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${se(r.axis)}\\s*[=:]\\s*\\{?\\s*["'\`]${se(r.title.toLowerCase())}["'\`]`,"i")),i.heading=r.title.toLowerCase()}s.set(r.title,i)}return[...s.values()]}function Xa(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(se).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function qa(e){return e.length>hr?`${e.slice(0,hr).trimEnd()}\u2026`:e}function br(e,t,n,s){let r=Ja(n.classKeywords,n.prose),o=Za(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 Ka(f)){if(!r.test(h.text)&&!h.headings.some(k=>r.test(k)))continue;let $=h.headings.length?Xa(h.headings[h.headings.length-1],n.classKeywords):"",w=o.filter(k=>k.tests.some(g=>g.test(h.text))||$!==""&&k.heading===$).map(k=>k.title);for(let k of w)i.add(k);m.push({path:u.path,line:h.start,endLine:h.end,headings:h.headings,text:qa(h.text),rule:Ha.test(h.text),styles:w})}m.length!==0&&a.push({path:u.path,kind:u.kind,passages:m.slice(0,Ga),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,Wa).map(({rules:u,...f})=>f),documented:[...i].sort(),undocumented:[...c.keys()].filter(u=>!i.has(u))}}var yr=new Set(["tone","size","variant","kind","type","style","theme","color","colour","appearance","intent","emphasis","shape","level"]),Ya=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),Qa={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},el=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function un(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 tl(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function cn(e){let t=e.map(n=>el.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function je(e,t){let n=un(e).filter(r=>!t.has(r)&&!Ya.has(r)),s=null;return n.length>1&&yr.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>Qa[r]??[r]),axis:s}}var xr=/\.((?:\\.|[\w-])+)/g,nl=/\[\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 un(s).some(a=>t.has(a))||un(r).some(a=>t.has(a))?je(s,t).words:[]}function rl(e,t){let n=[];for(let s of e.split(/[\s>+~]+/).filter(Boolean)){let r=[...s.matchAll(xr)].map(o=>o[1]);if(r.length)for(let o of r)n.push(...je(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...je(o,t).words)}}return n}function Pe(e,t){let n=tl(t),s=me(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(xr)].map(u=>je(u[1],n));for(let u of o.matchAll(nl)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!yr.has(f))continue;let m=u[2]??u[3]??u[4]??"",h=je(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=>cn(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:cn(c),axis:null};if(e.base){let u=ol(e.path,n);return u.length>0?{title:`${cn(u)} Base`,axis:null}:{title:"Base",axis:null}}return{title:"Unnamed",axis:null}}function ol(e,t){let n=e.split("/").pop()??"";if(!/\.module\.[a-z]+$/i.test(n))return[];let s=n.replace(/\.module\.[a-z]+$/i,"");return je(s,t).words}var il=60;function We(e,t,n){let s=q(e);if(!s)return null;let r=s.length-1,o=s[r].simples;if(Ds(o)||Xt(o,t))return null;if(at(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(at(a,t)&&!Xt(a,t))return{compounds:s,at:i}}return!n||r===0&&Vs(o)?null:{compounds:s,at:0}}function kr(e,t,n){return Ue([...e,{combinator:e.length?t.combinator:null,simples:n}])}function wr(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 al(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>wr(n,s)))}function ll(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 cl(e,t){for(let n of t.classes)e.classes.includes(n)||e.classes.push(n);Object.assign(e.attrs,t.attrs)}function vr(e){let t=new Set(e.map(n=>ze(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 ul(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)===it.length);return r.length===1?r[0]:null}function pn(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 $r(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 z(g.selector)){let d=We(p,n,s);if(!d)continue;let{compounds:y,at:v}=d,x=y[v],C=lt(x.simples);if(C.identity.length===0)continue;let j=y.slice(0,v),I=kr(j,x,C.identity),A=ge(C.states);if(v<y.length-1){i.push({hostKey:I,part:{selector:Ue(y),path:e,line:g.line,state:A}});continue}if(Bs(C.identity,g.declarations))continue;let R=o.get(I);if(!R){if(o.size>=il)continue;R={key:I,prefix:j,identity:C.identity,line:g.line,states:[],modifiers:[],contexts:[],parts:[],movedInto:null},o.set(I,R)}let P=R.states.find(T=>T.state===A&&T.context===g.context);P||(P={state:A,context:g.context,line:g.line,declarations:[]},C.states.length&&(P.marker={classes:[],attrs:{}}),R.states.push(P)),P.marker&&cl(P.marker,C.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=>ut(x.declarations)),v=d.every(x=>ze(x.property)==="hint");(y||v)&&o.delete(g)}let a=new Map;for(let g of o.values()){let p=Be(g.identity);a.set(p,[...a.get(p)??[],g])}for(let g of a.values()){let p=g.map(x=>ul(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 v=[...y.classes.map(x=>({kind:"class",raw:`.${x}`,name:x})),...Object.entries(y.attrs).map(([x,C])=>({kind:"attr",raw:`[${x}="${C}"]`,name:x,op:"=",value:C}))];for(let x of g){let C=[...x.identity,...v],j={combinator:x.prefix.length?" ":null,simples:C},I=kr(x.prefix,j,C);for(let A of x.states){let R=A.state.split(" + ").filter(P=>P!==d);if(A.state=ge(R),R.length===0)delete A.marker;else if(A.marker){A.marker.classes=A.marker.classes.filter(P=>!y.classes.includes(P));for(let P of Object.keys(y.attrs))delete A.marker.attrs[P]}}o.delete(x.key),o.set(I,{...x,key:I,identity:C})}}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=>ll(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()],$=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 w=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 w){let p=h.filter(y=>y!==g&&y!==u&&y.prefix.length===0&&al(y.identity,g.identity));if(p.length===0)continue;p.sort((y,v)=>v.identity.length-y.identity.length||c(v)-c(y)||y.line-v.line);let d=$(p[0].key);d&&d!==g&&m(g,d,"modifiers")}for(let{hostKey:g,part:p}of i){let d=$(g)??(s?u:null);d&&o.has(d.key)&&d.parts.push(p)}let k=g=>{let p=g===u,d=ct(g.key,f);return{...Pe({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:pn(g.states),modifiers:g.modifiers.length?g.modifiers.map(y=>{let v=y.identity.filter(x=>!g.identity.some(C=>wr(C,x)));return{title:Pe({selector:v.map(x=>x.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:y.key,path:e,line:y.line,element:ct(y.key,f),usage:{status:"unknown",files:[],fileCount:0},states:pn(y.states)}}):void 0,contexts:g.contexts.length?g.contexts.map(y=>{let v=vr(y.states.flatMap(x=>x.declarations));return{selector:y.key,path:e,line:y.line,role:v,element:v==="override"?ct(y.key,f):null,states:pn(y.states)}}):void 0,parts:g.parts.length?g.parts:void 0}};return[...o.values()].map(k)}function Cr(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:Be(l),bareTag:!l.some(f=>f.kind==="class"||f.kind==="attr"||f.kind==="id"),bare:u.length&&u.length<l.length?Be(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=vr(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 Sr(e){let t=e.lastIndexOf("-");return t<=0?null:pl[e.slice(0,t)]?.[e.slice(t+1)]??null}var E=(e,t)=>({property:e,value:t});function hn(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 mn(e){let t=hn(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 fl(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 Rr(e,t){return{full:"100%",screen:t==="w"?"100vw":"100vh",auto:"auto",fit:"fit-content",min:"min-content",max:"max-content"}[e]??fl(e)??hn(e)??mn(e)}var dl={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"}},gl={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},ml={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},hl={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"},yl={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function fn(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=Sr(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 xl(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 dn(){return E("box-shadow","0 0 0 var(--gs-ring-w, 3px) var(--gs-ring-c, currentColor)")}var kl={flex:"flex","inline-flex":"inline-flex",block:"block","inline-block":"inline-block",inline:"inline",grid:"grid","inline-grid":"inline-grid",hidden:"none",contents:"contents"},gn={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch",between:"space-between",around:"space-around",evenly:"space-evenly"};function Ar(e){let t=e.startsWith("-"),n=t?e.slice(1):e,{body:s,opacity:r}=xl(n),o=kl[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 R=i[1]==="col"?"column":i[1]==="col-reverse"?"column-reverse":i[1];return[E("flex-direction",R)]}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",gn[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[E("justify-content",gn[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[E("align-self",c[1]==="auto"?"auto":gn[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=dl[s.replace(/^text-/,"")];if(s.startsWith("text-")&&m&&!r&&!t)return[E("font-size",m.size),E("line-height",m.leading)];let h=gl[s.replace(/^font-/,"")];if(s.startsWith("font-")&&h&&!r)return[E("font-weight",h)];if(s.startsWith("leading-")&&!r){let R=s.slice(8),T=ml[R]??mn(R);if(T)return[E("line-height",T)]}let $=/^cursor-(pointer|default|not-allowed|wait|text|move)$/.exec(s);if($)return[E("cursor",$[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 w=/^opacity-(\d+)$/.exec(s);if(w&&!t)return[E("opacity",String(Number(w[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 k=/^duration-(\d+)$/.exec(s);if(k)return[E("transition-duration",`${k[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 R=s==="shadow"?"":s.slice(7),P=bl[R];if(P)return[E("box-shadow",P)]}if(s==="ring"||/^ring(?:-(?:0|1|2|4|8))?$/.test(s)){let R=s==="ring"?"":s.slice(5),P=yl[R];if(P)return[E("--gs-ring-w",P),dn()]}if(s.startsWith("ring-")&&r===null){let R=fn(s.slice(5),null);if(R)return[E("--gs-ring-c",R),dn()]}if(s.startsWith("ring-")&&r){let R=fn(s.slice(5),r);if(R)return[E("--gs-ring-c",R),dn()]}let d=s==="rounded"?"":s.startsWith("rounded-")?s.slice(8):null;if(d!==null&&!t){let R=/^(t|r|b|l|s|e|tl|tr|bl|br|ss|se)(?:-(.+))?$/.exec(d),P=R?R[2]??"":d,T=hl[P];if(!T)return null;if(!R)return[E("border-radius",T)];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"]}[R[1]];return X?X.map(Xe=>E(Xe,T)):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 v=/^border-(solid|dashed|dotted|double|none|hidden)$/.exec(s);if(v)return[E("border-style",v[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),C=x?.[1],j=x?.[2];if(C&&j&&!r){let R=C==="w"||C==="min-w"||C==="max-w"?Rr(j,"w"):C==="h"||C==="min-h"||C==="max-h"?Rr(j,"h"):mn(j);if(!R)return null;let P=t?R==="0"?"0":`-${R}`:R,G={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"]}[C];return G?G.map(X=>E(X,P)):null}let I={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[R,P]of Object.entries(I))if(s===R||s.startsWith(`${R}-`)){let T=s===R?"":s.slice(R.length+1);if(!T||/^(?:gradient|clip|ellipsis|wrap|nowrap|balance|pretty|opacity)/.test(T))return null;if(R==="text"&&!t){let X=hn(T);if(X)return[E("font-size",X)]}let G=fn(T,r);return!G||t?null:[E(P,G)]}let A=/^\[([a-z-]+):(.+)\]$/i.exec(s);if(A&&!t&&!r){let R=A[1].toLowerCase(),P=A[2].replace(/_/g," ").trim();if(/^[a-z][\w-]*$/.test(R)&&P&&!/[<>]/.test(P))return[E(R,P)]}return null}var wl=48,vl={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},$l=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function ce(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
46
|
-
`&&n++;return n}function
|
|
47
|
-
`: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
|
|
48
|
-
`: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
|
|
45
|
+
`).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 Xa(e,t){let n=e.map(se).join("|"),s=e.map(r=>se(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 qa(e,t){let n=t.map(se).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(he(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-])${se(c)}(?![\\w-])`:`(?:\\.|["'\`])${se(c)}(?![\\w-])`))}if(!r.title.includes(" + ")){let l=r.title.toLowerCase().split(/\s+/).map(se).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${se(r.axis)}\\s*[=:]\\s*\\{?\\s*["'\`]${se(r.title.toLowerCase())}["'\`]`,"i")),i.heading=r.title.toLowerCase()}s.set(r.title,i)}return[...s.values()]}function Ya(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(se).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function Qa(e){return e.length>kr?`${e.slice(0,kr).trimEnd()}\u2026`:e}function vr(e,t,n,s){let r=Xa(n.classKeywords,n.prose),o=qa(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 Za(f)){if(!r.test(h.text)&&!h.headings.some(w=>r.test(w)))continue;let $=h.headings.length?Ya(h.headings[h.headings.length-1],n.classKeywords):"",k=o.filter(w=>w.tests.some(g=>g.test(h.text))||$!==""&&w.heading===$).map(w=>w.title);for(let w of k)i.add(w);m.push({path:u.path,line:h.start,endLine:h.end,headings:h.headings,text:Qa(h.text),rule:Ja.test(h.text),styles:k})}m.length!==0&&a.push({path:u.path,kind:u.kind,passages:m.slice(0,Ka),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,Ha).map(({rules:u,...f})=>f),documented:[...i].sort(),undocumented:[...c.keys()].filter(u=>!i.has(u))}}var $r=new Set(["tone","size","variant","kind","type","style","theme","color","colour","appearance","intent","emphasis","shape","level"]),el=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),tl={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},nl=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function pn(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 sl(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function un(e){let t=e.map(n=>nl.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function Pe(e,t){let n=pn(e).filter(r=>!t.has(r)&&!el.has(r)),s=null;return n.length>1&&$r.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>tl[r]??[r]),axis:s}}var Cr=/\.((?:\\.|[\w-])+)/g,rl=/\[\s*([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*))\s*\]/g;function ol(e,t){let n=e.split("/"),s=(n.pop()??"").replace(/(\.module)?\.[a-z]+$/i,""),r=n.pop()??"";return pn(s).some(a=>t.has(a))||pn(r).some(a=>t.has(a))?Pe(s,t).words:[]}function il(e,t){let n=[];for(let s of e.split(/[\s>+~]+/).filter(Boolean)){let r=[...s.matchAll(Cr)].map(o=>o[1]);if(r.length)for(let o of r)n.push(...Pe(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...Pe(o,t).words)}}return n}function Le(e,t){let n=sl(t),s=he(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(Cr)].map(u=>Pe(u[1],n));for(let u of o.matchAll(rl)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!$r.has(f))continue;let m=u[2]??u[3]??u[4]??"",h=Pe(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=>un(u.words)).join(" + "),axis:a.length===1?a[0].axis:null};let l=il(r,n);if(l.length>0)return{title:`In ${l.join(" ")}`,axis:null};let c=ol(e.path,n);if(c.length>0)return{title:un(c),axis:null};if(e.base){let u=al(e.path,n);return u.length>0?{title:`${un(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 Pe(s,t).words}var ll=60;function Ke(e,t,n){let s=q(e);if(!s)return null;let r=s.length-1,o=s[r].simples;if(zs(o)||qt(o,t))return null;if(lt(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(lt(a,t)&&!qt(a,t))return{compounds:s,at:i}}return!n||r===0&&Ws(o)?null:{compounds:s,at:0}}function Sr(e,t,n){return Ge([...e,{combinator:e.length?t.combinator:null,simples:n}])}function Rr(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 cl(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>Rr(n,s)))}function ul(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 pl(e,t){for(let n of t.classes)e.classes.includes(n)||e.classes.push(n);Object.assign(e.attrs,t.attrs)}function Ar(e){let t=new Set(e.map(n=>He(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 fl(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)===at.length);return r.length===1?r[0]:null}function fn(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 _r(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 z(g.selector)){let d=Ke(p,n,s);if(!d)continue;let{compounds:y,at:v}=d,x=y[v],C=ct(x.simples);if(C.identity.length===0)continue;let j=y.slice(0,v),I=Sr(j,x,C.identity),A=me(C.states);if(v<y.length-1){i.push({hostKey:I,part:{selector:Ge(y),path:e,line:g.line,state:A}});continue}if(Hs(C.identity,g.declarations))continue;let R=o.get(I);if(!R){if(o.size>=ll)continue;R={key:I,prefix:j,identity:C.identity,line:g.line,states:[],modifiers:[],contexts:[],parts:[],movedInto:null},o.set(I,R)}let P=R.states.find(T=>T.state===A&&T.context===g.context);P||(P={state:A,context:g.context,line:g.line,declarations:[]},C.states.length&&(P.marker={classes:[],attrs:{}}),R.states.push(P)),P.marker&&pl(P.marker,C.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=>pt(x.declarations)),v=d.every(x=>He(x.property)==="hint");(y||v)&&o.delete(g)}let a=new Map;for(let g of o.values()){let p=We(g.identity);a.set(p,[...a.get(p)??[],g])}for(let g of a.values()){let p=g.map(x=>fl(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 v=[...y.classes.map(x=>({kind:"class",raw:`.${x}`,name:x})),...Object.entries(y.attrs).map(([x,C])=>({kind:"attr",raw:`[${x}="${C}"]`,name:x,op:"=",value:C}))];for(let x of g){let C=[...x.identity,...v],j={combinator:x.prefix.length?" ":null,simples:C},I=Sr(x.prefix,j,C);for(let A of x.states){let R=A.state.split(" + ").filter(P=>P!==d);if(A.state=me(R),R.length===0)delete A.marker;else if(A.marker){A.marker.classes=A.marker.classes.filter(P=>!y.classes.includes(P));for(let P of Object.keys(y.attrs))delete A.marker.attrs[P]}}o.delete(x.key),o.set(I,{...x,key:I,identity:C})}}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=>ul(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()],$=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 k=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 k){let p=h.filter(y=>y!==g&&y!==u&&y.prefix.length===0&&cl(y.identity,g.identity));if(p.length===0)continue;p.sort((y,v)=>v.identity.length-y.identity.length||c(v)-c(y)||y.line-v.line);let d=$(p[0].key);d&&d!==g&&m(g,d,"modifiers")}for(let{hostKey:g,part:p}of i){let d=$(g)??(s?u:null);d&&o.has(d.key)&&d.parts.push(p)}let w=g=>{let p=g===u,d=ut(g.key,f);return{...Le({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:fn(g.states),modifiers:g.modifiers.length?g.modifiers.map(y=>{let v=y.identity.filter(x=>!g.identity.some(C=>Rr(C,x)));return{title:Le({selector:v.map(x=>x.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:y.key,path:e,line:y.line,element:ut(y.key,f),usage:{status:"unknown",files:[],fileCount:0},states:fn(y.states)}}):void 0,contexts:g.contexts.length?g.contexts.map(y=>{let v=Ar(y.states.flatMap(x=>x.declarations));return{selector:y.key,path:e,line:y.line,role:v,element:v==="override"?ut(y.key,f):null,states:fn(y.states)}}):void 0,parts:g.parts.length?g.parts:void 0}};return[...o.values()].map(w)}function Er(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:We(l),bareTag:!l.some(f=>f.kind==="class"||f.kind==="attr"||f.kind==="id"),bare:u.length&&u.length<l.length?We(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=Ar(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 dl={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 Ir(e){let t=e.lastIndexOf("-");return t<=0?null:dl[e.slice(0,t)]?.[e.slice(t+1)]??null}var E=(e,t)=>({property:e,value:t});function bn(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 hn(e){let t=bn(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 gl(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 jr(e,t){return{full:"100%",screen:t==="w"?"100vw":"100vh",auto:"auto",fit:"fit-content",min:"min-content",max:"max-content"}[e]??gl(e)??bn(e)??hn(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"}},hl={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},bl={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},yl={none:"0",sm:"0.125rem","":"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},xl={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"},wl={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function dn(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=Ir(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 kl(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 gn(){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"},mn={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch",between:"space-between",around:"space-around",evenly:"space-evenly"};function Pr(e){let t=e.startsWith("-"),n=t?e.slice(1):e,{body:s,opacity:r}=kl(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 R=i[1]==="col"?"column":i[1]==="col-reverse"?"column-reverse":i[1];return[E("flex-direction",R)]}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",mn[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[E("justify-content",mn[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[E("align-self",c[1]==="auto"?"auto":mn[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=hl[s.replace(/^font-/,"")];if(s.startsWith("font-")&&h&&!r)return[E("font-weight",h)];if(s.startsWith("leading-")&&!r){let R=s.slice(8),T=bl[R]??hn(R);if(T)return[E("line-height",T)]}let $=/^cursor-(pointer|default|not-allowed|wait|text|move)$/.exec(s);if($)return[E("cursor",$[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 k=/^opacity-(\d+)$/.exec(s);if(k&&!t)return[E("opacity",String(Number(k[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 w=/^duration-(\d+)$/.exec(s);if(w)return[E("transition-duration",`${w[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 R=s==="shadow"?"":s.slice(7),P=xl[R];if(P)return[E("box-shadow",P)]}if(s==="ring"||/^ring(?:-(?:0|1|2|4|8))?$/.test(s)){let R=s==="ring"?"":s.slice(5),P=wl[R];if(P)return[E("--gs-ring-w",P),gn()]}if(s.startsWith("ring-")&&r===null){let R=dn(s.slice(5),null);if(R)return[E("--gs-ring-c",R),gn()]}if(s.startsWith("ring-")&&r){let R=dn(s.slice(5),r);if(R)return[E("--gs-ring-c",R),gn()]}let d=s==="rounded"?"":s.startsWith("rounded-")?s.slice(8):null;if(d!==null&&!t){let R=/^(t|r|b|l|s|e|tl|tr|bl|br|ss|se)(?:-(.+))?$/.exec(d),P=R?R[2]??"":d,T=yl[P];if(!T)return null;if(!R)return[E("border-radius",T)];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"]}[R[1]];return X?X.map(Qe=>E(Qe,T)):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 v=/^border-(solid|dashed|dotted|double|none|hidden)$/.exec(s);if(v)return[E("border-style",v[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),C=x?.[1],j=x?.[2];if(C&&j&&!r){let R=C==="w"||C==="min-w"||C==="max-w"?jr(j,"w"):C==="h"||C==="min-h"||C==="max-h"?jr(j,"h"):hn(j);if(!R)return null;let P=t?R==="0"?"0":`-${R}`:R,G={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"]}[C];return G?G.map(X=>E(X,P)):null}let I={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[R,P]of Object.entries(I))if(s===R||s.startsWith(`${R}-`)){let T=s===R?"":s.slice(R.length+1);if(!T||/^(?:gradient|clip|ellipsis|wrap|nowrap|balance|pretty|opacity)/.test(T))return null;if(R==="text"&&!t){let X=bn(T);if(X)return[E("font-size",X)]}let G=dn(T,r);return!G||t?null:[E(P,G)]}let A=/^\[([a-z-]+):(.+)\]$/i.exec(s);if(A&&!t&&!r){let R=A[1].toLowerCase(),P=A[2].replace(/_/g," ").trim();if(/^[a-z][\w-]*$/.test(R)&&P&&!/[<>]/.test(P))return[E(R,P)]}return null}var $l=48,Cl={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},Sl=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function ue(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
46
|
+
`&&n++;return n}function Rl(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 W(e,t){for(;t<e.length&&/\s/.test(e[t]);)t++;return t}function yt(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"?`
|
|
47
|
+
`: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 wn(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=yt(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 Al(e,t){let n=0;for(let s=t;s<e.length;s++){let r=e[s];if(r==='"'||r==="'"||r==="`"){let o=yt(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 Lr(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){let s=Lr(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 _l(e,t){let n=t+1,s=[];for(;n<e.length;){if(n=W(e,n),e[n]===")")return{v:s.join(" ").replace(/\s+/g," ").trim()||null,end:n+1};if(e[n]===","){n++;continue}let r=ee(e,n);if(!r)return null;let o=W(e,r.end);if(e[o]===","||e[o]===")"){let i=Lr(r.val);i&&s.push(i),n=r.end;continue}n=Al(e,n)}return null}function ee(e,t){if(t=W(e,t),t>=e.length)return null;let n=e[t];if(n==='"'||n==="'"||n==="`"){let r=yt(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=W(e,r),e[r]==="]")return{val:{t:"arr",items:o,at:t},end:r+1};if(e[r]===","){r++;continue}let i=ee(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=W(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=ee(e,r+3);if(!c)return null;r=c.end;continue}let i="",a=r;if(e[r]==='"'||e[r]==="'"||e[r]==="`"){let c=yt(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=W(e,r),e[r]!==":"){e[r]==="("&&(r=wn(e,r,"(",")"));continue}let l=ee(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=W(e,r);if(e[i]==="("){if(Sl.has(o)){let a=_l(e,i);return a?{val:{t:"str",v:a.v,at:s},end:a.end}:null}return{val:{t:"other",at:s},end:wn(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 xt(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 Or(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 yn={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function El(e,t,n,s){let r=Cl[e];if(r)return t.includes(r)||t.push(r),!0;if(e==="dark")return s.on=!0,!0;if(yn[e])return n.min.push(yn[e]),!0;let o=/^max-(sm|md|lg|xl|2xl)$/.exec(e);if(o)return n.below.push(yn[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 Il(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 Mr(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||!El(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:me(a),context:Il(l,c.on),utility:i,important:n,stem:u}}function Nr(e){let t=Pr(e.utility);return t?t.map(n=>({property:n.property,value:e.important?`${n.value} !important`:n.value,via:e.token})):[]}function jl(e){return e.some(t=>He(t.property)!=="hint")}function wt(e){let t=[];for(let n of e.matchAll(/@apply\s+([^;{}]+)/g))for(let s of Or(n[1])){let r=Mr(s);if(!r)continue;let o=Nr(r).filter(i=>ne(i.property,i.value));o.length!==0&&t.push({state:r.state,context:r.context,declarations:o})}return t}function Tr(e){return e==="default"?"":e.split(" + ").map(t=>t==="hover"?":hover":t==="focus"?":focus":t==="active"?":active":t==="disabled"?":disabled":"").join("")}function $n(e,t,n){let s=t.map(f=>`${f.property}:${f.value}`).join(";");if(!s)return[];let r=Yt(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 Pl(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 Ll(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 Ol(e,t,n,s,r){let o=ee(e,t),i={slots:[],defaults:{}};if(!o)return i;let a=xt(o.val)??"",l=W(e,o.end);if(e[l]!==",")return a.trim()?{slots:[xn(a,ue(e,t),r)],defaults:{}}:i;let c=ee(e,l+1);if(!c||c.val.t!=="obj")return a.trim()?{slots:[xn(a,ue(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(xn(a,ue(e,t),r)),u&&u.t==="obj"){for(let h of u.entries)if(h.value.t==="obj")for(let $ of h.value.entries){let k=xt($.value);if(!k||!k.trim()||$.key==="false")continue;m.set(`${h.key}\0${$.key}`,k);let w=$.key==="true"?`.${h.key}`:`.${h.key}-${$.key}`,g=Le({selector:w,path:s,base:!1},n.classKeywords);f.push({title:g.title,axis:$.key==="true"?h.key:g.axis??h.key,base:!1,classes:`${a} ${k}`.trim(),line:ue(e,$.at),group:r,prop:h.key,value:$.key})}}return f.push(...Ml(c.val,a,m,n,s,e,r)),{slots:f,defaults:Ll(c.val)}}function Dr(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=Dr(n);if(!s||s.length!==1)return null;t.push(s[0])}return t.length?t:null}return null}function Ml(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 k of c.entries){if(k.key==="class"||k.key==="className"){f=xt(k.value)??"",m=k.at,k.value.t!=="str"&&k.value.t!=="arr"&&f===""&&(h=!0);continue}let w=Dr(k.value);if(!w){h=!0;break}u.push({axis:k.key,values:w})}if(h)continue;let $=[[]];for(let k of u){let w=[];for(let g of $){for(let p of k.values)if(w.push([...g,{axis:k.axis,value:p}]),w.length>=8)break;if(w.length>=8)break}$=w}for(let k of $){if(k.length<2&&!f.trim())continue;let w=[t],g=[];for(let y of k){let v=n.get(`${y.axis}\0${y.value}`);v&&w.push(v),g.push(y.value==="true"?y.axis:y.value)}f.trim()&&w.push(f);let p=w.join(" ").replace(/\s+/g," ").trim();if(!p)continue;let d=Le({selector:`.${g.join("-")}`,path:r,base:!1},s.classKeywords);l.push({title:d.title,axis:d.axis,base:!1,classes:p,line:ue(o,m),group:i,when:k.map(y=>({prop:y.axis,value:y.value}))})}}return l}function xn(e,t,n){return{title:"Base",axis:null,base:!0,classes:e,line:t,group:n}}function Vr(e,t){return t.elements.includes(e.toLowerCase())?!0:t.identifier.test(e)}function Nl(e){let t=e.match(/\bclassName\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*"([^"]*)"\s*\}|\{\s*'([^']*)'\s*\})/);return t?.[1]??t?.[2]??t?.[3]??t?.[4]??null}var Tl=new Set(["opacity","z-index","font-weight","line-height","flex","flex-grow","flex-shrink","order","zoom"]);function Dl(e){return e.replace(/^[A-Z]/,t=>`-${t.toLowerCase()}`).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function Vl(e,t){return t.t==="str"?t.v:t.t==="num"?Tl.has(e)?String(t.v):`${t.v}px`:null}function kt(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(...kt(o.value,c));continue}let i=Dl(o.key),a=Vl(i,o.value);!a||!ne(i,a)||n.push({property:i,value:a,via:"style"})}return[...n.length?[{state:t,context:"",declarations:n}]:[],...s]}function kn(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"?`
|
|
48
|
+
`: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 Bl(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)),me(n)}function vn(e){let t=[];for(let n of ye(`.__gs {
|
|
49
49
|
${e}
|
|
50
|
-
}`)){let s=q(n.selector),r=s?.[s.length-1];if(!r)continue;let o=
|
|
50
|
+
}`)){let s=q(n.selector),r=s?.[s.length-1];if(!r)continue;let o=ct(r.simples),i=me(o.states),a=ce(n.ownBody).filter(l=>ne(l.property,l.value));a.length&&t.push({state:i,context:n.context,declarations:a});for(let l of wt(n.ownBody))t.push({state:Bl(i,l.state),context:[n.context,l.context].filter(Boolean).join(" \xB7 "),declarations:l.declarations})}return t}function Fl(e){let t=e.match(/\bstyle\s*=\s*"([^"]*)"/);if(t){let i=ce(t[1]).filter(a=>ne(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=W(e,s+1);e[r]==="{"&&(s=r);let o=ee(e,s);return o?kt(o.val,"default"):[]}function Ul(e){let t=Nl(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=W(e,s+1);if(e.startsWith("css",r)&&!/[\w$]/.test(e[r+3]??"")){let i=W(e,r+3);if(e[i]==="`"){let a=kn(e,i);return{classes:"",painted:a?vn(a.css):[]}}if(e[i]==="("){let a=ee(e,i+1);return{classes:"",painted:a?kt(a.val,"default"):[]}}}let o=ee(e,r);return o?{classes:xt(o.val)??"",painted:[]}:{classes:"",painted:[]}}function zl(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 Wl(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(!Vr(i,t))continue;let a=W(e,(o.index??0)+o[0].length);e.startsWith(".attrs",a)&&(a=W(e,a+6),e[a]==="("&&(a=wn(e,a,"(",")")),a=W(e,a));let l=[];if(e[a]==="`"){let c=kn(e,a);c&&(l=vn(c.css))}else if(e[a]==="("){let c=ee(e,a+1);c&&(l=kt(c.val,"default"))}l.length!==0&&n.push({title:"Styled",axis:null,base:!0,classes:"",line:ue(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(!zl(i,t))continue;let a=e.indexOf("`",o.index??0),l=a<0?null:kn(e,a);if(!l)continue;let c=vn(l.css);c.length!==0&&n.push({title:"Css",axis:null,base:!0,classes:"",line:ue(e,o.index??0),painted:c})}return n}function Gl(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 Hl(e,t,n,s,r){let o=Or(e.classes).map(Mr).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,v)=>{if(v.length===0)return;let x=`${d}\0${y}`,C=l.get(x)??{state:d,context:y,declarations:[]};C.declarations.push(...v),l.set(x,C)},u=[r];for(let d of o){let y=Nr(d).filter(v=>ne(v.property,v.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(!jl(f))return null;let m=l.get("default\0")?.declarations??[];if(pt(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)),$=[...new Set(o.map(d=>d.stem).filter(d=>d!==null))],k=$.length?$.map(d=>`.${d}`).join(""):n.elements[0]??"button",w=h.flatMap(d=>$n(Gl(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:k,path:t,line:e.line,base:e.base,states:h},rules:w}}function Br(e,t,n,s,r){let o=Rl(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,v=a.length,x=Ol(o,y,n,e,v);a.push({name:Pl(o,d),defaults:x.defaults}),i.push(...x.slots)}i.push(...Wl(o,n));let c=/<([A-Za-z][\w.]*)\b([^>]*?)>/g;for(let p of o.matchAll(c)){let d=p[1];if(!Vr(d,n))continue;let y=p[2]??"",v=Ul(y),x=[...v.painted,...Fl(y)],C=v.classes.trim();if(!C&&x.length===0)continue;let j=p.index??0,I=ue(o,j);i.push({title:C?"Base":v.painted.length?"Css":"Inline",axis:null,base:!0,classes:C,line:I,painted:x,...C&&x.length===0?{site:{path:e,line:I,offset:j}}:{}})}let u=[],f=[],m=new Map,h=[],$=new Map,k=new Map,w=r;for(let p=0;p<i.length;p++){let d=i[p];if(u.length+f.length>=$l)break;let y=(d.painted??[]).map(I=>`${I.state}|${I.context}|${I.declarations.map(A=>`${A.property}:${A.value}`).join(";")}`).join("||"),v=`${d.classes.replace(/\s+/g," ").trim()}##${y}`,x=$.get(v);if(x){d.group!==void 0&&k.set(p,x),d.site&&m.get(x)?.sites.push(d.site);continue}w+=1;let C=`__gs-recipe-${w}`,j=Hl(d,e,n,s,C);if(j){if($.set(v,C),d.group!==void 0&&k.set(p,C),d.site){let I={variant:j.variant,sites:[d.site]};m.set(C,I),f.push(I)}else u.push(j.variant);h.push(...j.rules)}}let g=[];for(let p=0;p<a.length;p++){let d=a[p],y={path:e,name:d.name,staticClasses:[],axes:[],compounds:[]},v=new Map;for(let x=0;x<i.length;x++){let C=i[x];if(C.group!==p)continue;let j=k.get(x);if(!j)continue;if(!C.prop&&!C.when){y.staticClasses.push(j);continue}if(C.when){y.compounds.push({when:C.when,classes:[j]});continue}let I=v.get(C.prop)??[];I.push({value:C.value,classes:[j]}),v.set(C.prop,I)}for(let[x,C]of v)y.axes.push({prop:x,values:C,...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:w,recipes:g}}function Fr(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 Cn=6,Kl=/"([^"\\\n]{0,400})"|'([^'\\\n]{0,400})'|`([^`\\]{0,400})`/g,Jl=/\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)')/g,Zl=/\b(?:styles?|classes|css|cls|s)\.([A-Za-z_]\w*)/g,Je=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Xl(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 ql(e,t){let n=Xl(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(Kl))i(a[1]??a[2]??a[3]??"",a.index);for(let a of n.matchAll(Jl))i(a[1]??a[2]??"",a.index);for(let a of n.matchAll(Zl))o(r,a[1],a.index);return{path:e,text:n,original:t,words:s,ids:r}}function Ur(e,t){let n=1;for(let s=e.indexOf(`
|
|
51
51
|
`);s!==-1&&s<t;)n++,s=e.indexOf(`
|
|
52
|
-
`,s+1);return n}var
|
|
53
|
-
`),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<
|
|
52
|
+
`,s+1);return n}var Yl=e=>e.replace(/[-_]+(\w)/g,(t,n)=>n.toUpperCase()),Ql=/\[\s*([\w-]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*\]/g,ec=new Set(["data-component","data-slot","role"]);function tc(e,t){return[...e.slice(he(e)).matchAll(Ql)].map(s=>({name:s[1],value:s[2]??s[3]??s[4]??null})).filter(s=>!ec.has(s.name)&&!(s.value!==null&&t.has(s.value.toLowerCase())))}function nc(e){return[...e.slice(he(e)).matchAll(/\.((?:\\.|[\w-])+)/g)].map(n=>n[1].replace(/\\(.)/g,"$1"))}function Sn(e,t,n,s,r=!1,o=[],i=()=>null){let a=null,l=()=>a??=t.map(g=>ql(g,e.get(g)??"")),c=new Map,u=g=>{let p=c.get(g);if(!p){let d=new RegExp(`["'\`]${Je(g)}["'\`]\\s*\\+`);p=l().filter(y=>y.text.includes(`${g}\${`)||d.test(y.text)),c.set(g,p)}return p},f=(g,p,d)=>hr(ln(g.original,p,d,g.path),g.original,p,g.path,o,i),m=(g,p)=>({files:g.slice(0,Cn).map(({file:d,offset:y,example:v})=>({path:d.path,line:Ur(d.text,y),...r?{example:v??f(d,y,p)}:{}})),fileCount:g.length}),h=(g,p)=>{let d=[],y=Yl(g);for(let v of l()){let x=[...s.has(g)?[]:v.words.get(g)??[],...v.ids.get(y)??v.ids.get(g)??[]],C=x[0];if(C===void 0)continue;let j=C,I;if(r)for(let A of x){let R=f(v,A,p);if(R.kind!=="other"){j=A,I=R;break}}d.push({file:v,offset:j,example:I})}if(d.length)return{status:"used",...m(d,p)};for(let v=g.length-1;v>0;v--){if(g[v]!=="-"&&g[v]!=="_")continue;let x=g.slice(0,v+1),C=g.slice(v+1),j=u(x);if(j.length===0||!C)continue;let I=x.slice(0,-1),A=new RegExp(`\\b${Je(I)}\\s*[=:]\\s*\\{?\\s*["'\`]${Je(C)}["'\`]`),R=[];for(let P of l()){let T=A.exec(P.text);T&&R.push({file:P,offset:T.index})}return R.length?{status:"used",via:`via ${I} prop`,...m(R,p)}:{status:"dynamic",via:`built as ${x}\${\u2026}`,...m(j.map(P=>({file:P,offset:0})),p)}}return{status:"unreferenced",files:[],fileCount:0}},$=(g,p)=>{let d=Je(g.name),y=g.value===null?new RegExp(`\\b${d}\\b`):new RegExp(`\\b${d}\\s*[=:]\\s*\\{?\\s*["'\`]${Je(g.value)}["'\`]`),v=[];for(let j of l()){let I=y.exec(j.text);I&&v.push({file:j,offset:I.index})}if(v.length)return{status:"used",via:`via ${g.name} attribute`,...m(v,p)};let x=new RegExp(`\\b${d}\\s*=\\s*\\{(?!\\s*["'\`])`),C=[];for(let j of l()){let I=x.exec(j.text);I&&C.push({file:j,offset:I.index})}return C.length?{status:"dynamic",via:`${g.name} is set from a variable`,...m(C,p)}:{status:"unreferenced",files:[],fileCount:0}},k=new Map;if(r&&o.length>0)for(let g of l())for(let p of bt(g.path,g.text,o,i))for(let d of p.selects){let y=k.get(d)??[];y.push({file:g,offset:p.offset}),k.set(d,y)}let w={used:0,unknown:0,dynamic:1,unreferenced:2};for(let g of n){let p=nc(g.selector),d=tc(g.selector,s);if(p.length===0&&d.length===0){g.usage={status:"unknown",files:[],fileCount:0};continue}let y=[...p.map(A=>h(A,p)),...d.map(A=>$(A,p))];g.usage=y.reduce((A,R)=>w[R.status]>=w[A.status]?R:A);let v=g.element?.classes.find(A=>A.startsWith("__gs-recipe-")),x=v?k.get(v):void 0;if(!x||x.length===0)continue;let C=new Set(g.usage.files.map(A=>A.path)),j=g.usage.fileCount,I=[...g.usage.files];for(let A of x)C.has(A.file.path)||(C.add(A.file.path),j+=1,!(I.length>=Cn)&&I.push({path:A.file.path,line:Ur(A.file.text,A.offset),...r?{example:f(A.file,A.offset,[])}:{}}));g.usage={...g.usage,status:g.usage.status==="unknown"?"unknown":"used",files:I,fileCount:j}}}function zr(e,t,n){let s=[],r=new Set;for(let o of t)r.has(o.path)||(r.add(o.path),!(s.length>=Cn)&&s.push({path:o.path,line:o.line,...n?{example:ln(e.get(o.path)??"",o.offset,[],o.path)}:{}}));return{status:"used",files:s,fileCount:r.size}}var sc={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},Zr={button:sc},Xr=12,An=200,xe=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro)$/i,Wr=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,Ze=/\.(css|scss|sass|less|styl)$/i,Gr=/\.(mdx?|markdown|txt|rst|adoc)$/i,Hr=/(^|\/)(tokens?|design-tokens?|theme)[^/]*\.json$/i,Z=/(^|\/)(__tests__|tests?|spec|e2e|cypress|playwright)(\/|$)|\.(test|spec)\.[a-z]+$/i,rc=/(^|\/)(plans?|results?|changelogs?|history|archive)(\/|\.|$)|(^|\/)CHANGELOG/i;function oc(e){return vt.test(e)&&!/(^|\/)README\.md$/i.test(e)?"instruction":rc.test(e)?"record":"documentation"}var vt=/(^|\/)(AGENTS|CLAUDE|CONTRIBUTING|README|GUIDELINES?)\.md$|(^|\/)(eslint|stylelint|\.eslintrc|\.stylelintrc)[^/]*$|(^|\/)\.cursor\/|(^|\/)\.claude\//i;function pe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ic(e){return(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"")}function Kr(e,t){let n=ic(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 fe(e,t){let n=e.split(`
|
|
53
|
+
`),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<Xr)){let a=i.trim();r.push({line:o+1,text:a.length>An?`${a.slice(0,An)}\u2026`:a})}}return{count:s,lines:r}}function qr(e){let t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function Yr(e){let t=[];for(let n of e.split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return t.join("/")}var lc=["",".tsx",".ts",".jsx",".js",".mjs",".vue",".svelte",".css",".module.css",".scss","/index.tsx","/index.ts","/index.js"];function we(e,t,n){let s;if(t.startsWith("."))s=Yr(`${qr(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 lc)if(n(s+r))return s+r;return null}var cc=/import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]|require\(\s*['"]([^'"]+)['"]\s*\)|@import\s+(?:url\()?['"]([^'"]+)['"]/g;function Rn(e){let t=[];for(let n of e.matchAll(cc)){let s=n[1]??n[2]??n[3];s&&t.push(s)}return t}var uc=/export\s+(?:default\s+)?(?:async\s+)?(?:function|const|let|class|var)\s+([A-Za-z_$][\w$]*)|export\s*\{([^}]*)\}/g;function Jr(e){let t=new Set;for(let n of e.matchAll(uc))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 _n=/var\(\s*(--[\w-]+)/g;function $t(e){return e.split(" \xB7 ").every(t=>t===""||/^@layer\b/i.test(t))}function Qr(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 pc(e,t,n){let s=t.startsWith(".")?Yr(`${qr(e)}/${t}`):t.startsWith("@/")?t.slice(2):t.startsWith("~/")||t.startsWith("/")?t.replace(/^~?\//,""):null;return s&&n(s)?s:we(e,t.replace(/\.(?:module\.)?(?:css|scss|sass|less)$/i,""),n)}function fc(e){let t=new Map;for(let[n,s]of e)if(Ze.test(n)){for(let r of ye(s))if($t(r.context))for(let o of z(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(...ce(r.ownBody));for(let c of wt(r.ownBody))c.state==="default"&&c.context===""&&l.decls.push(...c.declarations);l.composes.push(...Qr(r.ownBody)),t.set(a,l)}}return t}function dc(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"),$=m.slice(0,h);m.slice(h+1)!==f||/\.module\./i.test($)||i($,f,u)}else if(c.from){let m=pc(l,c.from,s);m&&i(m,f,u)}else i(l,f,u)};for(let l of Qr(t))a(e,l,0);return r}function gc(e,t){let n=Tr(t);return n?z(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,hc=25e4,bc=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,yc=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,xc=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]);function wc(e){let t=new Set,n=new Set;for(let s of e.matchAll(bc)){let r=s[1],o=xc.has(r.toLowerCase())&&r===r.toLowerCase()?t:n;for(let i of s[2].matchAll(yc))o.add(i[1]??i[2])}return{parts:new Set([...t].filter(s=>!n.has(s))),controls:n}}function kc(e,t){let n=new Map;for(let s of t)if(Ze.test(s)){for(let r of ye(e.get(s)))if($t(r.context)&&z(r.selector).some(o=>mc.test(o)))for(let o of ce(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(_n))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||!ne(a,l)||(o.push(`${a}:${l}`),r(l))}return`${o.length?`:root{${o.join(";")}}
|
|
54
54
|
`:""}${t.join(`
|
|
55
|
-
`)}`.slice(0,
|
|
56
|
-
`)}var
|
|
55
|
+
`)}`.slice(0,hc)}function eo(e,t){let n=[...e.keys()].sort(),s=b=>e.has(b),r=new Map,o=(b,S,_,L)=>{let M=`${S}:${b}`,B=r.get(M);if(B){B.note.includes(_)||(B.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(!xe.test(b)||Z.test(b))continue;let S=e.get(b),_=Jr(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 B=_.length?new RegExp(`\\b(?:${_.map(pe).join("|")})\\b`,"g"):t.prose;o(b,"implements",_.length?`exports ${_.join(", ")}`:"named for the concept",fe(S,B))}let l=new Set,c=[],u=[],f=new Map,m=b=>Kr(b,t.classKeywords)||/\.module\.[a-z]+$/i.test(b)&&f.has(b),h=null,$=()=>h??=fc(e),k=b=>{let S=m(b),_=[],L=0;for(let O of ye(e.get(b))){let F=z(O.selector).filter(N=>Ke(N,t,S));if(F.length===0)continue;L+=1;for(let N of O.ownBody.matchAll(_n))l.add(N[1]);let U=wt(O.ownBody),oe=[...dc(b,O.ownBody,$(),s),...ce(O.ownBody),...U.filter(N=>N.state==="default"&&N.context==="").flatMap(N=>N.declarations)];for(let N of oe)for(let J of N.value.matchAll(_n))l.add(J[1]);_.push({block:O,parts:F,declarations:oe,previewContext:$t(O.context)?"":null,listed:!0});for(let N of U){if(N.state==="default"&&N.context==="")continue;let J=gc(F.join(", "),N.state),Te=z(J).filter(Ho=>Ke(Ho,t,S));if(Te.length===0)continue;let Go=[O.context,N.context].filter(Boolean).join(" \xB7 ");_.push({block:{...O,selector:J,context:Go},parts:Te,declarations:N.declarations,previewContext:$t(O.context)?N.context:null,listed:!1})}}let M={parts:new Set,controls:new Set};for(let O of f.get(b)??[]){let F=wc(e.get(O)??"");for(let U of F.parts)M.parts.add(U);for(let U of F.controls)M.controls.add(U)}c.push(..._r(b,_.map(({block:O,parts:F,declarations:U})=>({selector:F.join(", "),declarations:U,line:O.line,context:O.context})),t,S,M));let B=/\.module\.[a-z]+$/i.test(b)?`${Js(b)} `:"";for(let{parts:O,declarations:F,previewContext:U}of _){if(U===null)continue;let oe=O.flatMap(J=>{let Te=Ke(J,t,S);return Te?[`${B}${Ge(Te.compounds)}`]:[]}),N=F.filter(J=>ne(J.property,J.value));if(!(oe.length===0||N.length===0))for(let J of oe)u.push(...$n(J,N,U))}return{count:L,lines:_.filter(O=>O.listed).slice(0,Xr).map(({block:O})=>({line:O.line,text:O.selector.replace(/\s+/g," ").slice(0,An)}))}},w=new Map;for(let b of a)for(let S of Rn(e.get(b))){let _=we(b,S,s);if(_&&Ze.test(_)){let L=w.get(_)??[];L.push(b.split("/").pop()??b),w.set(_,L),Kr(b,t.classKeywords)&&f.set(_,[...f.get(_)??[],b])}}for(let b of n){if(!Ze.test(b))continue;let S=k(b),_=w.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=>`<${pe(b)}\\b`),...t.roles.map(b=>`role=["']${pe(b)}["']`)].join("|"));for(let b of n)!xe.test(b)||Z.test(b)||d.test(e.get(b)??"")&&p.add(b);for(let b of a)for(let S of Rn(e.get(b))){let _=we(b,S,s);!_||!xe.test(_)||Z.test(_)||Fr(_,t.classKeywords)&&p.add(_)}let y=0,v=[],x=[];for(let b of p){let S=Br(b,e.get(b)??"",t,g,y);y=S.nextId,v.push(...S.recipes),c.push(...S.variants),x.push(...S.inline),u.push(...S.previewRules)}let C=Zn(x);c.push(...C.variants);let j=br([...a].map(b=>({path:b,source:e.get(b)??"",names:Jr(e.get(b)??"").filter(S=>t.identifier.test(S))})),v,(b,S)=>we(b,S,s)),I=[];if(l.size>0){let b=new RegExp(`(?:^|[\\s{;])(${[...l].map(pe).join("|")})\\s*:`),S=new Map;for(let _ of n){if(!Ze.test(_)&&!Hr.test(_))continue;let L=e.get(_),M=fe(L,b);if(M.count!==0){for(let B of L.matchAll(new RegExp(b.source,"gm"))){let O=S.get(B[1])??[];O.includes(_)||O.push(_),S.set(B[1],O)}o(_,"tokens",`defines ${M.count} token${M.count===1?"":"s"} read by ${t.label.toLowerCase()} styles`,M)}}for(let _ of[...l].sort())I.push({name:_,definedIn:S.get(_)??[]})}for(let b of n){if(!Hr.test(b))continue;let S=fe(e.get(b),t.prose);S.count>0&&o(b,"tokens","token file mentions the concept",S)}let A=[...i],R=new RegExp([...A.length?[`<(?:${A.map(pe).join("|")})\\b`]:[],...t.elements.map(b=>`<${pe(b)}\\b`),...t.roles.map(b=>`role=["']${pe(b)}["']`)].join("|"));for(let b of n){if(!xe.test(b)||a.has(b))continue;let S=e.get(b),_=Z.test(b),L=fe(S,R),M=Rn(S).some(O=>{let F=we(b,O,s);return F!=null&&a.has(F)});if(L.count===0&&!M)continue;let B=L.count>0?`${L.count} render${L.count===1?"":"s"}`:"imports a button component";o(b,_?"tests":"uses",B,L.count?L:fe(S,t.prose))}for(let b of n){if(!(Gr.test(b)||vt.test(b)))continue;let _=e.get(b),L=fe(_,t.prose);L.count!==0&&o(b,Z.test(b)?"tests":"describes",vt.test(b)?"repo rules / instructions":"documentation",L)}for(let b of n){if(!Z.test(b)||r.has(`tests:${b}`)||!xe.test(b))continue;let S=fe(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)),T={implements:0,styles:0,tokens:0,uses:0,describes:0,tests:0};for(let b of P)T[b.role]++;let G=Er(c);Sn(e,n.filter(b=>Wr.test(b)&&!Z.test(b)),G,new Set(t.elements),!0,j,(b,S)=>we(b,S,s)),Sn(e,n.filter(b=>Wr.test(b)&&!Z.test(b)),G.flatMap(b=>b.modifiers??[]),new Set(t.elements));for(let[b,S]of C.sites)b.usage=zr(e,S,!("alike"in b));let X=kc(e,n),Qe=[];if(i.size>0){let b=new RegExp(t.elements.map(S=>`<${pe(S)}\\b`).join("|"),"g");for(let S of n){if(!xe.test(S)||Z.test(S)||a.has(S))continue;let _=e.get(S),L=(_.match(b)??[]).length;if(L===0)continue;let M=fe(_,new RegExp(b.source));Qe.push({path:S,line:M.lines[0]?.line??1,count:L})}}let Wn=[],Gn=new Set;for(let b of n){if(!xe.test(b)||Z.test(b))continue;let S=e.get(b),_=bt(b,S,j,(L,M)=>we(L,M,s));for(let L of _)for(let M of L.unknown){let B=[...M.known].sort();if(M.cls!==void 0){if(g.has(M.cls))continue;let U=M.cls.slice(0,M.cls.length-M.value.length),oe=[...g].filter(N=>N.startsWith(U)&&N.length>U.length).map(N=>N.slice(U.length));if(oe.length===0)continue;B=[...new Set([...M.known,...oe])].sort()}if(B.length===0)continue;let O=ac(S,L.offset),F=`${b}\0${L.component}\0${M.prop}\0${M.value}`;Gn.has(F)||(Gn.add(F),Wn.push({path:b,line:O,component:L.component,prop:M.prop,value:M.value,known:B}))}}let zo=n.filter(b=>(Gr.test(b)||vt.test(b))&&!Z.test(b)).map(b=>({path:b,kind:oc(b)}));G.sort((b,S)=>Number(S.base)-Number(b.base)||b.path.localeCompare(S.path)||b.line-S.line);let Hn=vr(e,zo,t,G),Wo=wr([...f.entries()].map(([b,S])=>({sheet:b,sources:S.map(_=>e.get(_)??""),rules:ye(e.get(b)??"").map(_=>({selector:_.selector,declarations:ce(_.ownBody)}))})));return{components:A.sort(),tokens:I,findings:P,variants:G,audit:nr({variants:G,tokens:I,tokenValues:X,hasComponent:i.size>0,nativeUses:Qe,unknownProps:Wn,guidance:Hn,noun:t.label.toLowerCase(),element:t.elements[0]??t.id}),guidance:Hn,content:Wo,previewCss:vc(X,u),counts:T}}import{execFileSync as Cc}from"node:child_process";import{readdirSync as Sc,readFileSync as Rc,statSync as Ac}from"node:fs";import Ct from"node:path";function ke(e,t){try{return Cc("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],maxBuffer:64*1024*1024})}catch{return null}}function En(e,t=""){let s=ke(e,["rev-parse","--show-toplevel"])?.trim()||e;return{repoDir:s,root:Jt(t),stateDir:Ct.join(s,".gruum")}}function St(e){let t=Ct.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=Sc(l).sort()}catch{return}for(let f of u){let m=c?`${c}/${f}`:f,h=Ct.join(l,f),$;try{$=Ac(h)}catch{continue}if($.isDirectory()){Ht(m)&&a(h,m);continue}if(!$.isFile())continue;if(!Kt(m,$.size)){o++;continue}let k=Rc(h);if(Os(k)){o++;continue}if(r+k.length>4e7){i=!0;return}r+=k.length,n.set(m,s.decode(k))}};return a(t,""),{files:n,truncated:i,skipped:o}}function to(e,t){let n=ke(e.repoDir,["diff","--cached","--name-status","-z"]);if(n===null)return t;let s=Ts(n).map(({path:r,deleted:o})=>({path:r,content:o?null:ke(e.repoDir,["show",`:${r}`])}));return{...t,files:Ns(t.files,s,e.root)}}function no(e){let t=ke(e.repoDir,["remote","get-url","origin"])?.trim()??"",n=it(t)??Ct.basename(e.repoDir),s=ke(e.repoDir,["rev-parse","HEAD"])?.trim()||"working-tree";return{fullName:n,ref:s,rootPath:e.root,htmlUrl:n.includes("/")?`https://github.com/${n}`:""}}function so(e){let t=ke(e.repoDir,["config","--get","core.hooksPath"])?.trim();return t||ke(e.repoDir,["rev-parse","--git-path","hooks"])?.trim()||null}function Rt(e,t={}){let n=Zr[t.concept??"button"],s=St(e);return t.staged&&(s=to(e,s)),{concept:n.id,label:n.label,...eo(s.files,n),repo:no(e),index:{files:s.files.size,truncated:s.truncated,skipped:s.skipped}}}function ve(e,t,n={}){let s=Rt(e,{concept:t.concept,...n});return{result:s,baseline:t,items:ss(s,t)}}import{mkdirSync as _c,readFileSync as Ec,writeFileSync as Ic}from"node:fs";import Oe from"node:path";function At(e){try{return Ec(e,"utf8")}catch{return null}}function _t(e){let t=At(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function $e(e,t){_c(Oe.dirname(e),{recursive:!0}),Ic(e,t)}function re(e,t){$e(e,`${JSON.stringify(t,null,2)}
|
|
56
|
+
`)}var Ce=e=>Oe.join(e.stateDir,"baseline.json"),ro=e=>Oe.join(e.stateDir,"drift.json"),In=e=>Oe.join(e.stateDir,"exceptions.json"),jc=e=>Oe.join(e.stateDir,"config.json");function de(e,t){return Be(_t(t?Oe.resolve(t):Ce(e)))}function Et(e){return is(_t(ro(e)),new Date().toISOString())}function jn(e,t){re(ro(e),t)}function Pc(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 It(e){return Pc(_t(In(e)))}function Pn(e){let t=_t(jc(e)),n=Array.isArray(t?.denyGit)?t.denyGit.filter(r=>r==="commit"||r==="push"):Re.denyGit,s=typeof t?.maxFollowups=="number"&&t.maxFollowups>=0?Math.floor(t.maxFollowups):Re.maxFollowups;return{...typeof t?.root=="string"?{root:t.root}:{},hooks:{...Re,denyGit:n,maxFollowups:s}}}import{chmodSync as Tc,mkdirSync as Dc,readFileSync as So,writeFileSync as Vc}from"node:fs";import{hostname as Bc,homedir as Fc}from"node:os";import Mn from"node:path";import{createInterface as Ro}from"node:readline/promises";function oo(e){return`/v2/projects/${encodeURIComponent(e)}`}function io(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 ao(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 Lc="http://localhost:3000",Oc=/(^|\.)(github\.com|githubusercontent\.com|gitlab\.com|bitbucket\.org|npmjs\.com|npmjs\.org|unpkg\.com|jsdelivr\.net|googleapis\.com|gstatic\.com|google\.com|schema\.org|w3\.org|mozilla\.org|wikipedia\.org|example\.com|example\.org|sentry\.io|vercel\.com|cloudflare\.com|amazonaws\.com)$/i;function lo(e){return`https://${(e.split("/").pop()||e).toLowerCase().replace(/\.git$/,"").replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"")||"example"}.com`}function co(e){return`
|
|
57
57
|
Live URL for this repo.
|
|
58
|
-
For example: ${
|
|
58
|
+
For example: ${Lc} or ${e}.
|
|
59
59
|
You may not use wildcards.
|
|
60
60
|
|
|
61
|
-
URL: `}function
|
|
61
|
+
URL: `}function uo(e){let t=/https:\/\/[^\s"'<>)\]]+/gi;for(let n of e.matchAll(t)){let s;try{s=new URL(n[0])}catch{continue}let r=s.hostname.toLowerCase();if(!(!r.includes(".")||r.includes("*"))&&!(r==="localhost"||r==="127.0.0.1")&&!Oc.test(r))return`https://${r}`}return null}function Mc(e){let t=e.toLowerCase().replace(/:\d+$/,"");return t==="localhost"||t==="127.0.0.1"}function po(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=Nc(t);if(n)return n;let s=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`;return ao(s)}function Nc(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 fo(e){return Mc(e)?`http://${e}`:`https://${e}`}function go(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 mo="No project for this repo found. Creating\u2026";function ho(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 bo(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((r,o)=>` ${o+1} ${r}`);return`
|
|
62
62
|
${t}
|
|
63
63
|
${s.join(`
|
|
64
64
|
`)}
|
|
65
65
|
|
|
66
|
-
Which project should this checkout use? `}function
|
|
66
|
+
Which project should this checkout use? `}function Ln(e){return((e.split("/").pop()||e).replace(/\.git$/i,"").replace(/[^a-zA-Z0-9]+/g," ").trim().split(/\s+/).filter(Boolean).map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join(" ")||"New workspace").slice(0,80)}function yo(e,t){let n=t.trim().toLowerCase();if(!n)return null;let s=e.filter(r=>r.name.trim().toLowerCase()===n);return s.length===1?s[0]:null}function xo(e,t,n){let s=[` C Create ${n}`,...t.map((r,o)=>` ${o+1} ${r.name}`)];return`
|
|
67
67
|
Select a workspace in ${e}, or create one.
|
|
68
68
|
${s.join(`
|
|
69
69
|
`)}
|
|
70
70
|
|
|
71
|
-
Which workspace should this project live in? `}function
|
|
71
|
+
Which workspace should this project live in? `}function wo(e,t){let n=e.trim().toLowerCase();if(!n)return null;if(n==="c")return"create";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 ko(e,t,n){let s=t.map((r,o)=>` ${o+1} ${r.name}`);return`
|
|
72
72
|
${e}
|
|
73
73
|
${s.join(`
|
|
74
74
|
`)}
|
|
75
75
|
|
|
76
|
-
Which ${n} should this project live in? `}function
|
|
77
|
-
`,{mode:384}),
|
|
76
|
+
Which ${n} should this project live in? `}function vo(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 $o(e){return`/workspace/${encodeURIComponent(e)}`}import{spawnSync as Uc}from"node:child_process";var Me="https://app.getgruum.com",Ao=()=>Mn.join(Fc(),".config","gruum","credentials.json");function Nn(){let e=process.env.GRUUM_TOKEN?.trim();if(e)return{token:e,apiOrigin:process.env.GRUUM_API_ORIGIN?.trim()||Me};try{let t=JSON.parse(So(Ao(),"utf8"));return typeof t.token!="string"||!t.token?null:{token:t.token,apiOrigin:typeof t.apiOrigin=="string"&&t.apiOrigin?t.apiOrigin:Me}}catch{return null}}function zc(e){let t=Ao();Dc(Mn.dirname(t),{recursive:!0}),Vc(t,`${JSON.stringify(e,null,2)}
|
|
77
|
+
`,{mode:384}),Tc(t,384)}function jt(e){return(e?.apiOrigin||Me).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(`${jt(e)}${t}`,{...n,headers:s})}function Tn(e,t){let n=Uc("git",t,{cwd:e,encoding:"utf8"});return n.status!==0?null:n.stdout.trim()||null}function Wc(e){let t=Tn(e,["remote","get-url","origin"]);return t?it(t):null}function Pt(e){let t=Tn(e,["rev-parse","--abbrev-ref","HEAD"]);return t&&t!=="HEAD"?t:""}function _o(e){return Tn(e,["rev-parse","HEAD"])}function Eo(e){return Mn.join(e.stateDir,"project.json")}function Gc(e){try{let t=JSON.parse(So(Eo(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 Dn(e,t){return`${e}${oo(t)}`}function Co(e,t,n,s){let r=Dn(e,t.id),o=s?` in ${s}`:"",i=t.workspaceId?`${e}${$o(t.workspaceId)}
|
|
78
78
|
`:"";process.stderr.write(n?`Created a Gruum project for ${t.repo}${o}.
|
|
79
79
|
${i}${r}
|
|
80
80
|
`:`Gruum project: ${r}
|
|
81
|
-
${i}`)}function
|
|
82
|
-
`)}async function
|
|
83
|
-
`),null;let n=await t.json();return
|
|
84
|
-
`);if(l!=="create"){let h=i.workspaces[l];return{workspaceId:h.id,label:`${i.orgName} / ${h.name}`}}let c=await
|
|
85
|
-
`);continue}return{workspaceId:f,label:`${i.orgName} / ${m}`}}}function
|
|
86
|
-
`);continue}return r}}finally{s.close()}}async function
|
|
87
|
-
`),1;let n=await t.json(),s=`${
|
|
81
|
+
${i}`)}function Hc(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 Io(e,t,n){let s=Ro({input:process.stdin,output:process.stderr});Se(s);try{for(;;){let r=t(await s.question(e));if(r!=null)return r;process.stderr.write(n)}}finally{s.close()}}async function jo(e,t){return Io(e,n=>vo(n,t),`gruum: enter one of the numbers.
|
|
82
|
+
`)}async function Po(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}).
|
|
83
|
+
`),null;let n=await t.json();return Hc(n.orgs)}async function Kc(e,t,n,s){let r=s??await Po(e);if(!r)return null;let o=null;for(;;){let i=go(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=yo(i.workspaces,Ln(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 jo(ko("This account has more than one organization.",i.orgs,"organization"),i.orgs);o=i.orgs[h].id;continue}let a=Ln(n),l=await Io(xo(i.orgName,i.workspaces,a),h=>wo(h,i.workspaces),`gruum: enter C, or one of the numbers.
|
|
84
|
+
`);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})`}
|
|
85
|
+
`);continue}return{workspaceId:f,label:`${i.orgName} / ${m}`}}}function Jc(e,t){let n=St(e);for(let s of n.files.values()){let r=uo(s);if(r)return r}return lo(t)}async function Zc(e,t){let n=co(Jc(e,t)),s=Ro({input:process.stdin,output:process.stderr});Se(s);try{for(;;){let r=(await s.question(n)).trim(),o=po(r);if("error"in o){process.stderr.write(`gruum: ${o.error}
|
|
86
|
+
`);continue}return r}}finally{s.close()}}async function Lo(){let e=`Cursor on ${Bc()}`,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 ${Me}?
|
|
87
|
+
`),1;let n=await t.json(),s=`${Me}/extension/connect?code=${encodeURIComponent(n.userCode)}`;process.stdout.write(`Sign in to Gruum to connect this CLI.
|
|
88
88
|
|
|
89
89
|
Code: ${n.userCode}
|
|
90
90
|
${s}
|
|
91
91
|
|
|
92
92
|
Waiting for confirmation\u2026
|
|
93
|
-
`);let r=Date.now()+600*1e3;for(;Date.now()<r;){await new Promise(a=>setTimeout(a,2e3));let o=await
|
|
94
|
-
`),0}return process.stderr.write("gruum: sign-in timed out. Run `npx @gruum/cli login` again.\n"),1}function
|
|
95
|
-
`),null;let s=!!process.stdin.isTTY,r=
|
|
96
|
-
`)):l=[l[p]]}if(l.length===0){f||process.stderr.write(`${
|
|
97
|
-
`);let
|
|
93
|
+
`);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 zc({token:i.token,apiOrigin:Me}),process.stdout.write(`Signed in. This CLI can read specs for your projects.
|
|
94
|
+
`),0}return process.stderr.write("gruum: sign-in timed out. Run `npx @gruum/cli login` again.\n"),1}function On(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 Vn(e,t){let n=Wc(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.
|
|
95
|
+
`),null;let s=!!process.stdin.isTTY,r=Gc(e);if(r&&r.repo===n&&r.workspaceId&&(r.host||!s))return r;let o=jt(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 null;let a=await i.json(),l=Array.isArray(a.projects)?a.projects.map(On).filter(k=>k!==null):[],c=!1,u="",f;if(l.length>0&&s){let k=await Po(t);if(!k)return null;f=k;let w=l.map(d=>ho(k,d)),g=[...w.map(d=>({name:d})),{name:"Create a new one"}],p=await jo(bo(w),g);p===w.length?(l=[],process.stderr.write(`Creating\u2026
|
|
96
|
+
`)):l=[l[p]]}if(l.length===0){f||process.stderr.write(`${mo}
|
|
97
|
+
`);let k=await Kc(t,s,n,f);if(!k)return null;let w=await K(t,"/api/v2/cli/projects",{method:"POST",body:JSON.stringify({repo:n,rootPath:e.root,...k.workspaceId?{workspaceId:k.workspaceId}:{}})}),g=await w.json().catch(()=>({}));typeof g.place?.org=="string"&&typeof g.place.workspace=="string"?u=`${g.place.org} / ${g.place.workspace}`:u=k.label;let p=On(g.project);if(c=g.created!==!1,!w.ok||!p){let d=typeof g.path=="string"?g.path:"";return process.stderr.write(`gruum: ${g.error||`couldn't create a project (${w.status})`}
|
|
98
98
|
`),d&&process.stderr.write(`${o}${d}
|
|
99
|
-
`),null}l=[p]}let m=
|
|
100
|
-
${
|
|
99
|
+
`),null}l=[p]}let m=io(l,e.root);if(!m){let k=l.map(w=>` ${w.name}${w.rootPath?` #${w.rootPath}`:""}
|
|
100
|
+
${Dn(o,w.id)}`).join(`
|
|
101
101
|
`);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.
|
|
102
|
-
${
|
|
103
|
-
`),null}let h=m.host??null;if(!h&&s)for(
|
|
104
|
-
`);continue}h=p.host,process.stderr.write(`Live URL set to ${
|
|
105
|
-
`)}else
|
|
106
|
-
`);let $={...m,host:h,workspaceId:m.workspaceId??null,hostDeclined:!1};return
|
|
107
|
-
`),
|
|
102
|
+
${k}
|
|
103
|
+
`),null}let h=m.host??null;if(!h&&s)for(Co(o,{...m,host:h},c,u);!h;){let k=await Zc(e,n),w=await K(t,`/api/v2/cli/projects/${encodeURIComponent(m.id)}/url`,{method:"POST",body:JSON.stringify({url:k})}),g=await w.json().catch(()=>({})),p=On(g.project);if(!w.ok||!p?.host){process.stderr.write(`gruum: ${g.error||`couldn't save that URL (${w.status})`}
|
|
104
|
+
`);continue}h=p.host,process.stderr.write(`Live URL set to ${fo(h)}.
|
|
105
|
+
`)}else Co(o,{...m,host:h},c,u),!h&&!s&&process.stderr.write(`No live URL yet. Add one on that page.
|
|
106
|
+
`);let $={...m,host:h,workspaceId:m.workspaceId??null,hostDeclined:!1};return re(Eo(e),$),$}async function Bn(e,t,n={}){if(!t)return null;let s=Nn();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 Vn(e,s);if(!r)return process.stderr.write(`This spec is only on this computer. It was not published.
|
|
107
|
+
`),null;let o=await K(s,`/api/v2/cli/projects/${encodeURIComponent(r.id)}/baseline`,{method:"POST",body:JSON.stringify({concept:"button",baseline:t})}),i=await o.json().catch(()=>({}));if(o.status===409)return process.stderr.write(`Gruum already has a published spec, so this draft was not published over it.
|
|
108
|
+
`),await Xe(e,!1),null;let a=Be(i.baseline);return!o.ok||!a?(process.stderr.write(`gruum: ${i.error||`couldn't publish that spec (${o.status})`}. It is only on this computer.
|
|
109
|
+
`),null):(re(Ce(e),a),process.stdout.write(`Published it as v${a.version}.
|
|
110
|
+
${Dn(jt(s),r.id)}
|
|
111
|
+
`),a)}catch(r){if(De(r))throw r;return process.stderr.write(`gruum: couldn't reach Gruum to publish that spec. It is only on this computer.
|
|
112
|
+
`),null}}async function Xe(e,t){if(t)return"local";let n=Nn();if(!n)return"local";try{let s=await Vn(e,n);if(!s)return"local";let r=Pt(e.repoDir),o=await K(n,`/api/v2/cli/projects/${encodeURIComponent(s.id)}/baseline?concept=button&branch=${encodeURIComponent(r)}`);if(o.status===404||!o.ok)return"local";let i=await o.json(),a=Be(i.baseline);return a?(re(Ce(e),a),re(In(e),i.exceptions??{}),"remote"):"local"}catch(s){if(De(s))throw s;return process.stderr.write(`gruum: couldn't reach Gruum. Checking the spec cached in .gruum/baseline.json.
|
|
113
|
+
`),"local"}}async function Fn(e){let t=Nn();if(!t)return null;let n=await Vn(e,t);return n?{credentials:t,project:n}:null}async function Oo(e,t,n,s){let r=await Fn(e);if(!r)return;let o=Pt(e.repoDir);if(o)try{let i=await K(r.credentials,`/api/v2/cli/projects/${encodeURIComponent(r.project.id)}/drift`,{method:"POST",body:JSON.stringify({action:"observe",concept:"button",branch:o,commit:_o(e.repoDir),baselineVersion:n,source:s,items:t})});i.ok||process.stderr.write(`gruum: couldn't report this check (${i.status}). The local result still stands.
|
|
108
114
|
`)}catch{process.stderr.write(`gruum: couldn't reach Gruum to report this check. The local result still stands.
|
|
109
|
-
`)}}async function
|
|
110
|
-
${a}`:l}}catch{return{ok:!1,text:"Couldn't reach Gruum to request an exception."}}}async function
|
|
111
|
-
`)}}catch{return{ok:!1,text:"Couldn't reach Gruum to read exception status."}}}var
|
|
115
|
+
`)}}async function Mo(e,t,n){let s=await Fn(e);if(!s)return{ok:!1,text:"Sign in with gruum login before requesting an exception."};let r=Pt(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:_o(e.repoDir),reason:n,item:t})}),i=await o.json().catch(()=>({}));if(!o.ok)return{ok:!1,text:i.error||`Request failed (${o.status}).`};let a=i.reviewUrl?`${jt(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}
|
|
116
|
+
${a}`:l}}catch{return{ok:!1,text:"Couldn't reach Gruum to request an exception."}}}async function No(e,t){let n=await Fn(e);if(!n)return{ok:!1,text:"Sign in with gruum login to see exception status."};let s=Pt(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(`
|
|
117
|
+
`)}}catch{return{ok:!1,text:"Couldn't reach Gruum to read exception status."}}}var Mt="0.1.17",To=`gruum ${Mt}: keep buttons on the Gruum spec
|
|
112
118
|
|
|
113
119
|
Run it as \`npx @gruum/cli <command>\`.
|
|
114
120
|
|
|
@@ -126,9 +132,9 @@ Usage:
|
|
|
126
132
|
gruum spec [--baseline <file>]
|
|
127
133
|
Print the spec packet an agent reads before writing a button.
|
|
128
134
|
gruum baseline --write [--out <file>] [--root <dir>]
|
|
129
|
-
Draft a
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
Draft a spec from the working tree into .gruum/baseline.json.
|
|
136
|
+
When you are signed in and this project has no spec yet, that
|
|
137
|
+
draft is published. A spec already published is left as it is.
|
|
132
138
|
gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
133
139
|
Write .cursor/hooks.json, .cursor/mcp.json, the rule pointer, and a
|
|
134
140
|
pre-commit line. --remove deletes exactly what init added.
|
|
@@ -137,36 +143,36 @@ Usage:
|
|
|
137
143
|
gruum mcp
|
|
138
144
|
Stdio MCP server: gruum_button_spec, gruum_check_buttons,
|
|
139
145
|
gruum_request_exception, and gruum_exception_status.
|
|
140
|
-
`,
|
|
141
|
-
`),n}function
|
|
142
|
-
`)}}finally{n.close()}}function
|
|
143
|
-
`),0}let r=
|
|
144
|
-
`):process.stdout.write(`${
|
|
145
|
-
`);let l=
|
|
146
|
-
`)}return l.length>0?1:0}async function
|
|
147
|
-
`),0):1}function
|
|
148
|
-
`),2;let t=
|
|
149
|
-
Wrote ${
|
|
150
|
-
`),0}function
|
|
151
|
-
`),!1;if(!n.changed)return s.push(`unchanged ${t}`),!0;let r=V.join(e.repoDir,t);return n.text===""?(
|
|
152
|
-
`),2;let t=
|
|
153
|
-
`),1;
|
|
154
|
-
${
|
|
146
|
+
`,qc=new Set(["--baseline","--root","--out","--cli","--files"]);function Vo(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 qc.has(i)&&e[s+1]!==void 0&&l.push(e[++s]);n.set(i,l)}return{positional:t,flags:n}}var D=(e,t)=>e.flags.has(t),te=(e,t)=>e.flags.get(t)?.[0];function Ne(e,t=process.cwd()){let n=En(t),s=te(e,"--root")??Pn(n).root??"";return En(t,s)}var qe="No spec found. Publish one from Gruum, or draft one locally with `npx @gruum/cli baseline --write`.";function Yc(e,t){let n=de(e,te(t,"--baseline"));return n||process.stderr.write(`gruum: ${qe}
|
|
147
|
+
`),n}function Ye(e,t,n){let s={...t,checkedAt:new Date().toISOString(),baselineVersion:n.baseline.version,items:n.items};return jn(e,s),s}async function Bo(e,t){let n=zn({input:process.stdin,output:process.stdout});Se(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.
|
|
148
|
+
`)}}finally{n.close()}}function Qc(e){return!!process.stdin.isTTY&&!D(e,"--ci")&&!D(e,"--json")&&!D(e,"--staged")}async function Fo(e,t=!1){let n=Ne(e);await Xe(n,D(e,"--baseline"));let s=de(n,te(e,"--baseline"));if(s?.version===0&&!t&&!D(e,"--baseline")){let c=await Bn(n,s,{announceLocal:!1});c&&(s=c)}if(!s){if(!t&&Qc(e)){if(await Bo(_s,Is)!=="baseline")return 0;let u=["baseline","--write"],f=te(e,"--root");f&&u.push("--root",f);let m=await Uo(Vo(u));return m!==0?m:Fo(e,!0)}return process.stderr.write(`gruum: ${qe}
|
|
149
|
+
`),0}let r=ve(n,s,{staged:D(e,"--staged")});D(e,"--staged")||Ye(n,Et(n),r);let o=(e.flags.get("--files")??[]).map(c=>V.relative(V.join(n.repoDir,n.root),V.resolve(c)).split(V.sep).join("/")),i=Ut(r.items,o),a=It(n);(D(e,"--ci")||D(e,"--report"))&&await Oo(n,i,s.version,D(e,"--ci")?"ci":"local"),D(e,"--json")?process.stdout.write(`${JSON.stringify({baselineVersion:s.version,items:i,exceptions:a},null,2)}
|
|
150
|
+
`):process.stdout.write(`${rs(i,{baselineVersion:s.version,files:r.result.index.files,skipped:r.result.index.skipped},a)}
|
|
151
|
+
`);let l=Fe(i,a);if(D(e,"--strict")){let c=i.some(u=>u.severity==="block"&&a[u.id]==="pending");return l.length>0||c?1:0}if(D(e,"--ci")&&l.length===0){let c=i.filter(u=>a[u.id]==="pending");c.length>0&&process.stdout.write(`${c.length} pending exception${c.length===1?"":"s"}; this run does not fail on them.
|
|
152
|
+
`)}return l.length>0?1:0}async function eu(e){let t=Ne(e);await Xe(t,D(e,"--baseline"));let n=Yc(t,e);return n?(process.stdout.write(`${JSON.stringify(Ft(n),null,2)}
|
|
153
|
+
`),0):1}async function Uo(e){if(!D(e,"--write"))return process.stderr.write(`gruum: pass --write to draft a spec from the working tree.
|
|
154
|
+
`),2;let t=Ne(e),n=Rt(t),s=ns(n,{version:0}),r=te(e,"--out")?V.resolve(te(e,"--out")):Ce(t);re(r,s);let o=V.relative(process.cwd(),r)||r;process.stdout.write(`Drafted a spec from ${n.index.files} files: ${s.styles.length} styles, ${s.tokens.length} tokens, ${s.rules.length} rules, ${s.acceptedFindings.length} accepted findings.
|
|
155
|
+
Wrote ${o}.
|
|
156
|
+
`);let i=await Bn(t,s);return i&&r!==Ce(t)&&re(r,i),0}function Do(e,t,n,s){if(!n.ok)return process.stderr.write(`gruum: ${n.error}
|
|
157
|
+
`),!1;if(!n.changed)return s.push(`unchanged ${t}`),!0;let r=V.join(e.repoDir,t);return n.text===""?(Un(r,{force:!0}),s.push(`removed ${t}`)):($e(r,n.text),s.push(`wrote ${t}`)),!0}function tu(e){if(e.positional[1]!=="cursor")return process.stderr.write(`gruum: usage: gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
158
|
+
`),2;let t=Ne(e),n=te(e,"--cli")??Ue,s=D(e,"--remove"),r=w=>At(V.join(t.repoDir,w)),o=[],i=s?ds(r(".cursor/hooks.json")):fs(r(".cursor/hooks.json"),n),a=s?ms(r(".cursor/mcp.json")):gs(r(".cursor/mcp.json"),n);for(let w of[i,a])if(!w.ok)return process.stderr.write(`gruum: ${w.error}
|
|
159
|
+
`),1;Do(t,".cursor/hooks.json",i,o),Do(t,".cursor/mcp.json",a,o);let l=r(ge);if(s)l!==null&&xs(l)&&(Un(V.join(t.repoDir,ge)),o.push(`removed ${ge}`));else if(l===null||D(e,"--force")){let w=de(t,te(e,"--baseline")),g=bs(w?null:nu(t)),p=w?[...new Set(w.styles.map(d=>d.path))].sort():[];$e(V.join(t.repoDir,ge),ys(p.length?p:g)),o.push(`wrote ${ge}`)}else o.push(`kept ${ge} (exists; --force replaces it)`);let c=s?ks(r(".gitignore")):ws(r(".gitignore"));c.changed&&($e(V.join(t.repoDir,".gitignore"),c.text),o.push("wrote .gitignore"));let u=Lt(V.join(t.repoDir,".husky")),f=["lefthook.yml","lefthook.yaml",".lefthook.yml"].some(w=>Lt(V.join(t.repoDir,w))),m=so(t),h=u?".husky/pre-commit":m?`${m}/pre-commit`:null,$=h?V.resolve(t.repoDir,h):null,k=$?At($):null;if(s){if($&&k!==null){let w=Cs(k);w.changed&&w.text===""?(Un($,{force:!0}),o.push(`removed ${h}`)):w.changed&&($e($,w.text),o.push(`edited ${h}`))}}else{let w=vs({husky:u,lefthook:f,hookText:k,gitHooksDir:m},n);if(w.kind==="print")o.push(`pre-commit ${w.reason}:
|
|
160
|
+
${w.snippet}`);else if(w.changed&&$){if($e($,w.text),w.kind==="git")try{Xc($,493)}catch{}o.push(`wrote ${h}${w.kind==="git"?" (local only; not shared through git)":""}`)}else o.push(`unchanged ${h}`)}return process.stdout.write(`${o.join(`
|
|
155
161
|
`)}
|
|
156
162
|
`),s||process.stdout.write(`
|
|
157
163
|
Commit the .cursor/ files so teammates get the same guardrails. Tokens never go in the repository.
|
|
158
|
-
`),0}function
|
|
164
|
+
`),0}function nu(e){try{return Rt(e)}catch{return null}}async function su(){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 ru(e){let t=e.workspace_roots,n=Array.isArray(t)&&typeof t[0]=="string"&&Lt(t[0])?t[0]:typeof e.cwd=="string"&&Lt(e.cwd)?e.cwd:process.cwd();return Ne({positional:[],flags:new Map},n)}async function ou(e){let t=e.positional[1],n=await su(),s=t==="before-shell"?{permission:"allow"}:{};try{let r=ru(n),o=Pn(r),i={...o.hooks,exceptions:!0},a=de(r),l=Et(r),c=It(r),u=s;if(t==="after-file-edit"){let f=typeof n.file_path=="string"?n.file_path:"",m=Zt(V.relative(r.repoDir,V.resolve(r.repoDir,f)).split(V.sep).join("/"),r.root);a&&m!==null&&Ms(m)&&Ye(r,l,ve(r,a))}else if(t==="stop"){if(a){let f=Ye(r,l,ve(r,a)),m=cs(f,n,i,c);jn(r,m.ledger),u=m.output}}else if(t==="before-shell"){let f=typeof n.command=="string"?n.command:"",m=Wt(f).some(h=>o.hooks.denyGit.includes(h));if(a&&m){let h=Ye(r,l,ve(r,a));u=us(h,n,i,c)}}else return process.stderr.write(`gruum: unknown hook ${String(t)}
|
|
159
165
|
`),2;process.stdout.write(`${JSON.stringify(u)}
|
|
160
166
|
`)}catch(r){process.stderr.write(`gruum hook ${t}: ${r instanceof Error?r.message:String(r)}
|
|
161
167
|
`),process.stdout.write(`${JSON.stringify(s)}
|
|
162
|
-
`)}return 0}async function
|
|
163
|
-
`);continue}let a=await
|
|
164
|
-
`)}return 0}async function
|
|
165
|
-
${
|
|
168
|
+
`)}return 0}async function iu(e){let t=Ne(e),n=Ps({spec:async()=>{let o=de(t,te(e,"--baseline"));return o?{text:JSON.stringify(Ft(o),null,2)}:{text:qe,isError:!0}},check:async o=>{let i=de(t,te(e,"--baseline"));if(!i)return{text:qe,isError:!0};let a=ve(t,i);Ye(t,Et(t),a);let l=Ut(a.items,o);return{text:JSON.stringify({baselineVersion:i.version,blocking:Fe(l,It(t)).length,items:l},null,2)}},request:async(o,i)=>{await Xe(t,!1);let a=de(t);if(!a)return{text:qe,isError:!0};let c=ve(t,a).items.find(f=>f.id===o);if(!c)return{text:`No drift item ${o}. Run gruum_check_buttons and use an id from that list.`,isError:!0};let u=await Mo(t,c,i);return{text:u.text,isError:!u.ok}},status:async o=>{let i=await No(t,o);return{text:i.text,isError:!i.ok}}}),s={name:"gruum",version:Mt},r=zn({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"}})}
|
|
169
|
+
`);continue}let a=await Ls(i,n,s);a&&process.stdout.write(`${JSON.stringify(a)}
|
|
170
|
+
`)}return 0}async function au(){if(process.stdout.write(Ss(Mt)),!process.stdin.isTTY)return process.stdout.write(`
|
|
171
|
+
${Ae.map(n=>n.usage).join(`
|
|
166
172
|
`)}
|
|
167
|
-
`),0;let e=
|
|
168
|
-
`)}}finally{e.close()}return!t||t==="quit"?0:
|
|
169
|
-
`),0;if(D(t,"--help")||n==="help")return process.stdout.write(
|
|
173
|
+
`),0;let e=zn({input:process.stdin,output:process.stdout});Se(e);let t=null;try{for(;;){let n=await new Promise(s=>{e.question(Rs,s)});if(t=js(n),t==="quit"||t)break;process.stdout.write(`Enter 1, 2, or 3.
|
|
174
|
+
`)}}finally{e.close()}return!t||t==="quit"?0:Ot([t.name,...t.args])}async function Ot(e){let t=Vo(e),n=t.positional[0];if(D(t,"--version"))return process.stdout.write(`${Mt}
|
|
175
|
+
`),0;if(D(t,"--help")||n==="help")return process.stdout.write(To),0;switch(n){case"login":{let s=await Lo();if(s!==0||!process.stdin.isTTY)return s;let r=await Bo(As,Es);return r==="check"?Ot(["check"]):r==="baseline"?Ot(["baseline","--write"]):0}case"check":return Fo(t);case"spec":return eu(t);case"baseline":return Uo(t);case"init":return tu(t);case"hook":return ou(t);case"mcp":return iu(t);case void 0:return au();default:return process.stderr.write(`gruum: unknown command ${n}
|
|
170
176
|
|
|
171
|
-
${
|
|
177
|
+
${To}`),2}}Ot(process.argv.slice(2)).then(e=>{process.exitCode=e},e=>{De(e)&&process.exit(130),process.stderr.write(`gruum: ${e instanceof Error?e.message:String(e)}
|
|
172
178
|
`),process.exitCode=1});
|