@copilotkit/react-textarea 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/.turbo/turbo-build.log +85 -85
  2. package/CHANGELOG.md +6 -0
  3. package/dist/{chunk-6LKDH2UJ.mjs → chunk-7KWRVIYV.mjs} +3 -2
  4. package/dist/chunk-7KWRVIYV.mjs.map +1 -0
  5. package/dist/{chunk-4EA7I44O.mjs → chunk-CU2M5BIJ.mjs} +6 -5
  6. package/dist/chunk-CU2M5BIJ.mjs.map +1 -0
  7. package/dist/{chunk-24IOWJS4.mjs → chunk-E2UEE45I.mjs} +11 -3
  8. package/dist/chunk-E2UEE45I.mjs.map +1 -0
  9. package/dist/{chunk-ZPACRCJ6.mjs → chunk-EHQ5TN4R.mjs} +2 -2
  10. package/dist/{chunk-ROH375UB.mjs → chunk-NHLYAJCQ.mjs} +3 -3
  11. package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +4 -4
  12. package/dist/components/copilot-textarea/copilot-textarea.mjs +6 -6
  13. package/dist/components/index.mjs +6 -6
  14. package/dist/hooks/use-autosuggestions.d.ts +1 -1
  15. package/dist/hooks/use-autosuggestions.mjs +1 -1
  16. package/dist/index.mjs +7 -7
  17. package/dist/types/base/base-autosuggestions-config.d.ts +1 -0
  18. package/dist/types/base/base-autosuggestions-config.mjs +1 -1
  19. package/dist/types/base/index.mjs +1 -1
  20. package/dist/types/index.mjs +2 -2
  21. package/dist/types/standard-autosuggestions/autosuggestions-config.mjs +2 -2
  22. package/dist/types/standard-autosuggestions/index.mjs +2 -2
  23. package/package.json +3 -3
  24. package/src/components/base-copilot-textarea/base-copilot-textarea.tsx +2 -1
  25. package/src/hooks/use-autosuggestions.ts +14 -2
  26. package/src/types/base/base-autosuggestions-config.tsx +2 -0
  27. package/dist/chunk-24IOWJS4.mjs.map +0 -1
  28. package/dist/chunk-4EA7I44O.mjs.map +0 -1
  29. package/dist/chunk-6LKDH2UJ.mjs.map +0 -1
  30. /package/dist/{chunk-ZPACRCJ6.mjs.map → chunk-EHQ5TN4R.mjs.map} +0 -0
  31. /package/dist/{chunk-ROH375UB.mjs.map → chunk-NHLYAJCQ.mjs.map} +0 -0
@@ -1,8 +1,8 @@
1
1
 
2
- > @copilotkit/react-textarea@0.8.0 build /Users/ataibarkai/LocalGit/Recursively.ai/CopilotKit/CopilotKit/packages/react-textarea
2
+ > @copilotkit/react-textarea@0.10.0 build /Users/ataibarkai/LocalGit/Recursively.ai/CopilotKit/CopilotKit/packages/react-textarea
3
3
  > tsup --treeshake
4
4
 
5
- CLI Building entry: src/index.tsx, src/components/index.ts, src/context/index.ts, src/hooks/index.ts, src/hooks/use-autosuggestions.ts, src/hooks/use-copilot-textarea-editor.tsx, src/lib/debouncer.ts, src/lib/editor-to-text.ts, src/lib/get-text-around-cursor.ts, src/lib/utils.test.ts, src/lib/utils.ts, src/types/index.ts, src/components/copilot-textarea/copilot-textarea.tsx, 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/use-add-branding-css.tsx, src/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.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/base/autosuggestion-state.ts, src/types/base/autosuggestions-bare-function.ts, src/types/base/base-autosuggestions-config.tsx, src/types/base/custom-editor.tsx, src/types/base/editor-autocomplete-state.ts, src/types/base/index.ts, src/types/standard-autosuggestions/autosuggestions-config.tsx, src/types/standard-autosuggestions/index.ts, src/types/standard-autosuggestions/minimal-chat-gpt-message.tsx
5
+ CLI Building entry: src/index.tsx, src/context/index.ts, src/components/index.ts, src/hooks/index.ts, src/hooks/use-autosuggestions.ts, src/hooks/use-copilot-textarea-editor.tsx, src/lib/debouncer.ts, src/lib/editor-to-text.ts, src/lib/get-text-around-cursor.ts, src/lib/utils.test.ts, src/lib/utils.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/use-add-branding-css.tsx, src/components/copilot-textarea/copilot-textarea.tsx, src/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.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/standard-autosuggestions/autosuggestions-config.tsx, src/types/standard-autosuggestions/index.ts, src/types/standard-autosuggestions/minimal-chat-gpt-message.tsx, src/types/base/autosuggestion-state.ts, src/types/base/autosuggestions-bare-function.ts, src/types/base/base-autosuggestions-config.tsx, src/types/base/custom-editor.tsx, src/types/base/editor-autocomplete-state.ts, src/types/base/index.ts
6
6
  CLI Using tsconfig: tsconfig.json
7
7
  CLI tsup v6.5.0
8
8
  CLI Using tsup config: /Users/ataibarkai/LocalGit/Recursively.ai/CopilotKit/CopilotKit/packages/react-textarea/tsup.config.ts
@@ -13,149 +13,149 @@ Browserslist: caniuse-lite is outdated. Please run:
13
13
  npx update-browserslist-db@latest
14
14
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
15
15
  DTS Build start
16
- Generated an empty chunk: "custom-editor".
17
16
  Generated an empty chunk: "minimal-chat-gpt-message".
18
17
  Generated an empty chunk: "autosuggestion-state".
19
18
  Generated an empty chunk: "autosuggestions-bare-function".
19
+ Generated an empty chunk: "custom-editor".
20
20
  Generated an empty chunk: "chunk-FD6FGKYY".
21
+ Generated an empty chunk: "chunk-IU3WTXLQ".
21
22
  Generated an empty chunk: "chunk-MMVDU6DF".
22
23
  Generated an empty chunk: "chunk-AZQCUNBV".
23
24
  Generated an empty chunk: "chunk-WJHSY5T6".
24
- Generated an empty chunk: "chunk-IU3WTXLQ".
25
25
  Generated an empty chunk: "chunk-H4VKQGVU".
26
- ESM dist/index.css 5.75 KB
27
- ESM dist/components/index.css 242.00 B
28
26
  ESM dist/components/copilot-textarea/copilot-textarea.css 253.00 B
29
27
  ESM dist/components/base-copilot-textarea/base-copilot-textarea.css 258.00 B
30
- ESM dist/index.css.map 12.37 KB
28
+ ESM dist/index.css 5.75 KB
29
+ ESM dist/components/index.css 242.00 B
31
30
  ESM dist/components/copilot-textarea/copilot-textarea.css.map 432.00 B
32
- ESM dist/components/index.css.map 429.00 B
33
31
  ESM dist/components/base-copilot-textarea/base-copilot-textarea.css.map 432.00 B
32
+ ESM dist/index.css.map 12.37 KB
33
+ ESM dist/components/index.css.map 429.00 B
34
34
  ESM dist/types/standard-autosuggestions/minimal-chat-gpt-message.mjs 86.00 B
35
- ESM dist/types/base/autosuggestions-bare-function.mjs 91.00 B
36
35
  ESM dist/types/base/autosuggestion-state.mjs 82.00 B
36
+ ESM dist/types/base/autosuggestions-bare-function.mjs 91.00 B
37
+ ESM dist/lib/utils.test.mjs 200.00 B
37
38
  ESM dist/chunk-MMVDU6DF.mjs 76.00 B
38
- ESM dist/chunk-FD6FGKYY.mjs 76.00 B
39
+ ESM dist/chunk-AZQCUNBV.mjs 76.00 B
39
40
  ESM dist/chunk-WJHSY5T6.mjs 76.00 B
40
- ESM dist/chunk-MRXNTQOX.mjs 1.92 KB
41
- ESM dist/chunk-H4VKQGVU.mjs 76.00 B
41
+ ESM dist/chunk-FD6FGKYY.mjs 76.00 B
42
+ ESM dist/types/base/custom-editor.mjs 75.00 B
43
+ ESM dist/chunk-IU3WTXLQ.mjs 76.00 B
42
44
  ESM dist/types/base/editor-autocomplete-state.mjs 227.00 B
43
45
  ESM dist/types/base/index.mjs 213.00 B
44
- ESM dist/components/base-copilot-textarea/use-add-branding-css.mjs 178.00 B
45
- ESM dist/types/standard-autosuggestions/index.mjs 328.00 B
46
+ ESM dist/components/copilot-textarea/copilot-textarea.mjs 837.00 B
46
47
  ESM dist/types/base/base-autosuggestions-config.mjs 200.00 B
47
48
  ESM dist/lib/slatejs-edits/add-autocompletions.mjs 186.00 B
49
+ ESM dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs 220.00 B
48
50
  ESM dist/lib/slatejs-edits/clear-autocompletions.mjs 192.00 B
49
- ESM dist/chunk-6LKDH2UJ.mjs 295.00 B
50
- ESM dist/lib/utils.test.mjs 200.00 B
51
- ESM dist/types/base/custom-editor.mjs 75.00 B
51
+ ESM dist/lib/slatejs-edits/with-partial-history.mjs 198.00 B
52
+ ESM dist/types/standard-autosuggestions/index.mjs 328.00 B
52
53
  ESM dist/lib/slatejs-edits/replace-text.mjs 170.00 B
53
54
  ESM dist/types/standard-autosuggestions/autosuggestions-config.mjs 310.00 B
54
- ESM dist/components/copilot-textarea/copilot-textarea.mjs 837.00 B
55
- ESM dist/chunk-AZQCUNBV.mjs 76.00 B
55
+ ESM dist/lib/utils.mjs 220.00 B
56
56
  ESM dist/lib/get-text-around-cursor.mjs 232.00 B
57
57
  ESM dist/components/base-copilot-textarea/base-copilot-textarea.mjs 706.00 B
58
- ESM dist/types/index.mjs 387.00 B
58
+ ESM dist/components/base-copilot-textarea/use-add-branding-css.mjs 178.00 B
59
59
  ESM dist/components/base-copilot-textarea/render-placeholder.mjs 188.00 B
60
- ESM dist/chunk-IU3WTXLQ.mjs 76.00 B
61
- ESM dist/chunk-A3SFEHWZ.mjs 2.09 KB
62
- ESM dist/components/index.mjs 824.00 B
63
- ESM dist/chunk-ROH375UB.mjs 1.06 KB
64
- ESM dist/chunk-ZPACRCJ6.mjs 2.75 KB
65
60
  ESM dist/index.mjs 1.00 KB
66
- ESM dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs 220.00 B
67
- ESM dist/chunk-4EA7I44O.mjs 5.02 KB
68
- ESM dist/chunk-WJYQWL4I.mjs 595.00 B
61
+ ESM dist/components/index.mjs 824.00 B
62
+ ESM dist/chunk-NHLYAJCQ.mjs 1.06 KB
63
+ ESM dist/components/base-copilot-textarea/render-element.mjs 180.00 B
64
+ ESM dist/chunk-7KWRVIYV.mjs 314.00 B
65
+ ESM dist/chunk-H4VKQGVU.mjs 76.00 B
66
+ ESM dist/chunk-MRXNTQOX.mjs 1.92 KB
69
67
  ESM dist/chunk-4XYYSJ5C.mjs 527.00 B
70
68
  ESM dist/chunk-TSF4AJIK.mjs 716.00 B
69
+ ESM dist/types/index.mjs 387.00 B
70
+ ESM dist/chunk-A3SFEHWZ.mjs 2.09 KB
71
71
  ESM dist/chunk-OELUUJZY.mjs 625.00 B
72
72
  ESM dist/chunk-LNAIMEB2.mjs 1.09 KB
73
- ESM dist/lib/slatejs-edits/with-partial-history.mjs 198.00 B
74
- ESM dist/hooks/index.mjs 98.00 B
75
73
  ESM dist/hooks/use-autosuggestions.mjs 268.00 B
74
+ ESM dist/context/index.mjs 98.00 B
75
+ ESM dist/hooks/index.mjs 98.00 B
76
+ ESM dist/chunk-THWPPG6M.mjs 1.40 KB
77
+ ESM dist/chunk-CU2M5BIJ.mjs 5.05 KB
78
+ ESM dist/chunk-6SYD77G6.mjs 2.01 KB
79
+ ESM dist/chunk-UW3ITU2Y.mjs 496.00 B
80
+ ESM dist/chunk-KCHYD3EB.mjs 3.08 KB
76
81
  ESM dist/chunk-KGKLUWKW.mjs 1.37 KB
77
- ESM dist/components/base-copilot-textarea/render-element.mjs 180.00 B
78
- ESM dist/chunk-24IOWJS4.mjs 2.93 KB
79
82
  ESM dist/chunk-3UQM3NLM.mjs 1.76 KB
83
+ ESM dist/hooks/use-copilot-textarea-editor.mjs 218.00 B
80
84
  ESM dist/lib/debouncer.mjs 153.00 B
85
+ ESM dist/chunk-E2UEE45I.mjs 3.02 KB
81
86
  ESM dist/lib/editor-to-text.mjs 1.34 KB
82
- ESM dist/lib/utils.mjs 220.00 B
83
- ESM dist/hooks/use-copilot-textarea-editor.mjs 218.00 B
84
- ESM dist/chunk-KCHYD3EB.mjs 3.08 KB
85
87
  ESM dist/chunk-NKW5OU2S.mjs 959.00 B
86
- ESM dist/chunk-UW3ITU2Y.mjs 496.00 B
87
- ESM dist/chunk-THWPPG6M.mjs 1.40 KB
88
- ESM dist/chunk-6SYD77G6.mjs 2.01 KB
89
- ESM dist/context/index.mjs 98.00 B
90
- ESM dist/chunk-FD6FGKYY.mjs.map 51.00 B
91
- ESM dist/chunk-MMVDU6DF.mjs.map 51.00 B
92
- ESM dist/chunk-WJHSY5T6.mjs.map 51.00 B
93
- ESM dist/types/base/autosuggestion-state.mjs.map 51.00 B
94
- ESM dist/types/base/autosuggestions-bare-function.mjs.map 51.00 B
88
+ ESM dist/chunk-EHQ5TN4R.mjs 2.75 KB
89
+ ESM dist/chunk-WJYQWL4I.mjs 595.00 B
95
90
  ESM dist/types/standard-autosuggestions/minimal-chat-gpt-message.mjs.map 51.00 B
96
- ESM dist/chunk-MRXNTQOX.mjs.map 71.00 B
97
- ESM dist/types/standard-autosuggestions/index.mjs.map 51.00 B
98
- ESM dist/lib/slatejs-edits/add-autocompletions.mjs.map 51.00 B
99
- ESM dist/components/base-copilot-textarea/use-add-branding-css.mjs.map 51.00 B
100
- ESM dist/types/base/index.mjs.map 51.00 B
101
91
  ESM dist/lib/utils.test.mjs.map 349.00 B
102
- ESM dist/lib/slatejs-edits/replace-text.mjs.map 51.00 B
103
- ESM dist/types/base/base-autosuggestions-config.mjs.map 51.00 B
104
- ESM dist/lib/slatejs-edits/clear-autocompletions.mjs.map 51.00 B
92
+ ESM dist/types/base/autosuggestion-state.mjs.map 51.00 B
93
+ ESM dist/chunk-MMVDU6DF.mjs.map 51.00 B
105
94
  ESM dist/types/base/custom-editor.mjs.map 51.00 B
95
+ ESM dist/chunk-WJHSY5T6.mjs.map 51.00 B
106
96
  ESM dist/chunk-AZQCUNBV.mjs.map 51.00 B
107
- ESM dist/types/standard-autosuggestions/autosuggestions-config.mjs.map 51.00 B
97
+ ESM dist/chunk-FD6FGKYY.mjs.map 51.00 B
98
+ ESM dist/chunk-IU3WTXLQ.mjs.map 51.00 B
108
99
  ESM dist/components/copilot-textarea/copilot-textarea.mjs.map 51.00 B
100
+ ESM dist/types/base/index.mjs.map 51.00 B
101
+ ESM dist/lib/slatejs-edits/add-autocompletions.mjs.map 51.00 B
102
+ ESM dist/types/base/autosuggestions-bare-function.mjs.map 51.00 B
103
+ ESM dist/lib/slatejs-edits/with-partial-history.mjs.map 51.00 B
104
+ ESM dist/lib/slatejs-edits/clear-autocompletions.mjs.map 51.00 B
109
105
  ESM dist/types/base/editor-autocomplete-state.mjs.map 51.00 B
110
- ESM dist/chunk-IU3WTXLQ.mjs.map 51.00 B
111
- ESM dist/types/index.mjs.map 51.00 B
112
- ESM dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map 51.00 B
113
- ESM dist/components/base-copilot-textarea/render-placeholder.mjs.map 51.00 B
114
- ESM dist/chunk-A3SFEHWZ.mjs.map 4.73 KB
115
- ESM dist/components/index.mjs.map 51.00 B
116
- ESM dist/chunk-ZPACRCJ6.mjs.map 4.01 KB
106
+ ESM dist/types/base/base-autosuggestions-config.mjs.map 51.00 B
117
107
  ESM dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs.map 51.00 B
108
+ ESM dist/lib/get-text-around-cursor.mjs.map 51.00 B
109
+ ESM dist/components/base-copilot-textarea/use-add-branding-css.mjs.map 51.00 B
110
+ ESM dist/components/base-copilot-textarea/base-copilot-textarea.mjs.map 51.00 B
118
111
  ESM dist/index.mjs.map 51.00 B
119
- ESM dist/chunk-ROH375UB.mjs.map 1.75 KB
120
- ESM dist/chunk-4EA7I44O.mjs.map 8.57 KB
121
- ESM dist/chunk-4XYYSJ5C.mjs.map 921.00 B
122
- ESM dist/lib/slatejs-edits/with-partial-history.mjs.map 51.00 B
112
+ ESM dist/lib/utils.mjs.map 51.00 B
113
+ ESM dist/chunk-NHLYAJCQ.mjs.map 1.75 KB
114
+ ESM dist/types/standard-autosuggestions/index.mjs.map 51.00 B
115
+ ESM dist/types/standard-autosuggestions/autosuggestions-config.mjs.map 51.00 B
116
+ ESM dist/lib/slatejs-edits/replace-text.mjs.map 51.00 B
117
+ ESM dist/chunk-7KWRVIYV.mjs.map 623.00 B
118
+ ESM dist/components/base-copilot-textarea/render-element.mjs.map 51.00 B
119
+ ESM dist/components/base-copilot-textarea/render-placeholder.mjs.map 51.00 B
120
+ ESM dist/chunk-H4VKQGVU.mjs.map 51.00 B
123
121
  ESM dist/chunk-TSF4AJIK.mjs.map 1.31 KB
124
- ESM dist/chunk-WJYQWL4I.mjs.map 1.04 KB
125
- ESM dist/hooks/index.mjs.map 51.00 B
122
+ ESM dist/types/index.mjs.map 51.00 B
123
+ ESM dist/chunk-4XYYSJ5C.mjs.map 921.00 B
126
124
  ESM dist/chunk-LNAIMEB2.mjs.map 1.73 KB
127
125
  ESM dist/hooks/use-autosuggestions.mjs.map 51.00 B
128
- ESM dist/lib/get-text-around-cursor.mjs.map 51.00 B
129
126
  ESM dist/chunk-OELUUJZY.mjs.map 957.00 B
127
+ ESM dist/chunk-A3SFEHWZ.mjs.map 4.73 KB
128
+ ESM dist/hooks/index.mjs.map 51.00 B
129
+ ESM dist/chunk-THWPPG6M.mjs.map 2.24 KB
130
+ ESM dist/context/index.mjs.map 51.00 B
131
+ ESM dist/chunk-6SYD77G6.mjs.map 3.78 KB
130
132
  ESM dist/chunk-KGKLUWKW.mjs.map 2.45 KB
131
- ESM dist/chunk-H4VKQGVU.mjs.map 51.00 B
132
- ESM dist/lib/editor-to-text.mjs.map 2.83 KB
133
- ESM dist/chunk-6LKDH2UJ.mjs.map 566.00 B
134
- ESM dist/chunk-3UQM3NLM.mjs.map 3.63 KB
135
- ESM dist/lib/utils.mjs.map 51.00 B
136
133
  ESM dist/chunk-KCHYD3EB.mjs.map 6.12 KB
137
- ESM dist/chunk-24IOWJS4.mjs.map 5.54 KB
138
- ESM dist/chunk-NKW5OU2S.mjs.map 1.60 KB
134
+ ESM dist/chunk-MRXNTQOX.mjs.map 71.00 B
139
135
  ESM dist/chunk-UW3ITU2Y.mjs.map 878.00 B
140
- ESM dist/lib/debouncer.mjs.map 51.00 B
141
- ESM dist/chunk-6SYD77G6.mjs.map 3.78 KB
142
- ESM dist/components/base-copilot-textarea/render-element.mjs.map 51.00 B
143
- ESM dist/chunk-THWPPG6M.mjs.map 2.24 KB
144
- ESM dist/context/index.mjs.map 51.00 B
136
+ ESM dist/components/index.mjs.map 51.00 B
137
+ ESM dist/chunk-CU2M5BIJ.mjs.map 8.62 KB
145
138
  ESM dist/hooks/use-copilot-textarea-editor.mjs.map 51.00 B
146
- ESM ⚡️ Build success in 441ms
147
- DTS ⚡️ Build success in 918ms
139
+ ESM dist/chunk-E2UEE45I.mjs.map 5.78 KB
140
+ ESM dist/lib/debouncer.mjs.map 51.00 B
141
+ ESM dist/chunk-3UQM3NLM.mjs.map 3.63 KB
142
+ ESM dist/lib/editor-to-text.mjs.map 2.83 KB
143
+ ESM dist/chunk-EHQ5TN4R.mjs.map 4.01 KB
144
+ ESM dist/chunk-NKW5OU2S.mjs.map 1.60 KB
145
+ ESM dist/chunk-WJYQWL4I.mjs.map 1.04 KB
146
+ ESM ⚡️ Build success in 544ms
147
+ DTS ⚡️ Build success in 1401ms
148
148
  DTS dist/index.d.ts 763.00 B
149
149
  DTS dist/components/base-copilot-textarea/base-copilot-textarea.d.ts 820.00 B
150
150
  DTS dist/components/copilot-textarea/copilot-textarea.d.ts 703.00 B
151
- DTS dist/types/base/base-autosuggestions-config.d.ts 332.00 B
151
+ DTS dist/types/base/base-autosuggestions-config.d.ts 355.00 B
152
152
  DTS dist/types/base/autosuggestions-bare-function.d.ts 162.00 B
153
153
  DTS dist/types/standard-autosuggestions/autosuggestions-config.d.ts 884.00 B
154
154
  DTS dist/types/standard-autosuggestions/minimal-chat-gpt-message.d.ts 129.00 B
155
- DTS dist/components/index.d.ts 480.00 B
156
155
  DTS dist/context/index.d.ts 1.00 B
156
+ DTS dist/components/index.d.ts 480.00 B
157
157
  DTS dist/hooks/index.d.ts 1.00 B
158
- DTS dist/hooks/use-autosuggestions.d.ts 860.00 B
158
+ DTS dist/hooks/use-autosuggestions.d.ts 879.00 B
159
159
  DTS dist/types/base/autosuggestion-state.d.ts 143.00 B
160
160
  DTS dist/types/base/editor-autocomplete-state.d.ts 342.00 B
161
161
  DTS dist/hooks/use-copilot-textarea-editor.d.ts 223.00 B
@@ -174,5 +174,5 @@ DTS dist/lib/slatejs-edits/add-autocompletions.d.ts
174
174
  DTS dist/lib/slatejs-edits/clear-autocompletions.d.ts 250.00 B
175
175
  DTS dist/lib/slatejs-edits/replace-text.d.ts 139.00 B
176
176
  DTS dist/lib/slatejs-edits/with-partial-history.d.ts 542.00 B
177
- DTS dist/types/base/index.d.ts 194.00 B
178
177
  DTS dist/types/standard-autosuggestions/index.d.ts 286.00 B
178
+ DTS dist/types/base/index.d.ts 194.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ui
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 7ae5549: Added support for a disabled parameter on CopilotTextarea
8
+
3
9
  ## 0.9.0
4
10
 
5
11
  ### Minor Changes
@@ -2,9 +2,10 @@
2
2
  var defaultBaseAutosuggestionsConfig = {
3
3
  debounceTime: 500,
4
4
  acceptAutosuggestionKey: "Tab",
5
- disableWhenEmpty: true
5
+ disableWhenEmpty: true,
6
+ disabled: false
6
7
  };
7
8
 
8
9
  export { defaultBaseAutosuggestionsConfig };
9
10
  //# sourceMappingURL=out.js.map
10
- //# sourceMappingURL=chunk-6LKDH2UJ.mjs.map
11
+ //# sourceMappingURL=chunk-7KWRVIYV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/base/base-autosuggestions-config.tsx"],"names":[],"mappings":";AAQO,IAAM,mCAGT;AAAA,EACF,cAAc;AAAA,EACd,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,UAAU;AACZ","sourcesContent":["export interface BaseAutosuggestionsConfig {\n purposePrompt: string;\n debounceTime: number;\n acceptAutosuggestionKey: string;\n disableWhenEmpty: boolean;\n disabled: boolean;\n}\n\nexport const defaultBaseAutosuggestionsConfig: Omit<\n BaseAutosuggestionsConfig,\n \"purposePrompt\"\n> = {\n debounceTime: 500,\n acceptAutosuggestionKey: \"Tab\",\n disableWhenEmpty: true,\n disabled: false,\n};\n"]}
@@ -1,12 +1,12 @@
1
- import { useAddBrandingCss } from './chunk-THWPPG6M.mjs';
2
1
  import { addAutocompletionsToEditor } from './chunk-WJYQWL4I.mjs';
3
2
  import { clearAutocompletionsFromEditor } from './chunk-4XYYSJ5C.mjs';
4
3
  import { replaceEditorText } from './chunk-TSF4AJIK.mjs';
5
4
  import { getTextAroundCursor, getFullEditorTextWithNewlines } from './chunk-3UQM3NLM.mjs';
6
- import { defaultBaseAutosuggestionsConfig } from './chunk-6LKDH2UJ.mjs';
5
+ import { defaultBaseAutosuggestionsConfig } from './chunk-7KWRVIYV.mjs';
7
6
  import { makeRenderElementFunction } from './chunk-LNAIMEB2.mjs';
8
7
  import { makeRenderPlaceholderFunction } from './chunk-OELUUJZY.mjs';
9
- import { useAutosuggestions } from './chunk-24IOWJS4.mjs';
8
+ import { useAddBrandingCss } from './chunk-THWPPG6M.mjs';
9
+ import { useAutosuggestions } from './chunk-E2UEE45I.mjs';
10
10
  import { useCopilotTextareaEditor } from './chunk-6SYD77G6.mjs';
11
11
  import { __spreadValues, __objRest } from './chunk-MRXNTQOX.mjs';
12
12
  import { useMemo, useState, useCallback, useEffect } from 'react';
@@ -48,7 +48,8 @@ function BaseCopilotTextarea(props) {
48
48
  autosuggestionsConfig.acceptAutosuggestionKey,
49
49
  props.autosuggestionsFunction,
50
50
  insertText,
51
- autosuggestionsConfig.disableWhenEmpty
51
+ autosuggestionsConfig.disableWhenEmpty,
52
+ autosuggestionsConfig.disabled
52
53
  );
53
54
  useEffect(() => {
54
55
  clearAutocompletionsFromEditor(editor);
@@ -129,4 +130,4 @@ function BaseCopilotTextarea(props) {
129
130
 
130
131
  export { BaseCopilotTextarea };
131
132
  //# sourceMappingURL=out.js.map
132
- //# sourceMappingURL=chunk-4EA7I44O.mjs.map
133
+ //# sourceMappingURL=chunk-CU2M5BIJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"names":["_a","value"],"mappings":"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","sourcesContent":["import \"./base-copilot-textarea.css\";\nimport {\n TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/use-copilot-textarea-editor\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundCursor,\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 {\n AutosuggestionsBareFunction,\n BaseAutosuggestionsConfig,\n defaultBaseAutosuggestionsConfig,\n} from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\n\nexport interface BaseCopilotTextareaProps\n extends TextareaHTMLAttributes<HTMLDivElement> {\n disableBranding?: boolean;\n placeholderStyle?: React.CSSProperties;\n suggestionsStyle?: React.CSSProperties;\n value?: string;\n onValueChange?: (value: string) => void;\n autosuggestionsConfig: Partial<BaseAutosuggestionsConfig> & {\n purposePrompt: string;\n };\n}\n\nexport function BaseCopilotTextarea(\n props: BaseCopilotTextareaProps & {\n autosuggestionsFunction: AutosuggestionsBareFunction;\n }\n): JSX.Element {\n const autosuggestionsConfig: BaseAutosuggestionsConfig = {\n ...defaultBaseAutosuggestionsConfig,\n ...props.autosuggestionsConfig,\n };\n\n const valueOnInitialRender = useMemo(() => props.value ?? \"\", []);\n const [lastKnownFullEditorText, setLastKnownFullEditorText] =\n useState(valueOnInitialRender);\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 insertText = useCallback(\n (autosuggestion: AutosuggestionState) => {\n Editor.insertText(editor, autosuggestion.text, {\n at: autosuggestion.point,\n });\n },\n [editor]\n );\n\n const {\n currentAutocompleteSuggestion,\n onChangeHandler: onChangeHandlerForAutocomplete,\n onKeyDownHandler: onKeyDownHandlerForAutocomplete,\n } = useAutosuggestions(\n autosuggestionsConfig.debounceTime,\n autosuggestionsConfig.acceptAutosuggestionKey,\n props.autosuggestionsFunction,\n insertText,\n autosuggestionsConfig.disableWhenEmpty,\n autosuggestionsConfig.disabled\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 useAddBrandingCss(suggestionStyleAugmented, props.disableBranding);\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 onValueChange,\n autosuggestionsConfig: autosuggestionsConfigFromProps,\n autosuggestionsFunction,\n className,\n ...propsToForward\n } = props;\n\n const moddedClassName = (() => {\n const baseClassName = \"copilot-textarea\";\n const brandingClass = props.disableBranding\n ? \"no-branding\"\n : \"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 // Add the editable component inside the context.\n <Slate\n editor={editor}\n initialValue={initialValue}\n onChange={(value) => {\n const newEditorState = getTextAroundCursor(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(fullEditorText);\n onChangeHandlerForAutocomplete(newEditorState);\n props.onValueChange?.(fullEditorText);\n }}\n >\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={onKeyDownHandlerForAutocomplete}\n className={moddedClassName}\n {...propsToForward}\n />\n </Slate>\n );\n}\n"]}
@@ -4,11 +4,14 @@ import { Debouncer } from './chunk-NKW5OU2S.mjs';
4
4
  import { __async } from './chunk-MRXNTQOX.mjs';
5
5
  import { useState, useCallback, useMemo } from 'react';
6
6
 
7
- function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestionFunction, insertAutocompleteSuggestion, disableWhenEmpty) {
7
+ function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestionFunction, insertAutocompleteSuggestion, disableWhenEmpty, disabled) {
8
8
  const [previousAutocompleteState, setPreviousAutocompleteState] = useState(null);
9
9
  const [currentAutocompleteSuggestion, setCurrentAutocompleteSuggestion] = useState(null);
10
10
  const awaitForAndAppendSuggestion = useCallback(
11
11
  (editorAutocompleteState, abortSignal) => __async(this, null, function* () {
12
+ if (disabled) {
13
+ return;
14
+ }
12
15
  if (disableWhenEmpty && editorAutocompleteState.textBeforeCursor === "" && editorAutocompleteState.textAfterCursor === "") {
13
16
  return;
14
17
  }
@@ -25,7 +28,12 @@ function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestio
25
28
  point: editorAutocompleteState.cursorPoint
26
29
  });
27
30
  }),
28
- [autosuggestionFunction, setCurrentAutocompleteSuggestion, disableWhenEmpty]
31
+ [
32
+ autosuggestionFunction,
33
+ setCurrentAutocompleteSuggestion,
34
+ disableWhenEmpty,
35
+ disabled
36
+ ]
29
37
  );
30
38
  const debouncedFunction = useMemo(
31
39
  () => new Debouncer(
@@ -85,4 +93,4 @@ function useAutosuggestions(debounceTime, acceptAutosuggestionKey, autosuggestio
85
93
 
86
94
  export { useAutosuggestions };
87
95
  //# sourceMappingURL=out.js.map
88
- //# sourceMappingURL=chunk-24IOWJS4.mjs.map
96
+ //# sourceMappingURL=chunk-E2UEE45I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-autosuggestions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,aAAa,SAAS,gBAAgB;AAgBxC,SAAS,mBACd,cACA,yBACA,wBACA,8BACA,kBACA,UAC0B;AAC1B,QAAM,CAAC,2BAA2B,4BAA4B,IAC5D,SAAyC,IAAI;AAE/C,QAAM,CAAC,+BAA+B,gCAAgC,IACpE,SAAqC,IAAI;AAE3C,QAAM,8BAGe;AAAA,IACnB,CACE,yBACA,gBACG;AAEH,UAAI,UAAU;AACZ;AAAA,MACF;AAEA,UACE,oBACA,wBAAwB,qBAAqB,MAC7C,wBAAwB,oBAAoB,IAC5C;AACA;AAAA,MACF;AAGA,YAAM,aAAa,MAAM;AAAA,QACvB,wBAAwB;AAAA,QACxB,wBAAwB;AAAA,QACxB;AAAA,MACF;AAGA,UAAI,CAAC,cAAc,YAAY,SAAS;AACtC,cAAM,IAAI,aAAa,WAAW,YAAY;AAAA,MAChD;AAEA,uCAAiC;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO,wBAAwB;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACxB,MACE,IAAI;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,WAAW;AAAA,IACf,CAAC,mBAAmD;AAClD,YAAM,wBAAwB,CAAC;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,mCAA6B,cAAc;AAG3C,UAAI,CAAC,uBAAuB;AAC1B;AAAA,MACF;AAGA,uCAAiC,IAAI;AAGrC,UAAI,gBAAgB;AAClB,0BAAkB,SAAS,6BAA6B,cAAc;AAAA,MACxE,OAAO;AACL,0BAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAA+C;AAC9C,UAAI,+BAA+B;AACjC,YAAI,MAAM,QAAQ,yBAAyB;AACzC,gBAAM,eAAe;AACrB,uCAA6B,6BAA6B;AAC1D,2CAAiC,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF","sourcesContent":["import { useCallback, 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.textBeforeCursor,\n editorAutocompleteState.textAfterCursor,\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 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"]}
@@ -1,4 +1,4 @@
1
- import { defaultBaseAutosuggestionsConfig } from './chunk-6LKDH2UJ.mjs';
1
+ import { defaultBaseAutosuggestionsConfig } from './chunk-7KWRVIYV.mjs';
2
2
  import { __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
3
3
 
4
4
  // src/types/standard-autosuggestions/autosuggestions-config.tsx
@@ -66,4 +66,4 @@ var defaultAutosuggestionsConfig = __spreadProps(__spreadValues({}, defaultBaseA
66
66
 
67
67
  export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt };
68
68
  //# sourceMappingURL=out.js.map
69
- //# sourceMappingURL=chunk-ZPACRCJ6.mjs.map
69
+ //# sourceMappingURL=chunk-EHQ5TN4R.mjs.map
@@ -1,6 +1,6 @@
1
1
  import { useMakeStandardAutosuggestionFunction } from './chunk-A3SFEHWZ.mjs';
2
- import { defaultAutosuggestionsConfig } from './chunk-ZPACRCJ6.mjs';
3
- import { BaseCopilotTextarea } from './chunk-4EA7I44O.mjs';
2
+ import { defaultAutosuggestionsConfig } from './chunk-EHQ5TN4R.mjs';
3
+ import { BaseCopilotTextarea } from './chunk-CU2M5BIJ.mjs';
4
4
  import { __spreadValues, __spreadProps } from './chunk-MRXNTQOX.mjs';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
@@ -22,4 +22,4 @@ function CopilotTextarea(props) {
22
22
 
23
23
  export { CopilotTextarea };
24
24
  //# sourceMappingURL=out.js.map
25
- //# sourceMappingURL=chunk-ROH375UB.mjs.map
25
+ //# sourceMappingURL=chunk-NHLYAJCQ.mjs.map
@@ -1,14 +1,14 @@
1
- export { BaseCopilotTextarea } from '../../chunk-4EA7I44O.mjs';
2
- import '../../chunk-THWPPG6M.mjs';
1
+ export { BaseCopilotTextarea } from '../../chunk-CU2M5BIJ.mjs';
3
2
  import '../../chunk-WJYQWL4I.mjs';
4
3
  import '../../chunk-4XYYSJ5C.mjs';
5
4
  import '../../chunk-TSF4AJIK.mjs';
6
5
  import '../../chunk-3UQM3NLM.mjs';
7
6
  import '../../chunk-WJHSY5T6.mjs';
8
- import '../../chunk-6LKDH2UJ.mjs';
7
+ import '../../chunk-7KWRVIYV.mjs';
9
8
  import '../../chunk-LNAIMEB2.mjs';
10
9
  import '../../chunk-OELUUJZY.mjs';
11
- import '../../chunk-24IOWJS4.mjs';
10
+ import '../../chunk-THWPPG6M.mjs';
11
+ import '../../chunk-E2UEE45I.mjs';
12
12
  import '../../chunk-UW3ITU2Y.mjs';
13
13
  import '../../chunk-KGKLUWKW.mjs';
14
14
  import '../../chunk-6SYD77G6.mjs';
@@ -1,18 +1,18 @@
1
- export { CopilotTextarea } from '../../chunk-ROH375UB.mjs';
1
+ export { CopilotTextarea } from '../../chunk-NHLYAJCQ.mjs';
2
2
  import '../../chunk-A3SFEHWZ.mjs';
3
3
  import '../../chunk-AZQCUNBV.mjs';
4
- import '../../chunk-ZPACRCJ6.mjs';
5
- import '../../chunk-4EA7I44O.mjs';
6
- import '../../chunk-THWPPG6M.mjs';
4
+ import '../../chunk-EHQ5TN4R.mjs';
5
+ import '../../chunk-CU2M5BIJ.mjs';
7
6
  import '../../chunk-WJYQWL4I.mjs';
8
7
  import '../../chunk-4XYYSJ5C.mjs';
9
8
  import '../../chunk-TSF4AJIK.mjs';
10
9
  import '../../chunk-3UQM3NLM.mjs';
11
10
  import '../../chunk-WJHSY5T6.mjs';
12
- import '../../chunk-6LKDH2UJ.mjs';
11
+ import '../../chunk-7KWRVIYV.mjs';
13
12
  import '../../chunk-LNAIMEB2.mjs';
14
13
  import '../../chunk-OELUUJZY.mjs';
15
- import '../../chunk-24IOWJS4.mjs';
14
+ import '../../chunk-THWPPG6M.mjs';
15
+ import '../../chunk-E2UEE45I.mjs';
16
16
  import '../../chunk-UW3ITU2Y.mjs';
17
17
  import '../../chunk-KGKLUWKW.mjs';
18
18
  import '../../chunk-6SYD77G6.mjs';
@@ -1,19 +1,19 @@
1
1
  import '../chunk-MMVDU6DF.mjs';
2
- export { CopilotTextarea } from '../chunk-ROH375UB.mjs';
2
+ export { CopilotTextarea } from '../chunk-NHLYAJCQ.mjs';
3
3
  import '../chunk-A3SFEHWZ.mjs';
4
4
  import '../chunk-AZQCUNBV.mjs';
5
- import '../chunk-ZPACRCJ6.mjs';
6
- export { BaseCopilotTextarea } from '../chunk-4EA7I44O.mjs';
7
- import '../chunk-THWPPG6M.mjs';
5
+ import '../chunk-EHQ5TN4R.mjs';
6
+ export { BaseCopilotTextarea } from '../chunk-CU2M5BIJ.mjs';
8
7
  import '../chunk-WJYQWL4I.mjs';
9
8
  import '../chunk-4XYYSJ5C.mjs';
10
9
  import '../chunk-TSF4AJIK.mjs';
11
10
  import '../chunk-3UQM3NLM.mjs';
12
11
  import '../chunk-WJHSY5T6.mjs';
13
- import '../chunk-6LKDH2UJ.mjs';
12
+ import '../chunk-7KWRVIYV.mjs';
14
13
  import '../chunk-LNAIMEB2.mjs';
15
14
  import '../chunk-OELUUJZY.mjs';
16
- import '../chunk-24IOWJS4.mjs';
15
+ import '../chunk-THWPPG6M.mjs';
16
+ import '../chunk-E2UEE45I.mjs';
17
17
  import '../chunk-UW3ITU2Y.mjs';
18
18
  import '../chunk-KGKLUWKW.mjs';
19
19
  import '../chunk-6SYD77G6.mjs';
@@ -8,6 +8,6 @@ interface UseAutosuggestionsResult {
8
8
  onChangeHandler: (newEditorState: EditorAutocompleteState | null) => void;
9
9
  onKeyDownHandler: (event: React.KeyboardEvent<HTMLDivElement>) => void;
10
10
  }
11
- declare function useAutosuggestions(debounceTime: number, acceptAutosuggestionKey: string, autosuggestionFunction: AutosuggestionsBareFunction, insertAutocompleteSuggestion: (suggestion: AutosuggestionState) => void, disableWhenEmpty: boolean): UseAutosuggestionsResult;
11
+ declare function useAutosuggestions(debounceTime: number, acceptAutosuggestionKey: string, autosuggestionFunction: AutosuggestionsBareFunction, insertAutocompleteSuggestion: (suggestion: AutosuggestionState) => void, disableWhenEmpty: boolean, disabled: boolean): UseAutosuggestionsResult;
12
12
 
13
13
  export { UseAutosuggestionsResult, useAutosuggestions };
@@ -1,4 +1,4 @@
1
- export { useAutosuggestions } from '../chunk-24IOWJS4.mjs';
1
+ export { useAutosuggestions } from '../chunk-E2UEE45I.mjs';
2
2
  import '../chunk-UW3ITU2Y.mjs';
3
3
  import '../chunk-KGKLUWKW.mjs';
4
4
  import '../chunk-NKW5OU2S.mjs';
package/dist/index.mjs CHANGED
@@ -1,22 +1,22 @@
1
1
  import './chunk-FD6FGKYY.mjs';
2
+ import './chunk-IU3WTXLQ.mjs';
2
3
  import './chunk-MMVDU6DF.mjs';
3
- export { CopilotTextarea } from './chunk-ROH375UB.mjs';
4
+ export { CopilotTextarea } from './chunk-NHLYAJCQ.mjs';
4
5
  import './chunk-A3SFEHWZ.mjs';
5
6
  import './chunk-AZQCUNBV.mjs';
6
- export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from './chunk-ZPACRCJ6.mjs';
7
- export { BaseCopilotTextarea } from './chunk-4EA7I44O.mjs';
8
- import './chunk-THWPPG6M.mjs';
7
+ export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from './chunk-EHQ5TN4R.mjs';
8
+ export { BaseCopilotTextarea } from './chunk-CU2M5BIJ.mjs';
9
9
  import './chunk-WJYQWL4I.mjs';
10
10
  import './chunk-4XYYSJ5C.mjs';
11
11
  import './chunk-TSF4AJIK.mjs';
12
12
  import './chunk-3UQM3NLM.mjs';
13
13
  import './chunk-WJHSY5T6.mjs';
14
- export { defaultBaseAutosuggestionsConfig } from './chunk-6LKDH2UJ.mjs';
14
+ export { defaultBaseAutosuggestionsConfig } from './chunk-7KWRVIYV.mjs';
15
15
  import './chunk-LNAIMEB2.mjs';
16
16
  import './chunk-OELUUJZY.mjs';
17
- import './chunk-IU3WTXLQ.mjs';
17
+ import './chunk-THWPPG6M.mjs';
18
18
  import './chunk-H4VKQGVU.mjs';
19
- import './chunk-24IOWJS4.mjs';
19
+ import './chunk-E2UEE45I.mjs';
20
20
  import './chunk-UW3ITU2Y.mjs';
21
21
  import './chunk-KGKLUWKW.mjs';
22
22
  import './chunk-6SYD77G6.mjs';
@@ -3,6 +3,7 @@ interface BaseAutosuggestionsConfig {
3
3
  debounceTime: number;
4
4
  acceptAutosuggestionKey: string;
5
5
  disableWhenEmpty: boolean;
6
+ disabled: boolean;
6
7
  }
7
8
  declare const defaultBaseAutosuggestionsConfig: Omit<BaseAutosuggestionsConfig, "purposePrompt">;
8
9
 
@@ -1,4 +1,4 @@
1
- export { defaultBaseAutosuggestionsConfig } from '../../chunk-6LKDH2UJ.mjs';
1
+ export { defaultBaseAutosuggestionsConfig } from '../../chunk-7KWRVIYV.mjs';
2
2
  import '../../chunk-MRXNTQOX.mjs';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=base-autosuggestions-config.mjs.map
@@ -1,5 +1,5 @@
1
1
  import '../../chunk-WJHSY5T6.mjs';
2
- export { defaultBaseAutosuggestionsConfig } from '../../chunk-6LKDH2UJ.mjs';
2
+ export { defaultBaseAutosuggestionsConfig } from '../../chunk-7KWRVIYV.mjs';
3
3
  import '../../chunk-MRXNTQOX.mjs';
4
4
  //# sourceMappingURL=out.js.map
5
5
  //# sourceMappingURL=index.mjs.map
@@ -1,8 +1,8 @@
1
1
  import '../chunk-FD6FGKYY.mjs';
2
2
  import '../chunk-AZQCUNBV.mjs';
3
- export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../chunk-ZPACRCJ6.mjs';
3
+ export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../chunk-EHQ5TN4R.mjs';
4
4
  import '../chunk-WJHSY5T6.mjs';
5
- export { defaultBaseAutosuggestionsConfig } from '../chunk-6LKDH2UJ.mjs';
5
+ export { defaultBaseAutosuggestionsConfig } from '../chunk-7KWRVIYV.mjs';
6
6
  import '../chunk-MRXNTQOX.mjs';
7
7
  //# sourceMappingURL=out.js.map
8
8
  //# sourceMappingURL=index.mjs.map
@@ -1,6 +1,6 @@
1
- export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../../chunk-ZPACRCJ6.mjs';
1
+ export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../../chunk-EHQ5TN4R.mjs';
2
2
  import '../../chunk-WJHSY5T6.mjs';
3
- import '../../chunk-6LKDH2UJ.mjs';
3
+ import '../../chunk-7KWRVIYV.mjs';
4
4
  import '../../chunk-MRXNTQOX.mjs';
5
5
  //# sourceMappingURL=out.js.map
6
6
  //# sourceMappingURL=autosuggestions-config.mjs.map
@@ -1,7 +1,7 @@
1
1
  import '../../chunk-AZQCUNBV.mjs';
2
- export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../../chunk-ZPACRCJ6.mjs';
2
+ export { defaultAutosuggestionsConfig, defaultFewShotMessages, defaultMakeSystemPrompt } from '../../chunk-EHQ5TN4R.mjs';
3
3
  import '../../chunk-WJHSY5T6.mjs';
4
- import '../../chunk-6LKDH2UJ.mjs';
4
+ import '../../chunk-7KWRVIYV.mjs';
5
5
  import '../../chunk-MRXNTQOX.mjs';
6
6
  //# sourceMappingURL=out.js.map
7
7
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.9.0",
7
+ "version": "0.10.0",
8
8
  "sideEffects": [
9
9
  "**/*.css"
10
10
  ],
@@ -30,9 +30,9 @@
30
30
  "ts-jest": "^29.1.1",
31
31
  "tsup": "^6.1.3",
32
32
  "typescript": "^4.9.4",
33
- "eslint-config-custom": "0.2.0",
33
+ "tailwind-config": "0.1.0",
34
34
  "tsconfig": "0.3.0",
35
- "tailwind-config": "0.1.0"
35
+ "eslint-config-custom": "0.2.0"
36
36
  },
37
37
  "dependencies": {
38
38
  "ai": "^2.1.22",
@@ -83,7 +83,8 @@ export function BaseCopilotTextarea(
83
83
  autosuggestionsConfig.acceptAutosuggestionKey,
84
84
  props.autosuggestionsFunction,
85
85
  insertText,
86
- autosuggestionsConfig.disableWhenEmpty
86
+ autosuggestionsConfig.disableWhenEmpty,
87
+ autosuggestionsConfig.disabled
87
88
  );
88
89
 
89
90
  // sync autosuggestions state with the editor
@@ -19,7 +19,8 @@ export function useAutosuggestions(
19
19
  acceptAutosuggestionKey: string,
20
20
  autosuggestionFunction: AutosuggestionsBareFunction,
21
21
  insertAutocompleteSuggestion: (suggestion: AutosuggestionState) => void,
22
- disableWhenEmpty: boolean
22
+ disableWhenEmpty: boolean,
23
+ disabled: boolean
23
24
  ): UseAutosuggestionsResult {
24
25
  const [previousAutocompleteState, setPreviousAutocompleteState] =
25
26
  useState<EditorAutocompleteState | null>(null);
@@ -35,6 +36,11 @@ export function useAutosuggestions(
35
36
  editorAutocompleteState: EditorAutocompleteState,
36
37
  abortSignal: AbortSignal
37
38
  ) => {
39
+ // early return if disabled
40
+ if (disabled) {
41
+ return;
42
+ }
43
+
38
44
  if (
39
45
  disableWhenEmpty &&
40
46
  editorAutocompleteState.textBeforeCursor === "" &&
@@ -43,6 +49,7 @@ export function useAutosuggestions(
43
49
  return;
44
50
  }
45
51
 
52
+ // fetch the suggestion
46
53
  const suggestion = await autosuggestionFunction(
47
54
  editorAutocompleteState.textBeforeCursor,
48
55
  editorAutocompleteState.textAfterCursor,
@@ -59,7 +66,12 @@ export function useAutosuggestions(
59
66
  point: editorAutocompleteState.cursorPoint,
60
67
  });
61
68
  },
62
- [autosuggestionFunction, setCurrentAutocompleteSuggestion, disableWhenEmpty]
69
+ [
70
+ autosuggestionFunction,
71
+ setCurrentAutocompleteSuggestion,
72
+ disableWhenEmpty,
73
+ disabled,
74
+ ]
63
75
  );
64
76
 
65
77
  const debouncedFunction = useMemo(
@@ -3,6 +3,7 @@ export interface BaseAutosuggestionsConfig {
3
3
  debounceTime: number;
4
4
  acceptAutosuggestionKey: string;
5
5
  disableWhenEmpty: boolean;
6
+ disabled: boolean;
6
7
  }
7
8
 
8
9
  export const defaultBaseAutosuggestionsConfig: Omit<
@@ -12,4 +13,5 @@ export const defaultBaseAutosuggestionsConfig: Omit<
12
13
  debounceTime: 500,
13
14
  acceptAutosuggestionKey: "Tab",
14
15
  disableWhenEmpty: true,
16
+ disabled: false,
15
17
  };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-autosuggestions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,aAAa,SAAS,gBAAgB;AAgBxC,SAAS,mBACd,cACA,yBACA,wBACA,8BACA,kBAC0B;AAC1B,QAAM,CAAC,2BAA2B,4BAA4B,IAC5D,SAAyC,IAAI;AAE/C,QAAM,CAAC,+BAA+B,gCAAgC,IACpE,SAAqC,IAAI;AAE3C,QAAM,8BAGe;AAAA,IACnB,CACE,yBACA,gBACG;AACH,UACE,oBACA,wBAAwB,qBAAqB,MAC7C,wBAAwB,oBAAoB,IAC5C;AACA;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AAAA,QACvB,wBAAwB;AAAA,QACxB,wBAAwB;AAAA,QACxB;AAAA,MACF;AAGA,UAAI,CAAC,cAAc,YAAY,SAAS;AACtC,cAAM,IAAI,aAAa,WAAW,YAAY;AAAA,MAChD;AAEA,uCAAiC;AAAA,QAC/B,MAAM;AAAA,QACN,OAAO,wBAAwB;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA,CAAC,wBAAwB,kCAAkC,gBAAgB;AAAA,EAC7E;AAEA,QAAM,oBAAoB;AAAA,IACxB,MACE,IAAI;AAAA,MACF;AAAA,IACF;AAAA,IACF,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,WAAW;AAAA,IACf,CAAC,mBAAmD;AAClD,YAAM,wBAAwB,CAAC;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,mCAA6B,cAAc;AAG3C,UAAI,CAAC,uBAAuB;AAC1B;AAAA,MACF;AAGA,uCAAiC,IAAI;AAGrC,UAAI,gBAAgB;AAClB,0BAAkB,SAAS,6BAA6B,cAAc;AAAA,MACxE,OAAO;AACL,0BAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAA+C;AAC9C,UAAI,+BAA+B;AACjC,YAAI,MAAM,QAAQ,yBAAyB;AACzC,gBAAM,eAAe;AACrB,uCAA6B,6BAA6B;AAC1D,2CAAiC,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF","sourcesContent":["import { useCallback, 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): 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 if (\n disableWhenEmpty &&\n editorAutocompleteState.textBeforeCursor === \"\" &&\n editorAutocompleteState.textAfterCursor === \"\"\n ) {\n return;\n }\n\n const suggestion = await autosuggestionFunction(\n editorAutocompleteState.textBeforeCursor,\n editorAutocompleteState.textAfterCursor,\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 [autosuggestionFunction, setCurrentAutocompleteSuggestion, disableWhenEmpty]\n );\n\n const debouncedFunction = useMemo(\n () =>\n new Debouncer<[editorAutocompleteState: EditorAutocompleteState]>(\n debounceTime\n ),\n [debounceTime]\n );\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"names":["_a","value"],"mappings":"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","sourcesContent":["import \"./base-copilot-textarea.css\";\nimport {\n TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/use-copilot-textarea-editor\";\nimport {\n getFullEditorTextWithNewlines,\n getTextAroundCursor,\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 {\n AutosuggestionsBareFunction,\n BaseAutosuggestionsConfig,\n defaultBaseAutosuggestionsConfig,\n} from \"../../types/base\";\nimport { AutosuggestionState } from \"../../types/base/autosuggestion-state\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\n\nexport interface BaseCopilotTextareaProps\n extends TextareaHTMLAttributes<HTMLDivElement> {\n disableBranding?: boolean;\n placeholderStyle?: React.CSSProperties;\n suggestionsStyle?: React.CSSProperties;\n value?: string;\n onValueChange?: (value: string) => void;\n autosuggestionsConfig: Partial<BaseAutosuggestionsConfig> & {\n purposePrompt: string;\n };\n}\n\nexport function BaseCopilotTextarea(\n props: BaseCopilotTextareaProps & {\n autosuggestionsFunction: AutosuggestionsBareFunction;\n }\n): JSX.Element {\n const autosuggestionsConfig: BaseAutosuggestionsConfig = {\n ...defaultBaseAutosuggestionsConfig,\n ...props.autosuggestionsConfig,\n };\n\n const valueOnInitialRender = useMemo(() => props.value ?? \"\", []);\n const [lastKnownFullEditorText, setLastKnownFullEditorText] =\n useState(valueOnInitialRender);\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 insertText = useCallback(\n (autosuggestion: AutosuggestionState) => {\n Editor.insertText(editor, autosuggestion.text, {\n at: autosuggestion.point,\n });\n },\n [editor]\n );\n\n const {\n currentAutocompleteSuggestion,\n onChangeHandler: onChangeHandlerForAutocomplete,\n onKeyDownHandler: onKeyDownHandlerForAutocomplete,\n } = useAutosuggestions(\n autosuggestionsConfig.debounceTime,\n autosuggestionsConfig.acceptAutosuggestionKey,\n props.autosuggestionsFunction,\n insertText,\n autosuggestionsConfig.disableWhenEmpty\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 useAddBrandingCss(suggestionStyleAugmented, props.disableBranding);\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 onValueChange,\n autosuggestionsConfig: autosuggestionsConfigFromProps,\n autosuggestionsFunction,\n className,\n ...propsToForward\n } = props;\n\n const moddedClassName = (() => {\n const baseClassName = \"copilot-textarea\";\n const brandingClass = props.disableBranding\n ? \"no-branding\"\n : \"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 // Add the editable component inside the context.\n <Slate\n editor={editor}\n initialValue={initialValue}\n onChange={(value) => {\n const newEditorState = getTextAroundCursor(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(fullEditorText);\n onChangeHandlerForAutocomplete(newEditorState);\n props.onValueChange?.(fullEditorText);\n }}\n >\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={onKeyDownHandlerForAutocomplete}\n className={moddedClassName}\n {...propsToForward}\n />\n </Slate>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/base/base-autosuggestions-config.tsx"],"names":[],"mappings":";AAOO,IAAM,mCAGT;AAAA,EACF,cAAc;AAAA,EACd,yBAAyB;AAAA,EACzB,kBAAkB;AACpB","sourcesContent":["export interface BaseAutosuggestionsConfig {\n purposePrompt: string;\n debounceTime: number;\n acceptAutosuggestionKey: string;\n disableWhenEmpty: boolean;\n}\n\nexport const defaultBaseAutosuggestionsConfig: Omit<\n BaseAutosuggestionsConfig,\n \"purposePrompt\"\n> = {\n debounceTime: 500,\n acceptAutosuggestionKey: \"Tab\",\n disableWhenEmpty: true,\n};\n"]}