@copilotkit/react-textarea 0.33.0 → 0.34.0-mme-fix-esm-error.2

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 (49) hide show
  1. package/.turbo/turbo-build.log +53 -53
  2. package/CHANGELOG.md +48 -0
  3. package/dist/{chunk-QLRPU7CE.mjs → chunk-22TYLEZZ.mjs} +8 -3
  4. package/dist/{chunk-QLRPU7CE.mjs.map → chunk-22TYLEZZ.mjs.map} +1 -1
  5. package/dist/{chunk-P4QVFRLY.mjs → chunk-CF5GISTC.mjs} +8 -8
  6. package/dist/chunk-CF5GISTC.mjs.map +1 -0
  7. package/dist/{chunk-F4ZGXQBM.mjs → chunk-COQISBP2.mjs} +2 -2
  8. package/dist/{chunk-6GJ732U4.mjs → chunk-DMLXXOXD.mjs} +4 -4
  9. package/dist/chunk-DMLXXOXD.mjs.map +1 -0
  10. package/dist/{chunk-SN7BEUGH.mjs → chunk-OGLVRSCO.mjs} +3 -5
  11. package/dist/chunk-OGLVRSCO.mjs.map +1 -0
  12. package/dist/{chunk-TH4DT752.mjs → chunk-SP5HFO3H.mjs} +2 -2
  13. package/dist/components/base-copilot-textarea/base-copilot-textarea.js +16 -13
  14. package/dist/components/base-copilot-textarea/base-copilot-textarea.js.map +1 -1
  15. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +5 -5
  16. package/dist/components/copilot-textarea/copilot-textarea.js +16 -13
  17. package/dist/components/copilot-textarea/copilot-textarea.js.map +1 -1
  18. package/dist/components/copilot-textarea/copilot-textarea.mjs +6 -6
  19. package/dist/components/hovering-toolbar/hovering-toolbar-components.js +7 -7
  20. package/dist/components/hovering-toolbar/hovering-toolbar-components.js.map +1 -1
  21. package/dist/components/hovering-toolbar/hovering-toolbar-components.mjs +1 -1
  22. package/dist/components/hovering-toolbar/hovering-toolbar.js +10 -12
  23. package/dist/components/hovering-toolbar/hovering-toolbar.js.map +1 -1
  24. package/dist/components/hovering-toolbar/hovering-toolbar.mjs +4 -4
  25. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js +2 -4
  26. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js.map +1 -1
  27. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +1 -1
  28. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js +2 -4
  29. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js.map +1 -1
  30. package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +2 -2
  31. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js +2 -4
  32. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.js.map +1 -1
  33. package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +2 -2
  34. package/dist/components/index.js +16 -13
  35. package/dist/components/index.js.map +1 -1
  36. package/dist/components/index.mjs +6 -6
  37. package/dist/index.js +16 -13
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.mjs +6 -6
  40. package/package.json +7 -7
  41. package/src/components/base-copilot-textarea/base-copilot-textarea.tsx +5 -0
  42. package/src/components/hovering-toolbar/hovering-toolbar-components.tsx +20 -18
  43. package/src/components/hovering-toolbar/hovering-toolbar.tsx +1 -1
  44. package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx +1 -7
  45. package/dist/chunk-6GJ732U4.mjs.map +0 -1
  46. package/dist/chunk-P4QVFRLY.mjs.map +0 -1
  47. package/dist/chunk-SN7BEUGH.mjs.map +0 -1
  48. /package/dist/{chunk-F4ZGXQBM.mjs.map → chunk-COQISBP2.mjs.map} +0 -0
  49. /package/dist/{chunk-TH4DT752.mjs.map → chunk-SP5HFO3H.mjs.map} +0 -0
@@ -1,5 +1,5 @@
1
1
 
2
- > @copilotkit/react-textarea@0.33.0 build /home/runner/work/CopilotKit/CopilotKit/CopilotKit/packages/react-textarea
2
+ > @copilotkit/react-textarea@0.34.0-mme-fix-esm-error.2 build /home/runner/work/CopilotKit/CopilotKit/CopilotKit/packages/react-textarea
3
3
  > tsup --clean
4
4
 
5
5
  CLI Building entry: src/index.tsx, src/components/index.ts, src/context/index.ts, src/hooks/index.ts, src/lib/debouncer.ts, src/lib/editor-to-text.ts, src/lib/get-text-around-cursor.ts, src/lib/retry.tsx, src/lib/stream-promise-flatten.ts, src/lib/utils.test.ts, src/lib/utils.ts, src/types/html-copilot-textarea-element.ts, src/types/index.ts, src/components/base-copilot-textarea/base-copilot-textarea.tsx, src/components/base-copilot-textarea/render-element.tsx, src/components/base-copilot-textarea/render-placeholder.tsx, src/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.tsx, src/components/base-copilot-textarea/use-add-branding-css.tsx, src/components/copilot-textarea/copilot-textarea.tsx, src/components/hovering-toolbar/hovering-editor-provider.tsx, src/components/hovering-toolbar/hovering-toolbar-components.tsx, src/components/hovering-toolbar/hovering-toolbar.tsx, src/components/manual-ui/chip-with-icon.tsx, src/components/source-search-box/source-search-box.tsx, src/components/ui/button.tsx, src/components/ui/card.tsx, src/components/ui/command.tsx, src/components/ui/dialog.tsx, src/components/ui/label.tsx, src/components/ui/separator.tsx, src/components/ui/textarea.tsx, src/hooks/base-copilot-textarea-implementation/use-autosuggestions.ts, src/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.tsx, src/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.ts, src/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.tsx, src/hooks/make-autosuggestions-function/use-make-standard-insertion-function.tsx, src/hooks/misc/use-autosize-textarea.tsx, src/lib/slatejs-edits/add-autocompletions.ts, src/lib/slatejs-edits/clear-autocompletions.ts, src/lib/slatejs-edits/replace-text.ts, src/lib/slatejs-edits/with-partial-history.ts, src/types/autosuggestions-config/autosuggestions-config-user-specified.tsx, src/types/autosuggestions-config/autosuggestions-config.tsx, src/types/autosuggestions-config/editing-api-config.tsx, src/types/autosuggestions-config/index.ts, src/types/autosuggestions-config/insertions-api-config.tsx, src/types/autosuggestions-config/suggestions-api-config.tsx, src/types/base/autosuggestion-state.ts, src/types/base/autosuggestions-bare-function.ts, src/types/base/base-autosuggestions-config.tsx, src/types/base/base-copilot-textarea-props.tsx, src/types/base/custom-editor.tsx, src/types/base/editor-autocomplete-state.ts, src/types/base/index.ts, src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx, src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx, src/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.tsx, src/components/hovering-toolbar/text-insertion-prompt-box/index.ts, src/types/autosuggestions-config/subtypes/make-system-prompt.ts, src/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.tsx
@@ -28,7 +28,7 @@ Browserslist: caniuse-lite is outdated. Please run:
28
28
  ESM dist/chunk-DE5K76I2.mjs 43.00 B
29
29
  ESM dist/chunk-WADHCMPK.mjs 43.00 B
30
30
  ESM dist/chunk-MMVDU6DF.mjs 43.00 B
31
- ESM dist/chunk-TH4DT752.mjs 1.88 KB
31
+ ESM dist/chunk-SP5HFO3H.mjs 1.88 KB
32
32
  ESM dist/chunk-RT4UTBH3.mjs 2.09 KB
33
33
  ESM dist/chunk-QCPS6IYI.mjs 3.85 KB
34
34
  ESM dist/chunk-RUV6NBIF.mjs 43.00 B
@@ -36,7 +36,7 @@ Browserslist: caniuse-lite is outdated. Please run:
36
36
  ESM dist/chunk-4OJ3H65F.mjs 2.50 KB
37
37
  ESM dist/chunk-RKQ6RTZM.mjs 2.89 KB
38
38
  ESM dist/chunk-KDVMG3XF.mjs 2.48 KB
39
- ESM dist/chunk-QLRPU7CE.mjs 8.56 KB
39
+ ESM dist/chunk-22TYLEZZ.mjs 8.76 KB
40
40
  ESM dist/chunk-DRV2FOHZ.mjs 2.06 KB
41
41
  ESM dist/chunk-4NHVQZ67.mjs 3.05 KB
42
42
  ESM dist/chunk-VPEH6V7T.mjs 2.63 KB
@@ -47,16 +47,16 @@ Browserslist: caniuse-lite is outdated. Please run:
47
47
  ESM dist/chunk-JJLQVT7S.mjs 468.00 B
48
48
  ESM dist/chunk-LQ2OWQU7.mjs 1.41 KB
49
49
  ESM dist/chunk-7LSRNPNI.mjs 2.13 KB
50
- ESM dist/chunk-6GJ732U4.mjs 3.82 KB
50
+ ESM dist/chunk-DMLXXOXD.mjs 3.85 KB
51
51
  ESM dist/chunk-L7VVZH4Q.mjs 43.00 B
52
- ESM dist/chunk-F4ZGXQBM.mjs 928.00 B
53
- ESM dist/chunk-SN7BEUGH.mjs 8.46 KB
52
+ ESM dist/chunk-COQISBP2.mjs 928.00 B
53
+ ESM dist/chunk-OGLVRSCO.mjs 8.42 KB
54
54
  ESM dist/chunk-YNXNMCDX.mjs 1.42 KB
55
55
  ESM dist/chunk-3PQ7GSFE.mjs 544.00 B
56
56
  ESM dist/chunk-WFTAAA7R.mjs 1.81 KB
57
57
  ESM dist/chunk-YFK5BFEI.mjs 812.00 B
58
58
  ESM dist/chunk-LYB4B6MK.mjs 672.00 B
59
- ESM dist/chunk-P4QVFRLY.mjs 2.42 KB
59
+ ESM dist/chunk-CF5GISTC.mjs 2.43 KB
60
60
  ESM dist/chunk-4OZR65UB.mjs 2.46 KB
61
61
  ESM dist/chunk-FFSICDS5.mjs 4.66 KB
62
62
  ESM dist/chunk-4HBKWUCT.mjs 4.29 KB
@@ -139,7 +139,7 @@ Browserslist: caniuse-lite is outdated. Please run:
139
139
  ESM dist/chunk-DE5K76I2.mjs.map 71.00 B
140
140
  ESM dist/chunk-WADHCMPK.mjs.map 71.00 B
141
141
  ESM dist/chunk-MMVDU6DF.mjs.map 71.00 B
142
- ESM dist/chunk-TH4DT752.mjs.map 3.41 KB
142
+ ESM dist/chunk-SP5HFO3H.mjs.map 3.41 KB
143
143
  ESM dist/chunk-RT4UTBH3.mjs.map 4.52 KB
144
144
  ESM dist/chunk-QCPS6IYI.mjs.map 7.62 KB
145
145
  ESM dist/chunk-RUV6NBIF.mjs.map 71.00 B
@@ -147,7 +147,7 @@ Browserslist: caniuse-lite is outdated. Please run:
147
147
  ESM dist/chunk-4OJ3H65F.mjs.map 3.91 KB
148
148
  ESM dist/chunk-RKQ6RTZM.mjs.map 4.17 KB
149
149
  ESM dist/chunk-KDVMG3XF.mjs.map 3.57 KB
150
- ESM dist/chunk-QLRPU7CE.mjs.map 15.56 KB
150
+ ESM dist/chunk-22TYLEZZ.mjs.map 15.84 KB
151
151
  ESM dist/chunk-DRV2FOHZ.mjs.map 3.80 KB
152
152
  ESM dist/chunk-4NHVQZ67.mjs.map 6.12 KB
153
153
  ESM dist/chunk-VPEH6V7T.mjs.map 4.76 KB
@@ -158,16 +158,16 @@ Browserslist: caniuse-lite is outdated. Please run:
158
158
  ESM dist/chunk-JJLQVT7S.mjs.map 882.00 B
159
159
  ESM dist/chunk-LQ2OWQU7.mjs.map 3.00 KB
160
160
  ESM dist/chunk-7LSRNPNI.mjs.map 3.46 KB
161
- ESM dist/chunk-6GJ732U4.mjs.map 6.93 KB
161
+ ESM dist/chunk-DMLXXOXD.mjs.map 6.98 KB
162
162
  ESM dist/chunk-L7VVZH4Q.mjs.map 71.00 B
163
- ESM dist/chunk-F4ZGXQBM.mjs.map 1.45 KB
164
- ESM dist/chunk-SN7BEUGH.mjs.map 14.07 KB
163
+ ESM dist/chunk-COQISBP2.mjs.map 1.45 KB
164
+ ESM dist/chunk-OGLVRSCO.mjs.map 13.70 KB
165
165
  ESM dist/chunk-YNXNMCDX.mjs.map 2.41 KB
166
166
  ESM dist/chunk-3PQ7GSFE.mjs.map 1.13 KB
167
167
  ESM dist/chunk-WFTAAA7R.mjs.map 2.57 KB
168
168
  ESM dist/chunk-YFK5BFEI.mjs.map 1.09 KB
169
169
  ESM dist/chunk-LYB4B6MK.mjs.map 1.36 KB
170
- ESM dist/chunk-P4QVFRLY.mjs.map 3.55 KB
170
+ ESM dist/chunk-CF5GISTC.mjs.map 3.61 KB
171
171
  ESM dist/chunk-4OZR65UB.mjs.map 4.53 KB
172
172
  ESM dist/chunk-FFSICDS5.mjs.map 6.83 KB
173
173
  ESM dist/chunk-4HBKWUCT.mjs.map 5.66 KB
@@ -200,7 +200,10 @@ Browserslist: caniuse-lite is outdated. Please run:
200
200
  ESM dist/components/ui/button.mjs.map 71.00 B
201
201
  ESM dist/components/manual-ui/chip-with-icon.mjs.map 937.00 B
202
202
  ESM dist/components/source-search-box/source-search-box.mjs.map 71.00 B
203
+ ESM dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map 71.00 B
203
204
  ESM dist/types/base/base-autosuggestions-config.mjs.map 71.00 B
205
+ ESM dist/types/base/base-copilot-textarea-props.mjs.map 71.00 B
206
+ ESM dist/types/base/custom-editor.mjs.map 71.00 B
204
207
  ESM dist/types/base/editor-autocomplete-state.mjs.map 71.00 B
205
208
  ESM dist/types/base/index.mjs.map 71.00 B
206
209
  ESM dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs.map 71.00 B
@@ -214,22 +217,22 @@ Browserslist: caniuse-lite is outdated. Please run:
214
217
  ESM dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map 71.00 B
215
218
  ESM dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs.map 71.00 B
216
219
  ESM dist/lib/slatejs-edits/add-autocompletions.mjs.map 71.00 B
217
- ESM dist/types/base/custom-editor.mjs.map 71.00 B
218
220
  ESM dist/lib/slatejs-edits/clear-autocompletions.mjs.map 71.00 B
219
221
  ESM dist/lib/slatejs-edits/replace-text.mjs.map 71.00 B
220
- ESM dist/components/ui/command.mjs.map 71.00 B
221
222
  ESM dist/components/ui/card.mjs.map 3.08 KB
222
- ESM dist/components/ui/label.mjs.map 71.00 B
223
+ ESM dist/components/ui/command.mjs.map 71.00 B
223
224
  ESM dist/components/ui/dialog.mjs.map 71.00 B
224
- ESM dist/components/ui/textarea.mjs.map 1.11 KB
225
+ ESM dist/components/ui/label.mjs.map 71.00 B
225
226
  ESM dist/components/ui/separator.mjs.map 1.20 KB
227
+ ESM dist/components/ui/textarea.mjs.map 1.11 KB
226
228
  ESM dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs.map 71.00 B
227
229
  ESM dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.mjs.map 71.00 B
228
- ESM dist/components/copilot-textarea/copilot-textarea.mjs.map 71.00 B
229
230
  ESM dist/components/base-copilot-textarea/use-add-branding-css.mjs.map 71.00 B
230
- ESM dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map 71.00 B
231
+ ESM dist/components/copilot-textarea/copilot-textarea.mjs.map 71.00 B
231
232
  ESM dist/components/hovering-toolbar/hovering-editor-provider.mjs.map 71.00 B
233
+ ESM dist/components/hovering-toolbar/hovering-toolbar-components.mjs.map 71.00 B
232
234
  ESM dist/components/hovering-toolbar/hovering-toolbar.mjs.map 71.00 B
235
+ ESM dist/lib/stream-promise-flatten.mjs.map 71.00 B
233
236
  ESM dist/lib/utils.test.mjs.map 350.00 B
234
237
  ESM dist/lib/utils.mjs.map 71.00 B
235
238
  ESM dist/types/html-copilot-textarea-element.mjs.map 71.00 B
@@ -237,19 +240,16 @@ Browserslist: caniuse-lite is outdated. Please run:
237
240
  ESM dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map 71.00 B
238
241
  ESM dist/components/base-copilot-textarea/render-element.mjs.map 71.00 B
239
242
  ESM dist/components/base-copilot-textarea/render-placeholder.mjs.map 71.00 B
240
- ESM dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs.map 71.00 B
241
- ESM dist/types/base/base-copilot-textarea-props.mjs.map 71.00 B
242
- ESM dist/lib/stream-promise-flatten.mjs.map 71.00 B
243
243
  ESM dist/types/autosuggestions-config/subtypes/make-system-prompt.mjs.map 71.00 B
244
244
  ESM dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.mjs.map 71.00 B
245
- ESM ⚡️ Build success in 2051ms
246
- CJS dist/index.js 79.47 KB
247
- CJS dist/components/index.js 79.28 KB
245
+ ESM ⚡️ Build success in 1905ms
246
+ CJS dist/index.js 79.68 KB
248
247
  CJS dist/index.css 18.82 KB
248
+ CJS dist/components/index.js 79.49 KB
249
249
  CJS dist/components/index.css 242.00 B
250
250
  CJS dist/context/index.js 803.00 B
251
- CJS dist/lib/debouncer.js 2.38 KB
252
251
  CJS dist/hooks/index.js 797.00 B
252
+ CJS dist/lib/debouncer.js 2.38 KB
253
253
  CJS dist/lib/editor-to-text.js 2.35 KB
254
254
  CJS dist/lib/get-text-around-cursor.js 4.09 KB
255
255
  CJS dist/lib/retry.js 1.43 KB
@@ -258,17 +258,17 @@ Browserslist: caniuse-lite is outdated. Please run:
258
258
  CJS dist/lib/utils.js 3.08 KB
259
259
  CJS dist/types/html-copilot-textarea-element.js 893.00 B
260
260
  CJS dist/types/index.js 10.66 KB
261
- CJS dist/components/base-copilot-textarea/base-copilot-textarea.js 63.54 KB
261
+ CJS dist/components/base-copilot-textarea/base-copilot-textarea.js 63.75 KB
262
262
  CJS dist/components/base-copilot-textarea/base-copilot-textarea.css 258.00 B
263
263
  CJS dist/components/base-copilot-textarea/render-element.js 2.94 KB
264
264
  CJS dist/components/base-copilot-textarea/render-placeholder.js 2.84 KB
265
265
  CJS dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.js 4.02 KB
266
266
  CJS dist/components/base-copilot-textarea/use-add-branding-css.js 3.19 KB
267
- CJS dist/components/copilot-textarea/copilot-textarea.js 79.21 KB
267
+ CJS dist/components/copilot-textarea/copilot-textarea.js 79.42 KB
268
268
  CJS dist/components/copilot-textarea/copilot-textarea.css 253.00 B
269
269
  CJS dist/components/hovering-toolbar/hovering-editor-provider.js 1.85 KB
270
- CJS dist/components/hovering-toolbar/hovering-toolbar-components.js 5.54 KB
271
- CJS dist/components/hovering-toolbar/hovering-toolbar.js 33.65 KB
270
+ CJS dist/components/hovering-toolbar/hovering-toolbar-components.js 5.55 KB
271
+ CJS dist/components/hovering-toolbar/hovering-toolbar.js 33.66 KB
272
272
  CJS dist/components/manual-ui/chip-with-icon.js 1.73 KB
273
273
  CJS dist/components/source-search-box/source-search-box.js 9.53 KB
274
274
  CJS dist/components/ui/button.js 4.82 KB
@@ -301,78 +301,78 @@ Browserslist: caniuse-lite is outdated. Please run:
301
301
  CJS dist/types/base/custom-editor.js 835.00 B
302
302
  CJS dist/types/base/editor-autocomplete-state.js 1.92 KB
303
303
  CJS dist/types/base/index.js 1.93 KB
304
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js 24.50 KB
305
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js 25.28 KB
304
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js 24.47 KB
305
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js 25.25 KB
306
306
  CJS dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.js 5.48 KB
307
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/index.js 25.22 KB
307
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/index.js 25.19 KB
308
308
  CJS dist/types/autosuggestions-config/subtypes/make-system-prompt.js 881.00 B
309
309
  CJS dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.js 906.00 B
310
- CJS dist/index.js.map 142.77 KB
311
- CJS dist/components/index.js.map 142.97 KB
310
+ CJS dist/index.js.map 142.79 KB
311
+ CJS dist/components/index.js.map 142.99 KB
312
312
  CJS dist/index.css.map 29.12 KB
313
- CJS dist/components/index.css.map 429.00 B
314
313
  CJS dist/context/index.js.map 139.00 B
315
- CJS dist/lib/debouncer.js.map 1.68 KB
316
314
  CJS dist/hooks/index.js.map 137.00 B
315
+ CJS dist/lib/debouncer.js.map 1.68 KB
317
316
  CJS dist/lib/editor-to-text.js.map 2.86 KB
318
317
  CJS dist/lib/get-text-around-cursor.js.map 5.75 KB
319
318
  CJS dist/lib/retry.js.map 1018.00 B
319
+ CJS dist/components/index.css.map 429.00 B
320
320
  CJS dist/lib/stream-promise-flatten.js.map 1.45 KB
321
321
  CJS dist/lib/utils.test.js.map 352.00 B
322
322
  CJS dist/lib/utils.js.map 2.53 KB
323
323
  CJS dist/types/html-copilot-textarea-element.js.map 280.00 B
324
324
  CJS dist/types/index.js.map 18.56 KB
325
- CJS dist/components/base-copilot-textarea/base-copilot-textarea.js.map 113.28 KB
326
- CJS dist/components/base-copilot-textarea/base-copilot-textarea.css.map 432.00 B
325
+ CJS dist/components/base-copilot-textarea/base-copilot-textarea.js.map 113.30 KB
327
326
  CJS dist/components/base-copilot-textarea/render-element.js.map 1.75 KB
328
327
  CJS dist/components/base-copilot-textarea/render-placeholder.js.map 1020.00 B
329
328
  CJS dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.js.map 5.80 KB
330
329
  CJS dist/components/base-copilot-textarea/use-add-branding-css.js.map 3.50 KB
331
- CJS dist/components/copilot-textarea/copilot-textarea.js.map 142.80 KB
330
+ CJS dist/components/base-copilot-textarea/base-copilot-textarea.css.map 432.00 B
332
331
  CJS dist/components/copilot-textarea/copilot-textarea.css.map 432.00 B
333
332
  CJS dist/components/hovering-toolbar/hovering-editor-provider.js.map 1.40 KB
334
- CJS dist/components/hovering-toolbar/hovering-toolbar-components.js.map 3.68 KB
335
- CJS dist/components/hovering-toolbar/hovering-toolbar.js.map 53.78 KB
333
+ CJS dist/components/hovering-toolbar/hovering-toolbar-components.js.map 3.75 KB
334
+ CJS dist/components/hovering-toolbar/hovering-toolbar.js.map 53.52 KB
336
335
  CJS dist/components/manual-ui/chip-with-icon.js.map 969.00 B
337
336
  CJS dist/components/source-search-box/source-search-box.js.map 13.01 KB
337
+ CJS dist/components/copilot-textarea/copilot-textarea.js.map 142.82 KB
338
338
  CJS dist/components/ui/button.js.map 4.34 KB
339
339
  CJS dist/components/ui/card.js.map 4.86 KB
340
- CJS dist/components/ui/command.js.map 14.31 KB
341
340
  CJS dist/components/ui/dialog.js.map 7.44 KB
341
+ CJS dist/components/ui/command.js.map 14.31 KB
342
342
  CJS dist/components/ui/label.js.map 2.85 KB
343
343
  CJS dist/components/ui/separator.js.map 2.96 KB
344
344
  CJS dist/components/ui/textarea.js.map 2.87 KB
345
- CJS dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.js.map 10.30 KB
346
345
  CJS dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.js.map 9.92 KB
347
- CJS dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.js.map 10.46 KB
346
+ CJS dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.js.map 10.30 KB
348
347
  CJS dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.js.map 5.49 KB
349
- CJS dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.js.map 8.60 KB
348
+ CJS dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.js.map 10.46 KB
350
349
  CJS dist/hooks/misc/use-autosize-textarea.js.map 1.17 KB
350
+ CJS dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.js.map 8.60 KB
351
351
  CJS dist/lib/slatejs-edits/add-autocompletions.js.map 1.08 KB
352
352
  CJS dist/lib/slatejs-edits/clear-autocompletions.js.map 1.14 KB
353
353
  CJS dist/lib/slatejs-edits/replace-text.js.map 1.17 KB
354
354
  CJS dist/lib/slatejs-edits/with-partial-history.js.map 6.16 KB
355
355
  CJS dist/types/autosuggestions-config/autosuggestions-config-user-specified.js.map 1.16 KB
356
- CJS dist/types/autosuggestions-config/autosuggestions-config.js.map 18.42 KB
357
356
  CJS dist/types/autosuggestions-config/editing-api-config.js.map 3.96 KB
357
+ CJS dist/types/autosuggestions-config/autosuggestions-config.js.map 18.42 KB
358
358
  CJS dist/types/autosuggestions-config/index.js.map 19.08 KB
359
359
  CJS dist/types/autosuggestions-config/insertions-api-config.js.map 4.22 KB
360
360
  CJS dist/types/autosuggestions-config/suggestions-api-config.js.map 3.63 KB
361
361
  CJS dist/types/base/autosuggestion-state.js.map 269.00 B
362
362
  CJS dist/types/base/autosuggestions-bare-function.js.map 1.01 KB
363
- CJS dist/types/base/base-autosuggestions-config.js.map 5.34 KB
364
363
  CJS dist/types/base/base-copilot-textarea-props.js.map 2.29 KB
364
+ CJS dist/types/base/base-autosuggestions-config.js.map 5.34 KB
365
365
  CJS dist/types/base/custom-editor.js.map 886.00 B
366
366
  CJS dist/types/base/editor-autocomplete-state.js.map 2.64 KB
367
367
  CJS dist/types/base/index.js.map 5.72 KB
368
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js.map 36.71 KB
369
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js.map 38.12 KB
368
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.js.map 36.34 KB
369
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.js.map 37.75 KB
370
370
  CJS dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.js.map 5.26 KB
371
- CJS dist/components/hovering-toolbar/text-insertion-prompt-box/index.js.map 38.35 KB
372
371
  CJS dist/types/autosuggestions-config/subtypes/make-system-prompt.js.map 268.00 B
373
372
  CJS dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.js.map 283.00 B
374
- CJS ⚡️ Build success in 2110ms
375
- DTS ⚡️ Build success in 16297ms
373
+ CJS dist/components/hovering-toolbar/text-insertion-prompt-box/index.js.map 37.98 KB
374
+ CJS ⚡️ Build success in 1984ms
375
+ DTS ⚡️ Build success in 15766ms
376
376
  DTS dist/index.d.ts 1.34 KB
377
377
  DTS dist/components/base-copilot-textarea/base-copilot-textarea.d.ts 1.62 KB
378
378
  DTS dist/components/copilot-textarea/copilot-textarea.d.ts 1.36 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # ui
2
2
 
3
+ ## 0.34.0-mme-fix-esm-error.2
4
+
5
+ ### Minor Changes
6
+
7
+ - ESM by default
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @copilotkit/react-core@0.24.0-mme-fix-esm-error.2
13
+ - @copilotkit/shared@0.8.0-mme-fix-esm-error.2
14
+
15
+ ## 0.34.0-mme-fix-esm-error.1
16
+
17
+ ### Minor Changes
18
+
19
+ - ESM by default
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies
24
+ - @copilotkit/react-core@0.24.0-mme-fix-esm-error.1
25
+ - @copilotkit/shared@0.8.0-mme-fix-esm-error.1
26
+
27
+ ## 0.34.0-mme-fix-esm-error.0
28
+
29
+ ### Minor Changes
30
+
31
+ - Use esm by default
32
+
33
+ ### Patch Changes
34
+
35
+ - Updated dependencies
36
+ - @copilotkit/react-core@0.24.0-mme-fix-esm-error.0
37
+ - @copilotkit/shared@0.8.0-mme-fix-esm-error.0
38
+
39
+ ## 0.34.0-mme-fix-esm-error.0
40
+
41
+ ### Minor Changes
42
+
43
+ - Add distinct exports for cjs and esm
44
+
45
+ ### Patch Changes
46
+
47
+ - Updated dependencies
48
+ - @copilotkit/react-core@0.24.0-mme-fix-esm-error.0
49
+ - @copilotkit/shared@0.8.0-mme-fix-esm-error.0
50
+
3
51
  ## 0.33.0
4
52
 
5
53
  ### Minor Changes
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-7LSRNPNI.mjs";
25
25
  import {
26
26
  HoveringToolbar
27
- } from "./chunk-6GJ732U4.mjs";
27
+ } from "./chunk-DMLXXOXD.mjs";
28
28
  import {
29
29
  HoveringEditorProvider,
30
30
  useHoveringEditorContext
@@ -227,7 +227,12 @@ var BaseCopilotTextareaWithHoveringContext = React.forwardRef(
227
227
  onKeyDownHandlerForAutocomplete(event);
228
228
  (_a2 = props.onKeyDown) == null ? void 0 : _a2.call(props, event);
229
229
  },
230
- className: moddedClassName
230
+ className: moddedClassName,
231
+ onBlur: (ev) => {
232
+ var _a2;
233
+ (_a2 = props.onBlur) == null ? void 0 : _a2.call(props, ev);
234
+ clearAutocompletionsFromEditor(editor);
235
+ }
231
236
  }, propsToForward)
232
237
  )
233
238
  ]
@@ -251,4 +256,4 @@ function makeSemiFakeReactTextAreaEvent(currentText) {
251
256
  export {
252
257
  BaseCopilotTextarea
253
258
  };
254
- //# sourceMappingURL=chunk-QLRPU7CE.mjs.map
259
+ //# sourceMappingURL=chunk-22TYLEZZ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/base-copilot-textarea-implementation/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor\";\nimport { usePopulateCopilotTextareaRef } from \"../../hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundCollapsedCursor,\n} from \"../../lib/get-text-around-cursor\";\nimport { addAutocompletionsToEditor } from \"../../lib/slatejs-edits/add-autocompletions\";\nimport { clearAutocompletionsFromEditor } from \"../../lib/slatejs-edits/clear-autocompletions\";\nimport { replaceEditorText } from \"../../lib/slatejs-edits/replace-text\";\nimport { BaseAutosuggestionsConfig, defaultBaseAutosuggestionsConfig } from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport \"./base-copilot-textarea.css\";\nimport { HoveringToolbar } from \"../hovering-toolbar/hovering-toolbar\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\nimport {\n HoveringEditorProvider,\n useHoveringEditorContext,\n} from \"../hovering-toolbar/hovering-editor-provider\";\nimport { TrackerTextEditedSinceLastCursorMovement } from \"./track-cursor-moved-since-last-text-change\";\n\n/**\n * Purpose: to be used as the `ref` type for `CopilotTextarea` and `BaseCopilotTextarea`.\n *\n * This interface extends `HTMLElement`, and is the subset of `HTMLTextAreaElement` that \"actually matters\".\n * It provides the core functionality that consumers of `HTMLTextAreaElement` need 99.9% of the time:\n * - `value`: the current value of the textarea\n * - `focus`: make the textarea focused\n * - `blur`: make the textarea unfocused\n */\nexport interface HTMLCopilotTextAreaElement extends HTMLElement {\n /**\n * The current value of the textarea.\n */\n value: string;\n\n /**\n * focus on the textarea\n */\n focus: () => void;\n\n /**\n * unfocus the textarea.\n *\n * Called `blur` for syntactic compatibility with `HTMLTextAreaElement`.\n */\n blur: () => void;\n}\n\n/**\n * Not intended for direct use. Use CopilotTextarea instead.\n *\n * The `BaseCopilotTextarea` includes the basic UX component,\n * without the business logic / AI logic that makes the content useful and coherent.\n *\n * It is useful if you want to build your own backend, with fully custom business logic\n * for figuring out which contnet to fill in.\n */\nexport const BaseCopilotTextarea = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n return (\n <HoveringEditorProvider>\n <BaseCopilotTextareaWithHoveringContext {...props} ref={ref} />\n </HoveringEditorProvider>\n );\n },\n);\n\n/**\n * Not intended for direct use. Use `CopilotTextarea` instead.\n *\n * This is the private core of the `BaseCopilotTextarea` component.\n * For practical purposes the implementation is cleaner assuming containment in a `HoveringEditorProviderContext`.\n *\n * Therefore we separate the core logic into this component,\n * and wrap it in a `HoveringEditorProviderContext` in `BaseCopilotTextarea`.\n */\nconst BaseCopilotTextareaWithHoveringContext = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n const autosuggestionsConfig: BaseAutosuggestionsConfig = {\n ...defaultBaseAutosuggestionsConfig,\n ...props.baseAutosuggestionsConfig,\n };\n\n const valueOnInitialRender = useMemo(() => props.value ?? \"\", []);\n const [lastKnownFullEditorText, setLastKnownFullEditorText] = useState(valueOnInitialRender);\n const [cursorMovedSinceLastTextChange, setCursorMovedSinceLastTextChange] = useState(false);\n\n // // When the editor text changes, we want to reset the `textEditedSinceLastCursorMovement` state.\n // useEffect(() => {\n // setCursorMovedSinceLastTextChange(false);\n // }, [lastKnownFullEditorText]);\n\n const initialValue: Descendant[] = useMemo(() => {\n return [\n {\n type: \"paragraph\",\n children: [{ text: valueOnInitialRender }],\n },\n ];\n }, [valueOnInitialRender]);\n\n const editor = useCopilotTextareaEditor();\n\n const { isDisplayed: hoveringEditorIsDisplayed, setIsDisplayed: setHoveringEditorIsDisplayed } =\n useHoveringEditorContext();\n\n const insertText = useCallback(\n (autosuggestion: AutosuggestionState) => {\n Editor.insertText(editor, autosuggestion.text, {\n at: autosuggestion.point,\n });\n },\n [editor],\n );\n\n const shouldDisableAutosuggestions =\n // textarea is manually disabled:\n autosuggestionsConfig.disabled ||\n // hovering editor is displayed:\n hoveringEditorIsDisplayed ||\n // the cursor has moved since the last text change AND we are configured to disable autosuggestions in this case:\n (cursorMovedSinceLastTextChange &&\n autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText);\n\n const {\n currentAutocompleteSuggestion,\n onChangeHandler: onChangeHandlerForAutocomplete,\n onKeyDownHandler: onKeyDownHandlerForAutocomplete,\n } = useAutosuggestions(\n autosuggestionsConfig.debounceTime,\n autosuggestionsConfig.shouldAcceptAutosuggestionOnKeyPress,\n autosuggestionsConfig.apiConfig.autosuggestionsFunction,\n insertText,\n autosuggestionsConfig.disableWhenEmpty,\n shouldDisableAutosuggestions,\n );\n\n const onKeyDownHandlerForHoveringEditor = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress(event, props.shortcut ?? \"k\")\n ) {\n event.preventDefault();\n setHoveringEditorIsDisplayed(!hoveringEditorIsDisplayed);\n }\n },\n [\n hoveringEditorIsDisplayed,\n setHoveringEditorIsDisplayed,\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress,\n ],\n );\n\n // sync autosuggestions state with the editor\n useEffect(() => {\n clearAutocompletionsFromEditor(editor);\n if (currentAutocompleteSuggestion) {\n addAutocompletionsToEditor(\n editor,\n currentAutocompleteSuggestion.text,\n currentAutocompleteSuggestion.point,\n );\n }\n }, [currentAutocompleteSuggestion]);\n\n const suggestionStyleAugmented: React.CSSProperties = useMemo(() => {\n return {\n fontStyle: \"italic\",\n color: \"gray\",\n ...props.suggestionsStyle,\n };\n }, [props.suggestionsStyle]);\n\n const renderElementMemoized = useMemo(() => {\n return makeRenderElementFunction(suggestionStyleAugmented);\n }, [suggestionStyleAugmented]);\n\n const renderPlaceholderMemoized = useMemo(() => {\n // For some reason slateJS specifies a top value of 0, which makes for strange styling. We override this here.\n const placeholderStyleSlatejsOverrides: React.CSSProperties = {\n top: undefined,\n };\n\n const placeholderStyleAugmented: React.CSSProperties = {\n ...placeholderStyleSlatejsOverrides,\n ...props.placeholderStyle,\n };\n\n return makeRenderPlaceholderFunction(placeholderStyleAugmented);\n }, [props.placeholderStyle]);\n\n // update the editor text, but only when the value changes from outside the component\n useEffect(() => {\n if (props.value === lastKnownFullEditorText) {\n return;\n }\n\n setLastKnownFullEditorText(props.value ?? \"\");\n replaceEditorText(editor, props.value ?? \"\");\n }, [props.value]);\n\n // separate into TextareaHTMLAttributes<HTMLDivElement> and CopilotTextareaProps\n const {\n placeholderStyle,\n value,\n hoverMenuClassname,\n onValueChange,\n baseAutosuggestionsConfig: autosuggestionsConfigFromProps,\n className,\n onChange,\n onKeyDown,\n disableBranding,\n ...propsToForward\n } = props;\n\n useAddBrandingCss(suggestionStyleAugmented, disableBranding);\n usePopulateCopilotTextareaRef(editor, ref);\n\n const moddedClassName = (() => {\n const baseClassName = \"copilot-textarea\";\n const brandingClass = disableBranding ? \"no-branding\" : \"with-branding\";\n const defaultTailwindClassName = \"bg-white overflow-y-auto resize-y\";\n const mergedClassName = twMerge(defaultTailwindClassName, className ?? \"\");\n return `${baseClassName} ${brandingClass} ${mergedClassName}`;\n })();\n\n return (\n <Slate\n editor={editor}\n initialValue={initialValue}\n onChange={(value) => {\n const newEditorState = getTextAroundCollapsedCursor(editor);\n\n const fullEditorText = newEditorState\n ? newEditorState.textBeforeCursor + newEditorState.textAfterCursor\n : getFullEditorTextWithNewlines(editor); // we don't double-parse the editor. When `newEditorState` is null, we didn't parse the editor yet.\n\n setLastKnownFullEditorText((prev) => {\n if (prev !== fullEditorText) {\n setCursorMovedSinceLastTextChange(false);\n }\n return fullEditorText;\n });\n onChangeHandlerForAutocomplete(newEditorState);\n\n props.onValueChange?.(fullEditorText);\n props.onChange?.(makeSemiFakeReactTextAreaEvent(fullEditorText));\n }}\n >\n <TrackerTextEditedSinceLastCursorMovement\n setCursorMovedSinceLastTextChange={setCursorMovedSinceLastTextChange}\n />\n <HoveringToolbar\n apiConfig={autosuggestionsConfig.apiConfig}\n contextCategories={autosuggestionsConfig.contextCategories}\n hoverMenuClassname={hoverMenuClassname}\n />\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={(event) => {\n onKeyDownHandlerForHoveringEditor(event); // forward the event for internal use\n onKeyDownHandlerForAutocomplete(event); // forward the event for internal use\n props.onKeyDown?.(event); // forward the event for external use\n }}\n className={moddedClassName}\n {...propsToForward}\n />\n </Slate>\n );\n },\n);\n\n// Consumers of <textarea> expect a `onChange: (React.ChangeEvent<HTMLTextAreaElement>) => void` event handler to be passed in.\n// This is *extremely* common, and we want to support it.\n//\n// We can't support the full functionality, but in 99% of cases, the consumer only cares about the `event.target.value` property --\n// that's how they get the new value of the textarea.\n//\n// So, the tradeoff we are making is minimizing compiler complaint, with a small chance of runtime error.\n// The alternative would be defining a different onChange entrypoint (we actually do have that in `onValueChange`),\n// And starting to explain subtleties to users the moment they try to use the component for the first time for very basic functionality.\n//\n// If this proves problematic, we can always revisit this decision.\nfunction makeSemiFakeReactTextAreaEvent(\n currentText: string,\n): React.ChangeEvent<HTMLTextAreaElement> {\n return {\n target: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n currentTarget: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n } as React.ChangeEvent<HTMLTextAreaElement>;\n}\n"],"mappings":"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","names":["_a","value"]}
1
+ {"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/base-copilot-textarea-implementation/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor\";\nimport { usePopulateCopilotTextareaRef } from \"../../hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundCollapsedCursor,\n} from \"../../lib/get-text-around-cursor\";\nimport { addAutocompletionsToEditor } from \"../../lib/slatejs-edits/add-autocompletions\";\nimport { clearAutocompletionsFromEditor } from \"../../lib/slatejs-edits/clear-autocompletions\";\nimport { replaceEditorText } from \"../../lib/slatejs-edits/replace-text\";\nimport { BaseAutosuggestionsConfig, defaultBaseAutosuggestionsConfig } from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport \"./base-copilot-textarea.css\";\nimport { HoveringToolbar } from \"../hovering-toolbar/hovering-toolbar\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\nimport {\n HoveringEditorProvider,\n useHoveringEditorContext,\n} from \"../hovering-toolbar/hovering-editor-provider\";\nimport { TrackerTextEditedSinceLastCursorMovement } from \"./track-cursor-moved-since-last-text-change\";\n\n/**\n * Purpose: to be used as the `ref` type for `CopilotTextarea` and `BaseCopilotTextarea`.\n *\n * This interface extends `HTMLElement`, and is the subset of `HTMLTextAreaElement` that \"actually matters\".\n * It provides the core functionality that consumers of `HTMLTextAreaElement` need 99.9% of the time:\n * - `value`: the current value of the textarea\n * - `focus`: make the textarea focused\n * - `blur`: make the textarea unfocused\n */\nexport interface HTMLCopilotTextAreaElement extends HTMLElement {\n /**\n * The current value of the textarea.\n */\n value: string;\n\n /**\n * focus on the textarea\n */\n focus: () => void;\n\n /**\n * unfocus the textarea.\n *\n * Called `blur` for syntactic compatibility with `HTMLTextAreaElement`.\n */\n blur: () => void;\n}\n\n/**\n * Not intended for direct use. Use CopilotTextarea instead.\n *\n * The `BaseCopilotTextarea` includes the basic UX component,\n * without the business logic / AI logic that makes the content useful and coherent.\n *\n * It is useful if you want to build your own backend, with fully custom business logic\n * for figuring out which contnet to fill in.\n */\nexport const BaseCopilotTextarea = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n return (\n <HoveringEditorProvider>\n <BaseCopilotTextareaWithHoveringContext {...props} ref={ref} />\n </HoveringEditorProvider>\n );\n },\n);\n\n/**\n * Not intended for direct use. Use `CopilotTextarea` instead.\n *\n * This is the private core of the `BaseCopilotTextarea` component.\n * For practical purposes the implementation is cleaner assuming containment in a `HoveringEditorProviderContext`.\n *\n * Therefore we separate the core logic into this component,\n * and wrap it in a `HoveringEditorProviderContext` in `BaseCopilotTextarea`.\n */\nconst BaseCopilotTextareaWithHoveringContext = React.forwardRef(\n (props: BaseCopilotTextareaProps, ref: React.Ref<HTMLCopilotTextAreaElement>) => {\n const autosuggestionsConfig: BaseAutosuggestionsConfig = {\n ...defaultBaseAutosuggestionsConfig,\n ...props.baseAutosuggestionsConfig,\n };\n\n const valueOnInitialRender = useMemo(() => props.value ?? \"\", []);\n const [lastKnownFullEditorText, setLastKnownFullEditorText] = useState(valueOnInitialRender);\n const [cursorMovedSinceLastTextChange, setCursorMovedSinceLastTextChange] = useState(false);\n\n // // When the editor text changes, we want to reset the `textEditedSinceLastCursorMovement` state.\n // useEffect(() => {\n // setCursorMovedSinceLastTextChange(false);\n // }, [lastKnownFullEditorText]);\n\n const initialValue: Descendant[] = useMemo(() => {\n return [\n {\n type: \"paragraph\",\n children: [{ text: valueOnInitialRender }],\n },\n ];\n }, [valueOnInitialRender]);\n\n const editor = useCopilotTextareaEditor();\n\n const { isDisplayed: hoveringEditorIsDisplayed, setIsDisplayed: setHoveringEditorIsDisplayed } =\n useHoveringEditorContext();\n\n const insertText = useCallback(\n (autosuggestion: AutosuggestionState) => {\n Editor.insertText(editor, autosuggestion.text, {\n at: autosuggestion.point,\n });\n },\n [editor],\n );\n\n const shouldDisableAutosuggestions =\n // textarea is manually disabled:\n autosuggestionsConfig.disabled ||\n // hovering editor is displayed:\n hoveringEditorIsDisplayed ||\n // the cursor has moved since the last text change AND we are configured to disable autosuggestions in this case:\n (cursorMovedSinceLastTextChange &&\n autosuggestionsConfig.temporarilyDisableWhenMovingCursorWithoutChangingText);\n\n const {\n currentAutocompleteSuggestion,\n onChangeHandler: onChangeHandlerForAutocomplete,\n onKeyDownHandler: onKeyDownHandlerForAutocomplete,\n } = useAutosuggestions(\n autosuggestionsConfig.debounceTime,\n autosuggestionsConfig.shouldAcceptAutosuggestionOnKeyPress,\n autosuggestionsConfig.apiConfig.autosuggestionsFunction,\n insertText,\n autosuggestionsConfig.disableWhenEmpty,\n shouldDisableAutosuggestions,\n );\n\n const onKeyDownHandlerForHoveringEditor = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress(event, props.shortcut ?? \"k\")\n ) {\n event.preventDefault();\n setHoveringEditorIsDisplayed(!hoveringEditorIsDisplayed);\n }\n },\n [\n hoveringEditorIsDisplayed,\n setHoveringEditorIsDisplayed,\n autosuggestionsConfig.shouldToggleHoveringEditorOnKeyPress,\n ],\n );\n\n // sync autosuggestions state with the editor\n useEffect(() => {\n clearAutocompletionsFromEditor(editor);\n if (currentAutocompleteSuggestion) {\n addAutocompletionsToEditor(\n editor,\n currentAutocompleteSuggestion.text,\n currentAutocompleteSuggestion.point,\n );\n }\n }, [currentAutocompleteSuggestion]);\n\n const suggestionStyleAugmented: React.CSSProperties = useMemo(() => {\n return {\n fontStyle: \"italic\",\n color: \"gray\",\n ...props.suggestionsStyle,\n };\n }, [props.suggestionsStyle]);\n\n const renderElementMemoized = useMemo(() => {\n return makeRenderElementFunction(suggestionStyleAugmented);\n }, [suggestionStyleAugmented]);\n\n const renderPlaceholderMemoized = useMemo(() => {\n // For some reason slateJS specifies a top value of 0, which makes for strange styling. We override this here.\n const placeholderStyleSlatejsOverrides: React.CSSProperties = {\n top: undefined,\n };\n\n const placeholderStyleAugmented: React.CSSProperties = {\n ...placeholderStyleSlatejsOverrides,\n ...props.placeholderStyle,\n };\n\n return makeRenderPlaceholderFunction(placeholderStyleAugmented);\n }, [props.placeholderStyle]);\n\n // update the editor text, but only when the value changes from outside the component\n useEffect(() => {\n if (props.value === lastKnownFullEditorText) {\n return;\n }\n\n setLastKnownFullEditorText(props.value ?? \"\");\n replaceEditorText(editor, props.value ?? \"\");\n }, [props.value]);\n\n // separate into TextareaHTMLAttributes<HTMLDivElement> and CopilotTextareaProps\n const {\n placeholderStyle,\n value,\n hoverMenuClassname,\n onValueChange,\n baseAutosuggestionsConfig: autosuggestionsConfigFromProps,\n className,\n onChange,\n onKeyDown,\n disableBranding,\n ...propsToForward\n } = props;\n\n useAddBrandingCss(suggestionStyleAugmented, disableBranding);\n usePopulateCopilotTextareaRef(editor, ref);\n\n const moddedClassName = (() => {\n const baseClassName = \"copilot-textarea\";\n const brandingClass = disableBranding ? \"no-branding\" : \"with-branding\";\n const defaultTailwindClassName = \"bg-white overflow-y-auto resize-y\";\n const mergedClassName = twMerge(defaultTailwindClassName, className ?? \"\");\n return `${baseClassName} ${brandingClass} ${mergedClassName}`;\n })();\n\n return (\n <Slate\n editor={editor}\n initialValue={initialValue}\n onChange={(value) => {\n const newEditorState = getTextAroundCollapsedCursor(editor);\n\n const fullEditorText = newEditorState\n ? newEditorState.textBeforeCursor + newEditorState.textAfterCursor\n : getFullEditorTextWithNewlines(editor); // we don't double-parse the editor. When `newEditorState` is null, we didn't parse the editor yet.\n\n setLastKnownFullEditorText((prev) => {\n if (prev !== fullEditorText) {\n setCursorMovedSinceLastTextChange(false);\n }\n return fullEditorText;\n });\n onChangeHandlerForAutocomplete(newEditorState);\n\n props.onValueChange?.(fullEditorText);\n props.onChange?.(makeSemiFakeReactTextAreaEvent(fullEditorText));\n }}\n >\n <TrackerTextEditedSinceLastCursorMovement\n setCursorMovedSinceLastTextChange={setCursorMovedSinceLastTextChange}\n />\n <HoveringToolbar\n apiConfig={autosuggestionsConfig.apiConfig}\n contextCategories={autosuggestionsConfig.contextCategories}\n hoverMenuClassname={hoverMenuClassname}\n />\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={(event) => {\n onKeyDownHandlerForHoveringEditor(event); // forward the event for internal use\n onKeyDownHandlerForAutocomplete(event); // forward the event for internal use\n props.onKeyDown?.(event); // forward the event for external use\n }}\n className={moddedClassName}\n onBlur={(ev) => {\n // clear autocompletion on blur\n props.onBlur?.(ev);\n clearAutocompletionsFromEditor(editor);\n }}\n {...propsToForward}\n />\n </Slate>\n );\n },\n);\n\n// Consumers of <textarea> expect a `onChange: (React.ChangeEvent<HTMLTextAreaElement>) => void` event handler to be passed in.\n// This is *extremely* common, and we want to support it.\n//\n// We can't support the full functionality, but in 99% of cases, the consumer only cares about the `event.target.value` property --\n// that's how they get the new value of the textarea.\n//\n// So, the tradeoff we are making is minimizing compiler complaint, with a small chance of runtime error.\n// The alternative would be defining a different onChange entrypoint (we actually do have that in `onValueChange`),\n// And starting to explain subtleties to users the moment they try to use the component for the first time for very basic functionality.\n//\n// If this proves problematic, we can always revisit this decision.\nfunction makeSemiFakeReactTextAreaEvent(\n currentText: string,\n): React.ChangeEvent<HTMLTextAreaElement> {\n return {\n target: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n currentTarget: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n } as React.ChangeEvent<HTMLTextAreaElement>;\n}\n"],"mappings":"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","names":["_a","value"]}
@@ -65,14 +65,14 @@ var Menu = React.forwardRef(
65
65
  className: cx(
66
66
  className,
67
67
  css`
68
- & > * {
69
- display: inline-block;
70
- }
68
+ & > * {
69
+ display: inline-block;
70
+ }
71
71
 
72
- & > * + * {
73
- margin-left: 15px;
74
- }
75
- `
72
+ & > * + * {
73
+ margin-left: 15px;
74
+ }
75
+ `
76
76
  )
77
77
  })
78
78
  );
@@ -110,4 +110,4 @@ export {
110
110
  Portal,
111
111
  Toolbar
112
112
  };
113
- //# sourceMappingURL=chunk-P4QVFRLY.mjs.map
113
+ //# sourceMappingURL=chunk-CF5GISTC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/hovering-toolbar/hovering-toolbar-components.tsx"],"sourcesContent":["import { css, cx } from \"@emotion/css\";\nimport React, { PropsWithChildren, Ref } from \"react\";\nimport ReactDOM from \"react-dom\";\n\ninterface BaseProps {\n className: string;\n [key: string]: unknown;\n}\n\nexport const Button = React.forwardRef(\n (\n {\n className,\n active,\n reversed,\n ...props\n }: PropsWithChildren<\n {\n active: boolean;\n reversed: boolean;\n } & BaseProps\n >,\n ref: Ref<HTMLSpanElement | null>,\n ) => (\n <span\n {...props}\n ref={ref as Ref<HTMLSpanElement>}\n className={cx(\n className,\n css`\n cursor: pointer;\n color: ${reversed ? (active ? \"white\" : \"#aaa\") : active ? \"black\" : \"#ccc\"};\n `,\n )}\n />\n ),\n);\n\nexport const Icon = React.forwardRef(\n ({ className, ...props }: PropsWithChildren<BaseProps>, ref: Ref<HTMLSpanElement | null>) => (\n <span\n {...props}\n ref={ref as Ref<HTMLSpanElement>}\n className={cx(\n \"material-icons\",\n className,\n css`\n font-size: 18px;\n vertical-align: text-bottom;\n `,\n )}\n />\n ),\n);\n\nexport const Menu = React.forwardRef(\n ({ className, ...props }: PropsWithChildren<BaseProps>, ref: Ref<HTMLDivElement | null>) => {\n return (\n <div\n {...props}\n data-test-id=\"menu\"\n ref={ref as Ref<HTMLDivElement>}\n className={cx(\n className,\n css`\n & > * {\n display: inline-block;\n }\n\n & > * + * {\n margin-left: 15px;\n }\n `,\n )}\n />\n );\n },\n);\nexport const Portal = ({ children }: { children: React.ReactNode }) => {\n return typeof document === \"object\" ? ReactDOM.createPortal(children, document.body) : null;\n};\n\nexport const Toolbar = React.forwardRef(\n ({ className, ...props }: PropsWithChildren<BaseProps>, ref?: Ref<HTMLDivElement>) => (\n <Menu\n {...props}\n ref={ref}\n className={cx(\n className,\n css`\n position: relative;\n padding: 1px 18px 17px;\n margin: 0 -20px;\n border-bottom: 2px solid #eee;\n margin-bottom: 20px;\n `,\n )}\n />\n ),\n);\n"],"mappings":";;;;;;;AAAA,SAAS,KAAK,UAAU;AACxB,OAAO,WAAuC;AAC9C,OAAO,cAAc;AAsBjB;AAfG,IAAM,SAAS,MAAM;AAAA,EAC1B,CACE,IAWA,QACA;AAZA,iBACE;AAAA;AAAA,MACA;AAAA,MACA;AAAA,IAdN,IAWI,IAIK,kBAJL,IAIK;AAAA,MAHH;AAAA,MACA;AAAA,MACA;AAAA;AAUF;AAAA,MAAC;AAAA,uCACK,QADL;AAAA,QAEC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA;AAAA,mBAEW,WAAY,SAAS,UAAU,SAAU,SAAS,UAAU;AAAA;AAAA,QAEzE;AAAA;AAAA,IACF;AAAA;AAEJ;AAEO,IAAM,OAAO,MAAM;AAAA,EACxB,CAAC,IAAuD,QAAkC;AAAzF,iBAAE,YAvCL,IAuCG,IAAgB,kBAAhB,IAAgB,CAAd;AACD;AAAA,MAAC;AAAA,uCACK,QADL;AAAA,QAEC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA;AAAA,QAIF;AAAA;AAAA,IACF;AAAA;AAEJ;AAEO,IAAM,OAAO,MAAM;AAAA,EACxB,CAAC,IAAuD,QAAoC;AAA3F,iBAAE,YAxDL,IAwDG,IAAgB,kBAAhB,IAAgB,CAAd;AACD,WACE;AAAA,MAAC;AAAA,uCACK,QADL;AAAA,QAEC,gBAAa;AAAA,QACb;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACO,IAAM,SAAS,CAAC,EAAE,SAAS,MAAqC;AACrE,SAAO,OAAO,aAAa,WAAW,SAAS,aAAa,UAAU,SAAS,IAAI,IAAI;AACzF;AAEO,IAAM,UAAU,MAAM;AAAA,EAC3B,CAAC,IAAuD,QAA2B;AAAlF,iBAAE,YAnFL,IAmFG,IAAgB,kBAAhB,IAAgB,CAAd;AACD;AAAA,MAAC;AAAA,uCACK,QADL;AAAA,QAEC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOF;AAAA;AAAA,IACF;AAAA;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HoveringInsertionPromptBoxCore
3
- } from "./chunk-SN7BEUGH.mjs";
3
+ } from "./chunk-OGLVRSCO.mjs";
4
4
 
5
5
  // src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx
6
6
  import { jsx } from "react/jsx-runtime";
@@ -28,4 +28,4 @@ var HoveringInsertionPromptBox = (props) => {
28
28
  export {
29
29
  HoveringInsertionPromptBox
30
30
  };
31
- //# sourceMappingURL=chunk-F4ZGXQBM.mjs.map
31
+ //# sourceMappingURL=chunk-COQISBP2.mjs.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  HoveringInsertionPromptBox
3
- } from "./chunk-F4ZGXQBM.mjs";
3
+ } from "./chunk-COQISBP2.mjs";
4
4
  import {
5
5
  useHoveringEditorContext
6
6
  } from "./chunk-LYB4B6MK.mjs";
7
7
  import {
8
8
  Menu,
9
9
  Portal
10
- } from "./chunk-P4QVFRLY.mjs";
10
+ } from "./chunk-CF5GISTC.mjs";
11
11
  import {
12
12
  getFullEditorTextWithNewlines,
13
13
  getTextAroundSelection
@@ -38,7 +38,7 @@ var HoveringToolbar = (props) => {
38
38
  return;
39
39
  }
40
40
  const domSelection = window.getSelection();
41
- if (!domSelection) {
41
+ if (!domSelection || domSelection.rangeCount === 0) {
42
42
  return;
43
43
  }
44
44
  const domRange = domSelection.getRangeAt(0);
@@ -121,4 +121,4 @@ function editorState(editor, selection) {
121
121
  export {
122
122
  HoveringToolbar
123
123
  };
124
- //# sourceMappingURL=chunk-6GJ732U4.mjs.map
124
+ //# sourceMappingURL=chunk-DMLXXOXD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/hovering-toolbar/hovering-toolbar.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { Editor, Location, Transforms } from \"slate\";\nimport { useSlate, useSlateSelection } from \"slate-react\";\nimport { HoveringInsertionPromptBox } from \"./text-insertion-prompt-box\";\nimport { Menu, Portal } from \"./hovering-toolbar-components\";\nimport { useHoveringEditorContext } from \"./hovering-editor-provider\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundSelection,\n} from \"../../lib/get-text-around-cursor\";\nimport {\n EditingEditorState,\n InsertionEditorApiConfig,\n} from \"../../types/base/autosuggestions-bare-function\";\n\nexport interface HoveringToolbarProps {\n apiConfig: InsertionEditorApiConfig;\n contextCategories: string[];\n hoverMenuClassname: string | undefined;\n}\n\nexport const HoveringToolbar = (props: HoveringToolbarProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSlate();\n const selection = useSlateSelection();\n const { isDisplayed, setIsDisplayed } = useHoveringEditorContext();\n\n // only render on client\n const [isClient, setIsClient] = useState(false);\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n useEffect(() => {\n const el = ref.current;\n const { selection } = editor;\n\n if (!el) {\n return;\n }\n\n if (!selection) {\n el.removeAttribute(\"style\");\n return;\n }\n\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) {\n return;\n }\n\n const domRange = domSelection.getRangeAt(0);\n const rect = domRange.getBoundingClientRect();\n\n // We use window = (0,0,0,0) as a signal that the selection is not in the original copilot-textarea,\n // but inside the hovering window.\n //\n // in such case, we simply do nothing.\n if (rect.top === 0 && rect.left === 0 && rect.width === 0 && rect.height === 0) {\n return;\n }\n\n const minGapFromEdge = 60;\n const verticalOffsetFromCorner = 35;\n const horizontalOffsetFromCorner = 15;\n let top = rect.top + window.scrollY - el.offsetHeight + verticalOffsetFromCorner;\n // make sure top is in the viewport and not too close to the edge\n if (top < minGapFromEdge) {\n top = rect.bottom + window.scrollY + minGapFromEdge;\n } else if (top + el.offsetHeight > window.innerHeight - minGapFromEdge) {\n top = rect.top + window.scrollY - el.offsetHeight - minGapFromEdge;\n }\n\n let left =\n rect.left + window.scrollX - el.offsetWidth / 2 + rect.width / 2 + horizontalOffsetFromCorner;\n // make sure left is in the viewport and not too close to the edge\n if (left < minGapFromEdge) {\n left = minGapFromEdge;\n } else if (left + el.offsetWidth > window.innerWidth - minGapFromEdge) {\n left = window.innerWidth - el.offsetWidth - minGapFromEdge;\n }\n\n el.style.opacity = \"1\";\n el.style.top = `${top}px`;\n el.style.left = `${left}px`;\n });\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n setIsDisplayed(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref, setIsDisplayed]);\n\n if (!isClient) {\n return null;\n }\n\n return (\n <Portal>\n <Menu\n ref={ref}\n className={\n props.hoverMenuClassname ||\n \"p-2 absolute z-10 top-[-10000px] left-[-10000px] mt-[-6px] opacity-0 transition-opacity duration-700\"\n }\n >\n {isDisplayed && selection && (\n <HoveringInsertionPromptBox\n editorState={editorState(editor, selection)}\n apiConfig={props.apiConfig}\n closeWindow={() => {\n setIsDisplayed(false);\n }}\n performInsertion={(insertedText) => {\n console.log(\"inserted text\", insertedText);\n // replace the selection with the inserted text\n Transforms.delete(editor, { at: selection });\n Transforms.insertText(editor, insertedText, {\n at: selection,\n });\n setIsDisplayed(false);\n }}\n contextCategories={props.contextCategories}\n />\n )}\n </Menu>\n </Portal>\n );\n};\n\nfunction editorState(editor: Editor, selection: Location): EditingEditorState {\n const textAroundCursor = getTextAroundSelection(editor);\n if (textAroundCursor) {\n return textAroundCursor;\n }\n\n return {\n textBeforeCursor: getFullEditorTextWithNewlines(editor),\n textAfterCursor: \"\",\n selectedText: \"\",\n };\n}\n"],"mappings":"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","names":["selection"]}
@@ -50,10 +50,8 @@ var HoveringInsertionPromptBoxCore = ({
50
50
  use_autosize_textarea_default(suggestionTextAreaRef, editSuggestion || "");
51
51
  use_autosize_textarea_default(adjustmentTextAreaRef, adjustmentPrompt || "");
52
52
  useEffect(() => {
53
- setTimeout(() => {
54
- var _a;
55
- (_a = adjustmentTextAreaRef.current) == null ? void 0 : _a.focus();
56
- }, 0);
53
+ var _a;
54
+ (_a = adjustmentTextAreaRef.current) == null ? void 0 : _a.focus();
57
55
  }, []);
58
56
  useEffect(() => {
59
57
  if (!generatingSuggestion) {
@@ -224,4 +222,4 @@ var HoveringInsertionPromptBoxCore = ({
224
222
  export {
225
223
  HoveringInsertionPromptBoxCore
226
224
  };
227
- //# sourceMappingURL=chunk-SN7BEUGH.mjs.map
225
+ //# sourceMappingURL=chunk-OGLVRSCO.mjs.map