@gruum/cli 0.1.16 → 0.1.18
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 +98 -91
- package/package.json +1 -1
package/gruum.mjs
CHANGED
|
@@ -1,114 +1,121 @@
|
|
|
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 qc,existsSync as Ot,rmSync as zn}from"node:fs";import V from"node:path";import{createInterface as Wn}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 Re(e){e.on("SIGINT",()=>{process.stderr.write(`
|
|
3
|
+
`),process.exit(130)})}var Jo=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"]),Zo=new Set(["page","index","layout","route","default"]);function Xo(e){return Jo.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=>!Xo(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function qo(e){return Ve(e.states)}function Yo(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function Jn(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Qo(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return Jn(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return Jn((n??e.value).replace(/-/g," "))}function ei(e){let t=Yo(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?`${Qo(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 ti(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return Zo.has(n)&&s?`${s}/${n}`:n}function ni(e){let t=[...new Set(e.map(s=>ti(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 Xn(e){let t=new Map;for(let r of e){let o=ei(r.variant),i=t.get(o)??new Map,a=qo(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=>ni(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 Qn=1,es=["style.new","state.changed","state.missing","token.unknown","value.hardcoded","native.element","prop.unknown","style.removed","guidance.rule"],Bt={"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 Ft(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function qn(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${Ft(t)}`}function ae(e){return e.context?`${e.state} @ ${e.context}`:e.state}var si=/var\(\s*(--[\w-]+)/g;function ri(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(si))t.add(r[1]);return[...t].sort()}function oi(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 ii(e){let t=new Map;for(let n of e){let s=ae(n),r=t.get(s),o=oi([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function ts(e){let t=new Map,n=(s,r,o)=>{let i=qn(s),a=t.get(i),l=ii([...a?ai(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(ae(u))||c.set(ae(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:ri(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=qn(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 ai(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function li(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 Yn=/^(\d+) native /;function ci(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 tt={hardcoded:"value.hardcoded",native:"native.element",props:"prop.unknown"},ui=new Set(Object.values(tt));var pi={"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 ns(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:ci(n.id,s)});return t}function Tt(e){return`${e.path}#${Ft(e.text.replace(/\s+/g," ").trim())}`}function ss(e,t={}){let n=li(e.previewCss),s=[...ts(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:Qn,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:ns(e).filter(({check:i})=>i in tt).map(({check:i,finding:a,key:l})=>({check:i,key:l,message:a.message})),settings:{severity:{...Bt,...t.settings?.severity??{}}}}}function fi(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 Vt(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function Dt(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function di(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 rs(e,t){let n={...Bt,...t.settings.severity},s=[],r=(p,d="")=>{s.push({id:`${p.kind}:${Ft(`${p.styleId??""}|${p.state??""}|${d}`)}`,severity:n[p.kind],...p})},o=ts(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"} (${Dt((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 ${Dt(x,3)},`:"use a spec style,":d?`restyle ${d.selector} only through spec modifiers`:x.length?`use ${Dt(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=>[ae(v),v]));for(let v of p.states){let x=ae(v),C=y.get(x),j=fi(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.`},Vt(v.declarations))}}for(let p of o.values()){let d=i.get(p.id);if(!d)continue;let y=new Set(p.states.map(ae));for(let v of d.states){let x=ae(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: ${Vt(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=di(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=ns(e).filter(({check:p})=>p in tt);for(let p of es)if(ui.has(p))for(let{check:d,finding:y,key:v}of k){if(tt[d]!==p)continue;let x=$.get(v)??[];if(x.some(A=>!gi(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:pi[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(Tt(d));for(let p of t.rules){if(g.has(Tt(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.`},Tt(p))}return s}function gi(e,t,n){if(t===n)return!1;if(e==="native"){let s=Yn.exec(t)?.[1],r=Yn.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}var mi={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 Ut(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...mi,drift:es.map(n=>({kind:n,severity:e.settings.severity[n]??Bt[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=>[ae(s),Vt(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!==Qn||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 hi(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 zt(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 os(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 hi(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 is(e){return{schema:1,checkedAt:e,baselineVersion:null,items:[],followups:{}}}function as(e,t){if(!e||typeof e!="object")return is(t);let n=e;return n.schema!==1||!Array.isArray(n.items)?is(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 Ae={exceptions:!1,denyGit:["commit","push"],maxFollowups:2},Wt=8;function ls(e){let t=e.slice(0,Wt).map(n=>{let s=n.refs[0],r=s?` (${s.path}${s.line?`:${s.line}`:""})`:"";return`- ${n.title}${r}. ${n.fix}`});return e.length>Wt&&t.push(`- and ${e.length-Wt} more; run \`gruum check\`.`),t.join(`
|
|
6
|
+
`)}function cs(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 us(e,t,n=Ae,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
|
+
${ls(r)}
|
|
8
8
|
|
|
9
|
-
${
|
|
10
|
-
${
|
|
9
|
+
${cs(n)}`},ledger:{...e,followups:{...e.followups,[o]:i+1}}}}function Gt(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 ps(e,t,n=Ae,s={}){let r=Gt(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
|
+
${ls(o)}
|
|
11
11
|
|
|
12
|
-
${
|
|
13
|
-
`}function
|
|
14
|
-
`)}function
|
|
12
|
+
${cs(n)}`}}var Ue="npx --no-install @gruum/cli",fs={afterFileEdit:"after-file-edit",stop:"stop",beforeShellExecution:"before-shell"},bi=/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+hook\s+(after-file-edit|stop|before-shell)\s*$/;function Ht(e){return typeof e=="string"&&bi.test(e)}function nt(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 st(e){return`${JSON.stringify(e,null,2)}
|
|
13
|
+
`}function ds(e,t=Ue){let n=".cursor/hooks.json",s=nt(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(fs)){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 ${fs[a]}`,u=l.filter(f=>Ht(f?.command));u.length===1&&u[0].command===c||(o[a]=[...l.filter(f=>!Ht(f?.command)),{command:c}],i=!0)}return i?{ok:!0,text:st({version:r.version??1,...r,hooks:o}),changed:!0}:{ok:!0,text:e,changed:!1}}function gs(e){let t=".cursor/hooks.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=nt(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=>!Ht(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:st({...s,hooks:r}),changed:!0}}function yi(e){let[t,...n]=e.trim().split(/\s+/);return{command:t,args:[...n,"mcp"]}}function ms(e,t=Ue){let n=".cursor/mcp.json",s=nt(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=yi(t),a=o.gruum;return JSON.stringify(a)===JSON.stringify(i)?{ok:!0,text:e,changed:!1}:{ok:!0,text:st({...r,mcpServers:{...o,gruum:i}}),changed:!0}}function hs(e){let t=".cursor/mcp.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=nt(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:st({...s,mcpServers:r}),changed:!0}):{ok:!0,text:e,changed:!1}}var me=".cursor/rules/gruum-buttons.mdc",bs="<!-- written by gruum init cursor -->",xi=20,wi=["**/*.css","**/*.scss","**/*.tsx","**/*.jsx"];function ys(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,xi);return n.length?n:wi}function xs(e){return["---","description: Buttons in this repository follow a spec published in Gruum.",`globs: ${e.join(",")}`,"alwaysApply: false","---",bs,"","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 ws(e){return e.includes(bs)}function rt(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 ki=e=>`${e} check --staged`;function vs(e,t=Ue){let n=ki(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 _e=[{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=_e.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<=_e.length?_e[n-1]:_e.find(s=>s.name===t)??null}var vi="2025-06-18",ot="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.",it={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. ${ot}`,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. ${ot}`,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. ${ot}`,gruum_exception_status:`Pending, accepted, or rejected for this branch's exception requests. Pass an id to read one. ${ot}`};function Ps(e){return[{name:"gruum_button_spec",description:it.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:it.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:it.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:it.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 at(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 at(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:at(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:vi,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 at(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:at(o,-32601,`Method not found: ${s.method}`)}}var $i=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,Ci=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,Si=/\.(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,Ri=/(^|\/)\.gruum\//;function Kt(e){return!$i.test(`${e}/`)&&!Ri.test(`${e}/`)}function Jt(e,t){return Ci.test(e)||Si.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 Ai=/\.(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 Ai.test(e)}function Zt(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function Xt(e,t){let n=Zt(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=Xt(r.path,n);o===null||!Kt(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):Jt(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 lt(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 _i(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 qt=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function Fs(e){let t=[];qt.lastIndex=0;let n=0;for(;n<e.length;){qt.lastIndex=n;let s=qt.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=_i(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 Yt(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 Ei=new Set(["html","body"]),Ii=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function ut(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&&ut(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"&&Ei.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"&&Ii.has(t.name))}var ct=["hover","focus","active","selected","current","loading","disabled"],ji={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"},Pi={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},Li={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"},Oi=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),Bs=e=>ji[e.toLowerCase()]??e.toLowerCase(),le={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function Gs(e){if(e.kind==="pseudo"){let t=Pi[e.name];if(!t)return null;let n=le[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=Li[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]:Oi.has(e.name.toLowerCase())?e.name:null;return n?{state:Bs(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function Mi(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 pt(e){let t=[],n=new Map;for(let o of e){if(Mi(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=ct.indexOf(e);return t===-1?ct.length:t}function he(e){return e.length?e.join(" + "):"default"}function Qt(e){return e.replace(/:hover\b/g,`.${le.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${le.focus}`).replace(/:active\b/g,`.${le.active}`)}var Ni=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"]),Ti=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"]),Di=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 Ni.has(t)?"paint":Ti.has(t)?"layout":Di.has(t)?"hint":"box"}var Vi={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?Vi[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var vu={hover:{classes:[le.hover],attrs:{}},focus:{classes:[le.focus],attrs:{}},active:{classes:[le.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 Bi="data-gs-sheet";function Js(e){return`[${Bi}="${e.replace(/["\\]/g,"")}"]`}function Ks(e){return/\.module\.[a-z]+$/i.test(e)}var Fi=new Set(["button","a","div","span","input","summary","label"]);function be(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 Ui(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 ft(e,t){let n=q(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>Ui(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(!Fi.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 en(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function dt(e){let t=en(e,"display");if(/^none\b/i.test(t))return"display: none";let n=en(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=en(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 zi=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,zi)}}function ye(e,t){return{...e,status:"na",summary:t,findings:[]}}var tn=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 Wi(e,t,n){return tr(e,t).some(s=>tn(s).includes(n))||t.filter(s=>er(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var Gi=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function Hi(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 ye(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of Gi){let i=n.filter(a=>!Wi(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,Ki=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function Ji(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 ye(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=tn(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=>tn(l).includes("focus")).some(l=>l.declarations.some(c=>Ki.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 Zi(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 ye(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 Xi=/var\((?:[^()]|\([^()]*\))*\)/g,Ys=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,qi=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,Yi=/(?<![\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 nn(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?nn(i,t,n+1):o!==void 0?nn(o.trim(),t,n+1):s})}var Qi=[[/^(?: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 ea(e,t){if(!t)return null;let n=Qi.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function ta(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=nn(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 ye(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(Xi," ");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(qi.test(u.property))for(let m of f.matchAll(Yi)){let h=ea(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 na(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 ye(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 sa(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 ra(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 ye(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 oa(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 ye(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 ia(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[Hi(e),Ji(e),na(e),sa(e),Zi(e),ta(e),ra(e),oa(e),ia(e)]}var aa=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,sr=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,la=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),ca=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),ua=new Set(["classNames","classnames","clsx","cn","cx"]),pa=/^(?: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 fa(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 da(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",...da(e,t)}}function bt(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)||la.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 rn(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=bt(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 Ie(e){return e.split(/\s+/).filter(Boolean)}function ce(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 mt(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var sn=/^[A-Za-z_$][\w$]*$/;function on(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 an(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)?je(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function je(e,t,n=0){if(n>4)return null;let s=an(e);for(let c of["||","&&"]){let u=on(s,c);if(u<0)continue;let f=je(s.slice(0,u),t,n+1),m=je(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 Ee(e,t=mt()){let n=an(e);if(!n)return{classes:[],dynamic:!1};let s=pr(n);if(s){let c=je(s.condition,t);return c===null?{classes:[],dynamic:!0}:Ee(c?s.yes:s.no,t)}let r=on(n,"&&");if(r>=0){let c=je(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?Ee(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:Ie(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(sn.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=Ee($,t);if(k.dynamic)return{classes:[],dynamic:!0};u+=k.classes.join(" ")}f=h+1}return{classes:Ie(u),dynamic:!1}}if(sn.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:Ie(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=Ee(a[1],t);return c.dynamic||c.classes.length!==1?{classes:[],dynamic:!0}:c}let l=/^([A-Za-z_][\w]*)\s*\(([\s\S]*)\)$/.exec(n);if(l&&ua.has(l[1])){let c=[];for(let u of cr(l[2])){let f=Ee(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function yt(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=ce(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=ce(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 ln(e,t){let n=yt(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:Ie(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:Ee(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 ga(e){return e==="class"||e==="className"?!1:!pa.test(e)&&!/^on/i.test(e)}function dr(e){let t={};for(let n of yt(e).list){if(!ga(n.name)||n.expr!==void 0)continue;let s=n.value??"";fr(n.name,s)&&(t[n.name]=s)}return t}var ma=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,ha=new Set(["disabled","hidden"]);function gt(e,t,n=0){if(n>4)return null;let s=an(e),r=ce(s,0);if(r&&r.end===s.length)return r.value;let o=pr(s);if(o){let l=je(o.condition,t);return l===null?null:gt(l?o.yes:o.no,t,n+1)}let i=on(s,"||");if(i>=0){let l=gt(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:gt(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!sn.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 ba(e,t){let n={};for(let s of yt(e).list){if(s.expr===void 0||!ma.test(s.name))continue;let r=gt(s.expr,t);if(r!=null){if(ha.has(s.name)){r!=="false"&&(n[s.name]="");continue}fr(s.name,r)&&(n[s.name]=r)}}return n}function ya(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 ht(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=bt(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=ht(i.body,t+1);else if(ca.has(a)){let l=ln(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${rr(l.classes.join(" "))}"`:"",u=ht(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 xa(e){let t=ln(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=rn(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=xa(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var wa=8;function ka(e){let t=e.trim(),n=ce(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function va(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=ce(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=ka(a[3]);c!==null&&o.set(l,c)}return{values:o,end:s}}function $a(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=va(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 mt(l.values,c)}return mt()}function Ca(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 Sa(e,t,n,s){let r=fa(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let m=ya(e.slice(t.openStart,t.openEnd),n-t.openStart);return{kind:"component",...r,component:{tag:t.tag,...m}}}let o=$a(e,t);for(let[m,h]of Ca(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=mt(new Map(o.values),o.aliases),c=Ra(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:gr(e,t.openStart),bodyHtml:ht(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,wa).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 Ra(e,t){let n=ln(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...dr(e),...ba(e,t)}}}function cn(e,t,n,s){if(aa.test(s))return or(e,t);let r=rn(e,t);return r==="too-big"||!r?or(e,t):Sa(e,r,t,n)}function Aa(e){let t={},n=new Set,{list:s,spread:r}=yt(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=Aa(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(...Ie(n.literals.className))),{draw:a?null:[...e.staticClasses,...o],selects:r,unknown:i}}function un(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 _a(e,t,n,s,r){for(let o of un(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=_a(s,t,e.component.tag,r,o);if(!i)return e;let a=rn(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:ht(a.body)}}:e}function xt(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 un(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 $=bt(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 Ea(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 Ia(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=ce(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 ja(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=ce(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=ce(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 Pa(e,t,n,s){let r=[];for(let o of un(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 La(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(...Ie(c.text));let l=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:i,prefixes:a,classNameProp:l}}function Oa(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=Pa(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=Ea(r.source,f),w=0;for(;w<$.length;){if($[w]!=="<"||$[w+1]==="/"||$[w+1]==="!"){w++;continue}let g=bt($,w);if(!g||g==="too-big"){w++;continue}if(w=g.openEnd,/^[A-Z]/.test(g.tag))continue;let p=Ia(g.attrs);if(!p)continue;let d=La(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:ja(p,j);if(I){y=3,v=Oa(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 Ma=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,Na=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,Ta=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),Da=new Set(["icon","glyph","svg"]),Va=new Set(["label","text","title","caption"]),Ba=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(Ba);return t.some(n=>Da.has(n))?"icon":t.some(n=>Va.has(n))?"label":null}function Fa(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(Ma)){let r=s[1];if(!Ta.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(Na)].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 Ua(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 za=["text","icon-start","icon-end","icon"],yr={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function Wa(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 Pe(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(Fa),o=r.filter(h=>h.role==="label"),i=r.filter(h=>h.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[Pe(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 $=Wa(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:[Pe(c.icon),Pe(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[Pe(u.label),Pe(u.icon)],classes:[],attrs:{}});let f=null;for(let h of s.rules)if(f=Ua(h.selector,h.declarations,l),f)break;let m=c?.icon??u?.icon??i[0]??null;f&&m&&n("icon",{path:s.sheet,slots:[Pe(m)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:yr.text,sheets:t.get("text")??[]},...za.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:yr[s],sheets:t.get(s)??[]}))]}function Ga(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 Ha=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function xe(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":Ga(m?.resolved??null,l),isAt:f,skip:(c?.skip??!1)||f&&Ha.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 ue(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 Ka=25,Ja=12,kr=700,Za=/\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 Xa(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 qa(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 Ya(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(be(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 Qa(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(se).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function el(e){return e.length>kr?`${e.slice(0,kr).trimEnd()}\u2026`:e}function vr(e,t,n,s){let r=qa(n.classKeywords,n.prose),o=Ya(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 Xa(f)){if(!r.test(h.text)&&!h.headings.some(w=>r.test(w)))continue;let $=h.headings.length?Qa(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:el(h.text),rule:Za.test(h.text),styles:k})}m.length!==0&&a.push({path:u.path,kind:u.kind,passages:m.slice(0,Ja),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,Ka).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"]),tl=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),nl={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},sl=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function fn(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 rl(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function pn(e){let t=e.map(n=>sl.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function Le(e,t){let n=fn(e).filter(r=>!t.has(r)&&!tl.has(r)),s=null;return n.length>1&&$r.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>nl[r]??[r]),axis:s}}var Cr=/\.((?:\\.|[\w-])+)/g,ol=/\[\s*([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*))\s*\]/g;function il(e,t){let n=e.split("/"),s=(n.pop()??"").replace(/(\.module)?\.[a-z]+$/i,""),r=n.pop()??"";return fn(s).some(a=>t.has(a))||fn(r).some(a=>t.has(a))?Le(s,t).words:[]}function al(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(...Le(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...Le(o,t).words)}}return n}function Oe(e,t){let n=rl(t),s=be(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(Cr)].map(u=>Le(u[1],n));for(let u of o.matchAll(ol)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!$r.has(f))continue;let m=u[2]??u[3]??u[4]??"",h=Le(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=>pn(u.words)).join(" + "),axis:a.length===1?a[0].axis:null};let l=al(r,n);if(l.length>0)return{title:`In ${l.join(" ")}`,axis:null};let c=il(e.path,n);if(c.length>0)return{title:pn(c),axis:null};if(e.base){let u=ll(e.path,n);return u.length>0?{title:`${pn(u)} Base`,axis:null}:{title:"Base",axis:null}}return{title:"Unnamed",axis:null}}function ll(e,t){let n=e.split("/").pop()??"";if(!/\.module\.[a-z]+$/i.test(n))return[];let s=n.replace(/\.module\.[a-z]+$/i,"");return Le(s,t).words}var cl=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)||Yt(o,t))return null;if(ut(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(ut(a,t)&&!Yt(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 ul(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>Rr(n,s)))}function pl(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 fl(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 dl(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)===ct.length);return r.length===1?r[0]:null}function dn(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=pt(x.simples);if(C.identity.length===0)continue;let j=y.slice(0,v),I=Sr(j,x,C.identity),A=he(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>=cl)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&&fl(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=>dt(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=>dl(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=he(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=>pl(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&&ul(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=ft(g.key,f);return{...Oe({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:dn(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:Oe({selector:v.map(x=>x.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:y.key,path:e,line:y.line,element:ft(y.key,f),usage:{status:"unknown",files:[],fileCount:0},states:dn(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"?ft(y.key,f):null,states:dn(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 gl={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:gl[e.slice(0,t)]?.[e.slice(t+1)]??null}var E=(e,t)=>({property:e,value:t});function yn(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 bn(e){let t=yn(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 ml(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]??ml(e)??yn(e)??bn(e)}var hl={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"}},bl={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},yl={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},xl={none:"0",sm:"0.125rem","":"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},wl={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"},kl={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function gn(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 vl(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 mn(){return E("box-shadow","0 0 0 var(--gs-ring-w, 3px) var(--gs-ring-c, currentColor)")}var $l={flex:"flex","inline-flex":"inline-flex",block:"block","inline-block":"inline-block",inline:"inline",grid:"grid","inline-grid":"inline-grid",hidden:"none",contents:"contents"},hn={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}=vl(n),o=$l[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",hn[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[E("justify-content",hn[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[E("align-self",c[1]==="auto"?"auto":hn[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=hl[s.replace(/^text-/,"")];if(s.startsWith("text-")&&m&&!r&&!t)return[E("font-size",m.size),E("line-height",m.leading)];let h=bl[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=yl[R]??bn(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=wl[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=kl[R];if(P)return[E("--gs-ring-w",P),mn()]}if(s.startsWith("ring-")&&r===null){let R=gn(s.slice(5),null);if(R)return[E("--gs-ring-c",R),mn()]}if(s.startsWith("ring-")&&r){let R=gn(s.slice(5),r);if(R)return[E("--gs-ring-c",R),mn()]}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=xl[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(et=>E(et,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"):bn(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=yn(T);if(X)return[E("font-size",X)]}let G=gn(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 Cl=48,Sl={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},Rl=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function pe(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
46
|
+
`&&n++;return n}function Al(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 wt(e,t){let n=e[t];if(n!=='"'&&n!=="'"&&n!=="`")return null;let s="",r=!1;for(let o=t+1;o<e.length;o++){let i=e[o];if(i==="\\"){let a=e[o+1];if(a===void 0)return null;s+=a==="n"?`
|
|
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 kn(e,t,n,s){let r=0;for(let o=t;o<e.length;o++){let i=e[o];if(i==='"'||i==="'"||i==="`"){let a=wt(e,o);if(!a)return e.length;o=a.end-1;continue}if(i===n)r++;else if(i===s&&(r--,r===0))return o+1}return e.length}function _l(e,t){let n=0;for(let s=t;s<e.length;s++){let r=e[s];if(r==='"'||r==="'"||r==="`"){let o=wt(e,s);if(!o)return e.length;s=o.end-1;continue}if(r==="("||r==="["||r==="{")n++;else if(r===")"||r==="]"||r==="}"){if(n===0)return s;n--}else if(r===","&&n===0)return s}return e.length}function 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 El(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=_l(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=wt(e,t);return r?{val:{t:"str",v:r.v,at:t},end:r.end}:null}if(n==="["){let r=t+1,o=[];for(;r<e.length;){if(r=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=wt(e,r);if(!c||c.v===null)return null;i=c.v,r=c.end}else if(/[\w$]/.test(e[r])){for(a=r;r<e.length&&/[\w$]/.test(e[r]);)r++;i=e.slice(a,r)}else return null;if(r=W(e,r),e[r]!==":"){e[r]==="("&&(r=kn(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(Rl.has(o)){let a=El(e,i);return a?{val:{t:"str",v:a.v,at:s},end:a.end}:null}return{val:{t:"other",at:s},end:kn(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 kt(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 xn={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function Il(e,t,n,s){let r=Sl[e];if(r)return t.includes(r)||t.push(r),!0;if(e==="dark")return s.on=!0,!0;if(xn[e])return n.min.push(xn[e]),!0;let o=/^max-(sm|md|lg|xl|2xl)$/.exec(e);if(o)return n.below.push(xn[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 jl(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||!Il(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:he(a),context:jl(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 Pl(e){return e.some(t=>He(t.property)!=="hint")}function vt(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 Cn(e,t,n){let s=t.map(f=>`${f.property}:${f.value}`).join(";");if(!s)return[];let r=Qt(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 Ll(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 Ol(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 Ml(e,t,n,s,r){let o=ee(e,t),i={slots:[],defaults:{}};if(!o)return i;let a=kt(o.val)??"",l=W(e,o.end);if(e[l]!==",")return a.trim()?{slots:[wn(a,pe(e,t),r)],defaults:{}}:i;let c=ee(e,l+1);if(!c||c.val.t!=="obj")return a.trim()?{slots:[wn(a,pe(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(wn(a,pe(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=kt($.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=Oe({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:pe(e,$.at),group:r,prop:h.key,value:$.key})}}return f.push(...Nl(c.val,a,m,n,s,e,r)),{slots:f,defaults:Ol(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 Nl(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=kt(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=Oe({selector:`.${g.join("-")}`,path:r,base:!1},s.classKeywords);l.push({title:d.title,axis:d.axis,base:!1,classes:p,line:pe(o,m),group:i,when:k.map(y=>({prop:y.axis,value:y.value}))})}}return l}function wn(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 Tl(e){let t=e.match(/\bclassName\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*"([^"]*)"\s*\}|\{\s*'([^']*)'\s*\})/);return t?.[1]??t?.[2]??t?.[3]??t?.[4]??null}var Dl=new Set(["opacity","z-index","font-weight","line-height","flex","flex-grow","flex-shrink","order","zoom"]);function Vl(e){return e.replace(/^[A-Z]/,t=>`-${t.toLowerCase()}`).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function Bl(e,t){return t.t==="str"?t.v:t.t==="num"?Dl.has(e)?String(t.v):`${t.v}px`:null}function $t(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(...$t(o.value,c));continue}let i=Vl(o.key),a=Bl(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 vn(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 Fl(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)),he(n)}function $n(e){let t=[];for(let n of xe(`.__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=pt(r.simples),i=he(o.states),a=ue(n.ownBody).filter(l=>ne(l.property,l.value));a.length&&t.push({state:i,context:n.context,declarations:a});for(let l of vt(n.ownBody))t.push({state:Fl(i,l.state),context:[n.context,l.context].filter(Boolean).join(" \xB7 "),declarations:l.declarations})}return t}function Ul(e){let t=e.match(/\bstyle\s*=\s*"([^"]*)"/);if(t){let i=ue(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?$t(o.val,"default"):[]}function zl(e){let t=Tl(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=vn(e,i);return{classes:"",painted:a?$n(a.css):[]}}if(e[i]==="("){let a=ee(e,i+1);return{classes:"",painted:a?$t(a.val,"default"):[]}}}let o=ee(e,r);return o?{classes:kt(o.val)??"",painted:[]}:{classes:"",painted:[]}}function Wl(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 Gl(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=kn(e,a,"(",")")),a=W(e,a));let l=[];if(e[a]==="`"){let c=vn(e,a);c&&(l=$n(c.css))}else if(e[a]==="("){let c=ee(e,a+1);c&&(l=$t(c.val,"default"))}l.length!==0&&n.push({title:"Styled",axis:null,base:!0,classes:"",line:pe(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(!Wl(i,t))continue;let a=e.indexOf("`",o.index??0),l=a<0?null:vn(e,a);if(!l)continue;let c=$n(l.css);c.length!==0&&n.push({title:"Css",axis:null,base:!0,classes:"",line:pe(e,o.index??0),painted:c})}return n}function Hl(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 Kl(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(!Pl(f))return null;let m=l.get("default\0")?.declarations??[];if(dt(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=>Cn(Hl(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=Al(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=Ml(o,y,n,e,v);a.push({name:Ll(o,d),defaults:x.defaults}),i.push(...x.slots)}i.push(...Gl(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=zl(y),x=[...v.painted,...Ul(y)],C=v.classes.trim();if(!C&&x.length===0)continue;let j=p.index??0,I=pe(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>=Cl)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=Kl(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 Sn=6,Jl=/"([^"\\\n]{0,400})"|'([^'\\\n]{0,400})'|`([^`\\]{0,400})`/g,Zl=/\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)')/g,Xl=/\b(?:styles?|classes|css|cls|s)\.([A-Za-z_]\w*)/g,Je=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ql(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 Yl(e,t){let n=ql(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(Jl))i(a[1]??a[2]??a[3]??"",a.index);for(let a of n.matchAll(Zl))i(a[1]??a[2]??"",a.index);for(let a of n.matchAll(Xl))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 Ql=e=>e.replace(/[-_]+(\w)/g,(t,n)=>n.toUpperCase()),ec=/\[\s*([\w-]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*\]/g,tc=new Set(["data-component","data-slot","role"]);function nc(e,t){return[...e.slice(be(e)).matchAll(ec)].map(s=>({name:s[1],value:s[2]??s[3]??s[4]??null})).filter(s=>!tc.has(s.name)&&!(s.value!==null&&t.has(s.value.toLowerCase())))}function sc(e){return[...e.slice(be(e)).matchAll(/\.((?:\\.|[\w-])+)/g)].map(n=>n[1].replace(/\\(.)/g,"$1"))}function Rn(e,t,n,s,r=!1,o=[],i=()=>null){let a=null,l=()=>a??=t.map(g=>Yl(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(cn(g.original,p,d,g.path),g.original,p,g.path,o,i),m=(g,p)=>({files:g.slice(0,Sn).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=Ql(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 xt(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=sc(g.selector),d=nc(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>=Sn)&&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>=Sn)&&s.push({path:o.path,line:o.line,...n?{example:cn(e.get(o.path)??"",o.offset,[],o.path)}:{}}));return{status:"used",files:s,fileCount:r.size}}var rc={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:rc},Xr=12,_n=200,we=/\.(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,oc=/(^|\/)(plans?|results?|changelogs?|history|archive)(\/|\.|$)|(^|\/)CHANGELOG/i;function ic(e){return Ct.test(e)&&!/(^|\/)README\.md$/i.test(e)?"instruction":oc.test(e)?"record":"documentation"}var Ct=/(^|\/)(AGENTS|CLAUDE|CONTRIBUTING|README|GUIDELINES?)\.md$|(^|\/)(eslint|stylelint|\.eslintrc|\.stylelintrc)[^/]*$|(^|\/)\.cursor\/|(^|\/)\.claude\//i;function fe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ac(e){return(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"")}function Kr(e,t){let n=ac(e).toLowerCase();return t.some(s=>{let r=s.toLowerCase();return n===r||n===`${r}s`})}function lc(e,t){let n=1;for(let s=0;s<t;s++)e.charCodeAt(s)===10&&n++;return n}function de(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>_n?`${a.slice(0,_n)}\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 cc=["",".tsx",".ts",".jsx",".js",".mjs",".vue",".svelte",".css",".module.css",".scss","/index.tsx","/index.ts","/index.js"];function ke(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 cc)if(n(s+r))return s+r;return null}var uc=/import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]|require\(\s*['"]([^'"]+)['"]\s*\)|@import\s+(?:url\()?['"]([^'"]+)['"]/g;function An(e){let t=[];for(let n of e.matchAll(uc)){let s=n[1]??n[2]??n[3];s&&t.push(s)}return t}var pc=/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(pc))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 En=/var\(\s*(--[\w-]+)/g;function St(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 fc(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:ke(e,t.replace(/\.(?:module\.)?(?:css|scss|sass|less)$/i,""),n)}function dc(e){let t=new Map;for(let[n,s]of e)if(Ze.test(n)){for(let r of xe(s))if(St(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(...ue(r.ownBody));for(let c of vt(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 gc(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=fc(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 mc(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 hc=/^(?::root|html|body|\*)$/i,bc=25e4,yc=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,xc=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,wc=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]);function kc(e){let t=new Set,n=new Set;for(let s of e.matchAll(yc)){let r=s[1],o=wc.has(r.toLowerCase())&&r===r.toLowerCase()?t:n;for(let i of s[2].matchAll(xc))o.add(i[1]??i[2])}return{parts:new Set([...t].filter(s=>!n.has(s))),controls:n}}function vc(e,t){let n=new Map;for(let s of t)if(Ze.test(s)){for(let r of xe(e.get(s)))if(St(r.context)&&z(r.selector).some(o=>hc.test(o)))for(let o of ue(r.ownBody))o.property.startsWith("--")&&!n.has(o.property)&&n.set(o.property,o.value)}return n}function $c(e,t){let n=new Set,s=[],r=a=>{for(let l of a.matchAll(En))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
|
-
`)
|
|
55
|
+
`)}`.slice(0,bc)}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(!we.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(fe).join("|")})\\b`,"g"):t.prose;o(b,"implements",_.length?`exports ${_.join(", ")}`:"named for the concept",de(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??=dc(e),k=b=>{let S=m(b),_=[],L=0;for(let O of xe(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(En))l.add(N[1]);let U=vt(O.ownBody),ie=[...gc(b,O.ownBody,$(),s),...ue(O.ownBody),...U.filter(N=>N.state==="default"&&N.context==="").flatMap(N=>N.declarations)];for(let N of ie)for(let J of N.value.matchAll(En))l.add(J[1]);_.push({block:O,parts:F,declarations:ie,previewContext:St(O.context)?"":null,listed:!0});for(let N of U){if(N.state==="default"&&N.context==="")continue;let J=mc(F.join(", "),N.state),Te=z(J).filter(Ko=>Ke(Ko,t,S));if(Te.length===0)continue;let Ho=[O.context,N.context].filter(Boolean).join(" \xB7 ");_.push({block:{...O,selector:J,context:Ho},parts:Te,declarations:N.declarations,previewContext:St(O.context)?N.context:null,listed:!1})}}let M={parts:new Set,controls:new Set};for(let O of f.get(b)??[]){let F=kc(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 ie=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(!(ie.length===0||N.length===0))for(let J of ie)u.push(...Cn(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,_n)}))}},w=new Map;for(let b of a)for(let S of An(e.get(b))){let _=ke(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=>`<${fe(b)}\\b`),...t.roles.map(b=>`role=["']${fe(b)}["']`)].join("|"));for(let b of n)!we.test(b)||Z.test(b)||d.test(e.get(b)??"")&&p.add(b);for(let b of a)for(let S of An(e.get(b))){let _=ke(b,S,s);!_||!we.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=Xn(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)=>ke(b,S,s)),I=[];if(l.size>0){let b=new RegExp(`(?:^|[\\s{;])(${[...l].map(fe).join("|")})\\s*:`),S=new Map;for(let _ of n){if(!Ze.test(_)&&!Hr.test(_))continue;let L=e.get(_),M=de(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=de(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(fe).join("|")})\\b`]:[],...t.elements.map(b=>`<${fe(b)}\\b`),...t.roles.map(b=>`role=["']${fe(b)}["']`)].join("|"));for(let b of n){if(!we.test(b)||a.has(b))continue;let S=e.get(b),_=Z.test(b),L=de(S,R),M=An(S).some(O=>{let F=ke(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:de(S,t.prose))}for(let b of n){if(!(Gr.test(b)||Ct.test(b)))continue;let _=e.get(b),L=de(_,t.prose);L.count!==0&&o(b,Z.test(b)?"tests":"describes",Ct.test(b)?"repo rules / instructions":"documentation",L)}for(let b of n){if(!Z.test(b)||r.has(`tests:${b}`)||!we.test(b))continue;let S=de(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);Rn(e,n.filter(b=>Wr.test(b)&&!Z.test(b)),G,new Set(t.elements),!0,j,(b,S)=>ke(b,S,s)),Rn(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=vc(e,n),et=[];if(i.size>0){let b=new RegExp(t.elements.map(S=>`<${fe(S)}\\b`).join("|"),"g");for(let S of n){if(!we.test(S)||Z.test(S)||a.has(S))continue;let _=e.get(S),L=(_.match(b)??[]).length;if(L===0)continue;let M=de(_,new RegExp(b.source));et.push({path:S,line:M.lines[0]?.line??1,count:L})}}let Gn=[],Hn=new Set;for(let b of n){if(!we.test(b)||Z.test(b))continue;let S=e.get(b),_=xt(b,S,j,(L,M)=>ke(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),ie=[...g].filter(N=>N.startsWith(U)&&N.length>U.length).map(N=>N.slice(U.length));if(ie.length===0)continue;B=[...new Set([...M.known,...ie])].sort()}if(B.length===0)continue;let O=lc(S,L.offset),F=`${b}\0${L.component}\0${M.prop}\0${M.value}`;Hn.has(F)||(Hn.add(F),Gn.push({path:b,line:O,component:L.component,prop:M.prop,value:M.value,known:B}))}}let Wo=n.filter(b=>(Gr.test(b)||Ct.test(b))&&!Z.test(b)).map(b=>({path:b,kind:ic(b)}));G.sort((b,S)=>Number(S.base)-Number(b.base)||b.path.localeCompare(S.path)||b.line-S.line);let Kn=vr(e,Wo,t,G),Go=wr([...f.entries()].map(([b,S])=>({sheet:b,sources:S.map(_=>e.get(_)??""),rules:xe(e.get(b)??"").map(_=>({selector:_.selector,declarations:ue(_.ownBody)}))})));return{components:A.sort(),tokens:I,findings:P,variants:G,audit:nr({variants:G,tokens:I,tokenValues:X,hasComponent:i.size>0,nativeUses:et,unknownProps:Gn,guidance:Kn,noun:t.label.toLowerCase(),element:t.elements[0]??t.id}),guidance:Kn,content:Go,previewCss:$c(X,u),counts:T}}import{execFileSync as Sc}from"node:child_process";import{readdirSync as Rc,readFileSync as Ac,statSync as _c}from"node:fs";import Rt from"node:path";function ve(e,t){try{return Sc("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],maxBuffer:64*1024*1024})}catch{return null}}function In(e,t=""){let s=ve(e,["rev-parse","--show-toplevel"])?.trim()||e;return{repoDir:s,root:Zt(t),stateDir:Rt.join(s,".gruum")}}function At(e){let t=Rt.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=Rc(l).sort()}catch{return}for(let f of u){let m=c?`${c}/${f}`:f,h=Rt.join(l,f),$;try{$=_c(h)}catch{continue}if($.isDirectory()){Kt(m)&&a(h,m);continue}if(!$.isFile())continue;if(!Jt(m,$.size)){o++;continue}let k=Ac(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=ve(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:ve(e.repoDir,["show",`:${r}`])}));return{...t,files:Ns(t.files,s,e.root)}}function no(e){let t=ve(e.repoDir,["remote","get-url","origin"])?.trim()??"",n=lt(t)??Rt.basename(e.repoDir),s=ve(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=ve(e.repoDir,["config","--get","core.hooksPath"])?.trim();return t||ve(e.repoDir,["rev-parse","--git-path","hooks"])?.trim()||null}function _t(e,t={}){let n=Zr[t.concept??"button"],s=At(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 $e(e,t,n={}){let s=_t(e,{concept:t.concept,...n});return{result:s,baseline:t,items:rs(s,t)}}import{mkdirSync as Ec,readFileSync as Ic,writeFileSync as ro}from"node:fs";import re from"node:path";function Xe(e){try{return Ic(e,"utf8")}catch{return null}}function Et(e){let t=Xe(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function Ce(e,t){Ec(re.dirname(e),{recursive:!0}),ro(e,t)}function oe(e,t){Ce(e,`${JSON.stringify(t,null,2)}
|
|
56
|
+
`),jc(e)}function jc(e){let t=e.split(re.sep),n=t.lastIndexOf(".gruum");if(n<=0)return;let s=re.join(t.slice(0,n).join(re.sep),".gitignore"),r=rt(Xe(s));r.changed&&(ro(s,r.text),process.stderr.write(`Added .gruum/ to .gitignore.
|
|
57
|
+
`))}var Se=e=>re.join(e.stateDir,"baseline.json"),oo=e=>re.join(e.stateDir,"drift.json"),jn=e=>re.join(e.stateDir,"exceptions.json"),Pc=e=>re.join(e.stateDir,"config.json");function ge(e,t){return Be(Et(t?re.resolve(t):Se(e)))}function It(e){return as(Et(oo(e)),new Date().toISOString())}function Pn(e,t){oe(oo(e),t)}function Lc(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 jt(e){return Lc(Et(jn(e)))}function Ln(e){let t=Et(Pc(e)),n=Array.isArray(t?.denyGit)?t.denyGit.filter(r=>r==="commit"||r==="push"):Ae.denyGit,s=typeof t?.maxFollowups=="number"&&t.maxFollowups>=0?Math.floor(t.maxFollowups):Ae.maxFollowups;return{...typeof t?.root=="string"?{root:t.root}:{},hooks:{...Ae,denyGit:n,maxFollowups:s}}}import{chmodSync as Dc,mkdirSync as Vc,readFileSync as Ro,writeFileSync as Bc}from"node:fs";import{hostname as Fc,homedir as Uc}from"node:os";import Nn from"node:path";import{createInterface as Ao}from"node:readline/promises";function io(e){return`/v2/projects/${encodeURIComponent(e)}`}function ao(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 lo(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 Oc="http://localhost:3000",Mc=/(^|\.)(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 co(e){return`https://${(e.split("/").pop()||e).toLowerCase().replace(/\.git$/,"").replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"")||"example"}.com`}function uo(e){return`
|
|
57
58
|
Live URL for this repo.
|
|
58
|
-
For example: ${
|
|
59
|
+
For example: ${Oc} or ${e}.
|
|
59
60
|
You may not use wildcards.
|
|
60
61
|
|
|
61
|
-
URL: `}function
|
|
62
|
+
URL: `}function po(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")&&!Mc.test(r))return`https://${r}`}return null}function Nc(e){let t=e.toLowerCase().replace(/:\d+$/,"");return t==="localhost"||t==="127.0.0.1"}function fo(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=Tc(t);if(n)return n;let s=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`;return lo(s)}function Tc(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 go(e){return Nc(e)?`http://${e}`:`https://${e}`}function mo(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 ho="No project for this repo found. Creating\u2026";function bo(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 yo(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
63
|
${t}
|
|
63
64
|
${s.join(`
|
|
64
65
|
`)}
|
|
65
66
|
|
|
66
|
-
Which project should this checkout use? `}function
|
|
67
|
+
Which project should this checkout use? `}function On(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 xo(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 wo(e,t,n){let s=[` C Create ${n}`,...t.map((r,o)=>` ${o+1} ${r.name}`)];return`
|
|
67
68
|
Select a workspace in ${e}, or create one.
|
|
68
69
|
${s.join(`
|
|
69
70
|
`)}
|
|
70
71
|
|
|
71
|
-
Which workspace should this project live in? `}function
|
|
72
|
+
Which workspace should this project live in? `}function ko(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 vo(e,t,n){let s=t.map((r,o)=>` ${o+1} ${r.name}`);return`
|
|
72
73
|
${e}
|
|
73
74
|
${s.join(`
|
|
74
75
|
`)}
|
|
75
76
|
|
|
76
|
-
Which ${n} should this project live in? `}function
|
|
77
|
-
`,{mode:384}),
|
|
77
|
+
Which ${n} should this project live in? `}function $o(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 Co(e){return`/workspace/${encodeURIComponent(e)}`}import{spawnSync as zc}from"node:child_process";var Me="https://app.getgruum.com",_o=()=>Nn.join(Uc(),".config","gruum","credentials.json");function Tn(){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(Ro(_o(),"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 Wc(e){let t=_o();Vc(Nn.dirname(t),{recursive:!0}),Bc(t,`${JSON.stringify(e,null,2)}
|
|
78
|
+
`,{mode:384}),Dc(t,384)}function Pt(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(`${Pt(e)}${t}`,{...n,headers:s})}function Dn(e,t){let n=zc("git",t,{cwd:e,encoding:"utf8"});return n.status!==0?null:n.stdout.trim()||null}function Gc(e){let t=Dn(e,["remote","get-url","origin"]);return t?lt(t):null}function Lt(e){let t=Dn(e,["rev-parse","--abbrev-ref","HEAD"]);return t&&t!=="HEAD"?t:""}function Eo(e){return Dn(e,["rev-parse","HEAD"])}function Io(e){return Nn.join(e.stateDir,"project.json")}function Hc(e){try{let t=JSON.parse(Ro(Io(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 Vn(e,t){return`${e}${io(t)}`}function So(e,t,n,s){let r=Vn(e,t.id),o=s?` in ${s}`:"",i=t.workspaceId?`${e}${Co(t.workspaceId)}
|
|
78
79
|
`:"";process.stderr.write(n?`Created a Gruum project for ${t.repo}${o}.
|
|
79
80
|
${i}${r}
|
|
80
81
|
`:`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=`${
|
|
82
|
+
${i}`)}function Kc(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 jo(e,t,n){let s=Ao({input:process.stdin,output:process.stderr});Re(s);try{for(;;){let r=t(await s.question(e));if(r!=null)return r;process.stderr.write(n)}}finally{s.close()}}async function Po(e,t){return jo(e,n=>$o(n,t),`gruum: enter one of the numbers.
|
|
83
|
+
`)}async function Lo(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}).
|
|
84
|
+
`),null;let n=await t.json();return Kc(n.orgs)}async function Jc(e,t,n,s){let r=s??await Lo(e);if(!r)return null;let o=null;for(;;){let i=mo(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=xo(i.workspaces,On(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 Po(vo("This account has more than one organization.",i.orgs,"organization"),i.orgs);o=i.orgs[h].id;continue}let a=On(n),l=await jo(wo(i.orgName,i.workspaces,a),h=>ko(h,i.workspaces),`gruum: enter C, or one of the numbers.
|
|
85
|
+
`);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})`}
|
|
86
|
+
`);continue}return{workspaceId:f,label:`${i.orgName} / ${m}`}}}function Zc(e,t){let n=At(e);for(let s of n.files.values()){let r=po(s);if(r)return r}return co(t)}async function Xc(e,t){let n=uo(Zc(e,t)),s=Ao({input:process.stdin,output:process.stderr});Re(s);try{for(;;){let r=(await s.question(n)).trim(),o=fo(r);if("error"in o){process.stderr.write(`gruum: ${o.error}
|
|
87
|
+
`);continue}return r}}finally{s.close()}}async function Oo(){let e=`Cursor on ${Fc()}`,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}?
|
|
88
|
+
`),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
89
|
|
|
89
90
|
Code: ${n.userCode}
|
|
90
91
|
${s}
|
|
91
92
|
|
|
92
93
|
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
|
|
94
|
+
`);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 Wc({token:i.token,apiOrigin:Me}),process.stdout.write(`Signed in. This CLI can read specs for your projects.
|
|
95
|
+
`),0}return process.stderr.write("gruum: sign-in timed out. Run `npx @gruum/cli login` again.\n"),1}function Mn(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 Bn(e,t){let n=Gc(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.
|
|
96
|
+
`),null;let s=!!process.stdin.isTTY,r=Hc(e);if(r&&r.repo===n&&r.workspaceId&&(r.host||!s))return r;let o=Pt(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(Mn).filter(k=>k!==null):[],c=!1,u="",f;if(l.length>0&&s){let k=await Lo(t);if(!k)return null;f=k;let w=l.map(d=>bo(k,d)),g=[...w.map(d=>({name:d})),{name:"Create a new one"}],p=await Po(yo(w),g);p===w.length?(l=[],process.stderr.write(`Creating\u2026
|
|
97
|
+
`)):l=[l[p]]}if(l.length===0){f||process.stderr.write(`${ho}
|
|
98
|
+
`);let k=await Jc(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=Mn(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
99
|
`),d&&process.stderr.write(`${o}${d}
|
|
99
|
-
`),null}l=[p]}let m=
|
|
100
|
-
${
|
|
100
|
+
`),null}l=[p]}let m=ao(l,e.root);if(!m){let k=l.map(w=>` ${w.name}${w.rootPath?` #${w.rootPath}`:""}
|
|
101
|
+
${Vn(o,w.id)}`).join(`
|
|
101
102
|
`);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
|
-
`),
|
|
103
|
+
${k}
|
|
104
|
+
`),null}let h=m.host??null;if(!h&&s)for(So(o,{...m,host:h},c,u);!h;){let k=await Xc(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=Mn(g.project);if(!w.ok||!p?.host){process.stderr.write(`gruum: ${g.error||`couldn't save that URL (${w.status})`}
|
|
105
|
+
`);continue}h=p.host,process.stderr.write(`Live URL set to ${go(h)}.
|
|
106
|
+
`)}else So(o,{...m,host:h},c,u),!h&&!s&&process.stderr.write(`No live URL yet. Add one on that page.
|
|
107
|
+
`);let $={...m,host:h,workspaceId:m.workspaceId??null,hostDeclined:!1};return oe(Io(e),$),$}async function Fn(e,t,n={}){if(!t)return null;let s=Tn();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 Bn(e,s);if(!r)return process.stderr.write(`This spec is only on this computer. It was not published.
|
|
108
|
+
`),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.
|
|
109
|
+
`),await qe(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.
|
|
110
|
+
`),null):(oe(Se(e),a),process.stdout.write(`Published it as v${a.version}.
|
|
111
|
+
${Vn(Pt(s),r.id)}
|
|
112
|
+
`),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.
|
|
113
|
+
`),null}}async function qe(e,t){if(t)return"local";let n=Tn();if(!n)return"local";try{let s=await Bn(e,n);if(!s)return"local";let r=Lt(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?(oe(Se(e),a),oe(jn(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.
|
|
114
|
+
`),"local"}}async function Un(e){let t=Tn();if(!t)return null;let n=await Bn(e,t);return n?{credentials:t,project:n}:null}async function Mo(e,t,n,s){let r=await Un(e);if(!r)return;let o=Lt(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:Eo(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
115
|
`)}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
|
|
116
|
+
`)}}async function No(e,t,n){let s=await Un(e);if(!s)return{ok:!1,text:"Sign in with gruum login before requesting an exception."};let r=Lt(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:Eo(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?`${Pt(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}
|
|
117
|
+
${a}`:l}}catch{return{ok:!1,text:"Couldn't reach Gruum to request an exception."}}}async function To(e,t){let n=await Un(e);if(!n)return{ok:!1,text:"Sign in with gruum login to see exception status."};let s=Lt(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(`
|
|
118
|
+
`)}}catch{return{ok:!1,text:"Couldn't reach Gruum to read exception status."}}}var Nt="0.1.18",Do=`gruum ${Nt}: keep buttons on the Gruum spec
|
|
112
119
|
|
|
113
120
|
Run it as \`npx @gruum/cli <command>\`.
|
|
114
121
|
|
|
@@ -126,9 +133,9 @@ Usage:
|
|
|
126
133
|
gruum spec [--baseline <file>]
|
|
127
134
|
Print the spec packet an agent reads before writing a button.
|
|
128
135
|
gruum baseline --write [--out <file>] [--root <dir>]
|
|
129
|
-
Draft a
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
Draft a spec from the working tree into .gruum/baseline.json.
|
|
137
|
+
When you are signed in and this project has no spec yet, that
|
|
138
|
+
draft is published. A spec already published is left as it is.
|
|
132
139
|
gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
133
140
|
Write .cursor/hooks.json, .cursor/mcp.json, the rule pointer, and a
|
|
134
141
|
pre-commit line. --remove deletes exactly what init added.
|
|
@@ -137,36 +144,36 @@ Usage:
|
|
|
137
144
|
gruum mcp
|
|
138
145
|
Stdio MCP server: gruum_button_spec, gruum_check_buttons,
|
|
139
146
|
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
|
-
${
|
|
147
|
+
`,Yc=new Set(["--baseline","--root","--out","--cli","--files"]);function Bo(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 Yc.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=In(t),s=te(e,"--root")??Ln(n).root??"";return In(t,s)}var Ye="No spec found. Publish one from Gruum, or draft one locally with `npx @gruum/cli baseline --write`.";function Qc(e,t){let n=ge(e,te(t,"--baseline"));return n||process.stderr.write(`gruum: ${Ye}
|
|
148
|
+
`),n}function Qe(e,t,n){let s={...t,checkedAt:new Date().toISOString(),baselineVersion:n.baseline.version,items:n.items};return Pn(e,s),s}async function Fo(e,t){let n=Wn({input:process.stdin,output:process.stdout});Re(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.
|
|
149
|
+
`)}}finally{n.close()}}function eu(e){return!!process.stdin.isTTY&&!D(e,"--ci")&&!D(e,"--json")&&!D(e,"--staged")}async function Uo(e,t=!1){let n=Ne(e);await qe(n,D(e,"--baseline"));let s=ge(n,te(e,"--baseline"));if(s?.version===0&&!t&&!D(e,"--baseline")){let c=await Fn(n,s,{announceLocal:!1});c&&(s=c)}if(!s){if(!t&&eu(e)){if(await Fo(_s,Is)!=="baseline")return 0;let u=["baseline","--write"],f=te(e,"--root");f&&u.push("--root",f);let m=await zo(Bo(u));return m!==0?m:Uo(e,!0)}return process.stderr.write(`gruum: ${Ye}
|
|
150
|
+
`),0}let r=$e(n,s,{staged:D(e,"--staged")});D(e,"--staged")||Qe(n,It(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=zt(r.items,o),a=jt(n);(D(e,"--ci")||D(e,"--report"))&&await Mo(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)}
|
|
151
|
+
`):process.stdout.write(`${os(i,{baselineVersion:s.version,files:r.result.index.files,skipped:r.result.index.skipped},a)}
|
|
152
|
+
`);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.
|
|
153
|
+
`)}return l.length>0?1:0}async function tu(e){let t=Ne(e);await qe(t,D(e,"--baseline"));let n=Qc(t,e);return n?(process.stdout.write(`${JSON.stringify(Ut(n),null,2)}
|
|
154
|
+
`),0):1}async function zo(e){if(!D(e,"--write"))return process.stderr.write(`gruum: pass --write to draft a spec from the working tree.
|
|
155
|
+
`),2;let t=Ne(e),n=_t(t),s=ss(n,{version:0}),r=te(e,"--out")?V.resolve(te(e,"--out")):Se(t);oe(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.
|
|
156
|
+
Wrote ${o}.
|
|
157
|
+
`);let i=await Fn(t,s);return i&&r!==Se(t)&&oe(r,i),0}function Vo(e,t,n,s){if(!n.ok)return process.stderr.write(`gruum: ${n.error}
|
|
158
|
+
`),!1;if(!n.changed)return s.push(`unchanged ${t}`),!0;let r=V.join(e.repoDir,t);return n.text===""?(zn(r,{force:!0}),s.push(`removed ${t}`)):(Ce(r,n.text),s.push(`wrote ${t}`)),!0}function nu(e){if(e.positional[1]!=="cursor")return process.stderr.write(`gruum: usage: gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
159
|
+
`),2;let t=Ne(e),n=te(e,"--cli")??Ue,s=D(e,"--remove"),r=w=>Xe(V.join(t.repoDir,w)),o=[],i=s?gs(r(".cursor/hooks.json")):ds(r(".cursor/hooks.json"),n),a=s?hs(r(".cursor/mcp.json")):ms(r(".cursor/mcp.json"),n);for(let w of[i,a])if(!w.ok)return process.stderr.write(`gruum: ${w.error}
|
|
160
|
+
`),1;Vo(t,".cursor/hooks.json",i,o),Vo(t,".cursor/mcp.json",a,o);let l=r(me);if(s)l!==null&&ws(l)&&(zn(V.join(t.repoDir,me)),o.push(`removed ${me}`));else if(l===null||D(e,"--force")){let w=ge(t,te(e,"--baseline")),g=ys(w?null:su(t)),p=w?[...new Set(w.styles.map(d=>d.path))].sort():[];Ce(V.join(t.repoDir,me),xs(p.length?p:g)),o.push(`wrote ${me}`)}else o.push(`kept ${me} (exists; --force replaces it)`);let c=s?ks(r(".gitignore")):rt(r(".gitignore"));c.changed&&(Ce(V.join(t.repoDir,".gitignore"),c.text),o.push("wrote .gitignore"));let u=Ot(V.join(t.repoDir,".husky")),f=["lefthook.yml","lefthook.yaml",".lefthook.yml"].some(w=>Ot(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=$?Xe($):null;if(s){if($&&k!==null){let w=Cs(k);w.changed&&w.text===""?(zn($,{force:!0}),o.push(`removed ${h}`)):w.changed&&(Ce($,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}:
|
|
161
|
+
${w.snippet}`);else if(w.changed&&$){if(Ce($,w.text),w.kind==="git")try{qc($,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
162
|
`)}
|
|
156
163
|
`),s||process.stdout.write(`
|
|
157
164
|
Commit the .cursor/ files so teammates get the same guardrails. Tokens never go in the repository.
|
|
158
|
-
`),0}function
|
|
165
|
+
`),0}function su(e){try{return _t(e)}catch{return null}}async function ru(){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 ou(e){let t=e.workspace_roots,n=Array.isArray(t)&&typeof t[0]=="string"&&Ot(t[0])?t[0]:typeof e.cwd=="string"&&Ot(e.cwd)?e.cwd:process.cwd();return Ne({positional:[],flags:new Map},n)}async function iu(e){let t=e.positional[1],n=await ru(),s=t==="before-shell"?{permission:"allow"}:{};try{let r=ou(n),o=Ln(r),i={...o.hooks,exceptions:!0},a=ge(r),l=It(r),c=jt(r),u=s;if(t==="after-file-edit"){let f=typeof n.file_path=="string"?n.file_path:"",m=Xt(V.relative(r.repoDir,V.resolve(r.repoDir,f)).split(V.sep).join("/"),r.root);a&&m!==null&&Ms(m)&&Qe(r,l,$e(r,a))}else if(t==="stop"){if(a){let f=Qe(r,l,$e(r,a)),m=us(f,n,i,c);Pn(r,m.ledger),u=m.output}}else if(t==="before-shell"){let f=typeof n.command=="string"?n.command:"",m=Gt(f).some(h=>o.hooks.denyGit.includes(h));if(a&&m){let h=Qe(r,l,$e(r,a));u=ps(h,n,i,c)}}else return process.stderr.write(`gruum: unknown hook ${String(t)}
|
|
159
166
|
`),2;process.stdout.write(`${JSON.stringify(u)}
|
|
160
167
|
`)}catch(r){process.stderr.write(`gruum hook ${t}: ${r instanceof Error?r.message:String(r)}
|
|
161
168
|
`),process.stdout.write(`${JSON.stringify(s)}
|
|
162
|
-
`)}return 0}async function
|
|
163
|
-
`);continue}let a=await
|
|
164
|
-
`)}return 0}async function
|
|
165
|
-
${
|
|
169
|
+
`)}return 0}async function au(e){let t=Ne(e),n=Ps({spec:async()=>{let o=ge(t,te(e,"--baseline"));return o?{text:JSON.stringify(Ut(o),null,2)}:{text:Ye,isError:!0}},check:async o=>{let i=ge(t,te(e,"--baseline"));if(!i)return{text:Ye,isError:!0};let a=$e(t,i);Qe(t,It(t),a);let l=zt(a.items,o);return{text:JSON.stringify({baselineVersion:i.version,blocking:Fe(l,jt(t)).length,items:l},null,2)}},request:async(o,i)=>{await qe(t,!1);let a=ge(t);if(!a)return{text:Ye,isError:!0};let c=$e(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 No(t,c,i);return{text:u.text,isError:!u.ok}},status:async o=>{let i=await To(t,o);return{text:i.text,isError:!i.ok}}}),s={name:"gruum",version:Nt},r=Wn({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"}})}
|
|
170
|
+
`);continue}let a=await Ls(i,n,s);a&&process.stdout.write(`${JSON.stringify(a)}
|
|
171
|
+
`)}return 0}async function lu(){if(process.stdout.write(Ss(Nt)),!process.stdin.isTTY)return process.stdout.write(`
|
|
172
|
+
${_e.map(n=>n.usage).join(`
|
|
166
173
|
`)}
|
|
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(
|
|
174
|
+
`),0;let e=Wn({input:process.stdin,output:process.stdout});Re(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.
|
|
175
|
+
`)}}finally{e.close()}return!t||t==="quit"?0:Mt([t.name,...t.args])}async function Mt(e){let t=Bo(e),n=t.positional[0];if(D(t,"--version"))return process.stdout.write(`${Nt}
|
|
176
|
+
`),0;if(D(t,"--help")||n==="help")return process.stdout.write(Do),0;switch(n){case"login":{let s=await Oo();if(s!==0||!process.stdin.isTTY)return s;let r=await Fo(As,Es);return r==="check"?Mt(["check"]):r==="baseline"?Mt(["baseline","--write"]):0}case"check":return Uo(t);case"spec":return tu(t);case"baseline":return zo(t);case"init":return nu(t);case"hook":return iu(t);case"mcp":return au(t);case void 0:return lu();default:return process.stderr.write(`gruum: unknown command ${n}
|
|
170
177
|
|
|
171
|
-
${
|
|
178
|
+
${Do}`),2}}Mt(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
179
|
`),process.exitCode=1});
|