langgraph-ui-components 0.0.4 → 0.0.7

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 (520) hide show
  1. package/dist/index.es10.js +31 -16
  2. package/dist/index.es10.js.map +1 -1
  3. package/dist/index.es100.js +143 -3134
  4. package/dist/index.es100.js.map +1 -1
  5. package/dist/index.es101.js +202 -36
  6. package/dist/index.es101.js.map +1 -1
  7. package/dist/index.es102.js +14 -5
  8. package/dist/index.es102.js.map +1 -1
  9. package/dist/index.es103.js +27 -70
  10. package/dist/index.es103.js.map +1 -1
  11. package/dist/index.es104.js +28 -31
  12. package/dist/index.es104.js.map +1 -1
  13. package/dist/index.es105.js +3157 -5
  14. package/dist/index.es105.js.map +1 -1
  15. package/dist/index.es106.js +18 -2
  16. package/dist/index.es106.js.map +1 -1
  17. package/dist/index.es107.js +5 -11
  18. package/dist/index.es107.js.map +1 -1
  19. package/dist/index.es108.js +2 -503
  20. package/dist/index.es108.js.map +1 -1
  21. package/dist/index.es109.js +11 -5
  22. package/dist/index.es109.js.map +1 -1
  23. package/dist/index.es11.js +166 -123
  24. package/dist/index.es11.js.map +1 -1
  25. package/dist/index.es110.js +503 -2
  26. package/dist/index.es110.js.map +1 -1
  27. package/dist/index.es111.js +5 -146
  28. package/dist/index.es111.js.map +1 -1
  29. package/dist/index.es112.js +2 -908
  30. package/dist/index.es112.js.map +1 -1
  31. package/dist/index.es113.js +128 -262
  32. package/dist/index.es113.js.map +1 -1
  33. package/dist/index.es114.js +907 -3
  34. package/dist/index.es114.js.map +1 -1
  35. package/dist/index.es115.js +262 -426
  36. package/dist/index.es115.js.map +1 -1
  37. package/dist/index.es116.js +3 -47
  38. package/dist/index.es116.js.map +1 -1
  39. package/dist/index.es117.js +443 -21
  40. package/dist/index.es117.js.map +1 -1
  41. package/dist/index.es118.js +42 -75
  42. package/dist/index.es118.js.map +1 -1
  43. package/dist/index.es119.js +22 -129
  44. package/dist/index.es119.js.map +1 -1
  45. package/dist/index.es12.js +13 -103
  46. package/dist/index.es12.js.map +1 -1
  47. package/dist/index.es120.js +74 -44
  48. package/dist/index.es120.js.map +1 -1
  49. package/dist/index.es121.js +129 -10
  50. package/dist/index.es121.js.map +1 -1
  51. package/dist/index.es122.js +47 -43
  52. package/dist/index.es122.js.map +1 -1
  53. package/dist/index.es123.js +9 -98
  54. package/dist/index.es123.js.map +1 -1
  55. package/dist/index.es124.js +43 -51
  56. package/dist/index.es124.js.map +1 -1
  57. package/dist/index.es125.js +96 -13
  58. package/dist/index.es125.js.map +1 -1
  59. package/dist/index.es126.js +52 -14
  60. package/dist/index.es126.js.map +1 -1
  61. package/dist/index.es127.js +156 -81
  62. package/dist/index.es127.js.map +1 -1
  63. package/dist/index.es128.js +2 -2
  64. package/dist/index.es129.js +14 -55
  65. package/dist/index.es129.js.map +1 -1
  66. package/dist/index.es13.js +126 -32
  67. package/dist/index.es13.js.map +1 -1
  68. package/dist/index.es130.js +87 -98
  69. package/dist/index.es130.js.map +1 -1
  70. package/dist/index.es131.js +2 -191
  71. package/dist/index.es131.js.map +1 -1
  72. package/dist/index.es132.js +54 -108
  73. package/dist/index.es132.js.map +1 -1
  74. package/dist/index.es133.js +98 -33
  75. package/dist/index.es133.js.map +1 -1
  76. package/dist/index.es134.js +191 -10
  77. package/dist/index.es134.js.map +1 -1
  78. package/dist/index.es135.js +109 -10
  79. package/dist/index.es135.js.map +1 -1
  80. package/dist/index.es136.js +35 -12
  81. package/dist/index.es136.js.map +1 -1
  82. package/dist/index.es137.js +10 -91
  83. package/dist/index.es137.js.map +1 -1
  84. package/dist/index.es138.js +11 -275
  85. package/dist/index.es138.js.map +1 -1
  86. package/dist/index.es139.js +12 -2
  87. package/dist/index.es139.js.map +1 -1
  88. package/dist/index.es140.js +88 -161
  89. package/dist/index.es140.js.map +1 -1
  90. package/dist/index.es141.js +270 -46
  91. package/dist/index.es141.js.map +1 -1
  92. package/dist/index.es142.js +2 -40
  93. package/dist/index.es142.js.map +1 -1
  94. package/dist/index.es143.js +164 -35
  95. package/dist/index.es143.js.map +1 -1
  96. package/dist/index.es144.js +45 -34
  97. package/dist/index.es144.js.map +1 -1
  98. package/dist/index.es145.js +37 -21
  99. package/dist/index.es145.js.map +1 -1
  100. package/dist/index.es146.js +32 -588
  101. package/dist/index.es146.js.map +1 -1
  102. package/dist/index.es147.js +32 -117
  103. package/dist/index.es147.js.map +1 -1
  104. package/dist/index.es148.js +22 -162
  105. package/dist/index.es148.js.map +1 -1
  106. package/dist/index.es149.js +591 -2
  107. package/dist/index.es149.js.map +1 -1
  108. package/dist/index.es15.js +15 -15
  109. package/dist/index.es150.js +125 -2
  110. package/dist/index.es150.js.map +1 -1
  111. package/dist/index.es151.js +2 -2
  112. package/dist/index.es152.js +2 -22
  113. package/dist/index.es152.js.map +1 -1
  114. package/dist/index.es153.js +22 -2
  115. package/dist/index.es153.js.map +1 -1
  116. package/dist/index.es154.js +2 -25
  117. package/dist/index.es154.js.map +1 -1
  118. package/dist/index.es155.js +25 -8
  119. package/dist/index.es155.js.map +1 -1
  120. package/dist/index.es156.js +4 -5
  121. package/dist/index.es156.js.map +1 -1
  122. package/dist/index.es157.js +7 -12
  123. package/dist/index.es157.js.map +1 -1
  124. package/dist/index.es158.js +5 -6
  125. package/dist/index.es158.js.map +1 -1
  126. package/dist/index.es159.js +12 -63
  127. package/dist/index.es159.js.map +1 -1
  128. package/dist/index.es160.js +5 -21
  129. package/dist/index.es160.js.map +1 -1
  130. package/dist/index.es161.js +24 -5
  131. package/dist/index.es161.js.map +1 -1
  132. package/dist/index.es162.js +11 -348
  133. package/dist/index.es162.js.map +1 -1
  134. package/dist/index.es163.js +52 -23
  135. package/dist/index.es163.js.map +1 -1
  136. package/dist/index.es164.js +63 -11
  137. package/dist/index.es164.js.map +1 -1
  138. package/dist/index.es165.js +21 -53
  139. package/dist/index.es165.js.map +1 -1
  140. package/dist/index.es166.js +6 -7
  141. package/dist/index.es166.js.map +1 -1
  142. package/dist/index.es167.js +342 -96
  143. package/dist/index.es167.js.map +1 -1
  144. package/dist/index.es168.js +6 -118
  145. package/dist/index.es168.js.map +1 -1
  146. package/dist/index.es169.js +98 -131
  147. package/dist/index.es169.js.map +1 -1
  148. package/dist/index.es17.js +2 -2
  149. package/dist/index.es170.js +108 -104
  150. package/dist/index.es170.js.map +1 -1
  151. package/dist/index.es171.js +136 -6
  152. package/dist/index.es171.js.map +1 -1
  153. package/dist/index.es172.js +114 -3
  154. package/dist/index.es172.js.map +1 -1
  155. package/dist/index.es173.js +6 -2
  156. package/dist/index.es173.js.map +1 -1
  157. package/dist/index.es174.js +2 -3737
  158. package/dist/index.es174.js.map +1 -1
  159. package/dist/index.es175.js +3682 -287
  160. package/dist/index.es175.js.map +1 -1
  161. package/dist/index.es176.js +321 -88
  162. package/dist/index.es176.js.map +1 -1
  163. package/dist/index.es177.js +95 -119
  164. package/dist/index.es177.js.map +1 -1
  165. package/dist/index.es178.js +131 -13
  166. package/dist/index.es178.js.map +1 -1
  167. package/dist/index.es179.js +13 -150
  168. package/dist/index.es179.js.map +1 -1
  169. package/dist/index.es180.js +150 -13
  170. package/dist/index.es180.js.map +1 -1
  171. package/dist/index.es181.js +13 -6
  172. package/dist/index.es181.js.map +1 -1
  173. package/dist/index.es182.js +6 -19
  174. package/dist/index.es182.js.map +1 -1
  175. package/dist/index.es183.js +17 -86
  176. package/dist/index.es183.js.map +1 -1
  177. package/dist/index.es184.js +69 -222
  178. package/dist/index.es184.js.map +1 -1
  179. package/dist/index.es185.js +242 -23
  180. package/dist/index.es185.js.map +1 -1
  181. package/dist/index.es186.js +23 -5
  182. package/dist/index.es186.js.map +1 -1
  183. package/dist/index.es187.js +6 -4
  184. package/dist/index.es187.js.map +1 -1
  185. package/dist/index.es188.js +4 -18
  186. package/dist/index.es188.js.map +1 -1
  187. package/dist/index.es189.js +16 -6
  188. package/dist/index.es189.js.map +1 -1
  189. package/dist/index.es19.js +119 -15
  190. package/dist/index.es19.js.map +1 -1
  191. package/dist/index.es190.js +7 -141
  192. package/dist/index.es190.js.map +1 -1
  193. package/dist/index.es191.js +142 -2
  194. package/dist/index.es191.js.map +1 -1
  195. package/dist/index.es192.js +2 -32
  196. package/dist/index.es192.js.map +1 -1
  197. package/dist/index.es193.js +31 -5
  198. package/dist/index.es193.js.map +1 -1
  199. package/dist/index.es194.js +5 -105
  200. package/dist/index.es194.js.map +1 -1
  201. package/dist/index.es195.js +106 -13
  202. package/dist/index.es195.js.map +1 -1
  203. package/dist/index.es196.js +12 -17
  204. package/dist/index.es196.js.map +1 -1
  205. package/dist/index.es197.js +15 -28
  206. package/dist/index.es197.js.map +1 -1
  207. package/dist/index.es198.js +30 -3
  208. package/dist/index.es198.js.map +1 -1
  209. package/dist/index.es199.js +3 -4
  210. package/dist/index.es199.js.map +1 -1
  211. package/dist/index.es2.js +24 -16
  212. package/dist/index.es2.js.map +1 -1
  213. package/dist/index.es20.js +17 -68
  214. package/dist/index.es20.js.map +1 -1
  215. package/dist/index.es200.js +5 -5
  216. package/dist/index.es200.js.map +1 -1
  217. package/dist/index.es201.js +4 -36
  218. package/dist/index.es201.js.map +1 -1
  219. package/dist/index.es202.js +36 -7
  220. package/dist/index.es202.js.map +1 -1
  221. package/dist/index.es203.js +7 -5
  222. package/dist/index.es203.js.map +1 -1
  223. package/dist/index.es204.js +5 -6
  224. package/dist/index.es204.js.map +1 -1
  225. package/dist/index.es205.js +6 -41
  226. package/dist/index.es205.js.map +1 -1
  227. package/dist/index.es206.js +41 -12
  228. package/dist/index.es206.js.map +1 -1
  229. package/dist/index.es207.js +11 -240
  230. package/dist/index.es207.js.map +1 -1
  231. package/dist/index.es208.js +239 -48
  232. package/dist/index.es208.js.map +1 -1
  233. package/dist/index.es209.js +49 -33
  234. package/dist/index.es209.js.map +1 -1
  235. package/dist/index.es21.js +3 -3
  236. package/dist/index.es21.js.map +1 -1
  237. package/dist/index.es210.js +32 -10
  238. package/dist/index.es210.js.map +1 -1
  239. package/dist/index.es211.js +12 -7
  240. package/dist/index.es211.js.map +1 -1
  241. package/dist/index.es212.js +7 -6
  242. package/dist/index.es212.js.map +1 -1
  243. package/dist/index.es213.js +6 -64
  244. package/dist/index.es213.js.map +1 -1
  245. package/dist/index.es214.js +60 -36
  246. package/dist/index.es214.js.map +1 -1
  247. package/dist/index.es215.js +39 -30
  248. package/dist/index.es215.js.map +1 -1
  249. package/dist/index.es216.js +30 -60
  250. package/dist/index.es216.js.map +1 -1
  251. package/dist/index.es217.js +60 -13
  252. package/dist/index.es217.js.map +1 -1
  253. package/dist/index.es218.js +9 -17
  254. package/dist/index.es218.js.map +1 -1
  255. package/dist/index.es219.js +23 -5
  256. package/dist/index.es219.js.map +1 -1
  257. package/dist/index.es22.js +1 -1
  258. package/dist/index.es220.js +4 -16
  259. package/dist/index.es220.js.map +1 -1
  260. package/dist/index.es221.js +14 -30
  261. package/dist/index.es221.js.map +1 -1
  262. package/dist/index.es222.js +32 -4
  263. package/dist/index.es222.js.map +1 -1
  264. package/dist/index.es223.js +4 -4
  265. package/dist/index.es223.js.map +1 -1
  266. package/dist/index.es224.js +5 -5
  267. package/dist/index.es224.js.map +1 -1
  268. package/dist/index.es225.js +5 -8
  269. package/dist/index.es225.js.map +1 -1
  270. package/dist/index.es226.js +6 -90
  271. package/dist/index.es226.js.map +1 -1
  272. package/dist/index.es227.js +90 -16
  273. package/dist/index.es227.js.map +1 -1
  274. package/dist/index.es228.js +17 -761
  275. package/dist/index.es228.js.map +1 -1
  276. package/dist/index.es229.js +762 -66
  277. package/dist/index.es229.js.map +1 -1
  278. package/dist/index.es230.js +66 -174
  279. package/dist/index.es230.js.map +1 -1
  280. package/dist/index.es231.js +169 -33
  281. package/dist/index.es231.js.map +1 -1
  282. package/dist/index.es232.js +37 -136
  283. package/dist/index.es232.js.map +1 -1
  284. package/dist/index.es233.js +136 -92
  285. package/dist/index.es233.js.map +1 -1
  286. package/dist/index.es234.js +92 -32
  287. package/dist/index.es234.js.map +1 -1
  288. package/dist/index.es235.js +32 -284
  289. package/dist/index.es235.js.map +1 -1
  290. package/dist/index.es236.js +284 -25
  291. package/dist/index.es236.js.map +1 -1
  292. package/dist/index.es237.js +22 -20
  293. package/dist/index.es237.js.map +1 -1
  294. package/dist/index.es238.js +22 -13
  295. package/dist/index.es238.js.map +1 -1
  296. package/dist/index.es239.js +12 -12
  297. package/dist/index.es239.js.map +1 -1
  298. package/dist/index.es24.js +103 -305
  299. package/dist/index.es24.js.map +1 -1
  300. package/dist/index.es240.js +13 -24
  301. package/dist/index.es240.js.map +1 -1
  302. package/dist/index.es241.js +22 -42
  303. package/dist/index.es241.js.map +1 -1
  304. package/dist/index.es242.js +45 -11
  305. package/dist/index.es242.js.map +1 -1
  306. package/dist/index.es243.js +10 -10
  307. package/dist/index.es243.js.map +1 -1
  308. package/dist/index.es244.js +10 -10
  309. package/dist/index.es244.js.map +1 -1
  310. package/dist/index.es245.js +11 -14
  311. package/dist/index.es245.js.map +1 -1
  312. package/dist/index.es246.js +14 -11
  313. package/dist/index.es246.js.map +1 -1
  314. package/dist/index.es247.js +11 -11
  315. package/dist/index.es247.js.map +1 -1
  316. package/dist/index.es248.js +10 -10
  317. package/dist/index.es248.js.map +1 -1
  318. package/dist/index.es249.js +11 -15
  319. package/dist/index.es249.js.map +1 -1
  320. package/dist/index.es25.js +68 -121
  321. package/dist/index.es25.js.map +1 -1
  322. package/dist/index.es250.js +15 -11
  323. package/dist/index.es250.js.map +1 -1
  324. package/dist/index.es251.js +10 -10
  325. package/dist/index.es251.js.map +1 -1
  326. package/dist/index.es252.js +11 -11
  327. package/dist/index.es252.js.map +1 -1
  328. package/dist/index.es253.js +10 -10
  329. package/dist/index.es253.js.map +1 -1
  330. package/dist/index.es254.js +10 -10
  331. package/dist/index.es254.js.map +1 -1
  332. package/dist/index.es255.js +10 -10
  333. package/dist/index.es255.js.map +1 -1
  334. package/dist/index.es256.js +10 -10
  335. package/dist/index.es256.js.map +1 -1
  336. package/dist/index.es257.js +10 -10
  337. package/dist/index.es257.js.map +1 -1
  338. package/dist/index.es258.js +11 -56
  339. package/dist/index.es258.js.map +1 -1
  340. package/dist/index.es259.js +53 -46
  341. package/dist/index.es259.js.map +1 -1
  342. package/dist/index.es26.js +305 -5
  343. package/dist/index.es26.js.map +1 -1
  344. package/dist/index.es260.js +42 -112
  345. package/dist/index.es260.js.map +1 -1
  346. package/dist/index.es261.js +87 -352
  347. package/dist/index.es261.js.map +1 -1
  348. package/dist/index.es262.js +381 -15
  349. package/dist/index.es262.js.map +1 -1
  350. package/dist/index.es263.js +17 -10
  351. package/dist/index.es263.js.map +1 -1
  352. package/dist/index.es264.js +10 -30
  353. package/dist/index.es264.js.map +1 -1
  354. package/dist/index.es265.js +17 -17
  355. package/dist/index.es265.js.map +1 -1
  356. package/dist/index.es266.js +25 -56
  357. package/dist/index.es266.js.map +1 -1
  358. package/dist/index.es267.js +59 -14
  359. package/dist/index.es267.js.map +1 -1
  360. package/dist/index.es268.js +14 -74
  361. package/dist/index.es268.js.map +1 -1
  362. package/dist/index.es269.js +77 -11
  363. package/dist/index.es269.js.map +1 -1
  364. package/dist/index.es270.js +10 -10
  365. package/dist/index.es270.js.map +1 -1
  366. package/dist/index.es271.js +11 -15
  367. package/dist/index.es271.js.map +1 -1
  368. package/dist/index.es272.js +14 -51
  369. package/dist/index.es272.js.map +1 -1
  370. package/dist/index.es273.js +44 -158
  371. package/dist/index.es273.js.map +1 -1
  372. package/dist/index.es274.js +167 -2
  373. package/dist/index.es274.js.map +1 -1
  374. package/dist/index.es275.js +2 -11
  375. package/dist/index.es275.js.map +1 -1
  376. package/dist/index.es276.js +9 -18
  377. package/dist/index.es276.js.map +1 -1
  378. package/dist/index.es277.js +17 -36
  379. package/dist/index.es277.js.map +1 -1
  380. package/dist/index.es278.js +42 -0
  381. package/dist/index.es278.js.map +1 -0
  382. package/dist/index.es28.js +7 -7
  383. package/dist/index.es29.js +1 -1
  384. package/dist/index.es32.js +4 -4
  385. package/dist/index.es33.js +1191 -13
  386. package/dist/index.es33.js.map +1 -1
  387. package/dist/index.es34.js +6 -117
  388. package/dist/index.es34.js.map +1 -1
  389. package/dist/index.es35.js +8 -70
  390. package/dist/index.es35.js.map +1 -1
  391. package/dist/index.es36.js +148 -19
  392. package/dist/index.es36.js.map +1 -1
  393. package/dist/index.es37.js +112 -255
  394. package/dist/index.es37.js.map +1 -1
  395. package/dist/index.es38.js +68 -40
  396. package/dist/index.es38.js.map +1 -1
  397. package/dist/index.es39.js +17 -214
  398. package/dist/index.es39.js.map +1 -1
  399. package/dist/index.es40.js +247 -53
  400. package/dist/index.es40.js.map +1 -1
  401. package/dist/index.es41.js +24 -123
  402. package/dist/index.es41.js.map +1 -1
  403. package/dist/index.es42.js +205 -14
  404. package/dist/index.es42.js.map +1 -1
  405. package/dist/index.es43.js +58 -221
  406. package/dist/index.es43.js.map +1 -1
  407. package/dist/index.es44.js +140 -7
  408. package/dist/index.es44.js.map +1 -1
  409. package/dist/index.es45.js +17 -1185
  410. package/dist/index.es45.js.map +1 -1
  411. package/dist/index.es46.js +229 -6
  412. package/dist/index.es46.js.map +1 -1
  413. package/dist/index.es47.js +15 -146
  414. package/dist/index.es47.js.map +1 -1
  415. package/dist/index.es48.js +6 -8
  416. package/dist/index.es48.js.map +1 -1
  417. package/dist/index.es49.js +84 -87
  418. package/dist/index.es49.js.map +1 -1
  419. package/dist/index.es50.js +7 -3
  420. package/dist/index.es50.js.map +1 -1
  421. package/dist/index.es51.js +14 -35
  422. package/dist/index.es51.js.map +1 -1
  423. package/dist/index.es52.js +7 -71
  424. package/dist/index.es52.js.map +1 -1
  425. package/dist/index.es53.js +89 -33
  426. package/dist/index.es53.js.map +1 -1
  427. package/dist/index.es54.js +3 -305
  428. package/dist/index.es54.js.map +1 -1
  429. package/dist/index.es55.js +36 -9
  430. package/dist/index.es55.js.map +1 -1
  431. package/dist/index.es56.js +64 -83
  432. package/dist/index.es56.js.map +1 -1
  433. package/dist/index.es57.js +36 -6
  434. package/dist/index.es57.js.map +1 -1
  435. package/dist/index.es58.js +303 -12
  436. package/dist/index.es58.js.map +1 -1
  437. package/dist/index.es59.js +9 -143
  438. package/dist/index.es59.js.map +1 -1
  439. package/dist/index.es60.js +5 -299
  440. package/dist/index.es60.js.map +1 -1
  441. package/dist/index.es61.js +158 -61
  442. package/dist/index.es61.js.map +1 -1
  443. package/dist/index.es62.js +658 -199
  444. package/dist/index.es62.js.map +1 -1
  445. package/dist/index.es63.js +138 -29
  446. package/dist/index.es63.js.map +1 -1
  447. package/dist/index.es64.js +299 -8
  448. package/dist/index.es64.js.map +1 -1
  449. package/dist/index.es65.js +65 -11
  450. package/dist/index.es65.js.map +1 -1
  451. package/dist/index.es66.js +201 -175
  452. package/dist/index.es66.js.map +1 -1
  453. package/dist/index.es67.js +33 -23
  454. package/dist/index.es67.js.map +1 -1
  455. package/dist/index.es68.js +8 -1399
  456. package/dist/index.es68.js.map +1 -1
  457. package/dist/index.es69.js +12 -9
  458. package/dist/index.es69.js.map +1 -1
  459. package/dist/index.es70.js +187 -8
  460. package/dist/index.es70.js.map +1 -1
  461. package/dist/index.es71.js +24 -6
  462. package/dist/index.es71.js.map +1 -1
  463. package/dist/index.es72.js +1384 -147
  464. package/dist/index.es72.js.map +1 -1
  465. package/dist/index.es73.js +9 -672
  466. package/dist/index.es73.js.map +1 -1
  467. package/dist/index.es74.js +8 -12
  468. package/dist/index.es74.js.map +1 -1
  469. package/dist/index.es75.js +35 -38
  470. package/dist/index.es75.js.map +1 -1
  471. package/dist/index.es76.js +5 -34
  472. package/dist/index.es76.js.map +1 -1
  473. package/dist/index.es77.js +64 -223
  474. package/dist/index.es77.js.map +1 -1
  475. package/dist/index.es78.js +36 -29
  476. package/dist/index.es78.js.map +1 -1
  477. package/dist/index.es79.js +11 -74
  478. package/dist/index.es79.js.map +1 -1
  479. package/dist/index.es80.js +37 -73
  480. package/dist/index.es80.js.map +1 -1
  481. package/dist/index.es81.js +32 -50
  482. package/dist/index.es81.js.map +1 -1
  483. package/dist/index.es82.js +228 -26
  484. package/dist/index.es82.js.map +1 -1
  485. package/dist/index.es83.js +6 -19
  486. package/dist/index.es83.js.map +1 -1
  487. package/dist/index.es84.js +72 -54
  488. package/dist/index.es84.js.map +1 -1
  489. package/dist/index.es85.js +76 -13
  490. package/dist/index.es85.js.map +1 -1
  491. package/dist/index.es86.js +47 -132
  492. package/dist/index.es86.js.map +1 -1
  493. package/dist/index.es87.js +29 -20
  494. package/dist/index.es87.js.map +1 -1
  495. package/dist/index.es88.js +37 -176
  496. package/dist/index.es88.js.map +1 -1
  497. package/dist/index.es89.js +49 -233
  498. package/dist/index.es89.js.map +1 -1
  499. package/dist/index.es90.js +13 -355
  500. package/dist/index.es90.js.map +1 -1
  501. package/dist/index.es91.js +128 -128
  502. package/dist/index.es91.js.map +1 -1
  503. package/dist/index.es92.js +21 -70
  504. package/dist/index.es92.js.map +1 -1
  505. package/dist/index.es93.js +179 -34
  506. package/dist/index.es93.js.map +1 -1
  507. package/dist/index.es94.js +230 -26
  508. package/dist/index.es94.js.map +1 -1
  509. package/dist/index.es95.js +346 -157
  510. package/dist/index.es95.js.map +1 -1
  511. package/dist/index.es96.js +129 -195
  512. package/dist/index.es96.js.map +1 -1
  513. package/dist/index.es97.js +70 -14
  514. package/dist/index.es97.js.map +1 -1
  515. package/dist/index.es98.js +35 -28
  516. package/dist/index.es98.js.map +1 -1
  517. package/dist/index.es99.js +34 -31
  518. package/dist/index.es99.js.map +1 -1
  519. package/dist/styles.css +1 -1
  520. package/package.json +8 -11
@@ -1,130 +1,173 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { FileIcon, X, Paperclip, MoveUp } from "lucide-react";
3
- import "react";
4
- function ChatInput({
5
- input,
6
- inputFileAccept = ".png,.jpg,.jpeg,.pdf,.docx",
7
- setInput,
8
- handleSubmit,
9
- fileInput,
10
- setFileInput,
11
- handleFileSelect,
12
- isLoading = false,
13
- onCancel
14
- }) {
15
- const canSubmit = (input.trim().length > 0 || fileInput.length > 0) && !isLoading;
16
- return /* @__PURE__ */ jsxs(
17
- "form",
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useStreamContext } from "./index.es6.js";
3
+ import { isToolMessage, isAiWithToolCalls } from "./index.es20.js";
4
+ import React__default, { useMemo, useRef, useCallback, useEffect, useLayoutEffect } from "react";
5
+ import AgentMessage from "./index.es21.js";
6
+ import CustomComponentRender from "./index.es22.js";
7
+ import HumanMessage from "./index.es23.js";
8
+ import Thinking from "./index.es24.js";
9
+ import ToolCallFunctions from "./index.es25.js";
10
+ function ChatBody({ setIsFirstMessage, enableToolCallIndicator }) {
11
+ const stream = useStreamContext();
12
+ const messages = stream.messages;
13
+ const isLoading = stream.isLoading;
14
+ const memoMessages = useMemo(() => messages ?? [], [messages]);
15
+ const containerRef = useRef(null);
16
+ const prevMessageCountRef = useRef(0);
17
+ const shouldAutoScrollRef = useRef(true);
18
+ const getScrollContainer = useCallback(() => {
19
+ if (containerRef.current) {
20
+ let parent = containerRef.current.parentElement;
21
+ while (parent) {
22
+ const style = window.getComputedStyle(parent);
23
+ if (style.overflowY === "auto" || style.overflowY === "scroll") {
24
+ return parent;
25
+ }
26
+ parent = parent.parentElement;
27
+ }
28
+ }
29
+ return null;
30
+ }, []);
31
+ useEffect(() => {
32
+ if (memoMessages.length > 0 && setIsFirstMessage) {
33
+ setIsFirstMessage(false);
34
+ }
35
+ }, [memoMessages.length, setIsFirstMessage]);
36
+ const renderMessage = useCallback((msg, index, messagesArray) => {
37
+ if (!msg.content.length) return null;
38
+ if (msg.additional_kwargs?.hidden) {
39
+ return null;
40
+ }
41
+ const msgKey = msg.id ?? `msg-${index}`;
42
+ if (msg.type === "human") {
43
+ return /* @__PURE__ */ jsx(HumanMessage, { message: msg }, msgKey);
44
+ }
45
+ if (isToolMessage(msg)) {
46
+ return null;
47
+ }
48
+ if (msg.type === "ai" && index > 0) {
49
+ let prevIndex = index - 1;
50
+ while (prevIndex >= 0 && isToolMessage(messagesArray[prevIndex])) {
51
+ prevIndex--;
52
+ }
53
+ if (prevIndex >= 0 && messagesArray[prevIndex].type === "ai") {
54
+ return null;
55
+ }
56
+ }
57
+ const groupedMessages = [msg];
58
+ const toolMessages = [];
59
+ let nextIndex = index + 1;
60
+ while (nextIndex < messagesArray.length) {
61
+ const nextMsg = messagesArray[nextIndex];
62
+ if (isToolMessage(nextMsg)) {
63
+ toolMessages.push(nextMsg);
64
+ nextIndex++;
65
+ } else if (nextMsg.type === "ai") {
66
+ groupedMessages.push(nextMsg);
67
+ nextIndex++;
68
+ } else {
69
+ break;
70
+ }
71
+ }
72
+ const combinedContent = groupedMessages.map((m) => {
73
+ if (typeof m.content === "string") return m.content;
74
+ if (Array.isArray(m.content)) {
75
+ return m.content.map((c) => c.type === "text" ? c.text : "").filter(Boolean).join(" ");
76
+ }
77
+ return "";
78
+ }).filter(Boolean).join("\n\n");
79
+ const combinedMessage = {
80
+ ...msg,
81
+ content: combinedContent
82
+ };
83
+ const isLastMessageGroup = nextIndex >= messagesArray.length;
84
+ const isStreamingThisMessage = isLoading && isLastMessageGroup;
85
+ const hasToolCalls = isAiWithToolCalls(msg);
86
+ return /* @__PURE__ */ jsxs(React__default.Fragment, { children: [
87
+ toolMessages.length > 0 && enableToolCallIndicator && hasToolCalls && /* @__PURE__ */ jsx(
88
+ ToolCallFunctions,
89
+ {
90
+ title: "Agent Thinking",
91
+ toolMessages
92
+ }
93
+ ),
94
+ combinedContent && /* @__PURE__ */ jsx(
95
+ AgentMessage,
96
+ {
97
+ message: combinedMessage,
98
+ isStreaming: isStreamingThisMessage
99
+ }
100
+ ),
101
+ groupedMessages.map((m) => /* @__PURE__ */ jsx(CustomComponentRender, { message: m, thread: stream }, m.id))
102
+ ] }, msgKey);
103
+ }, [isLoading, stream, enableToolCallIndicator]);
104
+ const renderedMessages = useMemo(() => {
105
+ return memoMessages.map((msg, index) => {
106
+ const element = renderMessage(msg, index, memoMessages);
107
+ if (element && !element.key) {
108
+ return React__default.cloneElement(element, { key: msg.id ?? `msg-${index}` });
109
+ }
110
+ return element;
111
+ });
112
+ }, [memoMessages, renderMessage]);
113
+ useEffect(() => {
114
+ const scrollContainer = getScrollContainer();
115
+ if (!scrollContainer) return;
116
+ const handleScroll = () => {
117
+ const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
118
+ const distanceFromBottom = scrollHeight - scrollTop - clientHeight;
119
+ shouldAutoScrollRef.current = distanceFromBottom < 100;
120
+ };
121
+ scrollContainer.addEventListener("scroll", handleScroll);
122
+ return () => scrollContainer.removeEventListener("scroll", handleScroll);
123
+ }, [getScrollContainer]);
124
+ useEffect(() => {
125
+ const scrollContainer = getScrollContainer();
126
+ if (!scrollContainer) return;
127
+ const currentCount = memoMessages.length;
128
+ const hasNewMessage = currentCount > prevMessageCountRef.current;
129
+ if (hasNewMessage) {
130
+ scrollContainer.scrollTop = scrollContainer.scrollHeight;
131
+ shouldAutoScrollRef.current = true;
132
+ }
133
+ prevMessageCountRef.current = currentCount;
134
+ }, [memoMessages, getScrollContainer]);
135
+ useEffect(() => {
136
+ const scrollContainer = getScrollContainer();
137
+ if (!scrollContainer || !isLoading) return;
138
+ const observer = new MutationObserver(() => {
139
+ if (shouldAutoScrollRef.current && scrollContainer) {
140
+ scrollContainer.scrollTop = scrollContainer.scrollHeight;
141
+ }
142
+ });
143
+ if (containerRef.current) {
144
+ observer.observe(containerRef.current, {
145
+ childList: true,
146
+ subtree: true,
147
+ characterData: true
148
+ });
149
+ }
150
+ return () => observer.disconnect();
151
+ }, [isLoading, getScrollContainer]);
152
+ useLayoutEffect(() => {
153
+ const scrollContainer = getScrollContainer();
154
+ if (isLoading && shouldAutoScrollRef.current && scrollContainer) {
155
+ scrollContainer.scrollTop = scrollContainer.scrollHeight;
156
+ }
157
+ });
158
+ return /* @__PURE__ */ jsx(
159
+ "div",
18
160
  {
19
- onSubmit: handleSubmit,
20
- className: "relative flex flex-col gap-2 border rounded-xl m-2 bg-zinc-900 border-zinc-800",
21
- children: [
22
- fileInput.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex-1 flex-col gap-2 p-2 bg-zinc-900 border-b border-zinc-700 max-h-48 thread-scrollbar", children: fileInput.map((file, index) => /* @__PURE__ */ jsxs(
23
- "div",
24
- {
25
- className: "flex items-center justify-between gap-3 bg-zinc-800 p-2 rounded group hover:bg-zinc-700 transition-colors",
26
- children: [
27
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: [
28
- /* @__PURE__ */ jsx(FileIcon, { className: "text-blue-400 shrink-0", size: 20 }),
29
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col min-w-0 overflow-hidden", children: [
30
- /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200 truncate", children: file.fileName }),
31
- /* @__PURE__ */ jsx("span", { className: "text-[10px] text-zinc-500 truncate", children: file.fileType || "Unknown file type" })
32
- ] })
33
- ] }),
34
- /* @__PURE__ */ jsx(
35
- "button",
36
- {
37
- type: "button",
38
- onClick: () => setFileInput((prev) => prev.filter((_, i) => i !== index)),
39
- className: "shrink-0 p-1 rounded hover:bg-zinc-600 transition-colors",
40
- "aria-label": "Remove file",
41
- children: /* @__PURE__ */ jsx(X, { size: 16, className: "text-red-400" })
42
- }
43
- )
44
- ]
45
- },
46
- `file-${index}-${file.fileName}`
47
- )) }),
48
- /* @__PURE__ */ jsx(
49
- "textarea",
50
- {
51
- placeholder: "Type your message...",
52
- value: input,
53
- onChange: (e) => {
54
- setInput(e.target.value);
55
- const maxHeight = 300;
56
- e.target.style.height = "auto";
57
- e.target.style.height = Math.min(e.target.scrollHeight, maxHeight) + "px";
58
- },
59
- onKeyDown: (e) => {
60
- if (e.key === "Enter" && !e.shiftKey && !e.metaKey && !e.nativeEvent.isComposing) {
61
- e.preventDefault();
62
- if (canSubmit) {
63
- e.currentTarget.form?.requestSubmit();
64
- }
65
- }
66
- },
67
- disabled: isLoading,
68
- className: "w-full field-sizing-content resize-none p-3.5 bg-transparent text-white placeholder-zinc-500 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed overflow-y-auto thread-scrollbar",
69
- rows: 1
70
- }
71
- ),
72
- /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center px-1 pb-2", children: [
73
- /* @__PURE__ */ jsxs("div", { className: "flex gap-1 m-2", children: [
74
- /* @__PURE__ */ jsx(
75
- "label",
76
- {
77
- htmlFor: "file-input",
78
- className: `cursor-pointer ${isLoading ? "opacity-50 cursor-not-allowed" : ""}`,
79
- children: /* @__PURE__ */ jsx(
80
- Paperclip,
81
- {
82
- size: 24,
83
- className: "text-zinc-400 hover:text-white hover:bg-zinc-800 rounded p-1 transition-colors"
84
- }
85
- )
86
- }
87
- ),
88
- /* @__PURE__ */ jsx(
89
- "input",
90
- {
91
- id: "file-input",
92
- type: "file",
93
- multiple: true,
94
- disabled: isLoading,
95
- accept: inputFileAccept,
96
- className: "hidden",
97
- onChange: handleFileSelect
98
- }
99
- )
100
- ] }),
101
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2 items-center", children: [
102
- isLoading && onCancel && /* @__PURE__ */ jsx(
103
- "button",
104
- {
105
- type: "button",
106
- onClick: onCancel,
107
- className: "px-3 py-1 text-xs text-zinc-400 hover:text-white hover:bg-zinc-800 rounded transition-colors",
108
- children: "Cancel"
109
- }
110
- ),
111
- /* @__PURE__ */ jsx(
112
- "button",
113
- {
114
- type: "submit",
115
- disabled: !canSubmit,
116
- className: "focus:outline-none transition-all bg-zinc-300 border rounded-full p-1 cursor-pointer",
117
- style: { border: "none" },
118
- children: /* @__PURE__ */ jsx(MoveUp, { size: 24, className: "text-black p-1" })
119
- }
120
- )
121
- ] })
122
- ] })
123
- ]
161
+ ref: containerRef,
162
+ className: "flex flex-col gap-4 rounded-4xl p-2",
163
+ children: memoMessages.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full text-zinc-500", children: "Start a conversation..." }) : /* @__PURE__ */ jsxs(Fragment, { children: [
164
+ renderedMessages,
165
+ isLoading && memoMessages.length > 0 && memoMessages[memoMessages.length - 1].type === "human" && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx(Thinking, {}) })
166
+ ] })
124
167
  }
125
168
  );
126
169
  }
127
170
  export {
128
- ChatInput as default
171
+ ChatBody as default
129
172
  };
130
173
  //# sourceMappingURL=index.es11.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es11.js","sources":["../src/components/sidebar/ChatInput.tsx"],"sourcesContent":["import type { FileInfo } from \"@/types/fileInput\";\nimport { FileIcon, MoveUp, Paperclip, X } from \"lucide-react\";\nimport {\n type ChangeEvent,\n type Dispatch,\n type FormEvent,\n type SetStateAction,\n} from \"react\";\n\nexport default function ChatInput({\n input,\n inputFileAccept = \".png,.jpg,.jpeg,.pdf,.docx\",\n setInput,\n handleSubmit,\n fileInput,\n setFileInput,\n handleFileSelect,\n isLoading = false,\n onCancel,\n}: {\n input: string;\n setInput: (value: string) => void;\n handleSubmit: (e: FormEvent<HTMLFormElement>) => void;\n fileInput: FileInfo[];\n setFileInput: Dispatch<SetStateAction<FileInfo[]>>;\n handleFileSelect: (event: ChangeEvent<HTMLInputElement>) => void;\n inputFileAccept?: string;\n isLoading?: boolean;\n onCancel?: () => void;\n}) {\n const canSubmit =\n (input.trim().length > 0 || fileInput.length > 0) && !isLoading;\n\n return (\n <form\n onSubmit={handleSubmit}\n className=\"relative flex flex-col gap-2 border rounded-xl m-2 bg-zinc-900 border-zinc-800\"\n >\n {/* File attachments preview */}\n {fileInput.length > 0 && (\n <div className=\"flex-1 flex-col gap-2 p-2 bg-zinc-900 border-b border-zinc-700 max-h-48 thread-scrollbar\">\n {fileInput.map((file, index) => (\n <div\n key={`file-${index}-${file.fileName}`}\n className=\"flex items-center justify-between gap-3 bg-zinc-800 p-2 rounded group hover:bg-zinc-700 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n <FileIcon className=\"text-blue-400 shrink-0\" size={20} />\n <div className=\"flex flex-col min-w-0 overflow-hidden\">\n <span className=\"text-xs font-medium text-zinc-200 truncate\">\n {file.fileName}\n </span>\n <span className=\"text-[10px] text-zinc-500 truncate\">\n {file.fileType || \"Unknown file type\"}\n </span>\n </div>\n </div>\n\n <button\n type=\"button\"\n onClick={() =>\n setFileInput((prev) => prev.filter((_, i) => i !== index))\n }\n className=\"shrink-0 p-1 rounded hover:bg-zinc-600 transition-colors\"\n aria-label=\"Remove file\"\n >\n <X size={16} className=\"text-red-400\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Text input */}\n <textarea\n placeholder=\"Type your message...\"\n value={input}\n onChange={(e) => {\n setInput(e.target.value)\n const maxHeight = 300; // max height in pixels\n e.target.style.height = \"auto\"; // reset height\n e.target.style.height = Math.min(e.target.scrollHeight, maxHeight) + \"px\";\n }}\n onKeyDown={(e) => {\n if (\n e.key === \"Enter\" &&\n !e.shiftKey &&\n !e.metaKey &&\n !e.nativeEvent.isComposing\n ) {\n e.preventDefault();\n if (canSubmit) {\n e.currentTarget.form?.requestSubmit();\n }\n }\n }}\n disabled={isLoading}\n className=\"w-full field-sizing-content resize-none p-3.5 bg-transparent text-white placeholder-zinc-500 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed overflow-y-auto thread-scrollbar\"\n rows={1}\n />\n\n {/* Footer with controls */}\n <div className=\"flex justify-between items-center px-1 pb-2\">\n <div className=\"flex gap-1 m-2\">\n <label\n htmlFor=\"file-input\"\n className={`cursor-pointer ${isLoading ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n >\n <Paperclip\n size={24}\n className=\"text-zinc-400 hover:text-white hover:bg-zinc-800 rounded p-1 transition-colors\"\n />\n </label>\n <input\n id=\"file-input\"\n type=\"file\"\n multiple\n disabled={isLoading}\n accept={inputFileAccept}\n className=\"hidden\"\n onChange={handleFileSelect}\n />\n </div>\n\n <div className=\"flex gap-2 items-center\">\n {isLoading && onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-3 py-1 text-xs text-zinc-400 hover:text-white hover:bg-zinc-800 rounded transition-colors\"\n >\n Cancel\n </button>\n )}\n\n <button\n type=\"submit\"\n disabled={!canSubmit}\n className=\"focus:outline-none transition-all bg-zinc-300 border rounded-full p-1 cursor-pointer\"\n style={{ border: \"none\" }}\n >\n <MoveUp size={24} className=\"text-black p-1\" />\n </button>\n </div>\n </div>\n </form>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.es11.js","sources":["../src/components/ChatBody.tsx"],"sourcesContent":["import { useStreamContext } from \"@/providers/Stream\";\nimport { logger } from \"@/utils/logger\";\nimport { isAiWithToolCalls, isToolMessage } from \"@/utils/utils\";\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from \"react\";\nimport AgentMessage from \"./messages/AgentMessage\";\nimport CustomComponentRender from \"./messages/CustomComponentRender\";\nimport HumanMessage from \"./messages/HumanMessage\";\nimport Thinking from \"./Thinking\";\nimport ToolCallFunctions from \"./ToolCallFunctions\";\n\nexport default function ChatBody({ setIsFirstMessage, enableToolCallIndicator }: { setIsFirstMessage?: React.Dispatch<React.SetStateAction<boolean>>, enableToolCallIndicator?: boolean }) {\n const stream = useStreamContext();\n const messages = stream.messages;\n const isLoading = stream.isLoading;\n\n logger.debug(\"ChatBody render - messages count:\", messages, \"isLoading:\", isLoading);\n\n // Memoize messages with stable reference\n const memoMessages = useMemo(() => messages ?? [], [messages]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const prevMessageCountRef = useRef(0);\n const shouldAutoScrollRef = useRef(true);\n\n // Get the parent scroll container\n const getScrollContainer = useCallback(() => {\n if (containerRef.current) {\n // Find the parent with overflow-y-auto class\n let parent = containerRef.current.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n if (style.overflowY === 'auto' || style.overflowY === 'scroll') {\n return parent;\n }\n parent = parent.parentElement;\n }\n }\n return null;\n }, []);\n\n useEffect(() => {\n if (memoMessages.length > 0 && setIsFirstMessage) {\n setIsFirstMessage(false);\n }\n }, [memoMessages.length, setIsFirstMessage]);\n\n // Memoize message rendering logic to prevent unnecessary re-renders\n const renderMessage = useCallback((msg: typeof messages[0], index: number, messagesArray: typeof messages) => {\n if (!msg.content.length) return null;\n\n if (msg.additional_kwargs?.hidden) {\n return null;\n }\n\n // Use message id or fallback to index for key\n const msgKey = msg.id ?? `msg-${index}`;\n\n if (msg.type === \"human\") {\n return <HumanMessage key={msgKey} message={msg} />;\n }\n\n // Skip standalone tool messages\n if (isToolMessage(msg)) {\n return null;\n }\n\n // Skip if this AI message was already combined with a previous one\n if (msg.type === \"ai\" && index > 0) {\n // Check if previous non-tool message is also an AI message\n let prevIndex = index - 1;\n while (prevIndex >= 0 && isToolMessage(messagesArray[prevIndex])) {\n prevIndex--;\n }\n \n if (prevIndex >= 0 && messagesArray[prevIndex].type === \"ai\") {\n // This is a consecutive AI message, skip it (it will be combined with the previous one)\n return null;\n }\n }\n\n // Collect all consecutive AI messages and tool messages\n const groupedMessages = [msg];\n const toolMessages = [];\n let nextIndex = index + 1;\n \n while (nextIndex < messagesArray.length) {\n const nextMsg = messagesArray[nextIndex];\n \n if (isToolMessage(nextMsg)) {\n toolMessages.push(nextMsg);\n nextIndex++;\n } else if (nextMsg.type === \"ai\") {\n // Combine consecutive AI messages\n groupedMessages.push(nextMsg);\n nextIndex++;\n } else {\n // Stop at human messages or other types\n break;\n }\n }\n\n // Combine content from all AI messages\n const combinedContent = groupedMessages\n .map(m => {\n if (typeof m.content === \"string\") return m.content;\n if (Array.isArray(m.content)) {\n return m.content\n .map((c: any) => c.type === \"text\" ? c.text : \"\")\n .filter(Boolean)\n .join(\" \");\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n // Create a combined message object\n const combinedMessage = {\n ...msg,\n content: combinedContent,\n };\n\n const isLastMessageGroup = nextIndex >= messagesArray.length;\n const isStreamingThisMessage = isLoading && isLastMessageGroup;\n\n // Check if the first message in the group has tool calls\n const hasToolCalls = isAiWithToolCalls(msg);\n\n return (\n <React.Fragment key={msgKey}>\n {/* 1. Thinking indicator - only show if tool messages exist */}\n {toolMessages.length > 0 && enableToolCallIndicator && hasToolCalls && (\n <ToolCallFunctions\n title=\"Agent Thinking\"\n toolMessages={toolMessages}\n />\n )}\n {/* 2. Agent message (combined content) */}\n {combinedContent && (\n <AgentMessage\n message={combinedMessage}\n isStreaming={isStreamingThisMessage}\n />\n )}\n {/* 3. Custom component (from all messages in the group) */}\n {groupedMessages.map((m) => (\n <CustomComponentRender key={m.id} message={m} thread={stream} />\n ))}\n </React.Fragment>\n );\n }, [isLoading, stream, enableToolCallIndicator]);\n\n // Memoize the rendered messages array\n const renderedMessages = useMemo(() => {\n return memoMessages.map((msg, index) => {\n const element = renderMessage(msg, index, memoMessages);\n // Ensure every element has a key, using message id or fallback to index\n if (element && !element.key) {\n return React.cloneElement(element, { key: msg.id ?? `msg-${index}` });\n }\n return element;\n });\n }, [memoMessages, renderMessage]);\n\n // Track user scroll position to determine if we should auto-scroll\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n // Consider \"at bottom\" if within 100px\n shouldAutoScrollRef.current = distanceFromBottom < 100;\n };\n\n scrollContainer.addEventListener('scroll', handleScroll);\n return () => scrollContainer.removeEventListener('scroll', handleScroll);\n }, [getScrollContainer]);\n\n // Auto-scroll when new messages are added\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const currentCount = memoMessages.length;\n const hasNewMessage = currentCount > prevMessageCountRef.current;\n\n if (hasNewMessage) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n shouldAutoScrollRef.current = true;\n }\n\n prevMessageCountRef.current = currentCount;\n }, [memoMessages, getScrollContainer]);\n\n // Use MutationObserver to detect DOM changes and auto-scroll during streaming\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer || !isLoading) return;\n\n const observer = new MutationObserver(() => {\n if (shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n // Observe the ChatBody container for changes\n if (containerRef.current) {\n observer.observe(containerRef.current, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n return () => observer.disconnect();\n }, [isLoading, getScrollContainer]);\n\n // Use useLayoutEffect to scroll after DOM updates\n useLayoutEffect(() => {\n const scrollContainer = getScrollContainer();\n if (isLoading && shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n return (\n <div\n ref={containerRef}\n className=\"flex flex-col gap-4 rounded-4xl p-2\"\n >\n {memoMessages.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-zinc-500\">\n Start a conversation...\n </div>\n ) : (\n <>\n {renderedMessages}\n {/* Show thinking indicator when loading but no AI response yet */}\n {isLoading && memoMessages.length > 0 && memoMessages[memoMessages.length - 1].type === \"human\" && (\n <div className=\"flex items-center gap-2\">\n {/* Thinking<span className=\"animate-pulse\">...</span> */}\n <Thinking />\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["React"],"mappings":"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"}