@langgraph-js/ui 3.0.1 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/components.json +24 -0
  2. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  3. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  4. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  5. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  6. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  7. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  8. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  9. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  10. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  11. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  12. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  13. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  14. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  15. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  16. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  17. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  18. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  19. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  20. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  21. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  22. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  23. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  24. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  25. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  26. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  27. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  28. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  29. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  30. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  31. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  32. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  33. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  34. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  35. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  36. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  37. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  38. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  39. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  40. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  41. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  42. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  43. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  44. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  45. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  46. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  47. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  48. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  49. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  50. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  51. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  52. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  53. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  54. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  55. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  56. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  57. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  58. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  59. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  60. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  61. package/dist/assets/abap-BdImnpbu.js +1 -0
  62. package/dist/assets/actionscript-3-CfeIJUat.js +1 -0
  63. package/dist/assets/ada-bCR0ucgS.js +1 -0
  64. package/dist/assets/andromeeda-C-Jbm3Hp.js +1 -0
  65. package/dist/assets/angular-html-Bbf3ZyxA.js +1 -0
  66. package/dist/assets/angular-ts-C26w9mnW.js +1 -0
  67. package/dist/assets/apache-Pmp26Uib.js +1 -0
  68. package/dist/assets/apex-C7Pw0Ztw.js +1 -0
  69. package/dist/assets/apl-e980N3t4.js +1 -0
  70. package/dist/assets/applescript-Co6uUVPk.js +1 -0
  71. package/dist/assets/ara-BRHolxvo.js +1 -0
  72. package/dist/assets/arc-CGVbGqUF.js +1 -0
  73. package/dist/assets/architectureDiagram-VXUJARFQ-CqtrDEw9.js +36 -0
  74. package/dist/assets/asciidoc-Dv7Oe6Be.js +1 -0
  75. package/dist/assets/asm-D_Q5rh1f.js +1 -0
  76. package/dist/assets/astro-CjFzhNUq.js +1 -0
  77. package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  78. package/dist/assets/awk-DMzUqQB5.js +1 -0
  79. package/dist/assets/ayu-dark-Cv9koXgw.js +1 -0
  80. package/dist/assets/ballerina-BFfxhgS-.js +1 -0
  81. package/dist/assets/bat-BkioyH1T.js +1 -0
  82. package/dist/assets/beancount-BoKiGodi.js +1 -0
  83. package/dist/assets/berry-D08WgyRC.js +1 -0
  84. package/dist/assets/bibtex-CHM0blh-.js +1 -0
  85. package/dist/assets/bicep-6nHXG8SA.js +1 -0
  86. package/dist/assets/blade-B2ZbN0F_.js +1 -0
  87. package/dist/assets/blockDiagram-VD42YOAC-CNqe-K1B.js +122 -0
  88. package/dist/assets/bsl-BO_Y6i37.js +1 -0
  89. package/dist/assets/c-BIGW1oBm.js +1 -0
  90. package/dist/assets/c4Diagram-YG6GDRKO-CPTzKGRp.js +10 -0
  91. package/dist/assets/cadence-D2CYqzqI.js +1 -0
  92. package/dist/assets/cairo-KRGpt6FW.js +1 -0
  93. package/dist/assets/catppuccin-frappe-BBxmzUt6.js +1 -0
  94. package/dist/assets/catppuccin-latte-Jep7L2Wt.js +1 -0
  95. package/dist/assets/catppuccin-macchiato-CIUZ1G5V.js +1 -0
  96. package/dist/assets/catppuccin-mocha-NBseiqgx.js +1 -0
  97. package/dist/assets/channel-CbJkpW4g.js +1 -0
  98. package/dist/assets/chunk-4BX2VUAB-CnFclA68.js +1 -0
  99. package/dist/assets/chunk-55IACEB6-CVyjVz79.js +1 -0
  100. package/dist/assets/chunk-B4BG7PRW-DiGvJtfO.js +165 -0
  101. package/dist/assets/chunk-DI55MBZ5-CiqWzq60.js +220 -0
  102. package/dist/assets/chunk-FMBD7UC4-KfYlm8ba.js +15 -0
  103. package/dist/assets/chunk-QN33PNHL-Bwbc5Dxk.js +1 -0
  104. package/dist/assets/chunk-QZHKN3VN-DlQbvjLB.js +1 -0
  105. package/dist/assets/chunk-TZMSLE5B-6_Y4HlEU.js +1 -0
  106. package/dist/assets/clarity-CHh-QcGE.js +1 -0
  107. package/dist/assets/classDiagram-2ON5EDUG--F4r2fzQ.js +1 -0
  108. package/dist/assets/classDiagram-v2-WZHVMYZB--F4r2fzQ.js +1 -0
  109. package/dist/assets/clojure-P80f7IUj.js +1 -0
  110. package/dist/assets/clone-CxJednSn.js +1 -0
  111. package/dist/assets/cmake-D1j8_8rp.js +1 -0
  112. package/dist/assets/cobol-DwXMNnPA.js +1 -0
  113. package/dist/assets/codeowners-Bp6g37R7.js +1 -0
  114. package/dist/assets/codeql-DsOJ9woJ.js +1 -0
  115. package/dist/assets/coffee-JUOWOZUj.js +1 -0
  116. package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  117. package/dist/assets/coq-DkFqJrB1.js +1 -0
  118. package/dist/assets/cose-bilkent-S5V4N54A-BL_xZw_z.js +1 -0
  119. package/dist/assets/cpp-CofmeUqb.js +1 -0
  120. package/dist/assets/crystal-DVs0tusA.js +1 -0
  121. package/dist/assets/csharp-CHadp7IV.js +1 -0
  122. package/dist/assets/css-DPfMkruS.js +1 -0
  123. package/dist/assets/csv-fuZLfV_i.js +1 -0
  124. package/dist/assets/cue-D82EKSYY.js +1 -0
  125. package/dist/assets/cypher-COkxafJQ.js +1 -0
  126. package/dist/assets/cytoscape.esm-BlPLnP8k.js +331 -0
  127. package/dist/assets/d-85-TOEBH.js +1 -0
  128. package/dist/assets/dagre-6UL2VRFP-CKK6NwPE.js +4 -0
  129. package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  130. package/dist/assets/dart-CF10PKvl.js +1 -0
  131. package/dist/assets/dax-CEL-wOlO.js +1 -0
  132. package/dist/assets/defaultLocale-C4B-KCzX.js +1 -0
  133. package/dist/assets/desktop-BmXAJ9_W.js +1 -0
  134. package/dist/assets/diagram-PSM6KHXK-D77jB3aN.js +24 -0
  135. package/dist/assets/diagram-QEK2KX5R-C3V63KEf.js +43 -0
  136. package/dist/assets/diagram-S2PKOQOG-8vXvyFcA.js +24 -0
  137. package/dist/assets/diff-D97Zzqfu.js +1 -0
  138. package/dist/assets/docker-BcOcwvcX.js +1 -0
  139. package/dist/assets/dotenv-Da5cRb03.js +1 -0
  140. package/dist/assets/dracula-BzJJZx-M.js +1 -0
  141. package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  142. package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  143. package/dist/assets/edge-CKszZCnI.js +1 -0
  144. package/dist/assets/elixir-Cc7HHYVZ.js +1 -0
  145. package/dist/assets/elm-DbKCFpqz.js +1 -0
  146. package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  147. package/dist/assets/erDiagram-Q2GNP2WA-BvdZN7ll.js +60 -0
  148. package/dist/assets/erb-C7QrGF_t.js +1 -0
  149. package/dist/assets/erlang-DsQrWhSR.js +1 -0
  150. package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  151. package/dist/assets/everforest-light-C8M2exoo.js +1 -0
  152. package/dist/assets/fennel-BYunw83y.js +1 -0
  153. package/dist/assets/fish-Bl2oy6fF.js +1 -0
  154. package/dist/assets/flowDiagram-NV44I4VS-Cmn4g1Tt.js +162 -0
  155. package/dist/assets/fluent-C4IJs8-o.js +1 -0
  156. package/dist/assets/fortran-fixed-form-BZjJHVRy.js +1 -0
  157. package/dist/assets/fortran-free-form-D22FLkUw.js +1 -0
  158. package/dist/assets/fsharp-CufqaIoK.js +1 -0
  159. package/dist/assets/ganttDiagram-LVOFAZNH-BtK3XTtk.js +267 -0
  160. package/dist/assets/gdresource-B7Tvp0Sc.js +1 -0
  161. package/dist/assets/gdscript-DTMYz4Jt.js +1 -0
  162. package/dist/assets/gdshader-DkwncUOv.js +1 -0
  163. package/dist/assets/genie-D0YGMca9.js +1 -0
  164. package/dist/assets/gherkin-DyxjwDmM.js +1 -0
  165. package/dist/assets/git-commit-F4YmCXRG.js +1 -0
  166. package/dist/assets/git-rebase-r7XF79zn.js +1 -0
  167. package/dist/assets/gitGraphDiagram-NY62KEGX-Ckd-OTVj.js +65 -0
  168. package/dist/assets/github-dark-DHJKELXO.js +1 -0
  169. package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  170. package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  171. package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  172. package/dist/assets/github-light-DAi9KRSo.js +1 -0
  173. package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  174. package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  175. package/dist/assets/gleam-BspZqrRM.js +1 -0
  176. package/dist/assets/glimmer-js-Dz9X99Cm.js +1 -0
  177. package/dist/assets/glimmer-ts-aQ3p29eY.js +1 -0
  178. package/dist/assets/glsl-DplSGwfg.js +1 -0
  179. package/dist/assets/gnuplot-DdkO51Og.js +1 -0
  180. package/dist/assets/go-Dn2_MT6a.js +1 -0
  181. package/dist/assets/graph-C8xl-aUs.js +1 -0
  182. package/dist/assets/graphql-Caa12_AY.js +1 -0
  183. package/dist/assets/groovy-gcz8RCvz.js +1 -0
  184. package/dist/assets/gruvbox-dark-hard-D1uDOp7C.js +1 -0
  185. package/dist/assets/gruvbox-dark-medium-DkhsQLT2.js +1 -0
  186. package/dist/assets/gruvbox-dark-soft-CcyOm34o.js +1 -0
  187. package/dist/assets/gruvbox-light-hard-DKzvysjW.js +1 -0
  188. package/dist/assets/gruvbox-light-medium-DPcUKYIF.js +1 -0
  189. package/dist/assets/gruvbox-light-soft-CGqH5EJj.js +1 -0
  190. package/dist/assets/hack-D_o3P2UH.js +1 -0
  191. package/dist/assets/haml-AZXGPtNI.js +1 -0
  192. package/dist/assets/handlebars-YebKLiTq.js +1 -0
  193. package/dist/assets/haskell-Df6bDoY_.js +1 -0
  194. package/dist/assets/haxe-CzTSHFRz.js +1 -0
  195. package/dist/assets/hcl-BWvSN4gD.js +1 -0
  196. package/dist/assets/hjson-D5-asLiD.js +1 -0
  197. package/dist/assets/hlsl-D3lLCCz7.js +1 -0
  198. package/dist/assets/houston-DnULxvSX.js +1 -0
  199. package/dist/assets/html-B8pBdPMQ.js +1 -0
  200. package/dist/assets/html-derivative-ZQ8onl8Z.js +1 -0
  201. package/dist/assets/http-C38VWM-o.js +1 -0
  202. package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  203. package/dist/assets/hy-DFXneXwc.js +1 -0
  204. package/dist/assets/imba-DGztddWO.js +1 -0
  205. package/dist/assets/index-BpNQAzdK.css +1 -0
  206. package/dist/assets/index-EdVqpCiz.js +835 -0
  207. package/dist/assets/infoDiagram-F6ZHWCRC-Z0X_yr7r.js +2 -0
  208. package/dist/assets/ini-BEwlwnbL.js +1 -0
  209. package/dist/assets/init-Gi6I4Gst.js +1 -0
  210. package/dist/assets/isUndefined-Daq2Snc8.js +1 -0
  211. package/dist/assets/java-CylS5w8V.js +1 -0
  212. package/dist/assets/javascript-BMMyXqK5.js +1 -0
  213. package/dist/assets/jinja-BJmZiE_F.js +1 -0
  214. package/dist/assets/jison-BCRtk9Os.js +1 -0
  215. package/dist/assets/journeyDiagram-XKPGCS4Q-Ce4GbjgA.js +139 -0
  216. package/dist/assets/json-Cp-IABpG.js +1 -0
  217. package/dist/assets/json5-C9tS-k6U.js +1 -0
  218. package/dist/assets/jsonc-Des-eS-w.js +1 -0
  219. package/dist/assets/jsonl-DcaNXYhu.js +1 -0
  220. package/dist/assets/jsonnet-DFQXde-d.js +1 -0
  221. package/dist/assets/jssm-C2t-YnRu.js +1 -0
  222. package/dist/assets/jsx-g9-lgVsj.js +1 -0
  223. package/dist/assets/julia-353pQ8cl.js +1 -0
  224. package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  225. package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  226. package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  227. package/dist/assets/kanban-definition-3W4ZIXB7-jKKX8cF-.js +89 -0
  228. package/dist/assets/kotlin-BdnUsdx6.js +1 -0
  229. package/dist/assets/kusto-BvAqAH-y.js +1 -0
  230. package/dist/assets/laserwave-DUszq2jm.js +1 -0
  231. package/dist/assets/latex-CPEt12BK.js +1 -0
  232. package/dist/assets/layout-CehWuyQv.js +1 -0
  233. package/dist/assets/lean-qliWkHmV.js +1 -0
  234. package/dist/assets/less-B1dDrJ26.js +1 -0
  235. package/dist/assets/light-plus-B7mTdjB0.js +1 -0
  236. package/dist/assets/linear-Do6UjTtT.js +1 -0
  237. package/dist/assets/liquid-DFk8BABL.js +1 -0
  238. package/dist/assets/llvm-D32k8WzR.js +1 -0
  239. package/dist/assets/log-2UxHyX5q.js +1 -0
  240. package/dist/assets/logo-BtOb2qkB.js +1 -0
  241. package/dist/assets/lua-BbnMAYS6.js +1 -0
  242. package/dist/assets/luau-CXu1NL6O.js +1 -0
  243. package/dist/assets/make-CHLpvVh8.js +1 -0
  244. package/dist/assets/markdown-Cvjx9yec.js +1 -0
  245. package/dist/assets/marko-BM38lbjI.js +1 -0
  246. package/dist/assets/material-theme-D5KoaKCx.js +1 -0
  247. package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  248. package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  249. package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  250. package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  251. package/dist/assets/matlab-D7o27uSR.js +1 -0
  252. package/dist/assets/mdc-DvHMhoCT.js +1 -0
  253. package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  254. package/dist/assets/mermaid-DKYwYmdq.js +1 -0
  255. package/dist/assets/mermaid.core-DboFnVDg.js +197 -0
  256. package/dist/assets/min-CoD9aTVe.js +1 -0
  257. package/dist/assets/min-dark-CafNBF8u.js +1 -0
  258. package/dist/assets/min-light-CTRr51gU.js +1 -0
  259. package/dist/assets/mindmap-definition-VGOIOE7T-DHqc52RG.js +68 -0
  260. package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  261. package/dist/assets/mojo-1DNp92w6.js +1 -0
  262. package/dist/assets/monokai-D4h5O-jR.js +1 -0
  263. package/dist/assets/move-DNEoBllO.js +1 -0
  264. package/dist/assets/narrat-DRg8JJMk.js +1 -0
  265. package/dist/assets/nextflow-CUEJCptM.js +1 -0
  266. package/dist/assets/nginx-DknmC5AR.js +1 -0
  267. package/dist/assets/night-owl-C39BiMTA.js +1 -0
  268. package/dist/assets/nim-BZI_8mFl.js +1 -0
  269. package/dist/assets/nix-BepWV7mh.js +1 -0
  270. package/dist/assets/nord-Ddv68eIx.js +1 -0
  271. package/dist/assets/nushell-ChH_ziBE.js +1 -0
  272. package/dist/assets/objective-c-DXmwc3jG.js +1 -0
  273. package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  274. package/dist/assets/ocaml-C0hk2d4L.js +1 -0
  275. package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  276. package/dist/assets/one-light-PoHY5YXO.js +1 -0
  277. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  278. package/dist/assets/pascal-D93ZcfNL.js +1 -0
  279. package/dist/assets/perl-g0D2lH3a.js +1 -0
  280. package/dist/assets/php-Gk5eUrPQ.js +1 -0
  281. package/dist/assets/pieDiagram-ADFJNKIX-bG2J_WkI.js +30 -0
  282. package/dist/assets/plastic-3e1v2bzS.js +1 -0
  283. package/dist/assets/plsql-ChMvpjG-.js +1 -0
  284. package/dist/assets/po-BTJTHyun.js +1 -0
  285. package/dist/assets/poimandres-CS3Unz2-.js +1 -0
  286. package/dist/assets/polar-C0HS_06l.js +1 -0
  287. package/dist/assets/postcss-CXtECtnM.js +1 -0
  288. package/dist/assets/powerquery-CEu0bR-o.js +1 -0
  289. package/dist/assets/powershell-Dpen1YoG.js +1 -0
  290. package/dist/assets/prisma-Dd19v3D-.js +1 -0
  291. package/dist/assets/prolog-CbFg5uaA.js +1 -0
  292. package/dist/assets/proto-DyJlTyXw.js +1 -0
  293. package/dist/assets/pug-Ch9lOoSd.js +1 -0
  294. package/dist/assets/puppet-BMWR74SV.js +1 -0
  295. package/dist/assets/purescript-CklMAg4u.js +1 -0
  296. package/dist/assets/python-B6aJPvgy.js +1 -0
  297. package/dist/assets/qml-CHzV51_b.js +1 -0
  298. package/dist/assets/qmldir-C8lEn-DE.js +1 -0
  299. package/dist/assets/qss-IeuSbFQv.js +1 -0
  300. package/dist/assets/quadrantDiagram-AYHSOK5B-CDEBrcZS.js +7 -0
  301. package/dist/assets/r-DiinP2Uv.js +1 -0
  302. package/dist/assets/racket-BqYA7rlc.js +1 -0
  303. package/dist/assets/raku-DXvB9xmW.js +1 -0
  304. package/dist/assets/razor-CNXmhs1n.js +1 -0
  305. package/dist/assets/red-bN70gL4F.js +1 -0
  306. package/dist/assets/reg-C-SQnVFl.js +1 -0
  307. package/dist/assets/regexp-CDVJQ6XC.js +1 -0
  308. package/dist/assets/rel-C3B-1QV4.js +1 -0
  309. package/dist/assets/requirementDiagram-UZGBJVZJ-D88jc_6e.js +64 -0
  310. package/dist/assets/riscv-BM1_JUlF.js +1 -0
  311. package/dist/assets/rose-pine-BHrmToEH.js +1 -0
  312. package/dist/assets/rose-pine-dawn-CnK8MTSM.js +1 -0
  313. package/dist/assets/rose-pine-moon-NleAzG8P.js +1 -0
  314. package/dist/assets/rst-DKdxLoXm.js +1 -0
  315. package/dist/assets/ruby-W1VRIm2Q.js +1 -0
  316. package/dist/assets/rust-B1yitclQ.js +1 -0
  317. package/dist/assets/sankeyDiagram-TZEHDZUN-C93LzfJ0.js +10 -0
  318. package/dist/assets/sas-cz2c8ADy.js +1 -0
  319. package/dist/assets/sass-Cj5Yp3dK.js +1 -0
  320. package/dist/assets/scala-C151Ov-r.js +1 -0
  321. package/dist/assets/scheme-C98Dy4si.js +1 -0
  322. package/dist/assets/scss-OYdSNvt2.js +1 -0
  323. package/dist/assets/sdbl-DVxCFoDh.js +1 -0
  324. package/dist/assets/sequenceDiagram-WL72ISMW-DjpL4ZUq.js +145 -0
  325. package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  326. package/dist/assets/shellscript-Yzrsuije.js +1 -0
  327. package/dist/assets/shellsession-BADoaaVG.js +1 -0
  328. package/dist/assets/slack-dark-BthQWCQV.js +1 -0
  329. package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  330. package/dist/assets/smalltalk-BERRCDM3.js +1 -0
  331. package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  332. package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  333. package/dist/assets/solarized-light-L9t79GZl.js +1 -0
  334. package/dist/assets/solidity-BbcW6ACK.js +1 -0
  335. package/dist/assets/soy-B_7ge1HE.js +1 -0
  336. package/dist/assets/sparql-rVzFXLq3.js +1 -0
  337. package/dist/assets/splunk-BtCnVYZw.js +1 -0
  338. package/dist/assets/sql-BLtJtn59.js +1 -0
  339. package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  340. package/dist/assets/stata-BH5u7GGu.js +1 -0
  341. package/dist/assets/stateDiagram-FKZM4ZOC-Cy4Qc8UW.js +1 -0
  342. package/dist/assets/stateDiagram-v2-4FDKWEC3-wfRa7ccT.js +1 -0
  343. package/dist/assets/stylus-BEDo0Tqx.js +1 -0
  344. package/dist/assets/svelte-Dt5jNKfG.js +1 -0
  345. package/dist/assets/swift-Dg5xB15N.js +1 -0
  346. package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  347. package/dist/assets/system-verilog-CnnmHF94.js +1 -0
  348. package/dist/assets/systemd-4A_iFExJ.js +1 -0
  349. package/dist/assets/talonscript-CkByrt1z.js +1 -0
  350. package/dist/assets/tasl-QIJgUcNo.js +1 -0
  351. package/dist/assets/tcl-dwOrl1Do.js +1 -0
  352. package/dist/assets/templ-0CNLO7il.js +1 -0
  353. package/dist/assets/terraform-BETggiCN.js +1 -0
  354. package/dist/assets/tex-B5i3u9ba.js +1 -0
  355. package/dist/assets/timeline-definition-IT6M3QCI-DNVlI21w.js +61 -0
  356. package/dist/assets/tokyo-night-hegEt444.js +1 -0
  357. package/dist/assets/toml-vGWfd6FD.js +1 -0
  358. package/dist/assets/treemap-KMMF4GRG-Cf7rPol4.js +128 -0
  359. package/dist/assets/ts-tags-B9XN6NYQ.js +1 -0
  360. package/dist/assets/tsv-B_m7g4N7.js +1 -0
  361. package/dist/assets/tsx-COt5Ahok.js +1 -0
  362. package/dist/assets/turtle-BsS91CYL.js +1 -0
  363. package/dist/assets/twig-B_ULif71.js +1 -0
  364. package/dist/assets/typescript-DlfHMoPT.js +1 -0
  365. package/dist/assets/typespec-Df68jz8_.js +1 -0
  366. package/dist/assets/typst-DHCkPAjA.js +1 -0
  367. package/dist/assets/v-DljmTZ5-.js +1 -0
  368. package/dist/assets/vala-CsfeWuGM.js +1 -0
  369. package/dist/assets/vb-D17OF-Vu.js +1 -0
  370. package/dist/assets/verilog-BQ8w6xss.js +1 -0
  371. package/dist/assets/vesper-DU1UobuO.js +1 -0
  372. package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  373. package/dist/assets/viml-CJc9bBzg.js +1 -0
  374. package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  375. package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  376. package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  377. package/dist/assets/vue-BEetzCYT.js +1 -0
  378. package/dist/assets/vue-html-BsD9fJC1.js +1 -0
  379. package/dist/assets/vue-vine-CCdTUzyM.js +1 -0
  380. package/dist/assets/vyper-CDx5xZoG.js +1 -0
  381. package/dist/assets/wasm-CG6Dc4jp.js +1 -0
  382. package/dist/assets/wasm-MzD3tlZU.js +1 -0
  383. package/dist/assets/wenyan-BV7otONQ.js +1 -0
  384. package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  385. package/dist/assets/wikitext-BhOHFoWU.js +1 -0
  386. package/dist/assets/wit-5i3qLPDT.js +1 -0
  387. package/dist/assets/wolfram-lXgVvXCa.js +1 -0
  388. package/dist/assets/xml-sdJ4AIDG.js +1 -0
  389. package/dist/assets/xsl-CtQFsRM5.js +1 -0
  390. package/dist/assets/xychartDiagram-PRI3JC2R-CRudqT7y.js +7 -0
  391. package/dist/assets/yaml-Buea-lGh.js +1 -0
  392. package/dist/assets/zenscript-DVFEvuxE.js +1 -0
  393. package/dist/assets/zig-VOosw3JB.js +1 -0
  394. package/dist/index.html +2 -2
  395. package/package.json +22 -14
  396. package/src/artifacts/ArtifactViewer.tsx +22 -153
  397. package/src/chat/Chat.tsx +7 -9
  398. package/src/chat/components/MessageAI.tsx +2 -3
  399. package/src/chat/components/MessageBox.tsx +2 -2
  400. package/src/chat/components/MessageTool.tsx +4 -17
  401. package/src/chat/store/index.ts +0 -21
  402. package/src/chat/tools/create_artifacts.tsx +10 -26
  403. package/src/components/ai-elements/code-block.tsx +148 -0
  404. package/src/components/ai-elements/response.tsx +22 -0
  405. package/src/components/ui/button.tsx +60 -0
  406. package/src/components/ui/sonner.tsx +38 -0
  407. package/src/graph/index.tsx +1 -1
  408. package/src/index.css +121 -0
  409. package/src/index.ts +1 -2
  410. package/src/lib/utils.ts +6 -0
  411. package/src/settings/LoginSettings.tsx +1 -1
  412. package/src/settings/SettingPanel.tsx +1 -1
  413. package/test/main.tsx +0 -2
  414. package/tsconfig.json +5 -1
  415. package/tsconfig.node.json +1 -1
  416. package/vite.config.ts +3 -3
  417. package/dist/assets/index-CRq7a-Q4.css +0 -1
  418. package/dist/assets/index-IirYMaE5.js +0 -280
  419. package/src/artifacts/ArtifactsContext.tsx +0 -99
  420. package/src/artifacts/SourceCodeViewer.tsx +0 -15
  421. package/src/chat/components/JSONViewer.tsx +0 -18
  422. package/src/chat/components/JsonToMessage/JsonToMessage.tsx +0 -120
  423. package/src/chat/components/JsonToMessage/JsonToMessageButton.tsx +0 -20
  424. package/src/chat/components/JsonToMessage/index.tsx +0 -5
  425. package/src/chat/context/ChatContext.tsx +0 -83
  426. package/src/memory/BaseDB.ts +0 -92
  427. package/src/memory/db.ts +0 -232
  428. package/src/memory/fulltext-search.ts +0 -191
  429. package/src/memory/index.ts +0 -4
  430. package/src/memory/tools.ts +0 -170
  431. package/src/sonner/Toaster.tsx +0 -117
  432. package/src/sonner/index.ts +0 -3
  433. package/src/sonner/toast.ts +0 -50
  434. package/src/sonner/types.ts +0 -21
@@ -1,191 +0,0 @@
1
- // minisearch-idb-chinese-search.ts
2
-
3
- import MiniSearch, { AsPlainObject, type Options, type SearchOptions, type SearchResult } from "minisearch";
4
- import { openDB, type IDBPDatabase } from "idb";
5
- import { BaseDB, BaseDBConfig } from "./BaseDB";
6
- import { MemoryRecord } from "./db";
7
-
8
- /**
9
- * 搜索服务配置接口
10
- */
11
- export interface FullTextSearchConfig extends BaseDBConfig {
12
- miniSearchOptions?: Partial<Options<MemoryRecord>>;
13
- }
14
-
15
- // 默认配置
16
- const DEFAULT_CONFIG: Required<FullTextSearchConfig> = {
17
- dbName: "minisearch_memory_db",
18
- dbVersion: 1,
19
- storeName: "memory",
20
- miniSearchOptions: {
21
- fields: ["text", "path", "tags", "referencePath"],
22
- storeFields: ["text", "path", "tags", "referencePath"],
23
- tokenize: chineseWordSegmenter,
24
- },
25
- };
26
-
27
- // --- 1. 中文分词器 ---
28
- /**
29
- * 中文分词器,使用 Intl.Segmenter 将中文文本分割成词语。
30
- * @param text 需要分词的中文文本。
31
- * @returns 词语数组。
32
- */
33
- function chineseWordSegmenter(text: string): string[] {
34
- // 移除所有空格,因为中文词语之间通常没有空格
35
- const cleanText = text.replace(/ /g, "");
36
-
37
- // 使用 Intl.Segmenter 进行词语分词
38
- // 'zh-CN' 或 'cn' 都可以表示中文(中国大陆)
39
- const segmenter = new Intl.Segmenter("zh-CN", { granularity: "word" });
40
-
41
- // 获取分词结果并只保留词语内容
42
- const segments = Array.from(segmenter.segment(cleanText)).map((item) => item.segment);
43
-
44
- return segments;
45
- }
46
-
47
- export class FullTextSearchService extends BaseDB<MemoryRecord> {
48
- private miniSearch!: MiniSearch<MemoryRecord>;
49
- protected config: Required<FullTextSearchConfig>;
50
- protected db!: IDBPDatabase;
51
- constructor(config?: FullTextSearchConfig) {
52
- const mergedConfig = {
53
- ...DEFAULT_CONFIG,
54
- ...config,
55
- miniSearchOptions: {
56
- ...DEFAULT_CONFIG.miniSearchOptions,
57
- ...(config?.miniSearchOptions || {}),
58
- },
59
- };
60
- super(mergedConfig);
61
- this.config = mergedConfig;
62
- }
63
-
64
- public async initialize(): Promise<void> {
65
- if (this.isInitialized) {
66
- return;
67
- }
68
-
69
- const { storeName } = this.config;
70
- this.db = await openDB(this.config.dbName, this.config.dbVersion, {
71
- upgrade(db) {
72
- if (!db.objectStoreNames.contains(storeName)) {
73
- db.createObjectStore(storeName, { keyPath: "id", autoIncrement: true });
74
- }
75
- if (!db.objectStoreNames.contains("minisearch_index")) {
76
- db.createObjectStore("minisearch_index");
77
- }
78
- },
79
- });
80
-
81
- // 确保 miniSearchOptions 包含所有必需的字段
82
- const miniSearchOptions: Options<MemoryRecord> = {
83
- fields: this.config.miniSearchOptions.fields || ["text"],
84
- storeFields: this.config.miniSearchOptions.storeFields || ["text"],
85
- tokenize: this.config.miniSearchOptions.tokenize || chineseWordSegmenter,
86
- };
87
-
88
- this.miniSearch = new MiniSearch(miniSearchOptions);
89
-
90
- try {
91
- const savedIndex = await this.loadMiniSearchIndex();
92
- if (savedIndex) {
93
- console.log(savedIndex);
94
- this.miniSearch = await MiniSearch.loadJSAsync(savedIndex, miniSearchOptions);
95
- console.log("MiniSearch index loaded from IndexedDB.");
96
- } else {
97
- console.log("No saved index found, building from documents...");
98
- const allDocs = await this.getAll();
99
- if (allDocs.length > 0) {
100
- this.miniSearch.addAll(allDocs);
101
- await this.saveMiniSearchIndex(this.miniSearch.toJSON());
102
- console.log(`MiniSearch index built from ${allDocs.length} documents and saved.`);
103
- } else {
104
- console.log("No documents found, index is empty.");
105
- }
106
- }
107
- this.isInitialized = true;
108
- } catch (error) {
109
- console.error("Failed to initialize FullTextSearchService:", error);
110
- throw error;
111
- }
112
- }
113
-
114
- public async insert(doc: Partial<MemoryRecord>): Promise<number> {
115
- const transaction = this.db.transaction(this.config.storeName, "readwrite");
116
- const store = transaction.objectStore(this.config.storeName);
117
- const newDoc: MemoryRecord = { ...doc } as MemoryRecord;
118
-
119
- const id = await store.add(newDoc);
120
- newDoc.id = Number(id);
121
-
122
- await transaction.done;
123
-
124
- this.miniSearch.add(newDoc);
125
- await this.saveMiniSearchIndex(this.miniSearch.toJSON());
126
-
127
- return newDoc.id;
128
- }
129
-
130
- public async update(id: number, doc: Partial<MemoryRecord>): Promise<void> {
131
- const transaction = this.db.transaction(this.config.storeName, "readwrite");
132
- const store = transaction.objectStore(this.config.storeName);
133
- const updatedDoc = { ...doc, id } as MemoryRecord;
134
- await store.put(updatedDoc);
135
-
136
- // MiniSearch 没有 update 方法,我们需要先删除再添加
137
- const existingDoc = await store.get(id);
138
- if (existingDoc) {
139
- this.miniSearch.remove(existingDoc);
140
- }
141
- this.miniSearch.add(updatedDoc);
142
- await this.saveMiniSearchIndex(this.miniSearch.toJSON());
143
- }
144
-
145
- public async delete(id: number): Promise<void> {
146
- const transaction = this.db.transaction(this.config.storeName, "readwrite");
147
- const store = transaction.objectStore(this.config.storeName);
148
- const doc = await store.get(id);
149
- if (doc) {
150
- this.miniSearch.remove(doc);
151
- }
152
- await store.delete(id);
153
- await this.saveMiniSearchIndex(this.miniSearch.toJSON());
154
- }
155
-
156
- public async query(query: string, options?: SearchOptions & { limit?: number }): Promise<MemoryRecord[]> {
157
- const results = this.miniSearch.search(query, options);
158
- // 将 SearchResult 转换为 MemoryRecord
159
- return results.slice(0, options?.limit ?? 5).map((i) => {
160
- const { id, text, ...rest } = i;
161
- return {
162
- id,
163
- text,
164
- tags: rest.tags,
165
- path: rest.path,
166
- type: rest.type,
167
- score: Math.round(i.score),
168
- referencePath: rest.referencePath,
169
- } as unknown as MemoryRecord;
170
- });
171
- }
172
-
173
- public async get(id: number): Promise<MemoryRecord | undefined> {
174
- return this.db.transaction(this.config.storeName, "readonly").objectStore(this.config.storeName).get(id);
175
- }
176
-
177
- public async getAll(): Promise<MemoryRecord[]> {
178
- return this.db.transaction(this.config.storeName, "readonly").objectStore(this.config.storeName).getAll();
179
- }
180
-
181
- private async loadMiniSearchIndex(): Promise<AsPlainObject | null> {
182
- return this.db.transaction("minisearch_index", "readonly").objectStore("minisearch_index").get("indexData");
183
- }
184
-
185
- private async saveMiniSearchIndex(indexData: AsPlainObject): Promise<void> {
186
- const tx = this.db.transaction("minisearch_index", "readwrite");
187
- const store = tx.objectStore("minisearch_index");
188
- await store.put(indexData, "indexData");
189
- await tx.done;
190
- }
191
- }
@@ -1,4 +0,0 @@
1
- export * from "./tools";
2
- export * from "./db";
3
- export * from "./fulltext-search";
4
- export * from "./BaseDB";
@@ -1,170 +0,0 @@
1
- import { createToolUI } from "@langgraph-js/sdk";
2
- import type { BaseDB, MemoryRecord } from "./BaseDB";
3
-
4
- // 获取命名空间(这里简化为标识符)
5
- function getNamespace(userId?: string): string {
6
- return userId || "default";
7
- }
8
-
9
- // 确保 JSON 可序列化
10
- function ensureJsonSerializable(content: any): any {
11
- if (typeof content === "string" || typeof content === "number" || typeof content === "boolean" || content === null) {
12
- return content;
13
- }
14
- if (Array.isArray(content) || typeof content === "object") {
15
- return content;
16
- }
17
- return String(content);
18
- }
19
-
20
- export const createMemoryTool = (store: BaseDB<MemoryRecord>) => {
21
- return {
22
- manageMemory: createToolUI({
23
- name: "manage_memory",
24
- description: `这是一个**结构化**工具,用于**管理跨对话的持久化记忆**,以保留上下文、用户偏好和学习到的见解。它支持**创建、更新、检索和删除记忆条目**,从而在互动中保持连续性和个性化。
25
-
26
- ### 你需要记录记忆的场景
27
-
28
- 1. 请你第一时间敏锐记录下用户的细节偏好,包括对话风格、习惯、内容、方式等。
29
- 2. 记录下高价值的问答,比如用户对你的纠正、任务过程中的关键信息
30
-
31
-
32
- ### 核心功能
33
-
34
- 该工具具备以下关键能力:
35
-
36
- * **记忆生命周期管理:** 对记忆条目进行**全生命周期管理**,包括创建、更新、检索和删除。
37
- * **分段与标签支持:** 支持**分段或打标签的记忆条目**,方便分类和高效检索。
38
- * **存储选项灵活:** 提供**临时和永久两种存储选项**,以适应不同类型信息的存储需求。
39
- `,
40
- parameters: [
41
- {
42
- name: "path",
43
- type: "string",
44
- description: "记忆路径(创建时需要)",
45
- },
46
- {
47
- name: "tags",
48
- type: "string[]",
49
- description: "记忆标签(创建或更新时需要)",
50
- },
51
- {
52
- name: "content",
53
- type: "string",
54
- description: "记忆内容(创建或更新时需要)",
55
- },
56
- {
57
- name: "action",
58
- type: "string",
59
- enum: ["create", "update", "delete"],
60
- description: "操作类型:create(创建)、update(更新)、delete(删除)",
61
- },
62
- {
63
- name: "id",
64
- type: "string",
65
- description: "记忆ID(更新或删除时需要,创建时会自动生成)",
66
- required: false,
67
- },
68
- {
69
- name: "referencePath",
70
- type: "string",
71
- description: "引用文档的 URL",
72
- required: false,
73
- },
74
- ],
75
- handler: async (args) => {
76
- const { content, action, id, tags, path, referencePath } = args;
77
-
78
- if ((action === "delete" || action === "update") && !id) {
79
- throw new Error("删除或更新记忆时必须提供记忆ID");
80
- }
81
-
82
- if ((action === "create" || action === "update") && !content) {
83
- throw new Error("创建或更新记忆时必须提供内容");
84
- }
85
-
86
- try {
87
- if (action === "delete") {
88
- await store.delete(Number(id));
89
- return `已删除记忆 ${id}`;
90
- }
91
-
92
- const memoryData: MemoryRecord = {
93
- text: content as string,
94
- content: ensureJsonSerializable(content),
95
- createdAt: new Date().toISOString(),
96
- updatedAt: new Date().toISOString(),
97
- namespace: getNamespace(),
98
- tags: tags as string[],
99
- path: path as string,
100
- type: "document",
101
- referencePath: referencePath as string,
102
- };
103
-
104
- if (action === "create") {
105
- const key = await store.insert(memoryData);
106
- return `已创建记忆 ${key}`;
107
- } else {
108
- await store.update(Number(id), memoryData);
109
- return `已更新记忆 ${id}`;
110
- }
111
- } catch (error) {
112
- throw new Error(`记忆操作失败: ${error}`);
113
- }
114
- },
115
- }),
116
- searchMemory: createToolUI({
117
- name: "search_memory",
118
- description: `搜索长期记忆中的相关信息,帮助维护对话上下文`,
119
- parameters: [
120
- {
121
- name: "query",
122
- type: "string",
123
- description: "请使用中文关键词进行搜索",
124
- },
125
- {
126
- name: "tags",
127
- type: "string[]",
128
- description: "记忆标签",
129
- required: false,
130
- },
131
- {
132
- name: "path",
133
- type: "string",
134
- description: "记忆路径,memory://user_id/path/to/memory_name",
135
- required: false,
136
- },
137
- {
138
- name: "limit",
139
- type: "number",
140
- description: "返回结果的最大数量(默认10)",
141
- required: false,
142
- },
143
- ],
144
- handler: async (args) => {
145
- const { query, limit = 10, tags, path } = args;
146
-
147
- if (!query || (typeof query === "string" && query.trim().length === 0)) {
148
- throw new Error("搜索查询不能为空");
149
- }
150
-
151
- try {
152
- const results = await store.query(query.toString(), {
153
- limit: limit as number,
154
- });
155
-
156
- return {
157
- query: query.toString(),
158
- results: results,
159
- total: results.length,
160
- limit: Number(limit),
161
- };
162
- } catch (error) {
163
- throw new Error(`搜索记忆失败: ${error}`);
164
- }
165
- },
166
- }),
167
- };
168
- };
169
-
170
- export { getNamespace, ensureJsonSerializable };
@@ -1,117 +0,0 @@
1
- import React from "react";
2
- import { useStore } from "@nanostores/react";
3
- import { toasts, removeToast } from "./toast";
4
- import { Toast } from "./types";
5
-
6
- const ToastItem: React.FC<{ toast: Toast }> = ({ toast }: { toast: Toast }) => {
7
- const getToastStyles = (type: Toast["type"]) => {
8
- const baseStyles = "flex items-start gap-3 p-4 rounded-2xl shadow-sm backdrop-blur-md border transition-all duration-300 max-w-sm";
9
-
10
- switch (type) {
11
- case "success":
12
- return `${baseStyles} bg-white/90 dark:bg-gray-800/90 text-green-700 dark:text-green-300 border-green-200/50 dark:border-green-800/50`;
13
- case "error":
14
- return `${baseStyles} bg-white/90 dark:bg-gray-800/90 text-red-700 dark:text-red-300 border-red-200/50 dark:border-red-800/50`;
15
- case "warning":
16
- return `${baseStyles} bg-white/90 dark:bg-gray-800/90 text-orange-700 dark:text-orange-300 border-orange-200/50 dark:border-orange-800/50`;
17
- case "info":
18
- default:
19
- return `${baseStyles} bg-white/90 dark:bg-gray-800/90 text-blue-700 dark:text-blue-300 border-blue-200/50 dark:border-blue-800/50`;
20
- }
21
- };
22
-
23
- const getIcon = (type: Toast["type"]) => {
24
- const iconClasses = "w-5 h-5 flex-shrink-0 mt-0.5 opacity-80";
25
-
26
- switch (type) {
27
- case "success":
28
- return (
29
- <svg className={iconClasses} fill="currentColor" viewBox="0 0 20 20">
30
- <path
31
- fillRule="evenodd"
32
- d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
33
- clipRule="evenodd"
34
- />
35
- </svg>
36
- );
37
- case "error":
38
- return (
39
- <svg className={iconClasses} fill="currentColor" viewBox="0 0 20 20">
40
- <path
41
- fillRule="evenodd"
42
- d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
43
- clipRule="evenodd"
44
- />
45
- </svg>
46
- );
47
- case "warning":
48
- return (
49
- <svg className={iconClasses} fill="currentColor" viewBox="0 0 20 20">
50
- <path
51
- fillRule="evenodd"
52
- d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"
53
- clipRule="evenodd"
54
- />
55
- </svg>
56
- );
57
- case "info":
58
- default:
59
- return (
60
- <svg className={iconClasses} fill="currentColor" viewBox="0 0 20 20">
61
- <path
62
- fillRule="evenodd"
63
- d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"
64
- clipRule="evenodd"
65
- />
66
- </svg>
67
- );
68
- }
69
- };
70
-
71
- return (
72
- <div className={getToastStyles(toast.type)}>
73
- <div className="flex-shrink-0">{getIcon(toast.type)}</div>
74
-
75
- <div className="flex-1 min-w-0">
76
- <div className="text-sm font-medium">{toast.title}</div>
77
- {toast.description && <div className="text-sm opacity-90 mt-1">{toast.description}</div>}
78
- {toast.action && (
79
- <button
80
- onClick={toast.action.onClick}
81
- className="text-sm font-medium text-current/80 hover:text-current mt-2 px-2 py-1 rounded-md hover:bg-white/10 transition-colors focus:outline-none focus:ring-2 focus:ring-current/50"
82
- >
83
- {toast.action.label}
84
- </button>
85
- )}
86
- </div>
87
-
88
- <button
89
- onClick={() => removeToast(toast.id)}
90
- className="flex-shrink-0 ml-2 p-1 rounded-full opacity-60 hover:opacity-100 hover:bg-black/10 dark:hover:bg-white/20 transition-all focus:outline-none focus:ring-2 focus:ring-current/50"
91
- aria-label="关闭通知"
92
- >
93
- <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
94
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
95
- </svg>
96
- </button>
97
- </div>
98
- );
99
- };
100
-
101
- export const Toaster: React.FC = () => {
102
- const currentToasts = useStore(toasts);
103
-
104
- if (currentToasts.length === 0) {
105
- return null;
106
- }
107
-
108
- return (
109
- <div className="fixed top-4 right-4 z-50 space-y-2 pointer-events-none">
110
- {currentToasts.map((toast: Toast) => (
111
- <div key={toast.id} className="pointer-events-auto animate-in slide-in-from-right-2 fade-in duration-200">
112
- <ToastItem toast={toast} />
113
- </div>
114
- ))}
115
- </div>
116
- );
117
- };
@@ -1,3 +0,0 @@
1
- export { Toaster } from "./Toaster";
2
- export { toast, removeToast, clearToasts } from "./toast";
3
- export type { Toast, ToastType, ToastOptions } from "./types";
@@ -1,50 +0,0 @@
1
- import { atom } from "nanostores";
2
- import { Toast, ToastType, ToastOptions } from "./types";
3
-
4
- let toastCounter = 0;
5
-
6
- export const toasts = atom<Toast[]>([]);
7
-
8
- const createToast = (type: ToastType, title: string, description?: string, options?: ToastOptions): string => {
9
- const id = `toast-${++toastCounter}`;
10
-
11
- const toast: Toast = {
12
- id,
13
- type,
14
- title,
15
- description,
16
- duration: options?.duration ?? 4000,
17
- action: options?.action,
18
- };
19
-
20
- toasts.set([...toasts.get(), toast]);
21
-
22
- // Auto remove after duration
23
- if (toast.duration && toast.duration > 0) {
24
- setTimeout(() => {
25
- removeToast(id);
26
- }, toast.duration);
27
- }
28
-
29
- return id;
30
- };
31
-
32
- export const toast = {
33
- success: (title: string, description?: string, options?: ToastOptions) => createToast("success", title, description, options),
34
-
35
- error: (title: string, description?: string, options?: ToastOptions) => createToast("error", title, description, options),
36
-
37
- warning: (title: string, description?: string, options?: ToastOptions) => createToast("warning", title, description, options),
38
-
39
- info: (title: string, description?: string, options?: ToastOptions) => createToast("info", title, description, options),
40
-
41
- custom: (type: ToastType, title: string, description?: string, options?: ToastOptions) => createToast(type, title, description, options),
42
- };
43
-
44
- export const removeToast = (id: string) => {
45
- toasts.set(toasts.get().filter((toast) => toast.id !== id));
46
- };
47
-
48
- export const clearToasts = () => {
49
- toasts.set([]);
50
- };
@@ -1,21 +0,0 @@
1
- export type ToastType = "success" | "error" | "warning" | "info";
2
-
3
- export interface Toast {
4
- id: string;
5
- type: ToastType;
6
- title: string;
7
- description?: string;
8
- duration?: number;
9
- action?: {
10
- label: string;
11
- onClick: () => void;
12
- };
13
- }
14
-
15
- export interface ToastOptions {
16
- duration?: number;
17
- action?: {
18
- label: string;
19
- onClick: () => void;
20
- };
21
- }