@copilotkit/react-textarea 0.19.1 → 0.21.0-alpha.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.
- package/.turbo/turbo-build.log +258 -298
- package/CHANGELOG.md +22 -0
- package/dist/{chunk-RDHPSSHJ.mjs → chunk-24SYR4JB.mjs} +13 -8
- package/dist/chunk-24SYR4JB.mjs.map +1 -0
- package/dist/{chunk-L6DZHWEL.mjs → chunk-463BFNUP.mjs} +10 -9
- package/dist/chunk-463BFNUP.mjs.map +1 -0
- package/dist/{chunk-QNJ6MXJ2.mjs → chunk-5DU2QDHZ.mjs} +3 -3
- package/dist/{chunk-QNJ6MXJ2.mjs.map → chunk-5DU2QDHZ.mjs.map} +1 -1
- package/dist/chunk-63FSISXT.mjs +48 -0
- package/dist/chunk-63FSISXT.mjs.map +1 -0
- package/dist/{chunk-HRTFMM7P.mjs → chunk-AXN37AHC.mjs} +6 -8
- package/dist/chunk-AXN37AHC.mjs.map +1 -0
- package/dist/{chunk-K2AVA67P.mjs → chunk-DYGPLRY3.mjs} +3 -3
- package/dist/chunk-DYGPLRY3.mjs.map +1 -0
- package/dist/{chunk-BBKDE7YT.mjs → chunk-F2TIBXML.mjs} +3 -3
- package/dist/{chunk-FN7GDKKG.mjs → chunk-GCMQHIRF.mjs} +1 -1
- package/dist/chunk-GCMQHIRF.mjs.map +1 -0
- package/dist/{chunk-7QWJ3OV7.mjs → chunk-KLROO6ID.mjs} +2 -2
- package/dist/{chunk-47JRPWI3.mjs → chunk-O7G7E3E3.mjs} +20 -53
- package/dist/chunk-O7G7E3E3.mjs.map +1 -0
- package/dist/{chunk-KIRROE2K.mjs → chunk-QJDMIGLU.mjs} +4 -3
- package/dist/chunk-QJDMIGLU.mjs.map +1 -0
- package/dist/{chunk-66BDXIX4.mjs → chunk-RR6OQGTI.mjs} +7 -9
- package/dist/chunk-RR6OQGTI.mjs.map +1 -0
- package/dist/{chunk-XA7M72ZO.mjs → chunk-WLPYYGES.mjs} +5 -2
- package/dist/chunk-WLPYYGES.mjs.map +1 -0
- package/dist/{chunk-OXPXFYUG.mjs → chunk-WPIA53HF.mjs} +14 -8
- package/dist/chunk-WPIA53HF.mjs.map +1 -0
- package/dist/{chunk-3TK2VELX.mjs → chunk-YXA3UPMI.mjs} +2 -2
- package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +8 -7
- package/dist/components/copilot-textarea/copilot-textarea.mjs +15 -14
- package/dist/components/hovering-toolbar/hovering-toolbar.mjs +7 -6
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.mjs +5 -4
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.mjs +6 -5
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.mjs +6 -0
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.mjs.map +1 -0
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.mjs +6 -5
- package/dist/components/index.mjs +15 -14
- package/dist/components/source-search-box/source-search-box.mjs +2 -2
- package/dist/components/ui/command.mjs +1 -1
- package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.mjs +5 -5
- package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.mjs +5 -5
- package/dist/index.css +6 -7
- package/dist/index.css.map +1 -1
- package/dist/index.mjs +15 -14
- package/dist/lib/stream-promise-flatten.mjs +1 -1
- package/dist/types/autosuggestions-config/autosuggestions-config.mjs +3 -3
- package/dist/types/autosuggestions-config/editing-api-config.mjs +1 -1
- package/dist/types/autosuggestions-config/index.mjs +4 -4
- package/dist/types/autosuggestions-config/insertions-api-config.mjs +1 -1
- package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.mjs +1 -1
- package/dist/types/index.mjs +4 -4
- package/package.json +3 -5
- package/src/components/copilot-textarea/copilot-textarea.tsx +8 -2
- package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.tsx +27 -62
- package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx +1 -1
- package/src/components/hovering-toolbar/text-insertion-prompt-box/included-files-preview.tsx +54 -0
- package/src/components/source-search-box/source-search-box.tsx +9 -8
- package/src/components/ui/command.tsx +4 -1
- package/src/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.tsx +1 -1
- package/src/hooks/make-autosuggestions-function/use-make-standard-insertion-function.tsx +13 -3
- package/src/lib/stream-promise-flatten.ts +10 -0
- package/src/types/autosuggestions-config/editing-api-config.tsx +5 -7
- package/src/types/autosuggestions-config/insertions-api-config.tsx +6 -8
- package/src/types/autosuggestions-config/subtypes/chatlike-api-endpoint.tsx +4 -0
- package/src/types/base/autosuggestions-bare-function.ts +3 -0
- package/dist/chunk-47JRPWI3.mjs.map +0 -1
- package/dist/chunk-66BDXIX4.mjs.map +0 -1
- package/dist/chunk-FN7GDKKG.mjs.map +0 -1
- package/dist/chunk-HRTFMM7P.mjs.map +0 -1
- package/dist/chunk-K2AVA67P.mjs.map +0 -1
- package/dist/chunk-KIRROE2K.mjs.map +0 -1
- package/dist/chunk-L6DZHWEL.mjs.map +0 -1
- package/dist/chunk-OXPXFYUG.mjs.map +0 -1
- package/dist/chunk-RDHPSSHJ.mjs.map +0 -1
- package/dist/chunk-XA7M72ZO.mjs.map +0 -1
- package/dist/components/base-copilot-textarea/base-copilot-textarea.d.ts +0 -13
- package/dist/components/base-copilot-textarea/render-element.d.ts +0 -6
- package/dist/components/base-copilot-textarea/render-placeholder.d.ts +0 -6
- package/dist/components/base-copilot-textarea/track-cursor-moved-since-last-text-change.d.ts +0 -6
- package/dist/components/base-copilot-textarea/use-add-branding-css.d.ts +0 -3
- package/dist/components/copilot-textarea/copilot-textarea.d.ts +0 -19
- package/dist/components/hovering-toolbar/hovering-editor-provider.d.ts +0 -13
- package/dist/components/hovering-toolbar/hovering-toolbar-components.d.ts +0 -18
- package/dist/components/hovering-toolbar/hovering-toolbar.d.ts +0 -9
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box-core.d.ts +0 -26
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.d.ts +0 -13
- package/dist/components/hovering-toolbar/text-insertion-prompt-box/index.d.ts +0 -3
- package/dist/components/index.d.ts +0 -14
- package/dist/components/manual-ui/chip-with-icon.d.ts +0 -10
- package/dist/components/source-search-box/source-search-box.d.ts +0 -14
- package/dist/components/ui/button.d.ts +0 -14
- package/dist/components/ui/card.d.ts +0 -10
- package/dist/components/ui/command.d.ts +0 -48
- package/dist/components/ui/dialog.d.ts +0 -18
- package/dist/components/ui/label.d.ts +0 -8
- package/dist/components/ui/separator.d.ts +0 -6
- package/dist/components/ui/textarea.d.ts +0 -7
- package/dist/context/index.d.ts +0 -1
- package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.d.ts +0 -13
- package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.d.ts +0 -8
- package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts +0 -7
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.d.ts +0 -21
- package/dist/hooks/make-autosuggestions-function/use-make-standard-insertion-function.d.ts +0 -22
- package/dist/hooks/misc/use-autosize-textarea.d.ts +0 -5
- package/dist/index.d.ts +0 -16
- package/dist/lib/debouncer.d.ts +0 -11
- package/dist/lib/editor-to-text.d.ts +0 -7
- package/dist/lib/get-text-around-cursor.d.ts +0 -15
- package/dist/lib/retry.d.ts +0 -3
- package/dist/lib/slatejs-edits/add-autocompletions.d.ts +0 -8
- package/dist/lib/slatejs-edits/clear-autocompletions.d.ts +0 -8
- package/dist/lib/slatejs-edits/replace-text.d.ts +0 -5
- package/dist/lib/slatejs-edits/with-partial-history.d.ts +0 -10
- package/dist/lib/stream-promise-flatten.d.ts +0 -3
- package/dist/lib/utils.d.ts +0 -10
- package/dist/lib/utils.test.d.ts +0 -1
- package/dist/types/autosuggestions-config/autosuggestions-config-user-specified.d.ts +0 -22
- package/dist/types/autosuggestions-config/autosuggestions-config.d.ts +0 -19
- package/dist/types/autosuggestions-config/editing-api-config.d.ts +0 -15
- package/dist/types/autosuggestions-config/index.d.ts +0 -11
- package/dist/types/autosuggestions-config/insertions-api-config.d.ts +0 -15
- package/dist/types/autosuggestions-config/subtypes/chatlike-api-endpoint.d.ts +0 -27
- package/dist/types/autosuggestions-config/subtypes/make-system-prompt.d.ts +0 -3
- package/dist/types/autosuggestions-config/subtypes/minimal-chat-gpt-message.d.ts +0 -7
- package/dist/types/autosuggestions-config/suggestions-api-config.d.ts +0 -15
- package/dist/types/base/autosuggestion-state.d.ts +0 -8
- package/dist/types/base/autosuggestions-bare-function.d.ts +0 -17
- package/dist/types/base/base-autosuggestions-config.d.ts +0 -15
- package/dist/types/base/base-copilot-textarea-props.d.ts +0 -40
- package/dist/types/base/custom-editor.d.ts +0 -29
- package/dist/types/base/editor-autocomplete-state.d.ts +0 -10
- package/dist/types/base/index.d.ts +0 -4
- package/dist/types/html-copilot-textarea-element.d.ts +0 -7
- package/dist/types/index.d.ts +0 -14
- /package/dist/{chunk-BBKDE7YT.mjs.map → chunk-F2TIBXML.mjs.map} +0 -0
- /package/dist/{chunk-7QWJ3OV7.mjs.map → chunk-KLROO6ID.mjs.map} +0 -0
- /package/dist/{chunk-3TK2VELX.mjs.map → chunk-YXA3UPMI.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import './chunk-MMVDU6DF.mjs';
|
|
2
|
-
export { CopilotTextarea } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
2
|
+
export { CopilotTextarea } from './chunk-24SYR4JB.mjs';
|
|
3
|
+
import './chunk-DYGPLRY3.mjs';
|
|
4
|
+
import './chunk-WPIA53HF.mjs';
|
|
5
5
|
import './chunk-DE5K76I2.mjs';
|
|
6
6
|
import './chunk-5FO6ISW4.mjs';
|
|
7
|
-
export { ChatlikeApiEndpoint } from './chunk-
|
|
8
|
-
export { defaultAutosuggestionsConfig } from './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
7
|
+
export { ChatlikeApiEndpoint } from './chunk-QJDMIGLU.mjs';
|
|
8
|
+
export { defaultAutosuggestionsConfig } from './chunk-F2TIBXML.mjs';
|
|
9
|
+
import './chunk-AXN37AHC.mjs';
|
|
10
|
+
import './chunk-RR6OQGTI.mjs';
|
|
11
11
|
import './chunk-JHTAOLEW.mjs';
|
|
12
12
|
import './chunk-WADHCMPK.mjs';
|
|
13
|
-
export { BaseCopilotTextarea } from './chunk-
|
|
13
|
+
export { BaseCopilotTextarea } from './chunk-YXA3UPMI.mjs';
|
|
14
14
|
import './chunk-CSGFJU3L.mjs';
|
|
15
15
|
import './chunk-KCHYD3EB.mjs';
|
|
16
16
|
import './chunk-YQU7WG7T.mjs';
|
|
@@ -21,19 +21,20 @@ import './chunk-UHD44NC5.mjs';
|
|
|
21
21
|
import './chunk-JAFCXEPU.mjs';
|
|
22
22
|
import './chunk-OD7ZMOVE.mjs';
|
|
23
23
|
import './chunk-MPME5BW2.mjs';
|
|
24
|
-
import './chunk-
|
|
24
|
+
import './chunk-KLROO6ID.mjs';
|
|
25
25
|
import './chunk-L7VVZH4Q.mjs';
|
|
26
|
-
import './chunk-
|
|
27
|
-
import './chunk-
|
|
26
|
+
import './chunk-5DU2QDHZ.mjs';
|
|
27
|
+
import './chunk-O7G7E3E3.mjs';
|
|
28
|
+
import './chunk-63FSISXT.mjs';
|
|
28
29
|
import './chunk-ND5PXTAW.mjs';
|
|
29
30
|
import './chunk-2NURR2DX.mjs';
|
|
30
31
|
import './chunk-5EJ5XOGP.mjs';
|
|
31
32
|
import './chunk-YW3REYX6.mjs';
|
|
32
33
|
import './chunk-XHUMROEY.mjs';
|
|
33
|
-
import './chunk-
|
|
34
|
-
import './chunk-
|
|
34
|
+
import './chunk-463BFNUP.mjs';
|
|
35
|
+
import './chunk-WLPYYGES.mjs';
|
|
35
36
|
import './chunk-O5OWT5GE.mjs';
|
|
36
|
-
import './chunk-
|
|
37
|
+
import './chunk-GCMQHIRF.mjs';
|
|
37
38
|
import './chunk-KGKLUWKW.mjs';
|
|
38
39
|
import './chunk-WJHSY5T6.mjs';
|
|
39
40
|
export { defaultBaseAutosuggestionsConfig } from './chunk-S6JUGJK2.mjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { defaultAutosuggestionsConfig } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
1
|
+
export { defaultAutosuggestionsConfig } from '../../chunk-F2TIBXML.mjs';
|
|
2
|
+
import '../../chunk-AXN37AHC.mjs';
|
|
3
|
+
import '../../chunk-RR6OQGTI.mjs';
|
|
4
4
|
import '../../chunk-JHTAOLEW.mjs';
|
|
5
5
|
import '../../chunk-WJHSY5T6.mjs';
|
|
6
6
|
import '../../chunk-S6JUGJK2.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { defaultEditingApiConfig, defaultEditingFewShotMessages, defaultEditingMakeSystemPrompt } from '../../chunk-
|
|
1
|
+
export { defaultEditingApiConfig, defaultEditingFewShotMessages, defaultEditingMakeSystemPrompt } from '../../chunk-AXN37AHC.mjs';
|
|
2
2
|
import '../../chunk-MRXNTQOX.mjs';
|
|
3
3
|
//# sourceMappingURL=out.js.map
|
|
4
4
|
//# sourceMappingURL=editing-api-config.mjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import '../../chunk-5FO6ISW4.mjs';
|
|
2
|
-
export { ChatlikeApiEndpoint } from '../../chunk-
|
|
3
|
-
export { defaultAutosuggestionsConfig } from '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
2
|
+
export { ChatlikeApiEndpoint } from '../../chunk-QJDMIGLU.mjs';
|
|
3
|
+
export { defaultAutosuggestionsConfig } from '../../chunk-F2TIBXML.mjs';
|
|
4
|
+
import '../../chunk-AXN37AHC.mjs';
|
|
5
|
+
import '../../chunk-RR6OQGTI.mjs';
|
|
6
6
|
import '../../chunk-JHTAOLEW.mjs';
|
|
7
7
|
import '../../chunk-WJHSY5T6.mjs';
|
|
8
8
|
import '../../chunk-S6JUGJK2.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { defaultInsertionsApiConfig, defaultInsertionsFewShotMessages, defaultInsertionsMakeSystemPrompt } from '../../chunk-
|
|
1
|
+
export { defaultInsertionsApiConfig, defaultInsertionsFewShotMessages, defaultInsertionsMakeSystemPrompt } from '../../chunk-RR6OQGTI.mjs';
|
|
2
2
|
import '../../chunk-MRXNTQOX.mjs';
|
|
3
3
|
//# sourceMappingURL=out.js.map
|
|
4
4
|
//# sourceMappingURL=insertions-api-config.mjs.map
|
package/dist/types/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import '../chunk-DE5K76I2.mjs';
|
|
2
2
|
import '../chunk-5FO6ISW4.mjs';
|
|
3
|
-
export { ChatlikeApiEndpoint } from '../chunk-
|
|
4
|
-
export { defaultAutosuggestionsConfig } from '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
3
|
+
export { ChatlikeApiEndpoint } from '../chunk-QJDMIGLU.mjs';
|
|
4
|
+
export { defaultAutosuggestionsConfig } from '../chunk-F2TIBXML.mjs';
|
|
5
|
+
import '../chunk-AXN37AHC.mjs';
|
|
6
|
+
import '../chunk-RR6OQGTI.mjs';
|
|
7
7
|
import '../chunk-JHTAOLEW.mjs';
|
|
8
8
|
import '../chunk-WADHCMPK.mjs';
|
|
9
9
|
import '../chunk-WJHSY5T6.mjs';
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.
|
|
7
|
+
"version": "0.21.0-alpha.0",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"**/*.css"
|
|
10
10
|
],
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"ts-jest": "^29.1.1",
|
|
34
34
|
"tsup": "^6.1.3",
|
|
35
35
|
"typescript": "^4.9.4",
|
|
36
|
-
"eslint-config-custom": "0.2.0",
|
|
37
36
|
"tailwind-config": "0.1.0",
|
|
37
|
+
"eslint-config-custom": "0.2.0",
|
|
38
38
|
"tsconfig": "0.4.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
@@ -54,14 +54,12 @@
|
|
|
54
54
|
"lucide-react": "^0.274.0",
|
|
55
55
|
"material-icons": "^1.13.10",
|
|
56
56
|
"nanoid": "^4.0.2",
|
|
57
|
-
"next": "^13.4.1",
|
|
58
|
-
"next-themes": "^0.2.1",
|
|
59
57
|
"react-dom": "^18.2.0",
|
|
60
58
|
"slate": "^0.94.1",
|
|
61
59
|
"slate-history": "^0.93.0",
|
|
62
60
|
"slate-react": "^0.98.1",
|
|
63
61
|
"tailwind-merge": "^1.13.2",
|
|
64
|
-
"@copilotkit/react-core": "0.
|
|
62
|
+
"@copilotkit/react-core": "0.11.0-alpha.0"
|
|
65
63
|
},
|
|
66
64
|
"scripts": {
|
|
67
65
|
"build": "tsup --treeshake",
|
|
@@ -24,9 +24,15 @@ export const CopilotTextarea = React.forwardRef(
|
|
|
24
24
|
props: CopilotTextareaProps,
|
|
25
25
|
ref: React.Ref<HTMLCopilotTextAreaElement>
|
|
26
26
|
): JSX.Element => {
|
|
27
|
+
// separate the AutosuggestionsConfigUserSpecified from the rest of the props
|
|
28
|
+
const {
|
|
29
|
+
autosuggestionsConfig: autosuggestionsConfigUserSpecified,
|
|
30
|
+
...forwardedProps
|
|
31
|
+
} = props;
|
|
32
|
+
|
|
27
33
|
const autosuggestionsConfig: AutosuggestionsConfig = merge(
|
|
28
34
|
defaultAutosuggestionsConfig,
|
|
29
|
-
|
|
35
|
+
autosuggestionsConfigUserSpecified
|
|
30
36
|
);
|
|
31
37
|
|
|
32
38
|
const autosuggestionsFunction = useMakeStandardAutosuggestionFunction(
|
|
@@ -47,7 +53,7 @@ export const CopilotTextarea = React.forwardRef(
|
|
|
47
53
|
<>
|
|
48
54
|
<BaseCopilotTextarea
|
|
49
55
|
ref={ref}
|
|
50
|
-
{...
|
|
56
|
+
{...forwardedProps}
|
|
51
57
|
baseAutosuggestionsConfig={{
|
|
52
58
|
...autosuggestionsConfig,
|
|
53
59
|
apiConfig: {
|
|
@@ -8,12 +8,17 @@ import { SourceSearchBox } from "../../source-search-box/source-search-box";
|
|
|
8
8
|
import { DocumentPointer } from "@copilotkit/react-core";
|
|
9
9
|
import { Button } from "../../ui/button";
|
|
10
10
|
import { Label } from "../../ui/label";
|
|
11
|
-
import React, {
|
|
11
|
+
import React, {
|
|
12
|
+
useCallback,
|
|
13
|
+
useContext,
|
|
14
|
+
useEffect,
|
|
15
|
+
useRef,
|
|
16
|
+
useState,
|
|
17
|
+
} from "react";
|
|
12
18
|
|
|
13
|
-
import Chip from "@mui/material/Chip";
|
|
14
|
-
import Avatar from "@mui/material/Avatar";
|
|
15
19
|
import { streamPromiseFlatten } from "../../../lib/stream-promise-flatten";
|
|
16
20
|
import { CopilotContext } from "@copilotkit/react-core";
|
|
21
|
+
import { IncludedFilesPreview } from "./included-files-preview";
|
|
17
22
|
|
|
18
23
|
export type SuggestionState = {
|
|
19
24
|
editorState: EditingEditorState;
|
|
@@ -80,7 +85,6 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
80
85
|
|
|
81
86
|
// read the generating suggestion stream and continuously update the edit suggestion
|
|
82
87
|
const reader = generatingSuggestion.getReader();
|
|
83
|
-
|
|
84
88
|
const read = async () => {
|
|
85
89
|
setSuggestionIsLoading(true);
|
|
86
90
|
while (true) {
|
|
@@ -105,6 +109,7 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
105
109
|
read();
|
|
106
110
|
|
|
107
111
|
return () => {
|
|
112
|
+
// release the lock if the reader is not closed on unmount
|
|
108
113
|
const releaseLockIfNotClosed = async () => {
|
|
109
114
|
try {
|
|
110
115
|
await reader.closed;
|
|
@@ -117,22 +122,25 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
117
122
|
};
|
|
118
123
|
}, [generatingSuggestion]);
|
|
119
124
|
|
|
120
|
-
//
|
|
121
|
-
const
|
|
125
|
+
// generate an adjustment to the completed text, based on the adjustment prompt
|
|
126
|
+
const beginGeneratingAdjustment = useCallback(async () => {
|
|
122
127
|
// don't generate text if the prompt is empty
|
|
123
128
|
if (!adjustmentPrompt.trim()) {
|
|
124
129
|
return;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
|
-
//
|
|
128
|
-
|
|
132
|
+
// editor state includes the text being edited, and the text before/after the selection
|
|
133
|
+
// if the current edit suggestion is not empty, then use *it* as the "selected text" - instead of the editor state's selected text
|
|
134
|
+
let modificationState = state.editorState;
|
|
129
135
|
if (editSuggestion !== "") {
|
|
130
|
-
|
|
136
|
+
modificationState.selectedText = editSuggestion;
|
|
131
137
|
}
|
|
132
138
|
|
|
139
|
+
// generate the adjustment suggestion
|
|
133
140
|
const adjustmentSuggestionTextStreamPromise = insertionOrEditingFunction(
|
|
134
|
-
|
|
141
|
+
modificationState,
|
|
135
142
|
adjustmentPrompt,
|
|
143
|
+
filePointers,
|
|
136
144
|
new AbortController().signal
|
|
137
145
|
);
|
|
138
146
|
const adjustmentSuggestionTextStream = streamPromiseFlatten(
|
|
@@ -140,7 +148,13 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
140
148
|
);
|
|
141
149
|
|
|
142
150
|
setGeneratingSuggestion(adjustmentSuggestionTextStream);
|
|
143
|
-
}
|
|
151
|
+
}, [
|
|
152
|
+
adjustmentPrompt,
|
|
153
|
+
editSuggestion,
|
|
154
|
+
state.editorState,
|
|
155
|
+
insertionOrEditingFunction,
|
|
156
|
+
filePointers,
|
|
157
|
+
]);
|
|
144
158
|
|
|
145
159
|
const isLoading = suggestionIsLoading;
|
|
146
160
|
|
|
@@ -169,7 +183,7 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
169
183
|
setAdjustmentPrompt(adjustmentPrompt + "\n");
|
|
170
184
|
} else if (e.key === "Enter") {
|
|
171
185
|
e.preventDefault();
|
|
172
|
-
|
|
186
|
+
beginGeneratingAdjustment();
|
|
173
187
|
}
|
|
174
188
|
}}
|
|
175
189
|
placeholder={placeholder}
|
|
@@ -178,7 +192,7 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
178
192
|
rows={1}
|
|
179
193
|
/>
|
|
180
194
|
<button
|
|
181
|
-
onClick={
|
|
195
|
+
onClick={beginGeneratingAdjustment}
|
|
182
196
|
className="absolute right-2 bg-blue-500 text-white w-8 h-8 rounded-full flex items-center justify-center"
|
|
183
197
|
>
|
|
184
198
|
<i className="material-icons">arrow_forward</i>
|
|
@@ -266,52 +280,3 @@ export const HoveringInsertionPromptBoxCore: React.FC<
|
|
|
266
280
|
</div>
|
|
267
281
|
);
|
|
268
282
|
};
|
|
269
|
-
|
|
270
|
-
interface IncludedFilesPreviewProps {
|
|
271
|
-
includedFiles: DocumentPointer[];
|
|
272
|
-
setIncludedFiles: React.Dispatch<React.SetStateAction<DocumentPointer[]>>;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
export const IncludedFilesPreview: React.FC<IncludedFilesPreviewProps> = ({
|
|
276
|
-
includedFiles,
|
|
277
|
-
setIncludedFiles,
|
|
278
|
-
}) => {
|
|
279
|
-
return (
|
|
280
|
-
<div className="flex flex-col gap-2 mt-2">
|
|
281
|
-
<Label className="">Included context:</Label>
|
|
282
|
-
<div className="flex flex-wrap gap-2">
|
|
283
|
-
{includedFiles.map((filePointer, index) => {
|
|
284
|
-
return (
|
|
285
|
-
<FileChipPreview
|
|
286
|
-
key={`file-${filePointer.sourceApplication}.${filePointer.name}`}
|
|
287
|
-
filePointer={filePointer}
|
|
288
|
-
onDelete={() => {
|
|
289
|
-
setIncludedFiles((prev) =>
|
|
290
|
-
prev.filter((fp) => fp !== filePointer)
|
|
291
|
-
);
|
|
292
|
-
}}
|
|
293
|
-
/>
|
|
294
|
-
);
|
|
295
|
-
})}
|
|
296
|
-
</div>
|
|
297
|
-
</div>
|
|
298
|
-
);
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
export interface FileChipPreviewProp {
|
|
302
|
-
filePointer: DocumentPointer;
|
|
303
|
-
onDelete: () => void;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
export const FileChipPreview: React.FC<FileChipPreviewProp> = ({
|
|
307
|
-
filePointer,
|
|
308
|
-
onDelete,
|
|
309
|
-
}) => {
|
|
310
|
-
return (
|
|
311
|
-
<Chip
|
|
312
|
-
label={filePointer.name}
|
|
313
|
-
onDelete={onDelete}
|
|
314
|
-
avatar={<Avatar sx={{ backgroundColor: "transparent" }}></Avatar>}
|
|
315
|
-
/>
|
|
316
|
-
);
|
|
317
|
-
};
|
package/src/components/hovering-toolbar/text-insertion-prompt-box/hovering-insertion-prompt-box.tsx
CHANGED
|
@@ -23,8 +23,8 @@ export const HoveringInsertionPromptBox: React.FC<Props> = (props) => {
|
|
|
23
23
|
state={{
|
|
24
24
|
editorState: props.editorState,
|
|
25
25
|
}}
|
|
26
|
-
performInsertion={props.performInsertion}
|
|
27
26
|
insertionOrEditingFunction={props.apiConfig.insertionOrEditingFunction}
|
|
27
|
+
performInsertion={props.performInsertion}
|
|
28
28
|
contextCategories={props.contextCategories}
|
|
29
29
|
/>
|
|
30
30
|
</div>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DocumentPointer } from "@copilotkit/react-core";
|
|
2
|
+
import { Label } from "../../ui/label";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import Chip from "@mui/material/Chip";
|
|
5
|
+
import Avatar from "@mui/material/Avatar";
|
|
6
|
+
|
|
7
|
+
export interface IncludedFilesPreviewProps {
|
|
8
|
+
includedFiles: DocumentPointer[];
|
|
9
|
+
setIncludedFiles: React.Dispatch<React.SetStateAction<DocumentPointer[]>>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const IncludedFilesPreview: React.FC<IncludedFilesPreviewProps> = ({
|
|
13
|
+
includedFiles,
|
|
14
|
+
setIncludedFiles,
|
|
15
|
+
}) => {
|
|
16
|
+
return (
|
|
17
|
+
<div className="flex flex-col gap-2 mt-2">
|
|
18
|
+
<Label className="">Included context:</Label>
|
|
19
|
+
<div className="flex flex-wrap gap-2">
|
|
20
|
+
{includedFiles.map((filePointer, index) => {
|
|
21
|
+
return (
|
|
22
|
+
<FileChipPreview
|
|
23
|
+
key={`file-${filePointer.sourceApplication}.${filePointer.name}`}
|
|
24
|
+
filePointer={filePointer}
|
|
25
|
+
onDelete={() => {
|
|
26
|
+
setIncludedFiles((prev) =>
|
|
27
|
+
prev.filter((fp) => fp !== filePointer)
|
|
28
|
+
);
|
|
29
|
+
}}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
})}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export interface FileChipPreviewProp {
|
|
39
|
+
filePointer: DocumentPointer;
|
|
40
|
+
onDelete: () => void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const FileChipPreview: React.FC<FileChipPreviewProp> = ({
|
|
44
|
+
filePointer,
|
|
45
|
+
onDelete,
|
|
46
|
+
}) => {
|
|
47
|
+
return (
|
|
48
|
+
<Chip
|
|
49
|
+
label={filePointer.name}
|
|
50
|
+
onDelete={onDelete}
|
|
51
|
+
avatar={<Avatar sx={{ backgroundColor: "transparent" }}></Avatar>}
|
|
52
|
+
/>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
@@ -67,13 +67,12 @@ export function SourceSearchBox(props: SourceSearchBoxProps) {
|
|
|
67
67
|
props.onSelectedFile(filePointer);
|
|
68
68
|
}}
|
|
69
69
|
>
|
|
70
|
-
<div className="flex flex-row gap-
|
|
71
|
-
<Logo
|
|
70
|
+
<div className=" px-3 flex flex-row gap-1 items-center">
|
|
71
|
+
<Logo width="20px" height="20px">
|
|
72
72
|
<img
|
|
73
73
|
src={filePointer.iconImageUri}
|
|
74
74
|
alt={filePointer.sourceApplication}
|
|
75
|
-
|
|
76
|
-
height={30}
|
|
75
|
+
className="w-full h-full"
|
|
77
76
|
/>
|
|
78
77
|
</Logo>
|
|
79
78
|
{filePointer.name}
|
|
@@ -110,15 +109,17 @@ export function SourceSearchBox(props: SourceSearchBoxProps) {
|
|
|
110
109
|
|
|
111
110
|
export function Logo({
|
|
112
111
|
children,
|
|
113
|
-
|
|
112
|
+
width,
|
|
113
|
+
height,
|
|
114
114
|
}: {
|
|
115
115
|
children: React.ReactNode;
|
|
116
|
-
|
|
116
|
+
width: string;
|
|
117
|
+
height: string;
|
|
117
118
|
}) {
|
|
118
119
|
return (
|
|
119
120
|
<div
|
|
120
|
-
className="flex items-center justify-center
|
|
121
|
-
style={{ width:
|
|
121
|
+
className="flex items-center justify-center"
|
|
122
|
+
style={{ width: width, height: height }}
|
|
122
123
|
>
|
|
123
124
|
{children}
|
|
124
125
|
</div>
|
|
@@ -62,7 +62,10 @@ const CommandList = React.forwardRef<
|
|
|
62
62
|
>(({ className, ...props }, ref) => (
|
|
63
63
|
<CommandPrimitive.List
|
|
64
64
|
ref={ref}
|
|
65
|
-
className={cn(
|
|
65
|
+
className={cn(
|
|
66
|
+
"max-h-[300px] overflow-y-auto overflow-x-hidden pb-2",
|
|
67
|
+
className
|
|
68
|
+
)}
|
|
66
69
|
{...props}
|
|
67
70
|
/>
|
|
68
71
|
));
|
package/src/hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function.tsx
CHANGED
|
@@ -36,7 +36,7 @@ export function useMakeStandardAutosuggestionFunction(
|
|
|
36
36
|
role: "system",
|
|
37
37
|
content: apiConfig.makeSystemPrompt(
|
|
38
38
|
textareaPurpose,
|
|
39
|
-
getContextString(contextCategories)
|
|
39
|
+
getContextString([], contextCategories)
|
|
40
40
|
),
|
|
41
41
|
},
|
|
42
42
|
...apiConfig.fewShotMessages,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from "../../types/base/autosuggestions-bare-function";
|
|
11
11
|
import { InsertionsApiConfig } from "../../types/autosuggestions-config/insertions-api-config";
|
|
12
12
|
import { EditingApiConfig } from "../../types/autosuggestions-config/editing-api-config";
|
|
13
|
+
import { DocumentPointer } from "@copilotkit/react-core";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Returns a memoized function that sends a request to the specified API endpoint to get an autosuggestion for the user's input.
|
|
@@ -36,6 +37,7 @@ export function useMakeStandardInsertionOrEditingFunction(
|
|
|
36
37
|
async (
|
|
37
38
|
editorState: EditingEditorState,
|
|
38
39
|
insertionPrompt: string,
|
|
40
|
+
documents: DocumentPointer[],
|
|
39
41
|
abortSignal: AbortSignal
|
|
40
42
|
) => {
|
|
41
43
|
const res = await retry(async () => {
|
|
@@ -44,7 +46,7 @@ export function useMakeStandardInsertionOrEditingFunction(
|
|
|
44
46
|
role: "system",
|
|
45
47
|
content: insertionApiConfig.makeSystemPrompt(
|
|
46
48
|
textareaPurpose,
|
|
47
|
-
getContextString(contextCategories)
|
|
49
|
+
getContextString(documents, contextCategories)
|
|
48
50
|
),
|
|
49
51
|
},
|
|
50
52
|
...insertionApiConfig.fewShotMessages,
|
|
@@ -83,6 +85,7 @@ export function useMakeStandardInsertionOrEditingFunction(
|
|
|
83
85
|
async (
|
|
84
86
|
editorState: EditingEditorState,
|
|
85
87
|
editingPrompt: string,
|
|
88
|
+
documents: DocumentPointer[],
|
|
86
89
|
abortSignal: AbortSignal
|
|
87
90
|
) => {
|
|
88
91
|
const res = await retry(async () => {
|
|
@@ -91,7 +94,7 @@ export function useMakeStandardInsertionOrEditingFunction(
|
|
|
91
94
|
role: "system",
|
|
92
95
|
content: editingApiConfig.makeSystemPrompt(
|
|
93
96
|
textareaPurpose,
|
|
94
|
-
getContextString(contextCategories)
|
|
97
|
+
getContextString(documents, contextCategories)
|
|
95
98
|
),
|
|
96
99
|
},
|
|
97
100
|
...editingApiConfig.fewShotMessages,
|
|
@@ -135,16 +138,23 @@ export function useMakeStandardInsertionOrEditingFunction(
|
|
|
135
138
|
async (
|
|
136
139
|
editorState: EditingEditorState,
|
|
137
140
|
insertionPrompt: string,
|
|
141
|
+
documents: DocumentPointer[],
|
|
138
142
|
abortSignal: AbortSignal
|
|
139
143
|
) => {
|
|
140
144
|
if (editorState.selectedText === "") {
|
|
141
145
|
return await insertionFunction(
|
|
142
146
|
editorState,
|
|
143
147
|
insertionPrompt,
|
|
148
|
+
documents,
|
|
144
149
|
abortSignal
|
|
145
150
|
);
|
|
146
151
|
} else {
|
|
147
|
-
return await editingFunction(
|
|
152
|
+
return await editingFunction(
|
|
153
|
+
editorState,
|
|
154
|
+
insertionPrompt,
|
|
155
|
+
documents,
|
|
156
|
+
abortSignal
|
|
157
|
+
);
|
|
148
158
|
}
|
|
149
159
|
},
|
|
150
160
|
[insertionFunction, editingFunction]
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flatten a promise of a stream, into a stream.
|
|
3
|
+
*
|
|
4
|
+
* Useful because a stream already includes the notion of async value delivery,
|
|
5
|
+
* so it often makes sense to simply await the values rather than the generator of the values.
|
|
6
|
+
*
|
|
7
|
+
* @param {Promise<ReadableStream<A>>} promise - The promise to flatten.
|
|
8
|
+
* @returns {ReadableStream<A>} - The flattened stream.
|
|
9
|
+
*/
|
|
10
|
+
|
|
1
11
|
export function streamPromiseFlatten<A>(
|
|
2
12
|
promise: Promise<ReadableStream<A>>
|
|
3
13
|
): ReadableStream<A> {
|
|
@@ -16,6 +16,11 @@ export const defaultEditingMakeSystemPrompt: MakeSystemPrompt = (
|
|
|
16
16
|
The user is writing some text.
|
|
17
17
|
The purpose is: \"${textareaPurpose}\"
|
|
18
18
|
|
|
19
|
+
The following external context is also provided. Use it to help you make better suggestions!!!
|
|
20
|
+
\`\`\`
|
|
21
|
+
${contextString}
|
|
22
|
+
\`\`\`
|
|
23
|
+
|
|
19
24
|
The user also provides you with a prompt for EDITING some text they are writing.
|
|
20
25
|
Your job is to come up with an EDIT of the text that the user would like to use - AS BEST YOU CAN.
|
|
21
26
|
|
|
@@ -28,13 +33,6 @@ The user will provide the following information; use this to infer the best rele
|
|
|
28
33
|
<EditingPrompt>
|
|
29
34
|
|
|
30
35
|
<YourEditSuggestion>
|
|
31
|
-
|
|
32
|
-
If we need to add a whitespace character to the suggested edit text, make sure to explicitly add it in.
|
|
33
|
-
|
|
34
|
-
The following external context is also provided. Use it to help you make better suggestions!!!
|
|
35
|
-
\`\`\`
|
|
36
|
-
${contextString}
|
|
37
|
-
\`\`\`
|
|
38
36
|
`;
|
|
39
37
|
};
|
|
40
38
|
|
|
@@ -16,9 +16,14 @@ export const defaultInsertionsMakeSystemPrompt: MakeSystemPrompt = (
|
|
|
16
16
|
The user is writing some text.
|
|
17
17
|
The purpose is: \"${textareaPurpose}\"
|
|
18
18
|
|
|
19
|
+
The following external context is also provided. Use it to help you make better suggestions!!!
|
|
20
|
+
\`\`\`
|
|
21
|
+
${contextString}
|
|
22
|
+
\`\`\`
|
|
23
|
+
|
|
19
24
|
The user also provides you with a prompt for INSERTIONS into the text they are writing.
|
|
20
25
|
Your job is to come up with an INSERTION into the text that the user would like AS BEST YOU CAN.
|
|
21
|
-
Only
|
|
26
|
+
Only insert a SHORT segment. Usually 1 sentence, or at most 1 paragraph.
|
|
22
27
|
|
|
23
28
|
Adjust yourself to the user's style and implied intent.
|
|
24
29
|
|
|
@@ -27,13 +32,6 @@ The user will provide the text before and after the cursor, as well as the inser
|
|
|
27
32
|
<TextBeforeCursor>
|
|
28
33
|
<InsertionPrompt>
|
|
29
34
|
<YourSuggestion>
|
|
30
|
-
|
|
31
|
-
If we need to add a whitespace character to the suggested text, make sure to explicitly add it in.
|
|
32
|
-
|
|
33
|
-
The following external context is also provided. Use it to help you make better suggestions!!!
|
|
34
|
-
\`\`\`
|
|
35
|
-
${contextString}
|
|
36
|
-
\`\`\`
|
|
37
35
|
`;
|
|
38
36
|
};
|
|
39
37
|
|
|
@@ -41,8 +41,12 @@ export class ChatlikeApiEndpoint {
|
|
|
41
41
|
copilotApiConfigExtrapolator(copilotApiConfig).chatApiEndpoint,
|
|
42
42
|
{
|
|
43
43
|
method: "POST",
|
|
44
|
+
headers: {
|
|
45
|
+
...copilotApiConfig.headers,
|
|
46
|
+
},
|
|
44
47
|
body: JSON.stringify({
|
|
45
48
|
...forwardedProps,
|
|
49
|
+
...copilotApiConfig.body,
|
|
46
50
|
messages: messages,
|
|
47
51
|
}),
|
|
48
52
|
signal: abortSignal,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DocumentPointer } from "@copilotkit/react-core";
|
|
2
|
+
|
|
1
3
|
export interface InsertionEditorState {
|
|
2
4
|
textBeforeCursor: string;
|
|
3
5
|
textAfterCursor: string;
|
|
@@ -15,6 +17,7 @@ export type AutosuggestionsBareFunction = (
|
|
|
15
17
|
export type Generator_InsertionOrEditingSuggestion = (
|
|
16
18
|
editorState: EditingEditorState,
|
|
17
19
|
prompt: string,
|
|
20
|
+
documents: DocumentPointer[],
|
|
18
21
|
abortSignal: AbortSignal
|
|
19
22
|
) => Promise<ReadableStream<string>>;
|
|
20
23
|
|