@windrun-huaiin/third-ui 6.2.2 → 6.3.0

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.
Files changed (57) hide show
  1. package/dist/chunk-52YUUCKV.js +3190 -0
  2. package/dist/chunk-52YUUCKV.js.map +1 -0
  3. package/dist/chunk-6MM7HLNX.js +226 -0
  4. package/dist/chunk-6MM7HLNX.js.map +1 -0
  5. package/dist/chunk-6PW67OXW.js +967 -0
  6. package/dist/chunk-6PW67OXW.js.map +1 -0
  7. package/dist/chunk-BZLOMDT7.mjs +90 -0
  8. package/dist/chunk-BZLOMDT7.mjs.map +1 -0
  9. package/dist/chunk-C3MW5ZUN.mjs +967 -0
  10. package/dist/chunk-C3MW5ZUN.mjs.map +1 -0
  11. package/dist/chunk-FOMCGWDM.mjs +17 -0
  12. package/dist/chunk-FOMCGWDM.mjs.map +1 -0
  13. package/dist/chunk-ICXWQI2S.mjs +126 -0
  14. package/dist/chunk-ICXWQI2S.mjs.map +1 -0
  15. package/dist/chunk-IOUCFIRG.mjs +3190 -0
  16. package/dist/chunk-IOUCFIRG.mjs.map +1 -0
  17. package/dist/chunk-J26XFRUS.js +17 -0
  18. package/dist/chunk-J26XFRUS.js.map +1 -0
  19. package/dist/chunk-LZLW5WCC.js +90 -0
  20. package/dist/chunk-LZLW5WCC.js.map +1 -0
  21. package/dist/chunk-NV3UQTCW.mjs +226 -0
  22. package/dist/chunk-NV3UQTCW.mjs.map +1 -0
  23. package/dist/chunk-TBXDOQXP.js +126 -0
  24. package/dist/chunk-TBXDOQXP.js.map +1 -0
  25. package/dist/chunk-TKLIIDBR.mjs +2804 -0
  26. package/dist/chunk-TKLIIDBR.mjs.map +1 -0
  27. package/dist/chunk-W7K5Y2WR.js +2804 -0
  28. package/dist/chunk-W7K5Y2WR.js.map +1 -0
  29. package/dist/clerk/index.js +13 -57
  30. package/dist/clerk/index.js.map +1 -1
  31. package/dist/clerk/index.mjs +7 -27
  32. package/dist/clerk/index.mjs.map +1 -1
  33. package/dist/clerk/server.js +60 -2907
  34. package/dist/clerk/server.js.map +1 -1
  35. package/dist/clerk/server.mjs +33 -2846
  36. package/dist/clerk/server.mjs.map +1 -1
  37. package/dist/fuma/mdx/index.js +7 -4084
  38. package/dist/fuma/mdx/index.js.map +1 -1
  39. package/dist/fuma/mdx/index.mjs +20 -4058
  40. package/dist/fuma/mdx/index.mjs.map +1 -1
  41. package/dist/fuma/server.js +442 -3695
  42. package/dist/fuma/server.js.map +1 -1
  43. package/dist/fuma/server.mjs +232 -3476
  44. package/dist/fuma/server.mjs.map +1 -1
  45. package/dist/lib/server.js +39 -105
  46. package/dist/lib/server.js.map +1 -1
  47. package/dist/lib/server.mjs +4 -24
  48. package/dist/lib/server.mjs.map +1 -1
  49. package/dist/main/index.js +6 -6214
  50. package/dist/main/index.js.map +1 -1
  51. package/dist/main/index.mjs +16 -6184
  52. package/dist/main/index.mjs.map +1 -1
  53. package/dist/main/server.js +184 -6032
  54. package/dist/main/server.js.map +1 -1
  55. package/dist/main/server.mjs +147 -5957
  56. package/dist/main/server.mjs.map +1 -1
  57. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/funeye/IdeaProjects/next-ai-build/packages/third-ui/dist/chunk-6PW67OXW.js","../src/fuma/mdx/mermaid.tsx","../src/fuma/mdx/image-zoom.tsx","../src/fuma/mdx/trophy-card.tsx","../src/fuma/mdx/image-grid.tsx","../src/fuma/mdx/zia-card.tsx","../src/fuma/mdx/toc-base.tsx","../src/fuma/mdx/fuma-github-info.tsx","../src/fuma/mdx/zia-file.tsx","../src/fuma/mdx/toc-footer-wrapper.tsx","../src/fuma/mdx/banner.tsx"],"names":["svg","useState","_a","jsx","jsxs","Link","useEffect"],"mappings":"AAAA;AACA;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACA;ACXA,yCAAyB;AACzB,8BAAgE;AAqK1D,+CAAA;AAxJC,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,aAAA,EAAe,cAAA,EAAgB,KAAK,CAAA,EAAiB;AAC7G,EAAA,MAAM,GAAA,EAAK,0BAAA,CAAM;AACjB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,EAAA,EAAI,6BAAA,EAAW,CAAA;AACjC,EAAA,MAAM,EAAE,cAAc,EAAA,EAAI,kCAAA,CAAS;AACnC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,EAAA,EAAI,6BAAA,KAAc,CAAA;AAEtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,CAAU,CAAA;AACpC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA,EAAW,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AACzD,EAAA,MAAM,aAAA,EAAe,2BAAA,KAAY,CAAA;AACjC,EAAA,MAAM,cAAA,EAAgB,2BAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3C,EAAA,MAAM,kBAAA,EAAoB,2BAAA,EAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AAE/C,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,IAAI,UAAA,EAAY,IAAA;AAChB,IAAA,KAAK,WAAA,CAAY,CAAA;AAEjB,IAAA,SAAe,WAAA,CAAA,EAAc;AAAA,MAAA,OAAA,sCAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA;AAC3B,QAAA,MAAM,cAAA,EAA+B;AAAA,UACnC,WAAA,EAAa,KAAA;AAAA,UACb,aAAA,EAAe,OAAA;AAAA,UACf,UAAA,EAAY,SAAA;AAAA,UACZ,QAAA,EAAU,wBAAA;AAAA,UACV,KAAA,EAAO,cAAA,IAAkB,OAAA,EAAS,OAAA,EAAS;AAAA,QAC7C,CAAA;AAEA,QAAA,MAAM,EAAE,OAAA,EAAS,QAAQ,EAAA,EAAI,MAAM,4DAAA,CAAO,SAAS,GAAA;AAEnD,QAAA,IAAI;AACF,UAAA,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA;AAChC,UAAA,MAAM,EAAE,GAAA,EAAAA,KAAI,EAAA,EAAI,MAAM,OAAA,CAAQ,MAAA;AAAA,YAC5B,EAAA,CAAG,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA;AAAA,YACrB,KAAA,CAAM,UAAA,CAAW,KAAA,EAAO,IAAI;AAAA,UAC9B,CAAA;AACA,UAAA,IAAI,iBAAA,EAAmBA,IAAAA;AACvB,UAAA,GAAA,CAAI,iBAAA,GAAoB,aAAA,EAAe;AACrC,YAAA,iBAAA,EAAmB,iBAAA,CAAkBA,IAAAA,EAAK,aAAa,CAAA;AAAA,UACzD;AACA,UAAA,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,gBAAgB,CAAA;AAAA,QACxC,EAAA,MAAA,CAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,+BAAA,EAAiC,KAAK,CAAA;AAAA,QACtD;AAAA,MACF,CAAA,CAAA;AAAA,IAAA;AACA,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,UAAA,EAAY,KAAA;AACZ,MAAA,MAAA,CAAO,EAAE,CAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,EAAA,EAAI,aAAA,EAAe,gBAAA,EAAkB,aAAa,CAAC,CAAA;AAG9D,EAAA,MAAM,MAAA,EAAQ,CAAC,CAAA,EAAW,GAAA,EAAa,GAAA,EAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA;AACrF,EAAA,MAAM,eAAA,EAAiB,gCAAA,CAAY,EAAA,GAAM;AACvC,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,YAAA,CAAa,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,OAAA,EAAS,gCAAA,CAAa,KAAA,EAAA,GAAkB;AAE5C,IAAA,QAAA,CAAS,CAAC,IAAA,EAAA,GAAS,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,QAAA,EAAU,gCAAA,CAAa,CAAA,EAAA,GAAwC;AAEnE,IAAA,GAAA,CAAI,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,OAAA,EAAS;AAC1B,MAAA,CAAA,CAAE,cAAA,CAAe,CAAA;AACjB,MAAA,CAAA,CAAE,eAAA,CAAgB,CAAA;AAClB,MAAA,MAAM,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAS,EAAA,EAAI,CAAA,IAAA,EAAO,GAAA;AACpC,MAAA,QAAA,CAAS,CAAC,IAAA,EAAA,GAAS,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,IAClD,EAAA,KAAO;AAEL,MAAA,CAAA,CAAE,cAAA,CAAe,CAAA;AACjB,MAAA,CAAA,CAAE,eAAA,CAAgB,CAAA;AAClB,MAAA,YAAA,CAAa,CAAC,IAAA,EAAA,GAAA,CAAU,EAAE,CAAA,EAAG,IAAA,CAAK,EAAA,EAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,IAAA,CAAK,EAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,IACzE;AAAA,EACF,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,cAAA,EAAgB,gCAAA,CAAa,CAAA,EAAA,GAA0C;AAC3E,IAAA,YAAA,CAAa,QAAA,EAAU,IAAA;AACvB,IAAA,aAAA,CAAc,QAAA,EAAU,EAAE,CAAA,EAAG,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA;AACrD,IAAA,iBAAA,CAAkB,QAAA,EAAU,6CAAA,CAAA,CAAA,EAAK,SAAA,CAAA;AACjC,IAAC,CAAA,CAAE,aAAA,CAAiC,iBAAA,CAAkB,CAAA,CAAE,SAAS,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,cAAA,EAAgB,gCAAA,CAAa,CAAA,EAAA,GAA0C;AAC3E,IAAA,GAAA,CAAI,CAAC,YAAA,CAAa,OAAA,EAAS,MAAA;AAC3B,IAAA,MAAM,GAAA,EAAK,CAAA,CAAE,QAAA,EAAU,aAAA,CAAc,OAAA,CAAQ,CAAA;AAC7C,IAAA,MAAM,GAAA,EAAK,CAAA,CAAE,QAAA,EAAU,aAAA,CAAc,OAAA,CAAQ,CAAA;AAC7C,IAAA,YAAA,CAAa,EAAE,CAAA,EAAG,iBAAA,CAAkB,OAAA,CAAQ,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,iBAAA,CAAkB,OAAA,CAAQ,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,EAC3F,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,YAAA,EAAc,gCAAA,CAAa,CAAA,EAAA,GAA0C;AACzE,IAAA,YAAA,CAAa,QAAA,EAAU,KAAA;AACvB,IAAC,CAAA,CAAE,aAAA,CAAiC,qBAAA,CAAsB,CAAA,CAAE,SAAS,CAAA;AAAA,EACvE,CAAA,EAAG,CAAC,CAAC,CAAA;AAGL,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAA;AAEX,IAAA,cAAA,CAAe,CAAA;AACf,IAAA,MAAM,cAAA,EAAgB,CAAC,EAAA,EAAA,GAAmB;AACxC,MAAA,GAAA,CAAI,EAAA,CAAG,QAAA,GAAW,EAAA,CAAG,OAAA,EAAS;AAC5B,QAAA,EAAA,CAAG,cAAA,CAAe,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,UAAA,EAAY,CAAC,EAAA,EAAA,GAAsB;AACvC,MAAA,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,QAAA,GAAW,EAAA,CAAG,OAAA,CAAA,EAAU,MAAA;AACjC,MAAA,MAAM,EAAA,EAAI,EAAA,CAAG,GAAA;AACb,MAAA,GAAA,CAAI,EAAA,IAAM,IAAA,GAAO,EAAA,IAAM,GAAA,EAAK;AAC1B,QAAA,EAAA,CAAG,cAAA,CAAe,CAAA;AAClB,QAAA,QAAA,CAAS,CAAC,IAAA,EAAA,GAAS,KAAA,CAAM,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,MAChD,EAAA,KAAA,GAAA,CAAW,EAAA,IAAM,GAAA,EAAK;AACpB,QAAA,EAAA,CAAG,cAAA,CAAe,CAAA;AAClB,QAAA,QAAA,CAAS,CAAC,IAAA,EAAA,GAAS,KAAA,CAAM,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,MAChD,EAAA,KAAA,GAAA,CAAW,EAAA,IAAM,GAAA,EAAK;AACpB,QAAA,EAAA,CAAG,cAAA,CAAe,CAAA;AAClB,QAAA,cAAA,CAAe,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,aAAA,EAAe,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,KAAK,CAAC,CAAA;AACjF,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,SAAA,EAAW,EAAE,OAAA,EAAS,KAAK,CAAC,CAAA;AAC/D,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,aAAA,EAAe,IAAI,CAAA;AACvD,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,IAAI,CAAA;AAAA,IACvD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,cAAc,CAAC,CAAA;AAGzB,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAA;AACX,IAAA,MAAM,iBAAA,EAAmB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA;AAC7C,IAAA,MAAM,YAAA,EAAc,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAA;AACxC,IAAA,MAAM,aAAA,EAAe,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA;AACzC,IAAA,MAAM,cAAA,EAAgB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA;AAC1C,IAAA,MAAM,cAAA,EAAgB,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA;AAC1C,IAAA,MAAM,QAAA,EAAU,MAAA,CAAO,OAAA;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,OAAA;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA,CAAA,EAAI,OAAO,CAAA,EAAA,CAAA;AACrC,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAA;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAA;AAC5B,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA;AAC5B,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,gBAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,WAAA;AAC1B,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,YAAA;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,aAAA;AAC5B,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,aAAA;AAC5B,MAAA,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,OAAO,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,uBACE,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,8BAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,cAAA,EAAgB,gCAAA,EAAkC,KAAA,CAAA;AAAA,QAC7D,OAAA,EAAS,CAAA,EAAA,GAAM,cAAA,GAAiB,IAAA,GAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,QAEnD,QAAA,EAAA;AAAA,0BAAA,6BAAA,KAAC,EAAA,EAAI,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAI,EAAA,CAAG,CAAA;AAAA,UAC9C,cAAA,GAAiB,IAAA,mBAChB,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,4HAAA,EAA6H,QAAA,EAAA,gBAAA,CAE5I;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,CAAA;AAAA,IACC,MAAA,mBACC,8BAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0FAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,6BAAA,kCAAC,CAAM,GAAA,EAAN,EAAU,SAAA,EAAU,eAAA,CAAe,CAAA;AAAA,0BACpC,6BAAA,MAAC,EAAA,EAAM,QAAA,EAAA,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACf,CAAA;AAAA,IAID,cAAA,GAAiB,KAAA,mBAChB,8BAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,YAAA,EAAY,OAAO,MAAA,IAAU,SAAA,EAAW,MAAA,EAAQ,iBAAA;AAAA,QAChD,SAAA,EAAU,yDAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,6BAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,8BAAA;AAAA,cACV,OAAA,EAAS,CAAA,EAAA,GAAM;AAAE,gBAAA,OAAA,CAAQ,KAAK,CAAA;AAAG,gBAAA,cAAA,CAAe,CAAA;AAAA,cAAG,CAAA;AAAA,cACnD,OAAA,EAAS,CAAC,CAAA,EAAA,GAAM;AAAE,gBAAA,CAAA,CAAE,cAAA,CAAe,CAAA;AAAG,gBAAA,CAAA,CAAE,eAAA,CAAgB,CAAA;AAAA,cAAG,CAAA;AAAA,cAC3D,WAAA,EAAa,CAAC,CAAA,EAAA,GAAM;AAAE,gBAAA,CAAA,CAAE,cAAA,CAAe,CAAA;AAAG,gBAAA,CAAA,CAAE,eAAA,CAAgB,CAAA;AAAA,cAAG;AAAA,YAAA;AAAA,UACjE,CAAA;AAAA,0BACA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wKAAA,EAEb,QAAA,EAAA;AAAA,4BAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,iGAAA,EACb,QAAA,EAAA;AAAA,8BAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,QAAA,EAAA;AAAA,gCAAA,6BAAA,kCAAC,CAAM,GAAA,EAAN,EAAU,SAAA,EAAU,UAAA,CAAU,CAAA;AAAA,gCAC/B,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,GAAA,KAAA,EAAA,MAAA,EAAS,kBAAA,CAAkB;AAAA,cAAA,EAAA,CACtE,CAAA;AAAA,8BACA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,gCAAA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,UAAA;AAAA,oBACX,SAAA,EAAU,gHAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,MAAA,CAAO,CAAA,GAAI,CAAA;AAAA,oBAC3B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCACA,8BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAmD,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAG,CAAA;AAAA,kBAAE;AAAA,gBAAA,EAAA,CAAC,CAAA;AAAA,gCAC5F,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,SAAA;AAAA,oBACX,SAAA,EAAU,gHAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,MAAA,CAAO,GAAG,CAAA;AAAA,oBAC1B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCAEA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,mDAAA,CAAmD,CAAA;AAAA,gCAClE,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,WAAA;AAAA,oBACX,SAAA,EAAU,kIAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,QAAA,CAAS,CAAC,CAAA;AAAA,oBAC1B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCACA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,WAAA;AAAA,oBACX,SAAA,EAAU,uIAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,QAAA,CAAS,CAAC,CAAA;AAAA,oBAC1B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCACA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,WAAA;AAAA,oBACX,SAAA,EAAU,uIAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,QAAA,CAAS,CAAC,CAAA;AAAA,oBAC1B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCACA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,YAAA;AAAA,oBACX,SAAA,EAAU,wIAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM,QAAA,CAAS,EAAE,CAAA;AAAA,oBAC3B,QAAA,EAAA;AAAA,kBAAA;AAAA,gBAED,CAAA;AAAA,gCACA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,OAAA;AAAA,oBACX,SAAA,EAAU,6FAAA;AAAA,oBACV,OAAA,EAAS,cAAA;AAAA,oBAET,QAAA,kBAAA,6BAAA,kCAAC,CAAM,UAAA,EAAN,EAAiB,SAAA,EAAU,cAAA,CAAc;AAAA,kBAAA;AAAA,gBAC5C,CAAA;AAAA,gCACA,6BAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAW,OAAA;AAAA,oBACX,SAAA,EAAU,6FAAA;AAAA,oBACV,OAAA,EAAS,CAAA,EAAA,GAAM;AAAE,sBAAA,OAAA,CAAQ,KAAK,CAAA;AAAG,sBAAA,cAAA,CAAe,CAAA;AAAA,oBAAG,CAAA;AAAA,oBAEnD,QAAA,kBAAA,6BAAA,kCAAC,CAAM,CAAA,EAAN,EAAQ,SAAA,EAAU,cAAA,CAAc;AAAA,kBAAA;AAAA,gBACnC;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,CACF,CAAA;AAAA,4BAGA,8BAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gHAAA;AAAA,gBACV,OAAA;AAAA,gBACA,aAAA;AAAA,gBACA,aAAA;AAAA,gBACA,WAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAA,6BAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,2BAAA;AAAA,sBACV,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,gCAAA,EAAmC,SAAA,CAAU,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAA,GAAA,EAAM,CAAA;AAAA,sBAE1F,QAAA,kBAAA,6BAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA,EAAK,eAAA,EAAiB,UAAU,CAAA;AAAA,0BAClE,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAI;AAAA,wBAAA;AAAA,sBACzC;AAAA,oBAAA;AAAA,kBACF,CAAA;AAAA,kCAEA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,gGAAA,EAAiG,QAAA,EAAA,8CAAA,CAEhH;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EAAA,CAEJ,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB,GAAA,EAAa,SAAA,EAAmB;AACzD,EAAA,MAAM,cAAA,EAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAA,EAYjB,SAAS,CAAA;AAAA,EAAA,CAAA;AAEd,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,CAAA,EAAA;AAC/B;ADkBgC;AACA;AEjVO;AACNC;AACY;AAkErC;AA/C6C;AACtB,EAAA;AAEA,EAAA;AAEV,IAAA;AACsC,MAAA;AAC5C,IAAA;AACb,EAAA;AAEO,EAAA;AACT;AAYmB;AALjB,EAAA;AAAA,IAAA;AACA,IAAA;AACA,IAAA;AACc,IAAA;AACX,EAAA;AAJH,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAAA,EAAA;AA3CFC,EAAAA;AA8C8BD,EAAAA;AAGF,EAAA;AACX,IAAA;AACe,IAAA;AACL,MAAA;AACvB,IAAA;AACF,EAAA;AAGEE,EAAAA;AAAC,IAAA;AAAA,IAAA;AACa,MAAA;AACA,MAAA;AAFb,IAAA;AAIU,MAAA;AACF,QAAA;AACE,QAAA;AAFA,MAAA;AAIE,QAAA;AACX,MAAA;AAEC,MAAA;AACE,QAAA;AAAA,QAAA;AAEM,UAAA;AACI,UAAA;AACH,UAAA;AACU,UAAA;AACL,UAAA;AACJ,UAAA;AACC,UAAA;AAAA,QAAA;AACV,MAAA;AAAA,IAAA;AAEJ,EAAA;AAEJ;AF6TgC;AACA;AG5X1BC;AAhBqB;AACjB,EAAA;AACR,EAAA;AACA,EAAA;AAKC;AAECA,EAAAA;AAAC,IAAA;AAAA,IAAA;AACW,MAAA;AAKV,MAAA;AAAC,wBAAA;AACE,0BAAA;AACA,0BAAA;AACH,QAAA;AAOC,wBAAA;AAED,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AHkYgC;AACA;AI7YxB;AAtBkB;AACnB,EAAA;AACL,EAAA;AACY,EAAA;AACZ,EAAA;AAMC;AAECD,EAAAA;AAAC,IAAA;AAAA,IAAA;AACQ,MAAA;AACI,QAAA;AACY,QAAA;AAChB,QAAA;AACS,QAAA;AACF,QAAA;AACd,MAAA;AAEa,MAAA;AACV,QAAA;AAAA,QAAA;AAEqB,UAAA;AACC,UAAA;AAAK,QAAA;AAFrB,QAAA;AAIR,MAAA;AAAA,IAAA;AACH,EAAA;AAEJ;AJkagC;AACA;AKjcf;AAkBXC;AANwE;AAAvC,EAAA;AACZ,EAAA;AACA,EAAA;AAEV,EAAA;AAEXA,IAAAA;AAAC,MAAA;AAAA,MAAA;AACa,QAAA;AACH,QAAA;AACE,QAAA;AACT,UAAA;AACA,UAAA;AACM,UAAA;AACR,QAAA;AAPD,MAAA;AAUC,QAAA;AAAC,0BAAA;AAGA,0BAAA;AAEC,UAAA;AAKA,UAAA;AAGE,QAAA;AAAA,MAAA;AACN,IAAA;AAEJ,EAAA;AAEEA,EAAAA;AAAC,IAAA;AAAA,IAAA;AACU,MAAA;AACE,MAAA;AACT,QAAA;AACM,QAAA;AACR,MAAA;AALD,IAAA;AAQC,MAAA;AAAC,wBAAA;AAGA,wBAAA;AAEC,QAAA;AAKA,QAAA;AAGE,MAAA;AAAA,IAAA;AACN,EAAA;AAEJ;ALyagC;AACA;AMlfvBH;AACiB;AACI;AACb;AA+DT;AA3DU;AAOc;AACF,EAAA;AACH,EAAA;AACH,EAAA;AACF,EAAA;AAEO,EAAA;AACV,IAAA;AAGa,IAAA;AACV,IAAA;AACO,IAAA;AACV,IAAA;AACW,MAAA;AAC1B,IAAA;AACY,IAAA;AAER,IAAA;AACA,IAAA;AACqB,MAAA;AACD,QAAA;AACf,MAAA;AACmB,QAAA;AACX,QAAA;AACD,UAAA;AACL,QAAA;AACe,UAAA;AAEF,UAAA;AACpB,QAAA;AACF,MAAA;AAC0B,MAAA;AACZ,IAAA;AACW,MAAA;AACC,MAAA;AACZ,MAAA;AACd,IAAA;AACgB,MAAA;AAClB,IAAA;AACD,EAAA;AAGCE,EAAAA;AAAC,IAAA;AAAA,IAAA;AACS,MAAA;AACH,MAAA;AACI,MAAA;AAEC,MAAA;AACV,MAAA;AAGE,MAAA;AACG,wBAAA;AAAa,QAAA;AAIhBC,MAAAA;AACG,wBAAA;AAAgB,QAAA;AAEnB,MAAA;AAAA,IAAA;AAEJ,EAAA;AAEJ;AAEuD;AAEnDA,EAAAA;AAACC,IAAAA;AAAA,IAAA;AACW,MAAA;AACJ,MAAA;AAEN,MAAA;AAAC,wBAAA;AAAc,QAAA;AAAA,MAAA;AAAA,IAAA;AAEjB,EAAA;AAEJ;AAGuC;AAElC,EAAA;AACE,oBAAA;AAAmB,IAAA;AACM,IAAA;AAC5B,EAAA;AAEJ;AN+dgC;AACA;AOpkBvBC;AAmBHF;AAHwB;AAEzB,EAAA;AACE,oBAAA;AACE,sBAAA;AACA,sBAAA;AACH,IAAA;AACC,oBAAA;AACH,EAAA;AAEJ;AAG8B;AAE1BA,EAAAA;AAAC,IAAA;AAAA,IAAA;AACO,MAAA;AACF,MAAA;AACG,MAAA;AACI,MAAA;AAEX,MAAA;AAAC,wBAAA;AACE,0BAAA;AACCD,4BAAAA;AACAA,4BAAAA;AACF,UAAA;AACC,UAAA;AAAM,UAAA;AAAE,UAAA;AACX,QAAA;AACC,wBAAA;AACE,0BAAA;AAAwC,UAAA;AAE3C,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAG2B;AACzB,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACgF;AACzD,EAAA;AAGrBC,EAAAA;AAAC,IAAA;AAAA,IAAA;AACO,MAAA;AACF,MAAA;AACG,MAAA;AACI,MAAA;AAEX,MAAA;AAAC,wBAAA;AACE,0BAAA;AACCD,4BAAAA;AACAA,4BAAAA;AACF,UAAA;AACC,UAAA;AAAM,UAAA;AAAE,UAAA;AACX,QAAA;AACC,wBAAA;AACE,0BAAA;AACA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAK6C;AAC3B,EAAA;AACM,IAAA;AACtB,EAAA;AAEkB,EAAA;AACW,IAAA;AACJ,IAAA;AACC,IAAA;AAC1B,EAAA;AAEmB,EAAA;AACU,IAAA;AAC7B,EAAA;AAEoB,EAAA;AACtB;AAYiC;AACPF,EAAAA;AACMA,EAAAA;AACJA,EAAAA;AAEV,EAAA;AACoB,IAAA;AAC5B,MAAA;AACa,QAAA;AACF,QAAA;AAGU,QAAA;AACL,QAAA;AAEE,QAAA;AACR,UAAA;AACX,QAAA;AAEU,QAAA;AACG,UAAA;AACd,QAAA;AAEuB,QAAA;AACF,UAAA;AACnB,UAAA;AACD,QAAA;AAEqB,QAAA;AAEJ,QAAA;AACA,UAAA;AAClB,QAAA;AAEuB,QAAA;AACf,QAAA;AACY,UAAA;AACI,UAAA;AACvB,QAAA;AACW,MAAA;AACC,QAAA;AACM,QAAA;AACA,UAAA;AACN,YAAA;AACJ,UAAA;AACI,YAAA;AACX,UAAA;AACK,QAAA;AACI,UAAA;AACX,QAAA;AACA,MAAA;AACgB,QAAA;AAClB,MAAA;AACF,IAAA;AAEc,IAAA;AACO,EAAA;AAGV,EAAA;AACH,IAAA;AACV,EAAA;AAGoB,EAAA;AACV,IAAA;AACV,EAAA;AAIEE,EAAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACA,MAAA;AACY,MAAA;AACZ,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;APwhBgC;AACA;AQxtBcF;AAE9C;AACE;AACA;AACA;AACK;AAEU;AAiCXG;AA/Be;AAEA;AAuBgB;AANnC,EAAA;AAAA,IAAA;AACQ,IAAA;AACR,IAAA;AACA,IAAA;AACA,IAAA;AACG,EAAA;AALH,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAAA,EAAA;AAGyB,EAAA;AACG,EAAA;AAEb,EAAA;AAEXA,IAAAA;AACG,MAAA;AACA,sBAAA;AACgB,MAAA;AACnB,IAAA;AAEJ,EAAA;AAEG,EAAA;AACE,IAAA;AACA,oBAAA;AACgB,IAAA;AACnB,EAAA;AAEJ;AASuC;AANrC,EAAA;AAAA,IAAA;AACA,IAAA;AACc,IAAA;AACd,IAAA;AACA,IAAA;AACG,EAAA;AALH,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAAA,EAAA;AAGwBH,EAAAA;AACI,EAAA;AAGzB,EAAA;AACE,oBAAA;AACSE,MAAAA;AACP,sBAAA;AAEC,MAAA;AAEJ,IAAA;AACC,oBAAA;AAGH,EAAA;AAEJ;ARusBgC;AACA;AS7wB5BC;AAH+B;AAChB,EAAA;AAEd,EAAA;AACE,oBAAA;AACA,IAAA;AACYD,IAAAA;AACf,EAAA;AAEJ;ATixBgC;AACA;AUryBZ;AACUG;AA8B1B;AA1BmB;AACrB,EAAA;AACA,EAAA;AACY,IAAA;AACD,MAAA;AAEH,QAAA;AACO,QAAA;AACF,QAAA;AAEL,QAAA;AACJ,MAAA;AACM,MAAA;AACA,QAAA;AACE,QAAA;AACK,QAAA;AACb,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAGE;AAGA;AACEH,kBAAAA;AAAC,IAAA;AAAA,IAAA;AACW,MAAA;AAER,MAAA;AACE,QAAA;AACe,QAAA;AACJ,QAAA;AACA,QAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACW,QAAA;AAElB,QAAA;AACc,QAAA;AACF,QAAA;AAChB,MAAA;AAAA,IAAA;AAEJ,EAAA;AACAA,kBAAAA;AAAC,IAAA;AAAA,IAAA;AACW,MAAA;AAER,MAAA;AACE,QAAA;AACe,QAAA;AACJ,QAAA;AACA,QAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AAEP,QAAA;AACc,QAAA;AACF,QAAA;AAChB,MAAA;AAAA,IAAA;AAEJ,EAAA;AACC,kBAAA;AACE;AAAA;AAIH,UAAA;AACF;AA0BC;AAtBD,EAAA;AAAA,IAAA;AACU,IAAA;AACK,IAAA;AACN,IAAA;AACN,EAAA;AAJH,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAAA,EAAA;AAoBwBF,EAAAA;AACD,EAAA;AACO,EAAA;AAEd,EAAA;AACS,IAAA;AACX,EAAA;AAEI,EAAA;AAGhBG,EAAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AADD,IAAA;AAGY,MAAA;AACT,QAAA;AACA,QAAA;AACS,QAAA;AACH,QAAA;AACR,MAAA;AACO,MAAA;AAAA;AAEK,QAAA;AACL,QAAA;AACC,QAAA;AACC,QAAA;AACC,QAAA;AACA,QAAA;AACG,QAAA;AACA,QAAA;AACH,QAAA;AACM,QAAA;AAChB,MAAA;AAGC,MAAA;AACC,QAAA;AAGA,QAAA;AAAC,UAAA;AAAA,UAAA;AACC,YAAA;AACU,cAAA;AACV,YAAA;AAAA,UAAA;AAEA,QAAA;AAEqB,QAAA;AAClB,QAAA;AAELD,QAAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACM,YAAA;AACI,YAAA;AACA,cAAA;AACE,cAAA;AACjB,YAAA;AACW,YAAA;AACM,cAAA;AACN,gBAAA;AAEL,gBAAA;AACI,gBAAA;AACP,cAAA;AACH,YAAA;AAEA,YAAA;AAAS,UAAA;AAET,QAAA;AAAA,MAAA;AAAA,IAAA;AACN,EAAA;AAEJ;AV0wBgC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/funeye/IdeaProjects/next-ai-build/packages/third-ui/dist/chunk-6PW67OXW.js","sourcesContent":[null,"'use client';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\n// Attention: do not use external dialog library, avoid react context conflict when building third-party applications\nimport type { MermaidConfig } from 'mermaid';\nimport { useTheme } from 'next-themes';\nimport { useCallback, useEffect, useId, useRef, useState } from 'react';\n\ninterface MermaidProps {\n chart: string;\n title?: string;\n watermarkEnabled?: boolean;\n watermarkText?: string;\n /**\n * enable preview dialog by clicking the chart, default is true\n */\n enablePreview?: boolean;\n}\n \nexport function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview = true }: MermaidProps) {\n const id = useId();\n const [svg, setSvg] = useState('');\n const { resolvedTheme } = useTheme();\n const [open, setOpen] = useState(false);\n // zoom & pan states for preview dialog\n const [scale, setScale] = useState(1);\n const [translate, setTranslate] = useState({ x: 0, y: 0 });\n const isPanningRef = useRef(false);\n const startPointRef = useRef({ x: 0, y: 0 });\n const startTranslateRef = useRef({ x: 0, y: 0 });\n \n useEffect(() => {\n let isMounted = true;\n void renderChart();\n \n async function renderChart() {\n const mermaidConfig: MermaidConfig = {\n startOnLoad: false,\n securityLevel: 'loose',\n fontFamily: 'inherit',\n themeCSS: 'margin: 1.5rem auto 0;',\n theme: resolvedTheme === 'dark' ? 'dark' : 'default',\n };\n \n const { default: mermaid } = await import('mermaid');\n \n try {\n mermaid.initialize(mermaidConfig);\n const { svg } = await mermaid.render(\n id.replaceAll(':', ''),\n chart.replaceAll('\\\\n', '\\n')\n );\n let svgWithWatermark = svg;\n if (watermarkEnabled && watermarkText) {\n svgWithWatermark = addWatermarkToSvg(svg, watermarkText);\n }\n if (isMounted) setSvg(svgWithWatermark);\n } catch (error) {\n console.error('Error while rendering mermaid', error);\n }\n }\n return () => {\n isMounted = false;\n setSvg('');\n };\n }, [chart, id, resolvedTheme, watermarkEnabled, watermarkText]);\n\n // helpers for preview zoom\n const clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), max);\n const resetTransform = useCallback(() => {\n setScale(4); // 400%\n setTranslate({ x: 0, y: 0 });\n }, []);\n\n const zoomBy = useCallback((delta: number) => {\n // zoom by center: keep the zoom center at the center of the canvas, without introducing displacement\n setScale((prev) => clamp(prev + delta, 0.25, 10));\n }, []);\n\n const onWheel = useCallback((e: React.WheelEvent<HTMLDivElement>) => {\n // Cmd/Ctrl + wheel zoom (around the center point), otherwise up and down panning\n if (e.metaKey || e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n const delta = e.deltaY > 0 ? -0.1 : 0.1;\n setScale((prev) => clamp(prev + delta, 0.25, 10));\n } else {\n // two-finger pan on touchpad: support both horizontal (deltaX) and vertical (deltaY)\n e.preventDefault();\n e.stopPropagation();\n setTranslate((prev) => ({ x: prev.x - e.deltaX, y: prev.y - e.deltaY }));\n }\n }, []);\n\n const onPointerDown = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n isPanningRef.current = true;\n startPointRef.current = { x: e.clientX, y: e.clientY };\n startTranslateRef.current = { ...translate };\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n }, [translate]);\n\n const onPointerMove = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n if (!isPanningRef.current) return;\n const dx = e.clientX - startPointRef.current.x;\n const dy = e.clientY - startPointRef.current.y;\n setTranslate({ x: startTranslateRef.current.x + dx, y: startTranslateRef.current.y + dy });\n }, []);\n\n const onPointerUp = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n isPanningRef.current = false;\n (e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\n }, []);\n\n // prevent browser-level zoom (touchpad pinch/shortcut) from taking effect when the dialog is open\n useEffect(() => {\n if (!open) return;\n // 初次打开时,默认放大到 400%\n resetTransform();\n const onGlobalWheel = (ev: WheelEvent) => {\n if (ev.ctrlKey || ev.metaKey) {\n ev.preventDefault();\n }\n };\n const onKeyDown = (ev: KeyboardEvent) => {\n if (!(ev.ctrlKey || ev.metaKey)) return;\n const k = ev.key;\n if (k === '=' || k === '+') {\n ev.preventDefault();\n setScale((prev) => clamp(prev + 0.2, 0.25, 10));\n } else if (k === '-') {\n ev.preventDefault();\n setScale((prev) => clamp(prev - 0.2, 0.25, 10));\n } else if (k === '0') {\n ev.preventDefault();\n resetTransform();\n }\n };\n window.addEventListener('wheel', onGlobalWheel, { passive: false, capture: true });\n window.addEventListener('keydown', onKeyDown, { capture: true });\n return () => {\n window.removeEventListener('wheel', onGlobalWheel, true);\n window.removeEventListener('keydown', onKeyDown, true);\n };\n }, [open, resetTransform]);\n\n // Lock background scroll when dialog is open\n useEffect(() => {\n if (!open) return;\n const previousPosition = document.body.style.position;\n const previousTop = document.body.style.top;\n const previousLeft = document.body.style.left;\n const previousRight = document.body.style.right;\n const previousWidth = document.body.style.width;\n const scrollY = window.scrollY;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = '0';\n document.body.style.right = '0';\n document.body.style.width = '100%';\n return () => {\n document.body.style.position = previousPosition;\n document.body.style.top = previousTop;\n document.body.style.left = previousLeft;\n document.body.style.right = previousRight;\n document.body.style.width = previousWidth;\n window.scrollTo(0, scrollY);\n };\n }, [open]);\n \n return (\n <div>\n <div\n className={enablePreview ? 'group relative cursor-zoom-in' : undefined}\n onClick={() => enablePreview && svg && setOpen(true)}\n >\n <div dangerouslySetInnerHTML={{ __html: svg }} />\n {enablePreview && svg && (\n <div className=\"pointer-events-none absolute right-2 top-2 hidden rounded bg-black/50 px-2 py-0.5 text-[12px] text-white group-hover:block\">\n Preview Chart\n </div>\n )}\n </div>\n {title && (\n <div\n className=\"mt-2 flex items-center justify-center text-center text-[13px] font-italic text-[#AC62FD]\"\n >\n <icons.Mmd className='mr-1 h-4 w-4' />\n <span>{title}</span>\n </div>\n )}\n\n {/* Preview Dialog (custom minimal dialog) */}\n {enablePreview && open && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === 'string' ? title : 'Mermaid Preview'}\n className=\"fixed inset-0 z-[9999] flex items-center justify-center\"\n >\n <div\n className=\"absolute inset-0 bg-black/60\"\n onClick={() => { setOpen(false); resetTransform(); }}\n onWheel={(e) => { e.preventDefault(); e.stopPropagation(); }}\n onTouchMove={(e) => { e.preventDefault(); e.stopPropagation(); }}\n />\n <div className=\"relative z-[1] max-w-[95vw] w-[95vw] h-[88vh] p-0 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-700 rounded-md shadow-2xl overflow-hidden\">\n {/* Top bar */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-neutral-200 dark:border-neutral-700\">\n <div className=\"flex items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300\">\n <icons.Mmd className=\"h-4 w-4\" />\n <span className=\"truncate max-w-[50vw]\">{title ?? 'Mermaid Preview'}</span>\n </div>\n <div className=\"flex items-center gap-0.5\">\n <button\n aria-label=\"Zoom out\"\n className=\"flex h-6 w-6 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 text-[13px]\"\n onClick={() => zoomBy(-0.5)}\n >\n -\n </button>\n <span className=\"mx-0.5 text-[12px] w-12 text-center select-none\">{Math.round(scale * 100)}%</span>\n <button\n aria-label=\"Zoom in\"\n className=\"flex h-6 w-6 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 text-[13px]\"\n onClick={() => zoomBy(0.5)}\n >\n +\n </button>\n {/* quick zoom shortcuts */}\n <div className=\"mx-1 h-4 w-px bg-neutral-300 dark:bg-neutral-700\" />\n <button\n aria-label=\"Zoom 100%\"\n className=\"inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]\"\n onClick={() => setScale(1)}\n >\n X1\n </button>\n <button\n aria-label=\"Zoom 200%\"\n className=\"ml-1 inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]\"\n onClick={() => setScale(2)}\n >\n X2\n </button>\n <button\n aria-label=\"Zoom 300%\"\n className=\"ml-1 inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]\"\n onClick={() => setScale(3)}\n >\n X3\n </button>\n <button\n aria-label=\"Zoom 1000%\"\n className=\"ml-1 inline-flex h-6 min-w-10 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]\"\n onClick={() => setScale(10)}\n >\n X10\n </button>\n <button\n aria-label=\"Reset\"\n className=\"ml-1 flex h-6 w-6 items-center justify-center rounded text-purple-500 hover:text-purple-600\"\n onClick={resetTransform}\n >\n <icons.RefreshCcw className=\"h-3.5 w-3.5\" />\n </button>\n <button\n aria-label=\"Close\"\n className=\"ml-1 flex h-6 w-6 items-center justify-center rounded text-purple-500 hover:text-purple-600\"\n onClick={() => { setOpen(false); resetTransform(); }}\n >\n <icons.X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <div\n className=\"relative h-[calc(88vh-40px)] w-full overflow-hidden bg-white dark:bg-neutral-900 touch-none overscroll-contain\"\n onWheel={onWheel}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n <div\n className=\"absolute left-1/2 top-1/2\"\n style={{ transform: `translate(-50%, -50%) translate(${translate.x}px, ${translate.y}px)` }}\n >\n <div\n style={{ transform: `scale(${scale})`, transformOrigin: '50% 50%' }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n </div>\n {/* helper text */}\n <div className=\"pointer-events-none absolute bottom-2 right-3 rounded bg-black/40 px-2 py-1 text-xs text-white\">\n Drag to pan, hold Cmd/Ctrl + scroll to zoom\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction addWatermarkToSvg(svg: string, watermark: string) {\n const watermarkText = `\n <text\n x=\"100%\"\n y=\"98%\"\n text-anchor=\"end\"\n font-size=\"12\"\n font-style=\"italic\"\n fill=\"#AC62FD\"\n opacity=\"0.40\"\n class=\"pointer-events-none\"\n dx=\"-8\"\n dy=\"-4\"\n >${watermark}</text>\n `;\n return svg.replace('</svg>', `${watermarkText}</svg>`);\n}","'use client';\nimport { Image, type ImageProps } from 'fumadocs-core/framework';\nimport { type ImgHTMLAttributes, useState } from 'react';\nimport Zoom, { type UncontrolledProps } from 'react-medium-image-zoom';\n\nexport type ImageZoomProps = ImageProps & {\n /**\n * Image props when zoom in\n */\n zoomInProps?: ImgHTMLAttributes<HTMLImageElement>;\n\n /**\n * Props for `react-medium-image-zoom`\n */\n rmiz?: UncontrolledProps;\n\n /**\n * placeholder image path\n */\n fallbackSrc?: string;\n};\n\nfunction getImageSrc(src: ImageProps['src']): string {\n if (typeof src === 'string') return src;\n\n if (typeof src === 'object') {\n // Next.js\n if ('default' in src)\n return (src as { default: { src: string } }).default.src;\n return src.src;\n }\n\n return '';\n}\n\n/**\n * @example\n * <ImageZoom src=\"URL\" fallbackSrc=\"/my-placeholder.png\" />\n */\nexport function ImageZoom({\n zoomInProps,\n children,\n rmiz,\n fallbackSrc = 'https://r2.d8ger.com/default.webp',\n ...props\n}: ImageZoomProps) {\n const [imgSrc, setImgSrc] = useState(getImageSrc(props.src));\n\n // fallback logic\n const handleError = () => {\n console.warn('ImageZoom check error:', imgSrc, fallbackSrc);\n if (imgSrc !== fallbackSrc) {\n setImgSrc(fallbackSrc);\n }\n };\n\n return (\n <Zoom\n zoomMargin={20}\n wrapElement=\"span\"\n {...rmiz}\n zoomImg={{\n src: imgSrc,\n sizes: undefined,\n ...zoomInProps,\n onError: handleError,\n }}\n >\n {children ?? (\n <Image\n {...props}\n src={imgSrc}\n onError={handleError}\n sizes=\"(max-width: 400px) 100vw, 300px\"\n style={{ width: '100%', height: 'auto', maxWidth: 300 }}\n alt={props.alt ?? ''}\n width={300}\n height={225}\n />\n )}\n </Zoom>\n );\n}","'use client';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\nimport React from 'react';\n\nexport function TrophyCard({\n icon = <icons.Star />,\n title,\n children,\n}: {\n icon?: React.ReactNode;\n title: React.ReactNode;\n children?: React.ReactNode;\n}) {\n return (\n <div\n className=\"\n border-2 rounded-xl px-4 py-2\n border-purple-200 dark:border-gray-500\n \"\n >\n <div className=\"flex items-center font-bold text-sm\">\n <span className=\"mr-2\">{icon}</span>\n <span>{title}</span>\n </div>\n {/* leading-none:line-height: 1\n leading-tight:line-height: 1.25\n leading-snug:line-height: 1.375\n leading-normal:line-height: 1.5\n leading-relaxed:line-height: 1.625\n leading-loose:line-height: 2 */}\n <div className=\"text-sm -mt-1 leading-none\">\n {children}\n </div>\n </div>\n );\n}","'use client';\nimport { ImageZoom } from '@third-ui/fuma/mdx/image-zoom';\n\nexport function ImageGrid({\n type=\"url\",\n images,\n altPrefix = '',\n cdnBaseUrl,\n}: {\n type: \"url\" | \"local\";\n images: string[];\n altPrefix?: string;\n cdnBaseUrl?: string;\n}) {\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: '16px',\n justifyItems: 'center',\n alignItems: 'center', \n }}\n >\n {images.map((img, idx) => (\n <ImageZoom\n key={img}\n src={img.startsWith('http://') || img.startsWith('https://') ? img : (type === \"url\" ? `${cdnBaseUrl?.replace(/\\/+$/, '')}/${img.replace(/^\\/+/, '')}` : img)}\n alt={`${altPrefix}-${idx+1}`}\n />\n ))}\n </div>\n );\n} ","'use client';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\nimport { cn } from '@lib/utils';\nimport Link from 'next/link';\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nexport type ZiaCardProps = Omit<HTMLAttributes<HTMLElement>, 'title'> & {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n\n href?: string;\n external?: boolean;\n};\n\nexport function ZiaCard({ icon, title, description, ...props }: ZiaCardProps) {\n const validHref = typeof props.href === 'string' && props.href.trim() !== '';\n const validDescription = typeof description === 'string' && description?.trim() !== '';\n\n if (validHref) {\n return (\n <Link\n href={props.href!}\n data-card\n className={cn(\n 'block rounded-lg border bg-fd-card p-4 text-fd-card-foreground shadow-md transition-colors @max-lg:col-span-full',\n 'hover:bg-fd-accent/80',\n props.className,\n )}\n {...props}\n >\n <div className=\"not-prose mb-2 w-fit rounded-md border bg-fd-muted p-1.5 text-fd-muted-foreground [&_svg]:size-4\">\n {icon ? icon : <icons.CircleSmall />}\n </div>\n <h3 className=\"not-prose mb-1 text-sm font-medium line-clamp-2 min-h-[2.5rem]\">{title}</h3>\n {validDescription ? (\n <p className=\"!my-0 text-sm text-fd-muted-foreground\">{description}</p>\n ) : (\n <p className=\"!my-0 text-sm text-fd-muted-foreground opacity-0 select-none\">&nbsp;</p>\n )}\n {props.children ? (\n <div className=\"text-sm text-fd-muted-foreground prose-no-margin\">\n {props.children}\n </div>\n ) : null}\n </Link>\n );\n }\n return (\n <div\n data-card\n className={cn(\n 'block rounded-lg border bg-fd-card p-4 text-fd-card-foreground shadow-md transition-colors @max-lg:col-span-full',\n props.className,\n )}\n {...props}\n >\n <div className=\"not-prose mb-2 w-fit rounded-md border bg-fd-muted p-1.5 text-fd-muted-foreground [&_svg]:size-4\">\n {icon ? icon : <icons.CircleSmall />}\n </div>\n <h3 className=\"not-prose mb-1 text-sm font-medium line-clamp-2 min-h-[2.5rem]\">{title}</h3>\n {validDescription ? (\n <p className=\"!my-0 text-sm text-fd-muted-foreground\">{description}</p>\n ) : (\n <p className=\"!my-0 text-sm text-fd-muted-foreground opacity-0 select-none\">&nbsp;</p>\n )}\n {props.children ? (\n <div className=\"text-sm text-fd-muted-foreground prose-no-margin\">\n {props.children}\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\nimport { useState } from 'react';\nimport { useParams } from 'next/navigation';\nimport { useCopyButton } from 'fumadocs-ui/utils/use-copy-button';\nimport Link from 'fumadocs-core/link';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\nimport { Button } from '@base-ui/ui/button';\n\nconst cache = new Map<string, string>();\n\nexport interface LLMCopyButtonProps {\n llmApiUrl?: string;\n sourceKey?: string;\n}\n\nexport function LLMCopyButton({ llmApiUrl, sourceKey }: LLMCopyButtonProps = {}) {\n const [isLoading, setLoading] = useState(false);\n const params = useParams();\n const locale = params.locale as string;\n const slug = params.slug as string[];\n\n const [checked, onClick] = useCopyButton(async () => {\n setLoading(true);\n\n // Handle cases where slug might be undefined or empty\n const path = (slug && Array.isArray(slug)) ? slug.join('/') : '';\n const apiPrefix = llmApiUrl || (sourceKey ? `/api/${sourceKey}/llm-content` : '/api/llm-content');\n let apiUrl = `${apiPrefix}?locale=${encodeURIComponent(locale)}&path=${encodeURIComponent(path)}`;\n if (sourceKey) {\n apiUrl += `&sourceKey=${encodeURIComponent(sourceKey)}`;\n }\n console.log('Fetching LLM content from:', apiUrl);\n\n let content: string;\n try {\n if (cache.has(apiUrl)) {\n content = cache.get(apiUrl)!;\n } else {\n const res = await fetch(apiUrl);\n if (!res.ok) {\n content = `Error: Failed to fetch LLM content: ${res.status} ${res.statusText}`;\n } else {\n content = await res.text();\n // only success then store cache\n cache.set(apiUrl, content); \n }\n }\n await navigator.clipboard.writeText(content);\n } catch (error) {\n const errMsg = `Error: ${error instanceof Error ? error.message : String(error)}`;\n await navigator.clipboard.writeText(errMsg);\n console.error(\"Error fetching or copying LLM content:\", error);\n } finally {\n setLoading(false);\n }\n });\n\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n loading={isLoading}\n // force button to left align\n className=\"justify-start px-0 text-stone-600 hover:text-stone-500 dark:text-stone-400 dark:hover:text-stone-300\"\n onClick={onClick}\n >\n {checked ? (\n <>\n <icons.Check/>\n Copied!\n </>\n ) : (\n <>\n <icons.Markdown/>\n Copy page as Markdown\n </>\n )}\n </Button>\n );\n}\n\nexport function EditOnGitHub({ url }: { url: string }) {\n return (\n <Link\n className=\"flex items-center gap-x-2 text-stone-600 hover:text-stone-500 dark:text-stone-400 dark:hover:text-stone-300 text-sm\"\n href={url}\n >\n <icons.GitHub/>\n Edit this page on GitHub\n </Link>\n );\n}\n\n// New component for displaying the last updated date with an icon\nexport function LastUpdatedDate({ date }: { date: string | undefined }) {\n return (\n <div className=\"flex items-center gap-x-2 text-stone-600 dark:text-stone-400 text-sm\">\n <icons.LastUpdated/>\n Lastest on {date ? date : \"Ages ago\"}\n </div>\n );\n}","'use client';\nimport { useEffect, useState } from 'react';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\n\ninterface FumaGithubInfoProps {\n owner: string;\n repo: string;\n token?: string;\n className?: string;\n}\n\ninterface GitHubRepoData {\n stargazers_count: number;\n forks_count: number;\n}\n\n// Loading state component\nfunction GitHubInfoSkeleton({ owner, repo, className }: Pick<FumaGithubInfoProps, 'owner' | 'repo' | 'className'>) {\n return (\n <div className={`flex flex-col gap-1.5 p-2 rounded-lg text-sm text-fd-foreground/80 lg:flex-row lg:items-center animate-pulse ${className}`}>\n <div className=\"flex items-center gap-2\">\n <div className=\"size-3.5 bg-fd-muted rounded\"></div>\n <div className=\"h-4 bg-fd-muted rounded w-20\"></div>\n </div>\n <div className=\"h-3 bg-fd-muted rounded w-8\"></div>\n </div>\n );\n}\n\n// Error state component - graceful fallback\nfunction GitHubInfoFallback({ owner, repo, className }: Pick<FumaGithubInfoProps, 'owner' | 'repo' | 'className'>) {\n return (\n <a\n href={`https://github.com/${owner}/${repo}`}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n className={`flex flex-col gap-1.5 p-2 rounded-lg text-sm text-fd-foreground/80 transition-colors lg:flex-row lg:items-center hover:text-fd-accent-foreground hover:bg-fd-accent ${className}`}\n >\n <p className=\"flex items-center gap-2 truncate\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" className=\"size-3.5\">\n <title>GitHub</title>\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n {owner}/{repo}\n </p>\n <p className=\"flex text-xs items-center gap-1 text-fd-muted-foreground\">\n <icons.ExternalLink className=\"size-3\" />\n GitHub\n </p>\n </a>\n );\n}\n\n// Success state component\nfunction GitHubInfoSuccess({ \n owner, \n repo, \n stars, \n className \n}: Pick<FumaGithubInfoProps, 'owner' | 'repo' | 'className'> & { stars: number }) {\n const humanizedStars = humanizeNumber(stars);\n\n return (\n <a\n href={`https://github.com/${owner}/${repo}`}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n className={`flex flex-col gap-1.5 p-2 rounded-lg text-sm text-fd-foreground/80 transition-colors lg:flex-row lg:items-center hover:text-fd-accent-foreground hover:bg-fd-accent ${className}`}\n >\n <p className=\"flex items-center gap-2 truncate\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" className=\"size-3.5\">\n <title>GitHub</title>\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n {owner}/{repo}\n </p>\n <p className=\"flex text-xs items-center gap-1 text-fd-muted-foreground\">\n <icons.Star className=\"size-3\" />\n {humanizedStars}\n </p>\n </a>\n );\n}\n\n/**\n * Humanize number display\n */\nfunction humanizeNumber(num: number): string {\n if (num < 1000) {\n return num.toString();\n }\n\n if (num < 100000) {\n const value = (num / 1000).toFixed(1);\n const formattedValue = value.endsWith('.0') ? value.slice(0, -2) : value;\n return `${formattedValue}K`;\n }\n\n if (num < 1000000) {\n return `${Math.floor(num / 1000)}K`;\n }\n\n return num.toString();\n}\n\n/**\n * GitHub repository information component with graceful fallback\n * \n * Features:\n * - 🛡️ Client-side rendering, avoiding server-side network issues\n * - ⏱️ 5 second timeout control\n * - 🎯 Graceful fallback: display basic link when network fails\n * - 🎨 Three states: loading, success, error\n * - 💯 Not affected by network issues causing page crashes\n */\nexport function FumaGithubInfo({ owner, repo, token, className }: FumaGithubInfoProps) {\n const [data, setData] = useState<GitHubRepoData | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchRepoData = async () => {\n try {\n setLoading(true);\n setError(null);\n\n // Add timeout control\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const headers = new Headers({\n 'Accept': 'application/vnd.github.v3+json',\n });\n\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n signal: controller.signal,\n headers,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new Error(`GitHub API response error: ${response.status}`);\n }\n\n const repoData = await response.json();\n setData({\n stargazers_count: repoData.stargazers_count,\n forks_count: repoData.forks_count,\n });\n } catch (err) {\n console.warn('GitHub API call failed:', err);\n if (err instanceof Error) {\n if (err.name === 'AbortError') {\n setError('Request timeout');\n } else {\n setError('Failed to get repository information');\n }\n } else {\n setError('Unknown error');\n }\n } finally {\n setLoading(false);\n }\n };\n\n fetchRepoData();\n }, [owner, repo, token]);\n\n // Loading state\n if (loading) {\n return <GitHubInfoSkeleton owner={owner} repo={repo} className={className} />;\n }\n\n // Error state - graceful fallback\n if (error || !data) {\n return <GitHubInfoFallback owner={owner} repo={repo} className={className} />;\n }\n\n // Success state\n return (\n <GitHubInfoSuccess \n owner={owner} \n repo={repo} \n stars={data.stargazers_count} \n className={className} \n />\n );\n} ","import { globalLucideIcons as icons } from '@base-ui/components/global-icon'; \nimport { type HTMLAttributes, type ReactNode, useState } from 'react';\nimport { cn } from '@lib/utils';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from 'fumadocs-ui/components/ui/collapsible';\nimport React from 'react';\nimport Link from 'next/link';\n\nconst itemVariants = 'flex flex-row items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-fd-accent hover:text-fd-accent-foreground [&_svg]:size-4';\n\nconst anotionClass = 'ms-2 px-2 py-0.5 rounded text-xs font-semibold bg-fd-accent/80 text-fd-accent-foreground dark:bg-white/20 dark:text-white';\n\nexport interface ZiaFileProps extends HTMLAttributes<HTMLDivElement> {\n name: string;\n icon?: ReactNode;\n anotion?: string;\n href?: string;\n}\n\nexport interface ZiaFolderProps extends HTMLAttributes<HTMLDivElement> {\n name: string;\n anotion?: string;\n disabled?: boolean;\n defaultOpen?: boolean;\n}\n\nexport function ZiaFile({\n name,\n icon = <icons.File />,\n className,\n anotion,\n href,\n ...rest\n}: ZiaFileProps): React.ReactElement {\n const validHref = typeof href === 'string' && href.trim() !== '';\n const validAnotion = typeof anotion === 'string' && anotion.trim() !== '';\n\n if (validHref) {\n return (\n <Link href={href} className={cn(itemVariants, className)}>\n {icon}\n <span>{name}</span>\n {validAnotion && <span className={anotionClass}>{anotion}</span>}\n </Link>\n );\n }\n return (\n <div className={cn(itemVariants, className)} {...rest}>\n {icon}\n <span>{name}</span>\n {validAnotion && <span className={anotionClass}>{anotion}</span>}\n </div>\n );\n}\n\nexport function ZiaFolder({\n name,\n anotion,\n defaultOpen = false,\n className,\n children,\n ...props\n}: ZiaFolderProps): React.ReactElement {\n const [open, setOpen] = useState(defaultOpen);\n const validAnotion = typeof anotion === 'string' && anotion.trim() !== '';\n\n return (\n <Collapsible open={open} onOpenChange={setOpen} {...props}>\n <CollapsibleTrigger className={cn(itemVariants, className, 'w-full')}>\n {open ? <icons.FolderOpen /> : <icons.Folder />}\n <span>{name}</span>\n {validAnotion && (\n <span className={anotionClass}>{anotion}</span>\n )}\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"ms-2 flex flex-col border-l ps-2\">{children}</div>\n </CollapsibleContent>\n </Collapsible>\n );\n} ","'use client';\nimport { EditOnGitHub, LastUpdatedDate } from '@third-ui/fuma/mdx/toc-base';\nimport React from 'react';\n\ninterface TocFooterProps {\n lastModified: string | undefined;\n editPath?: string;\n githubBaseUrl?: string;\n copyButtonComponent?: React.ReactNode;\n}\n\nexport function TocFooterWrapper({ lastModified, editPath, githubBaseUrl, copyButtonComponent }: TocFooterProps) {\n const showEdit = githubBaseUrl && editPath;\n return (\n <div className=\"flex flex-col gap-y-2 items-start m-4\">\n <LastUpdatedDate date={lastModified} />\n {copyButtonComponent}\n {showEdit && <EditOnGitHub url={`${githubBaseUrl}${editPath}`} />}\n </div>\n );\n} ","'use client';\nimport { cva } from 'class-variance-authority';\nimport { type HTMLAttributes, useEffect, useState } from 'react';\nimport { globalLucideIcons as icons } from '@base-ui/components/global-icon';\nimport { cn } from '@lib/utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md p-2 text-sm font-medium transition-colors duration-100 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n color: {\n primary:\n 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline: 'border hover:bg-accent hover:text-accent-foreground',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'border bg-secondary text-secondary-foreground hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n sm: 'gap-1 px-2 py-1.5 text-xs',\n icon: 'p-1.5 [&_svg]:size-5',\n 'icon-sm': 'p-1.5 [&_svg]:size-4.5',\n },\n },\n },\n);\n\nconst maskImage =\n 'linear-gradient(to bottom,white,transparent), radial-gradient(circle at top center, white, transparent)';\n\nconst rainbowLayer = (\n <>\n <div\n className=\"absolute inset-0 z-[-1]\"\n style={\n {\n maskImage,\n maskComposite: 'intersect',\n animation: 'fd-moving-banner 16s linear infinite',\n '--start': 'rgba(0,87,255,0.5)',\n '--mid': 'rgba(255,0,166,0.77)',\n '--end': 'rgba(255,77,0,0.4)',\n '--via': 'rgba(164,255,68,0.4)',\n animationDirection: 'reverse',\n backgroundImage:\n 'repeating-linear-gradient(60deg, var(--end), var(--start) 2%, var(--start) 5%, transparent 8%, transparent 14%, var(--via) 18%, var(--via) 22%, var(--mid) 28%, var(--mid) 30%, var(--via) 34%, var(--via) 36%, transparent, var(--end) calc(50% - 12px))',\n backgroundSize: '200% 100%',\n mixBlendMode: 'difference',\n } as object\n }\n />\n <div\n className=\"absolute inset-0 z-[-1]\"\n style={\n {\n maskImage,\n maskComposite: 'intersect',\n animation: 'fd-moving-banner 20s linear infinite',\n '--start': 'rgba(255,120,120,0.5)',\n '--mid': 'rgba(36,188,255,0.4)',\n '--end': 'rgba(64,0,255,0.51)',\n '--via': 'rgba(255,89,0,0.56)',\n backgroundImage:\n 'repeating-linear-gradient(45deg, var(--end), var(--start) 4%, var(--start) 8%, transparent 9%, transparent 14%, var(--mid) 16%, var(--mid) 20%, transparent, var(--via) 36%, var(--via) 40%, transparent 42%, var(--end) 46%, var(--end) calc(50% - 16.8px))',\n backgroundSize: '200% 100%',\n mixBlendMode: 'color-dodge',\n } as object\n }\n />\n <style>\n {`@keyframes fd-moving-banner {\n from { background-position: 0% 0; }\n to { background-position: 100% 0; }\n }`}\n </style>\n </>\n);\n\nexport function Banner({\n id,\n variant = 'rainbow',\n changeLayout = true,\n height = 3,\n ...props\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * @defaultValue default is 3 rem\n */\n height?: number;\n\n /**\n * @defaultValue 'normal'\n */\n variant?: 'rainbow' | 'normal';\n\n /**\n * Change Fumadocs layout styles\n *\n * @defaultValue true\n */\n changeLayout?: boolean;\n}) {\n const [open, setOpen] = useState(true);\n const globalKey = id ? `nd-banner-${id}` : null;\n const bannerHeight = `${height}rem`;\n\n useEffect(() => {\n if (globalKey) setOpen(localStorage.getItem(globalKey) !== 'true');\n }, [globalKey]);\n\n if (!open) return null;\n\n return (\n <div\n id={id}\n {...props}\n className={cn(\n 'flex flex-row items-center justify-center px-4 text-center text-sm font-medium',\n 'bg-neutral-100 dark:bg-neutral-900',\n !open && 'hidden',\n props.className,\n )}\n style={{\n // 将 fuma.css 中的 .sticky.top-0.z-40 样式完全移到这里\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100vw',\n zIndex: 1001,\n height: bannerHeight,\n minHeight: bannerHeight,\n maxHeight: bannerHeight,\n margin: 0,\n borderRadius: 0,\n }}\n >\n \n {globalKey ? (\n <style>{`.${globalKey} #${id} { display: none; }`}</style>\n ) : null}\n {globalKey ? (\n <script\n dangerouslySetInnerHTML={{\n __html: `if (localStorage.getItem('${globalKey}') === 'true') document.documentElement.classList.add('${globalKey}');`,\n }}\n />\n ) : null}\n\n {variant === 'rainbow' ? rainbowLayer : null}\n {props.children}\n {id ? (\n <button\n type=\"button\"\n aria-label=\"Close Banner\"\n onClick={() => {\n setOpen(false);\n if (globalKey) localStorage.setItem(globalKey, 'true');\n }}\n className={cn(\n buttonVariants({\n color: 'ghost',\n className:\n 'absolute end-2 top-1/2 -translate-y-1/2 text-neutral-600 dark:text-neutral-400',\n size: 'icon',\n }),\n )}\n >\n <icons.X />\n </button>\n ) : null}\n </div>\n );\n}\n"]}
@@ -0,0 +1,90 @@
1
+ /* eslint-disable */
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __objRest = (source, exclude) => {
26
+ var target = {};
27
+ for (var prop in source)
28
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
+ target[prop] = source[prop];
30
+ if (source != null && __getOwnPropSymbols)
31
+ for (var prop of __getOwnPropSymbols(source)) {
32
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
+ target[prop] = source[prop];
34
+ }
35
+ return target;
36
+ };
37
+ var __commonJS = (cb, mod) => function __require() {
38
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
39
+ };
40
+ var __export = (target, all) => {
41
+ for (var name in all)
42
+ __defProp(target, name, { get: all[name], enumerable: true });
43
+ };
44
+ var __copyProps = (to, from, except, desc) => {
45
+ if (from && typeof from === "object" || typeof from === "function") {
46
+ for (let key of __getOwnPropNames(from))
47
+ if (!__hasOwnProp.call(to, key) && key !== except)
48
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
49
+ }
50
+ return to;
51
+ };
52
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
53
+ // If the importer is in node compatibility mode or this is not an ESM
54
+ // file that has been converted to a CommonJS file using a Babel-
55
+ // compatible transform (i.e. "__esModule" has not been set), then set
56
+ // "default" to the CommonJS "module.exports" for node compatibility.
57
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
58
+ mod
59
+ ));
60
+ var __async = (__this, __arguments, generator) => {
61
+ return new Promise((resolve, reject) => {
62
+ var fulfilled = (value) => {
63
+ try {
64
+ step(generator.next(value));
65
+ } catch (e) {
66
+ reject(e);
67
+ }
68
+ };
69
+ var rejected = (value) => {
70
+ try {
71
+ step(generator.throw(value));
72
+ } catch (e) {
73
+ reject(e);
74
+ }
75
+ };
76
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
77
+ step((generator = generator.apply(__this, __arguments)).next());
78
+ });
79
+ };
80
+
81
+ export {
82
+ __spreadValues,
83
+ __spreadProps,
84
+ __objRest,
85
+ __commonJS,
86
+ __export,
87
+ __toESM,
88
+ __async
89
+ };
90
+ //# sourceMappingURL=chunk-BZLOMDT7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}