{"version":3,"sources":["../src/twScales.generated.ts","../src/cn.ts","../src/variants.ts","../src/rounded.ts","../src/controlSize.ts","../src/motionPhysics.generated.ts","../src/locale/translate.ts","../src/locale/zh-CN.json","../src/locale/zh-CN.ts","../src/random.ts","../src/decodeIfEncoded.ts","../src/avatarFallbackImage.ts","../src/avatarFallback.ts","../src/icons-data.ts","../src/icons.ts"],"names":["extendTailwindMerge","clsx"],"mappings":";;;;;;;;AAKO,IAAM,aAAA,GAAgB;AAAA,EAC3B,QAAQ,CAAC,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,YAAY,QAAQ,CAAA;AAAA,EAC7D,MAAA,EAAQ,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,IAAA,EAAM,CAAC,gBAAA,EAAkB,QAAA,EAAU,WAAW,cAAc,CAAA;AAAA,EAC5D,OAAA,EAAS,CAAC,QAAA,EAAU,cAAA,EAAgB,iBAAiB,UAAA,EAAY,aAAA,EAAe,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAAA,EACxG,GAAG,CAAC,WAAA,EAAa,aAAA,EAAe,WAAA,EAAa,eAAe,YAAY,CAAA;AAAA,EACxE,QAAA,EAAU,CAAC,UAAA,EAAY,UAAA,EAAY,YAAY,UAAU;AAC3D,CAAA;;;ACSA,IAAM,UAAUA,iCAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA;AAAA,MAChC,MAAA,EAAQ,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA;AAAA,MAChC,IAAA,EAAM,CAAC,GAAG,aAAA,CAAc,IAAI,CAAA;AAAA,MAC5B,OAAA,EAAS,CAAC,GAAG,aAAA,CAAc,OAAO;AAAA,KACpC;AAAA;AAAA;AAAA,IAGA,WAAA,EAAa;AAAA,MACX,CAAA,EAAG,CAAC,EAAE,CAAA,EAAG,CAAC,GAAG,aAAA,CAAc,CAAC,CAAA,EAAG,CAAA;AAAA,MAC/B,QAAA,EAAU,CAAC,EAAE,QAAA,EAAU,CAAC,GAAG,aAAA,CAAc,QAAQ,CAAA,EAAG;AAAA;AACtD;AAEJ,CAAC,CAAA;AAKM,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiC,OAAA,CAAQC,SAAA,CAAK,MAAM,CAAC;;;AC5B3E,IAAM,KAAA,GAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU9D,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,8DAAA;AAAA,IACT,OAAA,EAAS,8DAAA;AAAA,IACT,SAAA,EAAW,kEAAA;AAAA,IACX,OAAA,EAAS,8DAAA;AAAA,IACT,OAAA,EAAS,8DAAA;AAAA,IACT,MAAA,EAAQ,4DAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,sCAAA;AAAA,IACT,OAAA,EAAS,mDAAA;AAAA,IACT,SAAA,EAAW,uDAAA;AAAA,IACX,OAAA,EAAS,mDAAA;AAAA,IACT,OAAA,EAAS,mDAAA;AAAA,IACT,MAAA,EAAQ,iDAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,8DAAA;AAAA,IACT,OAAA,EAAS,2EAAA;AAAA,IACT,SAAA,EAAW,+EAAA;AAAA,IACX,OAAA,EAAS,2EAAA;AAAA,IACT,OAAA,EAAS,2EAAA;AAAA,IACT,MAAA,EAAQ,yEAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,0DAAA;AAAA,IACT,OAAA,EAAS,0DAAA;AAAA,IACT,SAAA,EAAW,8DAAA;AAAA,IACX,OAAA,EAAS,4EAAA;AAAA,IACT,OAAA,EAAS,4EAAA;AAAA,IACT,MAAA,EAAQ,6EAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,0FAAA;AAAA,IACT,OAAA,EAAS,0FAAA;AAAA,IACT,SAAA,EAAW,gGAAA;AAAA,IACX,OAAA,EAAS,0FAAA;AAAA,IACT,OAAA,EAAS,0FAAA;AAAA,IACT,MAAA,EAAQ,uFAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV,CAAA;AAEO,IAAM,oBAAoB,CAC/B,OAAA,EACA,UACW,KAAA,CAAM,OAAO,EAAE,KAAK;AAK1B,IAAM,YAAA,GAA2C;AAAA,EACtD,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,SAAA,EAAW,cAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM;AACR;AAeO,IAAM,iBAAA,GAAgD;AAAA,EAC3D,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,SAAA,EAAW,cAAA;AAAA,EACX,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM;AACR;AAIO,IAAM,iBAAA,GAAgD;AAAA,EAC3D,OAAA,EAAS,yBAAA;AAAA,EACT,OAAA,EAAS,yBAAA;AAAA,EACT,SAAA,EAAW,2BAAA;AAAA,EACX,OAAA,EAAS,yBAAA;AAAA,EACT,OAAA,EAAS,yBAAA;AAAA,EACT,MAAA,EAAQ,wBAAA;AAAA,EACR,IAAA,EAAM;AACR;AAGO,IAAM,eAAA,GAA8C;AAAA,EACzD,OAAA,EAAS,oCAAA;AAAA,EACT,OAAA,EAAS,oCAAA;AAAA,EACT,SAAA,EAAW,wCAAA;AAAA,EACX,OAAA,EAAS,oCAAA;AAAA,EACT,OAAA,EAAS,oCAAA;AAAA,EACT,MAAA,EAAQ,kCAAA;AAAA,EACR,IAAA,EAAM;AACR;AAEO,IAAM,cAAA,GAA6C;AAAA,EACxD,OAAA,EAAS,iBAAA;AAAA,EACT,OAAA,EAAS,cAAA;AAAA,EACT,SAAA,EAAW,gBAAA;AAAA,EACX,OAAA,EAAS,cAAA;AAAA,EACT,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,aAAA;AAAA,EACR,IAAA,EAAM;AACR;AAEO,IAAM,gBAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,gBAAA;AAAA,EACT,SAAA,EAAW,kBAAA;AAAA,EACX,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,gBAAA;AAAA,EACT,MAAA,EAAQ,eAAA;AAAA,EACR,IAAA,EAAM;AACR;AAOO,IAAM,cAAA,GAA6C;AAAA,EACxD,OAAA,EAAS,oDAAA;AAAA,EACT,OAAA,EAAS,oDAAA;AAAA,EACT,SAAA,EAAW,wDAAA;AAAA,EACX,OAAA,EAAS,oDAAA;AAAA,EACT,OAAA,EAAS,oDAAA;AAAA,EACT,MAAA,EAAQ,kDAAA;AAAA,EACR,IAAA,EAAM;AACR;AAWO,IAAM,mBAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,iEAAA;AAAA,EACT,OAAA,EAAS,iEAAA;AAAA,EACT,SAAA,EAAW,mEAAA;AAAA,EACX,OAAA,EAAS,iEAAA;AAAA,EACT,OAAA,EAAS,iEAAA;AAAA,EACT,MAAA,EAAQ,gEAAA;AAAA,EACR,IAAA,EAAM;AACR;AAaO,IAAM,yBAAA,GAAwD;AAAA,EACnE,OAAA,EAAS,kDAAA;AAAA,EACT,OAAA,EAAS,kDAAA;AAAA,EACT,SAAA,EAAW,oDAAA;AAAA,EACX,OAAA,EAAS,kDAAA;AAAA,EACT,OAAA,EAAS,kDAAA;AAAA,EACT,MAAA,EAAQ,iDAAA;AAAA,EACR,IAAA,EAAM;AACR;AAIO,IAAM,gBAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS,cAAA;AAAA,EACT,OAAA,EAAS,cAAA;AAAA,EACT,SAAA,EAAW,gBAAA;AAAA,EACX,OAAA,EAAS,cAAA;AAAA,EACT,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,aAAA;AAAA,EACR,IAAA,EAAM;AACR;;;AC3NO,IAAM,iBAAA,GAAkD;AAAA,EAC7D,IAAA,EAAM,kBAAA;AAAA,EACN,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM;AACR;AAKO,IAAM,mBAAA,GAAoC;AAU1C,IAAM,iBAAiB,CAC5B,IAAA,EACA,UACA,aAAA,GAA8B,mBAAA,KACb,QAAQ,QAAA,IAAY;AAWhC,IAAM,uBAAuB,CAAC,OAAA,KACnC,kBAAkB,OAAA,KAAY,MAAA,GAAS,OAAO,OAAO;;;AC9BhD,IAAM,qBAAA,GAAmD;AAAA,EAC9D,EAAA,EAAI,qBAAA;AAAA,EACJ,EAAA,EAAI,uBAAA;AAAA,EACJ,EAAA,EAAI,mBAAA;AAAA,EACJ,EAAA,EAAI,uBAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAgBO,IAAM,uBAAA,GAAqD;AAAA,EAChE,EAAA,EAAI,iBAAA;AAAA,EACJ,EAAA,EAAI,iBAAA;AAAA,EACJ,EAAA,EAAI,iBAAA;AAAA,EACJ,EAAA,EAAI,iBAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAeO,IAAM,uBAAA,GAA+D;AAAA,EAC1E,EAAA,EAAI,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,SAAA,EAAU;AAAA,EACvF,EAAA,EAAI,EAAE,GAAA,EAAK,UAAA,EAAY,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,OAAA,EAAQ;AAAA,EACzF,EAAA,EAAI,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,OAAA,EAAQ;AAAA,EACnF,EAAA,EAAI,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,SAAA,EAAU;AAAA,EAC3F,EAAA,EAAI,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,OAAA;AAC7E;AAOO,IAAM,kBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,qBAAA;AAAA,EACJ,EAAA,EAAI,mBAAA;AAAA,EACJ,EAAA,EAAI,mBAAA;AAAA,EACJ,EAAA,EAAI,qBAAA;AAAA,EACJ,EAAA,EAAI;AACN;;;AC/DO,IAAM,mBAAA,GAAsB;AAAA,EACjC,aAAA,EAAe,EAAA;AAAA,EACf,WAAA,EAAa,GAAA;AAAA,EACb,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,IAAA;AAAA,EACZ,cAAA,EAAgB,GAAA;AAAA,EAChB,UAAA,EAAY,IAAA;AAAA,EACZ,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,GAAA;AAAA,EACd,WAAA,EAAa,GAAA;AAAA,EACb,YAAA,EAAc,IAAA;AAAA,EACd,eAAA,EAAiB,GAAA;AAAA,EACjB,gBAAA,EAAkB,IAAA;AAAA,EAClB,cAAA,EAAgB,CAAA;AAAA,EAChB,YAAA,EAAc,GAAA;AAAA,EACd,eAAA,EAAiB,IAAA;AAAA,EACjB,YAAA,EAAc,GAAA;AAAA,EACd,iBAAA,EAAmB,IAAA;AAAA,EACnB,kBAAA,EAAoB;AACtB;AAUO,IAAM,yBAAA,GAA4B;AAAA,EACvC,kBAAA,EAAoB,IAAA;AAAA,EACpB,aAAA,EAAe,GAAA;AAAA,EACf,eAAA,EAAiB;AACnB;;;ACnCO,IAAM,mBAAA,GAAsB,CACjC,QAAA,EACA,IAAA,EACA,MAAA,KACW;AACX,EAAA,MAAM,CAAC,SAAA,EAAW,GAAG,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,SAAS,SAAS,CAAA;AAChC,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAG,CAAA;AAE5B,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAGhC,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,iCAAiC,IAAI,CAAA,wDAAA;AAAA,OACvC;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AACpB,EAAA,OAAO,QAAA,CAAS,OAAA;AAAA,IAAQ,YAAA;AAAA,IAAc,CAAC,GAAA,EAAK,IAAA,KAC1C,MAAA,CAAO,IAAI,CAAA,KAAM,MAAA,GAAY,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC;AAAA,GACxD;AACF;;;ACjCA,IAAA,aAAA,GAAA;AAAA,EACE,IAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,KAAA,EAAS;AAAA,MACP,KAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,KAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAW,MAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAU;AAAA,MACR,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,KAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAQ,KAAA;AAAA,MACR,GAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,cAAA,EAAkB;AAAA,MAChB,WAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAW,MAAA;AAAA,MACX,KAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAY,IAAA;AAAA,MACZ,SAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,MAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAW,aAAA;AAAA,MACX,OAAA,EAAW;AAAA,KACb;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,cAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAoB,OAAA;AAAA,MACpB,eAAA,EAAmB,OAAA;AAAA,MACnB,KAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAY,UAAA;AAAA,MACZ,QAAA,EAAY,UAAA;AAAA,MACZ,OAAA,EAAW,iBAAA;AAAA,MACX,SAAA,EAAa,GAAA;AAAA,MACb,QAAA,EAAY,GAAA;AAAA,MACZ,UAAA,EAAc,KAAA;AAAA,MACd,SAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAU;AAAA,MACR,KAAA,EAAS;AAAA,KACX;AAAA,IACA,SAAA,EAAa;AAAA,MACX,OAAA,EAAW,MAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,QAAA,EAAY;AAAA,KACd;AAAA,IACA,KAAA,EAAS;AAAA,MACP,KAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAW,IAAA;AAAA,MACX,UAAA,EAAc,UAAA;AAAA,MACd,WAAA,EAAe,UAAA;AAAA,MACf,KAAA,EAAS,YAAA;AAAA,MACT,QAAA,EAAY;AAAA,KACd;AAAA,IACA,eAAA,EAAmB;AAAA,MACjB,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,OAAA,EAAW;AAAA,MACT,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,KAAA,EAAS;AAAA,KACX;AAAA,IACA,OAAA,EAAW;AAAA,MACT,KAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAS;AAAA,MACP,KAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,SAAA,EAAa,IAAA;AAAA,MACb,SAAA,EAAa;AAAA,KACf;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,GAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,UAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAa,OAAA;AAAA,MACb,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS;AAAA,KACX;AAAA,IACA,MAAA,EAAU;AAAA,MACR,iBAAA,EAAqB,KAAA;AAAA,MACrB,QAAA,EAAY,MAAA;AAAA,MACZ,OAAA,EAAW,MAAA;AAAA,MACX,KAAA,EAAS,IAAA;AAAA,MACT,YAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,QAAA,EAAY,MAAA;AAAA,MACZ,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAY;AAAA,MACV,GAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAU;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAW;AAAA;AACb;AAEJ,CAAA;;;AC7IO,IAAM,iBAAA,GAAuC;;;ACV7C,IAAM,SAAA,GAAY,CAAC,UAAA,EAAoB,UAAA,KAC5C,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,IAAK,UAAA,GAAa,UAAA,GAAa,CAAA,CAAA,GAAK,UAAU;;;ACAhE,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAyB;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,mBAAmB,IAAI,CAAA;AACvC,IAAA,OAAO,OAAA,KAAY,OAAO,OAAA,GAAU,IAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACMO,IAAM,mBAAA,GACX;;;ACNF,IAAM,IAAA,GAAO,CAAC,KAAA,KAA0B;AACtC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,CAAA,GAAK,IAAA,CAAK,KAAK,CAAA,EAAG,EAAE,IAAI,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAO,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,CAAA;AACT,CAAA;AAeO,IAAM,qBAAqB,CAAC,IAAA,GAAO,EAAA,EAAI,IAAA,GAA0B,EAAC,KACvE,IAAA,CAAK,MAAA,GAAS,CAAA,GAAK,KAAK,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,MAAM,KAAK,mBAAA,GAAuB;AAQvE,IAAM,gBAAA,GAAmB,CAAC,EAAA,GAAK,EAAA,KAAe,mBAAmB,EAAE;;;AClCnE,IAAM,iBAAA,GAAiD;AAAA,EAC5D,UAAA,EAAY,EAAC,MAAA,EAAO,oIAAA,EAAgJ;AAAA,EACpK,cAAA,EAAgB,EAAC,MAAA,EAAO,+HAAA,EAA2I;AAAA,EACnK,aAAA,EAAe,EAAC,MAAA,EAAO,wKAAA,EAA0L;AAAA,EACjN,qBAAA,EAAuB,EAAC,MAAA,EAAO,oKAAA,EAAsL;AAAA,EACrN,iBAAA,EAAmB,EAAC,MAAA,EAAO,yKAAA,EAA2L;AAAA,EACtN,uBAAA,EAAyB,EAAC,MAAA,EAAO,wMAAA,EAAoN;AAAA,EACrP,sBAAA,EAAwB,EAAC,MAAA,EAAO,8HAAA,EAA0I;AAAA,EAC1K,qBAAA,EAAuB,EAAC,MAAA,EAAO,+HAAA,EAA2I;AAAA,EAC1K,qBAAA,EAAuB,EAAC,MAAA,EAAO,4HAAA,EAAwI;AAAA,EACvK,uBAAA,EAAyB,EAAC,MAAA,EAAO,4IAAA,EAAwJ;AAAA,EACzL,sBAAA,EAAwB,EAAC,MAAA,EAAO,6IAAA,EAAyJ;AAAA,EACzL,oBAAA,EAAsB,EAAC,MAAA,EAAO,sIAAA,EAAkJ;AAAA,EAChL,mBAAA,EAAqB,EAAC,MAAA,EAAO,qIAAA,EAAiJ;AAAA,EAC9K,aAAA,EAAe,EAAC,MAAA,EAAO,gIAAA,EAA4I;AAAA,EACnK,cAAA,EAAgB,EAAC,MAAA,EAAO,wHAAA,EAAoI;AAAA,EAC5J,eAAA,EAAiB,EAAC,MAAA,EAAO,8KAAA,EAA0L;AAAA,EACnN,gBAAA,EAAkB,EAAC,MAAA,EAAO,qLAAA,EAAuM;AAAA,EACjO,iBAAA,EAAmB,EAAC,MAAA,EAAO,8KAAA,EAAgM;AAAA,EAC3N,kBAAA,EAAoB,EAAC,MAAA,EAAO,8LAAA,EAA4M;AAAA,EACxO,mBAAA,EAAqB,EAAC,MAAA,EAAO,4LAAA,EAA0M;AAAA,EACvO,oBAAA,EAAsB,EAAC,MAAA,EAAO,sQAAA,EAAsR;AAAA,EACpT,sBAAA,EAAwB,EAAC,MAAA,EAAO,4LAAA,EAAwM;AAAA,EACxO,iBAAA,EAAmB,EAAC,MAAA,EAAO,gMAAA,EAA8M;AAAA,EACzO,aAAA,EAAe,EAAC,MAAA,EAAO,sOAAA,EAA8P;AAAA,EACrR,iBAAA,EAAmB,EAAC,MAAA,EAAO,wMAAA,EAAgO;AAAA,EAC3P,iBAAA,EAAmB,EAAC,MAAA,EAAO,sNAAA,EAAwO;AAAA,EACnQ,YAAA,EAAc,EAAC,MAAA,EAAO,2PAAA,EAA6Q;AAAA,EACnS,gBAAA,EAAkB,EAAC,MAAA,EAAO,oWAAA,EAAkX;AAAA,EAC5Y,eAAA,EAAiB,EAAC,MAAA,EAAO,uKAAA,EAAyL;AAAA,EAClN,eAAA,EAAiB,EAAC,MAAA,EAAO,4IAAA,EAAwJ;AAAA,EACjL,8BAAA,EAAgC,EAAC,MAAA,EAAO,wbAAA;AAC1C,CAAA;;;ACxBA,IAAM,WAAW,IAAI,GAAA,CAAyB,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAC,CAAA;AAExE,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,IAAA,KAA4B;AACxE,EAAA,QAAA,CAAS,GAAA,CAAI,MAAM,IAAI,CAAA;AACzB;AAIO,IAAM,gBAAA,GAAmB,CAC9B,KAAA,KACS;AACT,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAC3E;AAEO,IAAM,UAAA,GAAa,CAAC,IAAA,KACzB,QAAA,CAAS,IAAI,IAAI;AAEZ,IAAM,UAAA,GAAa,CAAC,IAAA,KAA0B,QAAA,CAAS,IAAI,IAAI","file":"index.cjs","sourcesContent":["// AUTO-GENERATED by scripts/gen-tw-scales.mjs from @kungal/ui-tokens — do not edit.\n//\n// The Tailwind scale names KunUI mints itself. `cn()` feeds them to\n// tailwind-merge, which otherwise cannot parse them and silently keeps two\n// conflicting classes.\nexport const KUN_TW_SCALES = {\n  radius: ['kun-full', 'kun-lg', 'kun-md', 'kun-none', 'kun-sm'],\n  shadow: ['kun-lg', 'kun-md', 'kun-sm'],\n  ease: ['kun-emphasized', 'kun-in', 'kun-out', 'kun-standard'],\n  animate: ['bounce', 'bounceInDown', 'bounceInRight', 'fadeInUp', 'fadeOutDown', 'shake', 'swing', 'tada'],\n  z: ['kun-alert', 'kun-message', 'kun-modal', 'kun-popover', 'kun-sticky'],\n  duration: ['kun-base', 'kun-exit', 'kun-fast', 'kun-slow'],\n} as const\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\nimport { KUN_TW_SCALES } from './twScales.generated'\n\n// tailwind-merge only ships Tailwind's OWN scales, so every name KunUI mints in\n// `@theme` / `@utility` was invisible to it and got passed through untouched:\n// `cn('rounded-kun-md', 'rounded-full')` returned both classes and left CSS\n// source order to pick the winner. Measured, a consumer passing\n// `classNames.trigger: 'rounded-full'` to KunSelect still rendered a 12px\n// radius — the documented \"your class wins\" contract was false for the whole\n// `rounded-kun-*`, `shadow-kun-*`, `z-kun-*`, `ease-kun-*` and `duration-kun-*`\n// surface.\n//\n// `shadow-kun-*` failed worse than the rest. The shadow COLOUR group's\n// validator accepts any non-arbitrary word, so `shadow-kun-md` was classified\n// as a colour: it resolved against `shadow-primary/20` and the box-shadow was\n// the class that got dropped.\n//\n// The scale names are generated from tokens.css (`pnpm gen`) because a drifted\n// hand-written list fails silently — nothing errors, the classes just stop\n// merging again.\nconst twMerge = extendTailwindMerge({\n  extend: {\n    theme: {\n      radius: [...KUN_TW_SCALES.radius],\n      shadow: [...KUN_TW_SCALES.shadow],\n      ease: [...KUN_TW_SCALES.ease],\n      animate: [...KUN_TW_SCALES.animate],\n    },\n    // z-index and transition-duration are not Tailwind v4 theme namespaces —\n    // these are `@utility` blocks, so they extend the class group directly.\n    classGroups: {\n      z: [{ z: [...KUN_TW_SCALES.z] }],\n      duration: [{ duration: [...KUN_TW_SCALES.duration] }],\n    },\n  },\n})\n\n// Merge Tailwind class names with conflict resolution. Framework-agnostic:\n// the Vue and React layers both import this so \"last class wins\" semantics\n// are identical everywhere.\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs))\n\nexport type { ClassValue }\n","import type { KunUIVariant, KunUIColor } from './types'\n\n// Single source of truth for the variant × color → Tailwind class table.\n// Button / Badge / Chip / Tab / Info / Progress etc. (in every framework\n// layer) consume this so the 7 × 7 matrix lives in exactly one place.\n//\n// All keys MUST be static string literals so the Tailwind JIT picks them\n// up — never construct class names with template strings at runtime.\n// Every entry carries an explicit `border` WIDTH so the outline variant\n// `bordered` actually renders — `border-{color}` alone sets only the\n// color and paints nothing in Tailwind v4. Filled / light variants use a\n// transparent border of the same width so switching variants never shifts the\n// box by a pixel.\nconst TABLE: Record<KunUIVariant, Record<KunUIColor, string>> = {\n  // Filled buttons keep white text in BOTH modes, so the fill must stay dark\n  // enough for contrast. The dark color scale is inverted (`-500`/`-600` become\n  // LIGHT in dark mode), so a plain `bg-{color}` renders pale — worst on the\n  // light hues (info ≈ L88%, default/secondary ≈ L65–72%). Each entry pins a\n  // `dark:bg-{color}-{n}` that lands every color at a consistent ~L44–55% so the\n  // whole row reads as one saturated tier with legible white text.\n  // Foreground: the dark hues take white; the light hues (success / warning /\n  // info) are light in BOTH modes, so white text fails WCAG on them (~1.5–3.4:1)\n  // — they take dark text (≈6–18:1). See kunSolidFgClasses.\n  solid: {\n    default: 'border border-transparent bg-default text-default-foreground',\n    primary: 'border border-transparent bg-primary text-primary-foreground',\n    secondary: 'border border-transparent bg-secondary text-secondary-foreground',\n    success: 'border border-transparent bg-success text-success-foreground',\n    warning: 'border border-transparent bg-warning text-warning-foreground',\n    danger: 'border border-transparent bg-danger text-danger-foreground',\n    info: 'border border-transparent bg-info text-info-foreground',\n  },\n  bordered: {\n    default: 'border border-default bg-transparent',\n    primary: 'border border-primary bg-transparent text-primary',\n    secondary: 'border border-secondary bg-transparent text-secondary',\n    success: 'border border-success bg-transparent text-success',\n    warning: 'border border-warning bg-transparent text-warning',\n    danger: 'border border-danger bg-transparent text-danger',\n    info: 'border border-info bg-transparent text-info',\n  },\n  light: {\n    default: 'border border-transparent bg-transparent hover:bg-default/20',\n    primary: 'border border-transparent bg-transparent text-primary hover:bg-primary/20',\n    secondary: 'border border-transparent bg-transparent text-secondary hover:bg-secondary/20',\n    success: 'border border-transparent bg-transparent text-success hover:bg-success/20',\n    warning: 'border border-transparent bg-transparent text-warning hover:bg-warning/20',\n    danger: 'border border-transparent bg-transparent text-danger hover:bg-danger/20',\n    info: 'border border-transparent bg-transparent text-info hover:bg-info/20',\n  },\n  flat: {\n    default: 'border border-transparent bg-default/20 text-default-700',\n    primary: 'border border-transparent bg-primary/20 text-primary-600',\n    secondary: 'border border-transparent bg-secondary/20 text-secondary-600',\n    success: 'border border-transparent bg-success/20 text-success-700 dark:text-success',\n    warning: 'border border-transparent bg-warning/20 text-warning-700 dark:text-warning',\n    danger: 'border border-transparent bg-danger/20 text-danger-600 dark:text-danger-500',\n    info: 'border border-transparent bg-info/20 text-info-700 dark:text-info-500',\n  },\n  // Same fill logic as `solid` (see note above) plus a COLORED glow. The glow\n  // needs both a size (`shadow-lg` — the geometry) AND a tint (`shadow-{color}/40`\n  // — sets --tw-shadow-color): a color utility alone leaves --tw-shadow empty, so\n  // the button rendered with NO shadow at all. `overflow-hidden` on the button\n  // doesn't clip its own outset box-shadow, so the glow shows.\n  shadow: {\n    default: 'border border-transparent shadow-lg shadow-default/40 bg-default text-default-foreground',\n    primary: 'border border-transparent shadow-lg shadow-primary/40 bg-primary text-primary-foreground',\n    secondary: 'border border-transparent shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground',\n    success: 'border border-transparent shadow-lg shadow-success/40 bg-success text-success-foreground',\n    warning: 'border border-transparent shadow-lg shadow-warning/40 bg-warning text-warning-foreground',\n    danger: 'border border-transparent shadow-lg shadow-danger/40 bg-danger text-danger-foreground',\n    info: 'border border-transparent shadow-lg shadow-info/40 bg-info text-info-foreground',\n  },\n}\n\nexport const kunVariantClasses = (\n  variant: KunUIVariant,\n  color: KunUIColor\n): string => TABLE[variant][color]\n\n// Static maps for narrower use cases (just the fill color, just the text\n// color, etc.) — same JIT-safety requirement: keys must be literals.\n\nexport const kunBgClasses: Record<KunUIColor, string> = {\n  default: 'bg-default',\n  primary: 'bg-primary',\n  secondary: 'bg-secondary',\n  success: 'bg-success',\n  warning: 'bg-warning',\n  danger: 'bg-danger',\n  info: 'bg-info',\n}\n\n// ─── Solid fills (a colored fill that carries text / icons) ──────────────────\n// Each semantic color ships a paired on-color token — `--color-{c}` (the vivid\n// fill) + `--color-{c}-foreground` (the text that stays legible on it) — both\n// generated in OKLCH and WCAG-AA-verified in BOTH light and dark by\n// scripts/gen-tokens.mjs (the build fails if any pair regresses). So a solid is\n// just `bg-{c} text-{c}-foreground`: no per-color white/black guess, no `dark:`\n// pin (the tokens are mode-correct by construction). Medium hues land white,\n// the bright hues (magenta/green/cyan/amber) land a refined dark tint.\n// Reach for these — NOT plain `kunBgClasses` — whenever a colored fill carries a\n// foreground. `kunBgClasses` stays for tints / bars / dots that carry no text.\n\n/** Just the fill. Pair with {@link kunSolidFgClasses} when the fill and its text\n *  live on different elements. */\nexport const kunSolidBgClasses: Record<KunUIColor, string> = {\n  default: 'bg-default',\n  primary: 'bg-primary',\n  secondary: 'bg-secondary',\n  success: 'bg-success',\n  warning: 'bg-warning',\n  danger: 'bg-danger',\n  info: 'bg-info',\n}\n\n/** The generated on-color that stays legible on the matching solid fill in both\n *  modes (white on medium hues, a dark hue-tint on the bright ones). */\nexport const kunSolidFgClasses: Record<KunUIColor, string> = {\n  default: 'text-default-foreground',\n  primary: 'text-primary-foreground',\n  secondary: 'text-secondary-foreground',\n  success: 'text-success-foreground',\n  warning: 'text-warning-foreground',\n  danger: 'text-danger-foreground',\n  info: 'text-info-foreground',\n}\n\n/** Fill + matching foreground — the common case (text sits on the fill). */\nexport const kunSolidClasses: Record<KunUIColor, string> = {\n  default: 'bg-default text-default-foreground',\n  primary: 'bg-primary text-primary-foreground',\n  secondary: 'bg-secondary text-secondary-foreground',\n  success: 'bg-success text-success-foreground',\n  warning: 'bg-warning text-warning-foreground',\n  danger: 'bg-danger text-danger-foreground',\n  info: 'bg-info text-info-foreground',\n}\n\nexport const kunTextClasses: Record<KunUIColor, string> = {\n  default: 'text-foreground',\n  primary: 'text-primary',\n  secondary: 'text-secondary',\n  success: 'text-success',\n  warning: 'text-warning',\n  danger: 'text-danger',\n  info: 'text-info',\n}\n\nexport const kunBorderClasses: Record<KunUIColor, string> = {\n  default: 'border-default',\n  primary: 'border-primary',\n  secondary: 'border-secondary',\n  success: 'border-success',\n  warning: 'border-warning',\n  danger: 'border-danger',\n  info: 'border-info',\n}\n\n/**\n * @deprecated Use {@link kunFocusRingClasses} (or {@link kunFocusRingWithinClasses}\n * for composite widgets). This mixed `:focus` + `:focus-within` so a mouse click\n * lit the ring, and used a different opacity from the rest of the library.\n */\nexport const kunRingClasses: Record<KunUIColor, string> = {\n  default: 'focus-within:ring-default/40 focus:ring-default/40',\n  primary: 'focus-within:ring-primary/40 focus:ring-primary/40',\n  secondary: 'focus-within:ring-secondary/40 focus:ring-secondary/40',\n  success: 'focus-within:ring-success/40 focus:ring-success/40',\n  warning: 'focus-within:ring-warning/40 focus:ring-warning/40',\n  danger: 'focus-within:ring-danger/40 focus:ring-danger/40',\n  info: 'focus-within:ring-info/40 focus:ring-info/40',\n}\n\n/**\n * Unified focus ring — ONE recipe for every directly-focusable control (inputs,\n * textarea, select trigger, buttons, checkbox/radio, links, tabs, menu items…).\n * Keyboard focus only (`:focus-visible`, so a mouse click on a button shows no\n * ring; text fields still show it on click via the browser's focus-visible\n * heuristic). A flush 2px ring in the control's semantic color at 50% — replaces\n * the old scatter of `:focus`/`:focus-within` × `ring-1|2|4` × `/25|/40|/50|full`.\n * Pair with `border-kun` at rest; on an invalid control use the `danger` entry.\n */\nexport const kunFocusRingClasses: Record<KunUIColor, string> = {\n  default: 'outline-none focus-visible:ring-2 focus-visible:ring-default/50',\n  primary: 'outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n  secondary: 'outline-none focus-visible:ring-2 focus-visible:ring-secondary/50',\n  success: 'outline-none focus-visible:ring-2 focus-visible:ring-success/50',\n  warning: 'outline-none focus-visible:ring-2 focus-visible:ring-warning/50',\n  danger: 'outline-none focus-visible:ring-2 focus-visible:ring-danger/50',\n  info: 'outline-none focus-visible:ring-2 focus-visible:ring-info/50',\n}\n\n/**\n * Composite-widget variant of {@link kunFocusRingClasses}: the focusable element\n * is an inner `<input>` but the ring should sit on the WRAPPER. Put this on the\n * wrapper and give the inner input `outline-none` (and no ring of its own) so\n * there's exactly one indicator. Used by KunNumberInput / KunTagInput.\n *\n * Uses `focus-within` (not `has-[:focus-visible]`): for a text-field wrapper the\n * two are equivalent — a text input matches `:focus-visible` on click too — and\n * `focus-within` is a native variant that reliably compiles, whereas the\n * `has-[:focus-visible]` arbitrary variant isn't extracted from this TS source.\n */\nexport const kunFocusRingWithinClasses: Record<KunUIColor, string> = {\n  default: 'focus-within:ring-2 focus-within:ring-default/50',\n  primary: 'focus-within:ring-2 focus-within:ring-primary/50',\n  secondary: 'focus-within:ring-2 focus-within:ring-secondary/50',\n  success: 'focus-within:ring-2 focus-within:ring-success/50',\n  warning: 'focus-within:ring-2 focus-within:ring-warning/50',\n  danger: 'focus-within:ring-2 focus-within:ring-danger/50',\n  info: 'focus-within:ring-2 focus-within:ring-info/50',\n}\n\n// Very light tint of the semantic color — \"selected card\" backgrounds in\n// RadioGroup and any \"barely there\" colored fill. Keys are static literals.\nexport const kunSoftBgClasses: Record<KunUIColor, string> = {\n  default: 'bg-default/5',\n  primary: 'bg-primary/5',\n  secondary: 'bg-secondary/5',\n  success: 'bg-success/5',\n  warning: 'bg-warning/5',\n  danger: 'bg-danger/5',\n  info: 'bg-info/5',\n}\n","import type { KunUIRounded } from './types'\n\n// Static class map for the 5-bucket Kun radius system. All keys are literal\n// strings so the Tailwind JIT picks them up — the `rounded-kun-*` utilities\n// come from the --radius-kun-* tokens shipped by @kungal/ui-tokens.\nexport const kunRoundedClasses: Record<KunUIRounded, string> = {\n  none: 'rounded-kun-none',\n  sm: 'rounded-kun-sm',\n  md: 'rounded-kun-md',\n  lg: 'rounded-kun-lg',\n  full: 'rounded-kun-full',\n}\n\n// Global default radius bucket (matches the source layer's behaviour where\n// the un-configured fallback is 'md'). A render layer's config provider may\n// override this per subtree.\nexport const KUN_DEFAULT_ROUNDED: KunUIRounded = 'md'\n\n// Pure precedence resolver for a component's effective radius:\n//   prop  >  component built-in fallback  >  app/provider default\n//\n// This is the framework-agnostic core of the original Vue\n// `useResolvedRounded` composable. Each render layer wraps it in its own\n// reactivity primitive:\n//   Vue:   computed(() => resolveRounded(props.rounded, fallback, cfg.rounded))\n//   React: useMemo(() => resolveRounded(rounded, fallback, cfg.rounded), [...])\nexport const resolveRounded = (\n  prop: KunUIRounded | undefined,\n  fallback: KunUIRounded | undefined,\n  configDefault: KunUIRounded = KUN_DEFAULT_ROUNDED\n): KunUIRounded => prop ?? fallback ?? configDefault\n\n// A floating panel has no correct `full`. `border-radius: 9999px` on an n-row\n// listbox is not a pill — CSS Backgrounds 3 §5.5 scales every corner by\n// min(side / sum of its radii), so the used radius is half the short side. A\n// measured 80x116 KunSelect popup rendered 40px corners and pushed its option\n// labels inward; the docs' own FilterBar example prescribed `rounded=\"full\"`\n// and shipped that. `full` means \"pill\", and a pill is only defined for a\n// single-line control. So a trigger + panel component keeps `full` on the\n// trigger and resolves the panel to `lg`, the bucket --radius-kun-lg documents\n// as \"containers / floating panels\". Every other bucket passes through.\nexport const kunPanelRoundedClass = (rounded: KunUIRounded): string =>\n  kunRoundedClasses[rounded === 'full' ? 'lg' : rounded]\n","import type { KunUISize } from './types'\n\n// The single source of truth for the size of every text-like form control —\n// Button, Input, Select, DatePicker, Textarea, TagInput. They reference this so\n// they share one scale and line up in a row.\n//\n// Padding-driven (not fixed-height): height = font line-height + 2·py + border.\n// `md` is the anchor (~38px, the modern default). px:py is a clean 2:1 (xs/sm a\n// touch looser); horizontal padding grows faster than vertical from md→xl, so a\n// bigger control gets wider, not flatter. Approx heights with a 1px border and\n// text line-heights 16 / 20 / 20 / 24 / 28:\n//   xs ≈ 26 · sm ≈ 34 · md ≈ 38 · lg ≈ 46 · xl ≈ 54\nexport const kunControlSizeClasses: Record<KunUISize, string> = {\n  xs: 'text-xs px-2.5 py-1',\n  sm: 'text-sm px-3.5 py-1.5',\n  md: 'text-sm px-4 py-2',\n  lg: 'text-base px-5 py-2.5',\n  xl: 'text-lg px-6 py-3',\n}\n\n// Icon-only buttons: a fixed SQUARE whose side equals the text-button height at\n// the same size, so an icon button lines up with text buttons in a row.\n//\n// Why this exists: kunControlSizeClasses is padding-driven (height = line-height\n// + 2·py + border). A text label contributes a full line-box (≈1.5em), but a lone\n// 1em icon does not — with the same padding the icon button would come out\n// shorter and break the row. Mainstream libraries dodge this by giving buttons a\n// fixed height and making the icon button a square of that height (shadcn\n// `size-9`, HeroUI/Chakra/Ant `isIconOnly`/`.ant-btn-icon-only`). We do the same,\n// ONLY for icon-only, keeping the icon at its natural 1em centered in the box.\n//\n// Sides MUST equal the kunControlSizeClasses heights (incl. the 1px border every\n// variant carries): xs 26 · sm 34 · md 38 · lg 46 · xl 54. (size-* is border-box,\n// so the value already accounts for the icon button's own 1px border.)\nexport const kunControlSquareClasses: Record<KunUISize, string> = {\n  xs: 'size-[26px] p-0',\n  sm: 'size-[34px] p-0',\n  md: 'size-[38px] p-0',\n  lg: 'size-[46px] p-0',\n  xl: 'size-[54px] p-0',\n}\n\nexport interface KunSelectionSize {\n  box: string // the square: checkbox box / radio indicator outer ring\n  dot: string // radio's inner filled dot (unused by checkbox)\n  check: string // checkbox's check glyph (unused by radio)\n  text: string // the adjacent label\n  gap: string // box ↔ label spacing\n}\n\n// The shared scale for selection controls — KunCheckBox and KunRadioGroup use\n// identical box sizes (every major library does this), so a checkbox and a radio\n// of the same size match. The box is ≈ 0.5× the text-control height and ≈ 1.2–1.4×\n// the label font, so it sits optically level with the label beside it.\n// Box px by size: 12 / 14 / 16 / 20 / 24.\nexport const kunSelectionSizeClasses: Record<KunUISize, KunSelectionSize> = {\n  xs: { box: 'size-3', dot: 'size-1.5', check: 'size-2', text: 'text-xs', gap: 'gap-1.5' },\n  sm: { box: 'size-3.5', dot: 'size-1.5', check: 'size-2.5', text: 'text-sm', gap: 'gap-2' },\n  md: { box: 'size-4', dot: 'size-2', check: 'size-3', text: 'text-sm', gap: 'gap-2' },\n  lg: { box: 'size-5', dot: 'size-2.5', check: 'size-3.5', text: 'text-base', gap: 'gap-2.5' },\n  xl: { box: 'size-6', dot: 'size-3', check: 'size-4', text: 'text-lg', gap: 'gap-3' },\n}\n\n// The single source of truth for chip / tag pills — a standalone KunChip and the\n// tags inside KunTagInput share it, so a tag looks identical either way. A\n// compact sub-scale (~0.7× the form-control height): vertical padding is tighter\n// than kunControlSizeClasses because a chip is text + tight padding, not a tap\n// target. Pair with `gap-1` + `rounded-full`.\nexport const kunChipSizeClasses: Record<KunUISize, string> = {\n  xs: 'px-2 py-0.5 text-xs',\n  sm: 'px-2 py-1 text-xs',\n  md: 'px-3 py-1 text-sm',\n  lg: 'px-4 py-1.5 text-sm',\n  xl: 'px-6 py-2 text-base',\n}\n","// AUTO-GENERATED by scripts/gen-motion.mjs from\n// packages/ui-tokens/scripts/motion-physics.mjs — do not edit.\n\n/**\n * The ballistic model behind `KunShatter`, as data — outward impulse, air\n * drag (`1 − (1−t)^dragExponent`), gravity as a t² acceleration — sampled\n * into `keyframeSteps` linear keyframes per shard. The same manifest\n * generates `KunShatterPhysics` in the kun_ui_tokens pub package, so the\n * web and Flutter renditions of the motion cannot drift. Tune the feel in\n * the manifest, never inline in a component.\n */\nexport const KUN_SHATTER_PHYSICS = {\n  keyframeSteps: 16,\n  reachFactor: 0.5,\n  launchMin: 0.32,\n  launchSpan: 0.55,\n  verticalFactor: 0.8,\n  gravityMin: 0.85,\n  gravitySpan: 0.5,\n  dragExponent: 1.7,\n  scaleEndMin: 0.8,\n  scaleEndSpan: 0.16,\n  fadeOutStartMin: 0.5,\n  fadeOutStartSpan: 0.18,\n  settleExponent: 2,\n  fadeInWindow: 0.4,\n  staggerFraction: 0.22,\n  staggerCapMs: 120,\n  defaultDurationMs: 1100,\n  defaultRotationDeg: 140,\n} as const\n\n/**\n * Drag-to-dismiss on a bottom sheet, as data: dismiss on release when the\n * sheet moved down and either the release velocity exceeds `closeVelocity`\n * (px/ms) or the offset reaches `closeDistanceRatio` of the panel height\n * (capped at the viewport); an upward drag of d px moves the panel\n * `rubberBandLimit × (1 − e^(−d / rubberBandLimit))`. The same manifest\n * generates `KunSwipeDismissPhysics` in kun_ui_tokens.\n */\nexport const KUN_SWIPE_DISMISS_PHYSICS = {\n  closeDistanceRatio: 0.25,\n  closeVelocity: 0.4,\n  rubberBandLimit: 32,\n} as const\n","import type { KunMessagePath, KunMessages } from './types'\n\n// Resolve one message and substitute its `{name}` placeholders. Framework-free\n// on purpose: each render layer binds it to however that layer holds the\n// active locale.\n//\n// A `{name}` with no matching param is left as written rather than blanked —\n// a missing interpolation should be visible in the UI, not silently produce a\n// half-sentence.\nexport const translateKunMessage = (\n  messages: KunMessages,\n  path: KunMessagePath,\n  params?: Record<string, string | number>\n): string => {\n  const [namespace, key] = path.split('.') as [keyof KunMessages, string]\n  const group = messages[namespace] as Record<string, string> | undefined\n  const template = group?.[key]\n\n  if (typeof template !== 'string') {\n    // NODE_ENV, not import.meta.env.DEV: Vite folds the latter to false when it\n    // builds a consuming package, which strips the warning from the bundle.\n    if (process.env.NODE_ENV !== 'production') {\n      console.warn(\n        `[KunUI] no locale message at \"${path}\". A custom locale must supply every key in KunMessages.`\n      )\n    }\n    return path\n  }\n\n  if (!params) return template\n  return template.replace(/\\{(\\w+)\\}/g, (raw, name: string) =>\n    params[name] === undefined ? raw : String(params[name])\n  )\n}\n","{\n  \"name\": \"简体中文\",\n  \"code\": \"zh-CN\",\n  \"messages\": {\n    \"alert\": {\n      \"title\": \"确认\",\n      \"confirm\": \"确定\",\n      \"cancel\": \"取消\"\n    },\n    \"autocomplete\": {\n      \"clear\": \"清除\",\n      \"loading\": \"加载中…\",\n      \"noResult\": \"无匹配项\"\n    },\n    \"avatar\": {\n      \"unknownUser\": \"未知用户\"\n    },\n    \"avatarGroup\": {\n      \"label\": \"{count} 位用户\"\n    },\n    \"carousel\": {\n      \"label\": \"轮播\",\n      \"prev\": \"上一张\",\n      \"next\": \"下一张\",\n      \"nav\": \"轮播导航\",\n      \"goto\": \"跳到第 {index} 张\"\n    },\n    \"chip\": {\n      \"remove\": \"移除\"\n    },\n    \"commandPalette\": {\n      \"placeholder\": \"搜索…\",\n      \"empty\": \"输入关键字搜索\",\n      \"noResult\": \"无结果\",\n      \"loading\": \"加载中…\",\n      \"close\": \"关闭\",\n      \"hintSelect\": \"选择\",\n      \"hintOpen\": \"打开\",\n      \"hintClose\": \"关闭\",\n      \"resultCount\": \"{count} 条结果\"\n    },\n    \"copy\": {\n      \"copied\": \"已复制\",\n      \"success\": \"{text} 复制成功\",\n      \"failure\": \"{text} 复制失败! 请更换更现代的浏览器!\"\n    },\n    \"datePicker\": {\n      \"placeholderDay\": \"请选择日期\",\n      \"placeholderMonth\": \"请选择月份\",\n      \"placeholderYear\": \"请选择年份\",\n      \"clear\": \"清空\",\n      \"today\": \"今天\",\n      \"close\": \"关闭\",\n      \"prevYear\": \"上一年\",\n      \"nextYear\": \"下一年\",\n      \"prevPage\": \"上一{unit}\",\n      \"nextPage\": \"下一{unit}\",\n      \"zoomOut\": \"{label} — 返回上一级\",\n      \"unitMonth\": \"月\",\n      \"unitYear\": \"年\",\n      \"unitDecade\": \"个十年\",\n      \"monthCell\": \"{year}年{month}\"\n    },\n    \"drawer\": {\n      \"close\": \"关闭抽屉\"\n    },\n    \"fileInput\": {\n      \"trigger\": \"选择文件\",\n      \"selected\": \"已选 {count} 个文件\"\n    },\n    \"filePicker\": {\n      \"tooLarge\": \"{name} 超过大小限制 ({size})\"\n    },\n    \"input\": {\n      \"clear\": \"清除\",\n      \"reveal\": \"显示密码\",\n      \"hide\": \"隐藏密码\"\n    },\n    \"lightbox\": {\n      \"label\": \"图片查看器\",\n      \"close\": \"关闭\",\n      \"prev\": \"上一张\",\n      \"next\": \"下一张\",\n      \"goto\": \"跳转到第 {index} 张\",\n      \"zoomIn\": \"放大\",\n      \"zoomOut\": \"缩小\",\n      \"rotateLeft\": \"向左旋转 90°\",\n      \"rotateRight\": \"向右旋转 90°\",\n      \"reset\": \"重置缩放/旋转/位置\",\n      \"download\": \"下载\"\n    },\n    \"lightboxGallery\": {\n      \"view\": \"查看大图\"\n    },\n    \"loading\": {\n      \"description\": \"正在摸鱼中...咕咕咕\"\n    },\n    \"loli\": {\n      \"close\": \"关闭\"\n    },\n    \"message\": {\n      \"close\": \"关闭\"\n    },\n    \"modal\": {\n      \"close\": \"关闭\"\n    },\n    \"null\": {\n      \"description\": \"莲说这里什么都没有\"\n    },\n    \"numberInput\": {\n      \"decrement\": \"减少\",\n      \"increment\": \"增加\"\n    },\n    \"pagination\": {\n      \"nav\": \"分页导航\",\n      \"prev\": \"上一页\",\n      \"next\": \"下一页\",\n      \"page\": \"第 {page} 页\",\n      \"hintBefore\": \"您可以使用\",\n      \"hintAfter\": \"来进行快速翻页\",\n      \"jumpLabel\": \"跳转到页数\",\n      \"jump\": \"跳转\"\n    },\n    \"pinInput\": {\n      \"label\": \"验证码\",\n      \"digit\": \"{label} 第 {index} 位\"\n    },\n    \"reaction\": {\n      \"label\": \"点赞\"\n    },\n    \"select\": {\n      \"searchPlaceholder\": \"搜索…\",\n      \"noResult\": \"无匹配项\",\n      \"loading\": \"加载中…\",\n      \"clear\": \"清除\",\n      \"removeOption\": \"移除 {label}\"\n    },\n    \"spoiler\": {\n      \"copyCode\": \"复制代码\",\n      \"reveal\": \"剧透内容,点击或按回车显示\"\n    },\n    \"tagInput\": {\n      \"tag\": \"标签 {tag}\",\n      \"removeTag\": \"移除标签 {tag}\"\n    },\n    \"upload\": {\n      \"imageAlt\": \"上传图片\",\n      \"cropTitle\": \"裁剪图片\",\n      \"cancel\": \"取消\",\n      \"confirm\": \"确定\"\n    }\n  }\n}\n","import raw from './zh-CN.json'\nimport type { KunMessageCatalog } from './types'\n\n// KunUI's built-in default. The strings are the ones the components used to\n// hold inline, reproduced verbatim, so adopting the locale system changed no\n// rendered output.\n//\n// The catalog is JSON rather than a TypeScript literal because one file feeds\n// both the web bundle and the generated kun_ui_messages pub package, and a\n// Node generator can read JSON without evaluating TypeScript. The annotation\n// below is what type-checks it: a key missing from KunMessages fails the build.\nexport const KUN_CATALOG_ZH_CN: KunMessageCatalog = raw\n","// Generate a random integer within an inclusive [lower, upper] range.\nexport const randomNum = (lowerValue: number, upperValue: number): number =>\n  Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue)\n","// Decode a possibly percent-encoded string, returning the original when it\n// is not encoded (or when decoding throws on malformed input).\nexport const decodeIfEncoded = (text: string): string => {\n  try {\n    const decoded = decodeURIComponent(text)\n    return decoded !== text ? decoded : text\n  } catch {\n    return text\n  }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// The terminal avatar fallback, inlined as a base64 webp data URI (128x128,\n// 5318 B) so it needs ZERO consumer setup and makes NO network request — the\n// same no-fetch policy as the bundled icons and KunNull's mascot.\n//\n// This is what renders when the host has configured no avatar pool AND when a\n// pool URL itself fails to load. It is a data URI on purpose: the incident it\n// exists for is a CDN path that 404'd for every avatar-less account across\n// six sites at once, so the LAST fallback in the chain must not be reachable\n// over a network at all.\n//\n// Source: the first official KUN Galgame sticker (image hash d52ac5fb…), the\n// site's de-facto mascot.\n/* eslint-disable */\n/* prettier-ignore */\nexport const KUN_AVATAR_FALLBACK =\n  'data:image/webp;base64,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'\n","import { KUN_AVATAR_FALLBACK } from './avatarFallbackImage'\n\n// The predecessor of this file hardcoded `https://sticker.kungal.com` plus a\n// `/stickers/KUNgal{pack}/{n}.webp` path and a pack/per-pack count. That path\n// addressed a POSITION IN A MUTABLE COLLECTION on a site KunUI does not own,\n// so when that site stopped serving static files every avatar-less account\n// across six consumers 404'd at once. A URL that names another service does\n// not belong in a component library: the host supplies the pool\n// (`useKunUIConfig().avatarFallbackPool`), KunUI only chooses from it.\n\nconst hash = (value: string): number => {\n  let h = 0\n  for (let i = 0; i < value.length; i++) {\n    h = (Math.imul(h, 31) + value.charCodeAt(i)) >>> 0\n  }\n  return h\n}\n\n/**\n * Deterministically pick one image from an avatar fallback pool.\n *\n * The same `seed` always yields the same entry on server and client, so there\n * is no hydration mismatch and no framework state is needed.\n *\n * `pool` is treated as a FIXED-LENGTH array: the index is\n * `hash(seed) % pool.length`, so adding or removing an entry re-assigns every\n * seed, while replacing one entry in place moves only the seeds that land on\n * it. Pool providers should edit slots rather than resize.\n *\n * An empty pool returns the bundled data URI, which cannot fail to load.\n */\nexport const pickAvatarFallback = (seed = '', pool: readonly string[] = []): string =>\n  pool.length > 0 ? (pool[hash(seed) % pool.length] ?? KUN_AVATAR_FALLBACK) : KUN_AVATAR_FALLBACK\n\n/**\n * @deprecated Renamed to `pickAvatarFallback`, which takes the pool the host\n * configured. This alias no longer returns a sticker URL — it returns the\n * bundled fallback for any input, because the host it used to point at stopped\n * serving those files. Pass a pool, or read the resolved image off KunAvatar.\n */\nexport const getRandomSticker = (id = ''): string => pickAvatarFallback(id)\n","// AUTO-GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Regenerate: pnpm --filter @kungal/ui-core gen:icons\nimport type { KunIconData } from './icons'\n\n// SVG data for the icons KunUI components render, bundled inline so the\n// library never fetches an icon at runtime. Bodies use currentColor.\nexport const KUN_BUNDLED_ICONS: Record<string, KunIconData> = {\n  \"lucide:x\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"},\n  \"lucide:check\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M20 6L9 17l-5-5\\\"/>\"},\n  \"lucide:info\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4m0-4h.01\\\"/></g>\"},\n  \"lucide:circle-check\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12l2 2l4-4\\\"/></g>\"},\n  \"lucide:circle-x\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9l-6 6m0-6l6 6\\\"/></g>\"},\n  \"lucide:triangle-alert\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\\\"/>\"},\n  \"lucide:chevron-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m9 18l6-6l-6-6\\\"/>\"},\n  \"lucide:chevron-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m15 18l-6-6l6-6\\\"/>\"},\n  \"lucide:chevron-down\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"},\n  \"lucide:chevrons-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 17l5-5l-5-5m7 10l5-5l-5-5\\\"/>\"},\n  \"lucide:chevrons-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m11 17l-5-5l5-5m7 10l-5-5l5-5\\\"/>\"},\n  \"lucide:arrow-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7l7 7l-7 7\\\"/>\"},\n  \"lucide:arrow-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m12 19l-7-7l7-7m7 7H5\\\"/>\"},\n  \"lucide:plus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"},\n  \"lucide:minus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"},\n  \"lucide:upload\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/>\"},\n  \"lucide:zoom-in\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"},\n  \"lucide:zoom-out\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"},\n  \"lucide:rotate-cw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"},\n  \"lucide:rotate-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/></g>\"},\n  \"lucide:refresh-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\\\"/><path d=\\\"M16 16h5v5\\\"/></g>\"},\n  \"lucide:external-link\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\"},\n  \"lucide:download\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10l5 5l5-5\\\"/></g>\"},\n  \"lucide:copy\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"},\n  \"lucide:calendar\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M8 2v4m8-4v4\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M3 10h18\\\"/></g>\"},\n  \"lucide:lollipop\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.3-4.3M11 11a2 2 0 0 0 4 0a4 4 0 0 0-8 0a6 6 0 0 0 12 0\\\"/></g>\"},\n  \"lucide:eye\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"},\n  \"lucide:eye-off\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\\\"/></g>\"},\n  \"lucide:search\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m21 21l-4.34-4.34\\\"/><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/></g>\"},\n  \"lucide:filter\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\"},\n  \"svg-spinners:90-ring-with-bg\": {\"body\":\"<path fill=\\\"currentColor\\\" d=\\\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\\\" opacity=\\\".25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\\\"><animateTransform attributeName=\\\"transform\\\" dur=\\\"0.75s\\\" repeatCount=\\\"indefinite\\\" type=\\\"rotate\\\" values=\\\"0 12 12;360 12 12\\\"/></path>\"},\n}\n","import { KUN_BUNDLED_ICONS } from './icons-data'\n\n// Iconify-compatible icon shape: `body` is the inner SVG markup (using\n// `currentColor`), rendered into a `0 0 width height` viewBox (default 24).\nexport interface KunIconData {\n  body: string\n  width?: number\n  height?: number\n}\n\n// The registry is SEEDED with KunUI's bundled internal icons (referenced via\n// the data import, so it is never tree-shaken away — no side-effect needed).\n// Consumers add their own icons with registerKunIcon(s). KunIcon renders from\n// this registry and NEVER fetches from a network/API.\nconst registry = new Map<string, KunIconData>(Object.entries(KUN_BUNDLED_ICONS))\n\nexport const registerKunIcon = (name: string, data: KunIconData): void => {\n  registry.set(name, data)\n}\n\n// Bulk register — pass a Record<name, data>, e.g. icons extracted from\n// `@iconify-json/*` at build time, or your own custom SVGs.\nexport const registerKunIcons = (\n  icons: Record<string, KunIconData>\n): void => {\n  for (const [name, data] of Object.entries(icons)) registry.set(name, data)\n}\n\nexport const getKunIcon = (name: string): KunIconData | undefined =>\n  registry.get(name)\n\nexport const hasKunIcon = (name: string): boolean => registry.has(name)\n"]}