@neo4j-ndl/react 4.1.8 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/lib/cjs/ai/code-preview/CodePreview.js +91 -0
  2. package/lib/cjs/ai/code-preview/CodePreview.js.map +1 -0
  3. package/lib/cjs/ai/code-preview/index.js +26 -0
  4. package/lib/cjs/ai/code-preview/index.js.map +1 -0
  5. package/lib/cjs/ai/code-preview/stories/code-preview-languages.story.js +37 -0
  6. package/lib/cjs/ai/code-preview/stories/code-preview-languages.story.js.map +1 -0
  7. package/lib/cjs/ai/code-preview/stories/code-preview-loading.story.js +31 -0
  8. package/lib/cjs/ai/code-preview/stories/code-preview-loading.story.js.map +1 -0
  9. package/lib/cjs/ai/code-preview/stories/code-preview-read.story.js +36 -0
  10. package/lib/cjs/ai/code-preview/stories/code-preview-read.story.js.map +1 -0
  11. package/lib/cjs/ai/code-preview/stories/code-preview-write.story.js +36 -0
  12. package/lib/cjs/ai/code-preview/stories/code-preview-write.story.js.map +1 -0
  13. package/lib/cjs/ai/code-preview/stories/code-preview.stories.js +88 -0
  14. package/lib/cjs/ai/code-preview/stories/code-preview.stories.js.map +1 -0
  15. package/lib/cjs/ai/code-preview/stories/index.js +44 -0
  16. package/lib/cjs/ai/code-preview/stories/index.js.map +1 -0
  17. package/lib/cjs/ai/file-tag/FileTag.js +58 -0
  18. package/lib/cjs/ai/file-tag/FileTag.js.map +1 -0
  19. package/lib/cjs/ai/file-tag/index.js +38 -0
  20. package/lib/cjs/ai/file-tag/index.js.map +1 -0
  21. package/lib/cjs/ai/file-tag/stories/file-tag-chat.story.js +31 -0
  22. package/lib/cjs/ai/file-tag/stories/file-tag-chat.story.js.map +1 -0
  23. package/lib/cjs/ai/file-tag/stories/file-tag-loading.story.js +33 -0
  24. package/lib/cjs/ai/file-tag/stories/file-tag-loading.story.js.map +1 -0
  25. package/lib/cjs/ai/file-tag/stories/file-tag-prompt.story.js +33 -0
  26. package/lib/cjs/ai/file-tag/stories/file-tag-prompt.story.js.map +1 -0
  27. package/lib/cjs/ai/file-tag/stories/file-tag.stories.js +76 -0
  28. package/lib/cjs/ai/file-tag/stories/file-tag.stories.js.map +1 -0
  29. package/lib/cjs/ai/file-tag/stories/index.js +40 -0
  30. package/lib/cjs/ai/file-tag/stories/index.js.map +1 -0
  31. package/lib/cjs/ai/image-tag/ImageTag.js +58 -0
  32. package/lib/cjs/ai/image-tag/ImageTag.js.map +1 -0
  33. package/lib/cjs/ai/image-tag/index.js +38 -0
  34. package/lib/cjs/ai/image-tag/index.js.map +1 -0
  35. package/lib/cjs/ai/image-tag/stories/image-tag-chat.story.js +30 -0
  36. package/lib/cjs/ai/image-tag/stories/image-tag-chat.story.js.map +1 -0
  37. package/lib/cjs/ai/image-tag/stories/image-tag-loading.story.js +32 -0
  38. package/lib/cjs/ai/image-tag/stories/image-tag-loading.story.js.map +1 -0
  39. package/lib/cjs/ai/image-tag/stories/image-tag-prompt.story.js +32 -0
  40. package/lib/cjs/ai/image-tag/stories/image-tag-prompt.story.js.map +1 -0
  41. package/lib/cjs/ai/image-tag/stories/image-tag.stories.js +76 -0
  42. package/lib/cjs/ai/image-tag/stories/image-tag.stories.js.map +1 -0
  43. package/lib/cjs/ai/image-tag/stories/index.js +40 -0
  44. package/lib/cjs/ai/image-tag/stories/index.js.map +1 -0
  45. package/lib/cjs/ai/index.js +23 -1
  46. package/lib/cjs/ai/index.js.map +1 -1
  47. package/lib/cjs/ai/more-files/MoreFiles.js +55 -0
  48. package/lib/cjs/ai/more-files/MoreFiles.js.map +1 -0
  49. package/lib/cjs/ai/more-files/index.js +38 -0
  50. package/lib/cjs/ai/more-files/index.js.map +1 -0
  51. package/lib/cjs/ai/more-files/stories/index.js +32 -0
  52. package/lib/cjs/ai/more-files/stories/index.js.map +1 -0
  53. package/lib/cjs/ai/more-files/stories/more-files.stories.js +50 -0
  54. package/lib/cjs/ai/more-files/stories/more-files.stories.js.map +1 -0
  55. package/lib/cjs/ai/more-files/stories/more-files.story.js +35 -0
  56. package/lib/cjs/ai/more-files/stories/more-files.story.js.map +1 -0
  57. package/lib/cjs/ai/presence/Presence.js +5 -1
  58. package/lib/cjs/ai/presence/Presence.js.map +1 -1
  59. package/lib/cjs/ai/prompt/Prompt.js +163 -0
  60. package/lib/cjs/ai/prompt/Prompt.js.map +1 -0
  61. package/lib/cjs/ai/prompt/index.js +38 -0
  62. package/lib/cjs/ai/prompt/index.js.map +1 -0
  63. package/lib/cjs/ai/prompt/stories/index.js +36 -0
  64. package/lib/cjs/ai/prompt/stories/index.js.map +1 -0
  65. package/lib/cjs/ai/prompt/stories/prompt-advanced.story.js +56 -0
  66. package/lib/cjs/ai/prompt/stories/prompt-advanced.story.js.map +1 -0
  67. package/lib/cjs/ai/prompt/stories/prompt-default.story.js +40 -0
  68. package/lib/cjs/ai/prompt/stories/prompt-default.story.js.map +1 -0
  69. package/lib/cjs/ai/prompt/stories/prompt.stories.js +63 -0
  70. package/lib/cjs/ai/prompt/stories/prompt.stories.js.map +1 -0
  71. package/lib/cjs/ai/reasoning/Reasoning.js +77 -0
  72. package/lib/cjs/ai/reasoning/Reasoning.js.map +1 -0
  73. package/lib/cjs/ai/reasoning/index.js +38 -0
  74. package/lib/cjs/ai/reasoning/index.js.map +1 -0
  75. package/lib/cjs/ai/reasoning/stories/index.js +32 -0
  76. package/lib/cjs/ai/reasoning/stories/index.js.map +1 -0
  77. package/lib/cjs/ai/reasoning/stories/reasoning-full.story.js +34 -0
  78. package/lib/cjs/ai/reasoning/stories/reasoning-full.story.js.map +1 -0
  79. package/lib/cjs/ai/reasoning/stories/reasoning.stories.js +50 -0
  80. package/lib/cjs/ai/reasoning/stories/reasoning.stories.js.map +1 -0
  81. package/lib/cjs/ai/response/Response.js +185 -0
  82. package/lib/cjs/ai/response/Response.js.map +1 -0
  83. package/lib/cjs/ai/response/index.js +26 -0
  84. package/lib/cjs/ai/response/index.js.map +1 -0
  85. package/lib/cjs/ai/response/stories/index.js +56 -0
  86. package/lib/cjs/ai/response/stories/index.js.map +1 -0
  87. package/lib/cjs/ai/response/stories/response-all-components.story.js +229 -0
  88. package/lib/cjs/ai/response/stories/response-all-components.story.js.map +1 -0
  89. package/lib/cjs/ai/response/stories/response-code-examples.story.js +248 -0
  90. package/lib/cjs/ai/response/stories/response-code-examples.story.js.map +1 -0
  91. package/lib/cjs/ai/response/stories/response-default.story.js +50 -0
  92. package/lib/cjs/ai/response/stories/response-default.story.js.map +1 -0
  93. package/lib/cjs/ai/response/stories/response-full-example.story.js +162 -0
  94. package/lib/cjs/ai/response/stories/response-full-example.story.js.map +1 -0
  95. package/lib/cjs/ai/response/stories/response-headings.story.js +120 -0
  96. package/lib/cjs/ai/response/stories/response-headings.story.js.map +1 -0
  97. package/lib/cjs/ai/response/stories/response-lists.story.js +170 -0
  98. package/lib/cjs/ai/response/stories/response-lists.story.js.map +1 -0
  99. package/lib/cjs/ai/response/stories/response-streaming.story.js +65 -0
  100. package/lib/cjs/ai/response/stories/response-streaming.story.js.map +1 -0
  101. package/lib/cjs/ai/response/stories/response.stories.js +132 -0
  102. package/lib/cjs/ai/response/stories/response.stories.js.map +1 -0
  103. package/lib/cjs/ai/suggestion/Suggestion.js +58 -0
  104. package/lib/cjs/ai/suggestion/Suggestion.js.map +1 -0
  105. package/lib/cjs/ai/suggestion/index.js +38 -0
  106. package/lib/cjs/ai/suggestion/index.js.map +1 -0
  107. package/lib/cjs/ai/suggestion/stories/index.js +44 -0
  108. package/lib/cjs/ai/suggestion/stories/index.js.map +1 -0
  109. package/lib/cjs/ai/suggestion/stories/suggestion-default.story.js +30 -0
  110. package/lib/cjs/ai/suggestion/stories/suggestion-default.story.js.map +1 -0
  111. package/lib/cjs/ai/suggestion/stories/suggestion-icon.story.js +31 -0
  112. package/lib/cjs/ai/suggestion/stories/suggestion-icon.story.js.map +1 -0
  113. package/lib/cjs/ai/suggestion/stories/suggestion-primary.story.js +30 -0
  114. package/lib/cjs/ai/suggestion/stories/suggestion-primary.story.js.map +1 -0
  115. package/lib/cjs/ai/suggestion/stories/suggestion-sizes.story.js +30 -0
  116. package/lib/cjs/ai/suggestion/stories/suggestion-sizes.story.js.map +1 -0
  117. package/lib/cjs/ai/suggestion/stories/suggestion.stories.js +89 -0
  118. package/lib/cjs/ai/suggestion/stories/suggestion.stories.js.map +1 -0
  119. package/lib/cjs/ai/thinking/Thinking.js +57 -0
  120. package/lib/cjs/ai/thinking/Thinking.js.map +1 -0
  121. package/lib/cjs/ai/thinking/index.js +38 -0
  122. package/lib/cjs/ai/thinking/index.js.map +1 -0
  123. package/lib/cjs/ai/thinking/stories/ai-thinking-default.story.js +30 -0
  124. package/lib/cjs/ai/thinking/stories/ai-thinking-default.story.js.map +1 -0
  125. package/lib/cjs/ai/thinking/stories/ai-thinking-finished.story.js +30 -0
  126. package/lib/cjs/ai/thinking/stories/ai-thinking-finished.story.js.map +1 -0
  127. package/lib/cjs/ai/thinking/stories/ai-thinking.stories.js +63 -0
  128. package/lib/cjs/ai/thinking/stories/ai-thinking.stories.js.map +1 -0
  129. package/lib/cjs/ai/thinking/stories/index.js +36 -0
  130. package/lib/cjs/ai/thinking/stories/index.js.map +1 -0
  131. package/lib/cjs/ai/thinking/thinking-duration-formatter.js +71 -0
  132. package/lib/cjs/ai/thinking/thinking-duration-formatter.js.map +1 -0
  133. package/lib/cjs/ai/tool-call/ToolCall.js +55 -0
  134. package/lib/cjs/ai/tool-call/ToolCall.js.map +1 -0
  135. package/lib/cjs/ai/tool-call/index.js +38 -0
  136. package/lib/cjs/ai/tool-call/index.js.map +1 -0
  137. package/lib/cjs/ai/tool-call/stories/index.js +36 -0
  138. package/lib/cjs/ai/tool-call/stories/index.js.map +1 -0
  139. package/lib/cjs/ai/tool-call/stories/tool-call-default.story.js +30 -0
  140. package/lib/cjs/ai/tool-call/stories/tool-call-default.story.js.map +1 -0
  141. package/lib/cjs/ai/tool-call/stories/tool-call-done.story.js +30 -0
  142. package/lib/cjs/ai/tool-call/stories/tool-call-done.story.js.map +1 -0
  143. package/lib/cjs/ai/tool-call/stories/tool-call.stories.js +63 -0
  144. package/lib/cjs/ai/tool-call/stories/tool-call.stories.js.map +1 -0
  145. package/lib/cjs/ai/user-bubble/UserBubble.js +53 -0
  146. package/lib/cjs/ai/user-bubble/UserBubble.js.map +1 -0
  147. package/lib/cjs/ai/user-bubble/index.js +38 -0
  148. package/lib/cjs/ai/user-bubble/index.js.map +1 -0
  149. package/lib/cjs/ai/user-bubble/stories/index.js +44 -0
  150. package/lib/cjs/ai/user-bubble/stories/index.js.map +1 -0
  151. package/lib/cjs/ai/user-bubble/stories/user-bubble-action.story.js +35 -0
  152. package/lib/cjs/ai/user-bubble/stories/user-bubble-action.story.js.map +1 -0
  153. package/lib/cjs/ai/user-bubble/stories/user-bubble-and-files.story.js +39 -0
  154. package/lib/cjs/ai/user-bubble/stories/user-bubble-and-files.story.js.map +1 -0
  155. package/lib/cjs/ai/user-bubble/stories/user-bubble-long.story.js +33 -0
  156. package/lib/cjs/ai/user-bubble/stories/user-bubble-long.story.js.map +1 -0
  157. package/lib/cjs/ai/user-bubble/stories/user-bubble.stories.js +89 -0
  158. package/lib/cjs/ai/user-bubble/stories/user-bubble.stories.js.map +1 -0
  159. package/lib/cjs/ai/user-bubble/stories/user-bubble.story.js +34 -0
  160. package/lib/cjs/ai/user-bubble/stories/user-bubble.story.js.map +1 -0
  161. package/lib/cjs/code/Code.js.map +1 -1
  162. package/lib/cjs/text-area/TextArea.js.map +1 -1
  163. package/lib/cjs/timezone-picker/stories/timezone-picker-dst-aware.story.js +1 -1
  164. package/lib/cjs/timezone-picker/stories/timezone-picker-dst-aware.story.js.map +1 -1
  165. package/lib/cjs/tooltip/use-tooltip.js +1 -0
  166. package/lib/cjs/tooltip/use-tooltip.js.map +1 -1
  167. package/lib/esm/ai/code-preview/CodePreview.js +84 -0
  168. package/lib/esm/ai/code-preview/CodePreview.js.map +1 -0
  169. package/lib/esm/ai/code-preview/index.js +22 -0
  170. package/lib/esm/ai/code-preview/index.js.map +1 -0
  171. package/lib/esm/ai/code-preview/stories/code-preview-languages.story.js +33 -0
  172. package/lib/esm/ai/code-preview/stories/code-preview-languages.story.js.map +1 -0
  173. package/lib/esm/ai/code-preview/stories/code-preview-loading.story.js +27 -0
  174. package/lib/esm/ai/code-preview/stories/code-preview-loading.story.js.map +1 -0
  175. package/lib/esm/ai/code-preview/stories/code-preview-read.story.js +32 -0
  176. package/lib/esm/ai/code-preview/stories/code-preview-read.story.js.map +1 -0
  177. package/lib/esm/ai/code-preview/stories/code-preview-write.story.js +32 -0
  178. package/lib/esm/ai/code-preview/stories/code-preview-write.story.js.map +1 -0
  179. package/lib/esm/ai/code-preview/stories/code-preview.stories.js +85 -0
  180. package/lib/esm/ai/code-preview/stories/code-preview.stories.js.map +1 -0
  181. package/lib/esm/ai/code-preview/stories/index.js +34 -0
  182. package/lib/esm/ai/code-preview/stories/index.js.map +1 -0
  183. package/lib/esm/ai/file-tag/FileTag.js +52 -0
  184. package/lib/esm/ai/file-tag/FileTag.js.map +1 -0
  185. package/lib/esm/ai/file-tag/index.js +22 -0
  186. package/lib/esm/ai/file-tag/index.js.map +1 -0
  187. package/lib/esm/ai/file-tag/stories/file-tag-chat.story.js +29 -0
  188. package/lib/esm/ai/file-tag/stories/file-tag-chat.story.js.map +1 -0
  189. package/lib/esm/ai/file-tag/stories/file-tag-loading.story.js +31 -0
  190. package/lib/esm/ai/file-tag/stories/file-tag-loading.story.js.map +1 -0
  191. package/lib/esm/ai/file-tag/stories/file-tag-prompt.story.js +31 -0
  192. package/lib/esm/ai/file-tag/stories/file-tag-prompt.story.js.map +1 -0
  193. package/lib/esm/ai/file-tag/stories/file-tag.stories.js +73 -0
  194. package/lib/esm/ai/file-tag/stories/file-tag.stories.js.map +1 -0
  195. package/lib/esm/ai/file-tag/stories/index.js +31 -0
  196. package/lib/esm/ai/file-tag/stories/index.js.map +1 -0
  197. package/lib/esm/ai/image-tag/ImageTag.js +52 -0
  198. package/lib/esm/ai/image-tag/ImageTag.js.map +1 -0
  199. package/lib/esm/ai/image-tag/index.js +22 -0
  200. package/lib/esm/ai/image-tag/index.js.map +1 -0
  201. package/lib/esm/ai/image-tag/stories/image-tag-chat.story.js +28 -0
  202. package/lib/esm/ai/image-tag/stories/image-tag-chat.story.js.map +1 -0
  203. package/lib/esm/ai/image-tag/stories/image-tag-loading.story.js +30 -0
  204. package/lib/esm/ai/image-tag/stories/image-tag-loading.story.js.map +1 -0
  205. package/lib/esm/ai/image-tag/stories/image-tag-prompt.story.js +30 -0
  206. package/lib/esm/ai/image-tag/stories/image-tag-prompt.story.js.map +1 -0
  207. package/lib/esm/ai/image-tag/stories/image-tag.stories.js +73 -0
  208. package/lib/esm/ai/image-tag/stories/image-tag.stories.js.map +1 -0
  209. package/lib/esm/ai/image-tag/stories/index.js +31 -0
  210. package/lib/esm/ai/image-tag/stories/index.js.map +1 -0
  211. package/lib/esm/ai/index.js +11 -0
  212. package/lib/esm/ai/index.js.map +1 -1
  213. package/lib/esm/ai/more-files/MoreFiles.js +49 -0
  214. package/lib/esm/ai/more-files/MoreFiles.js.map +1 -0
  215. package/lib/esm/ai/more-files/index.js +22 -0
  216. package/lib/esm/ai/more-files/index.js.map +1 -0
  217. package/lib/esm/ai/more-files/stories/index.js +25 -0
  218. package/lib/esm/ai/more-files/stories/index.js.map +1 -0
  219. package/lib/esm/ai/more-files/stories/more-files.stories.js +47 -0
  220. package/lib/esm/ai/more-files/stories/more-files.stories.js.map +1 -0
  221. package/lib/esm/ai/more-files/stories/more-files.story.js +33 -0
  222. package/lib/esm/ai/more-files/stories/more-files.story.js.map +1 -0
  223. package/lib/esm/ai/presence/Presence.js +5 -1
  224. package/lib/esm/ai/presence/Presence.js.map +1 -1
  225. package/lib/esm/ai/prompt/Prompt.js +157 -0
  226. package/lib/esm/ai/prompt/Prompt.js.map +1 -0
  227. package/lib/esm/ai/prompt/index.js +22 -0
  228. package/lib/esm/ai/prompt/index.js.map +1 -0
  229. package/lib/esm/ai/prompt/stories/index.js +28 -0
  230. package/lib/esm/ai/prompt/stories/index.js.map +1 -0
  231. package/lib/esm/ai/prompt/stories/prompt-advanced.story.js +54 -0
  232. package/lib/esm/ai/prompt/stories/prompt-advanced.story.js.map +1 -0
  233. package/lib/esm/ai/prompt/stories/prompt-default.story.js +38 -0
  234. package/lib/esm/ai/prompt/stories/prompt-default.story.js.map +1 -0
  235. package/lib/esm/ai/prompt/stories/prompt.stories.js +60 -0
  236. package/lib/esm/ai/prompt/stories/prompt.stories.js.map +1 -0
  237. package/lib/esm/ai/reasoning/Reasoning.js +71 -0
  238. package/lib/esm/ai/reasoning/Reasoning.js.map +1 -0
  239. package/lib/esm/ai/reasoning/index.js +22 -0
  240. package/lib/esm/ai/reasoning/index.js.map +1 -0
  241. package/lib/esm/ai/reasoning/stories/index.js +25 -0
  242. package/lib/esm/ai/reasoning/stories/index.js.map +1 -0
  243. package/lib/esm/ai/reasoning/stories/reasoning-full.story.js +32 -0
  244. package/lib/esm/ai/reasoning/stories/reasoning-full.story.js.map +1 -0
  245. package/lib/esm/ai/reasoning/stories/reasoning.stories.js +47 -0
  246. package/lib/esm/ai/reasoning/stories/reasoning.stories.js.map +1 -0
  247. package/lib/esm/ai/response/Response.js +179 -0
  248. package/lib/esm/ai/response/Response.js.map +1 -0
  249. package/lib/esm/ai/response/index.js +22 -0
  250. package/lib/esm/ai/response/index.js.map +1 -0
  251. package/lib/esm/ai/response/stories/index.js +43 -0
  252. package/lib/esm/ai/response/stories/index.js.map +1 -0
  253. package/lib/esm/ai/response/stories/response-all-components.story.js +225 -0
  254. package/lib/esm/ai/response/stories/response-all-components.story.js.map +1 -0
  255. package/lib/esm/ai/response/stories/response-code-examples.story.js +244 -0
  256. package/lib/esm/ai/response/stories/response-code-examples.story.js.map +1 -0
  257. package/lib/esm/ai/response/stories/response-default.story.js +46 -0
  258. package/lib/esm/ai/response/stories/response-default.story.js.map +1 -0
  259. package/lib/esm/ai/response/stories/response-full-example.story.js +158 -0
  260. package/lib/esm/ai/response/stories/response-full-example.story.js.map +1 -0
  261. package/lib/esm/ai/response/stories/response-headings.story.js +116 -0
  262. package/lib/esm/ai/response/stories/response-headings.story.js.map +1 -0
  263. package/lib/esm/ai/response/stories/response-lists.story.js +166 -0
  264. package/lib/esm/ai/response/stories/response-lists.story.js.map +1 -0
  265. package/lib/esm/ai/response/stories/response-streaming.story.js +61 -0
  266. package/lib/esm/ai/response/stories/response-streaming.story.js.map +1 -0
  267. package/lib/esm/ai/response/stories/response.stories.js +129 -0
  268. package/lib/esm/ai/response/stories/response.stories.js.map +1 -0
  269. package/lib/esm/ai/suggestion/Suggestion.js +52 -0
  270. package/lib/esm/ai/suggestion/Suggestion.js.map +1 -0
  271. package/lib/esm/ai/suggestion/index.js +22 -0
  272. package/lib/esm/ai/suggestion/index.js.map +1 -0
  273. package/lib/esm/ai/suggestion/stories/index.js +34 -0
  274. package/lib/esm/ai/suggestion/stories/index.js.map +1 -0
  275. package/lib/esm/ai/suggestion/stories/suggestion-default.story.js +28 -0
  276. package/lib/esm/ai/suggestion/stories/suggestion-default.story.js.map +1 -0
  277. package/lib/esm/ai/suggestion/stories/suggestion-icon.story.js +29 -0
  278. package/lib/esm/ai/suggestion/stories/suggestion-icon.story.js.map +1 -0
  279. package/lib/esm/ai/suggestion/stories/suggestion-primary.story.js +28 -0
  280. package/lib/esm/ai/suggestion/stories/suggestion-primary.story.js.map +1 -0
  281. package/lib/esm/ai/suggestion/stories/suggestion-sizes.story.js +28 -0
  282. package/lib/esm/ai/suggestion/stories/suggestion-sizes.story.js.map +1 -0
  283. package/lib/esm/ai/suggestion/stories/suggestion.stories.js +86 -0
  284. package/lib/esm/ai/suggestion/stories/suggestion.stories.js.map +1 -0
  285. package/lib/esm/ai/thinking/Thinking.js +51 -0
  286. package/lib/esm/ai/thinking/Thinking.js.map +1 -0
  287. package/lib/esm/ai/thinking/index.js +22 -0
  288. package/lib/esm/ai/thinking/index.js.map +1 -0
  289. package/lib/esm/ai/thinking/stories/ai-thinking-default.story.js +28 -0
  290. package/lib/esm/ai/thinking/stories/ai-thinking-default.story.js.map +1 -0
  291. package/lib/esm/ai/thinking/stories/ai-thinking-finished.story.js +28 -0
  292. package/lib/esm/ai/thinking/stories/ai-thinking-finished.story.js.map +1 -0
  293. package/lib/esm/ai/thinking/stories/ai-thinking.stories.js +60 -0
  294. package/lib/esm/ai/thinking/stories/ai-thinking.stories.js.map +1 -0
  295. package/lib/esm/ai/thinking/stories/index.js +28 -0
  296. package/lib/esm/ai/thinking/stories/index.js.map +1 -0
  297. package/lib/esm/ai/thinking/thinking-duration-formatter.js +67 -0
  298. package/lib/esm/ai/thinking/thinking-duration-formatter.js.map +1 -0
  299. package/lib/esm/ai/tool-call/ToolCall.js +49 -0
  300. package/lib/esm/ai/tool-call/ToolCall.js.map +1 -0
  301. package/lib/esm/ai/tool-call/index.js +22 -0
  302. package/lib/esm/ai/tool-call/index.js.map +1 -0
  303. package/lib/esm/ai/tool-call/stories/index.js +28 -0
  304. package/lib/esm/ai/tool-call/stories/index.js.map +1 -0
  305. package/lib/esm/ai/tool-call/stories/tool-call-default.story.js +28 -0
  306. package/lib/esm/ai/tool-call/stories/tool-call-default.story.js.map +1 -0
  307. package/lib/esm/ai/tool-call/stories/tool-call-done.story.js +28 -0
  308. package/lib/esm/ai/tool-call/stories/tool-call-done.story.js.map +1 -0
  309. package/lib/esm/ai/tool-call/stories/tool-call.stories.js +60 -0
  310. package/lib/esm/ai/tool-call/stories/tool-call.stories.js.map +1 -0
  311. package/lib/esm/ai/user-bubble/UserBubble.js +47 -0
  312. package/lib/esm/ai/user-bubble/UserBubble.js.map +1 -0
  313. package/lib/esm/ai/user-bubble/index.js +22 -0
  314. package/lib/esm/ai/user-bubble/index.js.map +1 -0
  315. package/lib/esm/ai/user-bubble/stories/index.js +34 -0
  316. package/lib/esm/ai/user-bubble/stories/index.js.map +1 -0
  317. package/lib/esm/ai/user-bubble/stories/user-bubble-action.story.js +33 -0
  318. package/lib/esm/ai/user-bubble/stories/user-bubble-action.story.js.map +1 -0
  319. package/lib/esm/ai/user-bubble/stories/user-bubble-and-files.story.js +37 -0
  320. package/lib/esm/ai/user-bubble/stories/user-bubble-and-files.story.js.map +1 -0
  321. package/lib/esm/ai/user-bubble/stories/user-bubble-long.story.js +31 -0
  322. package/lib/esm/ai/user-bubble/stories/user-bubble-long.story.js.map +1 -0
  323. package/lib/esm/ai/user-bubble/stories/user-bubble.stories.js +86 -0
  324. package/lib/esm/ai/user-bubble/stories/user-bubble.stories.js.map +1 -0
  325. package/lib/esm/ai/user-bubble/stories/user-bubble.story.js +32 -0
  326. package/lib/esm/ai/user-bubble/stories/user-bubble.story.js.map +1 -0
  327. package/lib/esm/code/Code.js.map +1 -1
  328. package/lib/esm/text-area/TextArea.js.map +1 -1
  329. package/lib/esm/timezone-picker/stories/timezone-picker-dst-aware.story.js +1 -1
  330. package/lib/esm/timezone-picker/stories/timezone-picker-dst-aware.story.js.map +1 -1
  331. package/lib/esm/tooltip/use-tooltip.js +2 -1
  332. package/lib/esm/tooltip/use-tooltip.js.map +1 -1
  333. package/lib/types/ai/code-preview/CodePreview.d.ts +44 -0
  334. package/lib/types/ai/code-preview/CodePreview.d.ts.map +1 -0
  335. package/lib/types/ai/code-preview/index.d.ts +22 -0
  336. package/lib/types/ai/code-preview/index.d.ts.map +1 -0
  337. package/lib/types/ai/code-preview/stories/code-preview-languages.story.d.ts +23 -0
  338. package/lib/types/ai/code-preview/stories/code-preview-languages.story.d.ts.map +1 -0
  339. package/lib/types/ai/code-preview/stories/code-preview-loading.story.d.ts +23 -0
  340. package/lib/types/ai/code-preview/stories/code-preview-loading.story.d.ts.map +1 -0
  341. package/lib/types/ai/code-preview/stories/code-preview-read.story.d.ts +23 -0
  342. package/lib/types/ai/code-preview/stories/code-preview-read.story.d.ts.map +1 -0
  343. package/lib/types/ai/code-preview/stories/code-preview-write.story.d.ts +23 -0
  344. package/lib/types/ai/code-preview/stories/code-preview-write.story.d.ts.map +1 -0
  345. package/lib/types/ai/code-preview/stories/code-preview.stories.d.ts +30 -0
  346. package/lib/types/ai/code-preview/stories/code-preview.stories.d.ts.map +1 -0
  347. package/lib/types/ai/code-preview/stories/index.d.ts +29 -0
  348. package/lib/types/ai/code-preview/stories/index.d.ts.map +1 -0
  349. package/lib/types/ai/file-tag/FileTag.d.ts +44 -0
  350. package/lib/types/ai/file-tag/FileTag.d.ts.map +1 -0
  351. package/lib/types/ai/file-tag/index.d.ts +22 -0
  352. package/lib/types/ai/file-tag/index.d.ts.map +1 -0
  353. package/lib/types/ai/file-tag/stories/file-tag-chat.story.d.ts +24 -0
  354. package/lib/types/ai/file-tag/stories/file-tag-chat.story.d.ts.map +1 -0
  355. package/lib/types/ai/file-tag/stories/file-tag-loading.story.d.ts +24 -0
  356. package/lib/types/ai/file-tag/stories/file-tag-loading.story.d.ts.map +1 -0
  357. package/lib/types/ai/file-tag/stories/file-tag-prompt.story.d.ts +24 -0
  358. package/lib/types/ai/file-tag/stories/file-tag-prompt.story.d.ts.map +1 -0
  359. package/lib/types/ai/file-tag/stories/file-tag.stories.d.ts +29 -0
  360. package/lib/types/ai/file-tag/stories/file-tag.stories.d.ts.map +1 -0
  361. package/lib/types/ai/file-tag/stories/index.d.ts +27 -0
  362. package/lib/types/ai/file-tag/stories/index.d.ts.map +1 -0
  363. package/lib/types/ai/image-tag/ImageTag.d.ts +46 -0
  364. package/lib/types/ai/image-tag/ImageTag.d.ts.map +1 -0
  365. package/lib/types/ai/image-tag/index.d.ts +22 -0
  366. package/lib/types/ai/image-tag/index.d.ts.map +1 -0
  367. package/lib/types/ai/image-tag/stories/image-tag-chat.story.d.ts +24 -0
  368. package/lib/types/ai/image-tag/stories/image-tag-chat.story.d.ts.map +1 -0
  369. package/lib/types/ai/image-tag/stories/image-tag-loading.story.d.ts +24 -0
  370. package/lib/types/ai/image-tag/stories/image-tag-loading.story.d.ts.map +1 -0
  371. package/lib/types/ai/image-tag/stories/image-tag-prompt.story.d.ts +24 -0
  372. package/lib/types/ai/image-tag/stories/image-tag-prompt.story.d.ts.map +1 -0
  373. package/lib/types/ai/image-tag/stories/image-tag.stories.d.ts +29 -0
  374. package/lib/types/ai/image-tag/stories/image-tag.stories.d.ts.map +1 -0
  375. package/lib/types/ai/image-tag/stories/index.d.ts +27 -0
  376. package/lib/types/ai/image-tag/stories/index.d.ts.map +1 -0
  377. package/lib/types/ai/index.d.ts +11 -0
  378. package/lib/types/ai/index.d.ts.map +1 -1
  379. package/lib/types/ai/more-files/MoreFiles.d.ts +38 -0
  380. package/lib/types/ai/more-files/MoreFiles.d.ts.map +1 -0
  381. package/lib/types/ai/more-files/index.d.ts +22 -0
  382. package/lib/types/ai/more-files/index.d.ts.map +1 -0
  383. package/lib/types/ai/more-files/stories/index.d.ts +23 -0
  384. package/lib/types/ai/more-files/stories/index.d.ts.map +1 -0
  385. package/lib/types/ai/more-files/stories/more-files.stories.d.ts +27 -0
  386. package/lib/types/ai/more-files/stories/more-files.stories.d.ts.map +1 -0
  387. package/lib/types/ai/more-files/stories/more-files.story.d.ts +24 -0
  388. package/lib/types/ai/more-files/stories/more-files.story.d.ts.map +1 -0
  389. package/lib/types/ai/presence/Presence.d.ts.map +1 -1
  390. package/lib/types/ai/prompt/Prompt.d.ts +62 -0
  391. package/lib/types/ai/prompt/Prompt.d.ts.map +1 -0
  392. package/lib/types/ai/prompt/index.d.ts +22 -0
  393. package/lib/types/ai/prompt/index.d.ts.map +1 -0
  394. package/lib/types/ai/prompt/stories/index.d.ts +25 -0
  395. package/lib/types/ai/prompt/stories/index.d.ts.map +1 -0
  396. package/lib/types/ai/prompt/stories/prompt-advanced.story.d.ts +24 -0
  397. package/lib/types/ai/prompt/stories/prompt-advanced.story.d.ts.map +1 -0
  398. package/lib/types/ai/prompt/stories/prompt-default.story.d.ts +24 -0
  399. package/lib/types/ai/prompt/stories/prompt-default.story.d.ts.map +1 -0
  400. package/lib/types/ai/prompt/stories/prompt.stories.d.ts +28 -0
  401. package/lib/types/ai/prompt/stories/prompt.stories.d.ts.map +1 -0
  402. package/lib/types/ai/reasoning/Reasoning.d.ts +44 -0
  403. package/lib/types/ai/reasoning/Reasoning.d.ts.map +1 -0
  404. package/lib/types/ai/reasoning/index.d.ts +22 -0
  405. package/lib/types/ai/reasoning/index.d.ts.map +1 -0
  406. package/lib/types/ai/reasoning/stories/index.d.ts +23 -0
  407. package/lib/types/ai/reasoning/stories/index.d.ts.map +1 -0
  408. package/lib/types/ai/reasoning/stories/reasoning-full.story.d.ts +24 -0
  409. package/lib/types/ai/reasoning/stories/reasoning-full.story.d.ts.map +1 -0
  410. package/lib/types/ai/reasoning/stories/reasoning.stories.d.ts +27 -0
  411. package/lib/types/ai/reasoning/stories/reasoning.stories.d.ts.map +1 -0
  412. package/lib/types/ai/response/Response.d.ts +37 -0
  413. package/lib/types/ai/response/Response.d.ts.map +1 -0
  414. package/lib/types/ai/response/index.d.ts +22 -0
  415. package/lib/types/ai/response/index.d.ts.map +1 -0
  416. package/lib/types/ai/response/stories/index.d.ts +35 -0
  417. package/lib/types/ai/response/stories/index.d.ts.map +1 -0
  418. package/lib/types/ai/response/stories/response-all-components.story.d.ts +24 -0
  419. package/lib/types/ai/response/stories/response-all-components.story.d.ts.map +1 -0
  420. package/lib/types/ai/response/stories/response-code-examples.story.d.ts +24 -0
  421. package/lib/types/ai/response/stories/response-code-examples.story.d.ts.map +1 -0
  422. package/lib/types/ai/response/stories/response-default.story.d.ts +23 -0
  423. package/lib/types/ai/response/stories/response-default.story.d.ts.map +1 -0
  424. package/lib/types/ai/response/stories/response-full-example.story.d.ts +24 -0
  425. package/lib/types/ai/response/stories/response-full-example.story.d.ts.map +1 -0
  426. package/lib/types/ai/response/stories/response-headings.story.d.ts +24 -0
  427. package/lib/types/ai/response/stories/response-headings.story.d.ts.map +1 -0
  428. package/lib/types/ai/response/stories/response-lists.story.d.ts +24 -0
  429. package/lib/types/ai/response/stories/response-lists.story.d.ts.map +1 -0
  430. package/lib/types/ai/response/stories/response-streaming.story.d.ts +23 -0
  431. package/lib/types/ai/response/stories/response-streaming.story.d.ts.map +1 -0
  432. package/lib/types/ai/response/stories/response.stories.d.ts +33 -0
  433. package/lib/types/ai/response/stories/response.stories.d.ts.map +1 -0
  434. package/lib/types/ai/suggestion/Suggestion.d.ts +42 -0
  435. package/lib/types/ai/suggestion/Suggestion.d.ts.map +1 -0
  436. package/lib/types/ai/suggestion/index.d.ts +22 -0
  437. package/lib/types/ai/suggestion/index.d.ts.map +1 -0
  438. package/lib/types/ai/suggestion/stories/index.d.ts +29 -0
  439. package/lib/types/ai/suggestion/stories/index.d.ts.map +1 -0
  440. package/lib/types/ai/suggestion/stories/suggestion-default.story.d.ts +24 -0
  441. package/lib/types/ai/suggestion/stories/suggestion-default.story.d.ts.map +1 -0
  442. package/lib/types/ai/suggestion/stories/suggestion-icon.story.d.ts +24 -0
  443. package/lib/types/ai/suggestion/stories/suggestion-icon.story.d.ts.map +1 -0
  444. package/lib/types/ai/suggestion/stories/suggestion-primary.story.d.ts +24 -0
  445. package/lib/types/ai/suggestion/stories/suggestion-primary.story.d.ts.map +1 -0
  446. package/lib/types/ai/suggestion/stories/suggestion-sizes.story.d.ts +24 -0
  447. package/lib/types/ai/suggestion/stories/suggestion-sizes.story.d.ts.map +1 -0
  448. package/lib/types/ai/suggestion/stories/suggestion.stories.d.ts +30 -0
  449. package/lib/types/ai/suggestion/stories/suggestion.stories.d.ts.map +1 -0
  450. package/lib/types/ai/thinking/Thinking.d.ts +40 -0
  451. package/lib/types/ai/thinking/Thinking.d.ts.map +1 -0
  452. package/lib/types/ai/thinking/index.d.ts +22 -0
  453. package/lib/types/ai/thinking/index.d.ts.map +1 -0
  454. package/lib/types/ai/thinking/stories/ai-thinking-default.story.d.ts +24 -0
  455. package/lib/types/ai/thinking/stories/ai-thinking-default.story.d.ts.map +1 -0
  456. package/lib/types/ai/thinking/stories/ai-thinking-finished.story.d.ts +24 -0
  457. package/lib/types/ai/thinking/stories/ai-thinking-finished.story.d.ts.map +1 -0
  458. package/lib/types/ai/thinking/stories/ai-thinking.stories.d.ts +28 -0
  459. package/lib/types/ai/thinking/stories/ai-thinking.stories.d.ts.map +1 -0
  460. package/lib/types/ai/thinking/stories/index.d.ts +25 -0
  461. package/lib/types/ai/thinking/stories/index.d.ts.map +1 -0
  462. package/lib/types/ai/thinking/thinking-duration-formatter.d.ts +45 -0
  463. package/lib/types/ai/thinking/thinking-duration-formatter.d.ts.map +1 -0
  464. package/lib/types/ai/tool-call/ToolCall.d.ts +37 -0
  465. package/lib/types/ai/tool-call/ToolCall.d.ts.map +1 -0
  466. package/lib/types/ai/tool-call/index.d.ts +22 -0
  467. package/lib/types/ai/tool-call/index.d.ts.map +1 -0
  468. package/lib/types/ai/tool-call/stories/index.d.ts +25 -0
  469. package/lib/types/ai/tool-call/stories/index.d.ts.map +1 -0
  470. package/lib/types/ai/tool-call/stories/tool-call-default.story.d.ts +24 -0
  471. package/lib/types/ai/tool-call/stories/tool-call-default.story.d.ts.map +1 -0
  472. package/lib/types/ai/tool-call/stories/tool-call-done.story.d.ts +24 -0
  473. package/lib/types/ai/tool-call/stories/tool-call-done.story.d.ts.map +1 -0
  474. package/lib/types/ai/tool-call/stories/tool-call.stories.d.ts +28 -0
  475. package/lib/types/ai/tool-call/stories/tool-call.stories.d.ts.map +1 -0
  476. package/lib/types/ai/user-bubble/UserBubble.d.ts +39 -0
  477. package/lib/types/ai/user-bubble/UserBubble.d.ts.map +1 -0
  478. package/lib/types/ai/user-bubble/index.d.ts +22 -0
  479. package/lib/types/ai/user-bubble/index.d.ts.map +1 -0
  480. package/lib/types/ai/user-bubble/stories/index.d.ts +29 -0
  481. package/lib/types/ai/user-bubble/stories/index.d.ts.map +1 -0
  482. package/lib/types/ai/user-bubble/stories/user-bubble-action.story.d.ts +24 -0
  483. package/lib/types/ai/user-bubble/stories/user-bubble-action.story.d.ts.map +1 -0
  484. package/lib/types/ai/user-bubble/stories/user-bubble-and-files.story.d.ts +24 -0
  485. package/lib/types/ai/user-bubble/stories/user-bubble-and-files.story.d.ts.map +1 -0
  486. package/lib/types/ai/user-bubble/stories/user-bubble-long.story.d.ts +24 -0
  487. package/lib/types/ai/user-bubble/stories/user-bubble-long.story.d.ts.map +1 -0
  488. package/lib/types/ai/user-bubble/stories/user-bubble.stories.d.ts +30 -0
  489. package/lib/types/ai/user-bubble/stories/user-bubble.stories.d.ts.map +1 -0
  490. package/lib/types/ai/user-bubble/stories/user-bubble.story.d.ts +24 -0
  491. package/lib/types/ai/user-bubble/stories/user-bubble.story.d.ts.map +1 -0
  492. package/lib/types/code/Code.d.ts +4 -1
  493. package/lib/types/code/Code.d.ts.map +1 -1
  494. package/lib/types/text-area/TextArea.d.ts.map +1 -1
  495. package/lib/types/timezone-picker/stories/timezone-picker-dst-aware.story.d.ts.map +1 -1
  496. package/lib/types/tooltip/use-tooltip.d.ts.map +1 -1
  497. package/package.json +3 -2
@@ -0,0 +1,244 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ *
4
+ * Copyright (c) "Neo4j"
5
+ * Neo4j Sweden AB [http://neo4j.com]
6
+ *
7
+ * This file is part of Neo4j.
8
+ *
9
+ * Neo4j is free software: you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation, either version 3 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+ */
22
+ import { Response } from '@neo4j-ndl/react/ai';
23
+ const codeExamplesMarkdown = `
24
+ # Code Examples
25
+
26
+ This story focuses on different code rendering capabilities.
27
+
28
+ ## Multiple Programming Languages
29
+
30
+ ### JavaScript
31
+
32
+ \`\`\`javascript
33
+ // Array methods
34
+ const numbers = [1, 2, 3, 4, 5];
35
+ const doubled = numbers.map(n => n * 2);
36
+ const sum = numbers.reduce((acc, n) => acc + n, 0);
37
+
38
+ console.log('Doubled:', doubled);
39
+ console.log('Sum:', sum);
40
+ \`\`\`
41
+
42
+ ### TypeScript
43
+
44
+ \`\`\`typescript
45
+ // Generics
46
+ function identity<T>(arg: T): T {
47
+ return arg;
48
+ }
49
+
50
+ const result = identity<string>("Hello");
51
+ const num = identity(42);
52
+ \`\`\`
53
+
54
+ ### Python
55
+
56
+ \`\`\`python
57
+ # List comprehension
58
+ squares = [x**2 for x in range(10)]
59
+ evens = [x for x in range(20) if x % 2 == 0]
60
+
61
+ # Dictionary comprehension
62
+ square_dict = {x: x**2 for x in range(5)}
63
+
64
+ print(f"Squares: {squares}")
65
+ print(f"Evens: {evens}")
66
+ \`\`\`
67
+
68
+ ### Cypher
69
+
70
+ \`\`\`cypher
71
+ // Create nodes and relationships
72
+ CREATE (alice:Person {name: 'Alice', age: 30})
73
+ CREATE (bob:Person {name: 'Bob', age: 25})
74
+ CREATE (alice)-[:KNOWS {since: 2020}]->(bob)
75
+ RETURN alice, bob
76
+ \`\`\`
77
+
78
+ ### SQL
79
+
80
+ \`\`\`sql
81
+ -- Complex query
82
+ SELECT
83
+ u.name,
84
+ COUNT(o.id) as order_count,
85
+ SUM(o.total) as total_spent
86
+ FROM users u
87
+ LEFT JOIN orders o ON u.id = o.user_id
88
+ WHERE u.active = true
89
+ GROUP BY u.id, u.name
90
+ HAVING COUNT(o.id) > 5
91
+ ORDER BY total_spent DESC
92
+ LIMIT 10;
93
+ \`\`\`
94
+
95
+ ### Rust
96
+
97
+ \`\`\`rust
98
+ // Pattern matching
99
+ fn describe_number(n: i32) -> String {
100
+ match n {
101
+ 0 => "zero".to_string(),
102
+ 1..=10 => "small".to_string(),
103
+ 11..=100 => "medium".to_string(),
104
+ _ => "large".to_string(),
105
+ }
106
+ }
107
+ \`\`\`
108
+
109
+ ### Go
110
+
111
+ \`\`\`go
112
+ // Goroutines and channels
113
+ func worker(id int, jobs <-chan int, results chan<- int) {
114
+ for j := range jobs {
115
+ fmt.Printf("worker %d processing job %d\\n", id, j)
116
+ results <- j * 2
117
+ }
118
+ }
119
+ \`\`\`
120
+
121
+ ### JSON
122
+
123
+ \`\`\`json
124
+ {
125
+ "name": "Response Component",
126
+ "version": "1.0.0",
127
+ "features": [
128
+ "markdown rendering",
129
+ "syntax highlighting",
130
+ "streaming support"
131
+ ],
132
+ "config": {
133
+ "theme": "dark",
134
+ "lineNumbers": true
135
+ }
136
+ }
137
+ \`\`\`
138
+
139
+ ### YAML
140
+
141
+ \`\`\`yaml
142
+ # Configuration file
143
+ app:
144
+ name: MyApp
145
+ version: 1.0.0
146
+ port: 3000
147
+
148
+ database:
149
+ host: localhost
150
+ port: 5432
151
+ credentials:
152
+ username: admin
153
+ password: secret
154
+
155
+ features:
156
+ - authentication
157
+ - logging
158
+ - caching
159
+ \`\`\`
160
+
161
+ ### Shell/Bash
162
+
163
+ \`\`\`bash
164
+ #!/bin/bash
165
+
166
+ # Deploy script
167
+ echo "Starting deployment..."
168
+
169
+ npm install
170
+ npm run build
171
+ npm test
172
+
173
+ if [ $? -eq 0 ]; then
174
+ echo "Deployment successful!"
175
+ else
176
+ echo "Deployment failed!"
177
+ exit 1
178
+ fi
179
+ \`\`\`
180
+
181
+ ## Inline Code
182
+
183
+ You can use inline code like \`const x = 5\`, \`npm install\`, or \`SELECT * FROM users\` within sentences.
184
+
185
+ Mixed with text: The \`Array.map()\` method creates a new array and the \`filter()\` method filters elements.
186
+
187
+ ## Code Without Language
188
+
189
+ \`\`\`
190
+ Plain text code block
191
+ No syntax highlighting
192
+ Just monospace font
193
+ \`\`\`
194
+
195
+ ## Long Code Blocks
196
+
197
+ \`\`\`javascript
198
+ // Complex React component
199
+ import React, { useState, useEffect, useCallback } from 'react';
200
+
201
+ const UserDashboard = ({ userId }) => {
202
+ const [user, setUser] = useState(null);
203
+ const [loading, setLoading] = useState(true);
204
+ const [error, setError] = useState(null);
205
+
206
+ const fetchUser = useCallback(async () => {
207
+ try {
208
+ setLoading(true);
209
+ const response = await fetch(\`/api/users/\${userId}\`);
210
+ if (!response.ok) throw new Error('Failed to fetch user');
211
+ const data = await response.json();
212
+ setUser(data);
213
+ } catch (err) {
214
+ setError(err.message);
215
+ } finally {
216
+ setLoading(false);
217
+ }
218
+ }, [userId]);
219
+
220
+ useEffect(() => {
221
+ fetchUser();
222
+ }, [fetchUser]);
223
+
224
+ if (loading) return <div>Loading...</div>;
225
+ if (error) return <div>Error: {error}</div>;
226
+ if (!user) return <div>No user found</div>;
227
+
228
+ return (
229
+ <div className="dashboard">
230
+ <h1>{user.name}</h1>
231
+ <p>Email: {user.email}</p>
232
+ <button onClick={fetchUser}>Refresh</button>
233
+ </div>
234
+ );
235
+ };
236
+
237
+ export default UserDashboard;
238
+ \`\`\`
239
+ `;
240
+ export const Component = () => {
241
+ return (_jsx("div", { className: "max-w-4xl", children: _jsx(Response, { children: codeExamplesMarkdown }) }));
242
+ };
243
+ export default Component;
244
+ //# sourceMappingURL=response-code-examples.story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-code-examples.story.js","sourceRoot":"","sources":["../../../../../src/ai/response/stories/response-code-examples.story.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwN5B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,YACxB,KAAC,QAAQ,cAAE,oBAAoB,GAAY,GACvC,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Response } from '@neo4j-ndl/react/ai';\n\nconst codeExamplesMarkdown = `\n# Code Examples\n\nThis story focuses on different code rendering capabilities.\n\n## Multiple Programming Languages\n\n### JavaScript\n\n\\`\\`\\`javascript\n// Array methods\nconst numbers = [1, 2, 3, 4, 5];\nconst doubled = numbers.map(n => n * 2);\nconst sum = numbers.reduce((acc, n) => acc + n, 0);\n\nconsole.log('Doubled:', doubled);\nconsole.log('Sum:', sum);\n\\`\\`\\`\n\n### TypeScript\n\n\\`\\`\\`typescript\n// Generics\nfunction identity<T>(arg: T): T {\n return arg;\n}\n\nconst result = identity<string>(\"Hello\");\nconst num = identity(42);\n\\`\\`\\`\n\n### Python\n\n\\`\\`\\`python\n# List comprehension\nsquares = [x**2 for x in range(10)]\nevens = [x for x in range(20) if x % 2 == 0]\n\n# Dictionary comprehension\nsquare_dict = {x: x**2 for x in range(5)}\n\nprint(f\"Squares: {squares}\")\nprint(f\"Evens: {evens}\")\n\\`\\`\\`\n\n### Cypher\n\n\\`\\`\\`cypher\n// Create nodes and relationships\nCREATE (alice:Person {name: 'Alice', age: 30})\nCREATE (bob:Person {name: 'Bob', age: 25})\nCREATE (alice)-[:KNOWS {since: 2020}]->(bob)\nRETURN alice, bob\n\\`\\`\\`\n\n### SQL\n\n\\`\\`\\`sql\n-- Complex query\nSELECT \n u.name,\n COUNT(o.id) as order_count,\n SUM(o.total) as total_spent\nFROM users u\nLEFT JOIN orders o ON u.id = o.user_id\nWHERE u.active = true\nGROUP BY u.id, u.name\nHAVING COUNT(o.id) > 5\nORDER BY total_spent DESC\nLIMIT 10;\n\\`\\`\\`\n\n### Rust\n\n\\`\\`\\`rust\n// Pattern matching\nfn describe_number(n: i32) -> String {\n match n {\n 0 => \"zero\".to_string(),\n 1..=10 => \"small\".to_string(),\n 11..=100 => \"medium\".to_string(),\n _ => \"large\".to_string(),\n }\n}\n\\`\\`\\`\n\n### Go\n\n\\`\\`\\`go\n// Goroutines and channels\nfunc worker(id int, jobs <-chan int, results chan<- int) {\n for j := range jobs {\n fmt.Printf(\"worker %d processing job %d\\\\n\", id, j)\n results <- j * 2\n }\n}\n\\`\\`\\`\n\n### JSON\n\n\\`\\`\\`json\n{\n \"name\": \"Response Component\",\n \"version\": \"1.0.0\",\n \"features\": [\n \"markdown rendering\",\n \"syntax highlighting\",\n \"streaming support\"\n ],\n \"config\": {\n \"theme\": \"dark\",\n \"lineNumbers\": true\n }\n}\n\\`\\`\\`\n\n### YAML\n\n\\`\\`\\`yaml\n# Configuration file\napp:\n name: MyApp\n version: 1.0.0\n port: 3000\n\ndatabase:\n host: localhost\n port: 5432\n credentials:\n username: admin\n password: secret\n\nfeatures:\n - authentication\n - logging\n - caching\n\\`\\`\\`\n\n### Shell/Bash\n\n\\`\\`\\`bash\n#!/bin/bash\n\n# Deploy script\necho \"Starting deployment...\"\n\nnpm install\nnpm run build\nnpm test\n\nif [ $? -eq 0 ]; then\n echo \"Deployment successful!\"\nelse\n echo \"Deployment failed!\"\n exit 1\nfi\n\\`\\`\\`\n\n## Inline Code\n\nYou can use inline code like \\`const x = 5\\`, \\`npm install\\`, or \\`SELECT * FROM users\\` within sentences.\n\nMixed with text: The \\`Array.map()\\` method creates a new array and the \\`filter()\\` method filters elements.\n\n## Code Without Language\n\n\\`\\`\\`\nPlain text code block\nNo syntax highlighting\nJust monospace font\n\\`\\`\\`\n\n## Long Code Blocks\n\n\\`\\`\\`javascript\n// Complex React component\nimport React, { useState, useEffect, useCallback } from 'react';\n\nconst UserDashboard = ({ userId }) => {\n const [user, setUser] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n const fetchUser = useCallback(async () => {\n try {\n setLoading(true);\n const response = await fetch(\\`/api/users/\\${userId}\\`);\n if (!response.ok) throw new Error('Failed to fetch user');\n const data = await response.json();\n setUser(data);\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n }, [userId]);\n\n useEffect(() => {\n fetchUser();\n }, [fetchUser]);\n\n if (loading) return <div>Loading...</div>;\n if (error) return <div>Error: {error}</div>;\n if (!user) return <div>No user found</div>;\n\n return (\n <div className=\"dashboard\">\n <h1>{user.name}</h1>\n <p>Email: {user.email}</p>\n <button onClick={fetchUser}>Refresh</button>\n </div>\n );\n};\n\nexport default UserDashboard;\n\\`\\`\\`\n`;\n\nexport const Component = () => {\n return (\n <div className=\"max-w-4xl\">\n <Response>{codeExamplesMarkdown}</Response>\n </div>\n );\n};\n\nexport default Component;\n"]}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ *
4
+ * Copyright (c) "Neo4j"
5
+ * Neo4j Sweden AB [http://neo4j.com]
6
+ *
7
+ * This file is part of Neo4j.
8
+ *
9
+ * Neo4j is free software: you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation, either version 3 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+ */
22
+ import { Response } from '@neo4j-ndl/react/ai';
23
+ const markdownContent = `
24
+ # Hello World
25
+
26
+ This is a **bold** text and this is an *italic* text.
27
+
28
+ Here is a list:
29
+ - Item 1
30
+ - Item 2
31
+ - Item 3
32
+
33
+ And a code block:
34
+
35
+ \`\`\`typescript
36
+ const greeting = "Hello World";
37
+ console.log(greeting);
38
+ \`\`\`
39
+
40
+ [Link to Neo4j](https://neo4j.com)
41
+ `;
42
+ export const Component = () => {
43
+ return _jsx(Response, { children: markdownContent });
44
+ };
45
+ export default Component;
46
+ //# sourceMappingURL=response-default.story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-default.story.js","sourceRoot":"","sources":["../../../../../src/ai/response/stories/response-default.story.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;CAkBvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,OAAO,KAAC,QAAQ,cAAE,eAAe,GAAY,CAAC;AAChD,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Response } from '@neo4j-ndl/react/ai';\n\nconst markdownContent = `\n# Hello World\n\nThis is a **bold** text and this is an *italic* text.\n\nHere is a list:\n- Item 1\n- Item 2\n- Item 3\n\nAnd a code block:\n\n\\`\\`\\`typescript\nconst greeting = \"Hello World\";\nconsole.log(greeting);\n\\`\\`\\`\n\n[Link to Neo4j](https://neo4j.com)\n`;\n\nexport const Component = () => {\n return <Response>{markdownContent}</Response>;\n};\n\nexport default Component;\n"]}
@@ -0,0 +1,158 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ *
4
+ * Copyright (c) "Neo4j"
5
+ * Neo4j Sweden AB [http://neo4j.com]
6
+ *
7
+ * This file is part of Neo4j.
8
+ *
9
+ * Neo4j is free software: you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation, either version 3 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+ */
22
+ import { CleanIconButton, TextLink, Typography } from '@neo4j-ndl/react';
23
+ import { Prompt, Response, Suggestion, Thinking, UserBubble, } from '@neo4j-ndl/react/ai';
24
+ import { ArrowPathIconOutline, Cog6ToothIconOutline, HandThumbDownIconOutline, PlusIconOutline, Square2StackIconOutline, XMarkIconOutline, } from '@neo4j-ndl/react/icons';
25
+ import { useEffect, useRef, useState } from 'react';
26
+ const FAKE_RESPONSES = [
27
+ `Here is a simple response with some **bold text** and *italics*.`,
28
+ `Here is a list of items:
29
+ - Item 1
30
+ - Item 2
31
+ - Item 3`,
32
+ `Here is a code block example:
33
+
34
+ \`\`\`typescript
35
+ const greeting = "Hello World";
36
+ console.log(greeting);
37
+ \`\`\`
38
+ `,
39
+ `# Heading 1
40
+ ## Heading 2
41
+ ### Heading 3
42
+
43
+ Some text under headings.`,
44
+ `You can also use tables:
45
+
46
+ | Header 1 | Header 2 |
47
+ |Data 1|Data 2|
48
+ |Data 3|Data 4|
49
+ `,
50
+ ];
51
+ export const Component = () => {
52
+ const [messages, setMessages] = useState([]);
53
+ const [prompt, setPrompt] = useState('');
54
+ const [isThinking, setIsThinking] = useState(false);
55
+ const [isStreaming, setIsStreaming] = useState(false);
56
+ const [responseIndex, setResponseIndex] = useState(0);
57
+ const messagesEndRef = useRef(null);
58
+ const timeoutRef = useRef(null);
59
+ const intervalRef = useRef(null);
60
+ const scrollToBottom = () => {
61
+ var _a;
62
+ (_a = messagesEndRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: 'smooth' });
63
+ };
64
+ useEffect(() => {
65
+ scrollToBottom();
66
+ }, [messages, isThinking]);
67
+ const handleSend = (overridePrompt) => {
68
+ // Handle Stop
69
+ if (isThinking || isStreaming) {
70
+ if (timeoutRef.current) {
71
+ clearTimeout(timeoutRef.current);
72
+ }
73
+ if (intervalRef.current) {
74
+ clearInterval(intervalRef.current);
75
+ }
76
+ setIsThinking(false);
77
+ setIsStreaming(false);
78
+ // Mark the last message as done if stopped
79
+ setMessages((prev) => {
80
+ const newMessages = [...prev];
81
+ const lastMessage = newMessages[newMessages.length - 1];
82
+ if ((lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.role) === 'assistant') {
83
+ lastMessage.done = true;
84
+ }
85
+ return newMessages;
86
+ });
87
+ return;
88
+ }
89
+ const textToSend = overridePrompt || prompt;
90
+ if (!textToSend.trim()) {
91
+ return;
92
+ }
93
+ setMessages((prev) => [...prev, { content: textToSend, role: 'user' }]);
94
+ setPrompt('');
95
+ setIsThinking(true);
96
+ const startTime = Date.now();
97
+ // Simulate network delay (thinking time)
98
+ timeoutRef.current = setTimeout(() => {
99
+ const endTime = Date.now();
100
+ const thinkingTime = endTime - startTime;
101
+ setIsThinking(false);
102
+ setIsStreaming(true);
103
+ const responseText = FAKE_RESPONSES[responseIndex];
104
+ setResponseIndex((prev) => (prev + 1) % FAKE_RESPONSES.length);
105
+ let currentText = '';
106
+ setMessages((prev) => [
107
+ ...prev,
108
+ { content: '', done: false, role: 'assistant', thinkingTime },
109
+ ]);
110
+ // Simulate streaming
111
+ intervalRef.current = setInterval(() => {
112
+ if (currentText.length < responseText.length) {
113
+ // Add a few characters at a time to simulate chunks
114
+ // Ensure we don't split newlines incorrectly if that's an issue,
115
+ // but simple slicing should be fine as long as the source has \n.
116
+ const chunk = responseText.slice(currentText.length, currentText.length + 2);
117
+ currentText += chunk;
118
+ setMessages((prev) => {
119
+ const newMessages = [...prev];
120
+ const lastMessage = newMessages[newMessages.length - 1];
121
+ if (lastMessage.role === 'assistant') {
122
+ lastMessage.content = currentText;
123
+ }
124
+ return newMessages;
125
+ });
126
+ }
127
+ else {
128
+ if (intervalRef.current) {
129
+ clearInterval(intervalRef.current);
130
+ }
131
+ setIsStreaming(false);
132
+ setMessages((prev) => {
133
+ const newMessages = [...prev];
134
+ const lastMessage = newMessages[newMessages.length - 1];
135
+ if (lastMessage.role === 'assistant') {
136
+ lastMessage.done = true;
137
+ }
138
+ return newMessages;
139
+ });
140
+ }
141
+ }, 50);
142
+ }, 2000);
143
+ };
144
+ return (_jsx("section", { className: "n-h-screen", children: _jsxs("div", { className: "n-w-[440px] n-h-full n-flex n-flex-col n-bg-neutral-bg-weak", children: [_jsx("div", { className: "n-flex n-flex-row n-border-b n-border-neutral-border-weak n-p-3", children: _jsxs("div", { className: "n-ml-auto", children: [_jsx(CleanIconButton, { description: "settings", tooltipProps: {}, children: _jsx(Cog6ToothIconOutline, {}) }), _jsx(CleanIconButton, { description: "close", children: _jsx(XMarkIconOutline, {}) })] }) }), _jsx("div", { className: "n-p-4 n-flex n-flex-col n-grow n-overflow-y-auto", children: messages.length === 0 ? (_jsx("div", { className: "n-flex n-flex-col ", children: _jsxs("div", { className: "n-flex n-flex-col n-gap-12", children: [_jsx(Typography, { variant: "display", children: "Hi [User], how can I help you today?" }), _jsxs("div", { className: "n-flex n-flex-col n-gap-4", children: [_jsx(Typography, { variant: "body-medium", children: "Suggestions" }), _jsx(Suggestion, { isPrimary: true, onClick: () => {
145
+ handleSend('I want to import data');
146
+ }, children: "I want to import data" }), _jsx(Suggestion, { onClick: () => {
147
+ handleSend('Create an AI agent');
148
+ }, children: "Create an AI agent" }), _jsx(Suggestion, { onClick: () => {
149
+ handleSend('Invite project members');
150
+ }, children: "Invite project members" }), _jsx(Suggestion, { onClick: () => {
151
+ handleSend('Generate a report');
152
+ }, children: "Generate a report" })] }), _jsxs(Typography, { variant: "body-medium", children: ["You can also drag and drop files here, or", ' ', _jsx(TextLink, { as: "button", type: "internal-underline", children: "browse" }), ". Supports CVG, MOV, PDF"] })] }) })) : (_jsxs("div", { className: "n-flex n-flex-col n-gap-4 n-pb-4", children: [messages.map((msg, idx) => (_jsx("div", { className: `n-flex ${msg.role === 'user' ? 'n-justify-end' : 'n-justify-start'}`, children: msg.role === 'user' ? (_jsx("div", { className: "n-max-w-[85%]", children: _jsx(UserBubble, { avatarProps: {
153
+ name: 'NM',
154
+ type: 'letters',
155
+ }, children: msg.content }) })) : (_jsxs("div", { className: "n-w-full n-flex n-flex-col n-gap-2", children: [msg.thinkingTime !== undefined && (_jsx(Thinking, { isThinking: false, thinkingMs: msg.thinkingTime })), _jsxs("div", { className: "n-flex n-flex-col n-gap-2", children: [_jsx(Response, { children: msg.content }), msg.done === true && (_jsxs("div", { className: "n-flex n-flex-row n-gap-1.5", children: [_jsx(CleanIconButton, { size: "small", description: "Dislike", children: _jsx(HandThumbDownIconOutline, {}) }), _jsx(CleanIconButton, { size: "small", description: "Re-run", children: _jsx(ArrowPathIconOutline, {}) }), _jsx(CleanIconButton, { size: "small", description: "Copy", children: _jsx(Square2StackIconOutline, {}) })] }))] })] })) }, idx))), isThinking && _jsx(Thinking, { isThinking: true }), _jsx("div", { ref: messagesEndRef })] })) }), _jsx("div", { className: "n-p-4 n-mt-auto", children: _jsx(Prompt, { value: prompt, onChange: (e) => setPrompt(e.target.value), onSubmitPrompt: () => handleSend(), isRunningPrompt: isThinking || isStreaming, isSubmitDisabled: prompt.length === 0 && !(isThinking || isStreaming), bottomContent: _jsx(CleanIconButton, { description: "Add files", size: "small", children: _jsx(PlusIconOutline, {}) }) }) })] }) }));
156
+ };
157
+ export default Component;
158
+ //# sourceMappingURL=response-full-example.story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-full-example.story.js","sourceRoot":"","sources":["../../../../../src/ai/response/stories/response-full-example.story.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CleanIconButton, TextLink, Typography } from '@neo4j-ndl/react';\nimport {\n Prompt,\n Response,\n Suggestion,\n Thinking,\n UserBubble,\n} from '@neo4j-ndl/react/ai';\nimport {\n ArrowPathIconOutline,\n Cog6ToothIconOutline,\n HandThumbDownIconOutline,\n PlusIconOutline,\n Square2StackIconOutline,\n XMarkIconOutline,\n} from '@neo4j-ndl/react/icons';\nimport { useEffect, useRef, useState } from 'react';\n\nconst FAKE_RESPONSES = [\n `Here is a simple response with some **bold text** and *italics*.`,\n `Here is a list of items:\n- Item 1\n- Item 2\n- Item 3`,\n `Here is a code block example:\n\n\\`\\`\\`typescript\nconst greeting = \"Hello World\";\nconsole.log(greeting);\n\\`\\`\\`\n`,\n `# Heading 1\n## Heading 2\n### Heading 3\n\nSome text under headings.`,\n `You can also use tables:\n\n| Header 1 | Header 2 |\n|Data 1|Data 2|\n|Data 3|Data 4|\n`,\n];\n\nexport const Component = () => {\n const [messages, setMessages] = useState<\n {\n role: 'user' | 'assistant';\n content: string;\n thinkingTime?: number;\n done?: boolean;\n }[]\n >([]);\n const [prompt, setPrompt] = useState('');\n const [isThinking, setIsThinking] = useState(false);\n const [isStreaming, setIsStreaming] = useState(false);\n const [responseIndex, setResponseIndex] = useState(0);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\n\n const scrollToBottom = () => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n };\n\n useEffect(() => {\n scrollToBottom();\n }, [messages, isThinking]);\n\n const handleSend = (overridePrompt?: string) => {\n // Handle Stop\n if (isThinking || isStreaming) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n setIsThinking(false);\n setIsStreaming(false);\n\n // Mark the last message as done if stopped\n setMessages((prev) => {\n const newMessages = [...prev];\n const lastMessage = newMessages[newMessages.length - 1];\n if (lastMessage?.role === 'assistant') {\n lastMessage.done = true;\n }\n return newMessages;\n });\n return;\n }\n\n const textToSend = overridePrompt || prompt;\n\n if (!textToSend.trim()) {\n return;\n }\n\n setMessages((prev) => [...prev, { content: textToSend, role: 'user' }]);\n setPrompt('');\n setIsThinking(true);\n const startTime = Date.now();\n\n // Simulate network delay (thinking time)\n timeoutRef.current = setTimeout(() => {\n const endTime = Date.now();\n const thinkingTime = endTime - startTime;\n setIsThinking(false);\n setIsStreaming(true);\n\n const responseText = FAKE_RESPONSES[responseIndex];\n setResponseIndex((prev) => (prev + 1) % FAKE_RESPONSES.length);\n\n let currentText = '';\n setMessages((prev) => [\n ...prev,\n { content: '', done: false, role: 'assistant', thinkingTime },\n ]);\n\n // Simulate streaming\n intervalRef.current = setInterval(() => {\n if (currentText.length < responseText.length) {\n // Add a few characters at a time to simulate chunks\n // Ensure we don't split newlines incorrectly if that's an issue,\n // but simple slicing should be fine as long as the source has \\n.\n const chunk = responseText.slice(\n currentText.length,\n currentText.length + 2,\n );\n currentText += chunk;\n\n setMessages((prev) => {\n const newMessages = [...prev];\n const lastMessage = newMessages[newMessages.length - 1];\n if (lastMessage.role === 'assistant') {\n lastMessage.content = currentText;\n }\n return newMessages;\n });\n } else {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n setIsStreaming(false);\n setMessages((prev) => {\n const newMessages = [...prev];\n const lastMessage = newMessages[newMessages.length - 1];\n if (lastMessage.role === 'assistant') {\n lastMessage.done = true;\n }\n return newMessages;\n });\n }\n }, 50);\n }, 2000);\n };\n\n return (\n <section className=\"n-h-screen\">\n <div className=\"n-w-[440px] n-h-full n-flex n-flex-col n-bg-neutral-bg-weak\">\n <div className=\"n-flex n-flex-row n-border-b n-border-neutral-border-weak n-p-3\">\n <div className=\"n-ml-auto\">\n <CleanIconButton description=\"settings\" tooltipProps={{}}>\n <Cog6ToothIconOutline />\n </CleanIconButton>\n <CleanIconButton description=\"close\">\n <XMarkIconOutline />\n </CleanIconButton>\n </div>\n </div>\n <div className=\"n-p-4 n-flex n-flex-col n-grow n-overflow-y-auto\">\n {messages.length === 0 ? (\n <div className=\"n-flex n-flex-col \">\n <div className=\"n-flex n-flex-col n-gap-12\">\n <Typography variant=\"display\">\n Hi [User], how can I help you today?\n </Typography>\n <div className=\"n-flex n-flex-col n-gap-4\">\n <Typography variant=\"body-medium\">Suggestions</Typography>\n <Suggestion\n isPrimary\n onClick={() => {\n handleSend('I want to import data');\n }}\n >\n I want to import data\n </Suggestion>\n <Suggestion\n onClick={() => {\n handleSend('Create an AI agent');\n }}\n >\n Create an AI agent\n </Suggestion>\n <Suggestion\n onClick={() => {\n handleSend('Invite project members');\n }}\n >\n Invite project members\n </Suggestion>\n <Suggestion\n onClick={() => {\n handleSend('Generate a report');\n }}\n >\n Generate a report\n </Suggestion>\n </div>\n <Typography variant=\"body-medium\">\n You can also drag and drop files here, or{' '}\n <TextLink as=\"button\" type=\"internal-underline\">\n browse\n </TextLink>\n . Supports CVG, MOV, PDF\n </Typography>\n </div>\n </div>\n ) : (\n <div className=\"n-flex n-flex-col n-gap-4 n-pb-4\">\n {messages.map((msg, idx) => (\n <div\n key={idx}\n className={`n-flex ${\n msg.role === 'user' ? 'n-justify-end' : 'n-justify-start'\n }`}\n >\n {msg.role === 'user' ? (\n <div className=\"n-max-w-[85%]\">\n <UserBubble\n avatarProps={{\n name: 'NM',\n type: 'letters',\n }}\n >\n {msg.content}\n </UserBubble>\n </div>\n ) : (\n <div className=\"n-w-full n-flex n-flex-col n-gap-2\">\n {msg.thinkingTime !== undefined && (\n <Thinking\n isThinking={false}\n thinkingMs={msg.thinkingTime}\n />\n )}\n <div className=\"n-flex n-flex-col n-gap-2\">\n <Response>{msg.content}</Response>\n\n {msg.done === true && (\n <div className=\"n-flex n-flex-row n-gap-1.5\">\n <CleanIconButton size=\"small\" description=\"Dislike\">\n <HandThumbDownIconOutline />\n </CleanIconButton>\n <CleanIconButton size=\"small\" description=\"Re-run\">\n <ArrowPathIconOutline />\n </CleanIconButton>\n <CleanIconButton size=\"small\" description=\"Copy\">\n <Square2StackIconOutline />\n </CleanIconButton>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n {isThinking && <Thinking isThinking={true} />}\n <div ref={messagesEndRef} />\n </div>\n )}\n </div>\n <div className=\"n-p-4 n-mt-auto\">\n <Prompt\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onSubmitPrompt={() => handleSend()}\n isRunningPrompt={isThinking || isStreaming}\n isSubmitDisabled={\n prompt.length === 0 && !(isThinking || isStreaming)\n }\n bottomContent={\n <CleanIconButton description=\"Add files\" size=\"small\">\n <PlusIconOutline />\n </CleanIconButton>\n }\n />\n </div>\n </div>\n </section>\n );\n};\n\nexport default Component;\n"]}
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ *
4
+ * Copyright (c) "Neo4j"
5
+ * Neo4j Sweden AB [http://neo4j.com]
6
+ *
7
+ * This file is part of Neo4j.
8
+ *
9
+ * Neo4j is free software: you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation, either version 3 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+ */
22
+ import { Response } from '@neo4j-ndl/react/ai';
23
+ const headingsMarkdown = `
24
+ # Heading Level 1
25
+ This is content under heading 1.
26
+
27
+ ## Heading Level 2
28
+ This is content under heading 2.
29
+
30
+ ### Heading Level 3
31
+ This is content under heading 3.
32
+
33
+ #### Heading Level 4
34
+ This is content under heading 4.
35
+
36
+ ##### Heading Level 5
37
+ This is content under heading 5.
38
+
39
+ ###### Heading Level 6
40
+ This is content under heading 6.
41
+
42
+ ---
43
+
44
+ ## Document Structure Example
45
+
46
+ # Main Document Title
47
+
48
+ Brief introduction to the document.
49
+
50
+ ## Introduction
51
+
52
+ This section provides an overview of what we'll cover.
53
+
54
+ ### Background
55
+
56
+ Some background information about the topic.
57
+
58
+ #### Historical Context
59
+
60
+ Details about the history.
61
+
62
+ ##### Key Events
63
+
64
+ - Event 1
65
+ - Event 2
66
+ - Event 3
67
+
68
+ ###### Notes
69
+
70
+ Additional notes and references.
71
+
72
+ ## Content Section
73
+
74
+ Main content goes here.
75
+
76
+ ### Subsection A
77
+
78
+ Details for subsection A.
79
+
80
+ ### Subsection B
81
+
82
+ Details for subsection B.
83
+
84
+ ## Conclusion
85
+
86
+ Final thoughts and summary.
87
+
88
+ ---
89
+
90
+ ## Headings with Other Elements
91
+
92
+ ### Code Example
93
+
94
+ \`\`\`javascript
95
+ console.log("Hello from heading section");
96
+ \`\`\`
97
+
98
+ ### List Example
99
+
100
+ - Item 1
101
+ - Item 2
102
+ - Item 3
103
+
104
+ ### Quote Example
105
+
106
+ > "This is a quote under a heading."
107
+
108
+ ### Mixed Content
109
+
110
+ Regular paragraph with **bold** and *italic* text.
111
+ `;
112
+ export const Component = () => {
113
+ return (_jsx("div", { className: "max-w-4xl", children: _jsx(Response, { children: headingsMarkdown }) }));
114
+ };
115
+ export default Component;
116
+ //# sourceMappingURL=response-headings.story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-headings.story.js","sourceRoot":"","sources":["../../../../../src/ai/response/stories/response-headings.story.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFxB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,YACxB,KAAC,QAAQ,cAAE,gBAAgB,GAAY,GACnC,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["/**\n *\n * Copyright (c) \"Neo4j\"\n * Neo4j Sweden AB [http://neo4j.com]\n *\n * This file is part of Neo4j.\n *\n * Neo4j is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Response } from '@neo4j-ndl/react/ai';\n\nconst headingsMarkdown = `\n# Heading Level 1\nThis is content under heading 1.\n\n## Heading Level 2\nThis is content under heading 2.\n\n### Heading Level 3\nThis is content under heading 3.\n\n#### Heading Level 4\nThis is content under heading 4.\n\n##### Heading Level 5\nThis is content under heading 5.\n\n###### Heading Level 6\nThis is content under heading 6.\n\n---\n\n## Document Structure Example\n\n# Main Document Title\n\nBrief introduction to the document.\n\n## Introduction\n\nThis section provides an overview of what we'll cover.\n\n### Background\n\nSome background information about the topic.\n\n#### Historical Context\n\nDetails about the history.\n\n##### Key Events\n\n- Event 1\n- Event 2\n- Event 3\n\n###### Notes\n\nAdditional notes and references.\n\n## Content Section\n\nMain content goes here.\n\n### Subsection A\n\nDetails for subsection A.\n\n### Subsection B\n\nDetails for subsection B.\n\n## Conclusion\n\nFinal thoughts and summary.\n\n---\n\n## Headings with Other Elements\n\n### Code Example\n\n\\`\\`\\`javascript\nconsole.log(\"Hello from heading section\");\n\\`\\`\\`\n\n### List Example\n\n- Item 1\n- Item 2\n- Item 3\n\n### Quote Example\n\n> \"This is a quote under a heading.\"\n\n### Mixed Content\n\nRegular paragraph with **bold** and *italic* text.\n`;\n\nexport const Component = () => {\n return (\n <div className=\"max-w-4xl\">\n <Response>{headingsMarkdown}</Response>\n </div>\n );\n};\n\nexport default Component;\n"]}