@copilotkit/react-textarea 0.19.0-alpha.4 → 0.19.0-alpha.5

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 (277) hide show
  1. package/.turbo/turbo-build.log +129 -190
  2. package/CHANGELOG.md +10 -0
  3. package/dist/chunk-2NURR2DX.mjs +47 -0
  4. package/dist/chunk-2NURR2DX.mjs.map +1 -0
  5. package/dist/chunk-4HSJ5XUO.mjs +107 -0
  6. package/dist/chunk-4HSJ5XUO.mjs.map +1 -0
  7. package/dist/chunk-4S5ZJH3I.mjs +18 -0
  8. package/dist/chunk-4S5ZJH3I.mjs.map +1 -0
  9. package/dist/chunk-55EGOC5T.mjs +87 -0
  10. package/dist/chunk-55EGOC5T.mjs.map +1 -0
  11. package/dist/chunk-5ARCOTW3.mjs +34 -0
  12. package/dist/chunk-5ARCOTW3.mjs.map +1 -0
  13. package/dist/chunk-5EJ5XOGP.mjs +22 -0
  14. package/dist/chunk-5EJ5XOGP.mjs.map +1 -0
  15. package/dist/chunk-5FO6ISW4.mjs +3 -0
  16. package/dist/chunk-5FO6ISW4.mjs.map +1 -0
  17. package/dist/chunk-6Z6Z2K7O.mjs +20 -0
  18. package/dist/chunk-6Z6Z2K7O.mjs.map +1 -0
  19. package/dist/chunk-7PSM4AUU.mjs +201 -0
  20. package/dist/chunk-7PSM4AUU.mjs.map +1 -0
  21. package/dist/chunk-A2RRLD23.mjs +69 -0
  22. package/dist/chunk-A2RRLD23.mjs.map +1 -0
  23. package/dist/chunk-CSGFJU3L.mjs +65 -0
  24. package/dist/chunk-CSGFJU3L.mjs.map +1 -0
  25. package/dist/chunk-D7SEV5PR.mjs +12 -0
  26. package/dist/chunk-D7SEV5PR.mjs.map +1 -0
  27. package/dist/chunk-DE5K76I2.mjs +3 -0
  28. package/dist/chunk-DE5K76I2.mjs.map +1 -0
  29. package/dist/chunk-F3MHL6ZY.mjs +25 -0
  30. package/dist/chunk-F3MHL6ZY.mjs.map +1 -0
  31. package/dist/chunk-FN7GDKKG.mjs +29 -0
  32. package/dist/chunk-FN7GDKKG.mjs.map +1 -0
  33. package/dist/chunk-GQJYEVBT.mjs +461 -0
  34. package/dist/chunk-GQJYEVBT.mjs.map +1 -0
  35. package/dist/chunk-H4VKQGVU.mjs +3 -0
  36. package/dist/chunk-H4VKQGVU.mjs.map +1 -0
  37. package/dist/chunk-HAFHLU4N.mjs +55 -0
  38. package/dist/chunk-HAFHLU4N.mjs.map +1 -0
  39. package/dist/chunk-IU3WTXLQ.mjs +3 -0
  40. package/dist/chunk-IU3WTXLQ.mjs.map +1 -0
  41. package/dist/chunk-IXJ2HCOA.mjs +101 -0
  42. package/dist/chunk-IXJ2HCOA.mjs.map +1 -0
  43. package/dist/chunk-JAFCXEPU.mjs +10 -0
  44. package/dist/chunk-JAFCXEPU.mjs.map +1 -0
  45. package/dist/chunk-KCHYD3EB.mjs +107 -0
  46. package/dist/chunk-KCHYD3EB.mjs.map +1 -0
  47. package/dist/chunk-KGKLUWKW.mjs +47 -0
  48. package/dist/chunk-KGKLUWKW.mjs.map +1 -0
  49. package/dist/chunk-L7VVZH4Q.mjs +3 -0
  50. package/dist/chunk-L7VVZH4Q.mjs.map +1 -0
  51. package/dist/chunk-LNAIMEB2.mjs +34 -0
  52. package/dist/chunk-LNAIMEB2.mjs.map +1 -0
  53. package/dist/chunk-MMVDU6DF.mjs +3 -0
  54. package/dist/chunk-MMVDU6DF.mjs.map +1 -0
  55. package/dist/chunk-MPME5BW2.mjs +59 -0
  56. package/dist/chunk-MPME5BW2.mjs.map +1 -0
  57. package/dist/chunk-MRXNTQOX.mjs +55 -0
  58. package/dist/chunk-MRXNTQOX.mjs.map +1 -0
  59. package/dist/chunk-ND5PXTAW.mjs +17 -0
  60. package/dist/chunk-ND5PXTAW.mjs.map +1 -0
  61. package/dist/chunk-NKW5OU2S.mjs +33 -0
  62. package/dist/chunk-NKW5OU2S.mjs.map +1 -0
  63. package/dist/chunk-O5OWT5GE.mjs +114 -0
  64. package/dist/chunk-O5OWT5GE.mjs.map +1 -0
  65. package/dist/chunk-OD7ZMOVE.mjs +45 -0
  66. package/dist/chunk-OD7ZMOVE.mjs.map +1 -0
  67. package/dist/chunk-OELUUJZY.mjs +16 -0
  68. package/dist/chunk-OELUUJZY.mjs.map +1 -0
  69. package/dist/chunk-PHFEZQTN.mjs +44 -0
  70. package/dist/chunk-PHFEZQTN.mjs.map +1 -0
  71. package/dist/chunk-QL2GYGG5.mjs +19 -0
  72. package/dist/chunk-QL2GYGG5.mjs.map +1 -0
  73. package/dist/chunk-RQHOUUXQ.mjs +29 -0
  74. package/dist/chunk-RQHOUUXQ.mjs.map +1 -0
  75. package/dist/chunk-UHD44NC5.mjs +101 -0
  76. package/dist/chunk-UHD44NC5.mjs.map +1 -0
  77. package/dist/chunk-VBIJPE3H.mjs +108 -0
  78. package/dist/chunk-VBIJPE3H.mjs.map +1 -0
  79. package/dist/chunk-WADHCMPK.mjs +3 -0
  80. package/dist/chunk-WADHCMPK.mjs.map +1 -0
  81. package/dist/chunk-WJHSY5T6.mjs +3 -0
  82. package/dist/chunk-WJHSY5T6.mjs.map +1 -0
  83. package/dist/chunk-WJYQWL4I.mjs +27 -0
  84. package/dist/chunk-WJYQWL4I.mjs.map +1 -0
  85. package/dist/chunk-XA7M72ZO.mjs +106 -0
  86. package/dist/chunk-XA7M72ZO.mjs.map +1 -0
  87. package/dist/chunk-XDT7BF3V.mjs +81 -0
  88. package/dist/chunk-XDT7BF3V.mjs.map +1 -0
  89. package/dist/chunk-XHUMROEY.mjs +91 -0
  90. package/dist/chunk-XHUMROEY.mjs.map +1 -0
  91. package/dist/chunk-YQU7WG7T.mjs +83 -0
  92. package/dist/chunk-YQU7WG7T.mjs.map +1 -0
  93. package/dist/chunk-YTOPHPSG.mjs +45 -0
  94. package/dist/chunk-YTOPHPSG.mjs.map +1 -0
  95. package/dist/chunk-YW3REYX6.mjs +23 -0
  96. package/dist/chunk-YW3REYX6.mjs.map +1 -0
  97. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +33 -1870
  98. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map +1 -1
  99. package/dist/components/base-copilot-textarea/render-element.mjs +3 -52
  100. package/dist/components/base-copilot-textarea/render-element.mjs.map +1 -1
  101. package/dist/components/base-copilot-textarea/render-placeholder.mjs +3 -46
  102. package/dist/components/base-copilot-textarea/render-placeholder.mjs.map +1 -1
  103. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs +4 -86
  104. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs.map +1 -1
  105. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs +3 -57
  106. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs.map +1 -1
  107. package/dist/components/copilot-textarea/copilot-textarea.mjs +43 -2339
  108. package/dist/components/copilot-textarea/copilot-textarea.mjs.map +1 -1
  109. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs +3 -22
  110. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs.map +1 -1
  111. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs +3 -125
  112. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map +1 -1
  113. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +16 -1015
  114. package/dist/components/hovering-toolbar/hovering-toolbar.mjs.map +1 -1
  115. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +10 -721
  116. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs.map +1 -1
  117. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +11 -734
  118. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs.map +1 -1
  119. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +12 -734
  120. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map +1 -1
  121. package/dist/components/index.mjs +44 -2340
  122. package/dist/components/index.mjs.map +1 -1
  123. package/dist/components/manual-ui/chip-with-icon.mjs +6 -5
  124. package/dist/components/manual-ui/chip-with-icon.mjs.map +1 -1
  125. package/dist/components/source-search-box/source-search-box.mjs +10 -323
  126. package/dist/components/source-search-box/source-search-box.mjs.map +1 -1
  127. package/dist/components/ui/button.mjs +4 -88
  128. package/dist/components/ui/button.mjs.map +1 -1
  129. package/dist/components/ui/card.mjs +7 -53
  130. package/dist/components/ui/card.mjs.map +1 -1
  131. package/dist/components/ui/command.mjs +5 -266
  132. package/dist/components/ui/command.mjs.map +1 -1
  133. package/dist/components/ui/dialog.mjs +4 -164
  134. package/dist/components/ui/dialog.mjs.map +1 -1
  135. package/dist/components/ui/label.mjs +4 -63
  136. package/dist/components/ui/label.mjs.map +1 -1
  137. package/dist/components/ui/separator.mjs +8 -50
  138. package/dist/components/ui/separator.mjs.map +1 -1
  139. package/dist/components/ui/textarea.mjs +7 -48
  140. package/dist/components/ui/textarea.mjs.map +1 -1
  141. package/dist/context/index.mjs +2 -0
  142. package/dist/context/index.mjs.map +1 -1
  143. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs +6 -168
  144. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs.map +1 -1
  145. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs +4 -168
  146. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs.map +1 -1
  147. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs +5 -155
  148. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map +1 -1
  149. package/dist/hooks/index.mjs +2 -0
  150. package/dist/hooks/index.mjs.map +1 -1
  151. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs +4 -90
  152. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs.map +1 -1
  153. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs +4 -143
  154. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs.map +1 -1
  155. package/dist/hooks/misc/use-autosize-textarea.mjs +3 -15
  156. package/dist/hooks/misc/use-autosize-textarea.mjs.map +1 -1
  157. package/dist/index.mjs +48 -2343
  158. package/dist/index.mjs.map +1 -1
  159. package/dist/lib/debouncer.mjs +3 -51
  160. package/dist/lib/debouncer.mjs.map +1 -1
  161. package/dist/lib/editor-to-text.mjs +3 -43
  162. package/dist/lib/editor-to-text.mjs.map +1 -1
  163. package/dist/lib/get-text-around-cursor.mjs +3 -109
  164. package/dist/lib/get-text-around-cursor.mjs.map +1 -1
  165. package/dist/lib/retry.mjs +3 -17
  166. package/dist/lib/retry.mjs.map +1 -1
  167. package/dist/lib/slatejs-edits/add-autocompletions.mjs +3 -25
  168. package/dist/lib/slatejs-edits/add-autocompletions.mjs.map +1 -1
  169. package/dist/lib/slatejs-edits/clear-autocompletions.mjs +3 -23
  170. package/dist/lib/slatejs-edits/clear-autocompletions.mjs.map +1 -1
  171. package/dist/lib/slatejs-edits/replace-text.mjs +3 -27
  172. package/dist/lib/slatejs-edits/replace-text.mjs.map +1 -1
  173. package/dist/lib/slatejs-edits/with-partial-history.mjs +3 -106
  174. package/dist/lib/slatejs-edits/with-partial-history.mjs.map +1 -1
  175. package/dist/lib/stream-promise-flatten.mjs +3 -47
  176. package/dist/lib/stream-promise-flatten.mjs.map +1 -1
  177. package/dist/lib/utils.mjs +3 -71
  178. package/dist/lib/utils.mjs.map +1 -1
  179. package/dist/lib/utils.test.mjs +1 -0
  180. package/dist/lib/utils.test.mjs.map +1 -1
  181. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs +2 -0
  182. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs.map +1 -1
  183. package/dist/types/autosuggestions-config/autosuggestions-config.mjs +9 -312
  184. package/dist/types/autosuggestions-config/autosuggestions-config.mjs.map +1 -1
  185. package/dist/types/autosuggestions-config/editing-api-config.mjs +4 -155
  186. package/dist/types/autosuggestions-config/editing-api-config.mjs.map +1 -1
  187. package/dist/types/autosuggestions-config/index.mjs +10 -313
  188. package/dist/types/autosuggestions-config/index.mjs.map +1 -1
  189. package/dist/types/autosuggestions-config/insertions-api-config.mjs +4 -149
  190. package/dist/types/autosuggestions-config/insertions-api-config.mjs.map +1 -1
  191. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs +3 -71
  192. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs.map +1 -1
  193. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs +2 -0
  194. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs.map +1 -1
  195. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs +2 -0
  196. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs.map +1 -1
  197. package/dist/types/autosuggestions-config/suggestions-api-config.mjs +4 -137
  198. package/dist/types/autosuggestions-config/suggestions-api-config.mjs.map +1 -1
  199. package/dist/types/base/autosuggestion-state.mjs +2 -0
  200. package/dist/types/base/autosuggestion-state.mjs.map +1 -1
  201. package/dist/types/base/autosuggestions-bare-function.mjs +2 -0
  202. package/dist/types/base/autosuggestions-bare-function.mjs.map +1 -1
  203. package/dist/types/base/base-autosuggestions-config.mjs +3 -11
  204. package/dist/types/base/base-autosuggestions-config.mjs.map +1 -1
  205. package/dist/types/base/base-copilot-textarea-props.mjs +2 -0
  206. package/dist/types/base/base-copilot-textarea-props.mjs.map +1 -1
  207. package/dist/types/base/custom-editor.mjs +2 -0
  208. package/dist/types/base/custom-editor.mjs.map +1 -1
  209. package/dist/types/base/editor-autocomplete-state.mjs +4 -17
  210. package/dist/types/base/editor-autocomplete-state.mjs.map +1 -1
  211. package/dist/types/base/index.mjs +4 -11
  212. package/dist/types/base/index.mjs.map +1 -1
  213. package/dist/types/html-copilot-textarea-element.mjs +2 -0
  214. package/dist/types/html-copilot-textarea-element.mjs.map +1 -1
  215. package/dist/types/index.mjs +12 -314
  216. package/dist/types/index.mjs.map +1 -1
  217. package/package.json +3 -3
  218. package/dist/components/base-copilot-textarea/base-copilot-textarea.d.ts +0 -13
  219. package/dist/components/base-copilot-textarea/render-element.d.ts +0 -6
  220. package/dist/components/base-copilot-textarea/render-placeholder.d.ts +0 -6
  221. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.d.ts +0 -6
  222. package/dist/components/base-copilot-textarea/use-add-branding-css.d.ts +0 -3
  223. package/dist/components/copilot-textarea/copilot-textarea.d.ts +0 -20
  224. package/dist/components/hovering-toolbar/hovering-editor-provider.d.ts +0 -13
  225. package/dist/components/hovering-toolbar/hovering-toolbar-components.d.ts +0 -18
  226. package/dist/components/hovering-toolbar/hovering-toolbar.d.ts +0 -8
  227. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.d.ts +0 -29
  228. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.d.ts +0 -12
  229. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.d.ts +0 -3
  230. package/dist/components/index.d.ts +0 -15
  231. package/dist/components/manual-ui/chip-with-icon.d.ts +0 -10
  232. package/dist/components/source-search-box/source-search-box.d.ts +0 -17
  233. package/dist/components/ui/button.d.ts +0 -14
  234. package/dist/components/ui/card.d.ts +0 -10
  235. package/dist/components/ui/command.d.ts +0 -48
  236. package/dist/components/ui/dialog.d.ts +0 -18
  237. package/dist/components/ui/label.d.ts +0 -8
  238. package/dist/components/ui/separator.d.ts +0 -6
  239. package/dist/components/ui/textarea.d.ts +0 -7
  240. package/dist/context/index.d.ts +0 -1
  241. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.d.ts +0 -13
  242. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.d.ts +0 -8
  243. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts +0 -7
  244. package/dist/hooks/index.d.ts +0 -1
  245. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.d.ts +0 -22
  246. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.d.ts +0 -23
  247. package/dist/hooks/misc/use-autosize-textarea.d.ts +0 -5
  248. package/dist/index.d.ts +0 -15
  249. package/dist/lib/debouncer.d.ts +0 -11
  250. package/dist/lib/editor-to-text.d.ts +0 -7
  251. package/dist/lib/get-text-around-cursor.d.ts +0 -15
  252. package/dist/lib/retry.d.ts +0 -3
  253. package/dist/lib/slatejs-edits/add-autocompletions.d.ts +0 -8
  254. package/dist/lib/slatejs-edits/clear-autocompletions.d.ts +0 -8
  255. package/dist/lib/slatejs-edits/replace-text.d.ts +0 -5
  256. package/dist/lib/slatejs-edits/with-partial-history.d.ts +0 -10
  257. package/dist/lib/stream-promise-flatten.d.ts +0 -3
  258. package/dist/lib/utils.d.ts +0 -10
  259. package/dist/lib/utils.test.d.ts +0 -1
  260. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.d.ts +0 -25
  261. package/dist/types/autosuggestions-config/autosuggestions-config.d.ts +0 -20
  262. package/dist/types/autosuggestions-config/editing-api-config.d.ts +0 -17
  263. package/dist/types/autosuggestions-config/index.d.ts +0 -10
  264. package/dist/types/autosuggestions-config/insertions-api-config.d.ts +0 -17
  265. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.d.ts +0 -26
  266. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.d.ts +0 -3
  267. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.d.ts +0 -7
  268. package/dist/types/autosuggestions-config/suggestions-api-config.d.ts +0 -17
  269. package/dist/types/base/autosuggestion-state.d.ts +0 -8
  270. package/dist/types/base/autosuggestions-bare-function.d.ts +0 -17
  271. package/dist/types/base/base-autosuggestions-config.d.ts +0 -14
  272. package/dist/types/base/base-copilot-textarea-props.d.ts +0 -40
  273. package/dist/types/base/custom-editor.d.ts +0 -29
  274. package/dist/types/base/editor-autocomplete-state.d.ts +0 -10
  275. package/dist/types/base/index.d.ts +0 -4
  276. package/dist/types/html-copilot-textarea-element.d.ts +0 -7
  277. package/dist/types/index.d.ts +0 -13
@@ -0,0 +1,114 @@
1
+ import { cn } from './chunk-KGKLUWKW.mjs';
2
+ import { __objRest, __spreadValues, __spreadProps } from './chunk-MRXNTQOX.mjs';
3
+ import * as React from 'react';
4
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
5
+ import { X } from 'lucide-react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var Dialog = DialogPrimitive.Root;
9
+ var DialogTrigger = DialogPrimitive.Trigger;
10
+ var DialogPortal = (_a) => {
11
+ var _b = _a, {
12
+ className
13
+ } = _b, props = __objRest(_b, [
14
+ "className"
15
+ ]);
16
+ return /* @__PURE__ */ jsx(DialogPrimitive.Portal, __spreadValues({
17
+ className: cn(className)
18
+ }, props));
19
+ };
20
+ DialogPortal.displayName = DialogPrimitive.Portal.displayName;
21
+ var DialogOverlay = React.forwardRef((_a, ref) => {
22
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
23
+ return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, __spreadValues({
24
+ ref,
25
+ className: cn(
26
+ "fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
27
+ className
28
+ )
29
+ }, props));
30
+ });
31
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
32
+ var DialogContent = React.forwardRef((_a, ref) => {
33
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
34
+ return /* @__PURE__ */ jsxs(DialogPortal, {
35
+ children: [
36
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
37
+ /* @__PURE__ */ jsxs(DialogPrimitive.Content, __spreadProps(__spreadValues({
38
+ ref,
39
+ className: cn(
40
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full",
41
+ className
42
+ )
43
+ }, props), {
44
+ children: [
45
+ children,
46
+ /* @__PURE__ */ jsxs(DialogPrimitive.Close, {
47
+ className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
48
+ children: [
49
+ /* @__PURE__ */ jsx(X, {
50
+ className: "h-4 w-4"
51
+ }),
52
+ /* @__PURE__ */ jsx("span", {
53
+ className: "sr-only",
54
+ children: "Close"
55
+ })
56
+ ]
57
+ })
58
+ ]
59
+ }))
60
+ ]
61
+ });
62
+ });
63
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
64
+ var DialogHeader = (_a) => {
65
+ var _b = _a, {
66
+ className
67
+ } = _b, props = __objRest(_b, [
68
+ "className"
69
+ ]);
70
+ return /* @__PURE__ */ jsx("div", __spreadValues({
71
+ className: cn(
72
+ "flex flex-col space-y-1.5 text-center sm:text-left",
73
+ className
74
+ )
75
+ }, props));
76
+ };
77
+ DialogHeader.displayName = "DialogHeader";
78
+ var DialogFooter = (_a) => {
79
+ var _b = _a, {
80
+ className
81
+ } = _b, props = __objRest(_b, [
82
+ "className"
83
+ ]);
84
+ return /* @__PURE__ */ jsx("div", __spreadValues({
85
+ className: cn(
86
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
87
+ className
88
+ )
89
+ }, props));
90
+ };
91
+ DialogFooter.displayName = "DialogFooter";
92
+ var DialogTitle = React.forwardRef((_a, ref) => {
93
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
94
+ return /* @__PURE__ */ jsx(DialogPrimitive.Title, __spreadValues({
95
+ ref,
96
+ className: cn(
97
+ "text-lg font-semibold leading-none tracking-tight",
98
+ className
99
+ )
100
+ }, props));
101
+ });
102
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
103
+ var DialogDescription = React.forwardRef((_a, ref) => {
104
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
105
+ return /* @__PURE__ */ jsx(DialogPrimitive.Description, __spreadValues({
106
+ ref,
107
+ className: cn("text-sm text-muted-foreground", className)
108
+ }, props));
109
+ });
110
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
111
+
112
+ export { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger };
113
+ //# sourceMappingURL=out.js.map
114
+ //# sourceMappingURL=chunk-O5OWT5GE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/dialog.tsx"],"names":[],"mappings":";;;;;;;;;;AAEA,YAAY,WAAW;AACvB,YAAY,qBAAqB;AACjC,SAAS,SAAS;AAYhB,cAkCI,YAlCJ;AAhBF;AAQA,IAAM,SAAyB;AAE/B,IAAM,gBAAgC;AAEtC,IAAM,eAAe,CAAC,OAGgB;AAHhB,eACpB;AAAA;AAAA,EAbF,IAYsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,6BAAiB,wBAAhB;AAAA,IAAuB,WAAW,GAAG,SAAS;AAAA,KAAO,MAAO;AAAA;AAE/D,aAAa,cAA8B,uBAAO;AAElD,IAAM,gBAAsB,iBAG1B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAvBL,IAuBG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAiB,yBAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA,CACD;AACD,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,gBAAsB,iBAG1B,CAAC,IAAmC,QAAK;AAAxC,eAAE,aAAW,SAtChB,IAsCG,IAA0B,kBAA1B,IAA0B,CAAxB,aAAW;AACd,8BAAC;AAAA,IACC;AAAA,0BAAC,iBAAc;AAAA,MACf,qBAAiB,yBAAhB;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,SACI,QANL;AAAA,QAQE;AAAA;AAAA,UACD,qBAAiB,uBAAhB;AAAA,YAAsB,WAAU;AAAA,YAC/B;AAAA,kCAAC;AAAA,gBAAE,WAAU;AAAA,eAAU;AAAA,cACvB,oBAAC;AAAA,gBAAK,WAAU;AAAA,gBAAU;AAAA,eAAK;AAAA;AAAA,WACjC;AAAA;AAAA,QACF;AAAA;AAAA,GACF;AAAA,CACD;AACD,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,eAAe,CAAC,OAGmB;AAHnB,eACpB;AAAA;AAAA,EA5DF,IA2DsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,6BAAC;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA;AAEF,aAAa,cAAc;AAE3B,IAAM,eAAe,CAAC,OAGmB;AAHnB,eACpB;AAAA;AAAA,EA1EF,IAyEsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,6BAAC;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA;AAEF,aAAa,cAAc;AAE3B,IAAM,cAAoB,iBAGxB,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA1FL,IA0FG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAiB,uBAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,KACI,MACN;AAAA,CACD;AACD,YAAY,cAA8B,sBAAM;AAEhD,IAAM,oBAA0B,iBAG9B,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAzGL,IAyGG,IAAgB,kBAAhB,IAAgB,CAAd;AACH,6BAAiB,6BAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,KACpD,MACN;AAAA,CACD;AACD,kBAAkB,cAA8B,4BAAY","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = ({\n className,\n ...props\n}: DialogPrimitive.DialogPortalProps) => (\n <DialogPrimitive.Portal className={cn(className)} {...props} />\n);\nDialogPortal.displayName = DialogPrimitive.Portal.displayName;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n"]}
@@ -0,0 +1,45 @@
1
+ import { editorToText } from './chunk-YTOPHPSG.mjs';
2
+ import { useEffect, useRef } from 'react';
3
+ import { useSlateSelector } from 'slate-react';
4
+ import { Range } from 'slate';
5
+ import { jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ function TrackerTextEditedSinceLastCursorMovement(props) {
8
+ const cursorState = useSlateSelector((state) => ({
9
+ selection: state.selection,
10
+ text: editorToText(state)
11
+ }));
12
+ const previousState = usePrevious(cursorState);
13
+ useEffect(() => {
14
+ if (!previousState) {
15
+ return;
16
+ }
17
+ if (cursorChangedWithoutTextChanged(previousState, cursorState)) {
18
+ props.setCursorMovedSinceLastTextChange(true);
19
+ }
20
+ }, [props.setCursorMovedSinceLastTextChange, cursorState]);
21
+ return /* @__PURE__ */ jsx(Fragment, {});
22
+ }
23
+ var cursorChangedWithoutTextChanged = (prev, next) => {
24
+ const isSelectionChanged = !isSelectionEqual(prev.selection, next.selection);
25
+ const isTextSame = prev.text === next.text;
26
+ return isSelectionChanged && isTextSame;
27
+ };
28
+ var isSelectionEqual = (a, b) => {
29
+ if (!a && !b)
30
+ return true;
31
+ if (!a || !b)
32
+ return false;
33
+ return Range.equals(a, b);
34
+ };
35
+ function usePrevious(value) {
36
+ const ref = useRef();
37
+ useEffect(() => {
38
+ ref.current = value;
39
+ });
40
+ return ref.current;
41
+ }
42
+
43
+ export { TrackerTextEditedSinceLastCursorMovement };
44
+ //# sourceMappingURL=out.js.map
45
+ //# sourceMappingURL=chunk-OD7ZMOVE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.tsx"],"names":[],"mappings":";;;;;AAAA,SAAgB,WAAW,cAAc;AAEzC,SAAS,wBAAwB;AACjC,SAAS,aAAa;AA0Bb;AApBF,SAAS,yCACd,OACa;AACb,QAAM,cAAmC,iBAAiB,CAAC,WAAW;AAAA,IACpE,WAAW,MAAM;AAAA,IACjB,MAAM,aAAa,KAAK;AAAA,EAC1B,EAAE;AAEF,QAAM,gBAAgB,YAAY,WAAW;AAE7C,YAAU,MAAM;AACd,QAAI,CAAC,eAAe;AAClB;AAAA,IACF;AAEA,QAAI,gCAAgC,eAAe,WAAW,GAAG;AAC/D,YAAM,kCAAkC,IAAI;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,MAAM,mCAAmC,WAAW,CAAC;AAEzD,SAAO,gCAAE;AACX;AAKA,IAAM,kCAAkC,CACtC,MACA,SACG;AAEH,QAAM,qBAAqB,CAAC,iBAAiB,KAAK,WAAW,KAAK,SAAS;AAG3E,QAAM,aAAa,KAAK,SAAS,KAAK;AAEtC,SAAO,sBAAsB;AAC/B;AACA,IAAM,mBAAmB,CAAC,GAAkB,MAAqB;AAC/D,MAAI,CAAC,KAAK,CAAC;AAAG,WAAO;AACrB,MAAI,CAAC,KAAK,CAAC;AAAG,WAAO;AACrB,SAAO,MAAM,OAAO,GAAG,CAAC;AAC1B;AACA,SAAS,YAAe,OAAyB;AAC/C,QAAM,MAAM,OAAU;AAEtB,YAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AAED,SAAO,IAAI;AACb","sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport { BaseSelection } from \"slate\";\nimport { useSlateSelector } from \"slate-react\";\nimport { Range } from \"slate\";\nimport { editorToText } from \"../../lib/editor-to-text\";\n\ninterface TrackerTextEditedSinceLastCursorMovementProps {\n setCursorMovedSinceLastTextChange: (value: boolean) => void;\n}\nexport function TrackerTextEditedSinceLastCursorMovement(\n props: TrackerTextEditedSinceLastCursorMovementProps\n): JSX.Element {\n const cursorState: RelevantEditorState = useSlateSelector((state) => ({\n selection: state.selection,\n text: editorToText(state),\n }));\n\n const previousState = usePrevious(cursorState);\n\n useEffect(() => {\n if (!previousState) {\n return;\n }\n\n if (cursorChangedWithoutTextChanged(previousState, cursorState)) {\n props.setCursorMovedSinceLastTextChange(true);\n }\n }, [props.setCursorMovedSinceLastTextChange, cursorState]);\n\n return <></>;\n}\ntype RelevantEditorState = {\n selection: BaseSelection;\n text: string;\n};\nconst cursorChangedWithoutTextChanged = (\n prev: RelevantEditorState,\n next: RelevantEditorState\n) => {\n // Check if the selection has changed\n const isSelectionChanged = !isSelectionEqual(prev.selection, next.selection);\n\n // Check if the text content remains the same\n const isTextSame = prev.text === next.text;\n\n return isSelectionChanged && isTextSame;\n};\nconst isSelectionEqual = (a: BaseSelection, b: BaseSelection) => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return Range.equals(a, b);\n};\nfunction usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function makeRenderPlaceholderFunction(placeholderStyle) {
5
+ return (props) => {
6
+ const _a = props.attributes, { style } = _a, restAttributes = __objRest(_a, ["style"]);
7
+ return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({}, restAttributes), {
8
+ style: __spreadValues(__spreadValues({}, style), placeholderStyle),
9
+ children: props.children
10
+ }));
11
+ };
12
+ }
13
+
14
+ export { makeRenderPlaceholderFunction };
15
+ //# sourceMappingURL=out.js.map
16
+ //# sourceMappingURL=chunk-OELUUJZY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/base-copilot-textarea/render-placeholder.tsx"],"names":[],"mappings":";;;;;;;AAaM;AAPC,SAAS,8BACd,kBAC2B;AAC3B,SAAO,CAAC,UAAkC;AACxC,UAAqC,WAAM,YAAnC,QAVZ,IAUyC,IAAnB,2BAAmB,IAAnB,CAAV;AAER,WACE,oBAAC,wCACK,iBADL;AAAA,MAEC,OAAO,kCACF,QACA;AAAA,MAGJ,gBAAM;AAAA,MACT;AAAA,EAEJ;AACF","sourcesContent":["import { RenderElementProps, RenderPlaceholderProps } from \"slate-react\";\n\nexport type RenderPlaceholderFunction = (\n props: RenderPlaceholderProps\n) => JSX.Element;\n\nexport function makeRenderPlaceholderFunction(\n placeholderStyle?: React.CSSProperties\n): RenderPlaceholderFunction {\n return (props: RenderPlaceholderProps) => {\n const { style, ...restAttributes } = props.attributes;\n\n return (\n <div\n {...restAttributes}\n style={{\n ...style,\n ...placeholderStyle,\n }}\n >\n {props.children}\n </div>\n );\n };\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { useMakeStandardAutosuggestionFunction } from './chunk-HAFHLU4N.mjs';
2
+ import { useMakeStandardInsertionOrEditingFunction } from './chunk-VBIJPE3H.mjs';
3
+ import { defaultAutosuggestionsConfig } from './chunk-QL2GYGG5.mjs';
4
+ import { BaseCopilotTextarea } from './chunk-7PSM4AUU.mjs';
5
+ import { __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
6
+ import React from 'react';
7
+ import merge from 'lodash.merge';
8
+ import { jsx, Fragment } from 'react/jsx-runtime';
9
+
10
+ var CopilotTextarea = React.forwardRef(
11
+ (props, ref) => {
12
+ const autosuggestionsConfig = merge(
13
+ defaultAutosuggestionsConfig,
14
+ props.autosuggestionsConfig
15
+ );
16
+ const autosuggestionsFunction = useMakeStandardAutosuggestionFunction(
17
+ autosuggestionsConfig.textareaPurpose,
18
+ autosuggestionsConfig.externalContextCategories,
19
+ autosuggestionsConfig.chatApiConfigs.suggestionsApiConfig
20
+ );
21
+ const insertionOrEditingFunction = useMakeStandardInsertionOrEditingFunction(
22
+ autosuggestionsConfig.textareaPurpose,
23
+ autosuggestionsConfig.externalContextCategories,
24
+ autosuggestionsConfig.chatApiConfigs.insertionApiConfig,
25
+ autosuggestionsConfig.chatApiConfigs.editingApiConfig
26
+ );
27
+ return /* @__PURE__ */ jsx(Fragment, {
28
+ children: /* @__PURE__ */ jsx(BaseCopilotTextarea, __spreadProps(__spreadValues({
29
+ ref
30
+ }, props), {
31
+ baseAutosuggestionsConfig: __spreadProps(__spreadValues({}, autosuggestionsConfig), {
32
+ apiConfig: {
33
+ insertionOrEditingFunction,
34
+ autosuggestionsFunction
35
+ }
36
+ })
37
+ }))
38
+ });
39
+ }
40
+ );
41
+
42
+ export { CopilotTextarea };
43
+ //# sourceMappingURL=out.js.map
44
+ //# sourceMappingURL=chunk-PHFEZQTN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/copilot-textarea/copilot-textarea.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,OAAO,WAAW;AAUlB,OAAO,WAAW;AAmCZ,mBACE,WADF;AAzBC,IAAM,kBAAkB,MAAM;AAAA,EACnC,CACE,OACA,QACgB;AAChB,UAAM,wBAA+C;AAAA,MACnD;AAAA,MACA,MAAM;AAAA,IACR;AAEA,UAAM,0BAA0B;AAAA,MAC9B,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB,eAAe;AAAA,IACvC;AAEA,UAAM,6BACJ;AAAA,MACE,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB,eAAe;AAAA,MACrC,sBAAsB,eAAe;AAAA,IACvC;AAEF,WACE;AAAA,MACE,8BAAC;AAAA,QACC;AAAA,SACI,QAFL;AAAA,QAGC,2BAA2B,iCACtB,wBADsB;AAAA,UAEzB,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACF;AAAA,KACF;AAAA,EAEJ;AACF","sourcesContent":["// This example is for an Editor with `ReactEditor` and `HistoryEditor`\nimport React from \"react\";\nimport { useMakeStandardAutosuggestionFunction } from \"../../hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function\";\nimport { HTMLCopilotTextAreaElement } from \"../../types\";\nimport { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport {\n AutosuggestionsConfig,\n defaultAutosuggestionsConfig,\n} from \"../../types/autosuggestions-config\";\nimport { BaseCopilotTextarea } from \"../base-copilot-textarea/base-copilot-textarea\";\nimport { useMakeStandardInsertionOrEditingFunction } from \"../../hooks/make-autosuggestions-function/use-make-standard-insertion-function\";\nimport merge from \"lodash.merge\";\nimport { AutosuggestionsConfigUserSpecified } from \"../../types/autosuggestions-config/autosuggestions-config-user-specified\";\n\n// Like the base copilot textarea props,\n// but with baseAutosuggestionsConfig replaced with autosuggestionsConfig.\nexport interface CopilotTextareaProps\n extends Omit<BaseCopilotTextareaProps, \"baseAutosuggestionsConfig\"> {\n autosuggestionsConfig: AutosuggestionsConfigUserSpecified;\n}\n\nexport const CopilotTextarea = React.forwardRef(\n (\n props: CopilotTextareaProps,\n ref: React.Ref<HTMLCopilotTextAreaElement>\n ): JSX.Element => {\n const autosuggestionsConfig: AutosuggestionsConfig = merge(\n defaultAutosuggestionsConfig,\n props.autosuggestionsConfig\n );\n\n const autosuggestionsFunction = useMakeStandardAutosuggestionFunction(\n autosuggestionsConfig.textareaPurpose,\n autosuggestionsConfig.externalContextCategories,\n autosuggestionsConfig.chatApiConfigs.suggestionsApiConfig\n );\n\n const insertionOrEditingFunction =\n useMakeStandardInsertionOrEditingFunction(\n autosuggestionsConfig.textareaPurpose,\n autosuggestionsConfig.externalContextCategories,\n autosuggestionsConfig.chatApiConfigs.insertionApiConfig,\n autosuggestionsConfig.chatApiConfigs.editingApiConfig\n );\n\n return (\n <>\n <BaseCopilotTextarea\n ref={ref}\n {...props}\n baseAutosuggestionsConfig={{\n ...autosuggestionsConfig,\n apiConfig: {\n insertionOrEditingFunction: insertionOrEditingFunction,\n autosuggestionsFunction: autosuggestionsFunction,\n },\n }}\n />\n </>\n );\n }\n);\n"]}
@@ -0,0 +1,19 @@
1
+ import { defaultEditingApiConfig } from './chunk-55EGOC5T.mjs';
2
+ import { defaultInsertionsApiConfig } from './chunk-XDT7BF3V.mjs';
3
+ import { defaultSuggestionsApiConfig } from './chunk-A2RRLD23.mjs';
4
+ import { defaultBaseAutosuggestionsConfig } from './chunk-D7SEV5PR.mjs';
5
+ import { __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
6
+
7
+ // src/types/autosuggestions-config/autosuggestions-config.tsx
8
+ var defaultAutosuggestionsConfig = __spreadProps(__spreadValues({}, defaultBaseAutosuggestionsConfig), {
9
+ externalContextCategories: void 0,
10
+ chatApiConfigs: {
11
+ suggestionsApiConfig: defaultSuggestionsApiConfig,
12
+ insertionApiConfig: defaultInsertionsApiConfig,
13
+ editingApiConfig: defaultEditingApiConfig
14
+ }
15
+ });
16
+
17
+ export { defaultAutosuggestionsConfig };
18
+ //# sourceMappingURL=out.js.map
19
+ //# sourceMappingURL=chunk-QL2GYGG5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/autosuggestions-config/autosuggestions-config.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA+BO,IAAM,+BAGT,iCACC,mCADD;AAAA,EAEF,2BAA2B;AAAA,EAC3B,gBAAgB;AAAA,IACd,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,EACpB;AACF","sourcesContent":["import {\n BaseAutosuggestionsConfig,\n defaultBaseAutosuggestionsConfig,\n} from \"../base\";\nimport {\n SuggestionsApiConfig,\n defaultSuggestionsApiConfig,\n} from \"./suggestions-api-config\";\nimport {\n InsertionsApiConfig,\n defaultInsertionsApiConfig,\n} from \"./insertions-api-config\";\nimport { ChatlikeApiEndpoint } from \".\";\nimport {\n EditingApiConfig,\n defaultEditingApiConfig,\n} from \"./editing-api-config\";\n\n// Like the base autosuggestions config, with 2 additional fields:\n// 1. externalContextCategories: string[] | undefined;\n// 2. instead of apiConfigs, we have chatApiConfigs: a higher-level abstraction that uses a ChatGPT-like API endpoint.\nexport interface AutosuggestionsConfig\n extends Omit<BaseAutosuggestionsConfig, \"apiConfig\"> {\n externalContextCategories: string[] | undefined;\n chatApiConfigs: {\n suggestionsApiConfig: SuggestionsApiConfig;\n insertionApiConfig: InsertionsApiConfig;\n editingApiConfig: EditingApiConfig;\n };\n}\n\nexport const defaultAutosuggestionsConfig: Omit<\n AutosuggestionsConfig,\n \"textareaPurpose\" | \"apiEndpoint\"\n> = {\n ...defaultBaseAutosuggestionsConfig,\n externalContextCategories: undefined,\n chatApiConfigs: {\n suggestionsApiConfig: defaultSuggestionsApiConfig,\n insertionApiConfig: defaultInsertionsApiConfig,\n editingApiConfig: defaultEditingApiConfig,\n },\n};\n"]}
@@ -0,0 +1,29 @@
1
+ import { Transforms, Editor } from 'slate';
2
+
3
+ // src/lib/slatejs-edits/replace-text.ts
4
+ function replaceEditorText(editor, newText) {
5
+ Transforms.delete(editor, {
6
+ at: {
7
+ anchor: Editor.start(editor, []),
8
+ focus: Editor.end(editor, [])
9
+ }
10
+ });
11
+ if (newText && newText !== "") {
12
+ Transforms.insertNodes(
13
+ editor,
14
+ [
15
+ {
16
+ type: "paragraph",
17
+ children: [{ text: newText }]
18
+ }
19
+ ],
20
+ {
21
+ at: [0]
22
+ }
23
+ );
24
+ }
25
+ }
26
+
27
+ export { replaceEditorText };
28
+ //# sourceMappingURL=out.js.map
29
+ //# sourceMappingURL=chunk-RQHOUUXQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/slatejs-edits/replace-text.ts"],"names":[],"mappings":";AAAA,SAAS,QAAQ,kBAAkB;AAE5B,SAAS,kBAAkB,QAAgB,SAAiB;AAEjE,aAAW,OAAO,QAAQ;AAAA,IACxB,IAAI;AAAA,MACF,QAAQ,OAAO,MAAM,QAAQ,CAAC,CAAC;AAAA,MAC/B,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAC;AAAA,IAC9B;AAAA,EACF,CAAC;AAGD,MAAI,WAAW,YAAY,IAAI;AAE7B,eAAW;AAAA,MACT;AAAA,MACA;AAAA,QACE;AAAA,UACE,MAAM;AAAA,UACN,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAI,CAAC,CAAC;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF","sourcesContent":["import { Editor, Transforms } from \"slate\";\n\nexport function replaceEditorText(editor: Editor, newText: string) {\n // clear all previous text\n Transforms.delete(editor, {\n at: {\n anchor: Editor.start(editor, []),\n focus: Editor.end(editor, []),\n },\n });\n\n // insert new text\n if (newText && newText !== \"\") {\n // don't insert empty text - results in strange visual behavior\n Transforms.insertNodes(\n editor,\n [\n {\n type: \"paragraph\",\n children: [{ text: newText }],\n },\n ],\n {\n at: [0],\n }\n );\n }\n}\n"]}
@@ -0,0 +1,101 @@
1
+ import { areEqual_autocompleteState } from './chunk-JAFCXEPU.mjs';
2
+ import { nullableCompatibleEqualityCheck } from './chunk-KGKLUWKW.mjs';
3
+ import { Debouncer } from './chunk-NKW5OU2S.mjs';
4
+ import { __async } from './chunk-MRXNTQOX.mjs';
5
+ import { useState, useCallback, useMemo, useEffect } from 'react';
6
+
7
+ function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestionFunction, insertAutocompleteSuggestion, disableWhenEmpty, disabled) {
8
+ const [previousAutocompleteState, setPreviousAutocompleteState] = useState(null);
9
+ const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] = useState(null);
10
+ const awaitForAndAppendSuggestion = useCallback(
11
+ (editorAutocompleteState, abortSignal) => __async(this, null, function* () {
12
+ if (disabled) {
13
+ return;
14
+ }
15
+ if (disableWhenEmpty && editorAutocompleteState.textBeforeCursor === "" && editorAutocompleteState.textAfterCursor === "") {
16
+ return;
17
+ }
18
+ const suggestion = yield autosuggestionFunction(
19
+ editorAutocompleteState,
20
+ abortSignal
21
+ );
22
+ if (!suggestion || abortSignal.aborted) {
23
+ throw new DOMException("Aborted", "AbortError");
24
+ }
25
+ setCurrentAutocompleteSuggestion({
26
+ text: suggestion,
27
+ point: editorAutocompleteState.cursorPoint
28
+ });
29
+ }),
30
+ [
31
+ autosuggestionFunction,
32
+ setCurrentAutocompleteSuggestion,
33
+ disableWhenEmpty,
34
+ disabled
35
+ ]
36
+ );
37
+ const debouncedFunction = useMemo(
38
+ () => new Debouncer(
39
+ debounceTime
40
+ ),
41
+ [debounceTime]
42
+ );
43
+ useEffect(() => {
44
+ return () => {
45
+ debouncedFunction.cancel();
46
+ setCurrentAutocompleteSuggestion(null);
47
+ };
48
+ }, [debouncedFunction, disabled]);
49
+ const onChange = useCallback(
50
+ (newEditorState) => {
51
+ const editorStateHasChanged = !nullableCompatibleEqualityCheck(
52
+ areEqual_autocompleteState,
53
+ previousAutocompleteState,
54
+ newEditorState
55
+ );
56
+ setPreviousAutocompleteState(newEditorState);
57
+ if (!editorStateHasChanged) {
58
+ return;
59
+ }
60
+ setCurrentAutocompleteSuggestion(null);
61
+ if (newEditorState) {
62
+ debouncedFunction.debounce(awaitForAndAppendSuggestion, newEditorState);
63
+ } else {
64
+ debouncedFunction.cancel();
65
+ }
66
+ },
67
+ [
68
+ previousAutocompleteState,
69
+ setPreviousAutocompleteState,
70
+ debouncedFunction,
71
+ awaitForAndAppendSuggestion,
72
+ setCurrentAutocompleteSuggestion
73
+ ]
74
+ );
75
+ const keyDownHandler = useCallback(
76
+ (event) => {
77
+ if (currentAutocompleteSuggestion) {
78
+ if (event.key === acceptAutosuggestionKey) {
79
+ event.preventDefault();
80
+ insertAutocompleteSuggestion(currentAutocompleteSuggestion);
81
+ setCurrentAutocompleteSuggestion(null);
82
+ }
83
+ }
84
+ },
85
+ [
86
+ currentAutocompleteSuggestion,
87
+ setCurrentAutocompleteSuggestion,
88
+ insertAutocompleteSuggestion,
89
+ acceptAutosuggestionKey
90
+ ]
91
+ );
92
+ return {
93
+ currentAutocompleteSuggestion,
94
+ onChangeHandler: onChange,
95
+ onKeyDownHandler: keyDownHandler
96
+ };
97
+ }
98
+
99
+ export { useAutosuggestions };
100
+ //# sourceMappingURL=out.js.map
101
+ //# sourceMappingURL=chunk-UHD44NC5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAgBnD,SAAS,mBACd,cACA,yBACA,wBACA,8BACA,kBACA,UAC0B;AAC1B,QAAM,CAAC,2BAA2B,4BAA4B,IAC5D,SAAyC,IAAI;AAE/C,QAAM,CAAC,+BAA+B,gCAAgC,IACpE,SAAqC,IAAI;AAE3C,QAAM,8BAGe;AAAA,IACnB,CACE,yBACA,gBACG;AAEH,UAAI,UAAU;AACZ;AAAA,MACF;AAEA,UACE,oBACA,wBAAwB,qBAAqB,MAC7C,wBAAwB,oBAAoB,IAC5C;AACA;AAAA,MACF;AAGA,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAGA,UAAI,CAAC,cAAc,YAAY,SAAS;AACtC,cAAM,IAAI,aAAa,WAAW,YAAY;AAAA,MAChD;AAEA,uCAAiC;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO,wBAAwB;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACxB,MACE,IAAI;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,YAAY;AAAA,EACf;AAGA,YAAU,MAAM;AACd,WAAO,MAAM;AACX,wBAAkB,OAAO;AACzB,uCAAiC,IAAI;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,mBAAmB,QAAQ,CAAC;AAEhC,QAAM,WAAW;AAAA,IACf,CAAC,mBAAmD;AAClD,YAAM,wBAAwB,CAAC;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,mCAA6B,cAAc;AAG3C,UAAI,CAAC,uBAAuB;AAC1B;AAAA,MACF;AAGA,uCAAiC,IAAI;AAGrC,UAAI,gBAAgB;AAClB,0BAAkB,SAAS,6BAA6B,cAAc;AAAA,MACxE,OAAO;AACL,0BAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAA+C;AAC9C,UAAI,+BAA+B;AACjC,YAAI,MAAM,QAAQ,yBAAyB;AACzC,gBAAM,eAAe;AACrB,uCAA6B,6BAA6B;AAC1D,2CAAiC,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Debouncer } from \"../../lib/debouncer\";\nimport { nullableCompatibleEqualityCheck } from \"../../lib/utils\";\nimport { AutosuggestionsBareFunction } from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport {\n EditorAutocompleteState,\n areEqual_autocompleteState,\n} from \"../../types/base/editor-autocomplete-state\";\n\nexport interface UseAutosuggestionsResult {\n currentAutocompleteSuggestion: AutosuggestionState | null;\n onChangeHandler: (newEditorState: EditorAutocompleteState | null) => void;\n onKeyDownHandler: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nexport function useAutosuggestions(\n debounceTime: number,\n acceptAutosuggestionKey: string,\n autosuggestionFunction: AutosuggestionsBareFunction,\n insertAutocompleteSuggestion: (suggestion: AutosuggestionState) => void,\n disableWhenEmpty: boolean,\n disabled: boolean\n): UseAutosuggestionsResult {\n const [previousAutocompleteState, setPreviousAutocompleteState] =\n useState<EditorAutocompleteState | null>(null);\n\n const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] =\n useState<AutosuggestionState | null>(null);\n\n const awaitForAndAppendSuggestion: (\n editorAutocompleteState: EditorAutocompleteState,\n abortSignal: AbortSignal\n ) => Promise<void> = useCallback(\n async (\n editorAutocompleteState: EditorAutocompleteState,\n abortSignal: AbortSignal\n ) => {\n // early return if disabled\n if (disabled) {\n return;\n }\n\n if (\n disableWhenEmpty &&\n editorAutocompleteState.textBeforeCursor === \"\" &&\n editorAutocompleteState.textAfterCursor === \"\"\n ) {\n return;\n }\n\n // fetch the suggestion\n const suggestion = await autosuggestionFunction(\n editorAutocompleteState,\n abortSignal\n );\n\n // We'll assume for now that the autocomplete function might or might not respect the abort signal.\n if (!suggestion || abortSignal.aborted) {\n throw new DOMException(\"Aborted\", \"AbortError\");\n }\n\n setCurrentAutocompleteSuggestion({\n text: suggestion,\n point: editorAutocompleteState.cursorPoint,\n });\n },\n [\n autosuggestionFunction,\n setCurrentAutocompleteSuggestion,\n disableWhenEmpty,\n disabled,\n ]\n );\n\n const debouncedFunction = useMemo(\n () =>\n new Debouncer<[editorAutocompleteState: EditorAutocompleteState]>(\n debounceTime\n ),\n [debounceTime]\n );\n\n // clean current state when unmounting or disabling\n useEffect(() => {\n return () => {\n debouncedFunction.cancel();\n setCurrentAutocompleteSuggestion(null);\n };\n }, [debouncedFunction, disabled]);\n\n const onChange = useCallback(\n (newEditorState: EditorAutocompleteState | null) => {\n const editorStateHasChanged = !nullableCompatibleEqualityCheck(\n areEqual_autocompleteState,\n previousAutocompleteState,\n newEditorState\n );\n setPreviousAutocompleteState(newEditorState);\n\n // if no change, do nothing\n if (!editorStateHasChanged) {\n return;\n }\n\n // if change, then first null out the current suggestion\n setCurrentAutocompleteSuggestion(null);\n\n // then try to get a new suggestion, debouncing to avoid too many requests while typing\n if (newEditorState) {\n debouncedFunction.debounce(awaitForAndAppendSuggestion, newEditorState);\n } else {\n debouncedFunction.cancel();\n }\n },\n [\n previousAutocompleteState,\n setPreviousAutocompleteState,\n debouncedFunction,\n awaitForAndAppendSuggestion,\n setCurrentAutocompleteSuggestion,\n ]\n );\n\n const keyDownHandler = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (currentAutocompleteSuggestion) {\n if (event.key === acceptAutosuggestionKey) {\n event.preventDefault();\n insertAutocompleteSuggestion(currentAutocompleteSuggestion);\n setCurrentAutocompleteSuggestion(null);\n }\n }\n },\n [\n currentAutocompleteSuggestion,\n setCurrentAutocompleteSuggestion,\n insertAutocompleteSuggestion,\n acceptAutosuggestionKey,\n ]\n );\n\n return {\n currentAutocompleteSuggestion,\n onChangeHandler: onChange,\n onKeyDownHandler: keyDownHandler,\n };\n}\n"]}
@@ -0,0 +1,108 @@
1
+ import { retry } from './chunk-4S5ZJH3I.mjs';
2
+ import { __async } from './chunk-MRXNTQOX.mjs';
3
+ import { CopilotContext } from '@copilotkit/react-core';
4
+ import { useContext, useCallback } from 'react';
5
+
6
+ function useMakeStandardInsertionOrEditingFunction(textareaPurpose, contextCategories, insertionApiConfig, editingApiConfig) {
7
+ const { getContextString } = useContext(CopilotContext);
8
+ const insertionFunction = useCallback(
9
+ (editorState, insertionPrompt, abortSignal) => __async(this, null, function* () {
10
+ const res = yield retry(() => __async(this, null, function* () {
11
+ const messages = [
12
+ {
13
+ role: "system",
14
+ content: insertionApiConfig.makeSystemPrompt(
15
+ textareaPurpose,
16
+ getContextString(contextCategories)
17
+ )
18
+ },
19
+ ...insertionApiConfig.fewShotMessages,
20
+ {
21
+ role: "user",
22
+ name: "TextAfterCursor",
23
+ content: editorState.textAfterCursor
24
+ },
25
+ {
26
+ role: "user",
27
+ name: "TextBeforeCursor",
28
+ content: editorState.textBeforeCursor
29
+ },
30
+ {
31
+ role: "user",
32
+ name: "InsertionPrompt",
33
+ content: insertionPrompt
34
+ }
35
+ ];
36
+ return yield insertionApiConfig.apiEndpoint.run(
37
+ abortSignal,
38
+ messages,
39
+ insertionApiConfig.forwardedParams
40
+ );
41
+ }));
42
+ return res;
43
+ }),
44
+ [insertionApiConfig, getContextString, contextCategories, textareaPurpose]
45
+ );
46
+ const editingFunction = useCallback(
47
+ (editorState, editingPrompt, abortSignal) => __async(this, null, function* () {
48
+ const res = yield retry(() => __async(this, null, function* () {
49
+ const messages = [
50
+ {
51
+ role: "system",
52
+ content: editingApiConfig.makeSystemPrompt(
53
+ textareaPurpose,
54
+ getContextString(contextCategories)
55
+ )
56
+ },
57
+ ...editingApiConfig.fewShotMessages,
58
+ {
59
+ role: "user",
60
+ name: "TextBeforeCursor",
61
+ content: editorState.textBeforeCursor
62
+ },
63
+ {
64
+ role: "user",
65
+ name: "TextToEdit",
66
+ content: editorState.selectedText
67
+ },
68
+ {
69
+ role: "user",
70
+ name: "TextAfterCursor",
71
+ content: editorState.textAfterCursor
72
+ },
73
+ {
74
+ role: "user",
75
+ name: "EditingPrompt",
76
+ content: editingPrompt
77
+ }
78
+ ];
79
+ return yield editingApiConfig.apiEndpoint.run(
80
+ abortSignal,
81
+ messages,
82
+ editingApiConfig.forwardedParams
83
+ );
84
+ }));
85
+ return res;
86
+ }),
87
+ [editingApiConfig, getContextString, contextCategories, textareaPurpose]
88
+ );
89
+ const insertionOrEditingFunction = useCallback(
90
+ (editorState, insertionPrompt, abortSignal) => __async(this, null, function* () {
91
+ if (editorState.selectedText === "") {
92
+ return yield insertionFunction(
93
+ editorState,
94
+ insertionPrompt,
95
+ abortSignal
96
+ );
97
+ } else {
98
+ return yield editingFunction(editorState, insertionPrompt, abortSignal);
99
+ }
100
+ }),
101
+ [insertionFunction, editingFunction]
102
+ );
103
+ return insertionOrEditingFunction;
104
+ }
105
+
106
+ export { useMakeStandardInsertionOrEditingFunction };
107
+ //# sourceMappingURL=out.js.map
108
+ //# sourceMappingURL=chunk-VBIJPE3H.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/make-autosuggestions-function/use-make-standard-insertion-function.tsx"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,sBAAsB;AAC/B,SAAS,aAAa,kBAAkB;AAyBjC,SAAS,0CACd,iBACA,mBACA,oBACA,kBACwC;AACxC,QAAM,EAAE,iBAAiB,IAAI,WAAW,cAAc;AAEtD,QAAM,oBAAoB;AAAA,IACxB,CACE,aACA,iBACA,gBACG;AACH,YAAM,MAAM,MAAM,MAAM,MAAY;AAClC,cAAM,WAAoC;AAAA,UACxC;AAAA,YACE,MAAM;AAAA,YACN,SAAS,mBAAmB;AAAA,cAC1B;AAAA,cACA,iBAAiB,iBAAiB;AAAA,YACpC;AAAA,UACF;AAAA,UACA,GAAG,mBAAmB;AAAA,UACtB;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,YAAY;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,YAAY;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AAEA,eAAO,MAAM,mBAAmB,YAAY;AAAA,UAC1C;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,QACrB;AAAA,MACF,EAAC;AAED,aAAO;AAAA,IACT;AAAA,IACA,CAAC,oBAAoB,kBAAkB,mBAAmB,eAAe;AAAA,EAC3E;AAEA,QAAM,kBAAkB;AAAA,IACtB,CACE,aACA,eACA,gBACG;AACH,YAAM,MAAM,MAAM,MAAM,MAAY;AAClC,cAAM,WAAoC;AAAA,UACxC;AAAA,YACE,MAAM;AAAA,YACN,SAAS,iBAAiB;AAAA,cACxB;AAAA,cACA,iBAAiB,iBAAiB;AAAA,YACpC;AAAA,UACF;AAAA,UACA,GAAG,iBAAiB;AAAA,UACpB;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,YAAY;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,YAAY;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS,YAAY;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AAEA,eAAO,MAAM,iBAAiB,YAAY;AAAA,UACxC;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA,QACnB;AAAA,MACF,EAAC;AAED,aAAO;AAAA,IACT;AAAA,IACA,CAAC,kBAAkB,kBAAkB,mBAAmB,eAAe;AAAA,EACzE;AAEA,QAAM,6BAA6B;AAAA,IACjC,CACE,aACA,iBACA,gBACG;AACH,UAAI,YAAY,iBAAiB,IAAI;AACnC,eAAO,MAAM;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO,MAAM,gBAAgB,aAAa,iBAAiB,WAAW;AAAA,MACxE;AAAA,IACF;AAAA,IACA,CAAC,mBAAmB,eAAe;AAAA,EACrC;AAEA,SAAO;AACT","sourcesContent":["import { CopilotContext } from \"@copilotkit/react-core\";\nimport { useCallback, useContext } from \"react\";\nimport { MinimalChatGPTMessage } from \"../../types\";\nimport { retry } from \"../../lib/retry\";\nimport {\n EditingEditorState,\n Generator_InsertionOrEditingSuggestion,\n InsertionEditorApiConfig,\n InsertionEditorState,\n} from \"../../types/base/autosuggestions-bare-function\";\nimport { InsertionsApiConfig } from \"../../types/autosuggestions-config/insertions-api-config\";\nimport { EditingApiConfig } from \"../../types/autosuggestions-config/editing-api-config\";\n\n/**\n * Returns a memoized function that sends a request to the specified API endpoint to get an autosuggestion for the user's input.\n * The function takes in the text before and after the cursor, and an abort signal.\n * It sends a POST request to the API endpoint with the messages array containing the system message, few shot messages, and user messages.\n * The function returns the suggestion from the API response.\n *\n * @param textareaPurpose - The purpose of the textarea. This is included in the system message.\n * @param apiEndpoint - The API endpoint to send the autosuggestion request to.\n * @param makeSystemMessage - A function that takes in a context string and returns a system message to include in the autosuggestion request.\n * @param fewShotMessages - An array of few shot messages to include in the autosuggestion request.\n * @param contextCategories - The categories of context strings we want to include. By default, we include the (default) \"global\" context category.\n * @returns A memoized function that sends a request to the specified API endpoint to get an autosuggestion for the user's input.\n */\nexport function useMakeStandardInsertionOrEditingFunction(\n textareaPurpose: string,\n contextCategories: string[] | undefined,\n insertionApiConfig: InsertionsApiConfig,\n editingApiConfig: EditingApiConfig\n): Generator_InsertionOrEditingSuggestion {\n const { getContextString } = useContext(CopilotContext);\n\n const insertionFunction = useCallback(\n async (\n editorState: EditingEditorState,\n insertionPrompt: string,\n abortSignal: AbortSignal\n ) => {\n const res = await retry(async () => {\n const messages: MinimalChatGPTMessage[] = [\n {\n role: \"system\",\n content: insertionApiConfig.makeSystemPrompt(\n textareaPurpose,\n getContextString(contextCategories)\n ),\n },\n ...insertionApiConfig.fewShotMessages,\n {\n role: \"user\",\n name: \"TextAfterCursor\",\n content: editorState.textAfterCursor,\n },\n {\n role: \"user\",\n name: \"TextBeforeCursor\",\n content: editorState.textBeforeCursor,\n },\n {\n role: \"user\",\n name: \"InsertionPrompt\",\n content: insertionPrompt,\n },\n ];\n\n return await insertionApiConfig.apiEndpoint.run(\n abortSignal,\n messages,\n insertionApiConfig.forwardedParams\n );\n });\n\n return res;\n },\n [insertionApiConfig, getContextString, contextCategories, textareaPurpose]\n );\n\n const editingFunction = useCallback(\n async (\n editorState: EditingEditorState,\n editingPrompt: string,\n abortSignal: AbortSignal\n ) => {\n const res = await retry(async () => {\n const messages: MinimalChatGPTMessage[] = [\n {\n role: \"system\",\n content: editingApiConfig.makeSystemPrompt(\n textareaPurpose,\n getContextString(contextCategories)\n ),\n },\n ...editingApiConfig.fewShotMessages,\n {\n role: \"user\",\n name: \"TextBeforeCursor\",\n content: editorState.textBeforeCursor,\n },\n {\n role: \"user\",\n name: \"TextToEdit\",\n content: editorState.selectedText,\n },\n {\n role: \"user\",\n name: \"TextAfterCursor\",\n content: editorState.textAfterCursor,\n },\n {\n role: \"user\",\n name: \"EditingPrompt\",\n content: editingPrompt,\n },\n ];\n\n return await editingApiConfig.apiEndpoint.run(\n abortSignal,\n messages,\n editingApiConfig.forwardedParams\n );\n });\n\n return res;\n },\n [editingApiConfig, getContextString, contextCategories, textareaPurpose]\n );\n\n const insertionOrEditingFunction = useCallback(\n async (\n editorState: EditingEditorState,\n insertionPrompt: string,\n abortSignal: AbortSignal\n ) => {\n if (editorState.selectedText === \"\") {\n return await insertionFunction(\n editorState,\n insertionPrompt,\n abortSignal\n );\n } else {\n return await editingFunction(editorState, insertionPrompt, abortSignal);\n }\n },\n [insertionFunction, editingFunction]\n );\n\n return insertionOrEditingFunction;\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=out.js.map
3
+ //# sourceMappingURL=chunk-WADHCMPK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=out.js.map
3
+ //# sourceMappingURL=chunk-WJHSY5T6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { Transforms } from 'slate';
2
+
3
+ // src/lib/slatejs-edits/add-autocompletions.ts
4
+ function addAutocompletionsToEditor(editor, newSuggestion, point) {
5
+ const editorPosition = editor.selection;
6
+ Transforms.insertNodes(
7
+ editor,
8
+ [
9
+ {
10
+ type: "suggestion",
11
+ inline: true,
12
+ content: newSuggestion,
13
+ children: [{ text: "" }]
14
+ }
15
+ ],
16
+ {
17
+ at: point
18
+ }
19
+ );
20
+ if (editorPosition) {
21
+ editor.selection = editorPosition;
22
+ }
23
+ }
24
+
25
+ export { addAutocompletionsToEditor };
26
+ //# sourceMappingURL=out.js.map
27
+ //# sourceMappingURL=chunk-WJYQWL4I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/slatejs-edits/add-autocompletions.ts"],"names":[],"mappings":";AAAA,SAAoB,kBAAkB;AAG/B,SAAS,2BACd,QACA,eACA,OACA;AACA,QAAM,iBAAiB,OAAO;AAE9B,aAAW;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACzB;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,IACN;AAAA,EACF;AAGA,MAAI,gBAAgB;AAClB,WAAO,YAAY;AAAA,EACrB;AACF","sourcesContent":["import { BasePoint, Transforms } from \"slate\";\nimport { CustomEditor } from \"../../types/base/custom-editor\";\n\nexport function addAutocompletionsToEditor(\n editor: CustomEditor,\n newSuggestion: string,\n point: BasePoint\n) {\n const editorPosition = editor.selection;\n\n Transforms.insertNodes(\n editor,\n [\n {\n type: \"suggestion\",\n inline: true,\n content: newSuggestion,\n children: [{ text: \"\" }],\n },\n ],\n {\n at: point,\n }\n );\n\n // restore cursor position\n if (editorPosition) {\n editor.selection = editorPosition;\n }\n}\n"]}