langgraph-ui-components 0.0.27 → 0.0.29

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 (444) hide show
  1. package/README.md +103 -4
  2. package/dist/_virtual/index.cjs.js +1 -1
  3. package/dist/_virtual/index.cjs2.js +1 -1
  4. package/dist/_virtual/index.cjs3.js +1 -1
  5. package/dist/_virtual/index.es.js +5 -2
  6. package/dist/_virtual/index.es2.js +4 -2
  7. package/dist/_virtual/index.es2.js.map +1 -1
  8. package/dist/_virtual/index.es3.js +4 -4
  9. package/dist/components/ChatBody.cjs.js +2 -2
  10. package/dist/components/ChatBody.cjs.js.map +1 -1
  11. package/dist/components/ChatBody.d.ts.map +1 -1
  12. package/dist/components/ChatBody.es.js +191 -164
  13. package/dist/components/ChatBody.es.js.map +1 -1
  14. package/dist/components/TodoList.cjs.js +2 -0
  15. package/dist/components/TodoList.cjs.js.map +1 -0
  16. package/dist/components/TodoList.d.ts +5 -0
  17. package/dist/components/TodoList.d.ts.map +1 -0
  18. package/dist/components/TodoList.es.js +65 -0
  19. package/dist/components/TodoList.es.js.map +1 -0
  20. package/dist/components/messages/AgentMessage.cjs.js +2 -2
  21. package/dist/components/messages/AgentMessage.cjs.js.map +1 -1
  22. package/dist/components/messages/AgentMessage.d.ts +3 -1
  23. package/dist/components/messages/AgentMessage.d.ts.map +1 -1
  24. package/dist/components/messages/AgentMessage.es.js +107 -104
  25. package/dist/components/messages/AgentMessage.es.js.map +1 -1
  26. package/dist/components/messages/CustomComponentRender.cjs.js.map +1 -1
  27. package/dist/components/messages/CustomComponentRender.es.js.map +1 -1
  28. package/dist/components/ui/syntax-highlighter.cjs.js +1 -1
  29. package/dist/components/ui/syntax-highlighter.cjs.js.map +1 -1
  30. package/dist/components/ui/syntax-highlighter.es.js +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.cjs.js +1 -1
  34. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.es.js +1 -1
  35. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.cjs.js +1 -1
  36. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.cjs.js.map +1 -1
  37. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.es.js +1 -1
  38. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.cjs.js +1 -1
  39. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.cjs.js.map +1 -1
  40. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.es.js +1 -1
  41. package/dist/pages/Chat/Chat.cjs.js +1 -1
  42. package/dist/pages/Chat/Chat.cjs.js.map +1 -1
  43. package/dist/pages/Chat/Chat.d.ts.map +1 -1
  44. package/dist/pages/Chat/Chat.es.js +41 -34
  45. package/dist/pages/Chat/Chat.es.js.map +1 -1
  46. package/dist/pages/Sidebar/sidebar.cjs.js +1 -1
  47. package/dist/pages/Sidebar/sidebar.cjs.js.map +1 -1
  48. package/dist/pages/Sidebar/sidebar.d.ts.map +1 -1
  49. package/dist/pages/Sidebar/sidebar.es.js +75 -70
  50. package/dist/pages/Sidebar/sidebar.es.js.map +1 -1
  51. package/dist/providers/Stream.cjs.js +1 -1
  52. package/dist/providers/Stream.cjs.js.map +1 -1
  53. package/dist/providers/Stream.d.ts +40 -8
  54. package/dist/providers/Stream.d.ts.map +1 -1
  55. package/dist/providers/Stream.es.js +136 -123
  56. package/dist/providers/Stream.es.js.map +1 -1
  57. package/package.json +25 -1
  58. package/src/components/ChatBody.tsx +158 -67
  59. package/src/components/TodoList.tsx +72 -0
  60. package/src/components/messages/AgentMessage.tsx +7 -1
  61. package/src/components/messages/CustomComponentRender.tsx +1 -1
  62. package/src/index.ts +1 -1
  63. package/src/pages/Chat/Chat.tsx +13 -3
  64. package/src/pages/Sidebar/sidebar.tsx +12 -3
  65. package/src/providers/Stream.tsx +76 -32
  66. package/dist/_virtual/index.cjs10.js +0 -2
  67. package/dist/_virtual/index.cjs10.js.map +0 -1
  68. package/dist/_virtual/index.cjs11.js +0 -2
  69. package/dist/_virtual/index.cjs11.js.map +0 -1
  70. package/dist/_virtual/index.cjs12.js +0 -2
  71. package/dist/_virtual/index.cjs12.js.map +0 -1
  72. package/dist/_virtual/index.cjs4.js +0 -2
  73. package/dist/_virtual/index.cjs4.js.map +0 -1
  74. package/dist/_virtual/index.cjs5.js +0 -2
  75. package/dist/_virtual/index.cjs5.js.map +0 -1
  76. package/dist/_virtual/index.cjs6.js +0 -2
  77. package/dist/_virtual/index.cjs6.js.map +0 -1
  78. package/dist/_virtual/index.cjs7.js +0 -2
  79. package/dist/_virtual/index.cjs7.js.map +0 -1
  80. package/dist/_virtual/index.cjs8.js +0 -2
  81. package/dist/_virtual/index.cjs8.js.map +0 -1
  82. package/dist/_virtual/index.cjs9.js +0 -2
  83. package/dist/_virtual/index.cjs9.js.map +0 -1
  84. package/dist/_virtual/index.es10.js +0 -8
  85. package/dist/_virtual/index.es10.js.map +0 -1
  86. package/dist/_virtual/index.es11.js +0 -5
  87. package/dist/_virtual/index.es11.js.map +0 -1
  88. package/dist/_virtual/index.es12.js +0 -8
  89. package/dist/_virtual/index.es12.js.map +0 -1
  90. package/dist/_virtual/index.es4.js +0 -6
  91. package/dist/_virtual/index.es4.js.map +0 -1
  92. package/dist/_virtual/index.es5.js +0 -5
  93. package/dist/_virtual/index.es5.js.map +0 -1
  94. package/dist/_virtual/index.es6.js +0 -5
  95. package/dist/_virtual/index.es6.js.map +0 -1
  96. package/dist/_virtual/index.es7.js +0 -5
  97. package/dist/_virtual/index.es7.js.map +0 -1
  98. package/dist/_virtual/index.es8.js +0 -5
  99. package/dist/_virtual/index.es8.js.map +0 -1
  100. package/dist/_virtual/index.es9.js +0 -5
  101. package/dist/_virtual/index.es9.js.map +0 -1
  102. package/dist/_virtual/lower-bound.cjs.js +0 -2
  103. package/dist/_virtual/lower-bound.cjs.js.map +0 -1
  104. package/dist/_virtual/lower-bound.es.js +0 -5
  105. package/dist/_virtual/lower-bound.es.js.map +0 -1
  106. package/dist/_virtual/priority-queue.cjs.js +0 -2
  107. package/dist/_virtual/priority-queue.cjs.js.map +0 -1
  108. package/dist/_virtual/priority-queue.es.js +0 -5
  109. package/dist/_virtual/priority-queue.es.js.map +0 -1
  110. package/dist/_virtual/re.cjs.js +0 -2
  111. package/dist/_virtual/re.cjs.js.map +0 -1
  112. package/dist/_virtual/re.es.js +0 -5
  113. package/dist/_virtual/re.es.js.map +0 -1
  114. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.cjs.js +0 -2
  115. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.cjs.js.map +0 -1
  116. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.es.js +0 -12
  117. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.es.js.map +0 -1
  118. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.cjs.js +0 -2
  119. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.cjs.js.map +0 -1
  120. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.es.js +0 -66
  121. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.es.js.map +0 -1
  122. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.cjs.js +0 -2
  123. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.cjs.js.map +0 -1
  124. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.es.js +0 -283
  125. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.es.js.map +0 -1
  126. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.cjs.js +0 -2
  127. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.cjs.js.map +0 -1
  128. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.es.js +0 -219
  129. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.es.js.map +0 -1
  130. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.cjs.js +0 -2
  131. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.cjs.js.map +0 -1
  132. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.es.js +0 -42
  133. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.es.js.map +0 -1
  134. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.cjs.js +0 -2
  135. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.cjs.js.map +0 -1
  136. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.es.js +0 -31
  137. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.es.js.map +0 -1
  138. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.cjs.js +0 -2
  139. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.cjs.js.map +0 -1
  140. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.es.js +0 -77
  141. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.es.js.map +0 -1
  142. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.cjs.js +0 -2
  143. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.cjs.js.map +0 -1
  144. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.es.js +0 -78
  145. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.es.js.map +0 -1
  146. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.cjs.js +0 -2
  147. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.cjs.js.map +0 -1
  148. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.es.js +0 -75
  149. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.es.js.map +0 -1
  150. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.cjs.js +0 -2
  151. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.cjs.js.map +0 -1
  152. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.es.js +0 -51
  153. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.es.js.map +0 -1
  154. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.cjs.js +0 -2
  155. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.cjs.js.map +0 -1
  156. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.es.js +0 -23
  157. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.es.js.map +0 -1
  158. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.cjs.js +0 -2
  159. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.cjs.js.map +0 -1
  160. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.es.js +0 -31
  161. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.es.js.map +0 -1
  162. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.cjs.js +0 -2
  163. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.cjs.js.map +0 -1
  164. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.es.js +0 -241
  165. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.es.js.map +0 -1
  166. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.cjs.js +0 -2
  167. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.cjs.js.map +0 -1
  168. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.es.js +0 -37
  169. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.es.js.map +0 -1
  170. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.cjs.js +0 -2
  171. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.cjs.js.map +0 -1
  172. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.es.js +0 -42
  173. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.es.js.map +0 -1
  174. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.cjs.js +0 -2
  175. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.cjs.js.map +0 -1
  176. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.es.js +0 -16
  177. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.es.js.map +0 -1
  178. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.cjs.js +0 -2
  179. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.cjs.js.map +0 -1
  180. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.es.js +0 -9
  181. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.es.js.map +0 -1
  182. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.cjs.js +0 -2
  183. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.cjs.js.map +0 -1
  184. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.es.js +0 -3
  185. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.es.js.map +0 -1
  186. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.cjs.js +0 -2
  187. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.cjs.js.map +0 -1
  188. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.es.js +0 -230
  189. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.es.js.map +0 -1
  190. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.cjs.js +0 -3
  191. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.cjs.js.map +0 -1
  192. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.es.js +0 -87
  193. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.es.js.map +0 -1
  194. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.cjs.js +0 -3
  195. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.cjs.js.map +0 -1
  196. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.es.js +0 -133
  197. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.es.js.map +0 -1
  198. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.cjs.js +0 -2
  199. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.cjs.js.map +0 -1
  200. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.es.js +0 -29
  201. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.es.js.map +0 -1
  202. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.cjs.js +0 -10
  203. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.cjs.js.map +0 -1
  204. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.es.js +0 -795
  205. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.es.js.map +0 -1
  206. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js +0 -2
  207. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js.map +0 -1
  208. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js +0 -111
  209. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js.map +0 -1
  210. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js +0 -2
  211. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js.map +0 -1
  212. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js +0 -30
  213. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js.map +0 -1
  214. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js +0 -2
  215. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js.map +0 -1
  216. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js +0 -112
  217. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js.map +0 -1
  218. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.cjs.js +0 -2
  219. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.cjs.js.map +0 -1
  220. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.es.js +0 -3
  221. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.es.js.map +0 -1
  222. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs.js +0 -2
  223. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs.js.map +0 -1
  224. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.es.js +0 -6
  225. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.es.js.map +0 -1
  226. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.cjs.js +0 -2
  227. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.cjs.js.map +0 -1
  228. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.es.js +0 -14
  229. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.es.js.map +0 -1
  230. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.cjs.js +0 -2
  231. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.cjs.js.map +0 -1
  232. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.es.js +0 -3
  233. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.es.js.map +0 -1
  234. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.cjs.js +0 -2
  235. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.cjs.js.map +0 -1
  236. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.es.js +0 -200
  237. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.es.js.map +0 -1
  238. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.cjs.js +0 -2
  239. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.cjs.js.map +0 -1
  240. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.es.js +0 -22
  241. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.es.js.map +0 -1
  242. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js +0 -2
  243. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js.map +0 -1
  244. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js +0 -18
  245. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js.map +0 -1
  246. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js +0 -2
  247. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js.map +0 -1
  248. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js +0 -198
  249. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js.map +0 -1
  250. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js +0 -2
  251. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js.map +0 -1
  252. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js +0 -20
  253. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js.map +0 -1
  254. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js +0 -2
  255. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js.map +0 -1
  256. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js +0 -41
  257. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js.map +0 -1
  258. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js +0 -2
  259. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js.map +0 -1
  260. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js +0 -45
  261. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js.map +0 -1
  262. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js +0 -2
  263. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js.map +0 -1
  264. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js +0 -57
  265. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js.map +0 -1
  266. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js +0 -2
  267. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js.map +0 -1
  268. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js +0 -149
  269. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js.map +0 -1
  270. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js +0 -2
  271. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js.map +0 -1
  272. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js +0 -170
  273. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js.map +0 -1
  274. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js +0 -2
  275. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js.map +0 -1
  276. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js +0 -15
  277. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js.map +0 -1
  278. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js +0 -2
  279. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js.map +0 -1
  280. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js +0 -40
  281. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js.map +0 -1
  282. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js +0 -2
  283. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js.map +0 -1
  284. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js +0 -34
  285. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js.map +0 -1
  286. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js +0 -2
  287. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js.map +0 -1
  288. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js +0 -15
  289. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js.map +0 -1
  290. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js +0 -2
  291. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js.map +0 -1
  292. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js +0 -12
  293. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js.map +0 -1
  294. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js +0 -2
  295. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js.map +0 -1
  296. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js +0 -12
  297. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js.map +0 -1
  298. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js +0 -2
  299. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js.map +0 -1
  300. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js +0 -25
  301. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js.map +0 -1
  302. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js +0 -2
  303. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js.map +0 -1
  304. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js +0 -12
  305. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js.map +0 -1
  306. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js +0 -2
  307. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js.map +0 -1
  308. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js +0 -12
  309. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js.map +0 -1
  310. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js +0 -2
  311. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js.map +0 -1
  312. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js +0 -12
  313. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js.map +0 -1
  314. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js +0 -2
  315. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js.map +0 -1
  316. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js +0 -22
  317. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js.map +0 -1
  318. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js +0 -2
  319. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js.map +0 -1
  320. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js +0 -12
  321. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js.map +0 -1
  322. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js +0 -2
  323. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js.map +0 -1
  324. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js +0 -12
  325. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js.map +0 -1
  326. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js +0 -2
  327. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js.map +0 -1
  328. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js +0 -12
  329. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js.map +0 -1
  330. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js +0 -2
  331. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js.map +0 -1
  332. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js +0 -12
  333. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js.map +0 -1
  334. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js +0 -2
  335. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js.map +0 -1
  336. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js +0 -12
  337. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js.map +0 -1
  338. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js +0 -2
  339. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js.map +0 -1
  340. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js +0 -22
  341. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js.map +0 -1
  342. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js +0 -2
  343. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js.map +0 -1
  344. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js +0 -12
  345. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js.map +0 -1
  346. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js +0 -2
  347. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js.map +0 -1
  348. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js +0 -15
  349. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js.map +0 -1
  350. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js +0 -2
  351. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js.map +0 -1
  352. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js +0 -12
  353. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js.map +0 -1
  354. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js +0 -2
  355. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js.map +0 -1
  356. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js +0 -12
  357. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js.map +0 -1
  358. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js +0 -2
  359. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js.map +0 -1
  360. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js +0 -19
  361. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js.map +0 -1
  362. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js +0 -2
  363. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js.map +0 -1
  364. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js +0 -12
  365. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js.map +0 -1
  366. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js +0 -2
  367. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js.map +0 -1
  368. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js +0 -15
  369. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js.map +0 -1
  370. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js +0 -2
  371. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js.map +0 -1
  372. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js +0 -98
  373. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js.map +0 -1
  374. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js +0 -2
  375. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js.map +0 -1
  376. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js +0 -29
  377. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js.map +0 -1
  378. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js +0 -2
  379. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js.map +0 -1
  380. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js +0 -9
  381. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js.map +0 -1
  382. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js +0 -2
  383. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js.map +0 -1
  384. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js +0 -19
  385. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js.map +0 -1
  386. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js +0 -2
  387. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js.map +0 -1
  388. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js +0 -33
  389. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js.map +0 -1
  390. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js +0 -2
  391. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js.map +0 -1
  392. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js +0 -11
  393. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js.map +0 -1
  394. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js +0 -2
  395. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js.map +0 -1
  396. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js +0 -33
  397. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js.map +0 -1
  398. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js +0 -2
  399. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js.map +0 -1
  400. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js +0 -12
  401. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js.map +0 -1
  402. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js +0 -2
  403. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js.map +0 -1
  404. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js +0 -12
  405. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js.map +0 -1
  406. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js +0 -2
  407. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js.map +0 -1
  408. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js +0 -12
  409. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js.map +0 -1
  410. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js +0 -2
  411. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js.map +0 -1
  412. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js +0 -23
  413. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js.map +0 -1
  414. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js +0 -2
  415. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js.map +0 -1
  416. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js +0 -23
  417. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js.map +0 -1
  418. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js +0 -2
  419. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js.map +0 -1
  420. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js +0 -43
  421. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js.map +0 -1
  422. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js +0 -2
  423. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js.map +0 -1
  424. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js +0 -45
  425. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js.map +0 -1
  426. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js +0 -2
  427. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js.map +0 -1
  428. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js +0 -25
  429. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js.map +0 -1
  430. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js +0 -2
  431. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js.map +0 -1
  432. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js +0 -95
  433. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js.map +0 -1
  434. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js +0 -2
  435. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js.map +0 -1
  436. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js +0 -12
  437. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js.map +0 -1
  438. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js +0 -2
  439. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js.map +0 -1
  440. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js +0 -18
  441. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js.map +0 -1
  442. package/src/App.css +0 -183
  443. package/src/App.tsx +0 -70
  444. package/src/main.tsx +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.cjs.js","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"sourcesContent":["import Suggestion from \"@/components/Suggestion\";\nimport ThreadHistory from \"@/components/threads/ThreadHistory\";\nimport { useFileProvider } from \"@/providers/FileProvider\";\nimport { useStreamContext } from \"@/providers/Stream\";\nimport { useThread } from \"@/providers/Thread\";\nimport type { ChatSidebarProps } from \"@/types/ChatProps\";\nimport type { FileInfo } from \"@/types/fileInput\";\nimport { logger } from \"@/utils/logger\";\nimport { buildContentBlocks, readFilesAsBase64 } from \"@/utils/submitUtils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X, PanelLeft, ScanEye, EyeOff } from \"lucide-react\";\nimport { useEffect, useState, type FormEvent, useRef } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport ChatBody from \"../../components/ChatBody\";\nimport ChatButton from \"../../components/ChatButton\";\nimport ChatInput from \"../../components/sidebar/ChatInput\";\n\n/**\n * Main sidebar chat interface component.\n * Displays a chat button that opens a sliding sidebar with full chat functionality.\n * \n * @param header - Custom header text for the chat sidebar (default: \"AI Assistant\")\n * @param handleFileSelect - Optional custom file selection handler\n * @param callThisOnSubmit - Optional callback invoked before message submission, can return updated file list\n * @param preventSubmit - Optional boolean to prevent all submit actions when true\n * @param leftPanelContent - Optional custom content for the left panel when expanded\n * @param leftPanelOpen - Optional external control for left panel open state\n * @param setLeftPanelOpen - Optional external setter for left panel open state\n * \n * @example\n * ```tsx\n * <Sidebar \n * header=\"My Custom AI\"\n * preventSubmit={true} // Disables all submit functionality\n * callThisOnSubmit={async () => {\n * // Upload files to your backend\n * return updatedFiles;\n * }}\n * leftPanelContent={<div className=\"text-white\">Custom left panel content here!</div>}\n * leftPanelOpen={isLeftPanelOpen}\n * setLeftPanelOpen={setIsLeftPanelOpen}\n * />\n * ```\n */\nexport default function Sidebar(props: ChatSidebarProps) {\n\n const { handleFileSelect, callThisOnSubmit, enableToolCallIndicator, header, inputFileAccept, filePreview, s3_upload, preventSubmit, leftPanelContent, leftPanelOpen: externalLeftPanelOpen, setLeftPanelOpen: externalSetLeftPanelOpen, chatBodyProps, supportChatHistory = false, textToSpeechVoice, leftPanelInitialWidth = 30, leftPanelClassName } = props;\n const [open, setOpen] = useState(false);\n const [input, setInput] = useState(\"\");\n const [internalLeftPanelOpen, setInternalLeftPanelOpen] = useState(false);\n const [threadHistoryOpen, setThreadHistoryOpen] = useState(false);\n const { fileInput, setFileInput } = useFileProvider();\n\n // Resize state\n const [leftPanelWidth, setLeftPanelWidth] = useState(leftPanelInitialWidth);\n const [sidebarWidth, setSidebarWidth] = useState(30); \n const [isResizingLeft, setIsResizingLeft] = useState(false);\n const [isResizingSidebar, setIsResizingSidebar] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(0);\n\n // Handle left panel resize\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isResizingLeft) {\n // For left panel: it extends to the left of the sidebar,\n // so dragging LEFT (decreasing clientX) should INCREASE width\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newLeftPanelWidth = startWidthRef.current + deltaVw;\n const maxLeftPanelWidth = 40;\n const minLeftPanelWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minLeftPanelWidth, Math.min(maxLeftPanelWidth, newLeftPanelWidth));\n setLeftPanelWidth(clampedWidth);\n } else if (isResizingSidebar && sidebarRef.current) {\n // For sidebar on right: moving left increases width (handle is on left edge)\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newSidebarWidth = startWidthRef.current + deltaVw;\n const maxSidebarWidth = 50;\n const minSidebarWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minSidebarWidth, Math.min(maxSidebarWidth, newSidebarWidth));\n setSidebarWidth(clampedWidth);\n }\n };\n\n const handleMouseUp = () => {\n setIsResizingLeft(false);\n setIsResizingSidebar(false);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizingLeft || isResizingSidebar) {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isResizingLeft, isResizingSidebar]);\n\n const leftPanelOpen = externalLeftPanelOpen !== undefined ? externalLeftPanelOpen : internalLeftPanelOpen;\n const setLeftPanelOpen = externalSetLeftPanelOpen || setInternalLeftPanelOpen;\n\n const stream = useStreamContext();\n const isLoading = stream.isLoading;\n const { setMode } = useThread();\n\n // Set thread mode to single when using Sidebar\n // useEffect(() => {\n // setMode(\"single\");\n // }, [setMode]);\n\n\n useEffect(() => {\n if (supportChatHistory) {\n setMode(\"multi\");\n } else {\n setMode(\"single\");\n }\n }, [setMode, supportChatHistory]);\n\n const defaultHandleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (preventSubmit || (input.trim().length === 0 && fileInput.length === 0) || isLoading)\n return;\n\n // Call the custom upload and get the latest files\n let latestFiles: FileInfo[] = fileInput;\n let contextValues: Record<string, unknown> | undefined = undefined;\n if (callThisOnSubmit) {\n const result = await callThisOnSubmit();\n if (Array.isArray(result?.files) && result.files.length > 0) {\n latestFiles = result.files as FileInfo[];\n }\n if (result && result?.contextValues) contextValues = result.contextValues;\n }\n logger.debug(\"Using files for submission:\", latestFiles);\n\n const contentBlocks = buildContentBlocks(input, latestFiles, s3_upload);\n logger.debug(\"Constructed content blocks:\", contentBlocks);\n\n const newHumanMessage: Message = {\n id: uuidv4(),\n type: \"human\",\n content: contentBlocks,\n };\n\n // Use the unified submitMessage function\n await stream.submitMessage(newHumanMessage, { contextValues: contextValues });\n\n setInput(\"\");\n setFileInput([]);\n };\n\n const defaultHandleFileSelect = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const files = event.target.files;\n if (!files) return;\n const fileDetails = await readFilesAsBase64(files);\n setFileInput((prevFile) => [...prevFile, ...fileDetails]);\n };\n\n const onFileSelect = handleFileSelect || defaultHandleFileSelect;\n return (\n <>\n <AnimatePresence>\n {open && (\n <>\n {/* Overlay */}\n <motion.div\n className=\"fixed inset-0 z-40 bg-black/30\"\n onClick={() => setOpen(false)}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n\n {/* Sidebar */}\n <motion.aside\n ref={sidebarRef}\n className=\"fixed right-0 top-0 z-50 h-screen flex bg-[#0f0f0f] text-white/70\"\n style={{ width: threadHistoryOpen ? `calc(${sidebarWidth}vw + 280px)` : `${sidebarWidth}vw` }}\n initial={{ x: \"100%\" }}\n animate={{ x: 0 }}\n exit={{ x: \"100%\" }}\n transition={{ type: \"spring\", stiffness: 260, damping: 30 }}\n >\n <AnimatePresence>\n {leftPanelOpen && (\n <motion.div\n className=\"absolute right-full top-0 h-full bg-[#0a0a0a] border-r border-zinc-700\"\n style={{ width: `${leftPanelWidth}vw` }}\n initial={{ x: \"0\" }}\n animate={{ x: 0 }}\n exit={{ x: \"0%\" }}\n transition={{ type: \"spring\", stiffness: 400, damping: 40 }}\n >\n <div className={`h-full overflow-auto relative${leftPanelClassName ? ` ${leftPanelClassName}` : \"\"}`}>\n {leftPanelContent || (\n <>\n <h3 className=\"text-lg font-semibold mb-4 text-white p-4\">Left Panel</h3>\n <p className=\"text-zinc-300 p-4\">This is the left extension panel. You can add any content here.</p>\n </>\n )}\n </div>\n {/* Resize handle for left panel (on left edge) */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = leftPanelWidth;\n setIsResizingLeft(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n {/* Resize handle for sidebar */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = sidebarWidth;\n setIsResizingSidebar(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n <div className=\"flex h-full flex-col flex-1\">\n <div className=\"flex py-3 px-6 justify-between items-center border-b border-zinc-700/30\">\n <div className=\"flex items-center gap-3\">\n {/* Vertically centered left panel toggle */}\n {leftPanelContent && (\n <div className=\"flex items-start gap-3\">\n {leftPanelOpen ? (\n <EyeOff\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n ) : (\n <ScanEye\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n )}\n </div>\n )}\n {header?.logoUrl && (\n <img\n src={header?.logoUrl}\n alt={header?.title ? `${header.title} logo` : \"AI Assistant logo\"}\n className=\"h-8 w-8 object-contain rounded-sm\"\n />\n )}\n <div className=\"text-start text-xl font-bold\">{header?.title || \"AI Assistant\"}</div>\n\n </div>\n <div className=\"flex items-end gap-3\">\n {supportChatHistory && !threadHistoryOpen && <PanelLeft\n className=\"h-5 text-zinc-400 cursor-pointer hover:text-zinc-200 transition-colors\"\n onClick={() => setThreadHistoryOpen(!threadHistoryOpen)}\n />}\n <X\n className=\"text-zinc-400 cursor-pointer\"\n onClick={() => setOpen(false)}\n />\n </div>\n </div>\n <div className=\"flex-1 relative\">\n <div className=\"absolute inset-0 overflow-auto scrollbar-none\">\n <div className=\"pb-20 p-2\">\n <ChatBody enableToolCallIndicator={enableToolCallIndicator} chatBodyProps={chatBodyProps} />\n </div>\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 bg-transparent px-4 pointer-events-none z-10\">\n <div className=\"pointer-events-auto\">\n <Suggestion />\n </div>\n </div>\n </div>\n <div className=\"sticky bottom-0\">\n <ChatInput\n input={input}\n inputFileAccept={inputFileAccept}\n setInput={setInput}\n textToSpeechVoice={textToSpeechVoice}\n handleSubmit={defaultHandleSubmit}\n isLoading={isLoading || !!preventSubmit}\n fileInput={fileInput}\n handleFileSelect={onFileSelect}\n setFileInput={setFileInput}\n onCancel={() => stream.stop?.()}\n filePreview={filePreview}\n />\n </div>\n </div>\n <AnimatePresence>\n {threadHistoryOpen && (\n <motion.div\n className=\"h-full w-[280px] shadow-2xl border-l border-white/10\"\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: 280, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n >\n <ThreadHistory isSidebar={true} header={{ title: \"Sessions\" }} onClose={() => setThreadHistoryOpen(false)} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.aside>\n </>\n )}\n </AnimatePresence>\n\n <ChatButton isVisible={!open} setOpen={setOpen} />\n </>\n );\n}\n"],"names":["Sidebar","props","handleFileSelect","callThisOnSubmit","enableToolCallIndicator","header","inputFileAccept","filePreview","s3_upload","preventSubmit","leftPanelContent","externalLeftPanelOpen","externalSetLeftPanelOpen","chatBodyProps","supportChatHistory","textToSpeechVoice","leftPanelInitialWidth","leftPanelClassName","open","setOpen","useState","input","setInput","internalLeftPanelOpen","setInternalLeftPanelOpen","threadHistoryOpen","setThreadHistoryOpen","fileInput","setFileInput","useFileProvider","leftPanelWidth","setLeftPanelWidth","sidebarWidth","setSidebarWidth","isResizingLeft","setIsResizingLeft","isResizingSidebar","setIsResizingSidebar","sidebarRef","useRef","startXRef","startWidthRef","useEffect","handleMouseMove","e","deltaVw","newLeftPanelWidth","clampedWidth","newSidebarWidth","handleMouseUp","leftPanelOpen","setLeftPanelOpen","stream","useStreamContext","isLoading","setMode","useThread","defaultHandleSubmit","latestFiles","contextValues","result","logger","contentBlocks","buildContentBlocks","newHumanMessage","uuidv4","onFileSelect","event","files","fileDetails","readFilesAsBase64","prevFile","jsxs","Fragment","jsx","AnimatePresence","motion","EyeOff","ScanEye","PanelLeft","X","ChatBody","Suggestion","ChatInput","ThreadHistory","ChatButton"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.cjs.js","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"sourcesContent":["import Suggestion from \"@/components/Suggestion\";\nimport ThreadHistory from \"@/components/threads/ThreadHistory\";\nimport { useFileProvider } from \"@/providers/FileProvider\";\nimport { useStreamContext } from \"@/providers/Stream\";\nimport { useThread } from \"@/providers/Thread\";\nimport type { ChatSidebarProps } from \"@/types/ChatProps\";\nimport type { FileInfo } from \"@/types/fileInput\";\nimport { logger } from \"@/utils/logger\";\nimport { buildContentBlocks, readFilesAsBase64 } from \"@/utils/submitUtils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X, PanelLeft, ScanEye, EyeOff } from \"lucide-react\";\nimport { useEffect, useState, type FormEvent, useRef } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport ChatBody from \"../../components/ChatBody\";\nimport ChatButton from \"../../components/ChatButton\";\nimport ChatInput from \"../../components/sidebar/ChatInput\";\n\n/**\n * Main sidebar chat interface component.\n * Displays a chat button that opens a sliding sidebar with full chat functionality.\n * \n * @param header - Custom header text for the chat sidebar (default: \"AI Assistant\")\n * @param handleFileSelect - Optional custom file selection handler\n * @param callThisOnSubmit - Optional callback invoked before message submission, can return updated file list\n * @param preventSubmit - Optional boolean to prevent all submit actions when true\n * @param leftPanelContent - Optional custom content for the left panel when expanded\n * @param leftPanelOpen - Optional external control for left panel open state\n * @param setLeftPanelOpen - Optional external setter for left panel open state\n * \n * @example\n * ```tsx\n * <Sidebar \n * header=\"My Custom AI\"\n * preventSubmit={true} // Disables all submit functionality\n * callThisOnSubmit={async () => {\n * // Upload files to your backend\n * return updatedFiles;\n * }}\n * leftPanelContent={<div className=\"text-white\">Custom left panel content here!</div>}\n * leftPanelOpen={isLeftPanelOpen}\n * setLeftPanelOpen={setIsLeftPanelOpen}\n * />\n * ```\n */\nexport default function Sidebar(props: ChatSidebarProps) {\n\n const { handleFileSelect, callThisOnSubmit, enableToolCallIndicator, header, inputFileAccept, filePreview, s3_upload, preventSubmit, leftPanelContent, leftPanelOpen: externalLeftPanelOpen, setLeftPanelOpen: externalSetLeftPanelOpen, chatBodyProps, supportChatHistory = false, textToSpeechVoice, leftPanelInitialWidth = 30, leftPanelClassName } = props;\n const [open, setOpen] = useState(false);\n const [input, setInput] = useState(\"\");\n const [internalLeftPanelOpen, setInternalLeftPanelOpen] = useState(false);\n const [threadHistoryOpen, setThreadHistoryOpen] = useState(false);\n const { fileInput, setFileInput } = useFileProvider();\n\n // Resize state\n const [leftPanelWidth, setLeftPanelWidth] = useState(leftPanelInitialWidth);\n const [sidebarWidth, setSidebarWidth] = useState(30); \n const [isResizingLeft, setIsResizingLeft] = useState(false);\n const [isResizingSidebar, setIsResizingSidebar] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(0);\n\n // Handle left panel resize\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isResizingLeft) {\n // For left panel: it extends to the left of the sidebar,\n // so dragging LEFT (decreasing clientX) should INCREASE width\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newLeftPanelWidth = startWidthRef.current + deltaVw;\n const maxLeftPanelWidth = 40;\n const minLeftPanelWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minLeftPanelWidth, Math.min(maxLeftPanelWidth, newLeftPanelWidth));\n setLeftPanelWidth(clampedWidth);\n } else if (isResizingSidebar && sidebarRef.current) {\n // For sidebar on right: moving left increases width (handle is on left edge)\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newSidebarWidth = startWidthRef.current + deltaVw;\n const maxSidebarWidth = 50;\n const minSidebarWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minSidebarWidth, Math.min(maxSidebarWidth, newSidebarWidth));\n setSidebarWidth(clampedWidth);\n }\n };\n\n const handleMouseUp = () => {\n setIsResizingLeft(false);\n setIsResizingSidebar(false);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizingLeft || isResizingSidebar) {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isResizingLeft, isResizingSidebar]);\n\n const leftPanelOpen = externalLeftPanelOpen !== undefined ? externalLeftPanelOpen : internalLeftPanelOpen;\n const setLeftPanelOpen = externalSetLeftPanelOpen || setInternalLeftPanelOpen;\n\n const stream = useStreamContext();\n const isLoading = stream.isLoading;\n const { setMode } = useThread();\n\n // Set thread mode to single when using Sidebar\n // useEffect(() => {\n // setMode(\"single\");\n // }, [setMode]);\n\n\n useEffect(() => {\n if (supportChatHistory) {\n setMode(\"multi\");\n } else {\n setMode(\"single\");\n }\n }, [setMode, supportChatHistory]);\n\n const defaultHandleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (preventSubmit || (input.trim().length === 0 && fileInput.length === 0) || isLoading)\n return;\n\n // Call the custom upload and get the latest files\n let latestFiles: FileInfo[] = fileInput;\n let contextValues: Record<string, unknown> | undefined = undefined;\n if (callThisOnSubmit) {\n const result = await callThisOnSubmit();\n if (Array.isArray(result?.files) && result.files.length > 0) {\n latestFiles = result.files as FileInfo[];\n }\n if (result && result?.contextValues) contextValues = result.contextValues;\n }\n logger.debug(\"Using files for submission:\", latestFiles);\n\n const contentBlocks = buildContentBlocks(input, latestFiles, s3_upload);\n logger.debug(\"Constructed content blocks:\", contentBlocks);\n\n const newHumanMessage: Message = {\n id: uuidv4(),\n type: \"human\",\n content: contentBlocks,\n };\n\n // Clear input optimistically, but restore on failure so the user doesn't lose their draft.\n const savedInput = input;\n const savedFileInput = fileInput;\n setInput(\"\");\n setFileInput([]);\n\n try {\n // Use the unified submitMessage function\n await stream.submitMessage(newHumanMessage, { contextValues: contextValues });\n } catch (err) {\n setInput(savedInput);\n setFileInput(savedFileInput);\n throw err;\n }\n };\n\n const defaultHandleFileSelect = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const files = event.target.files;\n if (!files) return;\n const fileDetails = await readFilesAsBase64(files);\n setFileInput((prevFile) => [...prevFile, ...fileDetails]);\n };\n\n const onFileSelect = handleFileSelect || defaultHandleFileSelect;\n return (\n <>\n <AnimatePresence>\n {open && (\n <>\n {/* Overlay */}\n <motion.div\n className=\"fixed inset-0 z-40 bg-black/30\"\n onClick={() => setOpen(false)}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n\n {/* Sidebar */}\n <motion.aside\n ref={sidebarRef}\n className=\"fixed right-0 top-0 z-50 h-screen flex bg-[#0f0f0f] text-white/70\"\n style={{ width: threadHistoryOpen ? `calc(${sidebarWidth}vw + 280px)` : `${sidebarWidth}vw` }}\n initial={{ x: \"100%\" }}\n animate={{ x: 0 }}\n exit={{ x: \"100%\" }}\n transition={{ type: \"spring\", stiffness: 260, damping: 30 }}\n >\n <AnimatePresence>\n {leftPanelOpen && (\n <motion.div\n className=\"absolute right-full top-0 h-full bg-[#0a0a0a] border-r border-zinc-700\"\n style={{ width: `${leftPanelWidth}vw` }}\n initial={{ x: \"0\" }}\n animate={{ x: 0 }}\n exit={{ x: \"0%\" }}\n transition={{ type: \"spring\", stiffness: 400, damping: 40 }}\n >\n <div className={`h-full overflow-auto relative${leftPanelClassName ? ` ${leftPanelClassName}` : \"\"}`}>\n {leftPanelContent || (\n <>\n <h3 className=\"text-lg font-semibold mb-4 text-white p-4\">Left Panel</h3>\n <p className=\"text-zinc-300 p-4\">This is the left extension panel. You can add any content here.</p>\n </>\n )}\n </div>\n {/* Resize handle for left panel (on left edge) */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = leftPanelWidth;\n setIsResizingLeft(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n {/* Resize handle for sidebar */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = sidebarWidth;\n setIsResizingSidebar(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n <div className=\"flex h-full flex-col flex-1\">\n <div className=\"flex py-3 px-6 justify-between items-center border-b border-zinc-700/30\">\n <div className=\"flex items-center gap-3\">\n {/* Vertically centered left panel toggle */}\n {leftPanelContent && (\n <div className=\"flex items-start gap-3\">\n {leftPanelOpen ? (\n <EyeOff\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n ) : (\n <ScanEye\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n )}\n </div>\n )}\n {header?.logoUrl && (\n <img\n src={header?.logoUrl}\n alt={header?.title ? `${header.title} logo` : \"AI Assistant logo\"}\n className=\"h-8 w-8 object-contain rounded-sm\"\n />\n )}\n <div className=\"text-start text-xl font-bold\">{header?.title || \"AI Assistant\"}</div>\n\n </div>\n <div className=\"flex items-end gap-3\">\n {supportChatHistory && !threadHistoryOpen && <PanelLeft\n className=\"h-5 text-zinc-400 cursor-pointer hover:text-zinc-200 transition-colors\"\n onClick={() => setThreadHistoryOpen(!threadHistoryOpen)}\n />}\n <X\n className=\"text-zinc-400 cursor-pointer\"\n onClick={() => setOpen(false)}\n />\n </div>\n </div>\n <div className=\"flex-1 relative\">\n <div className=\"absolute inset-0 overflow-auto scrollbar-none\">\n <div className=\"pb-20 p-2\">\n <ChatBody enableToolCallIndicator={enableToolCallIndicator} chatBodyProps={chatBodyProps} />\n </div>\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 bg-transparent px-4 pointer-events-none z-10\">\n <div className=\"pointer-events-auto\">\n <Suggestion />\n </div>\n </div>\n </div>\n <div className=\"sticky bottom-0\">\n <ChatInput\n input={input}\n inputFileAccept={inputFileAccept}\n setInput={setInput}\n textToSpeechVoice={textToSpeechVoice}\n handleSubmit={defaultHandleSubmit}\n isLoading={isLoading || !!preventSubmit}\n fileInput={fileInput}\n handleFileSelect={onFileSelect}\n setFileInput={setFileInput}\n onCancel={() => stream.stop?.()}\n filePreview={filePreview}\n />\n </div>\n </div>\n <AnimatePresence>\n {threadHistoryOpen && (\n <motion.div\n className=\"h-full w-[280px] shadow-2xl border-l border-white/10\"\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: 280, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n >\n <ThreadHistory isSidebar={true} header={{ title: \"Sessions\" }} onClose={() => setThreadHistoryOpen(false)} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.aside>\n </>\n )}\n </AnimatePresence>\n\n <ChatButton isVisible={!open} setOpen={setOpen} />\n </>\n );\n}\n"],"names":["Sidebar","props","handleFileSelect","callThisOnSubmit","enableToolCallIndicator","header","inputFileAccept","filePreview","s3_upload","preventSubmit","leftPanelContent","externalLeftPanelOpen","externalSetLeftPanelOpen","chatBodyProps","supportChatHistory","textToSpeechVoice","leftPanelInitialWidth","leftPanelClassName","open","setOpen","useState","input","setInput","internalLeftPanelOpen","setInternalLeftPanelOpen","threadHistoryOpen","setThreadHistoryOpen","fileInput","setFileInput","useFileProvider","leftPanelWidth","setLeftPanelWidth","sidebarWidth","setSidebarWidth","isResizingLeft","setIsResizingLeft","isResizingSidebar","setIsResizingSidebar","sidebarRef","useRef","startXRef","startWidthRef","useEffect","handleMouseMove","e","deltaVw","newLeftPanelWidth","clampedWidth","newSidebarWidth","handleMouseUp","leftPanelOpen","setLeftPanelOpen","stream","useStreamContext","isLoading","setMode","useThread","defaultHandleSubmit","latestFiles","contextValues","result","logger","contentBlocks","buildContentBlocks","newHumanMessage","uuidv4","savedInput","savedFileInput","err","onFileSelect","event","files","fileDetails","readFilesAsBase64","prevFile","jsxs","Fragment","jsx","AnimatePresence","motion","EyeOff","ScanEye","PanelLeft","X","ChatBody","Suggestion","ChatInput","ThreadHistory","ChatButton"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAa1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAK,EAAE,gBAAgB,2CA+StD"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAa1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAK,EAAE,gBAAgB,2CAwTtD"}
@@ -1,98 +1,103 @@
1
- import { jsxs as n, Fragment as z, jsx as e } from "react/jsx-runtime";
1
+ import { jsxs as n, Fragment as I, jsx as e } from "react/jsx-runtime";
2
2
  import ce from "../../components/Suggestion.es.js";
3
3
  import de from "../../components/threads/ThreadHistory.es.js";
4
4
  import { useFileProvider as fe } from "../../providers/FileProvider.es.js";
5
5
  import { useStreamContext as me } from "../../providers/Stream.es.js";
6
6
  import { useThread as ue } from "../../providers/Thread.es.js";
7
- import { logger as $ } from "../../utils/logger.es.js";
7
+ import { logger as U } from "../../utils/logger.es.js";
8
8
  import { buildContentBlocks as he, readFilesAsBase64 as pe } from "../../utils/submitUtils.es.js";
9
- import { AnimatePresence as W, motion as h } from "framer-motion";
10
- import { EyeOff as be, ScanEye as ge, PanelLeft as xe, X as ve } from "lucide-react";
11
- import { useState as l, useRef as C, useEffect as j } from "react";
9
+ import { AnimatePresence as O, motion as v } from "framer-motion";
10
+ import { EyeOff as be, ScanEye as ge, PanelLeft as ve, X as xe } from "lucide-react";
11
+ import { useState as l, useRef as F, useEffect as Y } from "react";
12
12
  import we from "../../components/ChatBody.es.js";
13
13
  import ye from "../../components/ChatButton.es.js";
14
14
  import Ne from "../../components/sidebar/ChatInput.es.js";
15
15
  import Se from "../../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.es.js";
16
- function Ve(U) {
17
- const { handleFileSelect: Y, callThisOnSubmit: O, enableToolCallIndicator: _, header: r, inputFileAccept: q, filePreview: G, s3_upload: J, preventSubmit: M, leftPanelContent: A, leftPanelOpen: F, setLeftPanelOpen: K, chatBodyProps: Q, supportChatHistory: p = !1, textToSpeechVoice: Z, leftPanelInitialWidth: ee = 30, leftPanelClassName: I } = U, [k, b] = l(!1), [g, X] = l(""), [te, ne] = l(!1), [d, H] = l(!1), { fileInput: x, setFileInput: v } = fe(), [R, ie] = l(ee), [w, se] = l(30), [y, E] = l(!1), [N, T] = l(!1), V = C(null), f = C(0), m = C(0);
18
- j(() => {
16
+ function Ve(_) {
17
+ const { handleFileSelect: q, callThisOnSubmit: M, enableToolCallIndicator: G, header: r, inputFileAccept: J, filePreview: K, s3_upload: Q, preventSubmit: A, leftPanelContent: k, leftPanelOpen: X, setLeftPanelOpen: Z, chatBodyProps: ee, supportChatHistory: x = !1, textToSpeechVoice: te, leftPanelInitialWidth: ne = 30, leftPanelClassName: H } = _, [R, w] = l(!1), [f, y] = l(""), [ie, se] = l(!1), [m, E] = l(!1), { fileInput: u, setFileInput: h } = fe(), [T, le] = l(ne), [N, ae] = l(30), [S, V] = l(!1), [P, B] = l(!1), D = F(null), p = F(0), b = F(0);
18
+ Y(() => {
19
19
  const t = (a) => {
20
- if (y) {
21
- const c = (f.current - a.clientX) / window.innerWidth * 100, i = m.current + c, L = Math.max(30, Math.min(40, i));
22
- ie(L);
23
- } else if (N && V.current) {
24
- const c = (f.current - a.clientX) / window.innerWidth * 100, i = m.current + c, L = Math.max(30, Math.min(50, i));
25
- se(L);
20
+ if (S) {
21
+ const c = (p.current - a.clientX) / window.innerWidth * 100, d = b.current + c, C = Math.max(30, Math.min(40, d));
22
+ le(C);
23
+ } else if (P && D.current) {
24
+ const c = (p.current - a.clientX) / window.innerWidth * 100, d = b.current + c, C = Math.max(30, Math.min(50, d));
25
+ ae(C);
26
26
  }
27
27
  }, s = () => {
28
- E(!1), T(!1), document.body.style.cursor = "default", document.body.style.userSelect = "auto";
28
+ V(!1), B(!1), document.body.style.cursor = "default", document.body.style.userSelect = "auto";
29
29
  };
30
- if (y || N)
30
+ if (S || P)
31
31
  return document.body.style.cursor = "col-resize", document.body.style.userSelect = "none", document.addEventListener("mousemove", t), document.addEventListener("mouseup", s), () => {
32
32
  document.removeEventListener("mousemove", t), document.removeEventListener("mouseup", s);
33
33
  };
34
- }, [y, N]);
35
- const u = F !== void 0 ? F : te, B = K || ne, S = me(), D = S.isLoading, { setMode: P } = ue();
36
- j(() => {
37
- P(p ? "multi" : "single");
38
- }, [P, p]);
39
- const le = async (t) => {
40
- if (t.preventDefault(), M || g.trim().length === 0 && x.length === 0 || D)
34
+ }, [S, P]);
35
+ const g = X !== void 0 ? X : ie, $ = Z || se, L = me(), j = L.isLoading, { setMode: z } = ue();
36
+ Y(() => {
37
+ z(x ? "multi" : "single");
38
+ }, [z, x]);
39
+ const oe = async (t) => {
40
+ if (t.preventDefault(), A || f.trim().length === 0 && u.length === 0 || j)
41
41
  return;
42
- let s = x, a;
43
- if (O) {
44
- const i = await O();
42
+ let s = u, a;
43
+ if (M) {
44
+ const i = await M();
45
45
  Array.isArray(i?.files) && i.files.length > 0 && (s = i.files), i && i?.contextValues && (a = i.contextValues);
46
46
  }
47
- $.debug("Using files for submission:", s);
48
- const o = he(g, s, J);
49
- $.debug("Constructed content blocks:", o);
47
+ U.debug("Using files for submission:", s);
48
+ const o = he(f, s, Q);
49
+ U.debug("Constructed content blocks:", o);
50
50
  const c = {
51
51
  id: Se(),
52
52
  type: "human",
53
53
  content: o
54
- };
55
- await S.submitMessage(c, { contextValues: a }), X(""), v([]);
56
- }, ae = Y || (async (t) => {
54
+ }, d = f, W = u;
55
+ y(""), h([]);
56
+ try {
57
+ await L.submitMessage(c, { contextValues: a });
58
+ } catch (i) {
59
+ throw y(d), h(W), i;
60
+ }
61
+ }, re = q || (async (t) => {
57
62
  const s = t.target.files;
58
63
  if (!s) return;
59
64
  const a = await pe(s);
60
- v((o) => [...o, ...a]);
65
+ h((o) => [...o, ...a]);
61
66
  });
62
- return /* @__PURE__ */ n(z, { children: [
63
- /* @__PURE__ */ e(W, { children: k && /* @__PURE__ */ n(z, { children: [
67
+ return /* @__PURE__ */ n(I, { children: [
68
+ /* @__PURE__ */ e(O, { children: R && /* @__PURE__ */ n(I, { children: [
64
69
  /* @__PURE__ */ e(
65
- h.div,
70
+ v.div,
66
71
  {
67
72
  className: "fixed inset-0 z-40 bg-black/30",
68
- onClick: () => b(!1),
73
+ onClick: () => w(!1),
69
74
  initial: { opacity: 0 },
70
75
  animate: { opacity: 1 },
71
76
  exit: { opacity: 0 }
72
77
  }
73
78
  ),
74
79
  /* @__PURE__ */ n(
75
- h.aside,
80
+ v.aside,
76
81
  {
77
- ref: V,
82
+ ref: D,
78
83
  className: "fixed right-0 top-0 z-50 h-screen flex bg-[#0f0f0f] text-white/70",
79
- style: { width: d ? `calc(${w}vw + 280px)` : `${w}vw` },
84
+ style: { width: m ? `calc(${N}vw + 280px)` : `${N}vw` },
80
85
  initial: { x: "100%" },
81
86
  animate: { x: 0 },
82
87
  exit: { x: "100%" },
83
88
  transition: { type: "spring", stiffness: 260, damping: 30 },
84
89
  children: [
85
- /* @__PURE__ */ e(W, { children: u && /* @__PURE__ */ n(
86
- h.div,
90
+ /* @__PURE__ */ e(O, { children: g && /* @__PURE__ */ n(
91
+ v.div,
87
92
  {
88
93
  className: "absolute right-full top-0 h-full bg-[#0a0a0a] border-r border-zinc-700",
89
- style: { width: `${R}vw` },
94
+ style: { width: `${T}vw` },
90
95
  initial: { x: "0" },
91
96
  animate: { x: 0 },
92
97
  exit: { x: "0%" },
93
98
  transition: { type: "spring", stiffness: 400, damping: 40 },
94
99
  children: [
95
- /* @__PURE__ */ e("div", { className: `h-full overflow-auto relative${I ? ` ${I}` : ""}`, children: A || /* @__PURE__ */ n(z, { children: [
100
+ /* @__PURE__ */ e("div", { className: `h-full overflow-auto relative${H ? ` ${H}` : ""}`, children: k || /* @__PURE__ */ n(I, { children: [
96
101
  /* @__PURE__ */ e("h3", { className: "text-lg font-semibold mb-4 text-white p-4", children: "Left Panel" }),
97
102
  /* @__PURE__ */ e("p", { className: "text-zinc-300 p-4", children: "This is the left extension panel. You can add any content here." })
98
103
  ] }) }),
@@ -100,7 +105,7 @@ function Ve(U) {
100
105
  "div",
101
106
  {
102
107
  onMouseDown: (t) => {
103
- t.preventDefault(), t.stopPropagation(), f.current = t.clientX, m.current = R, E(!0);
108
+ t.preventDefault(), t.stopPropagation(), p.current = t.clientX, b.current = T, V(!0);
104
109
  },
105
110
  className: "absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group",
106
111
  style: { touchAction: "none" },
@@ -118,7 +123,7 @@ function Ve(U) {
118
123
  "div",
119
124
  {
120
125
  onMouseDown: (t) => {
121
- t.preventDefault(), t.stopPropagation(), f.current = t.clientX, m.current = w, T(!0);
126
+ t.preventDefault(), t.stopPropagation(), p.current = t.clientX, b.current = N, B(!0);
122
127
  },
123
128
  className: "absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group",
124
129
  style: { touchAction: "none" },
@@ -132,17 +137,17 @@ function Ve(U) {
132
137
  /* @__PURE__ */ n("div", { className: "flex h-full flex-col flex-1", children: [
133
138
  /* @__PURE__ */ n("div", { className: "flex py-3 px-6 justify-between items-center border-b border-zinc-700/30", children: [
134
139
  /* @__PURE__ */ n("div", { className: "flex items-center gap-3", children: [
135
- A && /* @__PURE__ */ e("div", { className: "flex items-start gap-3", children: u ? /* @__PURE__ */ e(
140
+ k && /* @__PURE__ */ e("div", { className: "flex items-start gap-3", children: g ? /* @__PURE__ */ e(
136
141
  be,
137
142
  {
138
143
  className: "cursor-pointer transition-transform h-5",
139
- onClick: () => B(!u)
144
+ onClick: () => $(!g)
140
145
  }
141
146
  ) : /* @__PURE__ */ e(
142
147
  ge,
143
148
  {
144
149
  className: "cursor-pointer transition-transform h-5",
145
- onClick: () => B(!u)
150
+ onClick: () => $(!g)
146
151
  }
147
152
  ) }),
148
153
  r?.logoUrl && /* @__PURE__ */ e(
@@ -156,59 +161,59 @@ function Ve(U) {
156
161
  /* @__PURE__ */ e("div", { className: "text-start text-xl font-bold", children: r?.title || "AI Assistant" })
157
162
  ] }),
158
163
  /* @__PURE__ */ n("div", { className: "flex items-end gap-3", children: [
159
- p && !d && /* @__PURE__ */ e(
160
- xe,
164
+ x && !m && /* @__PURE__ */ e(
165
+ ve,
161
166
  {
162
167
  className: "h-5 text-zinc-400 cursor-pointer hover:text-zinc-200 transition-colors",
163
- onClick: () => H(!d)
168
+ onClick: () => E(!m)
164
169
  }
165
170
  ),
166
171
  /* @__PURE__ */ e(
167
- ve,
172
+ xe,
168
173
  {
169
174
  className: "text-zinc-400 cursor-pointer",
170
- onClick: () => b(!1)
175
+ onClick: () => w(!1)
171
176
  }
172
177
  )
173
178
  ] })
174
179
  ] }),
175
180
  /* @__PURE__ */ n("div", { className: "flex-1 relative", children: [
176
- /* @__PURE__ */ e("div", { className: "absolute inset-0 overflow-auto scrollbar-none", children: /* @__PURE__ */ e("div", { className: "pb-20 p-2", children: /* @__PURE__ */ e(we, { enableToolCallIndicator: _, chatBodyProps: Q }) }) }),
181
+ /* @__PURE__ */ e("div", { className: "absolute inset-0 overflow-auto scrollbar-none", children: /* @__PURE__ */ e("div", { className: "pb-20 p-2", children: /* @__PURE__ */ e(we, { enableToolCallIndicator: G, chatBodyProps: ee }) }) }),
177
182
  /* @__PURE__ */ e("div", { className: "absolute bottom-0 left-0 right-0 bg-transparent px-4 pointer-events-none z-10", children: /* @__PURE__ */ e("div", { className: "pointer-events-auto", children: /* @__PURE__ */ e(ce, {}) }) })
178
183
  ] }),
179
184
  /* @__PURE__ */ e("div", { className: "sticky bottom-0", children: /* @__PURE__ */ e(
180
185
  Ne,
181
186
  {
182
- input: g,
183
- inputFileAccept: q,
184
- setInput: X,
185
- textToSpeechVoice: Z,
186
- handleSubmit: le,
187
- isLoading: D || !!M,
188
- fileInput: x,
189
- handleFileSelect: ae,
190
- setFileInput: v,
191
- onCancel: () => S.stop?.(),
192
- filePreview: G
187
+ input: f,
188
+ inputFileAccept: J,
189
+ setInput: y,
190
+ textToSpeechVoice: te,
191
+ handleSubmit: oe,
192
+ isLoading: j || !!A,
193
+ fileInput: u,
194
+ handleFileSelect: re,
195
+ setFileInput: h,
196
+ onCancel: () => L.stop?.(),
197
+ filePreview: K
193
198
  }
194
199
  ) })
195
200
  ] }),
196
- /* @__PURE__ */ e(W, { children: d && /* @__PURE__ */ e(
197
- h.div,
201
+ /* @__PURE__ */ e(O, { children: m && /* @__PURE__ */ e(
202
+ v.div,
198
203
  {
199
204
  className: "h-full w-[280px] shadow-2xl border-l border-white/10",
200
205
  initial: { width: 0, opacity: 0 },
201
206
  animate: { width: 280, opacity: 1 },
202
207
  exit: { width: 0, opacity: 0 },
203
208
  transition: { type: "spring", stiffness: 300, damping: 30 },
204
- children: /* @__PURE__ */ e(de, { isSidebar: !0, header: { title: "Sessions" }, onClose: () => H(!1) })
209
+ children: /* @__PURE__ */ e(de, { isSidebar: !0, header: { title: "Sessions" }, onClose: () => E(!1) })
205
210
  }
206
211
  ) })
207
212
  ]
208
213
  }
209
214
  )
210
215
  ] }) }),
211
- /* @__PURE__ */ e(ye, { isVisible: !k, setOpen: b })
216
+ /* @__PURE__ */ e(ye, { isVisible: !R, setOpen: w })
212
217
  ] });
213
218
  }
214
219
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.es.js","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"sourcesContent":["import Suggestion from \"@/components/Suggestion\";\nimport ThreadHistory from \"@/components/threads/ThreadHistory\";\nimport { useFileProvider } from \"@/providers/FileProvider\";\nimport { useStreamContext } from \"@/providers/Stream\";\nimport { useThread } from \"@/providers/Thread\";\nimport type { ChatSidebarProps } from \"@/types/ChatProps\";\nimport type { FileInfo } from \"@/types/fileInput\";\nimport { logger } from \"@/utils/logger\";\nimport { buildContentBlocks, readFilesAsBase64 } from \"@/utils/submitUtils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X, PanelLeft, ScanEye, EyeOff } from \"lucide-react\";\nimport { useEffect, useState, type FormEvent, useRef } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport ChatBody from \"../../components/ChatBody\";\nimport ChatButton from \"../../components/ChatButton\";\nimport ChatInput from \"../../components/sidebar/ChatInput\";\n\n/**\n * Main sidebar chat interface component.\n * Displays a chat button that opens a sliding sidebar with full chat functionality.\n * \n * @param header - Custom header text for the chat sidebar (default: \"AI Assistant\")\n * @param handleFileSelect - Optional custom file selection handler\n * @param callThisOnSubmit - Optional callback invoked before message submission, can return updated file list\n * @param preventSubmit - Optional boolean to prevent all submit actions when true\n * @param leftPanelContent - Optional custom content for the left panel when expanded\n * @param leftPanelOpen - Optional external control for left panel open state\n * @param setLeftPanelOpen - Optional external setter for left panel open state\n * \n * @example\n * ```tsx\n * <Sidebar \n * header=\"My Custom AI\"\n * preventSubmit={true} // Disables all submit functionality\n * callThisOnSubmit={async () => {\n * // Upload files to your backend\n * return updatedFiles;\n * }}\n * leftPanelContent={<div className=\"text-white\">Custom left panel content here!</div>}\n * leftPanelOpen={isLeftPanelOpen}\n * setLeftPanelOpen={setIsLeftPanelOpen}\n * />\n * ```\n */\nexport default function Sidebar(props: ChatSidebarProps) {\n\n const { handleFileSelect, callThisOnSubmit, enableToolCallIndicator, header, inputFileAccept, filePreview, s3_upload, preventSubmit, leftPanelContent, leftPanelOpen: externalLeftPanelOpen, setLeftPanelOpen: externalSetLeftPanelOpen, chatBodyProps, supportChatHistory = false, textToSpeechVoice, leftPanelInitialWidth = 30, leftPanelClassName } = props;\n const [open, setOpen] = useState(false);\n const [input, setInput] = useState(\"\");\n const [internalLeftPanelOpen, setInternalLeftPanelOpen] = useState(false);\n const [threadHistoryOpen, setThreadHistoryOpen] = useState(false);\n const { fileInput, setFileInput } = useFileProvider();\n\n // Resize state\n const [leftPanelWidth, setLeftPanelWidth] = useState(leftPanelInitialWidth);\n const [sidebarWidth, setSidebarWidth] = useState(30); \n const [isResizingLeft, setIsResizingLeft] = useState(false);\n const [isResizingSidebar, setIsResizingSidebar] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(0);\n\n // Handle left panel resize\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isResizingLeft) {\n // For left panel: it extends to the left of the sidebar,\n // so dragging LEFT (decreasing clientX) should INCREASE width\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newLeftPanelWidth = startWidthRef.current + deltaVw;\n const maxLeftPanelWidth = 40;\n const minLeftPanelWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minLeftPanelWidth, Math.min(maxLeftPanelWidth, newLeftPanelWidth));\n setLeftPanelWidth(clampedWidth);\n } else if (isResizingSidebar && sidebarRef.current) {\n // For sidebar on right: moving left increases width (handle is on left edge)\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newSidebarWidth = startWidthRef.current + deltaVw;\n const maxSidebarWidth = 50;\n const minSidebarWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minSidebarWidth, Math.min(maxSidebarWidth, newSidebarWidth));\n setSidebarWidth(clampedWidth);\n }\n };\n\n const handleMouseUp = () => {\n setIsResizingLeft(false);\n setIsResizingSidebar(false);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizingLeft || isResizingSidebar) {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isResizingLeft, isResizingSidebar]);\n\n const leftPanelOpen = externalLeftPanelOpen !== undefined ? externalLeftPanelOpen : internalLeftPanelOpen;\n const setLeftPanelOpen = externalSetLeftPanelOpen || setInternalLeftPanelOpen;\n\n const stream = useStreamContext();\n const isLoading = stream.isLoading;\n const { setMode } = useThread();\n\n // Set thread mode to single when using Sidebar\n // useEffect(() => {\n // setMode(\"single\");\n // }, [setMode]);\n\n\n useEffect(() => {\n if (supportChatHistory) {\n setMode(\"multi\");\n } else {\n setMode(\"single\");\n }\n }, [setMode, supportChatHistory]);\n\n const defaultHandleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (preventSubmit || (input.trim().length === 0 && fileInput.length === 0) || isLoading)\n return;\n\n // Call the custom upload and get the latest files\n let latestFiles: FileInfo[] = fileInput;\n let contextValues: Record<string, unknown> | undefined = undefined;\n if (callThisOnSubmit) {\n const result = await callThisOnSubmit();\n if (Array.isArray(result?.files) && result.files.length > 0) {\n latestFiles = result.files as FileInfo[];\n }\n if (result && result?.contextValues) contextValues = result.contextValues;\n }\n logger.debug(\"Using files for submission:\", latestFiles);\n\n const contentBlocks = buildContentBlocks(input, latestFiles, s3_upload);\n logger.debug(\"Constructed content blocks:\", contentBlocks);\n\n const newHumanMessage: Message = {\n id: uuidv4(),\n type: \"human\",\n content: contentBlocks,\n };\n\n // Use the unified submitMessage function\n await stream.submitMessage(newHumanMessage, { contextValues: contextValues });\n\n setInput(\"\");\n setFileInput([]);\n };\n\n const defaultHandleFileSelect = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const files = event.target.files;\n if (!files) return;\n const fileDetails = await readFilesAsBase64(files);\n setFileInput((prevFile) => [...prevFile, ...fileDetails]);\n };\n\n const onFileSelect = handleFileSelect || defaultHandleFileSelect;\n return (\n <>\n <AnimatePresence>\n {open && (\n <>\n {/* Overlay */}\n <motion.div\n className=\"fixed inset-0 z-40 bg-black/30\"\n onClick={() => setOpen(false)}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n\n {/* Sidebar */}\n <motion.aside\n ref={sidebarRef}\n className=\"fixed right-0 top-0 z-50 h-screen flex bg-[#0f0f0f] text-white/70\"\n style={{ width: threadHistoryOpen ? `calc(${sidebarWidth}vw + 280px)` : `${sidebarWidth}vw` }}\n initial={{ x: \"100%\" }}\n animate={{ x: 0 }}\n exit={{ x: \"100%\" }}\n transition={{ type: \"spring\", stiffness: 260, damping: 30 }}\n >\n <AnimatePresence>\n {leftPanelOpen && (\n <motion.div\n className=\"absolute right-full top-0 h-full bg-[#0a0a0a] border-r border-zinc-700\"\n style={{ width: `${leftPanelWidth}vw` }}\n initial={{ x: \"0\" }}\n animate={{ x: 0 }}\n exit={{ x: \"0%\" }}\n transition={{ type: \"spring\", stiffness: 400, damping: 40 }}\n >\n <div className={`h-full overflow-auto relative${leftPanelClassName ? ` ${leftPanelClassName}` : \"\"}`}>\n {leftPanelContent || (\n <>\n <h3 className=\"text-lg font-semibold mb-4 text-white p-4\">Left Panel</h3>\n <p className=\"text-zinc-300 p-4\">This is the left extension panel. You can add any content here.</p>\n </>\n )}\n </div>\n {/* Resize handle for left panel (on left edge) */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = leftPanelWidth;\n setIsResizingLeft(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n {/* Resize handle for sidebar */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = sidebarWidth;\n setIsResizingSidebar(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n <div className=\"flex h-full flex-col flex-1\">\n <div className=\"flex py-3 px-6 justify-between items-center border-b border-zinc-700/30\">\n <div className=\"flex items-center gap-3\">\n {/* Vertically centered left panel toggle */}\n {leftPanelContent && (\n <div className=\"flex items-start gap-3\">\n {leftPanelOpen ? (\n <EyeOff\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n ) : (\n <ScanEye\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n )}\n </div>\n )}\n {header?.logoUrl && (\n <img\n src={header?.logoUrl}\n alt={header?.title ? `${header.title} logo` : \"AI Assistant logo\"}\n className=\"h-8 w-8 object-contain rounded-sm\"\n />\n )}\n <div className=\"text-start text-xl font-bold\">{header?.title || \"AI Assistant\"}</div>\n\n </div>\n <div className=\"flex items-end gap-3\">\n {supportChatHistory && !threadHistoryOpen && <PanelLeft\n className=\"h-5 text-zinc-400 cursor-pointer hover:text-zinc-200 transition-colors\"\n onClick={() => setThreadHistoryOpen(!threadHistoryOpen)}\n />}\n <X\n className=\"text-zinc-400 cursor-pointer\"\n onClick={() => setOpen(false)}\n />\n </div>\n </div>\n <div className=\"flex-1 relative\">\n <div className=\"absolute inset-0 overflow-auto scrollbar-none\">\n <div className=\"pb-20 p-2\">\n <ChatBody enableToolCallIndicator={enableToolCallIndicator} chatBodyProps={chatBodyProps} />\n </div>\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 bg-transparent px-4 pointer-events-none z-10\">\n <div className=\"pointer-events-auto\">\n <Suggestion />\n </div>\n </div>\n </div>\n <div className=\"sticky bottom-0\">\n <ChatInput\n input={input}\n inputFileAccept={inputFileAccept}\n setInput={setInput}\n textToSpeechVoice={textToSpeechVoice}\n handleSubmit={defaultHandleSubmit}\n isLoading={isLoading || !!preventSubmit}\n fileInput={fileInput}\n handleFileSelect={onFileSelect}\n setFileInput={setFileInput}\n onCancel={() => stream.stop?.()}\n filePreview={filePreview}\n />\n </div>\n </div>\n <AnimatePresence>\n {threadHistoryOpen && (\n <motion.div\n className=\"h-full w-[280px] shadow-2xl border-l border-white/10\"\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: 280, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n >\n <ThreadHistory isSidebar={true} header={{ title: \"Sessions\" }} onClose={() => setThreadHistoryOpen(false)} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.aside>\n </>\n )}\n </AnimatePresence>\n\n <ChatButton isVisible={!open} setOpen={setOpen} />\n </>\n );\n}\n"],"names":["Sidebar","props","handleFileSelect","callThisOnSubmit","enableToolCallIndicator","header","inputFileAccept","filePreview","s3_upload","preventSubmit","leftPanelContent","externalLeftPanelOpen","externalSetLeftPanelOpen","chatBodyProps","supportChatHistory","textToSpeechVoice","leftPanelInitialWidth","leftPanelClassName","open","setOpen","useState","input","setInput","internalLeftPanelOpen","setInternalLeftPanelOpen","threadHistoryOpen","setThreadHistoryOpen","fileInput","setFileInput","useFileProvider","leftPanelWidth","setLeftPanelWidth","sidebarWidth","setSidebarWidth","isResizingLeft","setIsResizingLeft","isResizingSidebar","setIsResizingSidebar","sidebarRef","useRef","startXRef","startWidthRef","useEffect","handleMouseMove","e","deltaVw","newLeftPanelWidth","clampedWidth","newSidebarWidth","handleMouseUp","leftPanelOpen","setLeftPanelOpen","stream","useStreamContext","isLoading","setMode","useThread","defaultHandleSubmit","latestFiles","contextValues","result","logger","contentBlocks","buildContentBlocks","newHumanMessage","uuidv4","onFileSelect","event","files","fileDetails","readFilesAsBase64","prevFile","jsxs","Fragment","jsx","AnimatePresence","motion","EyeOff","ScanEye","PanelLeft","X","ChatBody","Suggestion","ChatInput","ThreadHistory","ChatButton"],"mappings":";;;;;;;;;;;;;;;AA6CA,SAAwBA,GAAQC,GAAyB;AAEvD,QAAM,EAAE,kBAAAC,GAAkB,kBAAAC,GAAkB,yBAAAC,GAAyB,QAAAC,GAAQ,iBAAAC,GAAiB,aAAAC,GAAa,WAAAC,GAAW,eAAAC,GAAe,kBAAAC,GAAkB,eAAeC,GAAuB,kBAAkBC,GAA0B,eAAAC,GAAe,oBAAAC,IAAqB,IAAO,mBAAAC,GAAmB,uBAAAC,KAAwB,IAAI,oBAAAC,EAAA,IAAuBhB,GACpV,CAACiB,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAOC,CAAQ,IAAIF,EAAS,EAAE,GAC/B,CAACG,IAAuBC,EAAwB,IAAIJ,EAAS,EAAK,GAClE,CAACK,GAAmBC,CAAoB,IAAIN,EAAS,EAAK,GAC1D,EAAE,WAAAO,GAAW,cAAAC,EAAA,IAAiBC,GAAA,GAG9B,CAACC,GAAgBC,EAAiB,IAAIX,EAASJ,EAAqB,GACpE,CAACgB,GAAcC,EAAe,IAAIb,EAAS,EAAE,GAC7C,CAACc,GAAgBC,CAAiB,IAAIf,EAAS,EAAK,GACpD,CAACgB,GAAmBC,CAAoB,IAAIjB,EAAS,EAAK,GAC1DkB,IAAaC,EAAuB,IAAI,GACxCC,IAAYD,EAAe,CAAC,GAC5BE,IAAgBF,EAAe,CAAC;AAGtC,EAAAG,EAAU,MAAM;AACd,UAAMC,IAAkB,CAACC,MAAkB;AACzC,UAAIV,GAAgB;AAKlB,cAAMW,KAFSL,EAAU,UAAUI,EAAE,WAEX,OAAO,aAAc,KACzCE,IAAoBL,EAAc,UAAUI,GAK5CE,IAAe,KAAK,IAHA,IAGuB,KAAK,IAJ5B,IAImDD,CAAiB,CAAC;AAC/F,QAAAf,GAAkBgB,CAAY;AAAA,MAChC,WAAWX,KAAqBE,EAAW,SAAS;AAIlD,cAAMO,KAFSL,EAAU,UAAUI,EAAE,WAEX,OAAO,aAAc,KACzCI,IAAkBP,EAAc,UAAUI,GAK1CE,IAAe,KAAK,IAHF,IAGuB,KAAK,IAJ5B,IAIiDC,CAAe,CAAC;AACzF,QAAAf,GAAgBc,CAAY;AAAA,MAC9B;AAAA,IACF,GAEME,IAAgB,MAAM;AAC1B,MAAAd,EAAkB,EAAK,GACvBE,EAAqB,EAAK,GAC1B,SAAS,KAAK,MAAM,SAAS,WAC7B,SAAS,KAAK,MAAM,aAAa;AAAA,IACnC;AAEA,QAAIH,KAAkBE;AACpB,sBAAS,KAAK,MAAM,SAAS,cAC7B,SAAS,KAAK,MAAM,aAAa,QACjC,SAAS,iBAAiB,aAAaO,CAAe,GACtD,SAAS,iBAAiB,WAAWM,CAAa,GAC3C,MAAM;AACX,iBAAS,oBAAoB,aAAaN,CAAe,GACzD,SAAS,oBAAoB,WAAWM,CAAa;AAAA,MACvD;AAAA,EAEJ,GAAG,CAACf,GAAgBE,CAAiB,CAAC;AAEtC,QAAMc,IAAgBvC,MAA0B,SAAYA,IAAwBY,IAC9E4B,IAAmBvC,KAA4BY,IAE/C4B,IAASC,GAAA,GACTC,IAAYF,EAAO,WACnB,EAAE,SAAAG,EAAA,IAAYC,GAAA;AAQpB,EAAAd,EAAU,MAAM;AACd,IACEa,EADEzC,IACM,UAEA,QAFO;AAAA,EAInB,GAAG,CAACyC,GAASzC,CAAkB,CAAC;AAEhC,QAAM2C,KAAsB,OAAOb,MAAiB;AAGlD,QAFAA,EAAE,eAAA,GAEEnC,KAAkBY,EAAM,OAAO,WAAW,KAAKM,EAAU,WAAW,KAAM2B;AAC5E;AAGF,QAAII,IAA0B/B,GAC1BgC;AACJ,QAAIxD,GAAkB;AACpB,YAAMyD,IAAS,MAAMzD,EAAA;AACrB,MAAI,MAAM,QAAQyD,GAAQ,KAAK,KAAKA,EAAO,MAAM,SAAS,MACxDF,IAAcE,EAAO,QAEnBA,KAAUA,GAAQ,kBAAeD,IAAgBC,EAAO;AAAA,IAC9D;AACA,IAAAC,EAAO,MAAM,+BAA+BH,CAAW;AAEvD,UAAMI,IAAgBC,GAAmB1C,GAAOqC,GAAalD,CAAS;AACtE,IAAAqD,EAAO,MAAM,+BAA+BC,CAAa;AAEzD,UAAME,IAA2B;AAAA,MAC/B,IAAIC,GAAA;AAAA,MACJ,MAAM;AAAA,MACN,SAASH;AAAA,IAAA;AAIX,UAAMV,EAAO,cAAcY,GAAiB,EAAE,eAAAL,GAA8B,GAE5ErC,EAAS,EAAE,GACXM,EAAa,CAAA,CAAE;AAAA,EACjB,GAWMsC,KAAehE,MATW,OAC9BiE,MACG;AACH,UAAMC,IAAQD,EAAM,OAAO;AAC3B,QAAI,CAACC,EAAO;AACZ,UAAMC,IAAc,MAAMC,GAAkBF,CAAK;AACjD,IAAAxC,EAAa,CAAC2C,MAAa,CAAC,GAAGA,GAAU,GAAGF,CAAW,CAAC;AAAA,EAC1D;AAGA,SACE,gBAAAG,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EACE,eACC,gBAAAH,EAAAC,GAAA,EAEE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACE,EAAO;AAAA,QAAP;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAMzD,EAAQ,EAAK;AAAA,UAC5B,SAAS,EAAE,SAAS,EAAA;AAAA,UACpB,SAAS,EAAE,SAAS,EAAA;AAAA,UACpB,MAAM,EAAE,SAAS,EAAA;AAAA,QAAE;AAAA,MAAA;AAAA,MAIrB,gBAAAqD;AAAA,QAACI,EAAO;AAAA,QAAP;AAAA,UACC,KAAKtC;AAAA,UACL,WAAU;AAAA,UACV,OAAO,EAAE,OAAOb,IAAoB,QAAQO,CAAY,gBAAgB,GAAGA,CAAY,KAAA;AAAA,UACvF,SAAS,EAAE,GAAG,OAAA;AAAA,UACd,SAAS,EAAE,GAAG,EAAA;AAAA,UACd,MAAM,EAAE,GAAG,OAAA;AAAA,UACX,YAAY,EAAE,MAAM,UAAU,WAAW,KAAK,SAAS,GAAA;AAAA,UAEvD,UAAA;AAAA,YAAA,gBAAA0C,EAACC,KACE,UAAAzB,KACC,gBAAAsB;AAAA,cAACI,EAAO;AAAA,cAAP;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO,GAAG9C,CAAc,KAAA;AAAA,gBACjC,SAAS,EAAE,GAAG,IAAA;AAAA,gBACd,SAAS,EAAE,GAAG,EAAA;AAAA,gBACd,MAAM,EAAE,GAAG,KAAA;AAAA,gBACX,YAAY,EAAE,MAAM,UAAU,WAAW,KAAK,SAAS,GAAA;AAAA,gBAEvD,UAAA;AAAA,kBAAA,gBAAA4C,EAAC,OAAA,EAAI,WAAW,gCAAgCzD,IAAqB,IAAIA,CAAkB,KAAK,EAAE,IAC/F,UAAAP,KACC,gBAAA8D,EAAAC,GAAA,EACE,UAAA;AAAA,oBAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,6CAA4C,UAAA,cAAU;AAAA,oBACpE,gBAAAA,EAAC,KAAA,EAAE,WAAU,qBAAoB,UAAA,kEAAA,CAA+D;AAAA,kBAAA,EAAA,CAClG,EAAA,CAEJ;AAAA,kBAEA,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,aAAa,CAAC9B,MAAM;AAClB,wBAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFJ,EAAU,UAAUI,EAAE,SACtBH,EAAc,UAAUX,GACxBK,EAAkB,EAAI;AAAA,sBACxB;AAAA,sBACA,WAAU;AAAA,sBACV,OAAO,EAAE,aAAa,OAAA;AAAA,sBAEtB,UAAA,gBAAAqC,EAAC,OAAA,EAAI,WAAU,sHACb,UAAA;AAAA,wBAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,wBAC/C,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,wBAC/C,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,sBAAA,EAAA,CACjD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA,GAGN;AAAA,YAEA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,aAAa,CAAC9B,MAAM;AAClB,kBAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFJ,EAAU,UAAUI,EAAE,SACtBH,EAAc,UAAUT,GACxBK,EAAqB,EAAI;AAAA,gBAC3B;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,OAAA;AAAA,gBAEtB,UAAA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,sHACb,UAAA;AAAA,kBAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,kBAC/C,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,kBAC/C,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,gBAAA,EAAA,CACjD;AAAA,cAAA;AAAA,YAAA;AAAA,YAEF,gBAAAF,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2EACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BAEZ,UAAA;AAAA,kBAAA9D,KACC,gBAAAgE,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAAxB,IACC,gBAAAwB;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,MAAM1B,EAAiB,CAACD,CAAa;AAAA,oBAAA;AAAA,kBAAA,IAGhD,gBAAAwB;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,MAAM3B,EAAiB,CAACD,CAAa;AAAA,oBAAA;AAAA,kBAAA,GAGpD;AAAA,kBAED7C,GAAQ,WACP,gBAAAqE;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAKrE,GAAQ;AAAA,sBACb,KAAKA,GAAQ,QAAQ,GAAGA,EAAO,KAAK,UAAU;AAAA,sBAC9C,WAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAGb,OAAA,EAAI,WAAU,gCAAgC,UAAAA,GAAQ,SAAS,eAAA,CAAe;AAAA,gBAAA,GAEjF;AAAA,gBACA,gBAAAmE,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAA;AAAA,kBAAA1D,KAAsB,CAACW,KAAqB,gBAAAiD;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBAC5C,WAAU;AAAA,sBACV,SAAS,MAAMrD,EAAqB,CAACD,CAAiB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAExD,gBAAAiD;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,MAAM7D,EAAQ,EAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAC9B,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cACA,gBAAAqD,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,iDACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAA,EAACO,IAAA,EAAS,yBAAA7E,GAAkD,eAAAS,EAAA,CAA8B,EAAA,CAC5F,GACF;AAAA,gBACA,gBAAA6D,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAA,EAACQ,IAAA,CAAA,CAAW,EAAA,CACd,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cACA,gBAAAR,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA,gBAAAA;AAAA,gBAACS;AAAA,gBAAA;AAAA,kBACC,OAAA9D;AAAA,kBACA,iBAAAf;AAAA,kBACA,UAAAgB;AAAA,kBACA,mBAAAP;AAAA,kBACA,cAAc0C;AAAA,kBACd,WAAWH,KAAa,CAAC,CAAC7C;AAAA,kBAC1B,WAAAkB;AAAA,kBACA,kBAAkBuC;AAAA,kBAClB,cAAAtC;AAAA,kBACA,UAAU,MAAMwB,EAAO,OAAA;AAAA,kBACvB,aAAA7C;AAAA,gBAAA;AAAA,cAAA,EACF,CACF;AAAA,YAAA,GACF;AAAA,YACA,gBAAAmE,EAACC,KACE,UAAAlD,KACC,gBAAAiD;AAAA,cAACE,EAAO;AAAA,cAAP;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,gBAC9B,SAAS,EAAE,OAAO,KAAK,SAAS,EAAA;AAAA,gBAChC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,gBAC3B,YAAY,EAAE,MAAM,UAAU,WAAW,KAAK,SAAS,GAAA;AAAA,gBAEvD,UAAA,gBAAAF,EAACU,IAAA,EAAc,WAAW,IAAM,QAAQ,EAAE,OAAO,WAAA,GAAc,SAAS,MAAM1D,EAAqB,EAAK,EAAA,CAAG;AAAA,cAAA;AAAA,YAAA,EAC7G,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,EAAA,CACF,EAAA,CAEJ;AAAA,IAEA,gBAAAgD,EAACW,IAAA,EAAW,WAAW,CAACnE,GAAM,SAAAC,EAAA,CAAkB;AAAA,EAAA,GAClD;AAEJ;"}
1
+ {"version":3,"file":"sidebar.es.js","sources":["../../../src/pages/Sidebar/sidebar.tsx"],"sourcesContent":["import Suggestion from \"@/components/Suggestion\";\nimport ThreadHistory from \"@/components/threads/ThreadHistory\";\nimport { useFileProvider } from \"@/providers/FileProvider\";\nimport { useStreamContext } from \"@/providers/Stream\";\nimport { useThread } from \"@/providers/Thread\";\nimport type { ChatSidebarProps } from \"@/types/ChatProps\";\nimport type { FileInfo } from \"@/types/fileInput\";\nimport { logger } from \"@/utils/logger\";\nimport { buildContentBlocks, readFilesAsBase64 } from \"@/utils/submitUtils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X, PanelLeft, ScanEye, EyeOff } from \"lucide-react\";\nimport { useEffect, useState, type FormEvent, useRef } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport ChatBody from \"../../components/ChatBody\";\nimport ChatButton from \"../../components/ChatButton\";\nimport ChatInput from \"../../components/sidebar/ChatInput\";\n\n/**\n * Main sidebar chat interface component.\n * Displays a chat button that opens a sliding sidebar with full chat functionality.\n * \n * @param header - Custom header text for the chat sidebar (default: \"AI Assistant\")\n * @param handleFileSelect - Optional custom file selection handler\n * @param callThisOnSubmit - Optional callback invoked before message submission, can return updated file list\n * @param preventSubmit - Optional boolean to prevent all submit actions when true\n * @param leftPanelContent - Optional custom content for the left panel when expanded\n * @param leftPanelOpen - Optional external control for left panel open state\n * @param setLeftPanelOpen - Optional external setter for left panel open state\n * \n * @example\n * ```tsx\n * <Sidebar \n * header=\"My Custom AI\"\n * preventSubmit={true} // Disables all submit functionality\n * callThisOnSubmit={async () => {\n * // Upload files to your backend\n * return updatedFiles;\n * }}\n * leftPanelContent={<div className=\"text-white\">Custom left panel content here!</div>}\n * leftPanelOpen={isLeftPanelOpen}\n * setLeftPanelOpen={setIsLeftPanelOpen}\n * />\n * ```\n */\nexport default function Sidebar(props: ChatSidebarProps) {\n\n const { handleFileSelect, callThisOnSubmit, enableToolCallIndicator, header, inputFileAccept, filePreview, s3_upload, preventSubmit, leftPanelContent, leftPanelOpen: externalLeftPanelOpen, setLeftPanelOpen: externalSetLeftPanelOpen, chatBodyProps, supportChatHistory = false, textToSpeechVoice, leftPanelInitialWidth = 30, leftPanelClassName } = props;\n const [open, setOpen] = useState(false);\n const [input, setInput] = useState(\"\");\n const [internalLeftPanelOpen, setInternalLeftPanelOpen] = useState(false);\n const [threadHistoryOpen, setThreadHistoryOpen] = useState(false);\n const { fileInput, setFileInput } = useFileProvider();\n\n // Resize state\n const [leftPanelWidth, setLeftPanelWidth] = useState(leftPanelInitialWidth);\n const [sidebarWidth, setSidebarWidth] = useState(30); \n const [isResizingLeft, setIsResizingLeft] = useState(false);\n const [isResizingSidebar, setIsResizingSidebar] = useState(false);\n const sidebarRef = useRef<HTMLDivElement>(null);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(0);\n\n // Handle left panel resize\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isResizingLeft) {\n // For left panel: it extends to the left of the sidebar,\n // so dragging LEFT (decreasing clientX) should INCREASE width\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newLeftPanelWidth = startWidthRef.current + deltaVw;\n const maxLeftPanelWidth = 40;\n const minLeftPanelWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minLeftPanelWidth, Math.min(maxLeftPanelWidth, newLeftPanelWidth));\n setLeftPanelWidth(clampedWidth);\n } else if (isResizingSidebar && sidebarRef.current) {\n // For sidebar on right: moving left increases width (handle is on left edge)\n const deltaX = startXRef.current - e.clientX;\n // Convert to vw\n const deltaVw = (deltaX / window.innerWidth) * 100;\n const newSidebarWidth = startWidthRef.current + deltaVw;\n const maxSidebarWidth = 50;\n const minSidebarWidth = 30;\n\n // Clamp the value\n const clampedWidth = Math.max(minSidebarWidth, Math.min(maxSidebarWidth, newSidebarWidth));\n setSidebarWidth(clampedWidth);\n }\n };\n\n const handleMouseUp = () => {\n setIsResizingLeft(false);\n setIsResizingSidebar(false);\n document.body.style.cursor = 'default';\n document.body.style.userSelect = 'auto';\n };\n\n if (isResizingLeft || isResizingSidebar) {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isResizingLeft, isResizingSidebar]);\n\n const leftPanelOpen = externalLeftPanelOpen !== undefined ? externalLeftPanelOpen : internalLeftPanelOpen;\n const setLeftPanelOpen = externalSetLeftPanelOpen || setInternalLeftPanelOpen;\n\n const stream = useStreamContext();\n const isLoading = stream.isLoading;\n const { setMode } = useThread();\n\n // Set thread mode to single when using Sidebar\n // useEffect(() => {\n // setMode(\"single\");\n // }, [setMode]);\n\n\n useEffect(() => {\n if (supportChatHistory) {\n setMode(\"multi\");\n } else {\n setMode(\"single\");\n }\n }, [setMode, supportChatHistory]);\n\n const defaultHandleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (preventSubmit || (input.trim().length === 0 && fileInput.length === 0) || isLoading)\n return;\n\n // Call the custom upload and get the latest files\n let latestFiles: FileInfo[] = fileInput;\n let contextValues: Record<string, unknown> | undefined = undefined;\n if (callThisOnSubmit) {\n const result = await callThisOnSubmit();\n if (Array.isArray(result?.files) && result.files.length > 0) {\n latestFiles = result.files as FileInfo[];\n }\n if (result && result?.contextValues) contextValues = result.contextValues;\n }\n logger.debug(\"Using files for submission:\", latestFiles);\n\n const contentBlocks = buildContentBlocks(input, latestFiles, s3_upload);\n logger.debug(\"Constructed content blocks:\", contentBlocks);\n\n const newHumanMessage: Message = {\n id: uuidv4(),\n type: \"human\",\n content: contentBlocks,\n };\n\n // Clear input optimistically, but restore on failure so the user doesn't lose their draft.\n const savedInput = input;\n const savedFileInput = fileInput;\n setInput(\"\");\n setFileInput([]);\n\n try {\n // Use the unified submitMessage function\n await stream.submitMessage(newHumanMessage, { contextValues: contextValues });\n } catch (err) {\n setInput(savedInput);\n setFileInput(savedFileInput);\n throw err;\n }\n };\n\n const defaultHandleFileSelect = async (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const files = event.target.files;\n if (!files) return;\n const fileDetails = await readFilesAsBase64(files);\n setFileInput((prevFile) => [...prevFile, ...fileDetails]);\n };\n\n const onFileSelect = handleFileSelect || defaultHandleFileSelect;\n return (\n <>\n <AnimatePresence>\n {open && (\n <>\n {/* Overlay */}\n <motion.div\n className=\"fixed inset-0 z-40 bg-black/30\"\n onClick={() => setOpen(false)}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n\n {/* Sidebar */}\n <motion.aside\n ref={sidebarRef}\n className=\"fixed right-0 top-0 z-50 h-screen flex bg-[#0f0f0f] text-white/70\"\n style={{ width: threadHistoryOpen ? `calc(${sidebarWidth}vw + 280px)` : `${sidebarWidth}vw` }}\n initial={{ x: \"100%\" }}\n animate={{ x: 0 }}\n exit={{ x: \"100%\" }}\n transition={{ type: \"spring\", stiffness: 260, damping: 30 }}\n >\n <AnimatePresence>\n {leftPanelOpen && (\n <motion.div\n className=\"absolute right-full top-0 h-full bg-[#0a0a0a] border-r border-zinc-700\"\n style={{ width: `${leftPanelWidth}vw` }}\n initial={{ x: \"0\" }}\n animate={{ x: 0 }}\n exit={{ x: \"0%\" }}\n transition={{ type: \"spring\", stiffness: 400, damping: 40 }}\n >\n <div className={`h-full overflow-auto relative${leftPanelClassName ? ` ${leftPanelClassName}` : \"\"}`}>\n {leftPanelContent || (\n <>\n <h3 className=\"text-lg font-semibold mb-4 text-white p-4\">Left Panel</h3>\n <p className=\"text-zinc-300 p-4\">This is the left extension panel. You can add any content here.</p>\n </>\n )}\n </div>\n {/* Resize handle for left panel (on left edge) */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = leftPanelWidth;\n setIsResizingLeft(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n {/* Resize handle for sidebar */}\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n startXRef.current = e.clientX;\n startWidthRef.current = sidebarWidth;\n setIsResizingSidebar(true);\n }}\n className=\"absolute left-0 top-0 w-1.5 h-full bg-zinc-700/50 cursor-col-resize transition-colors z-[60] hover:w-2 group\"\n style={{ touchAction: 'none' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col gap-1 opacity-60 group-hover:opacity-100\">\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n <div className=\"w-1 h-1 rounded-full bg-white\"></div>\n </div>\n </div>\n <div className=\"flex h-full flex-col flex-1\">\n <div className=\"flex py-3 px-6 justify-between items-center border-b border-zinc-700/30\">\n <div className=\"flex items-center gap-3\">\n {/* Vertically centered left panel toggle */}\n {leftPanelContent && (\n <div className=\"flex items-start gap-3\">\n {leftPanelOpen ? (\n <EyeOff\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n ) : (\n <ScanEye\n className=\"cursor-pointer transition-transform h-5\"\n onClick={() => setLeftPanelOpen(!leftPanelOpen)}\n />\n )}\n </div>\n )}\n {header?.logoUrl && (\n <img\n src={header?.logoUrl}\n alt={header?.title ? `${header.title} logo` : \"AI Assistant logo\"}\n className=\"h-8 w-8 object-contain rounded-sm\"\n />\n )}\n <div className=\"text-start text-xl font-bold\">{header?.title || \"AI Assistant\"}</div>\n\n </div>\n <div className=\"flex items-end gap-3\">\n {supportChatHistory && !threadHistoryOpen && <PanelLeft\n className=\"h-5 text-zinc-400 cursor-pointer hover:text-zinc-200 transition-colors\"\n onClick={() => setThreadHistoryOpen(!threadHistoryOpen)}\n />}\n <X\n className=\"text-zinc-400 cursor-pointer\"\n onClick={() => setOpen(false)}\n />\n </div>\n </div>\n <div className=\"flex-1 relative\">\n <div className=\"absolute inset-0 overflow-auto scrollbar-none\">\n <div className=\"pb-20 p-2\">\n <ChatBody enableToolCallIndicator={enableToolCallIndicator} chatBodyProps={chatBodyProps} />\n </div>\n </div>\n <div className=\"absolute bottom-0 left-0 right-0 bg-transparent px-4 pointer-events-none z-10\">\n <div className=\"pointer-events-auto\">\n <Suggestion />\n </div>\n </div>\n </div>\n <div className=\"sticky bottom-0\">\n <ChatInput\n input={input}\n inputFileAccept={inputFileAccept}\n setInput={setInput}\n textToSpeechVoice={textToSpeechVoice}\n handleSubmit={defaultHandleSubmit}\n isLoading={isLoading || !!preventSubmit}\n fileInput={fileInput}\n handleFileSelect={onFileSelect}\n setFileInput={setFileInput}\n onCancel={() => stream.stop?.()}\n filePreview={filePreview}\n />\n </div>\n </div>\n <AnimatePresence>\n {threadHistoryOpen && (\n <motion.div\n className=\"h-full w-[280px] shadow-2xl border-l border-white/10\"\n initial={{ width: 0, opacity: 0 }}\n animate={{ width: 280, opacity: 1 }}\n exit={{ width: 0, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n >\n <ThreadHistory isSidebar={true} header={{ title: \"Sessions\" }} onClose={() => setThreadHistoryOpen(false)} />\n </motion.div>\n )}\n </AnimatePresence>\n </motion.aside>\n </>\n )}\n </AnimatePresence>\n\n <ChatButton isVisible={!open} setOpen={setOpen} />\n </>\n );\n}\n"],"names":["Sidebar","props","handleFileSelect","callThisOnSubmit","enableToolCallIndicator","header","inputFileAccept","filePreview","s3_upload","preventSubmit","leftPanelContent","externalLeftPanelOpen","externalSetLeftPanelOpen","chatBodyProps","supportChatHistory","textToSpeechVoice","leftPanelInitialWidth","leftPanelClassName","open","setOpen","useState","input","setInput","internalLeftPanelOpen","setInternalLeftPanelOpen","threadHistoryOpen","setThreadHistoryOpen","fileInput","setFileInput","useFileProvider","leftPanelWidth","setLeftPanelWidth","sidebarWidth","setSidebarWidth","isResizingLeft","setIsResizingLeft","isResizingSidebar","setIsResizingSidebar","sidebarRef","useRef","startXRef","startWidthRef","useEffect","handleMouseMove","e","deltaVw","newLeftPanelWidth","clampedWidth","newSidebarWidth","handleMouseUp","leftPanelOpen","setLeftPanelOpen","stream","useStreamContext","isLoading","setMode","useThread","defaultHandleSubmit","latestFiles","contextValues","result","logger","contentBlocks","buildContentBlocks","newHumanMessage","uuidv4","savedInput","savedFileInput","err","onFileSelect","event","files","fileDetails","readFilesAsBase64","prevFile","jsxs","Fragment","jsx","AnimatePresence","motion","EyeOff","ScanEye","PanelLeft","X","ChatBody","Suggestion","ChatInput","ThreadHistory","ChatButton"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react/jsx-runtime"),O=require("./ChatRuntime.cjs.js"),f=require("../utils/logger.cjs.js");require("@langchain/langgraph-sdk");const V=require("@langchain/langgraph-sdk/react"),x=require("@langchain/langgraph-sdk/react-ui"),l=require("react"),K=require("sonner"),N=require("./Thread.cjs.js"),W=require("../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.cjs.js"),D=V.useStream,F=l.createContext(void 0);async function J(g,u){try{return(await fetch(`${g}/info`,{headers:u?{Authorization:`Bearer ${u}`}:void 0})).ok}catch{f.logger.error("Failed to initialize LangGraph Agent")}}async function Q(g,u){try{const y=await fetch(`${g}/agents/catalog`,{headers:u?{Authorization:`Bearer ${u}`}:void 0});return y.ok?await y.json():null}catch{return f.logger.error("Failed to fetch LangGraph Catalog"),null}}async function X(g=6e3){return new Promise(u=>setTimeout(u,g))}const Y=({children:g})=>{const{apiUrl:u,assistantId:y,identity:c}=O.useChatRuntime(),{mode:C,threadId:T,setThreadId:A,getThreads:z,setThreads:B,configuration:v}=N.useThread(),[U,b]=l.useState([]),[S,w]=l.useState([]),[I,E]=l.useState(!1),[k,L]=l.useState(null),o=D({apiUrl:u,assistantId:y,threadId:C==="multi"?T:null,defaultHeaders:c?.authToken?{Authorization:`Bearer ${c?.authToken}`}:void 0,fetchStateHistory:!0,onUpdateEvent:(t,e)=>{const a=[],s=d=>{if(!d||typeof d!="object")return;const m=d;if(Array.isArray(m.messages))for(const r of m.messages){const n=r.additional_kwargs;if(r?.type==="ai"&&r.id&&n){const h=typeof n.reasoning_content=="string"&&n.reasoning_content.length>0,i=Array.isArray(n.tool_status)&&n.tool_status.length>0;(h||i)&&a.push(r)}}for(const r of Object.values(m))r&&typeof r=="object"&&!Array.isArray(r)&&s(r)};s(t),a.length>0&&e.mutate(d=>{const m=d.messages??[],r=new Map;for(const i of a)i.id&&r.set(i.id,i);let n=!1;const h=m.map(i=>{if(!i.id||!r.has(i.id))return i;const M=r.get(i.id);r.delete(i.id),n=!0;const H=M.additional_kwargs;return{...i,additional_kwargs:{...i.additional_kwargs??{},...H??{}}}});return n?{...d,messages:h}:d})},onCustomEvent:(t,e)=>{(x.isUIMessage(t)||x.isRemoveUIMessage(t))&&e.mutate(a=>{f.logger.debug("UI Event received in StreamProvider:",t);const s=x.uiMessageReducer(a.ui??[],t);return{...a,ui:s}})},onThreadId:t=>{t&&(C==="single"?T||A(t):(A(t),X().then(()=>z().then(B).catch(e=>f.logger.error("Failed to refresh threads:",e)))))}}),q=l.useCallback(async(t,e)=>{const a=e?.id||W(),s=typeof t=="string"?{id:a,type:e?.type??"human",content:t,...e?.name&&{name:e.name},...e?.tool_calls&&{tool_calls:e.tool_calls},...e?.invalid_tool_calls&&{invalid_tool_calls:e.invalid_tool_calls},...e?.tool_call_id&&{tool_call_id:e.tool_call_id},...(e?.additional_kwargs||e?.hidden)&&{additional_kwargs:{...e?.hidden&&{hidden:!0},...e?.additional_kwargs??{}}}}:{...t,id:a,...e?.tool_calls&&{tool_calls:e.tool_calls},...e?.additional_kwargs&&{additional_kwargs:{...t.additional_kwargs,...e.additional_kwargs}}};if(f.logger.debug("Sending message via sendMessage:",s),e?.type==="ai"){if(b(r=>[...r,s]),f.logger.debug("Appended AI message to localMessages:",e?.ui),e.ui&&e.ui.length>0){const r=e.ui.map((n,h)=>({...n,id:a,_key:n._key||`${a}-ui-${h}`}));w(n=>[...n,...r])}return}const d=o.messages||[],m=e?.context?{...c,...e.context,...v}:c||{};await o.submit({messages:[...d,s]},{context:m,streamMode:["values","messages-tuple","updates","custom"]})},[o,c,v,b,w]),_=l.useMemo(()=>{const t=[...U,...o.messages||[]],e=new Set;return t.filter(a=>a.id?e.has(a.id)?!1:(e.add(a.id),!0):!0)},[U,o.messages]),R=l.useMemo(()=>{f.logger.debug("Combining local UI with stream UI:",S,o.values?.ui);const t=[...S,...o.values?.ui||[]],e=new Set;return t.filter(a=>{const s=a._key||`${a.id}-${a.name}`;return e.has(s)?!1:(e.add(s),!0)})},[S,o.values?.ui]),$=l.useCallback(async(t,e)=>{const a=_||[];await o.submit({messages:[...a,t]},{context:{...c,...e?.contextValues},streamMode:e?.streamMode||["values","messages-tuple","updates","custom"],streamSubgraphs:e?.streamSubgraphs??!0,streamResumable:e?.streamResumable??!0,optimisticValues:s=>({...s,messages:[...a,t]})})},[o,c,_]),j=l.useCallback(async t=>{const e=_||[],a=e.findIndex(n=>n.id===t);if(a===-1){f.logger.error("Message not found for regeneration:",t);return}let s=a-1;for(;s>=0&&e[s].type!=="human";)s--;if(s===-1){f.logger.error("No human message found before AI message:",t);return}const d=e.slice(0,s+1),m=d.slice(0,-1),r=d[d.length-1];b(n=>n.filter(h=>e.findIndex(M=>M.id===h.id)<s)),w(n=>n.filter(h=>e.findIndex(M=>M.id===h.id)<s)),await o.submit({messages:[...m,r]},{streamMode:["values"],streamSubgraphs:!0,streamResumable:!0})},[_,o,c,v,b,w]);l.useEffect(()=>{J(u,c?.authToken).then(t=>{t||K.toast.error("Failed to connect to LangGraph server",{description:`Unable to reach ${u}`,duration:1e4})})},[u,c?.authToken]);const P=l.useCallback(async()=>{if(I&&k!==null)return k;if(!I){E(!0);const t=await Q(u,c?.authToken);return L(t),t}return k},[u,c?.authToken,I,k]),G=l.useMemo(()=>({...o,messages:_,values:{...o.values,ui:R},sendMessage:q,submitMessage:$,regenerateMessage:j,fetchCatalog:P}),[o,_,R,q,$,j,P]);return p.jsx(F.Provider,{value:G,children:g})};function Z({children:g}){return p.jsx(Y,{children:g})}function ee(){const g=l.useContext(F);if(!g)throw new Error("useStreamContext must be used within StreamProvider");return g}exports.StreamProvider=Z;exports.useStreamContext=ee;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const z=require("react/jsx-runtime"),N=require("./ChatRuntime.cjs.js"),h=require("../utils/logger.cjs.js");require("@langchain/langgraph-sdk");const W=require("@langchain/langgraph-sdk/react"),A=require("@langchain/langgraph-sdk/react-ui"),c=require("react"),D=require("sonner"),J=require("./Thread.cjs.js"),Q=require("../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.cjs.js"),X=W.useStream,B=c.createContext(void 0);async function Y(d,l){try{return(await fetch(`${d}/info`,{headers:l?{Authorization:`Bearer ${l}`}:void 0})).ok}catch{h.logger.error("Failed to initialize LangGraph Agent")}}async function Z(d,l){try{const M=await fetch(`${d}/agents/catalog`,{headers:l?{Authorization:`Bearer ${l}`}:void 0});return M.ok?await M.json():null}catch{return h.logger.error("Failed to fetch LangGraph Catalog"),null}}async function ee(d=6e3){return new Promise(l=>setTimeout(l,d))}const te=({children:d})=>{const{apiUrl:l,assistantId:M,identity:u}=N.useChatRuntime(),{mode:T,threadId:U,setThreadId:q,getThreads:E,setThreads:L,configuration:S}=J.useThread(),[R,b]=c.useState([]),[I,w]=c.useState([]),[x,G]=c.useState(!1),[k,H]=c.useState(null),i=X({apiUrl:l,assistantId:M,threadId:T==="multi"?U:null,defaultHeaders:u?.authToken?{Authorization:`Bearer ${u?.authToken}`}:void 0,fetchStateHistory:!0,onUpdateEvent:(t,e)=>{const a=[],n=o=>{if(!o||typeof o!="object")return;const s=o;if(Array.isArray(s.messages))for(const r of s.messages){const f=r.additional_kwargs;if(r?.type==="ai"&&r.id&&f){const y=typeof f.reasoning_content=="string"&&f.reasoning_content.length>0,C=Array.isArray(f.tool_status)&&f.tool_status.length>0;(y||C)&&a.push(r)}}for(const r of Object.values(s))r&&typeof r=="object"&&!Array.isArray(r)&&n(r)};n(t);let g;const v=o=>{if(!o||typeof o!="object")return;const s=o;"todos"in s&&Array.isArray(s.todos)&&(s.todos.length>0||g===void 0)&&(g=s.todos);for(const r of Object.values(s))r&&typeof r=="object"&&!Array.isArray(r)&&v(r)};v(t),(a.length>0||g!==void 0)&&e.mutate(o=>{let s=o;if(a.length>0){const r=s.messages??[],f=new Map;for(const m of a)m.id&&f.set(m.id,m);let y=!1;const C=r.map(m=>{if(!m.id||!f.has(m.id))return m;const V=f.get(m.id);f.delete(m.id),y=!0;const K=V.additional_kwargs;return{...m,additional_kwargs:{...m.additional_kwargs??{},...K??{}}}});y&&(s={...s,messages:C})}return g!==void 0&&g.length>0&&(s={...s,todos:g}),s===o?o:s})},onCustomEvent:(t,e)=>{(A.isUIMessage(t)||A.isRemoveUIMessage(t))&&e.mutate(a=>{h.logger.debug("UI Event received in StreamProvider:",t);const n=A.uiMessageReducer(a.ui??[],t);return{...a,ui:n}})},onThreadId:t=>{t&&(T==="single"?U||q(t):(q(t),ee().then(()=>E().then(L).catch(e=>h.logger.error("Failed to refresh threads:",e)))))}}),$=c.useCallback(async(t,e)=>{const a=e?.id||Q(),n=typeof t=="string"?{id:a,type:e?.type??"human",content:t,...e?.name&&{name:e.name},...e?.tool_calls&&{tool_calls:e.tool_calls},...e?.invalid_tool_calls&&{invalid_tool_calls:e.invalid_tool_calls},...e?.tool_call_id&&{tool_call_id:e.tool_call_id},...(e?.additional_kwargs||e?.hidden)&&{additional_kwargs:{...e?.hidden&&{hidden:!0},...e?.additional_kwargs??{}}}}:{...t,id:a,...e?.tool_calls&&{tool_calls:e.tool_calls},...e?.additional_kwargs&&{additional_kwargs:{...t.additional_kwargs,...e.additional_kwargs}}};if(h.logger.debug("Sending message via sendMessage:",n),e?.type==="ai"){if(b(o=>[...o,n]),h.logger.debug("Appended AI message to localMessages:",e?.ui),e.ui&&e.ui.length>0){const o=e.ui.map((s,r)=>({...s,id:a,_key:s._key||`${a}-ui-${r}`}));w(s=>[...s,...o])}return}const g=i.messages||[],v=e?.context?{...u,...e.context,...S}:u||{};await i.submit({messages:[...g,n]},{context:v,streamMode:["values","messages-tuple","updates","custom"]})},[i,u,S,b,w]),_=c.useMemo(()=>{const t=[...R,...i.messages||[]],e=new Set;return t.filter(a=>a.id?e.has(a.id)?!1:(e.add(a.id),!0):!0)},[R,i.messages]),j=c.useMemo(()=>{h.logger.debug("Combining local UI with stream UI:",I,i.values?.ui);const t=[...I,...i.values?.ui||[]],e=new Set;return t.filter(a=>{const n=a._key||`${a.id}-${a.name}`;return e.has(n)?!1:(e.add(n),!0)})},[I,i.values?.ui]),p=c.useCallback(async(t,e)=>{const a=_||[];await i.submit({messages:[...a,t]},{context:{...u,...e?.contextValues},streamMode:e?.streamMode||["values","messages-tuple","updates","custom"],streamSubgraphs:e?.streamSubgraphs??!0,streamResumable:e?.streamResumable??!0,optimisticValues:n=>({...n,messages:[...a,t]})})},[i,u,_]),P=c.useCallback(async t=>{const e=_||[],a=e.findIndex(s=>s.id===t);if(a===-1){h.logger.error("Message not found for regeneration:",t);return}let n=a-1;for(;n>=0&&e[n].type!=="human";)n--;if(n===-1){h.logger.error("No human message found before AI message:",t);return}const g=e.slice(0,n+1),v=g.slice(0,-1),o=g[g.length-1];b(s=>s.filter(r=>e.findIndex(y=>y.id===r.id)<n)),w(s=>s.filter(r=>e.findIndex(y=>y.id===r.id)<n)),await i.submit({messages:[...v,o]},{streamMode:["values"],streamSubgraphs:!0,streamResumable:!0})},[_,i,u,S,b,w]);c.useEffect(()=>{Y(l,u?.authToken).then(t=>{t||D.toast.error("Failed to connect to LangGraph server",{description:`Unable to reach ${l}`,duration:1e4})})},[l,u?.authToken]);const F=c.useCallback(async()=>{if(x&&k!==null)return k;if(!x){G(!0);const t=await Z(l,u?.authToken);return H(t),t}return k},[l,u?.authToken,x,k]),O=c.useMemo(()=>({...i,messages:_,values:{...i.values,ui:j},sendMessage:$,submitMessage:p,regenerateMessage:P,fetchCatalog:F}),[i,_,j,$,p,P,F]);return z.jsx(B.Provider,{value:O,children:d})};function se({children:d}){return z.jsx(te,{children:d})}function ae(){const d=c.useContext(B);if(!d)throw new Error("useStreamContext must be used within StreamProvider");return d}exports.StreamProvider=se;exports.useStreamContext=ae;
2
2
  //# sourceMappingURL=Stream.cjs.js.map