@copilotkit/react-textarea 0.19.0-alpha.3 → 0.19.0-alpha.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 (222) hide show
  1. package/.turbo/turbo-build.log +147 -143
  2. package/CHANGELOG.md +6 -0
  3. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +1870 -33
  4. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map +1 -1
  5. package/dist/components/base-copilot-textarea/render-element.mjs +52 -3
  6. package/dist/components/base-copilot-textarea/render-element.mjs.map +1 -1
  7. package/dist/components/base-copilot-textarea/render-placeholder.mjs +46 -3
  8. package/dist/components/base-copilot-textarea/render-placeholder.mjs.map +1 -1
  9. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs +86 -4
  10. package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs.map +1 -1
  11. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs +57 -3
  12. package/dist/components/base-copilot-textarea/use-add-branding-css.mjs.map +1 -1
  13. package/dist/components/copilot-textarea/copilot-textarea.mjs +2339 -43
  14. package/dist/components/copilot-textarea/copilot-textarea.mjs.map +1 -1
  15. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs +22 -3
  16. package/dist/components/hovering-toolbar/hovering-editor-provider.mjs.map +1 -1
  17. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs +125 -3
  18. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map +1 -1
  19. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +1015 -16
  20. package/dist/components/hovering-toolbar/hovering-toolbar.mjs.map +1 -1
  21. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +721 -10
  22. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs.map +1 -1
  23. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +734 -11
  24. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs.map +1 -1
  25. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +734 -12
  26. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map +1 -1
  27. package/dist/components/index.mjs +2340 -44
  28. package/dist/components/index.mjs.map +1 -1
  29. package/dist/components/manual-ui/chip-with-icon.mjs +5 -6
  30. package/dist/components/manual-ui/chip-with-icon.mjs.map +1 -1
  31. package/dist/components/source-search-box/source-search-box.mjs +323 -10
  32. package/dist/components/source-search-box/source-search-box.mjs.map +1 -1
  33. package/dist/components/ui/button.mjs +88 -4
  34. package/dist/components/ui/button.mjs.map +1 -1
  35. package/dist/components/ui/card.mjs +53 -7
  36. package/dist/components/ui/card.mjs.map +1 -1
  37. package/dist/components/ui/command.mjs +266 -5
  38. package/dist/components/ui/command.mjs.map +1 -1
  39. package/dist/components/ui/dialog.mjs +164 -4
  40. package/dist/components/ui/dialog.mjs.map +1 -1
  41. package/dist/components/ui/label.mjs +63 -4
  42. package/dist/components/ui/label.mjs.map +1 -1
  43. package/dist/components/ui/separator.mjs +50 -8
  44. package/dist/components/ui/separator.mjs.map +1 -1
  45. package/dist/components/ui/textarea.mjs +48 -7
  46. package/dist/components/ui/textarea.mjs.map +1 -1
  47. package/dist/context/index.mjs +0 -2
  48. package/dist/context/index.mjs.map +1 -1
  49. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs +168 -6
  50. package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs.map +1 -1
  51. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs +168 -4
  52. package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs.map +1 -1
  53. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs +155 -5
  54. package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map +1 -1
  55. package/dist/hooks/index.mjs +0 -2
  56. package/dist/hooks/index.mjs.map +1 -1
  57. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs +90 -4
  58. package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs.map +1 -1
  59. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs +143 -4
  60. package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs.map +1 -1
  61. package/dist/hooks/misc/use-autosize-textarea.mjs +15 -3
  62. package/dist/hooks/misc/use-autosize-textarea.mjs.map +1 -1
  63. package/dist/index.css +3 -12
  64. package/dist/index.css.map +1 -1
  65. package/dist/index.mjs +2343 -48
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/lib/debouncer.mjs +51 -3
  68. package/dist/lib/debouncer.mjs.map +1 -1
  69. package/dist/lib/editor-to-text.mjs +43 -3
  70. package/dist/lib/editor-to-text.mjs.map +1 -1
  71. package/dist/lib/get-text-around-cursor.mjs +109 -3
  72. package/dist/lib/get-text-around-cursor.mjs.map +1 -1
  73. package/dist/lib/retry.mjs +17 -3
  74. package/dist/lib/retry.mjs.map +1 -1
  75. package/dist/lib/slatejs-edits/add-autocompletions.mjs +25 -3
  76. package/dist/lib/slatejs-edits/add-autocompletions.mjs.map +1 -1
  77. package/dist/lib/slatejs-edits/clear-autocompletions.mjs +23 -3
  78. package/dist/lib/slatejs-edits/clear-autocompletions.mjs.map +1 -1
  79. package/dist/lib/slatejs-edits/replace-text.mjs +27 -3
  80. package/dist/lib/slatejs-edits/replace-text.mjs.map +1 -1
  81. package/dist/lib/slatejs-edits/with-partial-history.mjs +106 -3
  82. package/dist/lib/slatejs-edits/with-partial-history.mjs.map +1 -1
  83. package/dist/lib/stream-promise-flatten.mjs +47 -3
  84. package/dist/lib/stream-promise-flatten.mjs.map +1 -1
  85. package/dist/lib/utils.mjs +71 -3
  86. package/dist/lib/utils.mjs.map +1 -1
  87. package/dist/lib/utils.test.mjs +0 -1
  88. package/dist/lib/utils.test.mjs.map +1 -1
  89. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs +0 -2
  90. package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.mjs.map +1 -1
  91. package/dist/types/autosuggestions-config/autosuggestions-config.mjs +312 -9
  92. package/dist/types/autosuggestions-config/autosuggestions-config.mjs.map +1 -1
  93. package/dist/types/autosuggestions-config/editing-api-config.mjs +155 -4
  94. package/dist/types/autosuggestions-config/editing-api-config.mjs.map +1 -1
  95. package/dist/types/autosuggestions-config/index.mjs +313 -10
  96. package/dist/types/autosuggestions-config/index.mjs.map +1 -1
  97. package/dist/types/autosuggestions-config/insertions-api-config.mjs +149 -4
  98. package/dist/types/autosuggestions-config/insertions-api-config.mjs.map +1 -1
  99. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs +71 -3
  100. package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs.map +1 -1
  101. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs +0 -2
  102. package/dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs.map +1 -1
  103. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs +0 -2
  104. package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs.map +1 -1
  105. package/dist/types/autosuggestions-config/suggestions-api-config.mjs +137 -4
  106. package/dist/types/autosuggestions-config/suggestions-api-config.mjs.map +1 -1
  107. package/dist/types/base/autosuggestion-state.mjs +0 -2
  108. package/dist/types/base/autosuggestion-state.mjs.map +1 -1
  109. package/dist/types/base/autosuggestions-bare-function.mjs +0 -2
  110. package/dist/types/base/autosuggestions-bare-function.mjs.map +1 -1
  111. package/dist/types/base/base-autosuggestions-config.mjs +11 -3
  112. package/dist/types/base/base-autosuggestions-config.mjs.map +1 -1
  113. package/dist/types/base/base-copilot-textarea-props.mjs +0 -2
  114. package/dist/types/base/base-copilot-textarea-props.mjs.map +1 -1
  115. package/dist/types/base/custom-editor.mjs +0 -2
  116. package/dist/types/base/custom-editor.mjs.map +1 -1
  117. package/dist/types/base/editor-autocomplete-state.mjs +17 -4
  118. package/dist/types/base/editor-autocomplete-state.mjs.map +1 -1
  119. package/dist/types/base/index.mjs +11 -4
  120. package/dist/types/base/index.mjs.map +1 -1
  121. package/dist/types/html-copilot-textarea-element.mjs +0 -2
  122. package/dist/types/html-copilot-textarea-element.mjs.map +1 -1
  123. package/dist/types/index.mjs +314 -12
  124. package/dist/types/index.mjs.map +1 -1
  125. package/package.json +3 -3
  126. package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx +2 -1
  127. package/src/components/source-search-box/source-search-box.tsx +6 -9
  128. package/src/components/ui/command.tsx +1 -1
  129. package/dist/chunk-23UHDUUY.mjs +0 -461
  130. package/dist/chunk-23UHDUUY.mjs.map +0 -1
  131. package/dist/chunk-2NURR2DX.mjs +0 -47
  132. package/dist/chunk-2NURR2DX.mjs.map +0 -1
  133. package/dist/chunk-3YJ63D5D.mjs +0 -106
  134. package/dist/chunk-3YJ63D5D.mjs.map +0 -1
  135. package/dist/chunk-4MDDCR32.mjs +0 -107
  136. package/dist/chunk-4MDDCR32.mjs.map +0 -1
  137. package/dist/chunk-4S5ZJH3I.mjs +0 -18
  138. package/dist/chunk-4S5ZJH3I.mjs.map +0 -1
  139. package/dist/chunk-55EGOC5T.mjs +0 -87
  140. package/dist/chunk-55EGOC5T.mjs.map +0 -1
  141. package/dist/chunk-5ARCOTW3.mjs +0 -34
  142. package/dist/chunk-5ARCOTW3.mjs.map +0 -1
  143. package/dist/chunk-5EJ5XOGP.mjs +0 -22
  144. package/dist/chunk-5EJ5XOGP.mjs.map +0 -1
  145. package/dist/chunk-5FO6ISW4.mjs +0 -3
  146. package/dist/chunk-5FO6ISW4.mjs.map +0 -1
  147. package/dist/chunk-A2RRLD23.mjs +0 -69
  148. package/dist/chunk-A2RRLD23.mjs.map +0 -1
  149. package/dist/chunk-CSGFJU3L.mjs +0 -65
  150. package/dist/chunk-CSGFJU3L.mjs.map +0 -1
  151. package/dist/chunk-CZMPLTHF.mjs +0 -20
  152. package/dist/chunk-CZMPLTHF.mjs.map +0 -1
  153. package/dist/chunk-D7SEV5PR.mjs +0 -12
  154. package/dist/chunk-D7SEV5PR.mjs.map +0 -1
  155. package/dist/chunk-DE5K76I2.mjs +0 -3
  156. package/dist/chunk-DE5K76I2.mjs.map +0 -1
  157. package/dist/chunk-F3MHL6ZY.mjs +0 -25
  158. package/dist/chunk-F3MHL6ZY.mjs.map +0 -1
  159. package/dist/chunk-FN7GDKKG.mjs +0 -29
  160. package/dist/chunk-FN7GDKKG.mjs.map +0 -1
  161. package/dist/chunk-H4VKQGVU.mjs +0 -3
  162. package/dist/chunk-H4VKQGVU.mjs.map +0 -1
  163. package/dist/chunk-HAFHLU4N.mjs +0 -55
  164. package/dist/chunk-HAFHLU4N.mjs.map +0 -1
  165. package/dist/chunk-IU3WTXLQ.mjs +0 -3
  166. package/dist/chunk-IU3WTXLQ.mjs.map +0 -1
  167. package/dist/chunk-IXJ2HCOA.mjs +0 -101
  168. package/dist/chunk-IXJ2HCOA.mjs.map +0 -1
  169. package/dist/chunk-JAFCXEPU.mjs +0 -10
  170. package/dist/chunk-JAFCXEPU.mjs.map +0 -1
  171. package/dist/chunk-KCHYD3EB.mjs +0 -107
  172. package/dist/chunk-KCHYD3EB.mjs.map +0 -1
  173. package/dist/chunk-KGKLUWKW.mjs +0 -47
  174. package/dist/chunk-KGKLUWKW.mjs.map +0 -1
  175. package/dist/chunk-L7VVZH4Q.mjs +0 -3
  176. package/dist/chunk-L7VVZH4Q.mjs.map +0 -1
  177. package/dist/chunk-LNAIMEB2.mjs +0 -34
  178. package/dist/chunk-LNAIMEB2.mjs.map +0 -1
  179. package/dist/chunk-MMVDU6DF.mjs +0 -3
  180. package/dist/chunk-MMVDU6DF.mjs.map +0 -1
  181. package/dist/chunk-MPME5BW2.mjs +0 -59
  182. package/dist/chunk-MPME5BW2.mjs.map +0 -1
  183. package/dist/chunk-MRXNTQOX.mjs +0 -55
  184. package/dist/chunk-MRXNTQOX.mjs.map +0 -1
  185. package/dist/chunk-ND5PXTAW.mjs +0 -17
  186. package/dist/chunk-ND5PXTAW.mjs.map +0 -1
  187. package/dist/chunk-NKW5OU2S.mjs +0 -33
  188. package/dist/chunk-NKW5OU2S.mjs.map +0 -1
  189. package/dist/chunk-O5OWT5GE.mjs +0 -114
  190. package/dist/chunk-O5OWT5GE.mjs.map +0 -1
  191. package/dist/chunk-OD7ZMOVE.mjs +0 -45
  192. package/dist/chunk-OD7ZMOVE.mjs.map +0 -1
  193. package/dist/chunk-OELUUJZY.mjs +0 -16
  194. package/dist/chunk-OELUUJZY.mjs.map +0 -1
  195. package/dist/chunk-OS2YW2UX.mjs +0 -201
  196. package/dist/chunk-OS2YW2UX.mjs.map +0 -1
  197. package/dist/chunk-QL2GYGG5.mjs +0 -19
  198. package/dist/chunk-QL2GYGG5.mjs.map +0 -1
  199. package/dist/chunk-RQHOUUXQ.mjs +0 -29
  200. package/dist/chunk-RQHOUUXQ.mjs.map +0 -1
  201. package/dist/chunk-U5GM2PRT.mjs +0 -44
  202. package/dist/chunk-U5GM2PRT.mjs.map +0 -1
  203. package/dist/chunk-UHD44NC5.mjs +0 -101
  204. package/dist/chunk-UHD44NC5.mjs.map +0 -1
  205. package/dist/chunk-VBIJPE3H.mjs +0 -108
  206. package/dist/chunk-VBIJPE3H.mjs.map +0 -1
  207. package/dist/chunk-WADHCMPK.mjs +0 -3
  208. package/dist/chunk-WADHCMPK.mjs.map +0 -1
  209. package/dist/chunk-WJHSY5T6.mjs +0 -3
  210. package/dist/chunk-WJHSY5T6.mjs.map +0 -1
  211. package/dist/chunk-WJYQWL4I.mjs +0 -27
  212. package/dist/chunk-WJYQWL4I.mjs.map +0 -1
  213. package/dist/chunk-XDT7BF3V.mjs +0 -81
  214. package/dist/chunk-XDT7BF3V.mjs.map +0 -1
  215. package/dist/chunk-XHUMROEY.mjs +0 -91
  216. package/dist/chunk-XHUMROEY.mjs.map +0 -1
  217. package/dist/chunk-YQU7WG7T.mjs +0 -83
  218. package/dist/chunk-YQU7WG7T.mjs.map +0 -1
  219. package/dist/chunk-YTOPHPSG.mjs +0 -45
  220. package/dist/chunk-YTOPHPSG.mjs.map +0 -1
  221. package/dist/chunk-YW3REYX6.mjs +0 -23
  222. package/dist/chunk-YW3REYX6.mjs.map +0 -1
@@ -1,8 +1,49 @@
1
- import { cn } from '../../chunk-KGKLUWKW.mjs';
2
- import { __objRest, __spreadValues } from '../../chunk-MRXNTQOX.mjs';
3
- import * as React from 'react';
4
- import { jsx } from 'react/jsx-runtime';
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
5
29
 
30
+ // src/components/ui/textarea.tsx
31
+ import * as React from "react";
32
+
33
+ // src/lib/utils.ts
34
+ import { clsx } from "clsx";
35
+ import { customAlphabet } from "nanoid";
36
+ import { twMerge } from "tailwind-merge";
37
+ function cn(...inputs) {
38
+ return twMerge(clsx(inputs));
39
+ }
40
+ var nanoid = customAlphabet(
41
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
42
+ 7
43
+ );
44
+
45
+ // src/components/ui/textarea.tsx
46
+ import { jsx } from "react/jsx-runtime";
6
47
  var Textarea = React.forwardRef(
7
48
  (_a, ref) => {
8
49
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
@@ -16,7 +57,7 @@ var Textarea = React.forwardRef(
16
57
  }
17
58
  );
18
59
  Textarea.displayName = "Textarea";
19
-
20
- export { Textarea };
21
- //# sourceMappingURL=out.js.map
60
+ export {
61
+ Textarea
62
+ };
22
63
  //# sourceMappingURL=textarea.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ui/textarea.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,YAAY,WAAW;AAUjB;AAHN,IAAM,WAAiB;AAAA,EACrB,CAAC,IAAyB,QAAQ;AAAjC,iBAAE,YARL,IAQG,IAAgB,kBAAhB,IAAgB,CAAd;AACD,WACE,oBAAC;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,OACI,MACN;AAAA,EAEJ;AACF;AACA,SAAS,cAAc","sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"]}
1
+ {"version":3,"sources":["../../../src/components/ui/textarea.tsx","../../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import { clsx, type ClassValue } from \"clsx\";\nimport { customAlphabet } from \"nanoid\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const nanoid = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7\n); // 7-character random string\n\nexport async function fetcher<JSON = any>(\n input: RequestInfo,\n init?: RequestInit\n): Promise<JSON> {\n const res = await fetch(input, init);\n\n if (!res.ok) {\n const json = await res.json();\n if (json.error) {\n const error = new Error(json.error) as Error & {\n status: number;\n };\n error.status = res.status;\n throw error;\n } else {\n throw new Error(\"An unexpected error occurred\");\n }\n }\n\n return res.json();\n}\n\nexport function formatDate(input: string | number | Date): string {\n const date = new Date(input);\n return date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nexport const arraysAreEqual = (arr1: number[], arr2: number[]): boolean =>\n arr1.length === arr2.length &&\n arr1.every((value, index) => value === arr2[index]);\n\nexport function nullableCompatibleEqualityCheck<T>(\n naiveEqualityCheck: (a: T, b: T) => boolean,\n a: T | null | undefined,\n b: T | null | undefined\n): boolean {\n if (a === null || a === undefined || b === null || b === undefined) {\n return a === b;\n }\n\n return naiveEqualityCheck(a, b);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,WAAW;;;ACAvB,SAAS,YAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AAEO,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AACF;;;ADDM;AAHN,IAAM,WAAiB;AAAA,EACrB,CAAC,IAAyB,QAAQ;AAAjC,iBAAE,YARL,IAQG,IAAgB,kBAAhB,IAAgB,CAAd;AACD,WACE,oBAAC;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,OACI,MACN;AAAA,EAEJ;AACF;AACA,SAAS,cAAc;","names":[]}
@@ -1,3 +1 @@
1
- import '../chunk-IU3WTXLQ.mjs';
2
- //# sourceMappingURL=out.js.map
3
1
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,7 +1,169 @@
1
- export { useAutosuggestions } from '../../chunk-UHD44NC5.mjs';
2
- import '../../chunk-JAFCXEPU.mjs';
3
- import '../../chunk-KGKLUWKW.mjs';
4
- import '../../chunk-NKW5OU2S.mjs';
5
- import '../../chunk-MRXNTQOX.mjs';
6
- //# sourceMappingURL=out.js.map
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+
22
+ // src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts
23
+ import { useCallback, useEffect, useMemo, useState } from "react";
24
+
25
+ // src/lib/debouncer.ts
26
+ var Debouncer = class {
27
+ constructor(wait) {
28
+ this.wait = wait;
29
+ this.debounce = (func, ...args) => __async(this, null, function* () {
30
+ this.cancel();
31
+ this.timeoutId = setTimeout(() => __async(this, null, function* () {
32
+ try {
33
+ this.activeAbortController = new AbortController();
34
+ yield func(...args, this.activeAbortController.signal);
35
+ this.activeAbortController = void 0;
36
+ } catch (error) {
37
+ }
38
+ }), this.wait);
39
+ });
40
+ this.cancel = () => {
41
+ if (this.activeAbortController) {
42
+ this.activeAbortController.abort();
43
+ this.activeAbortController = void 0;
44
+ }
45
+ if (this.timeoutId !== void 0) {
46
+ clearTimeout(this.timeoutId);
47
+ this.timeoutId = void 0;
48
+ }
49
+ };
50
+ }
51
+ };
52
+
53
+ // src/lib/utils.ts
54
+ import { clsx } from "clsx";
55
+ import { customAlphabet } from "nanoid";
56
+ import { twMerge } from "tailwind-merge";
57
+ var nanoid = customAlphabet(
58
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
59
+ 7
60
+ );
61
+ var arraysAreEqual = (arr1, arr2) => arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]);
62
+ function nullableCompatibleEqualityCheck(naiveEqualityCheck, a, b) {
63
+ if (a === null || a === void 0 || b === null || b === void 0) {
64
+ return a === b;
65
+ }
66
+ return naiveEqualityCheck(a, b);
67
+ }
68
+
69
+ // src/types/base/editor-autocomplete-state.ts
70
+ function areEqual_autocompleteState(prev, next) {
71
+ return prev.cursorPoint.offset === next.cursorPoint.offset && arraysAreEqual(prev.cursorPoint.path, next.cursorPoint.path) && prev.textBeforeCursor === next.textBeforeCursor && prev.textAfterCursor === next.textAfterCursor;
72
+ }
73
+
74
+ // src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts
75
+ function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestionFunction, insertAutocompleteSuggestion, disableWhenEmpty, disabled) {
76
+ const [previousAutocompleteState, setPreviousAutocompleteState] = useState(null);
77
+ const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] = useState(null);
78
+ const awaitForAndAppendSuggestion = useCallback(
79
+ (editorAutocompleteState, abortSignal) => __async(this, null, function* () {
80
+ if (disabled) {
81
+ return;
82
+ }
83
+ if (disableWhenEmpty && editorAutocompleteState.textBeforeCursor === "" && editorAutocompleteState.textAfterCursor === "") {
84
+ return;
85
+ }
86
+ const suggestion = yield autosuggestionFunction(
87
+ editorAutocompleteState,
88
+ abortSignal
89
+ );
90
+ if (!suggestion || abortSignal.aborted) {
91
+ throw new DOMException("Aborted", "AbortError");
92
+ }
93
+ setCurrentAutocompleteSuggestion({
94
+ text: suggestion,
95
+ point: editorAutocompleteState.cursorPoint
96
+ });
97
+ }),
98
+ [
99
+ autosuggestionFunction,
100
+ setCurrentAutocompleteSuggestion,
101
+ disableWhenEmpty,
102
+ disabled
103
+ ]
104
+ );
105
+ const debouncedFunction = useMemo(
106
+ () => new Debouncer(
107
+ debounceTime
108
+ ),
109
+ [debounceTime]
110
+ );
111
+ useEffect(() => {
112
+ return () => {
113
+ debouncedFunction.cancel();
114
+ setCurrentAutocompleteSuggestion(null);
115
+ };
116
+ }, [debouncedFunction, disabled]);
117
+ const onChange = useCallback(
118
+ (newEditorState) => {
119
+ const editorStateHasChanged = !nullableCompatibleEqualityCheck(
120
+ areEqual_autocompleteState,
121
+ previousAutocompleteState,
122
+ newEditorState
123
+ );
124
+ setPreviousAutocompleteState(newEditorState);
125
+ if (!editorStateHasChanged) {
126
+ return;
127
+ }
128
+ setCurrentAutocompleteSuggestion(null);
129
+ if (newEditorState) {
130
+ debouncedFunction.debounce(awaitForAndAppendSuggestion, newEditorState);
131
+ } else {
132
+ debouncedFunction.cancel();
133
+ }
134
+ },
135
+ [
136
+ previousAutocompleteState,
137
+ setPreviousAutocompleteState,
138
+ debouncedFunction,
139
+ awaitForAndAppendSuggestion,
140
+ setCurrentAutocompleteSuggestion
141
+ ]
142
+ );
143
+ const keyDownHandler = useCallback(
144
+ (event) => {
145
+ if (currentAutocompleteSuggestion) {
146
+ if (event.key === acceptAutosuggestionKey) {
147
+ event.preventDefault();
148
+ insertAutocompleteSuggestion(currentAutocompleteSuggestion);
149
+ setCurrentAutocompleteSuggestion(null);
150
+ }
151
+ }
152
+ },
153
+ [
154
+ currentAutocompleteSuggestion,
155
+ setCurrentAutocompleteSuggestion,
156
+ insertAutocompleteSuggestion,
157
+ acceptAutosuggestionKey
158
+ ]
159
+ );
160
+ return {
161
+ currentAutocompleteSuggestion,
162
+ onChangeHandler: onChange,
163
+ onKeyDownHandler: keyDownHandler
164
+ };
165
+ }
166
+ export {
167
+ useAutosuggestions
168
+ };
7
169
  //# sourceMappingURL=use-autosuggestions.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../../../src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts","../../../src/lib/debouncer.ts","../../../src/lib/utils.ts","../../../src/types/base/editor-autocomplete-state.ts"],"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","export type AsyncFunction<T extends any[]> = (\n ...args: [...T, AbortSignal]\n) => Promise<void>;\n\nexport class Debouncer<T extends any[]> {\n private timeoutId?: number;\n private activeAbortController?: AbortController;\n\n constructor(private wait: number) {}\n\n debounce = async (func: AsyncFunction<T>, ...args: T) => {\n // Abort the previous promise immediately\n this.cancel();\n\n this.timeoutId = setTimeout(async () => {\n try {\n this.activeAbortController = new AbortController();\n\n // Pass the signal to the async function, assuming it supports it\n await func(...args, this.activeAbortController.signal);\n\n this.activeAbortController = undefined;\n } catch (error) {}\n }, this.wait);\n };\n\n cancel = () => {\n if (this.activeAbortController) {\n this.activeAbortController.abort();\n this.activeAbortController = undefined;\n }\n\n if (this.timeoutId !== undefined) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n }\n };\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { customAlphabet } from \"nanoid\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const nanoid = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7\n); // 7-character random string\n\nexport async function fetcher<JSON = any>(\n input: RequestInfo,\n init?: RequestInit\n): Promise<JSON> {\n const res = await fetch(input, init);\n\n if (!res.ok) {\n const json = await res.json();\n if (json.error) {\n const error = new Error(json.error) as Error & {\n status: number;\n };\n error.status = res.status;\n throw error;\n } else {\n throw new Error(\"An unexpected error occurred\");\n }\n }\n\n return res.json();\n}\n\nexport function formatDate(input: string | number | Date): string {\n const date = new Date(input);\n return date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nexport const arraysAreEqual = (arr1: number[], arr2: number[]): boolean =>\n arr1.length === arr2.length &&\n arr1.every((value, index) => value === arr2[index]);\n\nexport function nullableCompatibleEqualityCheck<T>(\n naiveEqualityCheck: (a: T, b: T) => boolean,\n a: T | null | undefined,\n b: T | null | undefined\n): boolean {\n if (a === null || a === undefined || b === null || b === undefined) {\n return a === b;\n }\n\n return naiveEqualityCheck(a, b);\n}\n","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":"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","names":[]}
@@ -1,5 +1,169 @@
1
- export { useCopilotTextareaEditor } from '../../chunk-CSGFJU3L.mjs';
2
- import '../../chunk-KCHYD3EB.mjs';
3
- import '../../chunk-MRXNTQOX.mjs';
4
- //# sourceMappingURL=out.js.map
1
+ // src/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.tsx
2
+ import { useMemo } from "react";
3
+ import { createEditor, Element } from "slate";
4
+ import { withReact } from "slate-react";
5
+
6
+ // src/lib/slatejs-edits/with-partial-history.ts
7
+ import { Editor, Operation, Path, Transforms } from "slate";
8
+ import { HistoryEditor } from "slate-history";
9
+ var withPartialHistory = (editor, shouldSave2) => {
10
+ const e = editor;
11
+ const { apply } = e;
12
+ e.history = { undos: [], redos: [] };
13
+ e.redo = () => {
14
+ const { history } = e;
15
+ const { redos } = history;
16
+ if (redos.length > 0) {
17
+ const batch = redos[redos.length - 1];
18
+ if (batch.selectionBefore) {
19
+ Transforms.setSelection(e, batch.selectionBefore);
20
+ }
21
+ HistoryEditor.withoutSaving(e, () => {
22
+ Editor.withoutNormalizing(e, () => {
23
+ for (const op of batch.operations) {
24
+ e.apply(op);
25
+ }
26
+ });
27
+ });
28
+ history.redos.pop();
29
+ e.writeHistory("undos", batch);
30
+ }
31
+ };
32
+ e.undo = () => {
33
+ const { history } = e;
34
+ const { undos } = history;
35
+ if (undos.length > 0) {
36
+ const batch = undos[undos.length - 1];
37
+ HistoryEditor.withoutSaving(e, () => {
38
+ Editor.withoutNormalizing(e, () => {
39
+ const inverseOps = batch.operations.map(Operation.inverse).reverse();
40
+ for (const op of inverseOps) {
41
+ e.apply(op);
42
+ }
43
+ if (batch.selectionBefore) {
44
+ Transforms.setSelection(e, batch.selectionBefore);
45
+ }
46
+ });
47
+ });
48
+ e.writeHistory("redos", batch);
49
+ history.undos.pop();
50
+ }
51
+ };
52
+ e.apply = (op) => {
53
+ const { operations, history } = e;
54
+ const { undos } = history;
55
+ const lastBatch = undos[undos.length - 1];
56
+ const lastOp = lastBatch && lastBatch.operations[lastBatch.operations.length - 1];
57
+ let save = HistoryEditor.isSaving(e);
58
+ let merge = HistoryEditor.isMerging(e);
59
+ if (save == null) {
60
+ save = shouldSave2(op, lastOp);
61
+ }
62
+ if (save) {
63
+ if (merge == null) {
64
+ if (lastBatch == null) {
65
+ merge = false;
66
+ } else if (operations.length !== 0) {
67
+ merge = true;
68
+ } else {
69
+ merge = shouldMerge(op, lastOp);
70
+ }
71
+ }
72
+ if (lastBatch && merge) {
73
+ lastBatch.operations.push(op);
74
+ } else {
75
+ const batch = {
76
+ operations: [op],
77
+ selectionBefore: e.selection
78
+ };
79
+ e.writeHistory("undos", batch);
80
+ }
81
+ while (undos.length > 100) {
82
+ undos.shift();
83
+ }
84
+ history.redos = [];
85
+ }
86
+ apply(op);
87
+ };
88
+ e.writeHistory = (stack, batch) => {
89
+ e.history[stack].push(batch);
90
+ };
91
+ return e;
92
+ };
93
+ var shouldMerge = (op, prev) => {
94
+ if (prev && op.type === "insert_text" && prev.type === "insert_text" && op.offset === prev.offset + prev.text.length && Path.equals(op.path, prev.path)) {
95
+ return true;
96
+ }
97
+ if (prev && op.type === "remove_text" && prev.type === "remove_text" && op.offset + op.text.length === prev.offset && Path.equals(op.path, prev.path)) {
98
+ return true;
99
+ }
100
+ return false;
101
+ };
102
+ var defaultShouldSave = (op, prev) => {
103
+ if (op.type === "set_selection") {
104
+ return false;
105
+ }
106
+ return true;
107
+ };
108
+
109
+ // src/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.tsx
110
+ var shouldSave = (op, prev) => {
111
+ const excludedNodeType = "suggestion";
112
+ if (op.type === "insert_node" && Element.isElement(op.node) && op.node.type === excludedNodeType) {
113
+ return false;
114
+ }
115
+ if (op.type === "remove_node" && Element.isElement(op.node) && op.node.type === excludedNodeType) {
116
+ return false;
117
+ }
118
+ if (op.type === "set_node" && "type" in op.newProperties && op.newProperties.type === excludedNodeType) {
119
+ return false;
120
+ }
121
+ if (op.type == "set_node" && "type" in op.properties && op.properties.type === excludedNodeType) {
122
+ return false;
123
+ }
124
+ if (op.type === "merge_node" && "type" in op.properties && op.properties.type === excludedNodeType) {
125
+ return false;
126
+ }
127
+ if (op.type === "split_node" && "type" in op.properties && op.properties.type === excludedNodeType) {
128
+ return false;
129
+ }
130
+ return defaultShouldSave(op, prev);
131
+ };
132
+ function useCopilotTextareaEditor() {
133
+ const editor = useMemo(() => {
134
+ const editor2 = withPartialHistory(withReact(createEditor()), shouldSave);
135
+ const { isVoid } = editor2;
136
+ editor2.isVoid = (element) => {
137
+ switch (element.type) {
138
+ case "suggestion":
139
+ return true;
140
+ default:
141
+ return isVoid(element);
142
+ }
143
+ };
144
+ const { markableVoid } = editor2;
145
+ editor2.markableVoid = (element) => {
146
+ switch (element.type) {
147
+ case "suggestion":
148
+ return true;
149
+ default:
150
+ return markableVoid(element);
151
+ }
152
+ };
153
+ const { isInline } = editor2;
154
+ editor2.isInline = (element) => {
155
+ switch (element.type) {
156
+ case "suggestion":
157
+ return element.inline;
158
+ default:
159
+ return isInline(element);
160
+ }
161
+ };
162
+ return editor2;
163
+ }, []);
164
+ return editor;
165
+ }
166
+ export {
167
+ useCopilotTextareaEditor
168
+ };
5
169
  //# sourceMappingURL=use-copilot-textarea-editor.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../../../src/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.tsx","../../../src/lib/slatejs-edits/with-partial-history.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { createEditor, Element } from \"slate\";\nimport { withReact } from \"slate-react\";\nimport {\n defaultShouldSave,\n ShouldSaveToHistory,\n withPartialHistory,\n} from \"../../lib/slatejs-edits/with-partial-history\";\nimport { CustomEditor } from \"../../types/base/custom-editor\";\n\nconst shouldSave: ShouldSaveToHistory = (op, prev) => {\n const excludedNodeType = \"suggestion\";\n // Check if the operation involves the suggestion inline node type\n if (\n op.type === \"insert_node\" &&\n Element.isElement(op.node) &&\n op.node.type === excludedNodeType\n ) {\n return false;\n }\n\n if (\n op.type === \"remove_node\" &&\n Element.isElement(op.node) &&\n op.node.type === excludedNodeType\n ) {\n return false;\n }\n\n if (\n op.type === \"set_node\" &&\n \"type\" in op.newProperties &&\n op.newProperties.type === excludedNodeType\n ) {\n return false;\n }\n\n if (\n op.type == \"set_node\" &&\n \"type\" in op.properties &&\n op.properties.type === excludedNodeType\n ) {\n return false;\n }\n\n if (\n op.type === \"merge_node\" &&\n \"type\" in op.properties &&\n op.properties.type === excludedNodeType\n ) {\n return false;\n }\n\n if (\n op.type === \"split_node\" &&\n \"type\" in op.properties &&\n op.properties.type === excludedNodeType\n ) {\n return false;\n }\n\n // Otherwise, save the operation to history\n return defaultShouldSave(op, prev);\n};\n\nexport function useCopilotTextareaEditor(): CustomEditor {\n const editor = useMemo(() => {\n const editor = withPartialHistory(withReact(createEditor()), shouldSave);\n\n const { isVoid } = editor;\n editor.isVoid = (element) => {\n switch (element.type) {\n case \"suggestion\":\n return true;\n default:\n return isVoid(element);\n }\n };\n\n const { markableVoid } = editor;\n editor.markableVoid = (element) => {\n switch (element.type) {\n case \"suggestion\":\n return true;\n default:\n return markableVoid(element);\n }\n };\n\n const { isInline } = editor;\n editor.isInline = (element) => {\n switch (element.type) {\n case \"suggestion\":\n return element.inline;\n default:\n return isInline(element);\n }\n };\n\n return editor;\n }, []);\n\n return editor;\n}\n","import { Editor, Operation, Path, Range, Transforms } from \"slate\";\nimport { HistoryEditor } from \"slate-history\";\n\n// Copy-pasted from `https://github.com/ianstormtaylor/slate/blob/main/packages/slate-history/src/with-history.ts`\n// With one exception: the `shouldSave` function is passed in as an argument to `withPartialHistory` instead of being hardcoded\nexport type ShouldSaveToHistory = (\n op: Operation,\n prev: Operation | undefined\n) => boolean;\n\nexport const withPartialHistory = <T extends Editor>(\n editor: T,\n shouldSave: ShouldSaveToHistory\n) => {\n const e = editor as T & HistoryEditor;\n const { apply } = e;\n e.history = { undos: [], redos: [] };\n\n e.redo = () => {\n const { history } = e;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n if (batch.selectionBefore) {\n Transforms.setSelection(e, batch.selectionBefore);\n }\n\n HistoryEditor.withoutSaving(e, () => {\n Editor.withoutNormalizing(e, () => {\n for (const op of batch.operations) {\n e.apply(op);\n }\n });\n });\n\n history.redos.pop();\n e.writeHistory(\"undos\", batch);\n }\n };\n\n e.undo = () => {\n const { history } = e;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n HistoryEditor.withoutSaving(e, () => {\n Editor.withoutNormalizing(e, () => {\n const inverseOps = batch.operations.map(Operation.inverse).reverse();\n\n for (const op of inverseOps) {\n e.apply(op);\n }\n if (batch.selectionBefore) {\n Transforms.setSelection(e, batch.selectionBefore);\n }\n });\n });\n\n e.writeHistory(\"redos\", batch);\n history.undos.pop();\n }\n };\n\n e.apply = (op: Operation) => {\n const { operations, history } = e;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp =\n lastBatch && lastBatch.operations[lastBatch.operations.length - 1];\n let save = HistoryEditor.isSaving(e);\n let merge = HistoryEditor.isMerging(e);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (merge == null) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.operations.push(op);\n } else {\n const batch = {\n operations: [op],\n selectionBefore: e.selection,\n };\n e.writeHistory(\"undos\", batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n history.redos = [];\n }\n\n apply(op);\n };\n\n e.writeHistory = (stack: \"undos\" | \"redos\", batch: any) => {\n e.history[stack].push(batch);\n };\n\n return e;\n};\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nconst shouldMerge = (op: Operation, prev: Operation | undefined): boolean => {\n if (\n prev &&\n op.type === \"insert_text\" &&\n prev.type === \"insert_text\" &&\n op.offset === prev.offset + prev.text.length &&\n Path.equals(op.path, prev.path)\n ) {\n return true;\n }\n\n if (\n prev &&\n op.type === \"remove_text\" &&\n prev.type === \"remove_text\" &&\n op.offset + op.text.length === prev.offset &&\n Path.equals(op.path, prev.path)\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const defaultShouldSave = (\n op: Operation,\n prev: Operation | undefined\n): boolean => {\n if (op.type === \"set_selection\") {\n return false;\n }\n\n return true;\n};\n"],"mappings":"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","names":["shouldSave","editor"]}
@@ -1,6 +1,156 @@
1
- export { usePopulateCopilotTextareaRef } from '../../chunk-YQU7WG7T.mjs';
2
- import '../../chunk-RQHOUUXQ.mjs';
3
- import '../../chunk-IXJ2HCOA.mjs';
4
- import '../../chunk-MRXNTQOX.mjs';
5
- //# sourceMappingURL=out.js.map
1
+ // src/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.ts
2
+ import React from "react";
3
+ import { ReactEditor } from "slate-react";
4
+
5
+ // src/lib/get-text-around-cursor.ts
6
+ import {
7
+ Editor,
8
+ Path,
9
+ Range,
10
+ Text,
11
+ Element,
12
+ Point
13
+ } from "slate";
14
+ function getFullEditorTextWithNewlines(editor) {
15
+ const fullDocumentRange = {
16
+ anchor: Editor.start(editor, []),
17
+ focus: Editor.end(editor, [])
18
+ };
19
+ return extractTextWithNewlines(editor, fullDocumentRange);
20
+ }
21
+ function extractTextWithNewlines(editor, range) {
22
+ const voids = false;
23
+ const [start, end] = Range.edges(range);
24
+ let text = "";
25
+ let lastBlock = null;
26
+ for (const [node, path] of Editor.nodes(editor, {
27
+ at: range,
28
+ match: Text.isText,
29
+ voids
30
+ })) {
31
+ let t = node.text;
32
+ const [block] = Editor.above(editor, {
33
+ at: path,
34
+ match: (n) => Element.isElement(n) && n.type === "paragraph"
35
+ }) || [null];
36
+ if (lastBlock !== block && block) {
37
+ if (lastBlock) {
38
+ text += "\n";
39
+ }
40
+ lastBlock = block;
41
+ }
42
+ if (Path.equals(path, end.path)) {
43
+ t = t.slice(0, end.offset);
44
+ }
45
+ if (Path.equals(path, start.path)) {
46
+ t = t.slice(start.offset);
47
+ }
48
+ text += t;
49
+ }
50
+ return text;
51
+ }
52
+
53
+ // src/lib/slatejs-edits/replace-text.ts
54
+ import { Editor as Editor2, Transforms } from "slate";
55
+ function replaceEditorText(editor, newText) {
56
+ Transforms.delete(editor, {
57
+ at: {
58
+ anchor: Editor2.start(editor, []),
59
+ focus: Editor2.end(editor, [])
60
+ }
61
+ });
62
+ if (newText && newText !== "") {
63
+ Transforms.insertNodes(
64
+ editor,
65
+ [
66
+ {
67
+ type: "paragraph",
68
+ children: [{ text: newText }]
69
+ }
70
+ ],
71
+ {
72
+ at: [0]
73
+ }
74
+ );
75
+ }
76
+ }
77
+
78
+ // src/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.ts
79
+ function usePopulateCopilotTextareaRef(editor, ref) {
80
+ React.useImperativeHandle(
81
+ ref,
82
+ () => {
83
+ class Combined {
84
+ constructor(customMethods2, editorHtmlElement2) {
85
+ this.customMethods = customMethods2;
86
+ this.editorHtmlElement = editorHtmlElement2;
87
+ }
88
+ get(target, propKey) {
89
+ if (this.isKeyOfCustomMethods(propKey)) {
90
+ const value = this.customMethods[propKey];
91
+ if (typeof value === "function") {
92
+ return value.bind(this.customMethods);
93
+ }
94
+ return value;
95
+ } else if (this.isKeyOfHTMLElement(propKey)) {
96
+ const value = this.editorHtmlElement[propKey];
97
+ if (typeof value === "function") {
98
+ return value.bind(this.editorHtmlElement);
99
+ }
100
+ return value;
101
+ }
102
+ }
103
+ set(target, propKey, value) {
104
+ if (this.isKeyOfCustomMethods(propKey)) {
105
+ this.customMethods[propKey] = value;
106
+ } else if (this.isKeyOfHTMLElement(propKey)) {
107
+ this.editorHtmlElement[propKey] = value;
108
+ } else {
109
+ target[propKey] = value;
110
+ }
111
+ return true;
112
+ }
113
+ isKeyOfCustomMethods(key) {
114
+ return key in this.customMethods;
115
+ }
116
+ isKeyOfHTMLElement(key) {
117
+ return key in this.editorHtmlElement;
118
+ }
119
+ }
120
+ const handler = {
121
+ get(target, propKey) {
122
+ return target.get(target, propKey);
123
+ },
124
+ set(target, propKey, value) {
125
+ return target.set(target, propKey, value);
126
+ }
127
+ };
128
+ class CustomMethods {
129
+ constructor(editor2) {
130
+ this.editor = editor2;
131
+ }
132
+ focus() {
133
+ ReactEditor.focus(this.editor);
134
+ }
135
+ blur() {
136
+ ReactEditor.blur(this.editor);
137
+ }
138
+ get value() {
139
+ return getFullEditorTextWithNewlines(this.editor);
140
+ }
141
+ set value(value) {
142
+ replaceEditorText(this.editor, value);
143
+ }
144
+ }
145
+ const editorHtmlElement = ReactEditor.toDOMNode(editor, editor);
146
+ const customMethods = new CustomMethods(editor);
147
+ const combined = new Combined(customMethods, editorHtmlElement);
148
+ return new Proxy(combined, handler);
149
+ },
150
+ [editor]
151
+ );
152
+ }
153
+ export {
154
+ usePopulateCopilotTextareaRef
155
+ };
6
156
  //# sourceMappingURL=use-populate-copilot-textarea-ref.mjs.map