@copilotkit/react-textarea 1.5.1-next.3 → 1.5.1-next.4

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 (386) hide show
  1. package/CHANGELOG.md +12 -2
  2. package/package.json +4 -4
  3. package/dist/chunk-23Q6A46J.mjs +0 -103
  4. package/dist/chunk-23Q6A46J.mjs.map +0 -1
  5. package/dist/chunk-2C7O2EVM.mjs +0 -27
  6. package/dist/chunk-2C7O2EVM.mjs.map +0 -1
  7. package/dist/chunk-2QDCE7PD.mjs +0 -32
  8. package/dist/chunk-2QDCE7PD.mjs.map +0 -1
  9. package/dist/chunk-3PQ7GSFE.mjs +0 -17
  10. package/dist/chunk-3PQ7GSFE.mjs.map +0 -1
  11. package/dist/chunk-4CVSOOJY.mjs +0 -30
  12. package/dist/chunk-4CVSOOJY.mjs.map +0 -1
  13. package/dist/chunk-4NHVQZ67.mjs +0 -108
  14. package/dist/chunk-4NHVQZ67.mjs.map +0 -1
  15. package/dist/chunk-4PDYALMP.mjs +0 -52
  16. package/dist/chunk-4PDYALMP.mjs.map +0 -1
  17. package/dist/chunk-4PNWGPAR.mjs +0 -32
  18. package/dist/chunk-4PNWGPAR.mjs.map +0 -1
  19. package/dist/chunk-5UNJXFUO.mjs +0 -29
  20. package/dist/chunk-5UNJXFUO.mjs.map +0 -1
  21. package/dist/chunk-7L6GIHDM.mjs +0 -39
  22. package/dist/chunk-7L6GIHDM.mjs.map +0 -1
  23. package/dist/chunk-7LSRNPNI.mjs +0 -59
  24. package/dist/chunk-7LSRNPNI.mjs.map +0 -1
  25. package/dist/chunk-AJ5OMEXM.mjs +0 -13
  26. package/dist/chunk-AJ5OMEXM.mjs.map +0 -1
  27. package/dist/chunk-AMQQHDWZ.mjs +0 -265
  28. package/dist/chunk-AMQQHDWZ.mjs.map +0 -1
  29. package/dist/chunk-BZBSPKHQ.mjs +0 -229
  30. package/dist/chunk-BZBSPKHQ.mjs.map +0 -1
  31. package/dist/chunk-D47EKHIF.mjs +0 -26
  32. package/dist/chunk-D47EKHIF.mjs.map +0 -1
  33. package/dist/chunk-DE5K76I2.mjs +0 -1
  34. package/dist/chunk-DE5K76I2.mjs.map +0 -1
  35. package/dist/chunk-DFTV4TST.mjs +0 -36
  36. package/dist/chunk-DFTV4TST.mjs.map +0 -1
  37. package/dist/chunk-DRV2FOHZ.mjs +0 -70
  38. package/dist/chunk-DRV2FOHZ.mjs.map +0 -1
  39. package/dist/chunk-ECR45NSD.mjs +0 -104
  40. package/dist/chunk-ECR45NSD.mjs.map +0 -1
  41. package/dist/chunk-EJGGLWWR.mjs +0 -82
  42. package/dist/chunk-EJGGLWWR.mjs.map +0 -1
  43. package/dist/chunk-EVEUQINY.mjs +0 -125
  44. package/dist/chunk-EVEUQINY.mjs.map +0 -1
  45. package/dist/chunk-GQN2HYFJ.mjs +0 -22
  46. package/dist/chunk-GQN2HYFJ.mjs.map +0 -1
  47. package/dist/chunk-GUZIMGGZ.mjs +0 -64
  48. package/dist/chunk-GUZIMGGZ.mjs.map +0 -1
  49. package/dist/chunk-H4VKQGVU.mjs +0 -1
  50. package/dist/chunk-H4VKQGVU.mjs.map +0 -1
  51. package/dist/chunk-HDBI2WN5.mjs +0 -113
  52. package/dist/chunk-HDBI2WN5.mjs.map +0 -1
  53. package/dist/chunk-I72DKFHD.mjs +0 -114
  54. package/dist/chunk-I72DKFHD.mjs.map +0 -1
  55. package/dist/chunk-IU3WTXLQ.mjs +0 -1
  56. package/dist/chunk-IU3WTXLQ.mjs.map +0 -1
  57. package/dist/chunk-KMVGEY7Q.mjs +0 -51
  58. package/dist/chunk-KMVGEY7Q.mjs.map +0 -1
  59. package/dist/chunk-KNQIEOFP.mjs +0 -19
  60. package/dist/chunk-KNQIEOFP.mjs.map +0 -1
  61. package/dist/chunk-L7VVZH4Q.mjs +0 -1
  62. package/dist/chunk-L7VVZH4Q.mjs.map +0 -1
  63. package/dist/chunk-LQ2OWQU7.mjs +0 -49
  64. package/dist/chunk-LQ2OWQU7.mjs.map +0 -1
  65. package/dist/chunk-LYB4B6MK.mjs +0 -19
  66. package/dist/chunk-LYB4B6MK.mjs.map +0 -1
  67. package/dist/chunk-MCNXIA4Q.mjs +0 -75
  68. package/dist/chunk-MCNXIA4Q.mjs.map +0 -1
  69. package/dist/chunk-MMVDU6DF.mjs +0 -1
  70. package/dist/chunk-MMVDU6DF.mjs.map +0 -1
  71. package/dist/chunk-MRXNTQOX.mjs +0 -59
  72. package/dist/chunk-MRXNTQOX.mjs.map +0 -1
  73. package/dist/chunk-PTPNOBEI.mjs +0 -92
  74. package/dist/chunk-PTPNOBEI.mjs.map +0 -1
  75. package/dist/chunk-QJNFNPWH.mjs +0 -85
  76. package/dist/chunk-QJNFNPWH.mjs.map +0 -1
  77. package/dist/chunk-RUV6NBIF.mjs +0 -1
  78. package/dist/chunk-RUV6NBIF.mjs.map +0 -1
  79. package/dist/chunk-RXV67GJN.mjs +0 -168
  80. package/dist/chunk-RXV67GJN.mjs.map +0 -1
  81. package/dist/chunk-T6MTDQZ7.mjs +0 -45
  82. package/dist/chunk-T6MTDQZ7.mjs.map +0 -1
  83. package/dist/chunk-TIS7PLZC.mjs +0 -31
  84. package/dist/chunk-TIS7PLZC.mjs.map +0 -1
  85. package/dist/chunk-VSVQZUPW.mjs +0 -124
  86. package/dist/chunk-VSVQZUPW.mjs.map +0 -1
  87. package/dist/chunk-VU4BKPKI.mjs +0 -60
  88. package/dist/chunk-VU4BKPKI.mjs.map +0 -1
  89. package/dist/chunk-WADHCMPK.mjs +0 -1
  90. package/dist/chunk-WADHCMPK.mjs.map +0 -1
  91. package/dist/chunk-WGWQRALG.mjs +0 -83
  92. package/dist/chunk-WGWQRALG.mjs.map +0 -1
  93. package/dist/chunk-WJHSY5T6.mjs +0 -1
  94. package/dist/chunk-WJHSY5T6.mjs.map +0 -1
  95. package/dist/chunk-XW3ICO4S.mjs +0 -25
  96. package/dist/chunk-XW3ICO4S.mjs.map +0 -1
  97. package/dist/chunk-YLFAIYRY.mjs +0 -50
  98. package/dist/chunk-YLFAIYRY.mjs.map +0 -1
  99. package/dist/components/base-copilot-textarea/base-copilot-textarea.css +0 -9
  100. package/dist/components/base-copilot-textarea/base-copilot-textarea.css.map +0 -1
  101. package/dist/components/base-copilot-textarea/base-copilot-textarea.d.ts +0 -43
  102. package/dist/components/base-copilot-textarea/base-copilot-textarea.js +0 -1795
  103. package/dist/components/base-copilot-textarea/base-copilot-textarea.js.map +0 -1
  104. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +0 -40
  105. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map +0 -1
  106. package/dist/components/base-copilot-textarea/render-element.d.ts +0 -6
  107. package/dist/components/base-copilot-textarea/render-element.js +0 -75
  108. package/dist/components/base-copilot-textarea/render-element.js.map +0 -1
  109. package/dist/components/base-copilot-textarea/render-element.mjs +0 -8
  110. package/dist/components/base-copilot-textarea/render-element.mjs.map +0 -1
  111. package/dist/components/base-copilot-textarea/render-placeholder.d.ts +0 -6
  112. package/dist/components/base-copilot-textarea/render-placeholder.js +0 -72
  113. package/dist/components/base-copilot-textarea/render-placeholder.js.map +0 -1
  114. package/dist/components/base-copilot-textarea/render-placeholder.mjs +0 -8
  115. package/dist/components/base-copilot-textarea/render-placeholder.mjs.map +0 -1
  116. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.d.ts +0 -8
  117. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.js +0 -112
  118. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.js.map +0 -1
  119. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs +0 -9
  120. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs.map +0 -1
  121. package/dist/components/base-copilot-textarea/use-add-branding-css.d.ts +0 -3
  122. package/dist/components/base-copilot-textarea/use-add-branding-css.js +0 -83
  123. package/dist/components/base-copilot-textarea/use-add-branding-css.js.map +0 -1
  124. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs +0 -8
  125. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs.map +0 -1
  126. package/dist/components/copilot-textarea/copilot-textarea.css +0 -9
  127. package/dist/components/copilot-textarea/copilot-textarea.css.map +0 -1
  128. package/dist/components/copilot-textarea/copilot-textarea.d.ts +0 -171
  129. package/dist/components/copilot-textarea/copilot-textarea.js +0 -2288
  130. package/dist/components/copilot-textarea/copilot-textarea.js.map +0 -1
  131. package/dist/components/copilot-textarea/copilot-textarea.mjs +0 -49
  132. package/dist/components/copilot-textarea/copilot-textarea.mjs.map +0 -1
  133. package/dist/components/hovering-toolbar/hovering-editor-provider.d.ts +0 -18
  134. package/dist/components/hovering-toolbar/hovering-editor-provider.js +0 -44
  135. package/dist/components/hovering-toolbar/hovering-editor-provider.js.map +0 -1
  136. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs +0 -10
  137. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs.map +0 -1
  138. package/dist/components/hovering-toolbar/hovering-toolbar-components.d.ts +0 -18
  139. package/dist/components/hovering-toolbar/hovering-toolbar-components.js +0 -174
  140. package/dist/components/hovering-toolbar/hovering-toolbar-components.js.map +0 -1
  141. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs +0 -16
  142. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map +0 -1
  143. package/dist/components/hovering-toolbar/hovering-toolbar.d.ts +0 -12
  144. package/dist/components/hovering-toolbar/hovering-toolbar.js +0 -912
  145. package/dist/components/hovering-toolbar/hovering-toolbar.js.map +0 -1
  146. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +0 -23
  147. package/dist/components/hovering-toolbar/hovering-toolbar.mjs.map +0 -1
  148. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.d.ts +0 -16
  149. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js +0 -606
  150. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js.map +0 -1
  151. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +0 -18
  152. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs.map +0 -1
  153. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.d.ts +0 -14
  154. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js +0 -629
  155. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js.map +0 -1
  156. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +0 -19
  157. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs.map +0 -1
  158. package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.d.ts +0 -16
  159. package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.js +0 -133
  160. package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.js.map +0 -1
  161. package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.mjs +0 -12
  162. package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.mjs.map +0 -1
  163. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.d.ts +0 -4
  164. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js +0 -629
  165. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js.map +0 -1
  166. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +0 -20
  167. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map +0 -1
  168. package/dist/components/index.css +0 -9
  169. package/dist/components/index.css.map +0 -1
  170. package/dist/components/index.d.ts +0 -15
  171. package/dist/components/index.js +0 -2292
  172. package/dist/components/index.js.map +0 -1
  173. package/dist/components/index.mjs +0 -53
  174. package/dist/components/index.mjs.map +0 -1
  175. package/dist/components/manual-ui/chip-with-icon.d.ts +0 -10
  176. package/dist/components/manual-ui/chip-with-icon.js +0 -38
  177. package/dist/components/manual-ui/chip-with-icon.js.map +0 -1
  178. package/dist/components/manual-ui/chip-with-icon.mjs +0 -15
  179. package/dist/components/manual-ui/chip-with-icon.mjs.map +0 -1
  180. package/dist/components/source-search-box/source-search-box.d.ts +0 -16
  181. package/dist/components/source-search-box/source-search-box.js +0 -240
  182. package/dist/components/source-search-box/source-search-box.js.map +0 -1
  183. package/dist/components/source-search-box/source-search-box.mjs +0 -13
  184. package/dist/components/source-search-box/source-search-box.mjs.map +0 -1
  185. package/dist/components/ui/button.d.ts +0 -14
  186. package/dist/components/ui/button.js +0 -114
  187. package/dist/components/ui/button.js.map +0 -1
  188. package/dist/components/ui/button.mjs +0 -11
  189. package/dist/components/ui/button.mjs.map +0 -1
  190. package/dist/components/ui/command.d.ts +0 -53
  191. package/dist/components/ui/command.js +0 -285
  192. package/dist/components/ui/command.js.map +0 -1
  193. package/dist/components/ui/command.mjs +0 -26
  194. package/dist/components/ui/command.mjs.map +0 -1
  195. package/dist/components/ui/dialog.d.ts +0 -19
  196. package/dist/components/ui/dialog.js +0 -183
  197. package/dist/components/ui/dialog.js.map +0 -1
  198. package/dist/components/ui/dialog.mjs +0 -21
  199. package/dist/components/ui/dialog.mjs.map +0 -1
  200. package/dist/components/ui/label.d.ts +0 -8
  201. package/dist/components/ui/label.js +0 -87
  202. package/dist/components/ui/label.js.map +0 -1
  203. package/dist/components/ui/label.mjs +0 -9
  204. package/dist/components/ui/label.mjs.map +0 -1
  205. package/dist/context/index.d.ts +0 -2
  206. package/dist/context/index.js +0 -19
  207. package/dist/context/index.js.map +0 -1
  208. package/dist/context/index.mjs +0 -2
  209. package/dist/context/index.mjs.map +0 -1
  210. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.d.ts +0 -15
  211. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.js +0 -180
  212. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.js.map +0 -1
  213. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs +0 -11
  214. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs.map +0 -1
  215. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.d.ts +0 -8
  216. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.js +0 -194
  217. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.js.map +0 -1
  218. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs +0 -9
  219. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs.map +0 -1
  220. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts +0 -7
  221. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.js +0 -180
  222. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.js.map +0 -1
  223. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs +0 -10
  224. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map +0 -1
  225. package/dist/hooks/index.d.ts +0 -2
  226. package/dist/hooks/index.js +0 -19
  227. package/dist/hooks/index.js.map +0 -1
  228. package/dist/hooks/index.mjs +0 -2
  229. package/dist/hooks/index.mjs.map +0 -1
  230. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.d.ts +0 -22
  231. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.js +0 -152
  232. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.js.map +0 -1
  233. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs +0 -9
  234. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs.map +0 -1
  235. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.d.ts +0 -23
  236. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.js +0 -228
  237. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.js.map +0 -1
  238. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs +0 -9
  239. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs.map +0 -1
  240. package/dist/hooks/misc/use-autosize-textarea.d.ts +0 -5
  241. package/dist/hooks/misc/use-autosize-textarea.js +0 -37
  242. package/dist/hooks/misc/use-autosize-textarea.js.map +0 -1
  243. package/dist/hooks/misc/use-autosize-textarea.mjs +0 -8
  244. package/dist/hooks/misc/use-autosize-textarea.mjs.map +0 -1
  245. package/dist/index.css +0 -644
  246. package/dist/index.css.map +0 -1
  247. package/dist/index.d.ts +0 -15
  248. package/dist/index.js +0 -2297
  249. package/dist/index.js.map +0 -1
  250. package/dist/index.mjs +0 -64
  251. package/dist/index.mjs.map +0 -1
  252. package/dist/lib/debouncer.d.ts +0 -11
  253. package/dist/lib/debouncer.js +0 -76
  254. package/dist/lib/debouncer.js.map +0 -1
  255. package/dist/lib/debouncer.mjs +0 -8
  256. package/dist/lib/debouncer.mjs.map +0 -1
  257. package/dist/lib/editor-to-text.d.ts +0 -7
  258. package/dist/lib/editor-to-text.js +0 -69
  259. package/dist/lib/editor-to-text.js.map +0 -1
  260. package/dist/lib/editor-to-text.mjs +0 -8
  261. package/dist/lib/editor-to-text.mjs.map +0 -1
  262. package/dist/lib/get-text-around-cursor.d.ts +0 -15
  263. package/dist/lib/get-text-around-cursor.js +0 -131
  264. package/dist/lib/get-text-around-cursor.js.map +0 -1
  265. package/dist/lib/get-text-around-cursor.mjs +0 -14
  266. package/dist/lib/get-text-around-cursor.mjs.map +0 -1
  267. package/dist/lib/retry.d.ts +0 -3
  268. package/dist/lib/retry.js +0 -43
  269. package/dist/lib/retry.js.map +0 -1
  270. package/dist/lib/retry.mjs +0 -8
  271. package/dist/lib/retry.mjs.map +0 -1
  272. package/dist/lib/slatejs-edits/add-autocompletions.d.ts +0 -8
  273. package/dist/lib/slatejs-edits/add-autocompletions.js +0 -51
  274. package/dist/lib/slatejs-edits/add-autocompletions.js.map +0 -1
  275. package/dist/lib/slatejs-edits/add-autocompletions.mjs +0 -8
  276. package/dist/lib/slatejs-edits/add-autocompletions.mjs.map +0 -1
  277. package/dist/lib/slatejs-edits/clear-autocompletions.d.ts +0 -8
  278. package/dist/lib/slatejs-edits/clear-autocompletions.js +0 -46
  279. package/dist/lib/slatejs-edits/clear-autocompletions.js.map +0 -1
  280. package/dist/lib/slatejs-edits/clear-autocompletions.mjs +0 -8
  281. package/dist/lib/slatejs-edits/clear-autocompletions.mjs.map +0 -1
  282. package/dist/lib/slatejs-edits/replace-text.d.ts +0 -5
  283. package/dist/lib/slatejs-edits/replace-text.js +0 -53
  284. package/dist/lib/slatejs-edits/replace-text.js.map +0 -1
  285. package/dist/lib/slatejs-edits/replace-text.mjs +0 -8
  286. package/dist/lib/slatejs-edits/replace-text.mjs.map +0 -1
  287. package/dist/lib/slatejs-edits/with-partial-history.d.ts +0 -8
  288. package/dist/lib/slatejs-edits/with-partial-history.js +0 -133
  289. package/dist/lib/slatejs-edits/with-partial-history.js.map +0 -1
  290. package/dist/lib/slatejs-edits/with-partial-history.mjs +0 -10
  291. package/dist/lib/slatejs-edits/with-partial-history.mjs.map +0 -1
  292. package/dist/lib/stream-promise-flatten.d.ts +0 -12
  293. package/dist/lib/stream-promise-flatten.js +0 -72
  294. package/dist/lib/stream-promise-flatten.js.map +0 -1
  295. package/dist/lib/stream-promise-flatten.mjs +0 -8
  296. package/dist/lib/stream-promise-flatten.mjs.map +0 -1
  297. package/dist/lib/utils.d.ts +0 -9
  298. package/dist/lib/utils.js +0 -94
  299. package/dist/lib/utils.js.map +0 -1
  300. package/dist/lib/utils.mjs +0 -16
  301. package/dist/lib/utils.mjs.map +0 -1
  302. package/dist/lib/utils.test.d.ts +0 -2
  303. package/dist/lib/utils.test.js +0 -9
  304. package/dist/lib/utils.test.js.map +0 -1
  305. package/dist/lib/utils.test.mjs +0 -7
  306. package/dist/lib/utils.test.mjs.map +0 -1
  307. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.d.ts +0 -23
  308. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.js +0 -19
  309. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.js.map +0 -1
  310. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs +0 -1
  311. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs.map +0 -1
  312. package/dist/types/autosuggestions-config/autosuggestions-config.d.ts +0 -20
  313. package/dist/types/autosuggestions-config/autosuggestions-config.js +0 -287
  314. package/dist/types/autosuggestions-config/autosuggestions-config.js.map +0 -1
  315. package/dist/types/autosuggestions-config/autosuggestions-config.mjs +0 -13
  316. package/dist/types/autosuggestions-config/autosuggestions-config.mjs.map +0 -1
  317. package/dist/types/autosuggestions-config/editing-api-config.d.ts +0 -15
  318. package/dist/types/autosuggestions-config/editing-api-config.js +0 -108
  319. package/dist/types/autosuggestions-config/editing-api-config.js.map +0 -1
  320. package/dist/types/autosuggestions-config/editing-api-config.mjs +0 -12
  321. package/dist/types/autosuggestions-config/editing-api-config.mjs.map +0 -1
  322. package/dist/types/autosuggestions-config/index.d.ts +0 -10
  323. package/dist/types/autosuggestions-config/index.js +0 -287
  324. package/dist/types/autosuggestions-config/index.js.map +0 -1
  325. package/dist/types/autosuggestions-config/index.mjs +0 -14
  326. package/dist/types/autosuggestions-config/index.mjs.map +0 -1
  327. package/dist/types/autosuggestions-config/insertions-api-config.d.ts +0 -15
  328. package/dist/types/autosuggestions-config/insertions-api-config.js +0 -101
  329. package/dist/types/autosuggestions-config/insertions-api-config.js.map +0 -1
  330. package/dist/types/autosuggestions-config/insertions-api-config.mjs +0 -12
  331. package/dist/types/autosuggestions-config/insertions-api-config.mjs.map +0 -1
  332. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.d.ts +0 -3
  333. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.js +0 -19
  334. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.js.map +0 -1
  335. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs +0 -1
  336. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs.map +0 -1
  337. package/dist/types/autosuggestions-config/suggestions-api-config.d.ts +0 -14
  338. package/dist/types/autosuggestions-config/suggestions-api-config.js +0 -90
  339. package/dist/types/autosuggestions-config/suggestions-api-config.js.map +0 -1
  340. package/dist/types/autosuggestions-config/suggestions-api-config.mjs +0 -12
  341. package/dist/types/autosuggestions-config/suggestions-api-config.mjs.map +0 -1
  342. package/dist/types/base/autosuggestion-state.d.ts +0 -8
  343. package/dist/types/base/autosuggestion-state.js +0 -19
  344. package/dist/types/base/autosuggestion-state.js.map +0 -1
  345. package/dist/types/base/autosuggestion-state.mjs +0 -1
  346. package/dist/types/base/autosuggestion-state.mjs.map +0 -1
  347. package/dist/types/base/autosuggestions-bare-function.d.ts +0 -19
  348. package/dist/types/base/autosuggestions-bare-function.js +0 -19
  349. package/dist/types/base/autosuggestions-bare-function.js.map +0 -1
  350. package/dist/types/base/autosuggestions-bare-function.mjs +0 -1
  351. package/dist/types/base/autosuggestions-bare-function.mjs.map +0 -1
  352. package/dist/types/base/base-autosuggestions-config.d.ts +0 -83
  353. package/dist/types/base/base-autosuggestions-config.js +0 -54
  354. package/dist/types/base/base-autosuggestions-config.js.map +0 -1
  355. package/dist/types/base/base-autosuggestions-config.mjs +0 -8
  356. package/dist/types/base/base-autosuggestions-config.mjs.map +0 -1
  357. package/dist/types/base/base-copilot-textarea-props.d.ts +0 -5
  358. package/dist/types/base/base-copilot-textarea-props.js +0 -19
  359. package/dist/types/base/base-copilot-textarea-props.js.map +0 -1
  360. package/dist/types/base/base-copilot-textarea-props.mjs +0 -1
  361. package/dist/types/base/base-copilot-textarea-props.mjs.map +0 -1
  362. package/dist/types/base/custom-editor.d.ts +0 -29
  363. package/dist/types/base/custom-editor.js +0 -19
  364. package/dist/types/base/custom-editor.js.map +0 -1
  365. package/dist/types/base/custom-editor.mjs +0 -1
  366. package/dist/types/base/custom-editor.mjs.map +0 -1
  367. package/dist/types/base/editor-autocomplete-state.d.ts +0 -10
  368. package/dist/types/base/editor-autocomplete-state.js +0 -40
  369. package/dist/types/base/editor-autocomplete-state.js.map +0 -1
  370. package/dist/types/base/editor-autocomplete-state.mjs +0 -9
  371. package/dist/types/base/editor-autocomplete-state.mjs.map +0 -1
  372. package/dist/types/base/index.d.ts +0 -54
  373. package/dist/types/base/index.js +0 -56
  374. package/dist/types/base/index.js.map +0 -1
  375. package/dist/types/base/index.mjs +0 -9
  376. package/dist/types/base/index.mjs.map +0 -1
  377. package/dist/types/html-copilot-textarea-element.d.ts +0 -7
  378. package/dist/types/html-copilot-textarea-element.js +0 -19
  379. package/dist/types/html-copilot-textarea-element.js.map +0 -1
  380. package/dist/types/html-copilot-textarea-element.mjs +0 -2
  381. package/dist/types/html-copilot-textarea-element.mjs.map +0 -1
  382. package/dist/types/index.d.ts +0 -13
  383. package/dist/types/index.js +0 -289
  384. package/dist/types/index.js.map +0 -1
  385. package/dist/types/index.mjs +0 -19
  386. package/dist/types/index.mjs.map +0 -1
@@ -1,59 +0,0 @@
1
- // src/components/base-copilot-textarea/use-add-branding-css.tsx
2
- import { useEffect } from "react";
3
- function useAddBrandingCss(suggestionStyleAugmented, disableBranding) {
4
- const cssSelector = ".copilot-textarea.with-branding";
5
- useEffect(() => {
6
- if (disableBranding) {
7
- return;
8
- }
9
- const styleEl = document.createElement("style");
10
- styleEl.id = "dynamic-styles";
11
- let dynamicStyles = Object.entries(suggestionStyleAugmented).map(([key, value]) => {
12
- const kebabCaseKey = key.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
13
- return `${kebabCaseKey}: ${value};`;
14
- }).join(" ");
15
- dynamicStyles += `font-style: normal; font-size: x-small;`;
16
- dynamicStyles += `content: "CopilotKit";`;
17
- dynamicStyles += `bottom: 6px;`;
18
- dynamicStyles += `right: 6px;`;
19
- dynamicStyles += `pointer-events: none;`;
20
- dynamicStyles += `font-weight: 200;`;
21
- dynamicStyles += `padding: 0;`;
22
- dynamicStyles += `margin: 0;`;
23
- dynamicStyles += `border: 0;`;
24
- dynamicStyles += `line-height: 1;`;
25
- dynamicStyles += `position: absolute;`;
26
- styleEl.innerHTML = `
27
- ${cssSelector}::after {
28
- ${dynamicStyles}
29
- }
30
- `;
31
- document.head.appendChild(styleEl);
32
- const textarea = document.querySelector(cssSelector);
33
- const handleScroll = () => {
34
- const styleEl2 = document.getElementById("dynamic-styles");
35
- if (styleEl2 && textarea) {
36
- const offsetFromBottom = -textarea.scrollTop + 6;
37
- const offsetFromRight = -textarea.scrollLeft + 6;
38
- styleEl2.innerHTML = `
39
- ${cssSelector}::after {
40
- ${dynamicStyles}
41
- bottom: ${offsetFromBottom}px;
42
- right: ${offsetFromRight}px;
43
- }
44
- `;
45
- }
46
- };
47
- textarea == null ? void 0 : textarea.addEventListener("scroll", handleScroll);
48
- return () => {
49
- var _a;
50
- (_a = document.getElementById("dynamic-styles")) == null ? void 0 : _a.remove();
51
- textarea == null ? void 0 : textarea.removeEventListener("scroll", handleScroll);
52
- };
53
- }, [disableBranding, suggestionStyleAugmented]);
54
- }
55
-
56
- export {
57
- useAddBrandingCss
58
- };
59
- //# sourceMappingURL=chunk-7LSRNPNI.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/base-copilot-textarea/use-add-branding-css.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\nexport function useAddBrandingCss(\n suggestionStyleAugmented: React.CSSProperties,\n disableBranding: boolean | undefined,\n) {\n const cssSelector = \".copilot-textarea.with-branding\";\n useEffect(() => {\n if (disableBranding) {\n return;\n }\n\n // ---\n // 1: Add the CSS to the DOM\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"dynamic-styles\";\n\n // Build the CSS string dynamically\n let dynamicStyles = Object.entries(suggestionStyleAugmented)\n .map(([key, value]) => {\n const kebabCaseKey = key.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, \"$1-$2\").toLowerCase();\n return `${kebabCaseKey}: ${value};`;\n })\n .join(\" \");\n\n // Append overrides for italics and font-size\n dynamicStyles += `font-style: normal; font-size: x-small;`;\n dynamicStyles += `content: \"CopilotKit\";`;\n dynamicStyles += `bottom: 6px;`;\n dynamicStyles += `right: 6px;`;\n dynamicStyles += `pointer-events: none;`;\n dynamicStyles += `font-weight: 200;`;\n dynamicStyles += `padding: 0;`;\n dynamicStyles += `margin: 0;`;\n dynamicStyles += `border: 0;`;\n dynamicStyles += `line-height: 1;`;\n dynamicStyles += `position: absolute;`;\n\n // Append it to the ::after class\n styleEl.innerHTML = `\n ${cssSelector}::after {\n ${dynamicStyles}\n }\n `;\n\n document.head.appendChild(styleEl);\n\n // ---\n // 2: Add the scroll listener (to keep the branding in the bottom right as the textarea scrolls)\n const textarea = document.querySelector(cssSelector);\n const handleScroll = () => {\n const styleEl = document.getElementById(\"dynamic-styles\");\n if (styleEl && textarea) {\n const offsetFromBottom = -textarea.scrollTop + 6;\n const offsetFromRight = -textarea.scrollLeft + 6;\n styleEl.innerHTML = `\n ${cssSelector}::after {\n ${dynamicStyles}\n bottom: ${offsetFromBottom}px;\n right: ${offsetFromRight}px;\n }\n `;\n }\n };\n\n textarea?.addEventListener(\"scroll\", handleScroll);\n\n // Cleanup\n return () => {\n document.getElementById(\"dynamic-styles\")?.remove();\n textarea?.removeEventListener(\"scroll\", handleScroll);\n };\n }, [disableBranding, suggestionStyleAugmented]);\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,SAAS,kBACd,0BACA,iBACA;AACA,QAAM,cAAc;AACpB,YAAU,MAAM;AACd,QAAI,iBAAiB;AACnB;AAAA,IACF;AAIA,UAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,YAAQ,KAAK;AAGb,QAAI,gBAAgB,OAAO,QAAQ,wBAAwB,EACxD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,YAAM,eAAe,IAAI,QAAQ,gCAAgC,OAAO,EAAE,YAAY;AACtF,aAAO,GAAG,iBAAiB;AAAA,IAC7B,CAAC,EACA,KAAK,GAAG;AAGX,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AAGjB,YAAQ,YAAY;AAAA,QAChB;AAAA,UACE;AAAA;AAAA;AAIN,aAAS,KAAK,YAAY,OAAO;AAIjC,UAAM,WAAW,SAAS,cAAc,WAAW;AACnD,UAAM,eAAe,MAAM;AACzB,YAAMA,WAAU,SAAS,eAAe,gBAAgB;AACxD,UAAIA,YAAW,UAAU;AACvB,cAAM,mBAAmB,CAAC,SAAS,YAAY;AAC/C,cAAM,kBAAkB,CAAC,SAAS,aAAa;AAC/C,QAAAA,SAAQ,YAAY;AAAA,YAChB;AAAA,cACE;AAAA,sBACQ;AAAA,qBACD;AAAA;AAAA;AAAA,MAGf;AAAA,IACF;AAEA,yCAAU,iBAAiB,UAAU;AAGrC,WAAO,MAAM;AApEjB;AAqEM,qBAAS,eAAe,gBAAgB,MAAxC,mBAA2C;AAC3C,2CAAU,oBAAoB,UAAU;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,iBAAiB,wBAAwB,CAAC;AAChD;","names":["styleEl"]}
@@ -1,13 +0,0 @@
1
- import {
2
- arraysAreEqual
3
- } from "./chunk-YLFAIYRY.mjs";
4
-
5
- // src/types/base/editor-autocomplete-state.ts
6
- function areEqual_autocompleteState(prev, next) {
7
- return prev.cursorPoint.offset === next.cursorPoint.offset && arraysAreEqual(prev.cursorPoint.path, next.cursorPoint.path) && prev.textBeforeCursor === next.textBeforeCursor && prev.textAfterCursor === next.textAfterCursor;
8
- }
9
-
10
- export {
11
- areEqual_autocompleteState
12
- };
13
- //# sourceMappingURL=chunk-AJ5OMEXM.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/base/editor-autocomplete-state.ts"],"sourcesContent":["import { BasePoint } from \"slate\";\nimport { arraysAreEqual } from \"../../lib/utils\";\n\nexport interface EditorAutocompleteState {\n cursorPoint: BasePoint;\n textBeforeCursor: string;\n textAfterCursor: string;\n}\n\nexport function areEqual_autocompleteState(\n prev: EditorAutocompleteState,\n next: EditorAutocompleteState,\n) {\n return (\n prev.cursorPoint.offset === next.cursorPoint.offset &&\n arraysAreEqual(prev.cursorPoint.path, next.cursorPoint.path) &&\n prev.textBeforeCursor === next.textBeforeCursor &&\n prev.textAfterCursor === next.textAfterCursor\n );\n}\n"],"mappings":";;;;;AASO,SAAS,2BACd,MACA,MACA;AACA,SACE,KAAK,YAAY,WAAW,KAAK,YAAY,UAC7C,eAAe,KAAK,YAAY,MAAM,KAAK,YAAY,IAAI,KAC3D,KAAK,qBAAqB,KAAK,oBAC/B,KAAK,oBAAoB,KAAK;AAElC;","names":[]}
@@ -1,265 +0,0 @@
1
- import {
2
- useAddBrandingCss
3
- } from "./chunk-7LSRNPNI.mjs";
4
- import {
5
- useAutosuggestions
6
- } from "./chunk-23Q6A46J.mjs";
7
- import {
8
- useCopilotTextareaEditor
9
- } from "./chunk-DRV2FOHZ.mjs";
10
- import {
11
- usePopulateCopilotTextareaRef
12
- } from "./chunk-QJNFNPWH.mjs";
13
- import {
14
- makeRenderElementFunction
15
- } from "./chunk-7L6GIHDM.mjs";
16
- import {
17
- makeRenderPlaceholderFunction
18
- } from "./chunk-XW3ICO4S.mjs";
19
- import {
20
- TrackerTextEditedSinceLastCursorMovement
21
- } from "./chunk-LQ2OWQU7.mjs";
22
- import {
23
- addAutocompletionsToEditor
24
- } from "./chunk-2C7O2EVM.mjs";
25
- import {
26
- clearAutocompletionsFromEditor
27
- } from "./chunk-GQN2HYFJ.mjs";
28
- import {
29
- replaceEditorText
30
- } from "./chunk-5UNJXFUO.mjs";
31
- import {
32
- defaultBaseAutosuggestionsConfig
33
- } from "./chunk-4CVSOOJY.mjs";
34
- import {
35
- HoveringToolbar
36
- } from "./chunk-EVEUQINY.mjs";
37
- import {
38
- HoveringEditorProvider,
39
- useHoveringEditorContext
40
- } from "./chunk-LYB4B6MK.mjs";
41
- import {
42
- getFullEditorTextWithNewlines,
43
- getTextAroundCollapsedCursor
44
- } from "./chunk-ECR45NSD.mjs";
45
- import {
46
- __objRest,
47
- __spreadProps,
48
- __spreadValues
49
- } from "./chunk-MRXNTQOX.mjs";
50
-
51
- // src/components/base-copilot-textarea/base-copilot-textarea.tsx
52
- import React, { useCallback, useEffect, useMemo, useState } from "react";
53
- import { Editor } from "slate";
54
- import { Editable, Slate } from "slate-react";
55
- import { twMerge } from "tailwind-merge";
56
- import { jsx, jsxs } from "react/jsx-runtime";
57
- var BaseCopilotTextarea = React.forwardRef(
58
- (props, ref) => {
59
- return /* @__PURE__ */ jsx(HoveringEditorProvider, { children: /* @__PURE__ */ jsx(BaseCopilotTextareaWithHoveringContext, __spreadProps(__spreadValues({}, props), { ref })) });
60
- }
61
- );
62
- var BaseCopilotTextareaWithHoveringContext = React.forwardRef(
63
- (props, ref) => {
64
- const autosuggestionsConfig = __spreadValues(__spreadValues({}, defaultBaseAutosuggestionsConfig), props.baseAutosuggestionsConfig);
65
- const valueOnInitialRender = useMemo(() => {
66
- var _a2;
67
- return (_a2 = props.value) != null ? _a2 : "";
68
- }, []);
69
- const [lastKnownFullEditorText, setLastKnownFullEditorText] = useState(valueOnInitialRender);
70
- const [cursorMovedSinceLastTextChange, setCursorMovedSinceLastTextChange] = useState(false);
71
- const initialValue = useMemo(() => {
72
- return [
73
- {
74
- type: "paragraph",
75
- children: [{ text: valueOnInitialRender }]
76
- }
77
- ];
78
- }, [valueOnInitialRender]);
79
- const editor = useCopilotTextareaEditor();
80
- const { isDisplayed: hoveringEditorIsDisplayed, setIsDisplayed: setHoveringEditorIsDisplayed } = useHoveringEditorContext();
81
- const insertText = useCallback(
82
- (autosuggestion) => {
83
- Editor.insertText(editor, autosuggestion.text, {
84
- at: autosuggestion.point
85
- });
86
- },
87
- [editor]
88
- );
89
- const shouldDisableAutosuggestions = (
90
- // textarea is manually disabled:
91
- autosuggestionsConfig.disabled || // hovering editor is displayed:
92
- hoveringEditorIsDisplayed || // the cursor has moved since the last text change AND we are configured to disable autosuggestions in this case:
93
- cursorMovedSinceLastTextChange && autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText
94
- );
95
- const {
96
- currentAutocompleteSuggestion,
97
- onChangeHandler: onChangeHandlerForAutocomplete,
98
- onKeyDownHandler: onKeyDownHandlerForAutocomplete,
99
- onTouchStartHandler: onTouchStartHandlerForAutocomplete
100
- } = useAutosuggestions(
101
- autosuggestionsConfig.debounceTime,
102
- autosuggestionsConfig.shouldAcceptAutosuggestionOnKeyPress,
103
- autosuggestionsConfig.shouldAcceptAutosuggestionOnTouch,
104
- autosuggestionsConfig.apiConfig.autosuggestionsFunction,
105
- insertText,
106
- autosuggestionsConfig.disableWhenEmpty,
107
- shouldDisableAutosuggestions
108
- );
109
- const onKeyDownHandlerForHoveringEditor = useCallback(
110
- (event) => {
111
- var _a2;
112
- if (autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress(event, (_a2 = props.shortcut) != null ? _a2 : "k")) {
113
- event.preventDefault();
114
- setHoveringEditorIsDisplayed(!hoveringEditorIsDisplayed);
115
- }
116
- },
117
- [
118
- hoveringEditorIsDisplayed,
119
- setHoveringEditorIsDisplayed,
120
- autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress
121
- ]
122
- );
123
- useEffect(() => {
124
- clearAutocompletionsFromEditor(editor);
125
- if (currentAutocompleteSuggestion) {
126
- addAutocompletionsToEditor(
127
- editor,
128
- currentAutocompleteSuggestion.text,
129
- currentAutocompleteSuggestion.point
130
- );
131
- }
132
- }, [currentAutocompleteSuggestion]);
133
- const suggestionStyleAugmented = useMemo(() => {
134
- return __spreadValues({
135
- fontStyle: "italic",
136
- color: "gray"
137
- }, props.suggestionsStyle);
138
- }, [props.suggestionsStyle]);
139
- const renderElementMemoized = useMemo(() => {
140
- return makeRenderElementFunction(suggestionStyleAugmented);
141
- }, [suggestionStyleAugmented]);
142
- const renderPlaceholderMemoized = useMemo(() => {
143
- const placeholderStyleSlatejsOverrides = {
144
- top: void 0
145
- };
146
- const placeholderStyleAugmented = __spreadValues(__spreadValues({}, placeholderStyleSlatejsOverrides), props.placeholderStyle);
147
- return makeRenderPlaceholderFunction(placeholderStyleAugmented);
148
- }, [props.placeholderStyle]);
149
- useEffect(() => {
150
- var _a2, _b;
151
- if (props.value === lastKnownFullEditorText) {
152
- return;
153
- }
154
- setLastKnownFullEditorText((_a2 = props.value) != null ? _a2 : "");
155
- replaceEditorText(editor, (_b = props.value) != null ? _b : "");
156
- }, [props.value]);
157
- const _a = props, {
158
- placeholderStyle,
159
- value,
160
- hoverMenuClassname,
161
- onValueChange,
162
- baseAutosuggestionsConfig: autosuggestionsConfigFromProps,
163
- className,
164
- onChange,
165
- onKeyDown,
166
- disableBranding
167
- } = _a, propsToForward = __objRest(_a, [
168
- "placeholderStyle",
169
- "value",
170
- "hoverMenuClassname",
171
- "onValueChange",
172
- "baseAutosuggestionsConfig",
173
- "className",
174
- "onChange",
175
- "onKeyDown",
176
- "disableBranding"
177
- ]);
178
- useAddBrandingCss(suggestionStyleAugmented, disableBranding);
179
- usePopulateCopilotTextareaRef(editor, ref);
180
- const moddedClassName = (() => {
181
- const baseClassName = "copilot-textarea";
182
- const brandingClass = disableBranding ? "no-branding" : "with-branding";
183
- const defaultTailwindClassName = "bg-white overflow-y-auto resize-y";
184
- const mergedClassName = twMerge(defaultTailwindClassName, className != null ? className : "");
185
- return `${baseClassName} ${brandingClass} ${mergedClassName}`;
186
- })();
187
- return /* @__PURE__ */ jsxs(
188
- Slate,
189
- {
190
- editor,
191
- initialValue,
192
- onChange: (value2) => {
193
- var _a2, _b;
194
- const newEditorState = getTextAroundCollapsedCursor(editor);
195
- const fullEditorText = newEditorState ? newEditorState.textBeforeCursor + newEditorState.textAfterCursor : getFullEditorTextWithNewlines(editor);
196
- setLastKnownFullEditorText((prev) => {
197
- if (prev !== fullEditorText) {
198
- setCursorMovedSinceLastTextChange(false);
199
- }
200
- return fullEditorText;
201
- });
202
- onChangeHandlerForAutocomplete(newEditorState);
203
- (_a2 = props.onValueChange) == null ? void 0 : _a2.call(props, fullEditorText);
204
- (_b = props.onChange) == null ? void 0 : _b.call(props, makeSemiFakeReactTextAreaEvent(fullEditorText));
205
- },
206
- children: [
207
- /* @__PURE__ */ jsx(
208
- TrackerTextEditedSinceLastCursorMovement,
209
- {
210
- setCursorMovedSinceLastTextChange
211
- }
212
- ),
213
- /* @__PURE__ */ jsx(
214
- HoveringToolbar,
215
- {
216
- apiConfig: autosuggestionsConfig.apiConfig,
217
- contextCategories: autosuggestionsConfig.contextCategories,
218
- hoverMenuClassname
219
- }
220
- ),
221
- /* @__PURE__ */ jsx(
222
- Editable,
223
- __spreadValues({
224
- renderElement: renderElementMemoized,
225
- renderPlaceholder: renderPlaceholderMemoized,
226
- onKeyDown: (event) => {
227
- var _a2;
228
- onKeyDownHandlerForHoveringEditor(event);
229
- onKeyDownHandlerForAutocomplete(event);
230
- (_a2 = props.onKeyDown) == null ? void 0 : _a2.call(props, event);
231
- },
232
- onTouchStart: (event) => {
233
- onTouchStartHandlerForAutocomplete(event);
234
- },
235
- "data-testid": "copilot-textarea-editable",
236
- className: moddedClassName,
237
- onBlur: (ev) => {
238
- var _a2;
239
- (_a2 = props.onBlur) == null ? void 0 : _a2.call(props, ev);
240
- clearAutocompletionsFromEditor(editor);
241
- }
242
- }, propsToForward)
243
- )
244
- ]
245
- }
246
- );
247
- }
248
- );
249
- function makeSemiFakeReactTextAreaEvent(currentText) {
250
- return {
251
- target: {
252
- value: currentText,
253
- type: "copilot-textarea"
254
- },
255
- currentTarget: {
256
- value: currentText,
257
- type: "copilot-textarea"
258
- }
259
- };
260
- }
261
-
262
- export {
263
- BaseCopilotTextarea
264
- };
265
- //# sourceMappingURL=chunk-AMQQHDWZ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/base-copilot-textarea-implementation/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor\";\nimport { usePopulateCopilotTextareaRef } from \"../../hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundCollapsedCursor,\n} from \"../../lib/get-text-around-cursor\";\nimport { addAutocompletionsToEditor } from \"../../lib/slatejs-edits/add-autocompletions\";\nimport { clearAutocompletionsFromEditor } from \"../../lib/slatejs-edits/clear-autocompletions\";\nimport { replaceEditorText } from \"../../lib/slatejs-edits/replace-text\";\nimport { BaseAutosuggestionsConfig, defaultBaseAutosuggestionsConfig } from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport \"./base-copilot-textarea.css\";\nimport { HoveringToolbar } from \"../hovering-toolbar/hovering-toolbar\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\nimport {\n HoveringEditorProvider,\n useHoveringEditorContext,\n} from \"../hovering-toolbar/hovering-editor-provider\";\nimport { TrackerTextEditedSinceLastCursorMovement } from \"./track-cursor-moved-since-last-text-change\";\n\n/**\n * Purpose: to be used as the `ref` type for `CopilotTextarea` and `BaseCopilotTextarea`.\n *\n * This interface extends `HTMLElement`, and is the subset of `HTMLTextAreaElement` that \"actually matters\".\n * It provides the core functionality that consumers of `HTMLTextAreaElement` need 99.9% of the time:\n * - `value`: the current value of the textarea\n * - `focus`: make the textarea focused\n * - `blur`: make the textarea unfocused\n */\nexport interface HTMLCopilotTextAreaElement extends HTMLElement {\n /**\n * The current value of the textarea.\n */\n value: string;\n\n /**\n * focus on the textarea\n */\n focus: () => void;\n\n /**\n * unfocus the textarea.\n *\n * Called `blur` for syntactic compatibility with `HTMLTextAreaElement`.\n */\n blur: () => void;\n}\n\n/**\n * Not intended for direct use. Use CopilotTextarea instead.\n *\n * The `BaseCopilotTextarea` includes the basic UX component,\n * without the business logic / AI logic that makes the content useful and coherent.\n *\n * It is useful if you want to build your own backend, with fully custom business logic\n * for figuring out which contnet to fill in.\n */\nexport const BaseCopilotTextarea = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n return (\n <HoveringEditorProvider>\n <BaseCopilotTextareaWithHoveringContext {...props} ref={ref} />\n </HoveringEditorProvider>\n );\n },\n);\n\n/**\n * Not intended for direct use. Use `CopilotTextarea` instead.\n *\n * This is the private core of the `BaseCopilotTextarea` component.\n * For practical purposes the implementation is cleaner assuming containment in a `HoveringEditorProviderContext`.\n *\n * Therefore we separate the core logic into this component,\n * and wrap it in a `HoveringEditorProviderContext` in `BaseCopilotTextarea`.\n */\nconst BaseCopilotTextareaWithHoveringContext = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n const autosuggestionsConfig: BaseAutosuggestionsConfig = {\n ...defaultBaseAutosuggestionsConfig,\n ...props.baseAutosuggestionsConfig,\n };\n\n const valueOnInitialRender = useMemo(() => props.value ?? \"\", []);\n const [lastKnownFullEditorText, setLastKnownFullEditorText] = useState(valueOnInitialRender);\n const [cursorMovedSinceLastTextChange, setCursorMovedSinceLastTextChange] = useState(false);\n\n // // When the editor text changes, we want to reset the `textEditedSinceLastCursorMovement` state.\n // useEffect(() => {\n // setCursorMovedSinceLastTextChange(false);\n // }, [lastKnownFullEditorText]);\n\n const initialValue: Descendant[] = useMemo(() => {\n return [\n {\n type: \"paragraph\",\n children: [{ text: valueOnInitialRender }],\n },\n ];\n }, [valueOnInitialRender]);\n\n const editor = useCopilotTextareaEditor();\n\n const { isDisplayed: hoveringEditorIsDisplayed, setIsDisplayed: setHoveringEditorIsDisplayed } =\n useHoveringEditorContext();\n\n const insertText = useCallback(\n (autosuggestion: AutosuggestionState) => {\n Editor.insertText(editor, autosuggestion.text, {\n at: autosuggestion.point,\n });\n },\n [editor],\n );\n\n const shouldDisableAutosuggestions =\n // textarea is manually disabled:\n autosuggestionsConfig.disabled ||\n // hovering editor is displayed:\n hoveringEditorIsDisplayed ||\n // the cursor has moved since the last text change AND we are configured to disable autosuggestions in this case:\n (cursorMovedSinceLastTextChange &&\n autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText);\n\n const {\n currentAutocompleteSuggestion,\n onChangeHandler: onChangeHandlerForAutocomplete,\n onKeyDownHandler: onKeyDownHandlerForAutocomplete,\n onTouchStartHandler: onTouchStartHandlerForAutocomplete,\n } = useAutosuggestions(\n autosuggestionsConfig.debounceTime,\n autosuggestionsConfig.shouldAcceptAutosuggestionOnKeyPress,\n autosuggestionsConfig.shouldAcceptAutosuggestionOnTouch,\n autosuggestionsConfig.apiConfig.autosuggestionsFunction,\n insertText,\n autosuggestionsConfig.disableWhenEmpty,\n shouldDisableAutosuggestions,\n );\n\n const onKeyDownHandlerForHoveringEditor = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress(event, props.shortcut ?? \"k\")\n ) {\n event.preventDefault();\n setHoveringEditorIsDisplayed(!hoveringEditorIsDisplayed);\n }\n },\n [\n hoveringEditorIsDisplayed,\n setHoveringEditorIsDisplayed,\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress,\n ],\n );\n\n // sync autosuggestions state with the editor\n useEffect(() => {\n clearAutocompletionsFromEditor(editor);\n if (currentAutocompleteSuggestion) {\n addAutocompletionsToEditor(\n editor,\n currentAutocompleteSuggestion.text,\n currentAutocompleteSuggestion.point,\n );\n }\n }, [currentAutocompleteSuggestion]);\n\n const suggestionStyleAugmented: React.CSSProperties = useMemo(() => {\n return {\n fontStyle: \"italic\",\n color: \"gray\",\n ...props.suggestionsStyle,\n };\n }, [props.suggestionsStyle]);\n\n const renderElementMemoized = useMemo(() => {\n return makeRenderElementFunction(suggestionStyleAugmented);\n }, [suggestionStyleAugmented]);\n\n const renderPlaceholderMemoized = useMemo(() => {\n // For some reason slateJS specifies a top value of 0, which makes for strange styling. We override this here.\n const placeholderStyleSlatejsOverrides: React.CSSProperties = {\n top: undefined,\n };\n\n const placeholderStyleAugmented: React.CSSProperties = {\n ...placeholderStyleSlatejsOverrides,\n ...props.placeholderStyle,\n };\n\n return makeRenderPlaceholderFunction(placeholderStyleAugmented);\n }, [props.placeholderStyle]);\n\n // update the editor text, but only when the value changes from outside the component\n useEffect(() => {\n if (props.value === lastKnownFullEditorText) {\n return;\n }\n\n setLastKnownFullEditorText(props.value ?? \"\");\n replaceEditorText(editor, props.value ?? \"\");\n }, [props.value]);\n\n // separate into TextareaHTMLAttributes<HTMLDivElement> and CopilotTextareaProps\n const {\n placeholderStyle,\n value,\n hoverMenuClassname,\n onValueChange,\n baseAutosuggestionsConfig: autosuggestionsConfigFromProps,\n className,\n onChange,\n onKeyDown,\n disableBranding,\n ...propsToForward\n } = props;\n\n useAddBrandingCss(suggestionStyleAugmented, disableBranding);\n usePopulateCopilotTextareaRef(editor, ref);\n\n const moddedClassName = (() => {\n const baseClassName = \"copilot-textarea\";\n const brandingClass = disableBranding ? \"no-branding\" : \"with-branding\";\n const defaultTailwindClassName = \"bg-white overflow-y-auto resize-y\";\n const mergedClassName = twMerge(defaultTailwindClassName, className ?? \"\");\n return `${baseClassName} ${brandingClass} ${mergedClassName}`;\n })();\n\n return (\n <Slate\n editor={editor}\n initialValue={initialValue}\n onChange={(value) => {\n const newEditorState = getTextAroundCollapsedCursor(editor);\n\n const fullEditorText = newEditorState\n ? newEditorState.textBeforeCursor + newEditorState.textAfterCursor\n : getFullEditorTextWithNewlines(editor); // we don't double-parse the editor. When `newEditorState` is null, we didn't parse the editor yet.\n\n setLastKnownFullEditorText((prev) => {\n if (prev !== fullEditorText) {\n setCursorMovedSinceLastTextChange(false);\n }\n return fullEditorText;\n });\n onChangeHandlerForAutocomplete(newEditorState);\n\n props.onValueChange?.(fullEditorText);\n props.onChange?.(makeSemiFakeReactTextAreaEvent(fullEditorText));\n }}\n >\n <TrackerTextEditedSinceLastCursorMovement\n setCursorMovedSinceLastTextChange={setCursorMovedSinceLastTextChange}\n />\n <HoveringToolbar\n apiConfig={autosuggestionsConfig.apiConfig}\n contextCategories={autosuggestionsConfig.contextCategories}\n hoverMenuClassname={hoverMenuClassname}\n />\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={(event) => {\n onKeyDownHandlerForHoveringEditor(event); // forward the event for internal use\n onKeyDownHandlerForAutocomplete(event); // forward the event for internal use\n props.onKeyDown?.(event); // forward the event for external use\n }}\n onTouchStart={(event) => {\n onTouchStartHandlerForAutocomplete(event); // forward the event for internal use\n }}\n data-testid=\"copilot-textarea-editable\"\n className={moddedClassName}\n onBlur={(ev) => {\n // clear autocompletion on blur\n props.onBlur?.(ev);\n clearAutocompletionsFromEditor(editor);\n }}\n {...propsToForward}\n />\n </Slate>\n );\n },\n);\n\n// Consumers of <textarea> expect a `onChange: (React.ChangeEvent<HTMLTextAreaElement>) => void` event handler to be passed in.\n// This is *extremely* common, and we want to support it.\n//\n// We can't support the full functionality, but in 99% of cases, the consumer only cares about the `event.target.value` property --\n// that's how they get the new value of the textarea.\n//\n// So, the tradeoff we are making is minimizing compiler complaint, with a small chance of runtime error.\n// The alternative would be defining a different onChange entrypoint (we actually do have that in `onValueChange`),\n// And starting to explain subtleties to users the moment they try to use the component for the first time for very basic functionality.\n//\n// If this proves problematic, we can always revisit this decision.\nfunction makeSemiFakeReactTextAreaEvent(\n currentText: string,\n): React.ChangeEvent<HTMLTextAreaElement> {\n return {\n target: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n currentTarget: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n } as React.ChangeEvent<HTMLTextAreaElement>;\n}\n"],"mappings":"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","names":["_a","value"]}
@@ -1,229 +0,0 @@
1
- import {
2
- IncludedFilesPreview
3
- } from "./chunk-KMVGEY7Q.mjs";
4
- import {
5
- SourceSearchBox
6
- } from "./chunk-WGWQRALG.mjs";
7
- import {
8
- use_autosize_textarea_default
9
- } from "./chunk-3PQ7GSFE.mjs";
10
- import {
11
- Button
12
- } from "./chunk-4PDYALMP.mjs";
13
- import {
14
- Label
15
- } from "./chunk-D47EKHIF.mjs";
16
- import {
17
- useHoveringEditorContext
18
- } from "./chunk-LYB4B6MK.mjs";
19
- import {
20
- streamPromiseFlatten
21
- } from "./chunk-2QDCE7PD.mjs";
22
- import {
23
- __async
24
- } from "./chunk-MRXNTQOX.mjs";
25
-
26
- // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx
27
- import { useCopilotContext } from "@copilotkit/react-core";
28
- import { useCallback, useEffect, useRef, useState } from "react";
29
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
30
- var HoveringInsertionPromptBoxCore = ({
31
- performInsertion,
32
- state,
33
- insertionOrEditingFunction,
34
- contextCategories
35
- }) => {
36
- const { getDocumentsContext } = useCopilotContext();
37
- const [editSuggestion, setEditSuggestion] = useState("");
38
- const [suggestionIsLoading, setSuggestionIsLoading] = useState(false);
39
- const [adjustmentPrompt, setAdjustmentPrompt] = useState("");
40
- const [generatingSuggestion, setGeneratingSuggestion] = useState(
41
- null
42
- );
43
- const adjustmentTextAreaRef = useRef(null);
44
- const suggestionTextAreaRef = useRef(null);
45
- const [filePointers, setFilePointers] = useState([]);
46
- const [suggestedFiles, setSuggestedFiles] = useState([]);
47
- useEffect(() => {
48
- setSuggestedFiles(getDocumentsContext(contextCategories));
49
- }, [contextCategories, getDocumentsContext]);
50
- use_autosize_textarea_default(suggestionTextAreaRef, editSuggestion || "");
51
- use_autosize_textarea_default(adjustmentTextAreaRef, adjustmentPrompt || "");
52
- useEffect(() => {
53
- var _a;
54
- (_a = adjustmentTextAreaRef.current) == null ? void 0 : _a.focus();
55
- }, []);
56
- useEffect(() => {
57
- if (!generatingSuggestion) {
58
- return;
59
- }
60
- if (generatingSuggestion.locked) {
61
- return;
62
- }
63
- setEditSuggestion("");
64
- const reader = generatingSuggestion.getReader();
65
- const read = () => __async(void 0, null, function* () {
66
- setSuggestionIsLoading(true);
67
- while (true) {
68
- const { done, value } = yield reader.read();
69
- if (done) {
70
- break;
71
- }
72
- setEditSuggestion((prev) => {
73
- const newSuggestion = prev + value;
74
- if (suggestionTextAreaRef.current) {
75
- suggestionTextAreaRef.current.scrollTop = suggestionTextAreaRef.current.scrollHeight;
76
- }
77
- return newSuggestion;
78
- });
79
- }
80
- setSuggestionIsLoading(false);
81
- });
82
- read();
83
- return () => {
84
- const releaseLockIfNotClosed = () => __async(void 0, null, function* () {
85
- try {
86
- yield reader.closed;
87
- } catch (e) {
88
- reader.releaseLock();
89
- }
90
- });
91
- releaseLockIfNotClosed();
92
- };
93
- }, [generatingSuggestion]);
94
- const beginGeneratingAdjustment = useCallback(() => __async(void 0, null, function* () {
95
- if (!adjustmentPrompt.trim()) {
96
- return;
97
- }
98
- let modificationState = state.editorState;
99
- if (editSuggestion !== "") {
100
- modificationState.selectedText = editSuggestion;
101
- }
102
- const adjustmentSuggestionTextStreamPromise = insertionOrEditingFunction(
103
- modificationState,
104
- adjustmentPrompt,
105
- filePointers,
106
- new AbortController().signal
107
- );
108
- const adjustmentSuggestionTextStream = streamPromiseFlatten(
109
- adjustmentSuggestionTextStreamPromise
110
- );
111
- setGeneratingSuggestion(adjustmentSuggestionTextStream);
112
- }), [
113
- adjustmentPrompt,
114
- editSuggestion,
115
- state.editorState,
116
- insertionOrEditingFunction,
117
- filePointers
118
- ]);
119
- const isLoading = suggestionIsLoading;
120
- const textToEdit = editSuggestion || state.editorState.selectedText;
121
- const adjustmentLabel = textToEdit === "" ? "Describe the text you want to insert" : "Describe adjustments to the suggested text";
122
- const placeholder = textToEdit === "" ? "e.g. 'summarize the client's top 3 pain-points from @CallTranscript'" : "e.g. 'make it more formal', 'be more specific', ...";
123
- const { setIsDisplayed } = useHoveringEditorContext();
124
- const AdjustmentPromptComponent = /* @__PURE__ */ jsxs(Fragment, { children: [
125
- /* @__PURE__ */ jsx(Label, { className: "", children: adjustmentLabel }),
126
- /* @__PURE__ */ jsxs("div", { className: "relative w-full flex items-center", children: [
127
- /* @__PURE__ */ jsx(
128
- "textarea",
129
- {
130
- "data-testid": "adjustment-prompt",
131
- disabled: suggestionIsLoading,
132
- ref: adjustmentTextAreaRef,
133
- value: adjustmentPrompt,
134
- onChange: (e) => setAdjustmentPrompt(e.target.value),
135
- onKeyDown: (e) => {
136
- if (e.key === "Enter" && e.shiftKey) {
137
- e.preventDefault();
138
- setAdjustmentPrompt(adjustmentPrompt + "\n");
139
- } else if (e.key === "Enter") {
140
- e.preventDefault();
141
- beginGeneratingAdjustment();
142
- } else if (e.key == "Escape") {
143
- e.preventDefault();
144
- setIsDisplayed(false);
145
- }
146
- },
147
- placeholder,
148
- style: { minHeight: "3rem" },
149
- className: "w-full bg-slate-100 h-auto h-min-14 text-sm p-2 rounded-md resize-none overflow-visible focus:outline-none focus:ring-0 focus:border-non pr-[3rem]",
150
- rows: 1
151
- }
152
- ),
153
- /* @__PURE__ */ jsx(
154
- "button",
155
- {
156
- onClick: beginGeneratingAdjustment,
157
- className: "absolute right-2 bg-blue-500 text-white w-8 h-8 rounded-full flex items-center justify-center",
158
- "data-testid": "generate-button",
159
- children: /* @__PURE__ */ jsx("i", { className: "material-icons", children: "arrow_forward" })
160
- }
161
- )
162
- ] })
163
- ] });
164
- const SuggestionComponent = /* @__PURE__ */ jsxs(Fragment, { children: [
165
- /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-end w-full", children: [
166
- /* @__PURE__ */ jsx(Label, { className: "mt-4", children: "Suggested:" }),
167
- /* @__PURE__ */ jsx("div", { className: "ml-auto", children: isLoading && /* @__PURE__ */ jsx("div", { className: "flex justify-center items-center", children: /* @__PURE__ */ jsx(
168
- "div",
169
- {
170
- className: "inline-block h-4 w-4 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]",
171
- role: "status",
172
- children: /* @__PURE__ */ jsx("span", { className: "!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]", children: "Loading..." })
173
- }
174
- ) }) })
175
- ] }),
176
- /* @__PURE__ */ jsx(
177
- "textarea",
178
- {
179
- "data-testid": "suggestion-result",
180
- ref: suggestionTextAreaRef,
181
- value: editSuggestion,
182
- disabled: suggestionIsLoading,
183
- onChange: (e) => setEditSuggestion(e.target.value),
184
- className: "w-full text-base p-2 border border-gray-300 rounded-md resize-none bg-green-50",
185
- style: { overflow: "auto", maxHeight: "10em" }
186
- }
187
- )
188
- ] });
189
- const SubmitComponent = /* @__PURE__ */ jsx("div", { className: "flex w-full gap-4 justify-start", children: /* @__PURE__ */ jsxs(
190
- Button,
191
- {
192
- "data-testid": "insert-button",
193
- className: " bg-green-700 text-white",
194
- onClick: () => {
195
- performInsertion(editSuggestion);
196
- },
197
- children: [
198
- "Insert ",
199
- /* @__PURE__ */ jsx("i", { className: "material-icons", children: "check" })
200
- ]
201
- }
202
- ) });
203
- const sourceSearchCandidate = adjustmentPrompt.split(" ").pop();
204
- const sourceSearchWord = (sourceSearchCandidate == null ? void 0 : sourceSearchCandidate.startsWith("@")) ? sourceSearchCandidate.slice(1) : void 0;
205
- return /* @__PURE__ */ jsxs("div", { className: "w-full flex flex-col items-start relative gap-2", children: [
206
- AdjustmentPromptComponent,
207
- filePointers.length > 0 && /* @__PURE__ */ jsx(IncludedFilesPreview, { includedFiles: filePointers, setIncludedFiles: setFilePointers }),
208
- sourceSearchWord !== void 0 && /* @__PURE__ */ jsx(
209
- SourceSearchBox,
210
- {
211
- searchTerm: sourceSearchWord,
212
- suggestedFiles,
213
- onSelectedFile: (filePointer) => {
214
- var _a;
215
- setAdjustmentPrompt(adjustmentPrompt.replace(new RegExp(`@${sourceSearchWord}$`), ""));
216
- setFilePointers((prev) => [...prev, filePointer]);
217
- (_a = adjustmentTextAreaRef.current) == null ? void 0 : _a.focus();
218
- }
219
- }
220
- ),
221
- generatingSuggestion ? SuggestionComponent : null,
222
- generatingSuggestion ? SubmitComponent : null
223
- ] });
224
- };
225
-
226
- export {
227
- HoveringInsertionPromptBoxCore
228
- };
229
- //# sourceMappingURL=chunk-BZBSPKHQ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx"],"sourcesContent":["import useAutosizeTextArea from \"../../../hooks/misc/use-autosize-textarea\";\nimport {\n EditingEditorState,\n Generator_InsertionOrEditingSuggestion,\n} from \"../../../types/base/autosuggestions-bare-function\";\nimport { SourceSearchBox } from \"../../source-search-box/source-search-box\";\nimport { DocumentPointer, useCopilotContext } from \"@copilotkit/react-core\";\nimport { Button } from \"../../ui/button\";\nimport { Label } from \"../../ui/label\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { streamPromiseFlatten } from \"../../../lib/stream-promise-flatten\";\nimport { IncludedFilesPreview } from \"./included-files-preview\";\nimport { useHoveringEditorContext } from \"../hovering-editor-provider\";\n\nexport type SuggestionState = {\n editorState: EditingEditorState;\n};\n\nexport interface HoveringInsertionPromptBoxCoreProps {\n state: SuggestionState;\n performInsertion: (insertedText: string) => void;\n insertionOrEditingFunction: Generator_InsertionOrEditingSuggestion;\n contextCategories: string[];\n}\n\nexport const HoveringInsertionPromptBoxCore = ({\n performInsertion,\n state,\n insertionOrEditingFunction,\n contextCategories,\n}: HoveringInsertionPromptBoxCoreProps) => {\n const { getDocumentsContext } = useCopilotContext();\n\n const [editSuggestion, setEditSuggestion] = useState<string>(\"\");\n const [suggestionIsLoading, setSuggestionIsLoading] = useState<boolean>(false);\n\n const [adjustmentPrompt, setAdjustmentPrompt] = useState<string>(\"\");\n\n const [generatingSuggestion, setGeneratingSuggestion] = useState<ReadableStream<string> | null>(\n null,\n );\n\n const adjustmentTextAreaRef = useRef<HTMLTextAreaElement>(null);\n const suggestionTextAreaRef = useRef<HTMLTextAreaElement>(null);\n\n const [filePointers, setFilePointers] = useState<DocumentPointer[]>([]);\n\n const [suggestedFiles, setSuggestedFiles] = useState<DocumentPointer[]>([]);\n useEffect(() => {\n setSuggestedFiles(getDocumentsContext(contextCategories));\n }, [contextCategories, getDocumentsContext]);\n\n useAutosizeTextArea(suggestionTextAreaRef, editSuggestion || \"\");\n useAutosizeTextArea(adjustmentTextAreaRef, adjustmentPrompt || \"\");\n\n // initially focus on the adjustment prompt text area\n useEffect(() => {\n adjustmentTextAreaRef.current?.focus();\n }, []);\n\n // continuously read the generating suggestion stream and update the edit suggestion\n useEffect(() => {\n // if no generating suggestion, do nothing\n if (!generatingSuggestion) {\n return;\n }\n\n // Check if the stream is already locked (i.e. already reading from it)\n if (generatingSuggestion.locked) {\n return;\n }\n\n // reset the edit suggestion\n setEditSuggestion(\"\");\n\n // read the generating suggestion stream and continuously update the edit suggestion\n const reader = generatingSuggestion.getReader();\n const read = async () => {\n setSuggestionIsLoading(true);\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n setEditSuggestion((prev) => {\n const newSuggestion = prev + value;\n\n // Scroll to the bottom of the textarea. We call this here to make sure scroll-to-bottom is synchronous with the state update.\n if (suggestionTextAreaRef.current) {\n suggestionTextAreaRef.current.scrollTop = suggestionTextAreaRef.current.scrollHeight;\n }\n return newSuggestion;\n });\n }\n\n setSuggestionIsLoading(false);\n };\n read();\n\n return () => {\n // release the lock if the reader is not closed on unmount\n const releaseLockIfNotClosed = async () => {\n try {\n await reader.closed;\n } catch {\n reader.releaseLock();\n }\n };\n\n releaseLockIfNotClosed();\n };\n }, [generatingSuggestion]);\n\n // generate an adjustment to the completed text, based on the adjustment prompt\n const beginGeneratingAdjustment = useCallback(async () => {\n // don't generate text if the prompt is empty\n if (!adjustmentPrompt.trim()) {\n return;\n }\n\n // editor state includes the text being edited, and the text before/after the selection\n // if the current edit suggestion is not empty, then use *it* as the \"selected text\" - instead of the editor state's selected text\n let modificationState = state.editorState;\n if (editSuggestion !== \"\") {\n modificationState.selectedText = editSuggestion;\n }\n\n // generate the adjustment suggestion\n const adjustmentSuggestionTextStreamPromise = insertionOrEditingFunction(\n modificationState,\n adjustmentPrompt,\n filePointers,\n new AbortController().signal,\n );\n const adjustmentSuggestionTextStream = streamPromiseFlatten(\n adjustmentSuggestionTextStreamPromise,\n );\n\n setGeneratingSuggestion(adjustmentSuggestionTextStream);\n }, [\n adjustmentPrompt,\n editSuggestion,\n state.editorState,\n insertionOrEditingFunction,\n filePointers,\n ]);\n\n const isLoading = suggestionIsLoading;\n\n const textToEdit = editSuggestion || state.editorState.selectedText;\n const adjustmentLabel =\n textToEdit === \"\"\n ? \"Describe the text you want to insert\"\n : \"Describe adjustments to the suggested text\";\n const placeholder =\n textToEdit === \"\"\n ? \"e.g. 'summarize the client's top 3 pain-points from @CallTranscript'\"\n : \"e.g. 'make it more formal', 'be more specific', ...\";\n\n const { setIsDisplayed } = useHoveringEditorContext();\n\n const AdjustmentPromptComponent = (\n <>\n <Label className=\"\">{adjustmentLabel}</Label>\n <div className=\"relative w-full flex items-center\">\n <textarea\n data-testid=\"adjustment-prompt\"\n disabled={suggestionIsLoading}\n ref={adjustmentTextAreaRef}\n value={adjustmentPrompt}\n onChange={(e) => setAdjustmentPrompt(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && e.shiftKey) {\n e.preventDefault();\n setAdjustmentPrompt(adjustmentPrompt + \"\\n\");\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n beginGeneratingAdjustment();\n } else if (e.key == \"Escape\") {\n e.preventDefault();\n setIsDisplayed(false);\n }\n }}\n placeholder={placeholder}\n style={{ minHeight: \"3rem\" }}\n className=\"w-full bg-slate-100 h-auto h-min-14 text-sm p-2 rounded-md resize-none overflow-visible focus:outline-none focus:ring-0 focus:border-non pr-[3rem]\"\n rows={1}\n />\n <button\n onClick={beginGeneratingAdjustment}\n className=\"absolute right-2 bg-blue-500 text-white w-8 h-8 rounded-full flex items-center justify-center\"\n data-testid=\"generate-button\"\n >\n <i className=\"material-icons\">arrow_forward</i>\n </button>\n </div>\n </>\n );\n\n const SuggestionComponent = (\n <>\n <div className=\"flex justify-between items-end w-full\">\n <Label className=\"mt-4\">Suggested:</Label>\n <div className=\"ml-auto\">\n {isLoading && (\n <div className=\"flex justify-center items-center\">\n <div\n className=\"inline-block h-4 w-4 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]\"\n role=\"status\"\n >\n <span className=\"!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]\">\n Loading...\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n <textarea\n data-testid=\"suggestion-result\"\n ref={suggestionTextAreaRef}\n value={editSuggestion}\n disabled={suggestionIsLoading}\n onChange={(e) => setEditSuggestion(e.target.value)}\n className=\"w-full text-base p-2 border border-gray-300 rounded-md resize-none bg-green-50\"\n style={{ overflow: \"auto\", maxHeight: \"10em\" }}\n />\n </>\n );\n\n const SubmitComponent = (\n <div className=\"flex w-full gap-4 justify-start\">\n <Button\n data-testid=\"insert-button\"\n className=\" bg-green-700 text-white\"\n onClick={() => {\n performInsertion(editSuggestion);\n }}\n >\n Insert <i className=\"material-icons\">check</i>\n </Button>\n </div>\n );\n\n // show source search if the last word in the adjustment prompt BEGINS with an @\n const sourceSearchCandidate = adjustmentPrompt.split(\" \").pop();\n // if the candidate is @someCandidate, then 'someCandidate', otherwise undefined\n const sourceSearchWord = sourceSearchCandidate?.startsWith(\"@\")\n ? sourceSearchCandidate.slice(1)\n : undefined;\n\n return (\n <div className=\"w-full flex flex-col items-start relative gap-2\">\n {AdjustmentPromptComponent}\n {filePointers.length > 0 && (\n <IncludedFilesPreview includedFiles={filePointers} setIncludedFiles={setFilePointers} />\n )}\n {sourceSearchWord !== undefined && (\n <SourceSearchBox\n searchTerm={sourceSearchWord}\n suggestedFiles={suggestedFiles}\n onSelectedFile={(filePointer) => {\n setAdjustmentPrompt(adjustmentPrompt.replace(new RegExp(`@${sourceSearchWord}$`), \"\"));\n setFilePointers((prev) => [...prev, filePointer]);\n\n // focus back on the adjustment prompt, and move the cursor to the end\n adjustmentTextAreaRef.current?.focus();\n }}\n />\n )}\n {generatingSuggestion ? SuggestionComponent : null}\n {generatingSuggestion ? SubmitComponent : null}\n </div>\n );\n};\n"],"mappings":"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","names":[]}