@frontfriend/sdk 1.3.0 → 1.4.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.
@@ -1,6 +1,6 @@
1
- var $=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var L=$((He,I)=>{var h=require("fs");function le(a){try{let e=h.readFileSync(a,"utf8");return JSON.parse(e)}catch(e){if(e.code==="ENOENT")return null;throw e}}function ce(a){try{return h.readFileSync(a,"utf8").replace(/^\uFEFF/,"")}catch(e){if(e.code==="ENOENT")return null;throw e}}function fe(a,e,r=2){let t=JSON.stringify(e,null,r);h.writeFileSync(a,t,"utf8")}function me(a,e){h.writeFileSync(a,e,"utf8")}function de(a,e){if(e==null||typeof e=="object"&&Object.keys(e).length===0||Array.isArray(e)&&e.length===0){let t=`module.exports = ${Array.isArray(e)?"[]":"{}"};`;h.writeFileSync(a,t,"utf8")}else{let r=`module.exports = ${JSON.stringify(e,null,2)};`;h.writeFileSync(a,r,"utf8")}}function ue(a){return h.existsSync(a)}function pe(a){h.mkdirSync(a,{recursive:!0})}function he(a){h.rmSync(a,{recursive:!0,force:!0})}function ve(a){h.rmSync(a,{force:!0})}function ge(a,e){h.mkdirSync(require("path").dirname(a),{recursive:!0,mode:448});let r=`${a}.${process.pid}.${Date.now()}.tmp`;try{h.writeFileSync(r,`${JSON.stringify(e,null,2)}
2
- `,{mode:384}),h.renameSync(r,a);try{h.chmodSync(a,384)}catch{}}finally{h.rmSync(r,{force:!0})}}async function be(a,e,r){h.mkdirSync(require("path").dirname(a),{recursive:!0,mode:448});let t=`${a}.lock`,o=Date.now()+2e4,n;for(;n===void 0;)try{n=h.openSync(t,"wx",384),h.writeFileSync(n,String(process.pid))}catch(d){if(d.code!=="EEXIST")throw d;try{let l=Number(h.readFileSync(t,"utf8"));if(Number.isInteger(l)&&l>0)try{process.kill(l,0)}catch(c){if(c.code==="ESRCH"){h.unlinkSync(t);continue}}}catch(l){if(l.code==="ENOENT")continue}if(Date.now()>=o)throw r();await new Promise(l=>setTimeout(l,50))}try{return await e()}finally{h.closeSync(n),h.unlinkSync(t)}}I.exports={writePrivateJsonFileAtomic:ge,withPrivateFileLock:be,readJsonFileSafe:le,readFileSafe:ce,writeJsonFile:fe,writeTextFile:me,writeModuleExportsFile:de,fileExists:ue,ensureDirectoryExists:pe,removeDirectory:he,removeFile:ve}});var M=$((Je,W)=>{var F=class extends Error{constructor(e,r,t){super(e),this.name="APIError",this.statusCode=r,this.url=t,this.code=`API_${r}`}},O=class extends Error{constructor(e,r){super(e),this.name="CacheError",this.operation=r,this.code=`CACHE_${r.toUpperCase()}`}},z=class extends Error{constructor(e,r){super(e),this.name="ConfigError",this.field=r,this.code=r?`CONFIG_${String(r).toUpperCase()}`:"CONFIG_ERROR"}},E=class extends Error{constructor(e,r){super(e),this.name="ProcessingError",this.token=r,this.code="PROCESSING_ERROR"}};W.exports={APIError:F,CacheError:O,ConfigError:z,ProcessingError:E}});var J=$((Ge,H)=>{var P=["open","closed","checked","unchecked","indeterminate","active"],q={open:['[data-expanded]:not([data-expanded="false"])','[data-popup-open]:not([data-popup-open="false"])','[data-panel-open]:not([data-panel-open="false"])']},U="on",K=["/* Dark mode follows the root class the theme picker toggles. */","@custom-variant dark {"," &:is(.dark, .dark *) {"," @slot;"," }","}",""],j=[...K,"/* Cross-primitive state variants (Radix `data-state=x`, Base UI `data-x`). */",...P.flatMap(a=>{let e=[`[data-state="${a}"]`,`[data-${a}]:not([data-${a}="false"])`,...q[a]||[]];return[`@custom-variant data-${a} {`,...e.map((r,t)=>` &:where(${r})${t===e.length-1?" {":","}`)," @slot;"," }","}",""]}),`@custom-variant data-${U} {`,' &:where([data-state="on"]),',' &:where([aria-pressed="true"]) {'," @slot;"," }","}","","@custom-variant data-selected {",' &:where([data-selected="true"]) {'," @slot;"," }","}","","@custom-variant data-disabled {",' &:where([data-disabled="true"]),',' &:where([data-disabled]:not([data-disabled="false"])) {'," @slot;"," }","}","",...["horizontal","vertical"].flatMap(a=>[`@custom-variant data-${a} {`,` &:where([data-orientation="${a}"]) {`," @slot;"," }","}",""])],ye=j.filter(a=>a.startsWith("@custom-variant ")).map(a=>a.slice(16).replace(" {",""));function ke(){return j.join(`
3
- `)}H.exports={CROSS_PRIMITIVE_STATES:P,DARK_VARIANT_CSS:K,EXTRA_STATE_MATCHERS:q,PRESSED_STATE:U,STATE_VARIANT_CSS:j,STATE_VARIANT_NAMES:ye,stateVariantCss:ke}});var B=$((Be,G)=>{var $e=`
1
+ var $=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var W=$((He,L)=>{var h=require("fs");function ce(a){try{let e=h.readFileSync(a,"utf8");return JSON.parse(e)}catch(e){if(e.code==="ENOENT")return null;throw e}}function fe(a){try{return h.readFileSync(a,"utf8").replace(/^\uFEFF/,"")}catch(e){if(e.code==="ENOENT")return null;throw e}}function me(a,e,r=2){let t=JSON.stringify(e,null,r);h.writeFileSync(a,t,"utf8")}function de(a,e){h.writeFileSync(a,e,"utf8")}function ue(a,e){if(e==null||typeof e=="object"&&Object.keys(e).length===0||Array.isArray(e)&&e.length===0){let t=`module.exports = ${Array.isArray(e)?"[]":"{}"};`;h.writeFileSync(a,t,"utf8")}else{let r=`module.exports = ${JSON.stringify(e,null,2)};`;h.writeFileSync(a,r,"utf8")}}function pe(a){return h.existsSync(a)}function he(a){h.mkdirSync(a,{recursive:!0})}function ve(a){h.rmSync(a,{recursive:!0,force:!0})}function ge(a){h.rmSync(a,{force:!0})}function be(a,e){h.mkdirSync(require("path").dirname(a),{recursive:!0,mode:448});let r=`${a}.${process.pid}.${Date.now()}.tmp`;try{h.writeFileSync(r,`${JSON.stringify(e,null,2)}
2
+ `,{mode:384}),h.renameSync(r,a);try{h.chmodSync(a,384)}catch{}}finally{h.rmSync(r,{force:!0})}}async function ye(a,e,r){h.mkdirSync(require("path").dirname(a),{recursive:!0,mode:448});let t=`${a}.lock`,o=Date.now()+2e4,n;for(;n===void 0;)try{n=h.openSync(t,"wx",384),h.writeFileSync(n,String(process.pid))}catch(d){if(d.code!=="EEXIST")throw d;try{let c=Number(h.readFileSync(t,"utf8"));if(Number.isInteger(c)&&c>0)try{process.kill(c,0)}catch(l){if(l.code==="ESRCH"){h.unlinkSync(t);continue}}}catch(c){if(c.code==="ENOENT")continue}if(Date.now()>=o)throw r();await new Promise(c=>setTimeout(c,50))}try{return await e()}finally{h.closeSync(n),h.unlinkSync(t)}}L.exports={writePrivateJsonFileAtomic:be,withPrivateFileLock:ye,readJsonFileSafe:ce,readFileSafe:fe,writeJsonFile:me,writeTextFile:de,writeModuleExportsFile:ue,fileExists:pe,ensureDirectoryExists:he,removeDirectory:ve,removeFile:ge}});var P=$((Je,M)=>{var F=class extends Error{constructor(e,r,t){super(e),this.name="APIError",this.statusCode=r,this.url=t,this.code=`API_${r}`}},O=class extends Error{constructor(e,r){super(e),this.name="CacheError",this.operation=r,this.code=`CACHE_${r.toUpperCase()}`}},z=class extends Error{constructor(e,r){super(e),this.name="ConfigError",this.field=r,this.code=r?`CONFIG_${String(r).toUpperCase()}`:"CONFIG_ERROR"}},E=class extends Error{constructor(e,r){super(e),this.name="ProcessingError",this.token=r,this.code="PROCESSING_ERROR"}};M.exports={APIError:F,CacheError:O,ConfigError:z,ProcessingError:E}});var G=$((Ge,J)=>{var q=["open","closed","checked","unchecked","indeterminate","active"],U={open:['[data-expanded]:not([data-expanded="false"])','[data-popup-open]:not([data-popup-open="false"])','[data-panel-open]:not([data-panel-open="false"])']},K="on",H=["/* Dark mode follows the root class the theme picker toggles. */","@custom-variant dark {"," &:is(.dark, .dark *) {"," @slot;"," }","}",""],j=[...H,"/* Cross-primitive state variants (Radix `data-state=x`, Base UI `data-x`). */",...q.flatMap(a=>{let e=[`[data-state="${a}"]`,`[data-${a}]:not([data-${a}="false"])`,...U[a]||[]];return[`@custom-variant data-${a} {`,...e.map((r,t)=>` &:where(${r})${t===e.length-1?" {":","}`)," @slot;"," }","}",""]}),`@custom-variant data-${K} {`,' &:where([data-state="on"]),',' &:where([aria-pressed="true"]) {'," @slot;"," }","}","","@custom-variant data-selected {",' &:where([data-selected="true"]) {'," @slot;"," }","}","","@custom-variant data-disabled {",' &:where([data-disabled="true"]),',' &:where([data-disabled]:not([data-disabled="false"])) {'," @slot;"," }","}","",...["horizontal","vertical"].flatMap(a=>[`@custom-variant data-${a} {`,` &:where([data-orientation="${a}"]) {`," @slot;"," }","}",""])],ke=j.filter(a=>a.startsWith("@custom-variant ")).map(a=>a.slice(16).replace(" {",""));function $e(){return j.join(`
3
+ `)}J.exports={CROSS_PRIMITIVE_STATES:q,DARK_VARIANT_CSS:H,EXTRA_STATE_MATCHERS:U,PRESSED_STATE:K,STATE_VARIANT_CSS:j,STATE_VARIANT_NAMES:ke,stateVariantCss:$e}});var X=$((Be,B)=>{var we=`
4
4
  @property --scroll-fade-t {
5
5
  syntax: "<length-percentage>";
6
6
  inherits: false;
@@ -549,6 +549,6 @@ var $=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var L=$((He,I)=>{v
549
549
  -webkit-text-fill-color: currentColor;
550
550
  }
551
551
  }
552
- `;function xe(){return $e}G.exports={motionUtilityCss:xe}});var Z=$((Xe,Y)=>{function X(a,e=[]){return!a||typeof a!="object"?[]:"$value"in a?[[e,a.$value]]:Object.entries(a).flatMap(([r,t])=>X(t,[...e,r]))}function we(a){return a.join("-").replace(/\./g,"_")}function b(a,e){return X(a).map(([r,t])=>[`${e}${we(r)}`,String(t)])}function Se(a){if(!a||typeof a!="object")return{theme:[],root:[]};let e=b(a.spacing,"--spacing-"),r=a.spacing?.["1"]?.$value,t=a.font||{},o=a.motion||{},n=a.layout||{},d=o.easing?.standard?.$value,l=o.duration?.normal?.$value;return{theme:[...r?[["--spacing",String(r)]]:[],...e,...b(t.size,"--text-"),...b(t.weight,"--font-weight-"),...b(t.lineHeight,"--leading-"),...b(t.letterSpacing,"--tracking-"),...b(a.blur,"--blur-"),...b(o.easing,"--ease-"),...d?[["--default-transition-timing-function",String(d)]]:[],...l?[["--default-transition-duration",String(l)]]:[],...b(n.screen,"--breakpoint-")],root:[...b(a.opacity,"--opacity-"),...b(a.border?.width,"--border-width-"),...b(a.border?.style,"--border-style-"),...b(o.duration,"--duration-"),...b(n.maxWidth,"--max-width-"),...b(n.container,"--layout-container-"),...b(n.gutter,"--gutter-")]}}Y.exports={foundationTheme:Se}});var D=$((Ye,Q)=>{var Ce="classes.txt",_e="classes.css";Q.exports={CLASSES_SOURCE_FILE:Ce,CSS_CLASSES_SOURCE_FILE:_e}});var ae=$((Ze,te)=>{var Fe=new Set(["after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]),Oe=new Set(["active","focus","focus-visible","focus-within","hover"]),ze=new Set(["sm","md","lg","xl","2xl","any-pointer-coarse","any-pointer-fine","any-pointer-none","contrast-less","contrast-more","forced-colors","inverted-colors","landscape","motion-reduce","motion-safe","noscript","pointer-coarse","pointer-fine","pointer-none","portrait","print","starting"]),Ee=/^(?:min-|max-|@|supports-|in-(?!range$))/,je=/^\[&(?::(?:active|focus|focus-visible|focus-within|hover))+\]$/;function Ve(a){let e=[],r=0,t=0;for(let o=0;o<a.length;o+=1){let n=a[o];n==="["||n==="("?r+=1:(n==="]"||n===")")&&r>0?r-=1:n===":"&&r===0&&(e.push(a.slice(t,o)),t=o+1)}return e.push(a.slice(t)),{variants:e.slice(0,-1),utility:e[e.length-1]}}function ee(a){return a.replace(/\/[\w-]+$/,"")}function S(a){let e=ee(a);return Fe.has(e)||e.startsWith("[")&&e.includes("::")}function C(a){let e=ee(a);return Oe.has(e)||ze.has(e)?!0:e.startsWith("[")?e.startsWith("[@")||je.test(e):e.startsWith("not-")?C(e.slice(4)):Ee.test(e)}function re(a){if(typeof a!="string"||!a.includes(":"))return null;let e=a.startsWith("!")?"!":"",{variants:r,utility:t}=Ve(a.slice(e.length)),o=null,n=[];for(let i of r)o!==null&&!C(i)&&n.push(i),o===null&&S(i)&&(o=i);if(n.length===0)return null;let d=r.reduce((i,u,p)=>S(u)?p:i,-1),l=r.slice(0,d).filter(i=>!S(i)),c=r.slice(d+1),m=`${e}${[...l,...c.filter(i=>!C(i)),r[d],...c.filter(C),t].join(":")}`,f=r.filter(S),s=f.length>1?`${f.join(" and ")} are pseudo-elements, and a selector can hold only one`:`${n.join(", ")} cannot follow the pseudo-element ${o}; only hover, focus, focus-visible, focus-within, active, in-* and media, container or supports variants can`;return{className:a,pseudoElement:o,chained:n,suggestion:m,reason:s}}function Ae(a){return re(a)===null}te.exports={isCompilableClass:Ae,uncompilableClass:re}});var{fileExists:Qe,readJsonFileSafe:De}=L(),Ne=require("color"),Re=require("https"),er=require("fs"),rr=require("path"),{ProcessingError:Te}=M(),{STATE_VARIANT_CSS:Ie}=J(),{motionUtilityCss:Le}=B(),{foundationTheme:We}=Z(),{CLASSES_SOURCE_FILE:Me}=D(),{isCompilableClass:oe}=ae(),Pe={"--background":"oklch(1 0 0)","--foreground":"oklch(0.145 0 0)","--card":"oklch(1 0 0)","--card-foreground":"oklch(0.145 0 0)","--popover":"oklch(1 0 0)","--popover-foreground":"oklch(0.145 0 0)","--primary":"oklch(0.205 0 0)","--primary-foreground":"oklch(0.985 0 0)","--secondary":"oklch(0.97 0 0)","--secondary-foreground":"oklch(0.205 0 0)","--muted":"oklch(0.97 0 0)","--muted-foreground":"oklch(0.556 0 0)","--accent":"oklch(0.97 0 0)","--accent-foreground":"oklch(0.205 0 0)","--destructive":"oklch(0.577 0.245 27.325)","--destructive-foreground":"oklch(0.985 0 0)","--border":"oklch(0.922 0 0)","--input":"oklch(0.922 0 0)","--ring":"oklch(0.708 0 0)","--sidebar":"oklch(0.985 0 0)","--sidebar-foreground":"oklch(0.145 0 0)","--sidebar-primary":"oklch(0.205 0 0)","--sidebar-primary-foreground":"oklch(0.985 0 0)","--sidebar-accent":"oklch(0.97 0 0)","--sidebar-accent-foreground":"oklch(0.205 0 0)","--sidebar-border":"oklch(0.922 0 0)","--sidebar-ring":"oklch(0.708 0 0)","--chart-1":"oklch(0.646 0.222 41.116)","--chart-2":"oklch(0.6 0.118 184.704)","--chart-3":"oklch(0.398 0.07 227.392)","--chart-4":"oklch(0.828 0.189 84.429)","--chart-5":"oklch(0.769 0.188 70.08)"},qe={"--background":["--bg-default","--bg-neutral-low","--layer-base"],"--foreground":["--text-neutral-strong","--text-default"],"--card":["--layer-1","--bg-neutral-low","--bg-default"],"--card-foreground":["--text-neutral-strong","--text-default"],"--popover":["--layer-1","--bg-neutral-low","--bg-default"],"--popover-foreground":["--text-neutral-strong","--text-default"],"--primary":["--bg-brand-mid","--bg-brand-strong"],"--primary-foreground":["--text-onbrand-strong","--text-inverse-low"],"--secondary":["--bg-interactive-subtle","--bg-neutral-low"],"--secondary-foreground":["--text-oninteractive-subtle","--text-neutral-strong"],"--muted":["--bg-neutral-low","--bg-disabled"],"--muted-foreground":["--text-neutral-subtle","--text-disabled"],"--accent":["--bg-interactive-low","--bg-brand-low","--bg-neutral-low"],"--accent-foreground":["--text-oninteractive-low","--text-brand-strong","--text-neutral-strong"],"--destructive":["--bg-negative-mid","--bg-negative-subtle"],"--destructive-foreground":["--text-onnegative-subtle","--text-inverse-low"],"--border":["--border-neutral-subtle","--border-default"],"--input":["--border-neutral-subtle","--border-default"],"--ring":["--border-brand-mid","--bg-brand-mid"],"--sidebar":["--layer-1","--bg-neutral-low","--bg-default"],"--sidebar-foreground":["--text-neutral-strong","--text-default"],"--sidebar-primary":["--bg-brand-mid","--bg-brand-strong"],"--sidebar-primary-foreground":["--text-onbrand-strong","--text-inverse-low"],"--sidebar-accent":["--bg-interactive-low","--bg-neutral-low"],"--sidebar-accent-foreground":["--text-oninteractive-low","--text-neutral-strong"],"--sidebar-border":["--border-neutral-subtle","--border-default"],"--sidebar-ring":["--border-brand-mid","--bg-brand-mid"],"--chart-1":["--bg-brand-mid","--bg-brand-strong"],"--chart-2":["--bg-interactive-mid","--bg-interactive-low"],"--chart-3":["--bg-positive-mid","--bg-positive-subtle"],"--chart-4":["--bg-warning-mid","--bg-warning-subtle"],"--chart-5":["--bg-negative-mid","--bg-negative-subtle"]};function Ue(a,e,r){for(let t of e||[])if(a[t])return a[t];return r}function se(a={}){return Object.fromEntries(Object.entries(a?.radius||{}).filter(([,e])=>typeof e?.$value=="string").map(([e,r])=>[e.toLowerCase(),r.$value.replace(/\{([^}]+)\}/g,(t,o)=>`var(--${o.replace(/\./g,"-").toLowerCase()})`)]))}function ie(a={},e={}){let r={};for(let[o,n]of Object.entries(qe))r[o]=Ue(a,n,Pe[o]);let t=e.borderRadius||{};return r["--radius"]=t.default||t.md||t.lg||"0.625rem",r["--radius-sm"]=t.sm||"calc(var(--radius) - 4px)",r["--radius-md"]=t.md||"calc(var(--radius) - 2px)",r["--radius-lg"]=t.lg||"var(--radius)",r["--radius-xl"]=t.xl||"calc(var(--radius) + 4px)",r}var V=class{constructor(e={}){this.config=e}hexToOklch(e){if(typeof e=="string"&&/^oklch\(.*\)$/i.test(e.trim()))return e.trim();try{let r=Ne(e),t=r.rgb(),o=t.red()/255,n=t.green()/255,d=t.blue()/255,l=w=>w<=.04045?w/12.92:Math.pow((w+.055)/1.055,2.4),c=l(o),m=l(n),f=l(d),s=c*.4124564+m*.3575761+f*.1804375,i=c*.2126729+m*.7151522+f*.072175,u=c*.0193339+m*.119192+f*.9503041,p=Math.cbrt(.8189330101*s+.3618667424*i-.1288597137*u),v=Math.cbrt(.0329845436*s+.9293118715*i+.0361456387*u),g=Math.cbrt(.0482003018*s+.2643662691*i+.633851707*u),y=.2104542553*p+.793617785*v-.0040720468*g,x=1.9779984951*p-2.428592205*v+.4505937099*g,k=.0259040371*p+.7827717662*v-.808675766*g,ne=Math.sqrt(x*x+k*k),_=Math.atan2(k,x)*180/Math.PI;_<0&&(_+=360);let A=Math.round(y*1e3)/1e3,N=Math.round(ne*1e3)/1e3,R=Math.round(_*100)/100,T=r.alpha();if(T<1){let w=Math.round(T*100)/100;return`oklch(${A} ${N} ${R} / ${w})`}return`oklch(${A} ${N} ${R})`}catch(r){throw new Te(`Failed to convert color ${e}: ${r.message}`,e)}}processColors(e){let r={},t={},o={backgroundColor:{},textColor:{},borderColor:{}};if(!e||typeof e!="object")return console.log(" \u26A0\uFE0F No valid color data to process"),{variables:r,colorMap:t,utilities:o};let n=(d,l="")=>{for(let[c,m]of Object.entries(d))if(m&&typeof m=="object")if(m.$value){let f=l?`${l}-${c}`:c,s=`--color-${f}`,i=this.hexToOklch(m.$value);r[s]=i,t[f]=s;let u=`var(${s})`;o.backgroundColor[f]=u,o.textColor[f]=u,o.borderColor[f]=u}else{let f=l?`${l}-${c}`:c;n(m,f)}};return e&&(e.colors?n(e.colors):n(e)),{variables:r,colorMap:t,utilities:o}}processSemanticTokens(e,r){let t={},o={backgroundColor:{},textColor:{},borderColor:{}},n=c=>c.replace(/ /g,"").replace(/\./g,"-").toLowerCase(),d=c=>{if(typeof c!="string")return null;let m=c.match(/^\{(.+)\}$/);if(!m)return null;let f=m[1].split(".");return f[0]==="colors"&&f.length>1?f[1]==="colors"&&f.length>2?f.slice(2).join("-"):f.slice(1).join("-"):f.join("-")},l=(c,m)=>{if(e[c])for(let[f,s]of Object.entries(e[c])){if(f==="disabled"){let i=d(s.$value);if(i){let u=r[i];if(u){let p=`--${c}-disabled`;t[p]=`var(${u})`,o[m].disabled=`var(${p})`}}continue}for(let[i,u]of Object.entries(s))for(let[p,v]of Object.entries(u)){let g=n(`${f}-${i}-${p}`);g.endsWith("-default")&&(g=g.slice(0,-8));let y=`--${c}-${g}`,x=d(v.$value);if(x){let k=r[x];k&&(t[y]=`var(${k})`,o[m][g]=`var(${y})`)}else if(v.$value){let k=this.hexToOklch(v.$value);t[y]=k,o[m][g]=`var(${y})`}}}};if(l("bg","backgroundColor"),l("text","textColor"),l("border","borderColor"),e.layer)for(let[c,m]of Object.entries(e.layer)){let f=`--layer-${c}`,s=d(m.$value);if(s){let i=s.replace(/\./g,"-").toLowerCase();if(i.endsWith("-default")&&(i=i.slice(0,-8)),i.startsWith("bg-")||i.startsWith("text-")||i.startsWith("border-")){let u=`--${i}`;t[f]=`var(${u})`,o.backgroundColor[`layer-${c}`]=`var(${f})`}else{let u=r[i];u&&(t[f]=`var(${u})`,o.backgroundColor[`layer-${c}`]=`var(${f})`)}}else if(m.$value){let i=this.hexToOklch(m.$value);t[f]=i,o.backgroundColor[`layer-${c}`]=`var(${f})`}}if(e.overlay)for(let[c,m]of Object.entries(e.overlay)){let f=`--overlay-${c}`;m.$value&&(t[f]=m.$value,o.backgroundColor[`overlay-${c}`]=`var(${f})`)}if(e.icon){o.fill||(o.fill={});for(let[c,m]of Object.entries(e.icon)){if(c==="disabled"){let f=d(m.$value);if(f){let s=r[f];if(s){let i="--icon-disabled";t[i]=`var(${s})`,o.textColor["icon-disabled"]=`var(${i})`,o.fill["icon-disabled"]=`var(${i})`}}continue}for(let[f,s]of Object.entries(m))for(let[i,u]of Object.entries(s)){let p=n(`icon-${c}-${f}-${i}`);p.endsWith("-default")&&(p=p.slice(0,-8));let v=`--${p}`,g=d(u.$value);if(g){let y=r[g];y&&(t[v]=`var(${y})`,o.textColor[p]=`var(${v})`,o.fill[p]=`var(${v})`)}}}}return{semanticVariables:t,tokens:o}}async fetchFontCss(e,{timeoutMs:r=1e4}={}){if(!Number.isFinite(r)||r<=0)throw new Error("Font CSS timeout must be positive");return new Promise((t,o)=>{let n,d=setTimeout(()=>{let c=new Error("Font CSS request timed out");o(c),n?.destroy(c)},r);d.unref?.();let l=c=>{clearTimeout(d),o(c)};try{n=Re.get(e,c=>{let m="";if(c.on("error",l),c.on("aborted",()=>l(new Error("Font CSS response was interrupted"))),c.statusCode!==200){l(new Error(`Failed to fetch font CSS: ${c.statusCode}`)),c.destroy?.();return}c.on("data",f=>{m+=f}),c.on("end",()=>{clearTimeout(d),t(m)})}),n.on("error",l)}catch(c){l(c)}})}parseFontFaces(e){let r=/@font-face\s*{([^}]+)}/g,t=[],o;for(;(o=r.exec(e))!==null;){let n=o[1].trim().split(";").filter(Boolean),d={};n.forEach(l=>{let c=l.indexOf(":");if(c!==-1){let m=l.slice(0,c).trim(),f=l.slice(c+1).trim();m==="font-family"?d[m]=f.replace(/["']/g,""):d[m]=f}}),d.src&&(d.src=d.src.replace(/url\(["']?/,"url('").replace(/["']?\)/,"')")),t.push(d)}return t}async processFonts(e){let r=[];if(!e||typeof e!="object")return r;let t=Object.keys(e).filter(o=>o.startsWith("font"));for(let o of t){let n=e[o];if(typeof n=="string"&&n.startsWith("http"))try{let d=await this.fetchFontCss(n),l=this.parseFontFaces(d);l.length>0&&r.push(...l)}catch(d){console.warn(`Failed to process font ${o}:`,d.message)}}return r}processFontFamilies(e){let r={};if(!e||!e.font||!e.font.family)return r;let t=e.font.family;for(let[o,n]of Object.entries(t))if(n&&n.$value){let d=o.toLowerCase(),l=n.$value;typeof l=="string"&&l.startsWith("{")&&l.endsWith("}")&&(l=l.slice(1,-1));let c=m=>m.split(" ").map(f=>f.charAt(0).toUpperCase()+f.slice(1).toLowerCase()).join(" ");if(l.includes(","))r[d]=l;else{let m=c(l);m.includes(" ")&&!m.startsWith('"')&&!m.startsWith("'")?r[d]=`"${m}", sans-serif`:r[d]=`${m}, sans-serif`}}return r}processAnimations(e){let r={},t={};if(!e||typeof e!="object")return{keyframes:r,animations:t};for(let[o,n]of Object.entries(e))if(n&&typeof n=="object"){let d=`${o}`;if(n.keyframes){let c={};for(let[m,f]of Object.entries(n.keyframes))f&&typeof f=="object"&&(c[m]=f);r[d]=c}let l=[d,n.duration||"1s",n.easing||"ease",n.delay||"0s",n.iterations||"1",n.direction||"normal",n.fillMode||"none"].join(" ");t[o]=l}return{keyframes:r,animations:t}}generateSafelistClasses(e){let r=[];if(e.backgroundColor)for(let t of Object.keys(e.backgroundColor))r.push(`bg-${t}`);if(e.textColor)for(let t of Object.keys(e.textColor))r.push(`text-${t}`);if(e.borderColor)for(let t of Object.keys(e.borderColor))r.push(`border-${t}`);if(e.fill)for(let t of Object.keys(e.fill))r.push(`fill-${t}`),t.startsWith("icon-")&&r.push(`text-${t}`);if(e.fontFamily)for(let t of Object.keys(e.fontFamily))r.push(`font-${t}`);if(e.animations)for(let t of Object.keys(e.animations))r.push(`animate-${t}`);return r}extractClassesFromComponentsConfig(e){let r=new Set,t=n=>{typeof n=="string"&&n.split(/\s+/).filter(l=>l.length>0).forEach(l=>{r.add(l)})},o=n=>{if(!(!n||typeof n!="object"))for(let d in n){if(d==="icons")continue;let l=n[d];typeof l=="string"?t(l):typeof l=="object"&&o(l)}};return e&&o(e),Array.from(r).filter(oe).sort()}generateClassesContent(e=[]){e=e.filter(oe);let r=["/*"," * Frontfriend Component Classes"," *"," * This file contains all classes used in Frontfriend component configs."," * Tailwind v4 scans this file via @source to generate utilities."," * DO NOT EDIT - Auto-generated by frontfriend CLI"," */","","/*"," * Classes:"],t=" * ";for(let o of[...new Set(e)].sort())t.length+o.length+1>100?(r.push(t),t=` * ${o}`):t+=(t===" * "?"":" ")+o;return t!==" * "&&r.push(t),r.push(" */"),r.join(`
553
- `)}processCustomCss(e){return!e||typeof e!="string"?{}:{raw:e}}async process(e){try{let r={variables:{},semanticVariables:{},semanticDarkVariables:{},utilities:{},fontFaces:[],keyframes:{},animations:{},safelist:[],metadata:{},custom:e.customCss?this.processCustomCss(e.customCss):{}},t=e.colors;if(t){let o=this.processColors(t);r.variables={...r.variables,...o.variables},r.utilities={...r.utilities,...o.utilities},r.colorMap=o.colorMap||{}}else r.colorMap={};if(e.semantic&&r.colorMap){let o=this.processSemanticTokens(e.semantic,r.colorMap);r.semanticVariables=o.semanticVariables,o.tokens&&(r.tokens=o.tokens,r.utilities=o.tokens)}if(e.semanticDark&&r.colorMap){let o=this.processSemanticTokens(e.semanticDark,r.colorMap);r.semanticDarkVariables=o.semanticVariables}if(e.fonts&&(r.fontFaces=await this.processFonts(e.fonts)),e.globalTokens){r.fontFamilies=this.processFontFamilies(e.globalTokens);let o=se(e.globalTokens);Object.keys(o).length&&(r.utilities.borderRadius=o),r.fontFamilies&&(r.utilities.fontFamily||(r.utilities.fontFamily={}),Object.assign(r.utilities.fontFamily,r.fontFamilies))}if(e.animations){let o=this.processAnimations(e.animations);r.keyframes=o.keyframes,r.animations=o.animations}return r.safelist=this.generateSafelistClasses(r.tokens||r.utilities),r.metadata={timestamp:new Date().toISOString(),version:e.version||"2.0.0",ffId:e.ffId},r}catch(r){throw console.error("Error processing tokens:",r),r}}buildSemanticColorNamespaces(e){let r=[["","border","--border-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]],t=[["","bg","--bg-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]],n=[{namespace:"--background-color",roles:t},{namespace:"--text-color",roles:[["","text","--text-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]]},{namespace:"--border-color",roles:r},{namespace:"--ring-color",roles:r},{namespace:"--outline-color",roles:r},{namespace:"--stroke",roles:r},{namespace:"--ring-offset-color",roles:t},{namespace:"--fill",roles:t}],d=[];for(let{namespace:l,roles:c}of n)for(let[m,f,s]of c)for(let i of e[f]||[])d.push(` ${l}-${m}${i}: var(${s}${i});`);return d.length===0?[]:["","@theme {",...d,"}"]}generateThemeCSSFromProcessedTokens(e){return this.generateThemeCSS({variables:e.variables||{},semanticVariables:e.semanticVariables||{},semanticDarkVariables:e.semanticDarkVariables||{},fontFamilies:e.tokens?.fontFamily||{},utilities:{borderRadius:se(e.globalTokens)},foundation:We(e.globalTokens),shadows:e.shadows,fontFaces:e.fonts||[],keyframes:e.keyframes||{},animations:e.animations||{},custom:e.custom||{}})}generateThemeCSS(e){let r=['@import "tw-animate-css";',"",...Ie,Le(),"@theme {"];for(let[s,i]of Object.entries(e.variables||{}))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(e.fontFamilies||{})){let u=s.startsWith("--")?s:`--font-${s}`,p=Array.isArray(i)?i.join(", "):i;r.push(` ${u}: ${p};`)}e.fontFamilies?.primary&&!e.fontFamilies.sans&&r.push(" --font-sans: var(--font-primary);");for(let[s,i]of Object.entries(e.utilities?.spacing||{})){let u=s.startsWith("--")?s:`--spacing-${s}`;r.push(` ${u}: ${i};`)}for(let[s,i]of Object.entries(e.utilities?.borderRadius||{})){let u=s.startsWith("--")?s:`--radius-${s}`;r.push(` ${u}: ${i};`)}for(let[s,i]of e.foundation?.theme||[])r.push(` ${s}: ${i};`);r.push("}","");let t=e.shadows?.light||{},o=e.shadows?.dark||{},n=[...new Set([...Object.keys(t),...Object.keys(o)])];if(n.length){r.push("@theme inline {");for(let s of n)r.push(` --shadow-${s}: var(--elevation-${s});`);r.push("}","")}let d=e.foundation?.root||[];if(d.length){r.push(":root {");for(let[s,i]of d)r.push(` ${s}: ${i};`);r.push("}","")}let l=e.semanticVariables||{},c=ie(l,e.utilities||{});r.push(":root:not(.dark) {");for(let[s,i]of Object.entries(c))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(l))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(t))r.push(` --elevation-${s}: ${i};`);if(r.push("}"),e.semanticDarkVariables&&Object.keys(e.semanticDarkVariables).length>0||Object.keys(o).length>0){let s={...l,...e.semanticDarkVariables},i=ie(s,e.utilities||{});r.push("",":root.dark {");for(let[u,p]of Object.entries(i))r.push(` ${u}: ${p};`);for(let[u,p]of Object.entries(e.semanticDarkVariables||{}))r.push(` ${u}: ${p};`);for(let[u,p]of Object.entries(o))r.push(` --elevation-${u}: ${p};`);r.push("}")}let m={bg:[],text:[],border:[],icon:[],layer:[],overlay:[]};for(let s of Object.keys(e.semanticVariables||{}))s.startsWith("--bg-")&&m.bg.push(s.slice(5)),s.startsWith("--text-")&&m.text.push(s.slice(7)),s.startsWith("--border-")&&m.border.push(s.slice(9)),s.startsWith("--icon-")&&m.icon.push(s.slice(7)),s.startsWith("--layer-")&&m.layer.push(s.slice(8)),s.startsWith("--overlay-")&&m.overlay.push(s.slice(10));let f=(s,i)=>{r.push("",`@utility ${s} {`);for(let u of i)r.push(` ${u}`);r.push("}")};for(let s of m.icon)f(`icon-${s}`,[`color: var(--icon-${s});`]);r.push(...this.buildSemanticColorNamespaces(m));for(let s of e.fontFaces||[]){r.push("","@font-face {");for(let[i,u]of Object.entries(s)){let p=i.replace(/([A-Z])/g,"-$1").toLowerCase(),v=Array.isArray(u)?u.join(", "):u;r.push(` ${p}: ${v};`)}r.push("}")}for(let[s,i]of Object.entries(e.keyframes||{})){r.push("",`@keyframes ${s} {`);for(let[u,p]of Object.entries(i)){r.push(` ${u} {`);for(let[v,g]of Object.entries(p)){let y=v.replace(/([A-Z])/g,"-$1").toLowerCase();r.push(` ${y}: ${g};`)}r.push(" }")}r.push("}")}for(let[s,i]of Object.entries(e.animations||{}))f(`animate-${s}`,[`animation: ${i};`]);return e.custom?.raw&&r.push("","/* Custom CSS */",e.custom.raw),r.push("","/* Component classes for Tailwind scanning */",`@source './${Me}';`),r.join(`
554
- `)}};module.exports=V;
552
+ `;function xe(){return we}B.exports={motionUtilityCss:xe}});var Q=$((Xe,Z)=>{function V(a,e=[]){return!a||typeof a!="object"?[]:"$value"in a?[[e,a.$value]]:Object.entries(a).flatMap(([r,t])=>V(t,[...e,r]))}function Y(a){return a.join("-").replace(/\./g,"_")}function b(a,e){return V(a).map(([r,t])=>[`${e}${Y(r)}`,String(t)])}function Se(a){if(!a||typeof a!="object")return{theme:[],root:[]};let e=b(a.spacing,"--spacing-"),r=a.spacing?.["1"]?.$value,t=a.font||{},o=t.weight?.regular?.$value,n=a.motion||{},d=a.layout||{},c=n.easing?.standard?.$value,l=n.duration?.normal?.$value;return{theme:[...r?[["--spacing",String(r)]]:[],...e,...b(t.size,"--text-"),...V(t.sizeLineHeight).map(([m,f])=>[`--text-${Y(m)}--line-height`,String(f)]),...b(t.weight,"--font-weight-"),...o!==void 0&&t.weight?.normal?.$value===void 0?[["--font-weight-normal",String(o)]]:[],...b(t.lineHeight,"--leading-"),...b(t.letterSpacing,"--tracking-"),...b(a.blur,"--blur-"),...b(n.easing,"--ease-"),...c?[["--default-transition-timing-function",String(c)]]:[],...l?[["--default-transition-duration",String(l)]]:[],...b(d.screen,"--breakpoint-")],root:[...b(a.opacity,"--opacity-"),...b(a.border?.width,"--border-width-"),...b(a.border?.style,"--border-style-"),...b(n.duration,"--duration-"),...b(d.maxWidth,"--max-width-"),...b(d.container,"--layout-container-"),...b(d.gutter,"--gutter-")]}}Z.exports={foundationTheme:Se}});var ee=$((Ye,D)=>{var Ce="classes.txt",_e="classes.css";D.exports={CLASSES_SOURCE_FILE:Ce,CSS_CLASSES_SOURCE_FILE:_e}});var oe=$((Ze,ae)=>{var Fe=new Set(["after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]),Oe=new Set(["active","focus","focus-visible","focus-within","hover"]),ze=new Set(["sm","md","lg","xl","2xl","any-pointer-coarse","any-pointer-fine","any-pointer-none","contrast-less","contrast-more","forced-colors","inverted-colors","landscape","motion-reduce","motion-safe","noscript","pointer-coarse","pointer-fine","pointer-none","portrait","print","starting"]),Ee=/^(?:min-|max-|@|supports-|in-(?!range$))/,je=/^\[&(?::(?:active|focus|focus-visible|focus-within|hover))+\]$/;function Ve(a){let e=[],r=0,t=0;for(let o=0;o<a.length;o+=1){let n=a[o];n==="["||n==="("?r+=1:(n==="]"||n===")")&&r>0?r-=1:n===":"&&r===0&&(e.push(a.slice(t,o)),t=o+1)}return e.push(a.slice(t)),{variants:e.slice(0,-1),utility:e[e.length-1]}}function re(a){return a.replace(/\/[\w-]+$/,"")}function S(a){let e=re(a);return Fe.has(e)||e.startsWith("[")&&e.includes("::")}function C(a){let e=re(a);return Oe.has(e)||ze.has(e)?!0:e.startsWith("[")?e.startsWith("[@")||je.test(e):e.startsWith("not-")?C(e.slice(4)):Ee.test(e)}function te(a){if(typeof a!="string"||!a.includes(":"))return null;let e=a.startsWith("!")?"!":"",{variants:r,utility:t}=Ve(a.slice(e.length)),o=null,n=[];for(let i of r)o!==null&&!C(i)&&n.push(i),o===null&&S(i)&&(o=i);if(n.length===0)return null;let d=r.reduce((i,u,p)=>S(u)?p:i,-1),c=r.slice(0,d).filter(i=>!S(i)),l=r.slice(d+1),m=`${e}${[...c,...l.filter(i=>!C(i)),r[d],...l.filter(C),t].join(":")}`,f=r.filter(S),s=f.length>1?`${f.join(" and ")} are pseudo-elements, and a selector can hold only one`:`${n.join(", ")} cannot follow the pseudo-element ${o}; only hover, focus, focus-visible, focus-within, active, in-* and media, container or supports variants can`;return{className:a,pseudoElement:o,chained:n,suggestion:m,reason:s}}function Ae(a){return te(a)===null}ae.exports={isCompilableClass:Ae,uncompilableClass:te}});var{fileExists:Qe,readJsonFileSafe:De}=W(),Ne=require("color"),Re=require("https"),er=require("fs"),rr=require("path"),{ProcessingError:Te}=P(),{STATE_VARIANT_CSS:Ie}=G(),{motionUtilityCss:Le}=X(),{foundationTheme:We}=Q(),{CLASSES_SOURCE_FILE:Me}=ee(),{isCompilableClass:se}=oe(),Pe={"--background":"oklch(1 0 0)","--foreground":"oklch(0.145 0 0)","--card":"oklch(1 0 0)","--card-foreground":"oklch(0.145 0 0)","--popover":"oklch(1 0 0)","--popover-foreground":"oklch(0.145 0 0)","--primary":"oklch(0.205 0 0)","--primary-foreground":"oklch(0.985 0 0)","--secondary":"oklch(0.97 0 0)","--secondary-foreground":"oklch(0.205 0 0)","--muted":"oklch(0.97 0 0)","--muted-foreground":"oklch(0.556 0 0)","--accent":"oklch(0.97 0 0)","--accent-foreground":"oklch(0.205 0 0)","--destructive":"oklch(0.577 0.245 27.325)","--destructive-foreground":"oklch(0.985 0 0)","--border":"oklch(0.922 0 0)","--input":"oklch(0.922 0 0)","--ring":"oklch(0.708 0 0)","--sidebar":"oklch(0.985 0 0)","--sidebar-foreground":"oklch(0.145 0 0)","--sidebar-primary":"oklch(0.205 0 0)","--sidebar-primary-foreground":"oklch(0.985 0 0)","--sidebar-accent":"oklch(0.97 0 0)","--sidebar-accent-foreground":"oklch(0.205 0 0)","--sidebar-border":"oklch(0.922 0 0)","--sidebar-ring":"oklch(0.708 0 0)","--chart-1":"oklch(0.646 0.222 41.116)","--chart-2":"oklch(0.6 0.118 184.704)","--chart-3":"oklch(0.398 0.07 227.392)","--chart-4":"oklch(0.828 0.189 84.429)","--chart-5":"oklch(0.769 0.188 70.08)"},qe={"--background":["--bg-default","--bg-neutral-low","--layer-base"],"--foreground":["--text-neutral-strong","--text-default"],"--card":["--layer-1","--bg-neutral-low","--bg-default"],"--card-foreground":["--text-neutral-strong","--text-default"],"--popover":["--layer-1","--bg-neutral-low","--bg-default"],"--popover-foreground":["--text-neutral-strong","--text-default"],"--primary":["--bg-brand-mid","--bg-brand-strong"],"--primary-foreground":["--text-onbrand-strong","--text-inverse-low"],"--secondary":["--bg-interactive-subtle","--bg-neutral-low"],"--secondary-foreground":["--text-oninteractive-subtle","--text-neutral-strong"],"--muted":["--bg-neutral-low","--bg-disabled"],"--muted-foreground":["--text-neutral-subtle","--text-disabled"],"--accent":["--bg-interactive-low","--bg-brand-low","--bg-neutral-low"],"--accent-foreground":["--text-oninteractive-low","--text-brand-strong","--text-neutral-strong"],"--destructive":["--bg-negative-mid","--bg-negative-subtle"],"--destructive-foreground":["--text-onnegative-subtle","--text-inverse-low"],"--border":["--border-neutral-subtle","--border-default"],"--input":["--border-neutral-subtle","--border-default"],"--ring":["--border-brand-mid","--bg-brand-mid"],"--sidebar":["--layer-1","--bg-neutral-low","--bg-default"],"--sidebar-foreground":["--text-neutral-strong","--text-default"],"--sidebar-primary":["--bg-brand-mid","--bg-brand-strong"],"--sidebar-primary-foreground":["--text-onbrand-strong","--text-inverse-low"],"--sidebar-accent":["--bg-interactive-low","--bg-neutral-low"],"--sidebar-accent-foreground":["--text-oninteractive-low","--text-neutral-strong"],"--sidebar-border":["--border-neutral-subtle","--border-default"],"--sidebar-ring":["--border-brand-mid","--bg-brand-mid"],"--chart-1":["--bg-brand-mid","--bg-brand-strong"],"--chart-2":["--bg-interactive-mid","--bg-interactive-low"],"--chart-3":["--bg-positive-mid","--bg-positive-subtle"],"--chart-4":["--bg-warning-mid","--bg-warning-subtle"],"--chart-5":["--bg-negative-mid","--bg-negative-subtle"]};function Ue(a,e,r){for(let t of e||[])if(a[t])return a[t];return r}function ie(a={}){return Object.fromEntries(Object.entries(a?.radius||{}).filter(([,e])=>typeof e?.$value=="string").map(([e,r])=>[e.toLowerCase(),r.$value.replace(/\{([^}]+)\}/g,(t,o)=>`var(--${o.replace(/\./g,"-").toLowerCase()})`)]))}function ne(a={},e={}){let r={};for(let[o,n]of Object.entries(qe))r[o]=Ue(a,n,Pe[o]);let t=e.borderRadius||{};return r["--radius"]=t.default||t.md||t.lg||"0.625rem",r["--radius-sm"]=t.sm||"calc(var(--radius) - 4px)",r["--radius-md"]=t.md||"calc(var(--radius) - 2px)",r["--radius-lg"]=t.lg||"var(--radius)",r["--radius-xl"]=t.xl||"calc(var(--radius) + 4px)",r}var A=class{constructor(e={}){this.config=e}hexToOklch(e){if(typeof e=="string"&&/^oklch\(.*\)$/i.test(e.trim()))return e.trim();try{let r=Ne(e),t=r.rgb(),o=t.red()/255,n=t.green()/255,d=t.blue()/255,c=x=>x<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4),l=c(o),m=c(n),f=c(d),s=l*.4124564+m*.3575761+f*.1804375,i=l*.2126729+m*.7151522+f*.072175,u=l*.0193339+m*.119192+f*.9503041,p=Math.cbrt(.8189330101*s+.3618667424*i-.1288597137*u),v=Math.cbrt(.0329845436*s+.9293118715*i+.0361456387*u),g=Math.cbrt(.0482003018*s+.2643662691*i+.633851707*u),y=.2104542553*p+.793617785*v-.0040720468*g,w=1.9779984951*p-2.428592205*v+.4505937099*g,k=.0259040371*p+.7827717662*v-.808675766*g,le=Math.sqrt(w*w+k*k),_=Math.atan2(k,w)*180/Math.PI;_<0&&(_+=360);let N=Math.round(y*1e3)/1e3,R=Math.round(le*1e3)/1e3,T=Math.round(_*100)/100,I=r.alpha();if(I<1){let x=Math.round(I*100)/100;return`oklch(${N} ${R} ${T} / ${x})`}return`oklch(${N} ${R} ${T})`}catch(r){throw new Te(`Failed to convert color ${e}: ${r.message}`,e)}}processColors(e){let r={},t={},o={backgroundColor:{},textColor:{},borderColor:{}};if(!e||typeof e!="object")return console.log(" \u26A0\uFE0F No valid color data to process"),{variables:r,colorMap:t,utilities:o};let n=(d,c="")=>{for(let[l,m]of Object.entries(d))if(m&&typeof m=="object")if(m.$value){let f=c?`${c}-${l}`:l,s=`--color-${f}`,i=this.hexToOklch(m.$value);r[s]=i,t[f]=s;let u=`var(${s})`;o.backgroundColor[f]=u,o.textColor[f]=u,o.borderColor[f]=u}else{let f=c?`${c}-${l}`:l;n(m,f)}};return e&&(e.colors?n(e.colors):n(e)),{variables:r,colorMap:t,utilities:o}}processSemanticTokens(e,r){let t={},o={backgroundColor:{},textColor:{},borderColor:{}},n=l=>l.replace(/ /g,"").replace(/\./g,"-").toLowerCase(),d=l=>{if(typeof l!="string")return null;let m=l.match(/^\{(.+)\}$/);if(!m)return null;let f=m[1].split(".");return f[0]==="colors"&&f.length>1?f[1]==="colors"&&f.length>2?f.slice(2).join("-"):f.slice(1).join("-"):f.join("-")},c=(l,m)=>{if(e[l])for(let[f,s]of Object.entries(e[l])){if(f==="disabled"){let i=d(s.$value);if(i){let u=r[i];if(u){let p=`--${l}-disabled`;t[p]=`var(${u})`,o[m].disabled=`var(${p})`}}continue}for(let[i,u]of Object.entries(s))for(let[p,v]of Object.entries(u)){let g=n(`${f}-${i}-${p}`);g.endsWith("-default")&&(g=g.slice(0,-8));let y=`--${l}-${g}`,w=d(v.$value);if(w){let k=r[w];k&&(t[y]=`var(${k})`,o[m][g]=`var(${y})`)}else if(v.$value){let k=this.hexToOklch(v.$value);t[y]=k,o[m][g]=`var(${y})`}}}};if(c("bg","backgroundColor"),c("text","textColor"),c("border","borderColor"),e.layer)for(let[l,m]of Object.entries(e.layer)){let f=`--layer-${l}`,s=d(m.$value);if(s){let i=s.replace(/\./g,"-").toLowerCase();if(i.endsWith("-default")&&(i=i.slice(0,-8)),i.startsWith("bg-")||i.startsWith("text-")||i.startsWith("border-")){let u=`--${i}`;t[f]=`var(${u})`,o.backgroundColor[`layer-${l}`]=`var(${f})`}else{let u=r[i];u&&(t[f]=`var(${u})`,o.backgroundColor[`layer-${l}`]=`var(${f})`)}}else if(m.$value){let i=this.hexToOklch(m.$value);t[f]=i,o.backgroundColor[`layer-${l}`]=`var(${f})`}}if(e.overlay)for(let[l,m]of Object.entries(e.overlay)){let f=`--overlay-${l}`;m.$value&&(t[f]=m.$value,o.backgroundColor[`overlay-${l}`]=`var(${f})`)}if(e.icon){o.fill||(o.fill={});for(let[l,m]of Object.entries(e.icon)){if(l==="disabled"){let f=d(m.$value);if(f){let s=r[f];if(s){let i="--icon-disabled";t[i]=`var(${s})`,o.textColor["icon-disabled"]=`var(${i})`,o.fill["icon-disabled"]=`var(${i})`}}continue}for(let[f,s]of Object.entries(m))for(let[i,u]of Object.entries(s)){let p=n(`icon-${l}-${f}-${i}`);p.endsWith("-default")&&(p=p.slice(0,-8));let v=`--${p}`,g=d(u.$value);if(g){let y=r[g];y&&(t[v]=`var(${y})`,o.textColor[p]=`var(${v})`,o.fill[p]=`var(${v})`)}}}}return{semanticVariables:t,tokens:o}}async fetchFontCss(e,{timeoutMs:r=1e4}={}){if(!Number.isFinite(r)||r<=0)throw new Error("Font CSS timeout must be positive");return new Promise((t,o)=>{let n,d=setTimeout(()=>{let l=new Error("Font CSS request timed out");o(l),n?.destroy(l)},r);d.unref?.();let c=l=>{clearTimeout(d),o(l)};try{n=Re.get(e,l=>{let m="";if(l.on("error",c),l.on("aborted",()=>c(new Error("Font CSS response was interrupted"))),l.statusCode!==200){c(new Error(`Failed to fetch font CSS: ${l.statusCode}`)),l.destroy?.();return}l.on("data",f=>{m+=f}),l.on("end",()=>{clearTimeout(d),t(m)})}),n.on("error",c)}catch(l){c(l)}})}parseFontFaces(e){let r=/@font-face\s*{([^}]+)}/g,t=[],o;for(;(o=r.exec(e))!==null;){let n=o[1].trim().split(";").filter(Boolean),d={};n.forEach(c=>{let l=c.indexOf(":");if(l!==-1){let m=c.slice(0,l).trim(),f=c.slice(l+1).trim();m==="font-family"?d[m]=f.replace(/["']/g,""):d[m]=f}}),d.src&&(d.src=d.src.replace(/url\(["']?/,"url('").replace(/["']?\)/,"')")),t.push(d)}return t}async processFonts(e){let r=[];if(!e||typeof e!="object")return r;let t=Object.keys(e).filter(o=>o.startsWith("font"));for(let o of t){let n=e[o];if(typeof n=="string"&&n.startsWith("http"))try{let d=await this.fetchFontCss(n),c=this.parseFontFaces(d);c.length>0&&r.push(...c)}catch(d){console.warn(`Failed to process font ${o}:`,d.message)}}return r}processFontFamilies(e){let r={};if(!e||!e.font||!e.font.family)return r;let t=e.font.family;for(let[o,n]of Object.entries(t))if(n&&n.$value){let d=o.toLowerCase(),c=n.$value;typeof c=="string"&&c.startsWith("{")&&c.endsWith("}")&&(c=c.slice(1,-1));let l=m=>m.split(" ").map(f=>f.charAt(0).toUpperCase()+f.slice(1).toLowerCase()).join(" ");if(c.includes(","))r[d]=c;else{let m=l(c);m.includes(" ")&&!m.startsWith('"')&&!m.startsWith("'")?r[d]=`"${m}", sans-serif`:r[d]=`${m}, sans-serif`}}return r}processAnimations(e){let r={},t={};if(!e||typeof e!="object")return{keyframes:r,animations:t};for(let[o,n]of Object.entries(e))if(n&&typeof n=="object"){let d=`${o}`;if(n.keyframes){let l={};for(let[m,f]of Object.entries(n.keyframes))f&&typeof f=="object"&&(l[m]=f);r[d]=l}let c=[d,n.duration||"1s",n.easing||"ease",n.delay||"0s",n.iterations||"1",n.direction||"normal",n.fillMode||"none"].join(" ");t[o]=c}return{keyframes:r,animations:t}}generateSafelistClasses(e){let r=[];if(e.backgroundColor)for(let t of Object.keys(e.backgroundColor))r.push(`bg-${t}`);if(e.textColor)for(let t of Object.keys(e.textColor))r.push(`text-${t}`);if(e.borderColor)for(let t of Object.keys(e.borderColor))r.push(`border-${t}`);if(e.fill)for(let t of Object.keys(e.fill))r.push(`fill-${t}`),t.startsWith("icon-")&&r.push(`text-${t}`);if(e.fontFamily)for(let t of Object.keys(e.fontFamily))r.push(`font-${t}`);if(e.animations)for(let t of Object.keys(e.animations))r.push(`animate-${t}`);return r}extractClassesFromComponentsConfig(e){let r=new Set,t=n=>{typeof n=="string"&&n.split(/\s+/).filter(c=>c.length>0).forEach(c=>{r.add(c)})},o=n=>{if(!(!n||typeof n!="object"))for(let d in n){if(d==="icons")continue;let c=n[d];typeof c=="string"?t(c):typeof c=="object"&&o(c)}};return e&&o(e),Array.from(r).filter(se).sort()}generateClassesContent(e=[]){e=e.filter(se);let r=["/*"," * Frontfriend Component Classes"," *"," * This file contains all classes used in Frontfriend component configs."," * Tailwind v4 scans this file via @source to generate utilities."," * DO NOT EDIT - Auto-generated by frontfriend CLI"," */","","/*"," * Classes:"],t=" * ";for(let o of[...new Set(e)].sort())t.length+o.length+1>100?(r.push(t),t=` * ${o}`):t+=(t===" * "?"":" ")+o;return t!==" * "&&r.push(t),r.push(" */"),r.join(`
553
+ `)}processCustomCss(e){return!e||typeof e!="string"?{}:{raw:e}}async process(e){try{let r={variables:{},semanticVariables:{},semanticDarkVariables:{},utilities:{},fontFaces:[],keyframes:{},animations:{},safelist:[],metadata:{},custom:e.customCss?this.processCustomCss(e.customCss):{}},t=e.colors;if(t){let o=this.processColors(t);r.variables={...r.variables,...o.variables},r.utilities={...r.utilities,...o.utilities},r.colorMap=o.colorMap||{}}else r.colorMap={};if(e.semantic&&r.colorMap){let o=this.processSemanticTokens(e.semantic,r.colorMap);r.semanticVariables=o.semanticVariables,o.tokens&&(r.tokens=o.tokens,r.utilities=o.tokens)}if(e.semanticDark&&r.colorMap){let o=this.processSemanticTokens(e.semanticDark,r.colorMap);r.semanticDarkVariables=o.semanticVariables}if(e.fonts&&(r.fontFaces=await this.processFonts(e.fonts)),e.globalTokens){r.fontFamilies=this.processFontFamilies(e.globalTokens);let o=ie(e.globalTokens);Object.keys(o).length&&(r.utilities.borderRadius=o),r.fontFamilies&&(r.utilities.fontFamily||(r.utilities.fontFamily={}),Object.assign(r.utilities.fontFamily,r.fontFamilies))}if(e.animations){let o=this.processAnimations(e.animations);r.keyframes=o.keyframes,r.animations=o.animations}return r.safelist=this.generateSafelistClasses(r.tokens||r.utilities),r.metadata={timestamp:new Date().toISOString(),version:e.version||"2.0.0",ffId:e.ffId},r}catch(r){throw console.error("Error processing tokens:",r),r}}buildSemanticColorNamespaces(e){let r=[["","border","--border-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]],t=[["","bg","--bg-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]],n=[{namespace:"--background-color",roles:t},{namespace:"--text-color",roles:[["","text","--text-"],["layer-","layer","--layer-"],["overlay-","overlay","--overlay-"],["icon-","icon","--icon-"]]},{namespace:"--border-color",roles:r},{namespace:"--ring-color",roles:r},{namespace:"--outline-color",roles:r},{namespace:"--stroke",roles:r},{namespace:"--ring-offset-color",roles:t},{namespace:"--fill",roles:t}],d=[];for(let{namespace:c,roles:l}of n)for(let[m,f,s]of l)for(let i of e[f]||[])d.push(` ${c}-${m}${i}: var(${s}${i});`);return d.length===0?[]:["","@theme {",...d,"}"]}generateThemeCSSFromProcessedTokens(e){return this.generateThemeCSS({variables:e.variables||{},semanticVariables:e.semanticVariables||{},semanticDarkVariables:e.semanticDarkVariables||{},fontFamilies:e.tokens?.fontFamily||{},utilities:{borderRadius:ie(e.globalTokens)},foundation:We(e.globalTokens),shadows:e.shadows,fontFaces:e.fonts||[],keyframes:e.keyframes||{},animations:e.animations||{},custom:e.custom||{}})}generateThemeCSS(e){let r=['@import "tw-animate-css";',"",...Ie,Le(),"@theme {"];for(let[s,i]of Object.entries(e.variables||{}))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(e.fontFamilies||{})){let u=s.startsWith("--")?s:`--font-${s}`,p=Array.isArray(i)?i.join(", "):i;r.push(` ${u}: ${p};`)}e.fontFamilies?.primary&&!e.fontFamilies.sans&&r.push(" --font-sans: var(--font-primary);");for(let[s,i]of Object.entries(e.utilities?.spacing||{})){let u=s.startsWith("--")?s:`--spacing-${s}`;r.push(` ${u}: ${i};`)}for(let[s,i]of Object.entries(e.utilities?.borderRadius||{})){let u=s.startsWith("--")?s:`--radius-${s}`;r.push(` ${u}: ${i};`)}for(let[s,i]of e.foundation?.theme||[])r.push(` ${s}: ${i};`);r.push("}","");let t=e.shadows?.light||{},o=e.shadows?.dark||{},n=[...new Set([...Object.keys(t),...Object.keys(o)])];if(n.length){r.push("@theme inline {");for(let s of n)r.push(` --shadow-${s}: var(--elevation-${s});`);r.push("}","")}let d=e.foundation?.root||[];if(d.length){r.push(":root {");for(let[s,i]of d)r.push(` ${s}: ${i};`);r.push("}","")}let c=e.semanticVariables||{},l=ne(c,e.utilities||{});r.push(":root:not(.dark) {");for(let[s,i]of Object.entries(l))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(c))r.push(` ${s}: ${i};`);for(let[s,i]of Object.entries(t))r.push(` --elevation-${s}: ${i};`);if(r.push("}"),e.semanticDarkVariables&&Object.keys(e.semanticDarkVariables).length>0||Object.keys(o).length>0){let s={...c,...e.semanticDarkVariables},i=ne(s,e.utilities||{});r.push("",":root.dark {");for(let[u,p]of Object.entries(i))r.push(` ${u}: ${p};`);for(let[u,p]of Object.entries(e.semanticDarkVariables||{}))r.push(` ${u}: ${p};`);for(let[u,p]of Object.entries(o))r.push(` --elevation-${u}: ${p};`);r.push("}")}let m={bg:[],text:[],border:[],icon:[],layer:[],overlay:[]};for(let s of Object.keys(e.semanticVariables||{}))s.startsWith("--bg-")&&m.bg.push(s.slice(5)),s.startsWith("--text-")&&m.text.push(s.slice(7)),s.startsWith("--border-")&&m.border.push(s.slice(9)),s.startsWith("--icon-")&&m.icon.push(s.slice(7)),s.startsWith("--layer-")&&m.layer.push(s.slice(8)),s.startsWith("--overlay-")&&m.overlay.push(s.slice(10));let f=(s,i)=>{r.push("",`@utility ${s} {`);for(let u of i)r.push(` ${u}`);r.push("}")};for(let s of m.icon)f(`icon-${s}`,[`color: var(--icon-${s});`]);r.push(...this.buildSemanticColorNamespaces(m));for(let s of e.fontFaces||[]){r.push("","@font-face {");for(let[i,u]of Object.entries(s)){let p=i.replace(/([A-Z])/g,"-$1").toLowerCase(),v=Array.isArray(u)?u.join(", "):u;r.push(` ${p}: ${v};`)}r.push("}")}for(let[s,i]of Object.entries(e.keyframes||{})){r.push("",`@keyframes ${s} {`);for(let[u,p]of Object.entries(i)){r.push(` ${u} {`);for(let[v,g]of Object.entries(p)){let y=v.replace(/([A-Z])/g,"-$1").toLowerCase();r.push(` ${y}: ${g};`)}r.push(" }")}r.push("}")}for(let[s,i]of Object.entries(e.animations||{}))f(`animate-${s}`,[`animation: ${i};`]);return e.custom?.raw&&r.push("","/* Custom CSS */",e.custom.raw),r.push("","/* Component classes for Tailwind scanning */",`@source './${Me}';`),r.join(`
554
+ `)}};module.exports=A;