@gruum/cli 0.1.1
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 +92 -0
- package/package.json +16 -0
package/gruum.mjs
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{chmodSync as bl,existsSync as pt,rmSync as pn}from"node:fs";import P from"node:path";import{createInterface as xl}from"node:readline";var jr=["style.new","state.changed","state.missing","token.unknown","value.hardcoded","native.element","style.removed","guidance.rule"],ht={"style.new":"block","state.changed":"block","state.missing":"block","token.unknown":"block","value.hardcoded":"block","native.element":"block","style.removed":"warn","guidance.rule":"warn"};function bt(e){let t=0;for(let n=0;n<e.length;n++)t=t*33+e.charCodeAt(n)>>>0;return t.toString(36)}function hn(e){let t=`${e.path}::${e.selector}`;return`v2-style-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}-${bt(t)}`}function te(e){return e.context?`${e.state} @ ${e.context}`:e.state}var Dr=/var\(\s*(--[\w-]+)/g;function Or(e){let t=new Set;for(let n of e)for(let s of n.declarations)for(let r of s.value.matchAll(Dr))t.add(r[1]);return[...t].sort()}function Tr(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 Nr(e){let t=new Map;for(let n of e){let s=te(n),r=t.get(s),o=Tr([...r?.declarations??[],...n.declarations]);t.set(s,{state:n.state,context:n.context,declarations:o})}return[...t.values()]}function xn(e){let t=new Map,n=(s,r,o)=>{let i=hn(s),a=t.get(i),l=Nr([...a?Pr(a.states):[],...r]),c=a?.stateLines??new Map;for(let u of r)c.has(te(u))||c.set(te(u),u.line);t.set(i,{...a??s,id:i,states:l,tokens:Or(l),line:a?.line??o,stateLines:c})};for(let s of e){let r=hn(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.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.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 Pr(e){return e.map(t=>({state:t.state,context:t.context,line:0,declarations:t.declarations}))}function Vr(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 bn=/^(\d+) native /;function Fr(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 gt={hardcoded:"value.hardcoded",native:"native.element"};function yn(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:Fr(n.id,s)});return t}function dt(e){return`${e.path}#${bt(e.text.replace(/\s+/g," ").trim())}`}function wn(e,t={}){let n=Vr(e.previewCss),s=[...xn(e.variants).values()].map(({line:o,stateLines:i,...a})=>a),r=[];for(let o of e.guidance.files)if(o.kind!=="record")for(let i of o.passages)i.rule&&r.push({path:i.path,headings:i.headings,text:i.text,styles:i.styles});return{schema:1,concept:e.concept,label:e.label,version:t.version??0,sourceRef:e.repo.ref,publishedAt:t.publishedAt??null,components:[...e.components].sort(),tokens:e.tokens.map(o=>{let i=n.get(o.name);return i===void 0?{name:o.name}:{name:o.name,value:i}}).sort((o,i)=>o.name.localeCompare(i.name)),styles:s,rules:r,content:e.content.map(o=>o.id),acceptedFindings:yn(e).filter(({check:o})=>o in gt).map(({check:o,finding:i,key:a})=>({check:o,key:a,message:i.message})),settings:{severity:{...ht,...t.settings?.severity??{}}}}}function Br(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 mt(e){return e.map(t=>`${t.property}: ${t.value}`).join("; ")}function zr(e,t){return e.length>t?`${e.slice(0,t).join(", ")}, and ${e.length-t} more`:e.join(", ")}function Wr(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 kn(e,t){let n={...ht,...t.settings.severity},s=[],r=(d,y="")=>{s.push({id:`${d.kind}:${bt(`${d.styleId??""}|${d.state??""}|${y}`)}`,severity:n[d.kind],...d})},o=xn(e.variants),i=new Map(t.styles.map(d=>[d.id,d])),a=t.styles.filter(d=>d.kind==="look"),l=new Set(t.tokens.map(d=>d.name)),c=[...l];for(let d of o.values()){if(i.has(d.id))continue;let y=d.hostId?i.get(d.hostId):void 0,k=a.filter(m=>m.path===d.path),p=(k.length?k:a).map(m=>m.selector);r({kind:"style.new",styleId:d.id,title:`${d.title} is not in the spec`,baseline:null,observed:{declarations:d.states[0]?.declarations??[]},refs:[{path:d.path,line:d.line}],fix:`${d.selector} is not in the spec; ${y?`restyle ${y.selector} only through spec modifiers`:p.length?`use ${zr(p,3)},`:"use a spec style,"} or ask for an exception.`},d.selector)}for(let d of o.values()){let y=i.get(d.id);if(!y)continue;let k=new Map(y.states.map(p=>[te(p),p]));for(let p of d.states){let m=te(p),g=k.get(m),w=Br(g?.declarations??[],p.declarations);w.length!==0&&r({kind:"state.changed",styleId:d.id,title:g?`${d.title}: ${m} changed`:`${d.title}: new ${m} state`,state:m,baseline:g?{declarations:g.declarations}:null,observed:{declarations:p.declarations},refs:[{path:d.path,line:d.stateLines.get(m)??d.line}],fix:g?`Restore ${d.selector} ${m} to the spec (${w.slice(0,3).join("; ")}), or ask for an exception.`:`${m} is not a spec state of ${d.selector}; remove it, or ask for an exception.`},mt(p.declarations))}}for(let d of o.values()){let y=i.get(d.id);if(!y)continue;let k=new Set(d.states.map(te));for(let p of y.states){let m=te(p);k.has(m)||r({kind:"state.missing",styleId:d.id,title:`${d.title}: ${m} state is missing`,state:m,baseline:{declarations:p.declarations},observed:null,refs:[{path:d.path,line:d.line}],fix:`Define ${d.selector} ${m} again: ${mt(p.declarations)||"as in the spec"}.`})}}for(let d of o.values())for(let y of d.tokens){if(l.has(y))continue;let k=Wr(y,c);r({kind:"token.unknown",styleId:d.id,title:`${d.title} reads ${y}, which is not a spec token`,baseline:null,observed:{token:y},refs:[{path:d.path,line:d.line}],fix:k.length?`Use a spec token such as ${k.join(", ")} instead of ${y}, or ask for an exception.`:`${y} is not a spec token; ask for an exception to add it.`},y)}let u=new Map;for(let d of t.acceptedFindings)u.set(d.key,[...u.get(d.key)??[],d]);let f=yn(e).filter(({check:d})=>d in gt);for(let d of["value.hardcoded","native.element"])for(let{check:y,finding:k,key:p}of f){if(gt[y]!==d)continue;let m=u.get(p)??[];if(m.some(v=>!Gr(y,v.message,k.message)))continue;let g=m[0],w=k.styles?.[0],$=w?[...o.values()].find(v=>v.title===w):void 0;r({kind:d,styleId:$?.id??null,title:k.message,baseline:g?{message:g.message}:null,observed:{message:k.message,...d==="native.element"?{element:"button"}:{}},refs:k.refs.map(({path:v,line:C})=>({path:v,line:C})),fix:d==="value.hardcoded"?"Replace each literal with the spec token named, or with a spec token for that property.":`Render ${t.components[0]??"the shared component"} instead of a raw <button>, or ask for an exception.`},p)}for(let d of t.styles)o.has(d.id)||r({kind:"style.removed",styleId:d.id,title:`${d.title} is in the spec but no longer in CSS`,baseline:{declarations:d.states[0]?.declarations??[]},observed:null,refs:[{path:d.path,line:0}],fix:`Restore ${d.selector} in ${d.path}, or ask the designer to retire it from the spec.`});let b=new Map(e.guidance.files.map(d=>[d.path,d])),x=new Set;for(let d of e.guidance.files)for(let y of d.passages)y.rule&&x.add(dt(y));for(let d of t.rules){if(x.has(dt(d)))continue;let y=b.get(d.path);y&&y.total>y.passages.length||r({kind:"guidance.rule",styleId:null,title:`A written rule in ${d.path} changed or was removed`,baseline:{text:d.text},observed:null,refs:[{path:d.path,line:0}],fix:`Restore the rule under ${d.headings.join(" \u203A ")||d.path}, or publish a new spec.`},dt(d))}return s}function Gr(e,t,n){if(t===n)return!1;if(e==="native"){let s=bn.exec(t)?.[1],r=bn.exec(n)?.[1];if(s&&r)return Number(r)>Number(s)}return!0}function vn(e){return e.filter(t=>t.severity==="block")}var Ur={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 xt(e){let t=(n,s)=>e.styles.filter(r=>r.hostId===n&&r.kind===s).map(r=>r.selector);return{about:{...Ur,drift:jr.map(n=>({kind:n,severity:e.settings.severity[n]??ht[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=>[te(s),mt(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 $n(e){if(!e||typeof e!="object")return null;let t=e;return t.schema!==1||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 Hr(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 yt(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 Cn(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(`
|
|
3
|
+
`);for(let[o,i]of Hr(e)){s.push(o);for(let a of i){let l=a.refs[0]?.line,c=n[a.id],u=c?`${a.severity}, exception ${c}`:a.severity;s.push(` ${l?`${l}: `:""}[${u}] ${a.kind} ${a.title}`),s.push(` fix: ${a.fix}`)}s.push("")}let r=e.filter(o=>o.severity==="block").length;return s.push(`${e.length} drift item${e.length===1?"":"s"} against spec v${t.baselineVersion}: ${r} block, ${e.length-r} warn (${t.files} files indexed, ${t.skipped} skipped).`),s.join(`
|
|
4
|
+
`)}function Sn(e){return{schema:1,checkedAt:e,baselineVersion:null,items:[],followups:{}}}function An(e,t){if(!e||typeof e!="object")return Sn(t);let n=e;return n.schema!==1||!Array.isArray(n.items)?Sn(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 he={exceptions:!1,denyGit:["commit","push"],maxFollowups:2},wt=8;function Rn(e){let t=e.slice(0,wt).map(n=>{let s=n.refs[0],r=s?` (${s.path}${s.line?`:${s.line}`:""})`:"";return`- ${n.title}${r}. ${n.fix}`});return e.length>wt&&t.push(`- and ${e.length-wt} more; run \`gruum check\`.`),t.join(`
|
|
5
|
+
`)}function _n(e){return e.exceptions?"Fix each to the spec (call gruum_button_spec), or call gruum_request_exception with a reason when the spec has no button for the job.":"Fix each to the spec (call gruum_button_spec). If the spec has no button for the job, stop and tell the developer which exception you need; do not invent a style."}function En(e,t,n=he,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:
|
|
6
|
+
${Rn(r)}
|
|
7
|
+
|
|
8
|
+
${_n(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 Mn(e,t,n=he,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:
|
|
9
|
+
${Rn(o)}
|
|
10
|
+
|
|
11
|
+
${_n(n)}`}}var Ie="npx --no-install @gruum/cli",In={afterFileEdit:"after-file-edit",stop:"stop",beforeShellExecution:"before-shell"},Kr=/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+hook\s+(after-file-edit|stop|before-shell)\s*$/;function vt(e){return typeof e=="string"&&Kr.test(e)}function We(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 Ge(e){return`${JSON.stringify(e,null,2)}
|
|
12
|
+
`}function Ln(e,t=Ie){let n=".cursor/hooks.json",s=We(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(In)){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 ${In[a]}`,u=l.filter(f=>vt(f?.command));u.length===1&&u[0].command===c||(o[a]=[...l.filter(f=>!vt(f?.command)),{command:c}],i=!0)}return i?{ok:!0,text:Ge({version:r.version??1,...r,hooks:o}),changed:!0}:{ok:!0,text:e,changed:!1}}function jn(e){let t=".cursor/hooks.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=We(e,t);if(!n.ok)return n;let s=n.value,r={...s.hooks??{}},o=!1;for(let a of Object.keys(r)){let l=r[a];if(!Array.isArray(l))continue;let c=l.filter(u=>!vt(u?.command));c.length!==l.length&&(o=!0,c.length?r[a]=c:delete r[a])}if(!o)return{ok:!0,text:e,changed:!1};let i=Object.keys(s).every(a=>a==="version"||a==="hooks");return Object.keys(r).length===0&&i?{ok:!0,text:"",changed:!0}:{ok:!0,text:Ge({...s,hooks:r}),changed:!0}}function Jr(e){let[t,...n]=e.trim().split(/\s+/);return{command:t,args:[...n,"mcp"]}}function Dn(e,t=Ie){let n=".cursor/mcp.json",s=We(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=Jr(t),a=o.gruum;return JSON.stringify(a)===JSON.stringify(i)?{ok:!0,text:e,changed:!1}:{ok:!0,text:Ge({...r,mcpServers:{...o,gruum:i}}),changed:!0}}function On(e){let t=".cursor/mcp.json";if(e===null)return{ok:!0,text:"",changed:!1};let n=We(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:Ge({...s,mcpServers:r}),changed:!0}):{ok:!0,text:e,changed:!1}}var ce=".cursor/rules/gruum-buttons.mdc",Tn="<!-- written by gruum init cursor -->",Zr=20,Xr=["**/*.css","**/*.scss","**/*.tsx","**/*.jsx"];function Nn(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,Zr);return n.length?n:Xr}function Pn(e){return["---","description: Buttons in this repository follow a spec published in Gruum.",`globs: ${e.join(",")}`,"alwaysApply: false","---",Tn,"","The button spec for this repository lives in Gruum; call the `gruum_button_spec` tool before writing or restyling a button.","Run `gruum_check_buttons` before you stop, and fix every drift item it reports to the spec.","When the spec has no button for the job, ask for an exception with a reason rather than inventing a style, and never edit Gruum's generated files to make a check pass.",""].join(`
|
|
13
|
+
`)}function Vn(e){return e.includes(Tn)}function Fn(e){let t=e??"";if(t.split(/\r?\n/).some(r=>/^\/?\.gruum\/?(\*\*?)?$/.test(r.trim())))return{text:t,changed:!1};let s=t===""||t.endsWith(`
|
|
14
|
+
`)?"":`
|
|
15
|
+
`;return{text:`${t}${s}# Gruum local state
|
|
16
|
+
.gruum/
|
|
17
|
+
`,changed:!0}}function Bn(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 qr=e=>`${e} check --staged`;function zn(e,t=Ie){let n=qr(t);if(e.lefthook)return{kind:"print",reason:"lefthook config found; add this to the pre-commit commands",snippet:`pre-commit:
|
|
18
|
+
commands:
|
|
19
|
+
gruum:
|
|
20
|
+
run: ${n}
|
|
21
|
+
`};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}
|
|
22
|
+
`};let r=e.husky?".husky/pre-commit":`${e.gitHooksDir}/pre-commit`,o=e.hookText;if(o!==null&&o.split(/\r?\n/).some(l=>Wn(l)))return{kind:s,path:r,text:o,changed:!1};let i=o===null?s==="git"?`#!/bin/sh
|
|
23
|
+
`:"":o,a=i===""||i.endsWith(`
|
|
24
|
+
`)?"":`
|
|
25
|
+
`;return{kind:s,path:r,text:`${i}${a}${n}
|
|
26
|
+
`,changed:!0}}function Wn(e){return/(^|[\s/])(?:@gruum\/cli|gruum(?:\.m?js)?)\s+check\s+--staged\s*$/.test(e.trim())}function Gn(e){let t=e.split(`
|
|
27
|
+
`),n=t.filter(o=>!Wn(o)),s=n.length!==t.length,r=n.join(`
|
|
28
|
+
`);return s&&/^(#!\/bin\/sh)?\s*$/.test(r)?{text:"",changed:s}:{text:r,changed:s}}var Yr="2025-06-18",Un="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.",Hn={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. ${Un}`,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. ${Un}`};function Kn(e){return[{name:"gruum_button_spec",description:Hn.gruum_button_spec,inputSchema:{type:"object",properties:{},additionalProperties:!1},run:()=>e.spec()},{name:"gruum_check_buttons",description:Hn.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)}}]}function Le(e,t){return{jsonrpc:"2.0",id:e,result:t}}function Ue(e,t,n){return{jsonrpc:"2.0",id:e,error:{code:t,message:n}}}async function Jn(e,t,n){if(!e||typeof e!="object")return Ue(null,-32600,"Invalid request");let s=e,r=!("id"in s),o=s.id??null;if(typeof s.method!="string")return r?null:Ue(o,-32600,"Invalid request");let i=s.params??{};switch(s.method){case"initialize":{let a=i.protocolVersion;return Le(o,{protocolVersion:typeof a=="string"?a:Yr,capabilities:{tools:{listChanged:!1}},serverInfo:n})}case"ping":return Le(o,{});case"tools/list":return Le(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 Ue(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 Le(o,{content:[{type:"text",text:c.text}],isError:c.isError??!1})}catch(c){return Le(o,{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0})}}default:return r?null:Ue(o,-32601,`Method not found: ${s.method}`)}}var Qr=/(^|\/)(node_modules|\.git|\.next|dist|build|out|coverage|vendor|\.turbo|\.cache|__pycache__|target|\.venv|venv)\//,eo=/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|Cargo\.lock|poetry\.lock|composer\.lock|Gemfile\.lock)$/,to=/\.(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,no=/(^|\/)\.gruum\//;function $t(e){return!Qr.test(`${e}/`)&&!no.test(`${e}/`)}function Ct(e,t){return eo.test(e)||to.test(e)?!1:t<=3e5}function Zn(e){let t=Math.min(e.length,8e3);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}var so=/\.(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 Xn(e){return so.test(e)}function St(e){return e.replace(/\\/g,"/").replace(/^\.\/?/,"").replace(/^\/+|\/+$/g,"")}function At(e,t){let n=St(t),s=e.replace(/\\/g,"/");return n?s.startsWith(`${n}/`)?s.slice(n.length+1):null:s}function qn(e,t,n){let s=new Map(e);for(let r of t){let o=At(r.path,n);o===null||!$t(o.split("/").slice(0,-1).join("/")||".")||(r.content===null?s.delete(o):Ct(o,r.content.length)&&s.set(o,r.content))}return s}function Yn(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 Qn(e){let t=/^(?:git@|ssh:\/\/git@|https?:\/\/(?:[^@/]+@)?)github\.com[:/]([^/\s]+)\/([^/\s]+?)(?:\.git)?\/?$/i.exec(e.trim());return t?`${t[1]}/${t[2]}`:null}var es=e=>e.replace(/\\(.)/g,"$1");function ro(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 Rt=/\*|[a-z][\w-]*|\.((?:\\.|[\w-])+)|#((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(?:([~|^$*]?=)\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*[is]?\s*\]|::([\w-]+)|:([\w-]+)(\((?:[^()]|\([^()]*\))*\))?/giy;function ss(e){let t=[];Rt.lastIndex=0;let n=0;for(;n<e.length;){Rt.lastIndex=n;let s=Rt.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:es(s[1])});else if(s[2]!==void 0)t.push({kind:"id",raw:r,name:es(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 J(e){let t=ro(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=ss(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 je(e){return e.map(t=>t.raw).join("")}function De(e){return e.map((t,n)=>{let s=je(t.simples);return n===0?s:t.combinator===" "?` ${s}`:` ${t.combinator} ${s}`}).join("")}function V(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 rs=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function ts(e,t){let n=e.toLowerCase();return t.some(s=>n.includes(s.toLowerCase()))}function _t(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"&&rs(r.name).some(o=>s.has(o)))}var oo=new Set(["html","body"]),io=new Set(["svg","path","use","img","picture","video","i","em","strong","b","small","kbd","sup","sub"]);function Ke(e,t){for(let n of e)switch(n.kind){case"tag":if(t.elements.includes(n.name))return!0;break;case"class":if(ts(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&&ts(n.value,t.classKeywords))return!0;break;case"pseudo":if((n.name==="is"||n.name==="where")&&n.args){let s=V(n.args).map(J);if(s.length>0&&s.every(r=>r!==null&&Ke(r[r.length-1].simples,t)))return!0}break;default:break}return!1}function os(e){return e.some(n=>n.kind==="universal")?e.length===1:e.some(n=>n.kind==="tag"&&oo.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 is(e){return e.some(t=>t.kind==="tag"&&io.has(t.name))}var He=["hover","focus","active","selected","current","loading","disabled"],ao={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"},lo={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",checked:"selected",disabled:"disabled"},co={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"},uo=new Set(["active","selected","pressed","checked","loading","busy","disabled","open","current","hover","focus","show","expanded","collapsed"]),ns=e=>ao[e.toLowerCase()]??e.toLowerCase(),ne={hover:"__gs-hover",focus:"__gs-focus",active:"__gs-active"};function as(e){if(e.kind==="pseudo"){let t=lo[e.name];if(!t)return null;let n=ne[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:ns(e.value),marker:{classes:[],attrs:{"data-state":e.value}}};let t=co[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]:uo.has(e.name.toLowerCase())?e.name:null;return n?{state:ns(n),marker:{classes:[e.name],attrs:{}}}:null}return null}function fo(e){return e.kind!=="pseudo"||e.name!=="not"||!e.args?!1:V(e.args).every(t=>{let n=ss(t);return n!==null&&n.every(s=>as(s)!==null)})}function Je(e){let t=[],n=new Map;for(let o of e){if(fo(o))continue;let i=as(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)=>W(o)-W(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 W(e){if(e==="default")return-1;let t=He.indexOf(e);return t===-1?He.length:t}function ue(e){return e.length?e.join(" + "):"default"}function Et(e){return e.replace(/:hover\b/g,`.${ne.hover}`).replace(/:focus(?:-visible|-within)?\b/g,`.${ne.focus}`).replace(/:active\b/g,`.${ne.active}`)}var po=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"]),go=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"]),mo=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 Oe(e){let t=e.toLowerCase();return po.has(t)?"paint":go.has(t)?"layout":mo.has(t)?"hint":"box"}var ho={shadow:/^box-shadow$/,cursor:/^cursor$/,rounded:/^border(?:-[a-z]+)*-radius$/,radius:/^border(?:-[a-z]+)*-radius$/};function ls(e,t){let n=e.filter(o=>o.kind==="class");if(n.length!==1||e.length!==1)return!1;let s=rs(n[0].name)[0],r=s?ho[s]:void 0;return r?t.length>0&&t.every(o=>r.test(o.property.toLowerCase())):!1}var Vl={hover:{classes:[ne.hover],attrs:{}},focus:{classes:[ne.focus],attrs:{}},active:{classes:[ne.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 bo="data-gs-sheet";function us(e){return`[${bo}="${e.replace(/["\\]/g,"")}"]`}function cs(e){return/\.module\.[a-z]+$/i.test(e)}var xo=new Set(["button","a","div","span","input","summary","label"]);function fe(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 yo(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 Ze(e,t){let n=J(e);if(!n||n.some(c=>c.combinator==="+"||c.combinator==="~"))return null;let s=n.map(c=>yo(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(!xo.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 Mt(e,t){let n="";for(let s of e)s.property.toLowerCase()===t&&(n=s.value.replace(/!important\s*$/i,"").trim());return n}function Xe(e){let t=Mt(e,"display");if(/^none\b/i.test(t))return"display: none";let n=Mt(e,"visibility");if(/^(hidden|collapse)\b/i.test(n))return`visibility: ${n.split(/\s+/)[0].toLowerCase()}`;let s=Mt(e,"opacity");return/^(0|0\.0+)$/.test(s)?"opacity: 0":null}function fs(e,t){return e===t||!cs(e)&&!cs(t)}function q(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 wo=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,wo)}}function be(e,t){return{...e,status:"na",summary:t,findings:[]}}var It=e=>e.state.split(" + ");function hs(e,t){if(!e.element||!t.element||e!==t&&!fs(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 bs(e,t){return t.filter(n=>hs(n,e)).flatMap(n=>n.states)}function ko(e,t,n){return bs(e,t).some(s=>It(s).includes(n))||t.filter(s=>hs(s,e)).some(s=>(s.parts??[]).some(r=>r.state.split(" + ").includes(n)))}var vo=[{state:"hover",severity:"issue"},{state:"focus",severity:"issue"},{state:"disabled",severity:"issue"},{state:"active",severity:"note"}];function $o(e){let t={id:"states",title:"Missing states",description:"Styles with no hover, focus, disabled, or active rule, counting rules they inherit from a shared base class."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return be(t,"No styles that can be drawn on their own.");let s=[];for(let{state:r,severity:o}of vo){let i=n.filter(a=>!ko(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 ps=new Set(["outline","outline-style","outline-width"]),ds=/^(?:none|0|0px)(?:\s+(?:none|0|0px))*$/i,Co=/^(?:outline(?:-color|-width|-style)?|box-shadow|border(?:-[a-z]+)*|background(?:-color)?|text-decoration(?:-[a-z]+)?|color)$/;function So(e){let t={id:"focus",title:"Focus indicator removed",description:"Styles that remove the outline and give keyboard focus nothing in its place."},n=e.variants.filter(r=>r.element&&r.element.ancestors.length===0);if(n.length===0)return be(t,"No styles that can be drawn on their own.");let s=[];for(let r of n){let o=bs(r,e.variants),i=o.filter(l=>{let c=It(l);return c.includes("default")||c.includes("focus")}).flatMap(l=>l.declarations.map(c=>({s:l,d:c}))).find(({d:l})=>ps.has(l.property)&&ds.test(l.value.replace(/\s*!important/i,"")));!i||o.filter(l=>It(l).includes("focus")).some(l=>l.declarations.some(c=>Co.test(c.property)&&!(ps.has(c.property)&&ds.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 Ao(e){let t={id:"tokens",title:"Undefined tokens",description:`Custom properties the ${e.noun} styles read that no scanned stylesheet defines.`};if(e.tokens.length===0)return be(t,`The ${e.noun} styles read no custom properties.`);let s=e.tokens.filter(r=>r.definedIn.length===0&&!r.name.startsWith("--tw-")).map(r=>{let o=e.variants.filter(i=>i.states.some(a=>a.declarations.some(l=>l.value.includes(`var(${r.name}`)||new RegExp(`var\\(\\s*${r.name}\\b`).test(l.value))));return{severity:"note",message:`${r.name} is read but never defined here. It may be set outside the scanned files (a framework, a theme provider).`,styles:o.slice(0,8).map(i=>i.title),refs:o.slice(0,3).map(i=>Y(i.path,i.line))}});return Q(t,s,`All ${e.tokens.length} tokens read are defined.`,r=>`${r} token${r===1?"":"s"} with no definition.`)}var Ro=/var\((?:[^()]|\([^()]*\))*\)/g,gs=/#[0-9a-f]{3,8}\b|\b(?:rgba?|hsla?)\([^)]*\)/gi,_o=/^(?:padding|margin|gap|row-gap|column-gap|height|min-height|max-height|border-radius|font-size|letter-spacing)(?:-[a-z]+)*$/,Eo=/(?<![\w.-])(\d+(?:\.\d+)?)px\b/g;function ms(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 Lt(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?Lt(i,t,n+1):o!==void 0?Lt(o.trim(),t,n+1):s})}var Mo=[[/^(?: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 Io(e,t){if(!t)return null;let n=Mo.find(([s])=>s.test(e))?.[1];return t.find(s=>!n||n.test(s))??null}function Lo(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=Lt(i,e.tokenValues).trim();if(new RegExp(`^(?:${gs.source})$`,"i").test(a)){let l=ms(a);n.set(l,[...n.get(l)??[],o])}else/^\d+(?:\.\d+)?px$/.test(a)&&s.set(a,[...s.get(a)??[],o])}if(n.size===0&&s.size===0)return be(t,"No color or size tokens were found to compare against.");let r=[];for(let o of e.variants){let i=[],a=null;for(let c of o.states)for(let u of c.declarations){if(u.via)continue;let f=u.value.replace(Ro," ");for(let b of f.matchAll(gs)){let x=n.get(ms(b[0]));i.push(x?`${b[0]} in ${u.property} is the value of ${x[0]}`:`${b[0]} in ${u.property} is not a token`),a??=c}if(_o.test(u.property))for(let b of f.matchAll(Eo)){let x=Io(u.property,s.get(`${b[1]}px`));!x||Number(b[1])<=1||(i.push(`${b[1]}px in ${u.property} is the value of ${x}`),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 jo(e){let t={id:"unused",title:"Unused styles",description:"Styles defined in CSS that no component, page, or template references."},n=e.variants.filter(r=>r.element&&r.usage.status!=="unknown");if(n.length===0)return be(t,"No styles with a class name to look for.");let s=[];for(let r of n)r.usage.status==="unreferenced"?s.push({severity:"issue",message:`${r.title} (${r.selector}) is defined but no reference to it was found.`,styles:[r.title],refs:[Y(r.path,r.line)]}):r.usage.status==="dynamic"&&s.push({severity:"note",message:`${r.title} (${r.selector}) is built at runtime and nothing selects it by value.`,styles:[r.title],refs:[Y(r.path,r.line),...r.usage.files.slice(0,2)]});return s.sort((r,o)=>+(o.severity==="issue")-+(r.severity==="issue")),Q(t,s,`All ${n.length} styles are referenced.`,r=>`${r} style${r===1?"":"s"} unreferenced or unconfirmed.`)}function Do(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 Oo(e){let t={id:"native",title:`Native <${e.element}> instead of the component`,description:`Files that render a raw <${e.element}> although the repository has a shared ${e.element} component.`};if(!e.hasComponent)return be(t,`No shared ${e.element} component was found, so native elements are expected.`);let n=e.nativeUses.map(s=>({severity:"issue",message:`${s.count} native <${e.element}> element${s.count===1?"":"s"} in ${s.path}.`,refs:[Y(s.path,s.line)]}));return Q(t,n,`Every <${e.element}> goes through the component.`,s=>`${s} file${s===1?"":"s"} bypass the component.`)}function To(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 xs(e){return[$o(e),So(e),jo(e),Do(e),Ao(e),Lo(e),Oo(e),To(e)]}var No=/\.(erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,ys=/^<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/,Po=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),Vo=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),Fo=new Set(["classNames","classnames","clsx","cn","cx"]),Bo=/^(?:ref|key|style|dangerouslySetInnerHTML)$/i;function vs(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
29
|
+
`&&n++;return n}function ws(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function $s(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(`
|
|
30
|
+
`)}function zo(e,t,n){let s=Math.max(0,Math.min(t,e.length)),r=Math.max(s,Math.min(n,e.length)),o=vs(e,s),i=e.slice(s,r).split(`
|
|
31
|
+
`).slice(0,12),a=e.slice(s,r).split(`
|
|
32
|
+
`).length>12;return{source:$s(i)+(a?`
|
|
33
|
+
\u2026`:""),startLine:o}}function Wo(e,t){let n=vs(e,Math.max(0,t)),s=e.split(`
|
|
34
|
+
`),r=Math.max(0,n-1);return{source:$s(s.slice(r,r+12)),startLine:r+1}}function ks(e,t){return{kind:"other",...Wo(e,t)}}function et(e,t){let n=ys.exec(e.slice(t));if(!n)return null;let s=n[1],r=n[2]??"",o=t+n[0].length;if(/\/\s*$/.test(r)||Po.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 b=l+f[0].length;return{tag:s,attrs:r,openStart:t,openEnd:o,closeEnd:b,body:e.slice(o,l)}}l+=f?f[0].length:2;continue}l+=f?f[0].length:2;continue}let u=ys.exec(e.slice(l));if(u&&u[1].toLowerCase()===s.toLowerCase()&&!/\/\s*$/.test(u[2]??"")&&(a++,a>6))return"too-big";l+=u?u[0].length:1}return l>=c&&o+(c-t)>=4e3?"too-big":null}function Dt(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=et(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 Cs(e){return e.replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function ye(e){return e.split(/\s+/).filter(Boolean)}function se(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 Ss(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 Ye(e=new Map,t=new Map){return{values:e,aliases:t,flags:new Set,strings:new Set,prefixes:new Map}}var jt=/^[A-Za-z_$][\w$]*$/;function Ot(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 Tt(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 As(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)?we(s,t,n+1):(t.flags.add(e),!!t.values.get(e))}function we(e,t,n=0){if(n>4)return null;let s=Tt(e);for(let c of["||","&&"]){let u=Ot(s,c);if(u<0)continue;let f=we(s.slice(0,u),t,n+1),b=we(s.slice(u+2),t,n+1);return f===null||b===null?null:c==="||"?f||b:f&&b}let r=/^(!\s*)?([A-Za-z_$][\w$]*)$/.exec(s);if(r){let c=As(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 Rs(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 xe(e,t=Ye()){let n=Tt(e);if(!n)return{classes:[],dynamic:!1};let s=Rs(n);if(s){let c=we(s.condition,t);return c===null?{classes:[],dynamic:!0}:xe(c?s.yes:s.no,t)}let r=Ot(n,"&&");if(r>=0){let c=we(n.slice(0,r),t);return c===null?{classes:[],dynamic:!0}:c?xe(n.slice(r+2),t):{classes:[],dynamic:!1}}if(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))return{classes:ye(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 b=c.indexOf("${",f);if(b<0){u+=c.slice(f);break}u+=c.slice(f,b);let x=c.indexOf("}",b+2);if(x<0)return{classes:[],dynamic:!0};let d=c.slice(b+2,x).trim();if(jt.test(d)){let y=t.values.get(d);if(typeof y!="string")return{classes:[],dynamic:!0};t.strings.add(d);let k=/[\w-]*$/.exec(u)?.[0];k&&t.prefixes.set(d,k),u+=y}else{let y=xe(d,t);if(y.dynamic)return{classes:[],dynamic:!0};u+=y.classes.join(" ")}f=x+1}return{classes:ye(u),dynamic:!1}}if(jt.test(n)&&t.values.has(n)){let c=t.values.get(n);return typeof c!="string"?{classes:[],dynamic:!1}:(t.strings.add(n),{classes:ye(c),dynamic:!1})}let o=/^(?:styles?|classes|css|cls)\.([A-Za-z_]\w*)$/.exec(n);if(o)return{classes:[Cs(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=xe(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&&Fo.has(l[1])){let c=[];for(let u of Ss(l[2])){let f=xe(u,t);if(f.dynamic)return{classes:[],dynamic:!0};c.push(...f.classes)}return{classes:c,dynamic:!1}}return{classes:[],dynamic:!0}}function tt(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=se(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=se(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 Nt(e,t){let n=tt(e).list.find(s=>s.name==="class"||s.name==="className");return n?n.value!==void 0?{classes:ye(n.value),dynamic:!1}:n.expr===void 0?{classes:[],dynamic:!0}:xe(n.expr,t):null}function _s(e,t){return/[<>]/.test(t)?!1:e==="href"||e==="src"||e==="action"?/^(?:https?:|mailto:|\/|#)/i.test(t):!0}function Go(e){return e==="class"||e==="className"?!1:!Bo.test(e)&&!/^on/i.test(e)}function Es(e){let t={};for(let n of tt(e).list){if(!Go(n.name)||n.expr!==void 0)continue;let s=n.value??"";_s(n.name,s)&&(t[n.name]=s)}return t}var Uo=/^(?:data-[\w-]+|aria-[\w-]+|disabled|hidden)$/,Ho=new Set(["disabled","hidden"]);function qe(e,t,n=0){if(n>4)return null;let s=Tt(e),r=se(s,0);if(r&&r.end===s.length)return r.value;let o=Rs(s);if(o){let l=we(o.condition,t);return l===null?null:qe(l?o.yes:o.no,t,n+1)}let i=Ot(s,"||");if(i>=0){let l=qe(s.slice(0,i),t,n+1);return l===null?null:l!==void 0?l:qe(s.slice(i+2),t,n+1)}if(s==="undefined"||s==="null"||s==="false")return;if(s==="true")return"true";if(!jt.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=As(s,t,n);return l===null?null:l?"true":void 0}return t.values.has(s)?void 0:null}function Ko(e,t){let n={};for(let s of tt(e).list){if(s.expr===void 0||!Uo.test(s.name))continue;let r=qe(s.expr,t);if(r!=null){if(Ho.has(s.name)){r!=="false"&&(n[s.name]="");continue}_s(s.name,r)&&(n[s.name]=r)}}return n}function Jo(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 Qe(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=et(e,s);if(!i||i==="too-big"){s++;continue}let a=i.tag.toLowerCase();if(/^[A-Z]/.test(i.tag))n+=Qe(i.body,t+1);else if(Vo.has(a)){let l=Nt(i.attrs),c=l&&!l.dynamic&&l.classes.length?` class="${ws(l.classes.join(" "))}"`:"",u=Qe(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+=ws(e.slice(s,o)),s=o}return n}function Zo(e){let t=Nt(e.attrs);return!t||t.dynamic||t.classes.length===0?null:{tag:e.tag.toLowerCase(),classes:t.classes,attrs:Es(e.attrs)}}function Ms(e,t){let n=[],s=t-1;for(;n.length<3&&s>=0;){let r=Dt(e,s);if(!r||r==="too-big"||/^[A-Z]/.test(r.tag))break;let o=Zo(r);if(!o)break;n.push(o),s=r.openStart-1}return n.reverse()}var Xo=8;function qo(e){let t=e.trim(),n=se(t,0);return n&&n.end===t.length?n.value:t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?t:null}function Yo(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=se(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 Ss(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=qo(a[3]);c!==null&&o.set(l,c)}return{values:o,end:s}}function Qo(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=Yo(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 Ye(l.values,c)}return Ye()}function ei(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 ti(e,t,n,s){let r=zo(e,t.openStart,t.closeEnd);if(/^[A-Z]/.test(t.tag)){let b=Jo(e.slice(t.openStart,t.openEnd),n-t.openStart);return{kind:"component",...r,component:{tag:t.tag,...b}}}let o=Qo(e,t);for(let[b,x]of ei(t.attrs,s))o.values.set(b,x);let i={};for(let[b,x]of o.values)i[b]=x??null;let a={attrs:t.attrs,values:i,aliases:Object.fromEntries(o.aliases)},l=Ye(new Map(o.values),o.aliases),c=ni(a.attrs,l);if(!c)return{kind:"dynamic",...r};let u={tag:t.tag.toLowerCase(),...c,ancestors:Ms(e,t.openStart),bodyHtml:Qe(t.body)},f=[...[...l.strings].filter(b=>typeof o.values.get(b)=="string").map(b=>({name:b,kind:"text",...l.prefixes.has(b)?{prefix:l.prefixes.get(b)}:{}})),...[...l.flags].slice(0,Xo).map(b=>({name:b,kind:"flag"}))];return f.length===0?{kind:"markup",...r,element:u}:{kind:"markup",...r,element:u,params:f,redraw:a}}function ni(e,t){let n=Nt(e,t);return n?.dynamic?null:{classes:n?.classes??[],attrs:{...Es(e),...Ko(e,t)}}}function Pt(e,t,n,s){if(No.test(s))return ks(e,t);let r=Dt(e,t);return r==="too-big"||!r?ks(e,t):ti(e,r,t,n)}function si(e){let t={},n=new Set,{list:s,spread:r}=tt(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 Is(e,t){let n=si(t),s=new Map,r=[],o=[],i=n.spread;for(let a of e.axes){if(a.opaque){i=!0;continue}if(!a.locked&&n.dynamic.has(a.prop)){i=!0;continue}let l=a.locked?a.defaultValue:n.literals[a.prop]??(n.spread?void 0:a.defaultValue);if(l===void 0)continue;if(s.set(a.prop,l),a.prefix){o.push(`${a.prefix}${l}`);continue}let c=a.values.find(u=>u.value===l);if(!c){i=!0;continue}for(let u of c.classes)u.startsWith("__gs-recipe-")&&r.push(u),o.push(u)}if(!i){for(let a of e.compounds)if(a.when.every(c=>s.get(c.prop)===c.value))for(let c of a.classes)c.startsWith("__gs-recipe-")&&r.push(c),o.push(c)}return e.classNameProp&&(n.dynamic.has("className")?i=!0:n.literals.className&&o.push(...ye(n.literals.className))),{draw:i?null:[...e.staticClasses,...o],selects:r}}function Vt(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 ri(e,t,n,s,r){for(let o of Vt(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 Ls(e,t,n,s,r,o){if(e.kind!=="component"||!e.component||r.length===0)return e;let i=ri(s,t,e.component.tag,r,o);if(!i)return e;let a=Dt(t,n),l=e.component.tag;if(!a||a==="too-big"||a.tag!==l&&a.tag!==i.component)return e;let c=Is(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:Ms(t,a.openStart),bodyHtml:Qe(a.body)}}:e}function js(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 Vt(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 b=t.indexOf(f,u);if(b<0)break;let x=t[b+f.length];if(x&&/[\w.]/.test(x)){u=b+f.length;continue}let d=et(t,b);if(!d||d==="too-big"){u=b+f.length;continue}let y=Is(c,d.attrs);y.selects.length&&a.push({offset:b,selects:y.selects}),u=Math.max(d.closeEnd,b+f.length)}}return a}function oi(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 ii(e){let t=/\bclassName\s*=\s*/.exec(e);if(!t)return null;let n=t.index+t[0].length,s=se(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 ai(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=se(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=se(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 li(e,t,n,s){let r=[];for(let o of Vt(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 ci(e){let t=[],n=/(?:styles?|classes|css|cls)\s*\.\s*([A-Za-z_]\w*)/g;for(let l of e.matchAll(n))t.push({at:l.index??0,kind:"static",text:Cs(l[1])});let s=/(?:styles?|classes|css|cls)\s*\[\s*["']([^"']+)["']\s*\]/g;for(let l of e.matchAll(s))t.push({at:l.index??0,kind:"static",text:l[1]});let r=/(?:styles?|classes|css|cls)\s*\[\s*`([^`$]*)\$\{\s*([A-Za-z_$][\w$]*)\s*\}`\s*\]/g;for(let l of e.matchAll(r))t.push({at:l.index??0,kind:"prefix",text:l[1],prop:l[2]});/[[{(]/.test(e)||t.push({at:0,kind:"static",text:e.trim()}),t.sort((l,c)=>l.at-c.at);let o=[],i=[];for(let l of t)l.kind==="prefix"&&l.prop?i.push({prop:l.prop,prefix:l.text}):o.push(...ye(l.text));let a=/(?:^|[(,\s])className\s*(?:[,)]|$)/.test(e);return{staticClasses:o,prefixes:i,classNameProp:a}}function ui(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 Ds(e,t,n){let s=[];for(let r of e){let o=li(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,x=r.source.slice(f+u[0].length).search(/\nexport\s/),d=r.source.slice(f,f+u[0].length+(x<0?8e3:x)),y=oi(r.source,f),k=0;for(;k<d.length;){if(d[k]!=="<"||d[k+1]==="/"||d[k+1]==="!"){k++;continue}let p=et(d,k);if(!p||p==="too-big"){k++;continue}if(k=p.openEnd,/^[A-Z]/.test(p.tag))continue;let m=ii(p.attrs);if(!m)continue;let g=ci(m),w=g.prefixes.length?2:g.staticClasses.length?1:0,$=null,v=o.find(C=>new RegExp(`(?:^|[^\\w$])${C.local}\\s*\\(`).test(m));if(v){let C=m.search(new RegExp(`(?:^|[^\\w$])${v.local}\\s*\\(`)),I=m.indexOf("(",C),M=I<0?null:ai(m,I);if(M){w=3,$=ui(v.recipe,M,y,g.staticClasses,g.classNameProp);for(let E of g.prefixes)$.axes.push({prop:E.prop,values:[],prefix:E.prefix,defaultValue:y[E.prop]})}}!$&&(g.prefixes.length||g.staticClasses.length)&&($={staticClasses:g.staticClasses,axes:g.prefixes.map(C=>({prop:C.prop,values:[],prefix:C.prefix,defaultValue:y[C.prop]})),compounds:[],classNameProp:g.classNameProp}),$&&(!c||w>c.score)&&(c={score:w,tag:p.tag.toLowerCase(),body:$})}}c&&s.push({component:i,path:r.path,rootTag:c.tag,...c.body})}}return s}var fi=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,pi=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,di=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]),gi=new Set(["icon","glyph","svg"]),mi=new Set(["label","text","title","caption"]),hi=e=>e.replace(/([a-z\d])([A-Z])/g,"$1-$2").split(/[^a-z0-9]+/i).filter(Boolean).map(t=>t.toLowerCase());function Ts(e){let t=e.flatMap(hi);return t.some(n=>gi.has(n))?"icon":t.some(n=>mi.has(n))?"label":null}function bi(e){let t=e.replace(/\{\s*\/\*[\s\S]*?\*\/\s*\}/g," "),n=[];for(let s of t.matchAll(fi)){let r=s[1];if(!di.has(r.toLowerCase())||r!==r.toLowerCase())continue;let o=[...s[2].matchAll(pi)].map(a=>a[1]??a[2]),i=Ts(o);i&&n.push({index:s.index??0,role:i,tag:r.toLowerCase(),classes:o})}return n}function xi(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 V(e)){let o=J(r);if(!o||o.length<2)continue;let i=o[o.length-1];if(i.combinator!==" "&&i.combinator!==">")continue;let a=i.simples.filter(b=>b.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(b=>b.kind!=="class"&&b.kind!=="attr"&&b.kind!=="tag").length>0)continue;let u=l.simples.filter(b=>b.kind==="class"),f=l.simples.filter(b=>b.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 yi=["text","icon-start","icon-end","icon"],Os={text:"Text","icon-start":"Icon left","icon-end":"Icon right",icon:"Icon"};function wi(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 ke(e){return{role:e.role,tag:e.tag,classes:e.classes}}function Ns(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(bi),o=r.filter(x=>x.role==="label"),i=r.filter(x=>x.role==="icon"),a=o[0];a&&n("text",{path:s.sheet,slots:[ke(a)],classes:[],attrs:{}});let l=new Set(o.flatMap(x=>x.classes.filter(d=>Ts([d])==="label"))),c=null,u=null;for(let x of i){let d=wi(x,o),y=o.reduce((k,p)=>{let m=Math.abs(p.index-x.index);return!k||m<k.dist?{hit:p,dist:m}:k},null);d==="start"&&y&&!c&&(c={icon:x,label:y.hit}),d==="end"&&y&&!u&&(u={icon:x,label:y.hit})}c&&n("icon-start",{path:s.sheet,slots:[ke(c.icon),ke(c.label)],classes:[],attrs:{}}),u&&n("icon-end",{path:s.sheet,slots:[ke(u.label),ke(u.icon)],classes:[],attrs:{}});let f=null;for(let x of s.rules)if(f=xi(x.selector,x.declarations,l),f)break;let b=c?.icon??u?.icon??i[0]??null;f&&b&&n("icon",{path:s.sheet,slots:[ke(b)],classes:f.classes,attrs:f.attrs})}return[{id:"text",label:Os.text,sheets:t.get("text")??[]},...yi.filter(s=>s!=="text"&&t.has(s)).map(s=>({id:s,label:Os[s],sheets:t.get(s)??[]}))]}function ki(e,t){if(!e)return t;let n=V(e);return V(t).flatMap(s=>n.map(r=>s.includes("&")?s.replaceAll("&",r):`${r} ${s}`)).join(", ")}var vi=/^@(?:-\w+-)?(?:keyframes|font-face|property)\b/i;function pe(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===`
|
|
35
|
+
`&&o++,a==="{"){let l=t.slice(r,i).trim(),c=s[s.length-1];c&&(c.own+=t.slice(c.segStart,r));let u=/^@theme\b/i.test(l),f=l.startsWith("@")&&!u,b=[...s].reverse().find(x=>!x.isAt)??null;s.push({selector:l,resolved:f?l:u?":root":ki(b?.resolved??null,l),isAt:f,skip:(c?.skip??!1)||f&&vi.test(l),start:i+1,line:o,own:"",segStart:i+1}),r=i+1}else if(a==="}"){let l=s.pop();if(l){l.own+=t.slice(l.segStart,i),!l.isAt&&!l.skip&&n.push({selector:l.resolved,body:t.slice(l.start,i),ownBody:l.own,line:l.line,context:s.filter(u=>u.isAt).map(u=>u.selector.replace(/\s+/g," ")).join(" \xB7 ")});let c=s[s.length-1];c&&(c.segStart=i+1)}r=i+1}else a===";"&&(r=i+1)}return n}function re(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 $i=25,Ci=12,Ps=700,Si=/\b(?:must(?: not)?|never|always|should(?: not|n't)?|do not|don't|avoid|prefer|forbidden|not allowed|no more than)\b/i,ee=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Ai(e){let t=e.split(`
|
|
36
|
+
`),n=[],s=[],r=null,o=null,i=0;if(t[0]?.trim()==="---"){let l=t.findIndex((c,u)=>u>0&&c.trim()==="---");l>0&&(i=l+1)}let a=l=>{r&&(n.push({start:r.start,end:l,text:r.lines.join(`
|
|
37
|
+
`).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 Ri(e,t){let n=e.map(ee).join("|"),s=e.map(r=>ee(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 _i(e,t){let n=t.map(ee).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(fe(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-])${ee(c)}(?![\\w-])`:`(?:\\.|["'\`])${ee(c)}(?![\\w-])`))}if(!r.title.includes(" + ")){let l=r.title.toLowerCase().split(/\s+/).map(ee).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${ee(r.axis)}\\s*[=:]\\s*\\{?\\s*["'\`]${ee(r.title.toLowerCase())}["'\`]`,"i")),i.heading=r.title.toLowerCase()}s.set(r.title,i)}return[...s.values()]}function Ei(e,t){return e.toLowerCase().replace(new RegExp(`\\b(?:${t.map(ee).join("|")})s?\\b`,"g")," ").replace(/[^a-z0-9]+/g," ").trim()}function Mi(e){return e.length>Ps?`${e.slice(0,Ps).trimEnd()}\u2026`:e}function Vs(e,t,n,s){let r=Ri(n.classKeywords,n.prose),o=_i(s,n.classKeywords),i=new Set,a=[];for(let u of t){let f=e.get(u.path);if(f===void 0)continue;let b=[];for(let x of Ai(f)){if(!r.test(x.text)&&!x.headings.some(k=>r.test(k)))continue;let d=x.headings.length?Ei(x.headings[x.headings.length-1],n.classKeywords):"",y=o.filter(k=>k.tests.some(p=>p.test(x.text))||d!==""&&k.heading===d).map(k=>k.title);for(let k of y)i.add(k);b.push({path:u.path,line:x.start,endLine:x.end,headings:x.headings,text:Mi(x.text),rule:Si.test(x.text),styles:y})}b.length!==0&&a.push({path:u.path,kind:u.kind,passages:b.slice(0,Ci),total:b.length,rules:b.filter(x=>x.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,$i).map(({rules:u,...f})=>f),documented:[...i].sort(),undocumented:[...c.keys()].filter(u=>!i.has(u))}}var Ii=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 ji(e){return Ii.has(e.property)||/^(margin|transition|grid-)/.test(e.property)?!0:(e.property==="width"||e.property==="height")&&/^(100%|auto)$/.test(e.value)}function Di(e){return e.states.flatMap(t=>t.declarations.filter(n=>!ji(n)).map(n=>`${t.state}|${t.context}|${n.property}:${n.value}`)).sort().join(";")}function Oi(e){return e.states.filter(t=>t.state==="default"&&t.context==="").flatMap(t=>t.declarations)}function Fs(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ti(e){let t=e.via?/^bg-([\w-]+?)(?:\/(\d+))?$/.exec(e.via):null;if(t){let s=t[1].replace(/-/g," ");return Fs(t[2]?`${s} ${t[2]}%`:s)}let n=/var\(\s*--(?:color-)?([\w-]+)/.exec(e.value)?.[1];return Fs((n??e.value).replace(/-/g," "))}function Ni(e){let t=Oi(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?`${Ti(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 Pi(e){let t=e.split("/"),n=(t.pop()??e).replace(/\.[^.]+$/,""),s=t.pop();return Li.has(n)&&s?`${s}/${n}`:n}function Vi(e){let t=[...new Set(e.map(s=>Pi(s.path)))],n=t.slice(0,2).join(", ");return t.length>2?`${n} +${t.length-2}`:n}var Bs=(e,t)=>e.path.localeCompare(t.path)||e.line-t.line;function zs(e){let t=new Map;for(let r of e){let o=Ni(r.variant),i=t.get(o)??new Map,a=Di(r.variant),l=i.get(a)??{looks:[],sites:[]};l.looks.push(r.variant),l.sites.push(...r.sites),i.set(a,l),t.set(o,i)}let n=[],s=new Map;for(let[r,o]of t){let i=[...o.values()];for(let x of i)x.sites.sort(Bs);i.sort((x,d)=>d.sites.length-x.sites.length||Bs(x.sites[0],d.sites[0]));let[a,...l]=i,c=a.looks[0],u=l.map(x=>Vi(x.sites)),f=l.map((x,d)=>{let y=x.looks[0],p={title:u.filter(m=>m===u[d]).length>1?`${u[d]} \xB7 line ${x.sites[0].line}`:u[d],selector:y.selector,path:x.sites[0].path,line:x.sites[0].line,element:y.element,usage:y.usage,states:y.states,alike:!0};return s.set(p,x.sites),p}),b={...c,title:r,axis:null,base:!1,path:a.sites[0].path,line:a.sites[0].line,...f.length?{modifiers:f}:{}};s.set(b,a.sites),n.push(b)}return{variants:n,sites:s}}var Ws=new Set(["tone","size","variant","kind","type","style","theme","color","colour","appearance","intent","emphasis","shape","level"]),Fi=new Set(["is","has","js","c","component","comp","el","ui","the","root"]),Bi={xs:["extra","small"],sm:["small"],md:["medium"],lg:["large"],xl:["extra","large"],xxl:["extra","extra","large"]},zi=new Set(["cta","ui","ux","faq","cms","api","url","ios"]);function Bt(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 Wi(e){return new Set(e.flatMap(t=>[t,`${t}s`]))}function Ft(e){let t=e.map(n=>zi.has(n)?n.toUpperCase():n).join(" ");return t.charAt(0).toUpperCase()+t.slice(1)}function ve(e,t){let n=Bt(e).filter(r=>!t.has(r)&&!Fi.has(r)),s=null;return n.length>1&&Ws.has(n[0])&&(s=n[0],n=n.slice(1)),{words:n.flatMap(r=>Bi[r]??[r]),axis:s}}var Gs=/\.((?:\\.|[\w-])+)/g,Gi=/\[\s*([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*))\s*\]/g;function Ui(e,t){let n=e.split("/"),s=(n.pop()??"").replace(/(\.module)?\.[a-z]+$/i,""),r=n.pop()??"";return Bt(s).some(a=>t.has(a))||Bt(r).some(a=>t.has(a))?ve(s,t).words:[]}function Hi(e,t){let n=[];for(let s of e.split(/[\s>+~]+/).filter(Boolean)){let r=[...s.matchAll(Gs)].map(o=>o[1]);if(r.length)for(let o of r)n.push(...ve(o,t).words);else{let o=/^[a-z][\w-]*/i.exec(s)?.[0]?.toLowerCase();o&&!["div","span","html","body"].includes(o)&&n.push(...ve(o,t).words)}}return n}function $e(e,t){let n=Wi(t),s=fe(e.selector),r=e.selector.slice(0,s),o=e.selector.slice(s),i=[...o.matchAll(Gs)].map(u=>ve(u[1],n));for(let u of o.matchAll(Gi)){let f=u[1].replace(/^data-/,"").toLowerCase();if(!Ws.has(f))continue;let b=u[2]??u[3]??u[4]??"",x=ve(b,n);i.push({words:x.words,axis:f})}let a=i.filter(u=>u.words.length>0);if(a.length>0)return{title:a.map(u=>Ft(u.words)).join(" + "),axis:a.length===1?a[0].axis:null};let l=Hi(r,n);if(l.length>0)return{title:`In ${l.join(" ")}`,axis:null};let c=Ui(e.path,n);if(c.length>0)return{title:Ft(c),axis:null};if(e.base){let u=Ki(e.path,n);return u.length>0?{title:`${Ft(u)} Base`,axis:null}:{title:"Base",axis:null}}return{title:"Unnamed",axis:null}}function Ki(e,t){let n=e.split("/").pop()??"";if(!/\.module\.[a-z]+$/i.test(n))return[];let s=n.replace(/\.module\.[a-z]+$/i,"");return ve(s,t).words}var Ji=60;function Te(e,t,n){let s=J(e);if(!s)return null;let r=s.length-1,o=s[r].simples;if(os(o)||_t(o,t))return null;if(Ke(o,t))return{compounds:s,at:r};for(let i=r-1;i>=0;i--){let a=s[i].simples;if(Ke(a,t)&&!_t(a,t))return{compounds:s,at:i}}return!n||r===0&&is(o)?null:{compounds:s,at:0}}function Us(e,t,n){return De([...e,{combinator:e.length?t.combinator:null,simples:n}])}function Hs(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 Zi(e,t){return e.length>=t.length?!1:e.every(n=>t.some(s=>Hs(n,s)))}function Xi(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 qi(e,t){for(let n of t.classes)e.classes.includes(n)||e.classes.push(n);Object.assign(e.attrs,t.attrs)}function Ks(e){let t=new Set(e.map(n=>Oe(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 Yi(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=>W(o)===He.length);return r.length===1?r[0]:null}function zt(e){return e.sort((t,n)=>+(t.context!=="")-+(n.context!=="")||W(t.state.split(" + ")[0])-W(n.state.split(" + ")[0])||t.state.localeCompare(n.state))}function Js(e,t,n,s,r={parts:new Set,controls:new Set}){let o=new Map,i=[];for(let p of t)if(p.declarations.length!==0)for(let m of V(p.selector)){let g=Te(m,n,s);if(!g)continue;let{compounds:w,at:$}=g,v=w[$],C=Je(v.simples);if(C.identity.length===0)continue;let I=w.slice(0,$),M=Us(I,v,C.identity),E=ue(C.states);if($<w.length-1){i.push({hostKey:M,part:{selector:De(w),path:e,line:p.line,state:E}});continue}if(ls(C.identity,p.declarations))continue;let A=o.get(M);if(!A){if(o.size>=Ji)continue;A={key:M,prefix:I,identity:C.identity,line:p.line,states:[],modifiers:[],contexts:[],parts:[],movedInto:null},o.set(M,A)}let L=A.states.find(O=>O.state===E&&O.context===p.context);L||(L={state:E,context:p.context,line:p.line,declarations:[]},C.states.length&&(L.marker={classes:[],attrs:{}}),A.states.push(L)),L.marker&&qi(L.marker,C.marker),L.declarations.push(...p.declarations)}for(let[p,m]of o){let g=m.states.flatMap(v=>v.declarations),w=m.states.every(v=>Xe(v.declarations)),$=g.every(v=>Oe(v.property)==="hint");(w||$)&&o.delete(p)}let a=new Map;for(let p of o.values()){let m=je(p.identity);a.set(m,[...a.get(m)??[],p])}for(let p of a.values()){let m=p.map(v=>Yi(v.states)),g=m[0];if(!g||m.some(v=>v!==g))continue;let w=p.flatMap(v=>v.states).find(v=>v.marker&&v.state.split(" + ").includes(g))?.marker;if(!w)continue;let $=[...w.classes.map(v=>({kind:"class",raw:`.${v}`,name:v})),...Object.entries(w.attrs).map(([v,C])=>({kind:"attr",raw:`[${v}="${C}"]`,name:v,op:"=",value:C}))];for(let v of p){let C=[...v.identity,...$],I={combinator:v.prefix.length?" ":null,simples:C},M=Us(v.prefix,I,C);for(let E of v.states){let A=E.state.split(" + ").filter(L=>L!==g);if(E.state=ue(A),A.length===0)delete E.marker;else if(E.marker){E.marker.classes=E.marker.classes.filter(L=>!w.classes.includes(L));for(let L of Object.keys(w.attrs))delete E.marker.attrs[L]}}o.delete(v.key),o.set(M,{...v,key:M,identity:C})}}let l=()=>[...o.values()].filter(p=>p.prefix.length===0),c=p=>p.states.filter(m=>m.state==="default").reduce((m,g)=>m+g.declarations.length,0),u=l().find(p=>Xi(p.identity,n))??(s?l().filter(p=>{let m=p.identity.length===1?p.identity[0]:null;return m?.kind==="class"&&r.controls.has(m.name)}).sort((p,m)=>c(m)-c(p)||p.line-m.line)[0]??null:null),f=u&&u.identity[0].kind==="class"?[u.identity[0].name]:[],b=(p,m,g)=>{m[g].push(p),p.movedInto=m,o.delete(p.key)},x=[...o.values()],d=p=>{let m=x.find(g=>g.key===p)??null;for(;m?.movedInto;)m=m.movedInto;return m};for(let p of l()){let m=p.identity.length===1?p.identity[0]:null;if(!(m?.kind!=="class"||!r.parts.has(m.name))&&(o.delete(p.key),u&&p!==u)){p.movedInto=u;for(let g of p.states)u.parts.push({selector:p.key,path:e,line:g.line,state:g.state})}}let y=l().filter(p=>p.identity.filter(m=>m.kind!=="tag"&&m.kind!=="universal").length>=2).sort((p,m)=>p.identity.length-m.identity.length);for(let p of y){let m=x.filter(w=>w!==p&&w!==u&&w.prefix.length===0&&Zi(w.identity,p.identity));if(m.length===0)continue;m.sort((w,$)=>$.identity.length-w.identity.length||c($)-c(w)||w.line-$.line);let g=d(m[0].key);g&&g!==p&&b(p,g,"modifiers")}for(let{hostKey:p,part:m}of i){let g=d(p)??(s?u:null);g&&o.has(g.key)&&g.parts.push(m)}let k=p=>{let m=p===u,g=Ze(p.key,f);return{...$e({selector:p.key,path:e,base:m},n.classKeywords),element:g,usage:{status:"unknown",files:[],fileCount:0},selector:p.key,path:e,line:p.line,base:m,states:zt(p.states),modifiers:p.modifiers.length?p.modifiers.map(w=>{let $=w.identity.filter(v=>!p.identity.some(C=>Hs(C,v)));return{title:$e({selector:$.map(v=>v.raw).join(""),path:e,base:!1},n.classKeywords).title,selector:w.key,path:e,line:w.line,element:Ze(w.key,f),usage:{status:"unknown",files:[],fileCount:0},states:zt(w.states)}}):void 0,contexts:p.contexts.length?p.contexts.map(w=>{let $=Ks(w.states.flatMap(v=>v.declarations));return{selector:w.key,path:e,line:w.line,role:$,element:$==="override"?Ze(w.key,f):null,states:zt(w.states)}}):void 0,parts:p.parts.length?p.parts:void 0}};return[...o.values()].map(k)}function Zs(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=J(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:je(l),bareTag:!l.some(f=>f.kind==="class"||f.kind==="attr"||f.kind==="id"),bare:u.length&&u.length<l.length?je(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=Ks(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 Qi={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 Xs(e){let t=e.lastIndexOf("-");return t<=0?null:Qi[e.slice(0,t)]?.[e.slice(t+1)]??null}var R=(e,t)=>({property:e,value:t});function Kt(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 Ht(e){let t=Kt(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 ea(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 qs(e,t){return{full:"100%",screen:t==="w"?"100vw":"100vh",auto:"auto",fit:"fit-content",min:"min-content",max:"max-content"}[e]??ea(e)??Kt(e)??Ht(e)}var ta={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"}},na={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},sa={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},ra={none:"0",sm:"0.125rem","":"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},oa={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"},ia={"":"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px"};function Wt(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=Xs(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 aa(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 Gt(){return R("box-shadow","0 0 0 var(--gs-ring-w, 3px) var(--gs-ring-c, currentColor)")}var la={flex:"flex","inline-flex":"inline-flex",block:"block","inline-block":"inline-block",inline:"inline",grid:"grid","inline-grid":"inline-grid",hidden:"none",contents:"contents"},Ut={start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch",between:"space-between",around:"space-around",evenly:"space-evenly"};function Ys(e){let t=e.startsWith("-"),n=t?e.slice(1):e,{body:s,opacity:r}=aa(n),o=la[s];if(o&&!t&&!r)return[R("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[R("flex-direction",A)]}if(s==="flex-wrap"&&!t)return[R("flex-wrap","wrap")];if(s==="flex-nowrap"&&!t)return[R("flex-wrap","nowrap")];if(s==="flex-1"&&!t)return[R("flex","1 1 0%")];if(s==="shrink-0"&&!t)return[R("flex-shrink","0")];if(s==="grow-0"&&!t)return[R("flex-grow","0")];if(s==="grow"&&!t)return[R("flex-grow","1")];let a=/^items-(start|end|center|baseline|stretch)$/.exec(s);if(a&&!t)return[R("align-items",Ut[a[1]])];let l=/^justify-(start|end|center|between|around|evenly)$/.exec(s);if(l&&!t)return[R("justify-content",Ut[l[1]])];let c=/^self-(start|end|center|stretch|auto)$/.exec(s);if(c&&!t)return[R("align-self",c[1]==="auto"?"auto":Ut[c[1]])];if(s==="whitespace-nowrap")return[R("white-space","nowrap")];if(s==="whitespace-normal")return[R("white-space","normal")];if(s==="truncate")return[R("overflow","hidden"),R("text-overflow","ellipsis"),R("white-space","nowrap")];if(s==="underline")return[R("text-decoration-line","underline")];if(s==="no-underline")return[R("text-decoration-line","none")];if(s==="line-through")return[R("text-decoration-line","line-through")];let u=/^(uppercase|lowercase|capitalize|normal-case)$/.exec(s);if(u)return[R("text-transform",u[1]==="normal-case"?"none":u[1])];let f=/^text-(left|center|right|justify|start|end)$/.exec(s);if(f&&!r)return[R("text-align",f[1])];let b=ta[s.replace(/^text-/,"")];if(s.startsWith("text-")&&b&&!r&&!t)return[R("font-size",b.size),R("line-height",b.leading)];let x=na[s.replace(/^font-/,"")];if(s.startsWith("font-")&&x&&!r)return[R("font-weight",x)];if(s.startsWith("leading-")&&!r){let A=s.slice(8),O=sa[A]??Ht(A);if(O)return[R("line-height",O)]}let d=/^cursor-(pointer|default|not-allowed|wait|text|move)$/.exec(s);if(d)return[R("cursor",d[1])];if(s==="pointer-events-none")return[R("pointer-events","none")];if(s==="pointer-events-auto")return[R("pointer-events","auto")];if(s==="select-none")return[R("user-select","none")];let y=/^opacity-(\d+)$/.exec(s);if(y&&!t)return[R("opacity",String(Number(y[1])/100))];if(s==="transition"||s==="transition-colors"||s==="transition-all")return[R("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"),R("transition-timing-function","cubic-bezier(0.4, 0, 0.2, 1)"),R("transition-duration","150ms")];let k=/^duration-(\d+)$/.exec(s);if(k)return[R("transition-duration",`${k[1]}ms`)];let p={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-")&&p[s.slice(4)])return[R("transition-timing-function",p[s.slice(4)])];if(s==="outline-none")return[R("outline","2px solid transparent"),R("outline-offset","2px")];if(s==="outline")return[R("outline-style","solid")];let m=/^outline-(\d+)$/.exec(s);if(m)return[R("outline-width",`${m[1]}px`)];if(s==="shadow"||s.startsWith("shadow-")){let A=s==="shadow"?"":s.slice(7),L=oa[A];if(L)return[R("box-shadow",L)]}if(s==="ring"||/^ring(?:-(?:0|1|2|4|8))?$/.test(s)){let A=s==="ring"?"":s.slice(5),L=ia[A];if(L)return[R("--gs-ring-w",L),Gt()]}if(s.startsWith("ring-")&&r===null){let A=Wt(s.slice(5),null);if(A)return[R("--gs-ring-c",A),Gt()]}if(s.startsWith("ring-")&&r){let A=Wt(s.slice(5),r);if(A)return[R("--gs-ring-c",A),Gt()]}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),L=A?A[2]??"":g,O=ra[L];if(!O)return null;if(!A)return[R("border-radius",O)];let K={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 K?K.map(Be=>R(Be,O)):null}if(/^border(?:-[trblxy])?$/.test(s)&&!r)return[R("border-width","1px"),R("border-style","solid")];let w=/^border-(\d+)$/.exec(s);if(w&&!r)return[R("border-width",`${w[1]}px`),R("border-style","solid")];let $=/^border-(solid|dashed|dotted|double|none|hidden)$/.exec(s);if($)return[R("border-style",$[1])];let v=/^(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=v?.[1],I=v?.[2];if(C&&I&&!r){let A=C==="w"||C==="min-w"||C==="max-w"?qs(I,"w"):C==="h"||C==="min-h"||C==="max-h"?qs(I,"h"):Ht(I);if(!A)return null;let L=t?A==="0"?"0":`-${A}`:A,B={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 B?B.map(K=>R(K,L)):null}let M={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,L]of Object.entries(M))if(s===A||s.startsWith(`${A}-`)){let O=s===A?"":s.slice(A.length+1);if(!O||/^(?:gradient|clip|ellipsis|wrap|nowrap|balance|pretty|opacity)/.test(O))return null;if(A==="text"&&!t){let K=Kt(O);if(K)return[R("font-size",K)]}let B=Wt(O,r);return!B||t?null:[R(L,B)]}let E=/^\[([a-z-]+):(.+)\]$/i.exec(s);if(E&&!t&&!r){let A=E[1].toLowerCase(),L=E[2].replace(/_/g," ").trim();if(/^[a-z][\w-]*$/.test(A)&&L&&!/[<>]/.test(L))return[R(A,L)]}return null}var ca=48,ua={hover:"hover",focus:"focus","focus-visible":"focus","focus-within":"focus",active:"active",disabled:"disabled"},fa=new Set(["cn","clsx","classNames","classnames","cx","twMerge"]);function oe(e,t){let n=1;for(let s=0;s<t&&s<e.length;s++)e[s]===`
|
|
38
|
+
`&&n++;return n}function pa(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 F(e,t){for(;t<e.length&&/\s/.test(e[t]);)t++;return t}function nt(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"?`
|
|
39
|
+
`: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 Xt(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=nt(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 da(e,t){let n=0;for(let s=t;s<e.length;s++){let r=e[s];if(r==='"'||r==="'"||r==="`"){let o=nt(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 Qs(e){if(e.t==="str")return e.v;if(e.t==="arr"){let t=[];for(let n of e.items){let s=Qs(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 ga(e,t){let n=t+1,s=[];for(;n<e.length;){if(n=F(e,n),e[n]===")")return{v:s.join(" ").replace(/\s+/g," ").trim()||null,end:n+1};if(e[n]===","){n++;continue}let r=Z(e,n);if(!r)return null;let o=F(e,r.end);if(e[o]===","||e[o]===")"){let i=Qs(r.val);i&&s.push(i),n=r.end;continue}n=da(e,n)}return null}function Z(e,t){if(t=F(e,t),t>=e.length)return null;let n=e[t];if(n==='"'||n==="'"||n==="`"){let r=nt(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=F(e,r),e[r]==="]")return{val:{t:"arr",items:o,at:t},end:r+1};if(e[r]===","){r++;continue}let i=Z(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=F(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=Z(e,r+3);if(!c)return null;r=c.end;continue}let i="",a=r;if(e[r]==='"'||e[r]==="'"||e[r]==="`"){let c=nt(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=F(e,r),e[r]!==":"){e[r]==="("&&(r=Xt(e,r,"(",")"));continue}let l=Z(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=F(e,r);if(e[i]==="("){if(fa.has(o)){let a=ga(e,i);return a?{val:{t:"str",v:a.v,at:s},end:a.end}:null}return{val:{t:"other",at:s},end:Xt(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 st(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 er(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 Jt={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function ma(e,t,n,s){let r=ua[e];if(r)return t.includes(r)||t.push(r),!0;if(e==="dark")return s.on=!0,!0;if(Jt[e])return n.min.push(Jt[e]),!0;let o=/^max-(sm|md|lg|xl|2xl)$/.exec(e);if(o)return n.below.push(Jt[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 ha(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 tr(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||!ma(f,a,l,c))return null;a.sort((f,b)=>W(f)-W(b));let u=/^[\w-]+$/.test(i)?i:null;return{token:e,state:ue(a),context:ha(l,c.on),utility:i,important:n,stem:u}}function nr(e){let t=Ys(e.utility);return t?t.map(n=>({property:n.property,value:e.important?`${n.value} !important`:n.value,via:e.token})):[]}function ba(e){return e.some(t=>Oe(t.property)!=="hint")}function rt(e){let t=[];for(let n of e.matchAll(/@apply\s+([^;{}]+)/g))for(let s of er(n[1])){let r=tr(s);if(!r)continue;let o=nr(r).filter(i=>q(i.property,i.value));o.length!==0&&t.push({state:r.state,context:r.context,declarations:o})}return t}function sr(e){return e==="default"?"":e.split(" + ").map(t=>t==="hover"?":hover":t==="focus"?":focus":t==="active"?":active":t==="disabled"?":disabled":"").join("")}function Qt(e,t,n){let s=t.map(f=>`${f.property}:${f.value}`).join(";");if(!s)return[];let r=Et(e),o=`${r}{${s}}`,i=n.split(" \xB7 ").map(f=>f.trim()).filter(f=>f&&!/^@layer\b/i.test(f));if(i.length===0)return[o];if(i.length!==1||!i[0].startsWith("@media"))return[];let a=i[0],l=[`${a}{${o}}`];if(!a.includes("prefers-color-scheme: dark"))return l;let c=a.replace(/^@media\s+/,"").split(/\s+and\s+/).filter(f=>!f.includes("prefers-color-scheme")).join(" and "),u=`html[data-theme="dark"] ${r}{${s}}`;return l.push(c?`@media ${c}{${u}}`:u),l}function xa(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 ya(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 wa(e,t,n,s,r){let o=Z(e,t),i={slots:[],defaults:{}};if(!o)return i;let a=st(o.val)??"",l=F(e,o.end);if(e[l]!==",")return a.trim()?{slots:[Zt(a,oe(e,t),r)],defaults:{}}:i;let c=Z(e,l+1);if(!c||c.val.t!=="obj")return a.trim()?{slots:[Zt(a,oe(e,t),r)],defaults:{}}:i;let u=c.val.entries.find(x=>x.key==="variants")?.value,f=[],b=new Map;if(a.trim()&&f.push(Zt(a,oe(e,t),r)),u&&u.t==="obj"){for(let x of u.entries)if(x.value.t==="obj")for(let d of x.value.entries){let y=st(d.value);if(!y||!y.trim()||d.key==="false")continue;b.set(`${x.key}\0${d.key}`,y);let k=d.key==="true"?`.${x.key}`:`.${x.key}-${d.key}`,p=$e({selector:k,path:s,base:!1},n.classKeywords);f.push({title:p.title,axis:d.key==="true"?x.key:p.axis??x.key,base:!1,classes:`${a} ${y}`.trim(),line:oe(e,d.at),group:r,prop:x.key,value:d.key})}}return f.push(...ka(c.val,a,b,n,s,e,r)),{slots:f,defaults:ya(c.val)}}function rr(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=rr(n);if(!s||s.length!==1)return null;t.push(s[0])}return t.length?t:null}return null}function ka(e,t,n,s,r,o,i){let a=e.entries.find(c=>c.key==="compoundVariants")?.value;if(!a||a.t!=="arr")return[];let l=[];for(let c of a.items){if(c.t!=="obj")continue;let u=[],f="",b=c.at,x=!1;for(let y of c.entries){if(y.key==="class"||y.key==="className"){f=st(y.value)??"",b=y.at,y.value.t!=="str"&&y.value.t!=="arr"&&f===""&&(x=!0);continue}let k=rr(y.value);if(!k){x=!0;break}u.push({axis:y.key,values:k})}if(x)continue;let d=[[]];for(let y of u){let k=[];for(let p of d){for(let m of y.values)if(k.push([...p,{axis:y.axis,value:m}]),k.length>=8)break;if(k.length>=8)break}d=k}for(let y of d){if(y.length<2&&!f.trim())continue;let k=[t],p=[];for(let w of y){let $=n.get(`${w.axis}\0${w.value}`);$&&k.push($),p.push(w.value==="true"?w.axis:w.value)}f.trim()&&k.push(f);let m=k.join(" ").replace(/\s+/g," ").trim();if(!m)continue;let g=$e({selector:`.${p.join("-")}`,path:r,base:!1},s.classKeywords);l.push({title:g.title,axis:g.axis,base:!1,classes:m,line:oe(o,b),group:i,when:y.map(w=>({prop:w.axis,value:w.value}))})}}return l}function Zt(e,t,n){return{title:"Base",axis:null,base:!0,classes:e,line:t,group:n}}function or(e,t){return t.elements.includes(e.toLowerCase())?!0:t.identifier.test(e)}function va(e){let t=e.match(/\bclassName\s*=\s*(?:"([^"]*)"|'([^']*)'|\{\s*"([^"]*)"\s*\}|\{\s*'([^']*)'\s*\})/);return t?.[1]??t?.[2]??t?.[3]??t?.[4]??null}var $a=new Set(["opacity","z-index","font-weight","line-height","flex","flex-grow","flex-shrink","order","zoom"]);function Ca(e){return e.replace(/^[A-Z]/,t=>`-${t.toLowerCase()}`).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function Sa(e,t){return t.t==="str"?t.v:t.t==="num"?$a.has(e)?String(t.v):`${t.v}px`:null}function ot(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(...ot(o.value,c));continue}let i=Ca(o.key),a=Sa(i,o.value);!a||!q(i,a)||n.push({property:i,value:a,via:"style"})}return[...n.length?[{state:t,context:"",declarations:n}]:[],...s]}function qt(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"?`
|
|
40
|
+
`: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 Aa(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)=>W(s)-W(r)||s.localeCompare(r)),ue(n)}function Yt(e){let t=[];for(let n of pe(`.__gs {
|
|
41
|
+
${e}
|
|
42
|
+
}`)){let s=J(n.selector),r=s?.[s.length-1];if(!r)continue;let o=Je(r.simples),i=ue(o.states),a=re(n.ownBody).filter(l=>q(l.property,l.value));a.length&&t.push({state:i,context:n.context,declarations:a});for(let l of rt(n.ownBody))t.push({state:Aa(i,l.state),context:[n.context,l.context].filter(Boolean).join(" \xB7 "),declarations:l.declarations})}return t}function Ra(e){let t=e.match(/\bstyle\s*=\s*"([^"]*)"/);if(t){let i=re(t[1]).filter(a=>q(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=F(e,s+1);e[r]==="{"&&(s=r);let o=Z(e,s);return o?ot(o.val,"default"):[]}function _a(e){let t=va(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=F(e,s+1);if(e.startsWith("css",r)&&!/[\w$]/.test(e[r+3]??"")){let i=F(e,r+3);if(e[i]==="`"){let a=qt(e,i);return{classes:"",painted:a?Yt(a.css):[]}}if(e[i]==="("){let a=Z(e,i+1);return{classes:"",painted:a?ot(a.val,"default"):[]}}}let o=Z(e,r);return o?{classes:st(o.val)??"",painted:[]}:{classes:"",painted:[]}}function Ea(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 Ma(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(!or(i,t))continue;let a=F(e,(o.index??0)+o[0].length);e.startsWith(".attrs",a)&&(a=F(e,a+6),e[a]==="("&&(a=Xt(e,a,"(",")")),a=F(e,a));let l=[];if(e[a]==="`"){let c=qt(e,a);c&&(l=Yt(c.css))}else if(e[a]==="("){let c=Z(e,a+1);c&&(l=ot(c.val,"default"))}l.length!==0&&n.push({title:"Styled",axis:null,base:!0,classes:"",line:oe(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(!Ea(i,t))continue;let a=e.indexOf("`",o.index??0),l=a<0?null:qt(e,a);if(!l)continue;let c=Yt(l.css);c.length!==0&&n.push({title:"Css",axis:null,base:!0,classes:"",line:oe(e,o.index??0),painted:c})}return n}function Ia(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 La(e,t,n,s,r){let o=er(e.classes).map(tr).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,w,$)=>{if($.length===0)return;let v=`${g}\0${w}`,C=l.get(v)??{state:g,context:w,declarations:[]};C.declarations.push(...$),l.set(v,C)},u=[r];for(let g of o){let w=nr(g).filter($=>q($.property,$.value));c(g.state,g.context,w),g.state==="default"&&g.context===""&&g.stem&&u.push(g.stem)}for(let g of a)c(g.state,g.context,g.declarations);let f=[...l.values()].flatMap(g=>g.declarations);if(!ba(f))return null;let b=l.get("default\0")?.declarations??[];if(Xe(b))return null;let x=[...l.values()].map(g=>({state:g.state,context:g.context,line:e.line,declarations:g.declarations})).sort((g,w)=>g.state!==w.state?g.state==="default"?-1:w.state==="default"?1:W(g.state.split(" + ")[0])-W(w.state.split(" + ")[0])||g.state.localeCompare(w.state):g.context===""?-1:w.context===""?1:g.context.localeCompare(w.context)),d=[...new Set(o.map(g=>g.stem).filter(g=>g!==null))],y=d.length?d.map(g=>`.${g}`).join(""):n.elements[0]??"button",k=x.flatMap(g=>Qt(Ia(r,g.state),g.declarations,g.context)),p=n.elements[0]??"button";return{variant:{title:e.title,axis:e.axis,element:{tag:p,classes:u,attrs:{},ancestors:[]},usage:{status:"unknown",files:[],fileCount:0},selector:y,path:t,line:e.line,base:e.base,states:x},rules:k}}function ir(e,t,n,s,r){let o=pa(t),i=[],a=[],l=/(?:^|[^\w$])(cva|tv)\s*\(/g;for(let m of o.matchAll(l)){let g=(m.index??0)+Math.max(0,m[0].indexOf(m[1])),w=(m.index??0)+m[0].length,$=a.length,v=wa(o,w,n,e,$);a.push({name:xa(o,g),defaults:v.defaults}),i.push(...v.slots)}i.push(...Ma(o,n));let c=/<([A-Za-z][\w.]*)\b([^>]*?)>/g;for(let m of o.matchAll(c)){let g=m[1];if(!or(g,n))continue;let w=m[2]??"",$=_a(w),v=[...$.painted,...Ra(w)],C=$.classes.trim();if(!C&&v.length===0)continue;let I=m.index??0,M=oe(o,I);i.push({title:C?"Base":$.painted.length?"Css":"Inline",axis:null,base:!0,classes:C,line:M,painted:v,...C&&v.length===0?{site:{path:e,line:M,offset:I}}:{}})}let u=[],f=[],b=new Map,x=[],d=new Map,y=new Map,k=r;for(let m=0;m<i.length;m++){let g=i[m];if(u.length+f.length>=ca)break;let w=(g.painted??[]).map(M=>`${M.state}|${M.context}|${M.declarations.map(E=>`${E.property}:${E.value}`).join(";")}`).join("||"),$=`${g.classes.replace(/\s+/g," ").trim()}##${w}`,v=d.get($);if(v){g.group!==void 0&&y.set(m,v),g.site&&b.get(v)?.sites.push(g.site);continue}k+=1;let C=`__gs-recipe-${k}`,I=La(g,e,n,s,C);if(I){if(d.set($,C),g.group!==void 0&&y.set(m,C),g.site){let M={variant:I.variant,sites:[g.site]};b.set(C,M),f.push(M)}else u.push(I.variant);x.push(...I.rules)}}let p=[];for(let m=0;m<a.length;m++){let g=a[m],w={path:e,name:g.name,staticClasses:[],axes:[],compounds:[]},$=new Map;for(let v=0;v<i.length;v++){let C=i[v];if(C.group!==m)continue;let I=y.get(v);if(!I)continue;if(!C.prop&&!C.when){w.staticClasses.push(I);continue}if(C.when){w.compounds.push({when:C.when,classes:[I]});continue}let M=$.get(C.prop)??[];M.push({value:C.value,classes:[I]}),$.set(C.prop,M)}for(let[v,C]of $)w.axes.push({prop:v,values:C,...g.defaults[v]?{defaultValue:g.defaults[v]}:{}});(w.staticClasses.length||w.axes.length||w.compounds.length)&&p.push(w)}return{variants:u,inline:f,previewRules:x,nextId:k,recipes:p}}function ar(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 en=6,ja=/"([^"\\\n]{0,400})"|'([^'\\\n]{0,400})'|`([^`\\]{0,400})`/g,Da=/\bclass(?:Name)?\s*=\s*(?:"([^"]*)"|'([^']*)')/g,Oa=/\b(?:styles?|classes|css|cls|s)\.([A-Za-z_]\w*)/g,Ne=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function Ta(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 Na(e,t){let n=Ta(t),s=new Map,r=new Map,o=(a,l,c)=>{let u=a.get(l);u?u.push(c):a.set(l,[c])},i=(a,l)=>{for(let c of a.matchAll(/[\w-]+/g))o(s,c[0],l)};for(let a of n.matchAll(ja))i(a[1]??a[2]??a[3]??"",a.index);for(let a of n.matchAll(Da))i(a[1]??a[2]??"",a.index);for(let a of n.matchAll(Oa))o(r,a[1],a.index);return{path:e,text:n,original:t,words:s,ids:r}}function lr(e,t){let n=1;for(let s=e.indexOf(`
|
|
43
|
+
`);s!==-1&&s<t;)n++,s=e.indexOf(`
|
|
44
|
+
`,s+1);return n}var Pa=e=>e.replace(/[-_]+(\w)/g,(t,n)=>n.toUpperCase()),Va=/\[\s*([\w-]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\]\s]*)))?\s*\]/g,Fa=new Set(["data-component","data-slot","role"]);function Ba(e,t){return[...e.slice(fe(e)).matchAll(Va)].map(s=>({name:s[1],value:s[2]??s[3]??s[4]??null})).filter(s=>!Fa.has(s.name)&&!(s.value!==null&&t.has(s.value.toLowerCase())))}function za(e){return[...e.slice(fe(e)).matchAll(/\.((?:\\.|[\w-])+)/g)].map(n=>n[1].replace(/\\(.)/g,"$1"))}function tn(e,t,n,s,r=!1,o=[],i=()=>null){let a=null,l=()=>a??=t.map(p=>Na(p,e.get(p)??"")),c=new Map,u=p=>{let m=c.get(p);if(!m){let g=new RegExp(`["'\`]${Ne(p)}["'\`]\\s*\\+`);m=l().filter(w=>w.text.includes(`${p}\${`)||g.test(w.text)),c.set(p,m)}return m},f=(p,m,g)=>Ls(Pt(p.original,m,g,p.path),p.original,m,p.path,o,i),b=(p,m)=>({files:p.slice(0,en).map(({file:g,offset:w,example:$})=>({path:g.path,line:lr(g.text,w),...r?{example:$??f(g,w,m)}:{}})),fileCount:p.length}),x=(p,m)=>{let g=[],w=Pa(p);for(let $ of l()){let v=[...s.has(p)?[]:$.words.get(p)??[],...$.ids.get(w)??$.ids.get(p)??[]],C=v[0];if(C===void 0)continue;let I=C,M;if(r)for(let E of v){let A=f($,E,m);if(A.kind!=="other"){I=E,M=A;break}}g.push({file:$,offset:I,example:M})}if(g.length)return{status:"used",...b(g,m)};for(let $=p.length-1;$>0;$--){if(p[$]!=="-"&&p[$]!=="_")continue;let v=p.slice(0,$+1),C=p.slice($+1),I=u(v);if(I.length===0||!C)continue;let M=v.slice(0,-1),E=new RegExp(`\\b${Ne(M)}\\s*[=:]\\s*\\{?\\s*["'\`]${Ne(C)}["'\`]`),A=[];for(let L of l()){let O=E.exec(L.text);O&&A.push({file:L,offset:O.index})}return A.length?{status:"used",via:`via ${M} prop`,...b(A,m)}:{status:"dynamic",via:`built as ${v}\${\u2026}`,...b(I.map(L=>({file:L,offset:0})),m)}}return{status:"unreferenced",files:[],fileCount:0}},d=(p,m)=>{let g=Ne(p.name),w=p.value===null?new RegExp(`\\b${g}\\b`):new RegExp(`\\b${g}\\s*[=:]\\s*\\{?\\s*["'\`]${Ne(p.value)}["'\`]`),$=[];for(let I of l()){let M=w.exec(I.text);M&&$.push({file:I,offset:M.index})}if($.length)return{status:"used",via:`via ${p.name} attribute`,...b($,m)};let v=new RegExp(`\\b${g}\\s*=\\s*\\{(?!\\s*["'\`])`),C=[];for(let I of l()){let M=v.exec(I.text);M&&C.push({file:I,offset:M.index})}return C.length?{status:"dynamic",via:`${p.name} is set from a variable`,...b(C,m)}:{status:"unreferenced",files:[],fileCount:0}},y=new Map;if(r&&o.length>0)for(let p of l())for(let m of js(p.path,p.text,o,i))for(let g of m.selects){let w=y.get(g)??[];w.push({file:p,offset:m.offset}),y.set(g,w)}let k={used:0,unknown:0,dynamic:1,unreferenced:2};for(let p of n){let m=za(p.selector),g=Ba(p.selector,s);if(m.length===0&&g.length===0){p.usage={status:"unknown",files:[],fileCount:0};continue}let w=[...m.map(E=>x(E,m)),...g.map(E=>d(E,m))];p.usage=w.reduce((E,A)=>k[A.status]>=k[E.status]?A:E);let $=p.element?.classes.find(E=>E.startsWith("__gs-recipe-")),v=$?y.get($):void 0;if(!v||v.length===0)continue;let C=new Set(p.usage.files.map(E=>E.path)),I=p.usage.fileCount,M=[...p.usage.files];for(let E of v)C.has(E.file.path)||(C.add(E.file.path),I+=1,!(M.length>=en)&&M.push({path:E.file.path,line:lr(E.file.text,E.offset),...r?{example:f(E.file,E.offset,[])}:{}}));p.usage={...p.usage,status:p.usage.status==="unknown"?"unknown":"used",files:M,fileCount:I}}}function cr(e,t,n){let s=[],r=new Set;for(let o of t)r.has(o.path)||(r.add(o.path),!(s.length>=en)&&s.push({path:o.path,line:o.line,...n?{example:Pt(e.get(o.path)??"",o.offset,[],o.path)}:{}}));return{status:"used",files:s,fileCount:r.size}}var Wa={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},mr={button:Wa},hr=12,sn=200,Ce=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro)$/i,ur=/\.(tsx?|jsx?|mjs|cjs|vue|svelte|astro|html?|mdx|erb|php|hbs|njk|liquid|twig|ejs|pug|cshtml|razor|jinja2?|j2)$/i,Pe=/\.(css|scss|sass|less|styl)$/i,fr=/\.(mdx?|markdown|txt|rst|adoc)$/i,pr=/(^|\/)(tokens?|design-tokens?|theme)[^/]*\.json$/i,X=/(^|\/)(__tests__|tests?|spec|e2e|cypress|playwright)(\/|$)|\.(test|spec)\.[a-z]+$/i,Ga=/(^|\/)(plans?|results?|changelogs?|history|archive)(\/|\.|$)|(^|\/)CHANGELOG/i;function Ua(e){return it.test(e)&&!/(^|\/)README\.md$/i.test(e)?"instruction":Ga.test(e)?"record":"documentation"}var it=/(^|\/)(AGENTS|CLAUDE|CONTRIBUTING|README|GUIDELINES?)\.md$|(^|\/)(eslint|stylelint|\.eslintrc|\.stylelintrc)[^/]*$|(^|\/)\.cursor\/|(^|\/)\.claude\//i;function ie(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ha(e){return(e.split("/").pop()??"").replace(/(\.module)?\.[^.]+$/i,"")}function dr(e,t){let n=Ha(e).toLowerCase();return t.some(s=>{let r=s.toLowerCase();return n===r||n===`${r}s`})}function ae(e,t){let n=e.split(`
|
|
45
|
+
`),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<hr)){let a=i.trim();r.push({line:o+1,text:a.length>sn?`${a.slice(0,sn)}\u2026`:a})}}return{count:s,lines:r}}function br(e){let t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function xr(e){let t=[];for(let n of e.split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return t.join("/")}var Ka=["",".tsx",".ts",".jsx",".js",".mjs",".vue",".svelte",".css",".module.css",".scss","/index.tsx","/index.ts","/index.js"];function Se(e,t,n){let s;if(t.startsWith("."))s=xr(`${br(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 Ka)if(n(s+r))return s+r;return null}var Ja=/import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]|require\(\s*['"]([^'"]+)['"]\s*\)|@import\s+(?:url\()?['"]([^'"]+)['"]/g;function nn(e){let t=[];for(let n of e.matchAll(Ja)){let s=n[1]??n[2]??n[3];s&&t.push(s)}return t}var Za=/export\s+(?:default\s+)?(?:async\s+)?(?:function|const|let|class|var)\s+([A-Za-z_$][\w$]*)|export\s*\{([^}]*)\}/g;function gr(e){let t=new Set;for(let n of e.matchAll(Za))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 rn=/var\(\s*(--[\w-]+)/g;function at(e){return e.split(" \xB7 ").every(t=>t===""||/^@layer\b/i.test(t))}function yr(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 Xa(e,t,n){let s=t.startsWith(".")?xr(`${br(e)}/${t}`):t.startsWith("@/")?t.slice(2):t.startsWith("~/")||t.startsWith("/")?t.replace(/^~?\//,""):null;return s&&n(s)?s:Se(e,t.replace(/\.(?:module\.)?(?:css|scss|sass|less)$/i,""),n)}function qa(e){let t=new Map;for(let[n,s]of e)if(Pe.test(n)){for(let r of pe(s))if(at(r.context))for(let o of V(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(...re(r.ownBody));for(let c of rt(r.ownBody))c.state==="default"&&c.context===""&&l.decls.push(...c.declarations);l.composes.push(...yr(r.ownBody)),t.set(a,l)}}return t}function Ya(e,t,n,s){let r=[],o=new Set,i=(l,c,u)=>{if(u>4)return;let f=`${l}\0${c}`;if(o.has(f))return;o.add(f);let b=n.get(f);if(b){for(let x of b.composes)a(l,x,u+1);r.push(...b.decls)}},a=(l,c,u)=>{for(let f of c.names)if(c.from==="global")for(let b of n.keys()){let x=b.indexOf("\0"),d=b.slice(0,x);b.slice(x+1)!==f||/\.module\./i.test(d)||i(d,f,u)}else if(c.from){let b=Xa(l,c.from,s);b&&i(b,f,u)}else i(l,f,u)};for(let l of yr(t))a(e,l,0);return r}function Qa(e,t){let n=sr(t);return n?V(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 el=/^(?::root|html|body|\*)$/i,tl=25e4,nl=/<([A-Za-z][\w.-]*)\b((?:[^<>"'`{}]|"[^"]*"|'[^']*'|`[^`]*`|\{(?:[^{}]|\{[^{}]*\})*\})*)>/g,sl=/\b(?:styles?|classes|css|cls)\s*(?:\.([A-Za-z_]\w*)|\[\s*["']([\w-]+)["']\s*\])/g,rl=new Set(["span","svg","i","img","em","strong","small","b","p","kbd","abbr","sup","sub","picture","use","path"]);function ol(e){let t=new Set,n=new Set;for(let s of e.matchAll(nl)){let r=s[1],o=rl.has(r.toLowerCase())&&r===r.toLowerCase()?t:n;for(let i of s[2].matchAll(sl))o.add(i[1]??i[2])}return{parts:new Set([...t].filter(s=>!n.has(s))),controls:n}}function il(e,t){let n=new Map;for(let s of t)if(Pe.test(s)){for(let r of pe(e.get(s)))if(at(r.context)&&V(r.selector).some(o=>el.test(o)))for(let o of re(r.ownBody))o.property.startsWith("--")&&!n.has(o.property)&&n.set(o.property,o.value)}return n}function al(e,t){let n=new Set,s=[],r=a=>{for(let l of a.matchAll(rn))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||!q(a,l)||(o.push(`${a}:${l}`),r(l))}return`${o.length?`:root{${o.join(";")}}
|
|
46
|
+
`:""}${t.join(`
|
|
47
|
+
`)}`.slice(0,tl)}function wr(e,t){let n=[...e.keys()].sort(),s=h=>e.has(h),r=new Map,o=(h,S,_,D)=>{let N=`${S}:${h}`,G=r.get(N);if(G){G.note.includes(_)||(G.note+=`; ${_}`);return}r.set(N,{path:h,role:S,note:_,matches:D.count,lines:D.lines})},i=new Set,a=new Set;for(let h of n){if(!Ce.test(h)||X.test(h))continue;let S=e.get(h),_=gr(S).filter(j=>t.identifier.test(j)),D=h.split("/").pop()??"",N=new RegExp(t.classKeywords.join("|"),"i").test(D);if(_.length===0&&!N)continue;for(let j of _)i.add(j);a.add(h);let G=_.length?new RegExp(`\\b(?:${_.map(ie).join("|")})\\b`,"g"):t.prose;o(h,"implements",_.length?`exports ${_.join(", ")}`:"named for the concept",ae(S,G))}let l=new Set,c=[],u=[],f=new Map,b=h=>dr(h,t.classKeywords)||/\.module\.[a-z]+$/i.test(h)&&f.has(h),x=null,d=()=>x??=qa(e),y=h=>{let S=b(h),_=[],D=0;for(let j of pe(e.get(h))){let z=V(j.selector).filter(T=>Te(T,t,S));if(z.length===0)continue;D+=1;for(let T of j.ownBody.matchAll(rn))l.add(T[1]);let U=rt(j.ownBody),Ee=[...Ya(h,j.ownBody,d(),s),...re(j.ownBody),...U.filter(T=>T.state==="default"&&T.context==="").flatMap(T=>T.declarations)];for(let T of Ee)for(let H of T.value.matchAll(rn))l.add(H[1]);_.push({block:j,parts:z,declarations:Ee,previewContext:at(j.context)?"":null,listed:!0});for(let T of U){if(T.state==="default"&&T.context==="")continue;let H=Qa(z.join(", "),T.state),Me=V(H).filter(Lr=>Te(Lr,t,S));if(Me.length===0)continue;let Ir=[j.context,T.context].filter(Boolean).join(" \xB7 ");_.push({block:{...j,selector:H,context:Ir},parts:Me,declarations:T.declarations,previewContext:at(j.context)?T.context:null,listed:!1})}}let N={parts:new Set,controls:new Set};for(let j of f.get(h)??[]){let z=ol(e.get(j)??"");for(let U of z.parts)N.parts.add(U);for(let U of z.controls)N.controls.add(U)}c.push(...Js(h,_.map(({block:j,parts:z,declarations:U})=>({selector:z.join(", "),declarations:U,line:j.line,context:j.context})),t,S,N));let G=/\.module\.[a-z]+$/i.test(h)?`${us(h)} `:"";for(let{parts:j,declarations:z,previewContext:U}of _){if(U===null)continue;let Ee=j.flatMap(H=>{let Me=Te(H,t,S);return Me?[`${G}${De(Me.compounds)}`]:[]}),T=z.filter(H=>q(H.property,H.value));if(!(Ee.length===0||T.length===0))for(let H of Ee)u.push(...Qt(H,T,U))}return{count:D,lines:_.filter(j=>j.listed).slice(0,hr).map(({block:j})=>({line:j.line,text:j.selector.replace(/\s+/g," ").slice(0,sn)}))}},k=new Map;for(let h of a)for(let S of nn(e.get(h))){let _=Se(h,S,s);if(_&&Pe.test(_)){let D=k.get(_)??[];D.push(h.split("/").pop()??h),k.set(_,D),dr(h,t.classKeywords)&&f.set(_,[...f.get(_)??[],h])}}for(let h of n){if(!Pe.test(h))continue;let S=y(h),_=k.get(h);if(S.count===0)continue;let D=[];_&&D.push(`imported by ${_.join(", ")}`),S.count>0&&D.push(`${S.count} matching rule${S.count===1?"":"s"}`),o(h,"styles",D.join("; "),S)}let p=new Set;for(let h of c)for(let S of h.selector.matchAll(/\.((?:\\.|[\w-])+)/g))p.add(S[1].replace(/\\(.)/g,"$1"));let m=new Set(a),g=new RegExp([...t.elements.map(h=>`<${ie(h)}\\b`),...t.roles.map(h=>`role=["']${ie(h)}["']`)].join("|"));for(let h of n)!Ce.test(h)||X.test(h)||g.test(e.get(h)??"")&&m.add(h);for(let h of a)for(let S of nn(e.get(h))){let _=Se(h,S,s);!_||!Ce.test(_)||X.test(_)||ar(_,t.classKeywords)&&m.add(_)}let w=0,$=[],v=[];for(let h of m){let S=ir(h,e.get(h)??"",t,p,w);w=S.nextId,$.push(...S.recipes),c.push(...S.variants),v.push(...S.inline),u.push(...S.previewRules)}let C=zs(v);c.push(...C.variants);let I=Ds([...a].map(h=>({path:h,source:e.get(h)??"",names:gr(e.get(h)??"").filter(S=>t.identifier.test(S))})),$,(h,S)=>Se(h,S,s)),M=[];if(l.size>0){let h=new RegExp(`(?:^|[\\s{;])(${[...l].map(ie).join("|")})\\s*:`),S=new Map;for(let _ of n){if(!Pe.test(_)&&!pr.test(_))continue;let D=e.get(_),N=ae(D,h);if(N.count!==0){for(let G of D.matchAll(new RegExp(h.source,"gm"))){let j=S.get(G[1])??[];j.includes(_)||j.push(_),S.set(G[1],j)}o(_,"tokens",`defines ${N.count} token${N.count===1?"":"s"} read by ${t.label.toLowerCase()} styles`,N)}}for(let _ of[...l].sort())M.push({name:_,definedIn:S.get(_)??[]})}for(let h of n){if(!pr.test(h))continue;let S=ae(e.get(h),t.prose);S.count>0&&o(h,"tokens","token file mentions the concept",S)}let E=[...i],A=new RegExp([...E.length?[`<(?:${E.map(ie).join("|")})\\b`]:[],...t.elements.map(h=>`<${ie(h)}\\b`),...t.roles.map(h=>`role=["']${ie(h)}["']`)].join("|"));for(let h of n){if(!Ce.test(h)||a.has(h))continue;let S=e.get(h),_=X.test(h),D=ae(S,A),N=nn(S).some(j=>{let z=Se(h,j,s);return z!=null&&a.has(z)});if(D.count===0&&!N)continue;let G=D.count>0?`${D.count} render${D.count===1?"":"s"}`:"imports a button component";o(h,_?"tests":"uses",G,D.count?D:ae(S,t.prose))}for(let h of n){if(!(fr.test(h)||it.test(h)))continue;let _=e.get(h),D=ae(_,t.prose);D.count!==0&&o(h,X.test(h)?"tests":"describes",it.test(h)?"repo rules / instructions":"documentation",D)}for(let h of n){if(!X.test(h)||r.has(`tests:${h}`)||!Ce.test(h))continue;let S=ae(e.get(h),t.prose);S.count>0&&o(h,"tests","mentions the concept",S)}let L=[...r.values()].sort((h,S)=>S.matches-h.matches||h.path.localeCompare(S.path)),O={implements:0,styles:0,tokens:0,uses:0,describes:0,tests:0};for(let h of L)O[h.role]++;let B=Zs(c);tn(e,n.filter(h=>ur.test(h)&&!X.test(h)),B,new Set(t.elements),!0,I,(h,S)=>Se(h,S,s)),tn(e,n.filter(h=>ur.test(h)&&!X.test(h)),B.flatMap(h=>h.modifiers??[]),new Set(t.elements));for(let[h,S]of C.sites)h.usage=cr(e,S,!("alike"in h));let K=il(e,n),Be=[];if(i.size>0){let h=new RegExp(t.elements.map(S=>`<${ie(S)}\\b`).join("|"),"g");for(let S of n){if(!Ce.test(S)||X.test(S)||a.has(S))continue;let _=e.get(S),D=(_.match(h)??[]).length;if(D===0)continue;let N=ae(_,new RegExp(h.source));Be.push({path:S,line:N.lines[0]?.line??1,count:D})}}let Er=n.filter(h=>(fr.test(h)||it.test(h))&&!X.test(h)).map(h=>({path:h,kind:Ua(h)}));B.sort((h,S)=>Number(S.base)-Number(h.base)||h.path.localeCompare(S.path)||h.line-S.line);let mn=Vs(e,Er,t,B),Mr=Ns([...f.entries()].map(([h,S])=>({sheet:h,sources:S.map(_=>e.get(_)??""),rules:pe(e.get(h)??"").map(_=>({selector:_.selector,declarations:re(_.ownBody)}))})));return{components:E.sort(),tokens:M,findings:L,variants:B,audit:xs({variants:B,tokens:M,tokenValues:K,hasComponent:i.size>0,nativeUses:Be,guidance:mn,noun:t.label.toLowerCase(),element:t.elements[0]??t.id}),guidance:mn,content:Mr,previewCss:al(K,u),counts:O}}import{execFileSync as cl}from"node:child_process";import{readdirSync as ul,readFileSync as fl,statSync as pl}from"node:fs";import lt from"node:path";function de(e,t){try{return cl("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],maxBuffer:64*1024*1024})}catch{return null}}function on(e,t=""){let s=de(e,["rev-parse","--show-toplevel"])?.trim()||e;return{repoDir:s,root:St(t),stateDir:lt.join(s,".gruum")}}function kr(e){let t=lt.join(e.repoDir,e.root),n=new Map,s=new TextDecoder("utf-8",{fatal:!1}),r=0,o=0,i=!1,a=(l,c)=>{if(i)return;let u;try{u=ul(l).sort()}catch{return}for(let f of u){let b=c?`${c}/${f}`:f,x=lt.join(l,f),d;try{d=pl(x)}catch{continue}if(d.isDirectory()){$t(b)&&a(x,b);continue}if(!d.isFile())continue;if(!Ct(b,d.size)){o++;continue}let y=fl(x);if(Zn(y)){o++;continue}if(r+y.length>4e7){i=!0;return}r+=y.length,n.set(b,s.decode(y))}};return a(t,""),{files:n,truncated:i,skipped:o}}function vr(e,t){let n=de(e.repoDir,["diff","--cached","--name-status","-z"]);if(n===null)return t;let s=Yn(n).map(({path:r,deleted:o})=>({path:r,content:o?null:de(e.repoDir,["show",`:${r}`])}));return{...t,files:qn(t.files,s,e.root)}}function $r(e){let t=de(e.repoDir,["remote","get-url","origin"])?.trim()??"",n=Qn(t)??lt.basename(e.repoDir),s=de(e.repoDir,["rev-parse","HEAD"])?.trim()||"working-tree";return{fullName:n,ref:s,rootPath:e.root,htmlUrl:n.includes("/")?`https://github.com/${n}`:""}}function Cr(e){let t=de(e.repoDir,["config","--get","core.hooksPath"])?.trim();return t||de(e.repoDir,["rev-parse","--git-path","hooks"])?.trim()||null}function ct(e,t={}){let n=mr[t.concept??"button"],s=kr(e);return t.staged&&(s=vr(e,s)),{concept:n.id,label:n.label,...wr(s.files,n),repo:$r(e),index:{files:s.files.size,truncated:s.truncated,skipped:s.skipped}}}function Ae(e,t,n={}){let s=ct(e,{concept:t.concept,...n});return{result:s,baseline:t,items:kn(s,t)}}import{mkdirSync as dl,readFileSync as gl,writeFileSync as ml}from"node:fs";import Ve from"node:path";function ut(e){try{return gl(e,"utf8")}catch{return null}}function an(e){let t=ut(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function ge(e,t){dl(Ve.dirname(e),{recursive:!0}),ml(e,t)}function ln(e,t){ge(e,`${JSON.stringify(t,null,2)}
|
|
48
|
+
`)}var cn=e=>Ve.join(e.stateDir,"baseline.json"),Sr=e=>Ve.join(e.stateDir,"drift.json"),hl=e=>Ve.join(e.stateDir,"config.json");function Re(e,t){return $n(an(t?Ve.resolve(t):cn(e)))}function ft(e){return An(an(Sr(e)),new Date().toISOString())}function un(e,t){ln(Sr(e),t)}function fn(e){let t=an(hl(e)),n=Array.isArray(t?.denyGit)?t.denyGit.filter(r=>r==="commit"||r==="push"):he.denyGit,s=typeof t?.maxFollowups=="number"&&t.maxFollowups>=0?Math.floor(t.maxFollowups):he.maxFollowups;return{...typeof t?.root=="string"?{root:t.root}:{},hooks:{...he,denyGit:n,maxFollowups:s}}}var gn="0.1.1",Ar=`gruum ${gn}: keep buttons on the Gruum spec
|
|
49
|
+
|
|
50
|
+
Usage:
|
|
51
|
+
gruum check [--staged] [--files <path>...] [--json] [--baseline <file>] [--root <dir>]
|
|
52
|
+
Scan the working tree and list drift against the spec. Exits 1 on
|
|
53
|
+
block drift. --staged checks what is staged for commit.
|
|
54
|
+
gruum spec [--baseline <file>]
|
|
55
|
+
Print the spec packet an agent reads before writing a button.
|
|
56
|
+
gruum baseline --write [--out <file>] [--root <dir>]
|
|
57
|
+
Draft a local spec from the working tree (version 0) into
|
|
58
|
+
.gruum/baseline.json. For development until specs are published
|
|
59
|
+
from Gruum.
|
|
60
|
+
gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
61
|
+
Write .cursor/hooks.json, .cursor/mcp.json, the rule pointer, and a
|
|
62
|
+
pre-commit line. --remove deletes exactly what init added.
|
|
63
|
+
gruum hook <after-file-edit|stop|before-shell>
|
|
64
|
+
Cursor hook entry points (read the event on stdin).
|
|
65
|
+
gruum mcp
|
|
66
|
+
Stdio MCP server with gruum_button_spec and gruum_check_buttons.
|
|
67
|
+
`,yl=new Set(["--baseline","--root","--out","--cli","--files"]);function wl(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 yl.has(i)&&e[s+1]!==void 0&&l.push(e[++s]);n.set(i,l)}return{positional:t,flags:n}}var me=(e,t)=>e.flags.has(t),le=(e,t)=>e.flags.get(t)?.[0];function _e(e,t=process.cwd()){let n=on(t),s=le(e,"--root")??fn(n).root??"";return on(t,s)}var dn="No spec found. Publish one from Gruum, or draft one locally with `gruum baseline --write`.";function _r(e,t){let n=Re(e,le(t,"--baseline"));return n||process.stderr.write(`gruum: ${dn}
|
|
68
|
+
`),n}function Fe(e,t,n){let s={...t,checkedAt:new Date().toISOString(),baselineVersion:n.baseline.version,items:n.items};return un(e,s),s}function kl(e){let t=_e(e),n=_r(t,e);if(!n)return 0;let s=Ae(t,n,{staged:me(e,"--staged")});me(e,"--staged")||Fe(t,ft(t),s);let r=(e.flags.get("--files")??[]).map(i=>P.relative(P.join(t.repoDir,t.root),P.resolve(i)).split(P.sep).join("/")),o=yt(s.items,r);return me(e,"--json")?process.stdout.write(`${JSON.stringify({baselineVersion:n.version,items:o},null,2)}
|
|
69
|
+
`):process.stdout.write(`${Cn(o,{baselineVersion:n.version,files:s.result.index.files,skipped:s.result.index.skipped})}
|
|
70
|
+
`),ze(o).length>0?1:0}function vl(e){let t=_e(e),n=_r(t,e);return n?(process.stdout.write(`${JSON.stringify(xt(n),null,2)}
|
|
71
|
+
`),0):1}function $l(e){if(!me(e,"--write"))return process.stderr.write(`gruum: pass --write to draft a local spec from the working tree.
|
|
72
|
+
`),2;let t=_e(e),n=ct(t),s=wn(n,{version:0}),r=le(e,"--out")?P.resolve(le(e,"--out")):cn(t);return ln(r,s),process.stdout.write(`Drafted a local spec (v0) from ${n.index.files} files: ${s.styles.length} styles, ${s.tokens.length} tokens, ${s.rules.length} rules, ${s.acceptedFindings.length} accepted findings.
|
|
73
|
+
Wrote ${P.relative(process.cwd(),r)||r}.
|
|
74
|
+
`),0}function Rr(e,t,n,s){if(!n.ok)return process.stderr.write(`gruum: ${n.error}
|
|
75
|
+
`),!1;if(!n.changed)return s.push(`unchanged ${t}`),!0;let r=P.join(e.repoDir,t);return n.text===""?(pn(r,{force:!0}),s.push(`removed ${t}`)):(ge(r,n.text),s.push(`wrote ${t}`)),!0}function Cl(e){if(e.positional[1]!=="cursor")return process.stderr.write(`gruum: usage: gruum init cursor [--remove] [--force] [--cli "<command>"]
|
|
76
|
+
`),2;let t=_e(e),n=le(e,"--cli")??Ie,s=me(e,"--remove"),r=k=>ut(P.join(t.repoDir,k)),o=[],i=s?jn(r(".cursor/hooks.json")):Ln(r(".cursor/hooks.json"),n),a=s?On(r(".cursor/mcp.json")):Dn(r(".cursor/mcp.json"),n);for(let k of[i,a])if(!k.ok)return process.stderr.write(`gruum: ${k.error}
|
|
77
|
+
`),1;Rr(t,".cursor/hooks.json",i,o),Rr(t,".cursor/mcp.json",a,o);let l=r(ce);if(s)l!==null&&Vn(l)&&(pn(P.join(t.repoDir,ce)),o.push(`removed ${ce}`));else if(l===null||me(e,"--force")){let k=Re(t,le(e,"--baseline")),p=Nn(k?null:Sl(t)),m=k?[...new Set(k.styles.map(g=>g.path))].sort():[];ge(P.join(t.repoDir,ce),Pn(m.length?m:p)),o.push(`wrote ${ce}`)}else o.push(`kept ${ce} (exists; --force replaces it)`);let c=s?Bn(r(".gitignore")):Fn(r(".gitignore"));c.changed&&(ge(P.join(t.repoDir,".gitignore"),c.text),o.push("wrote .gitignore"));let u=pt(P.join(t.repoDir,".husky")),f=["lefthook.yml","lefthook.yaml",".lefthook.yml"].some(k=>pt(P.join(t.repoDir,k))),b=Cr(t),x=u?".husky/pre-commit":b?`${b}/pre-commit`:null,d=x?P.resolve(t.repoDir,x):null,y=d?ut(d):null;if(s){if(d&&y!==null){let k=Gn(y);k.changed&&k.text===""?(pn(d,{force:!0}),o.push(`removed ${x}`)):k.changed&&(ge(d,k.text),o.push(`edited ${x}`))}}else{let k=zn({husky:u,lefthook:f,hookText:y,gitHooksDir:b},n);if(k.kind==="print")o.push(`pre-commit ${k.reason}:
|
|
78
|
+
${k.snippet}`);else if(k.changed&&d){if(ge(d,k.text),k.kind==="git")try{bl(d,493)}catch{}o.push(`wrote ${x}${k.kind==="git"?" (local only; not shared through git)":""}`)}else o.push(`unchanged ${x}`)}return process.stdout.write(`${o.join(`
|
|
79
|
+
`)}
|
|
80
|
+
`),s||process.stdout.write(`
|
|
81
|
+
Commit the .cursor/ files so teammates get the same guardrails. Tokens never go in the repository.
|
|
82
|
+
`),0}function Sl(e){try{return ct(e)}catch{return null}}async function Al(){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 Rl(e){let t=e.workspace_roots,n=Array.isArray(t)&&typeof t[0]=="string"&&pt(t[0])?t[0]:typeof e.cwd=="string"&&pt(e.cwd)?e.cwd:process.cwd();return _e({positional:[],flags:new Map},n)}async function _l(e){let t=e.positional[1],n=await Al(),s=t==="before-shell"?{permission:"allow"}:{};try{let r=Rl(n),o=fn(r),i=Re(r),a=ft(r),l=s;if(t==="after-file-edit"){let c=typeof n.file_path=="string"?n.file_path:"",u=At(P.relative(r.repoDir,P.resolve(r.repoDir,c)).split(P.sep).join("/"),r.root);i&&u!==null&&Xn(u)&&Fe(r,a,Ae(r,i))}else if(t==="stop"){if(i){let c=Fe(r,a,Ae(r,i)),u=En(c,n,o.hooks);un(r,u.ledger),l=u.output}}else if(t==="before-shell"){let c=typeof n.command=="string"?n.command:"",u=kt(c).some(f=>o.hooks.denyGit.includes(f));if(i&&u){let f=Fe(r,a,Ae(r,i));l=Mn(f,n,o.hooks)}}else return process.stderr.write(`gruum: unknown hook ${String(t)}
|
|
83
|
+
`),2;process.stdout.write(`${JSON.stringify(l)}
|
|
84
|
+
`)}catch(r){process.stderr.write(`gruum hook ${t}: ${r instanceof Error?r.message:String(r)}
|
|
85
|
+
`),process.stdout.write(`${JSON.stringify(s)}
|
|
86
|
+
`)}return 0}async function El(e){let t=_e(e),n=Kn({spec:async()=>{let o=Re(t,le(e,"--baseline"));return o?{text:JSON.stringify(xt(o),null,2)}:{text:dn,isError:!0}},check:async o=>{let i=Re(t,le(e,"--baseline"));if(!i)return{text:dn,isError:!0};let a=Ae(t,i);Fe(t,ft(t),a);let l=yt(a.items,o);return{text:JSON.stringify({baselineVersion:i.version,blocking:vn(l).length,items:l},null,2)}}}),s={name:"gruum",version:gn},r=xl({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"}})}
|
|
87
|
+
`);continue}let a=await Jn(i,n,s);a&&process.stdout.write(`${JSON.stringify(a)}
|
|
88
|
+
`)}return 0}async function Ml(e){let t=wl(e),n=t.positional[0];if(me(t,"--version"))return process.stdout.write(`${gn}
|
|
89
|
+
`),0;switch(n){case"check":return kl(t);case"spec":return vl(t);case"baseline":return $l(t);case"init":return Cl(t);case"hook":return _l(t);case"mcp":return El(t);case void 0:case"help":return process.stdout.write(Ar),0;default:return process.stderr.write(`gruum: unknown command ${n}
|
|
90
|
+
|
|
91
|
+
${Ar}`),2}}Ml(process.argv.slice(2)).then(e=>{process.exitCode=e},e=>{process.stderr.write(`gruum: ${e instanceof Error?e.message:String(e)}
|
|
92
|
+
`),process.exitCode=1});
|
package/package.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gruum/cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Keep buttons on the Gruum spec: a local drift check, Cursor hooks, and an MCP server.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"gruum": "gruum.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"gruum.mjs"
|
|
11
|
+
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=20"
|
|
14
|
+
},
|
|
15
|
+
"license": "UNLICENSED"
|
|
16
|
+
}
|