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