@copilotkit/react-textarea 0.10.0 → 0.12.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 +179 -164
- package/CHANGELOG.md +13 -0
- package/dist/chunk-AOEXKPIX.mjs +83 -0
- package/dist/chunk-AOEXKPIX.mjs.map +1 -0
- package/dist/{chunk-6SYD77G6.mjs → chunk-CSGFJU3L.mjs} +2 -2
- package/dist/chunk-CSGFJU3L.mjs.map +1 -0
- package/dist/chunk-DCQ27XRF.mjs +32 -0
- package/dist/chunk-DCQ27XRF.mjs.map +1 -0
- package/dist/chunk-DE5K76I2.mjs +3 -0
- package/dist/{chunk-E2UEE45I.mjs → chunk-HZGSG7ST.mjs} +1 -1
- package/dist/chunk-HZGSG7ST.mjs.map +1 -0
- package/dist/{chunk-THWPPG6M.mjs → chunk-IGQI27NI.mjs} +20 -2
- package/dist/chunk-IGQI27NI.mjs.map +1 -0
- package/dist/chunk-M6QFKIBE.mjs +161 -0
- package/dist/chunk-M6QFKIBE.mjs.map +1 -0
- package/dist/chunk-WADHCMPK.mjs +3 -0
- package/dist/components/base-copilot-textarea/base-copilot-textarea.d.ts +10 -14
- package/dist/components/base-copilot-textarea/base-copilot-textarea.mjs +9 -8
- package/dist/components/base-copilot-textarea/use-add-branding-css.mjs +1 -1
- package/dist/components/copilot-textarea/copilot-textarea.d.ts +4 -4
- package/dist/components/copilot-textarea/copilot-textarea.mjs +10 -9
- package/dist/components/index.d.ts +4 -2
- package/dist/components/index.mjs +10 -9
- package/dist/hooks/{use-autosuggestions.d.ts → base-copilot-textarea-implementation/use-autosuggestions.d.ts} +3 -3
- package/dist/hooks/base-copilot-textarea-implementation/use-autosuggestions.mjs +7 -0
- package/dist/hooks/{use-copilot-textarea-editor.d.ts → base-copilot-textarea-implementation/use-copilot-textarea-editor.d.ts} +1 -1
- package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs +5 -0
- package/dist/hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor.mjs.map +1 -0
- package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts +7 -0
- package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs +6 -0
- package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map +1 -0
- package/dist/index.css +4 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.mjs +13 -11
- package/dist/types/base/base-copilot-textarea-props.d.ts +38 -0
- package/dist/types/base/base-copilot-textarea-props.mjs +3 -0
- package/dist/types/base/base-copilot-textarea-props.mjs.map +1 -0
- package/dist/types/base/index.d.ts +2 -0
- package/dist/types/html-copilot-textarea-element.d.ts +7 -0
- package/dist/types/html-copilot-textarea-element.mjs +3 -0
- package/dist/types/html-copilot-textarea-element.mjs.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.mjs +2 -1
- package/package.json +3 -3
- package/src/components/base-copilot-textarea/base-copilot-textarea.tsx +191 -161
- package/src/components/base-copilot-textarea/use-add-branding-css.tsx +25 -1
- package/src/components/copilot-textarea/copilot-textarea.tsx +33 -25
- package/src/components/index.ts +0 -1
- package/src/hooks/{use-autosuggestions.ts → base-copilot-textarea-implementation/use-autosuggestions.ts} +5 -5
- package/src/hooks/{use-copilot-textarea-editor.tsx → base-copilot-textarea-implementation/use-copilot-textarea-editor.tsx} +5 -5
- package/src/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.ts +101 -0
- package/src/types/base/base-copilot-textarea-props.tsx +37 -0
- package/src/types/base/index.ts +3 -1
- package/src/types/html-copilot-textarea-element.ts +5 -0
- package/src/types/index.ts +1 -0
- package/dist/chunk-6SYD77G6.mjs.map +0 -1
- package/dist/chunk-CU2M5BIJ.mjs +0 -133
- package/dist/chunk-CU2M5BIJ.mjs.map +0 -1
- package/dist/chunk-E2UEE45I.mjs.map +0 -1
- package/dist/chunk-FD6FGKYY.mjs +0 -3
- package/dist/chunk-NHLYAJCQ.mjs +0 -25
- package/dist/chunk-NHLYAJCQ.mjs.map +0 -1
- package/dist/chunk-THWPPG6M.mjs.map +0 -1
- package/dist/hooks/use-autosuggestions.mjs +0 -7
- package/dist/hooks/use-copilot-textarea-editor.mjs +0 -5
- /package/dist/{chunk-FD6FGKYY.mjs.map → chunk-DE5K76I2.mjs.map} +0 -0
- /package/dist/{hooks/use-autosuggestions.mjs.map → chunk-WADHCMPK.mjs.map} +0 -0
- /package/dist/hooks/{use-copilot-textarea-editor.mjs.map → base-copilot-textarea-implementation/use-autosuggestions.mjs.map} +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useMakeStandardAutosuggestionFunction } from './chunk-A3SFEHWZ.mjs';
|
|
2
|
+
import { defaultAutosuggestionsConfig } from './chunk-EHQ5TN4R.mjs';
|
|
3
|
+
import { BaseCopilotTextarea } from './chunk-M6QFKIBE.mjs';
|
|
4
|
+
import { __spreadValues, __spreadProps } from './chunk-MRXNTQOX.mjs';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var CopilotTextarea = React.forwardRef(
|
|
9
|
+
(props, ref) => {
|
|
10
|
+
const autosuggestionsConfig = __spreadValues(__spreadValues({}, defaultAutosuggestionsConfig), props.autosuggestionsConfig);
|
|
11
|
+
const autosuggestionsFunction = useMakeStandardAutosuggestionFunction(
|
|
12
|
+
autosuggestionsConfig.purposePrompt,
|
|
13
|
+
autosuggestionsConfig.apiEndpoint,
|
|
14
|
+
autosuggestionsConfig.makeSystemPrompt,
|
|
15
|
+
autosuggestionsConfig.fewShotMessages,
|
|
16
|
+
autosuggestionsConfig.externalContextCategories,
|
|
17
|
+
autosuggestionsConfig.forwardedParams
|
|
18
|
+
);
|
|
19
|
+
return /* @__PURE__ */ jsx(Fragment, {
|
|
20
|
+
children: /* @__PURE__ */ jsx(BaseCopilotTextarea, __spreadProps(__spreadValues({
|
|
21
|
+
ref
|
|
22
|
+
}, props), {
|
|
23
|
+
autosuggestionsConfig,
|
|
24
|
+
autosuggestionsFunction
|
|
25
|
+
}))
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export { CopilotTextarea };
|
|
31
|
+
//# sourceMappingURL=out.js.map
|
|
32
|
+
//# sourceMappingURL=chunk-DCQ27XRF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/copilot-textarea/copilot-textarea.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,OAAO,WAAW;AAoCZ,mBACE,WADF;AApBC,IAAM,kBAAkB,MAAM;AAAA,EACnC,CACE,OACA,QACgB;AAChB,UAAM,wBAA+C,kCAChD,+BACA,MAAM;AAGX,UAAM,0BAA0B;AAAA,MAC9B,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,IACxB;AAEA,WACE;AAAA,MACE,8BAAC;AAAA,QACC;AAAA,SACI,QAFL;AAAA,QAGC;AAAA,QACA;AAAA,QACF;AAAA,KACF;AAAA,EAEJ;AACF","sourcesContent":["// This example is for an Editor with `ReactEditor` and `HistoryEditor`\nimport React from \"react\";\nimport { useMakeStandardAutosuggestionFunction } from \"../../hooks/make-autosuggestions-function/use-make-standard-autosuggestions-function\";\nimport { HTMLCopilotTextAreaElement } from \"../../types\";\nimport { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport {\n AutosuggestionsConfig,\n defaultAutosuggestionsConfig,\n} from \"../../types/standard-autosuggestions\";\nimport { BaseCopilotTextarea } from \"../base-copilot-textarea/base-copilot-textarea\";\n\nexport interface CopilotTextareaProps extends BaseCopilotTextareaProps {\n autosuggestionsConfig: Partial<AutosuggestionsConfig> & {\n purposePrompt: string;\n };\n}\n\nexport const CopilotTextarea = React.forwardRef(\n (\n props: CopilotTextareaProps,\n ref: React.Ref<HTMLCopilotTextAreaElement>\n ): JSX.Element => {\n const autosuggestionsConfig: AutosuggestionsConfig = {\n ...defaultAutosuggestionsConfig,\n ...props.autosuggestionsConfig,\n };\n\n const autosuggestionsFunction = useMakeStandardAutosuggestionFunction(\n autosuggestionsConfig.purposePrompt,\n autosuggestionsConfig.apiEndpoint,\n autosuggestionsConfig.makeSystemPrompt,\n autosuggestionsConfig.fewShotMessages,\n autosuggestionsConfig.externalContextCategories,\n autosuggestionsConfig.forwardedParams\n );\n\n return (\n <>\n <BaseCopilotTextarea\n ref={ref}\n {...props}\n autosuggestionsConfig={autosuggestionsConfig}\n autosuggestionsFunction={autosuggestionsFunction}\n />\n </>\n );\n }\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/base-copilot-textarea-implementation/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"]}
|
|
@@ -2,6 +2,7 @@ import { useEffect } from 'react';
|
|
|
2
2
|
|
|
3
3
|
// src/components/base-copilot-textarea/use-add-branding-css.tsx
|
|
4
4
|
function useAddBrandingCss(suggestionStyleAugmented, disableBranding) {
|
|
5
|
+
const cssSelector = ".copilot-textarea.with-branding";
|
|
5
6
|
useEffect(() => {
|
|
6
7
|
if (disableBranding) {
|
|
7
8
|
return;
|
|
@@ -23,18 +24,35 @@ function useAddBrandingCss(suggestionStyleAugmented, disableBranding) {
|
|
|
23
24
|
dynamicStyles += `border: 0;`;
|
|
24
25
|
dynamicStyles += `line-height: 1;`;
|
|
25
26
|
styleEl.innerHTML = `
|
|
26
|
-
|
|
27
|
+
${cssSelector}::after {
|
|
27
28
|
${dynamicStyles}
|
|
28
29
|
}
|
|
29
30
|
`;
|
|
30
31
|
document.head.appendChild(styleEl);
|
|
32
|
+
const textarea = document.querySelector(cssSelector);
|
|
33
|
+
const handleScroll = () => {
|
|
34
|
+
const styleEl2 = document.getElementById("dynamic-styles");
|
|
35
|
+
if (styleEl2 && textarea) {
|
|
36
|
+
const offsetFromBottom = -textarea.scrollTop + 6;
|
|
37
|
+
const offsetFromRight = -textarea.scrollLeft + 6;
|
|
38
|
+
styleEl2.innerHTML = `
|
|
39
|
+
${cssSelector}::after {
|
|
40
|
+
${dynamicStyles}
|
|
41
|
+
bottom: ${offsetFromBottom}px;
|
|
42
|
+
right: ${offsetFromRight}px;
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
textarea == null ? void 0 : textarea.addEventListener("scroll", handleScroll);
|
|
31
48
|
return () => {
|
|
32
49
|
var _a;
|
|
33
50
|
(_a = document.getElementById("dynamic-styles")) == null ? void 0 : _a.remove();
|
|
51
|
+
textarea == null ? void 0 : textarea.removeEventListener("scroll", handleScroll);
|
|
34
52
|
};
|
|
35
53
|
}, [disableBranding, suggestionStyleAugmented]);
|
|
36
54
|
}
|
|
37
55
|
|
|
38
56
|
export { useAddBrandingCss };
|
|
39
57
|
//# sourceMappingURL=out.js.map
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
58
|
+
//# sourceMappingURL=chunk-IGQI27NI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/base-copilot-textarea/use-add-branding-css.tsx"],"names":["styleEl"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,SAAS,kBACd,0BACA,iBACA;AACA,QAAM,cAAc;AACpB,YAAU,MAAM;AACd,QAAI,iBAAiB;AACnB;AAAA,IACF;AAIA,UAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,YAAQ,KAAK;AAGb,QAAI,gBAAgB,OAAO,QAAQ,wBAAwB,EACxD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,YAAM,eAAe,IAClB,QAAQ,gCAAgC,OAAO,EAC/C,YAAY;AACf,aAAO,GAAG,iBAAiB;AAAA,IAC7B,CAAC,EACA,KAAK,GAAG;AAGX,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AACjB,qBAAiB;AAGjB,YAAQ,YAAY;AAAA,QAChB;AAAA,UACE;AAAA;AAAA;AAIN,aAAS,KAAK,YAAY,OAAO;AAIjC,UAAM,WAAW,SAAS,cAAc,WAAW;AACnD,UAAM,eAAe,MAAM;AACzB,YAAMA,WAAU,SAAS,eAAe,gBAAgB;AACxD,UAAIA,YAAW,UAAU;AACvB,cAAM,mBAAmB,CAAC,SAAS,YAAY;AAC/C,cAAM,kBAAkB,CAAC,SAAS,aAAa;AAC/C,QAAAA,SAAQ,YAAY;AAAA,YAChB;AAAA,cACE;AAAA,sBACQ;AAAA,qBACD;AAAA;AAAA;AAAA,MAGf;AAAA,IACF;AAEA,yCAAU,iBAAiB,UAAU;AAGrC,WAAO,MAAM;AArEjB;AAsEM,qBAAS,eAAe,gBAAgB,MAAxC,mBAA2C;AAC3C,2CAAU,oBAAoB,UAAU;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,iBAAiB,wBAAwB,CAAC;AAChD","sourcesContent":["import { useEffect } from \"react\";\n\nexport function useAddBrandingCss(\n suggestionStyleAugmented: React.CSSProperties,\n disableBranding: boolean | undefined\n) {\n const cssSelector = \".copilot-textarea.with-branding\";\n useEffect(() => {\n if (disableBranding) {\n return;\n }\n\n // ---\n // 1: Add the CSS to the DOM\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"dynamic-styles\";\n\n // Build the CSS string dynamically\n let dynamicStyles = Object.entries(suggestionStyleAugmented)\n .map(([key, value]) => {\n const kebabCaseKey = key\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n return `${kebabCaseKey}: ${value};`;\n })\n .join(\" \");\n\n // Append overrides for italics and font-size\n dynamicStyles += `font-style: normal; font-size: x-small;`;\n dynamicStyles += `content: \"CopilotKit\";`;\n dynamicStyles += `bottom: 6px;`;\n dynamicStyles += `right: 6px;`;\n dynamicStyles += `pointer-events: none;`;\n dynamicStyles += `font-weight: 200;`;\n dynamicStyles += `padding: 0;`;\n dynamicStyles += `margin: 0;`;\n dynamicStyles += `border: 0;`;\n dynamicStyles += `line-height: 1;`;\n\n // Append it to the ::after class\n styleEl.innerHTML = `\n ${cssSelector}::after {\n ${dynamicStyles}\n }\n `;\n\n document.head.appendChild(styleEl);\n\n // ---\n // 2: Add the scroll listener (to keep the branding in the bottom right as the textarea scrolls)\n const textarea = document.querySelector(cssSelector);\n const handleScroll = () => {\n const styleEl = document.getElementById(\"dynamic-styles\");\n if (styleEl && textarea) {\n const offsetFromBottom = -textarea.scrollTop + 6;\n const offsetFromRight = -textarea.scrollLeft + 6;\n styleEl.innerHTML = `\n ${cssSelector}::after {\n ${dynamicStyles}\n bottom: ${offsetFromBottom}px;\n right: ${offsetFromRight}px;\n }\n `;\n }\n };\n\n textarea?.addEventListener(\"scroll\", handleScroll);\n\n // Cleanup\n return () => {\n document.getElementById(\"dynamic-styles\")?.remove();\n textarea?.removeEventListener(\"scroll\", handleScroll);\n };\n }, [disableBranding, suggestionStyleAugmented]);\n}\n"]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { useAutosuggestions } from './chunk-HZGSG7ST.mjs';
|
|
2
|
+
import { useCopilotTextareaEditor } from './chunk-CSGFJU3L.mjs';
|
|
3
|
+
import { usePopulateCopilotTextareaRef } from './chunk-AOEXKPIX.mjs';
|
|
4
|
+
import { addAutocompletionsToEditor } from './chunk-WJYQWL4I.mjs';
|
|
5
|
+
import { clearAutocompletionsFromEditor } from './chunk-4XYYSJ5C.mjs';
|
|
6
|
+
import { replaceEditorText } from './chunk-TSF4AJIK.mjs';
|
|
7
|
+
import { defaultBaseAutosuggestionsConfig } from './chunk-7KWRVIYV.mjs';
|
|
8
|
+
import { makeRenderElementFunction } from './chunk-LNAIMEB2.mjs';
|
|
9
|
+
import { makeRenderPlaceholderFunction } from './chunk-OELUUJZY.mjs';
|
|
10
|
+
import { useAddBrandingCss } from './chunk-IGQI27NI.mjs';
|
|
11
|
+
import { getTextAroundCursor, getFullEditorTextWithNewlines } from './chunk-3UQM3NLM.mjs';
|
|
12
|
+
import { __spreadValues, __objRest } from './chunk-MRXNTQOX.mjs';
|
|
13
|
+
import React, { useMemo, useState, useCallback, useEffect } from 'react';
|
|
14
|
+
import { Editor } from 'slate';
|
|
15
|
+
import { Slate, Editable } from 'slate-react';
|
|
16
|
+
import { twMerge } from 'tailwind-merge';
|
|
17
|
+
import { jsx } from 'react/jsx-runtime';
|
|
18
|
+
|
|
19
|
+
var BaseCopilotTextarea = React.forwardRef(
|
|
20
|
+
(props, ref) => {
|
|
21
|
+
const autosuggestionsConfig = __spreadValues(__spreadValues({}, defaultBaseAutosuggestionsConfig), props.autosuggestionsConfig);
|
|
22
|
+
const valueOnInitialRender = useMemo(() => {
|
|
23
|
+
var _a2;
|
|
24
|
+
return (_a2 = props.value) != null ? _a2 : "";
|
|
25
|
+
}, []);
|
|
26
|
+
const [lastKnownFullEditorText, setLastKnownFullEditorText] = useState(valueOnInitialRender);
|
|
27
|
+
const initialValue = useMemo(() => {
|
|
28
|
+
return [
|
|
29
|
+
{
|
|
30
|
+
type: "paragraph",
|
|
31
|
+
children: [{ text: valueOnInitialRender }]
|
|
32
|
+
}
|
|
33
|
+
];
|
|
34
|
+
}, [valueOnInitialRender]);
|
|
35
|
+
const editor = useCopilotTextareaEditor();
|
|
36
|
+
const insertText = useCallback(
|
|
37
|
+
(autosuggestion) => {
|
|
38
|
+
Editor.insertText(editor, autosuggestion.text, {
|
|
39
|
+
at: autosuggestion.point
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
[editor]
|
|
43
|
+
);
|
|
44
|
+
const {
|
|
45
|
+
currentAutocompleteSuggestion,
|
|
46
|
+
onChangeHandler: onChangeHandlerForAutocomplete,
|
|
47
|
+
onKeyDownHandler: onKeyDownHandlerForAutocomplete
|
|
48
|
+
} = useAutosuggestions(
|
|
49
|
+
autosuggestionsConfig.debounceTime,
|
|
50
|
+
autosuggestionsConfig.acceptAutosuggestionKey,
|
|
51
|
+
props.autosuggestionsFunction,
|
|
52
|
+
insertText,
|
|
53
|
+
autosuggestionsConfig.disableWhenEmpty,
|
|
54
|
+
autosuggestionsConfig.disabled
|
|
55
|
+
);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
clearAutocompletionsFromEditor(editor);
|
|
58
|
+
if (currentAutocompleteSuggestion) {
|
|
59
|
+
addAutocompletionsToEditor(
|
|
60
|
+
editor,
|
|
61
|
+
currentAutocompleteSuggestion.text,
|
|
62
|
+
currentAutocompleteSuggestion.point
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}, [currentAutocompleteSuggestion]);
|
|
66
|
+
const suggestionStyleAugmented = useMemo(() => {
|
|
67
|
+
return __spreadValues({
|
|
68
|
+
fontStyle: "italic",
|
|
69
|
+
color: "gray"
|
|
70
|
+
}, props.suggestionsStyle);
|
|
71
|
+
}, [props.suggestionsStyle]);
|
|
72
|
+
useAddBrandingCss(suggestionStyleAugmented, props.disableBranding);
|
|
73
|
+
const renderElementMemoized = useMemo(() => {
|
|
74
|
+
return makeRenderElementFunction(suggestionStyleAugmented);
|
|
75
|
+
}, [suggestionStyleAugmented]);
|
|
76
|
+
const renderPlaceholderMemoized = useMemo(() => {
|
|
77
|
+
const placeholderStyleSlatejsOverrides = {
|
|
78
|
+
top: void 0
|
|
79
|
+
};
|
|
80
|
+
const placeholderStyleAugmented = __spreadValues(__spreadValues({}, placeholderStyleSlatejsOverrides), props.placeholderStyle);
|
|
81
|
+
return makeRenderPlaceholderFunction(placeholderStyleAugmented);
|
|
82
|
+
}, [props.placeholderStyle]);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
var _a2, _b;
|
|
85
|
+
if (props.value === lastKnownFullEditorText) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
setLastKnownFullEditorText((_a2 = props.value) != null ? _a2 : "");
|
|
89
|
+
replaceEditorText(editor, (_b = props.value) != null ? _b : "");
|
|
90
|
+
}, [props.value]);
|
|
91
|
+
const _a = props, {
|
|
92
|
+
placeholderStyle,
|
|
93
|
+
value,
|
|
94
|
+
onValueChange,
|
|
95
|
+
autosuggestionsConfig: autosuggestionsConfigFromProps,
|
|
96
|
+
autosuggestionsFunction,
|
|
97
|
+
className,
|
|
98
|
+
onChange,
|
|
99
|
+
onKeyDown
|
|
100
|
+
} = _a, propsToForward = __objRest(_a, [
|
|
101
|
+
"placeholderStyle",
|
|
102
|
+
"value",
|
|
103
|
+
"onValueChange",
|
|
104
|
+
"autosuggestionsConfig",
|
|
105
|
+
"autosuggestionsFunction",
|
|
106
|
+
"className",
|
|
107
|
+
"onChange",
|
|
108
|
+
"onKeyDown"
|
|
109
|
+
]);
|
|
110
|
+
const moddedClassName = (() => {
|
|
111
|
+
const baseClassName = "copilot-textarea";
|
|
112
|
+
const brandingClass = props.disableBranding ? "no-branding" : "with-branding";
|
|
113
|
+
const defaultTailwindClassName = "bg-white overflow-y-auto resize-y";
|
|
114
|
+
const mergedClassName = twMerge(
|
|
115
|
+
defaultTailwindClassName,
|
|
116
|
+
className != null ? className : ""
|
|
117
|
+
);
|
|
118
|
+
return `${baseClassName} ${brandingClass} ${mergedClassName}`;
|
|
119
|
+
})();
|
|
120
|
+
usePopulateCopilotTextareaRef(editor, ref);
|
|
121
|
+
return /* @__PURE__ */ jsx(Slate, {
|
|
122
|
+
editor,
|
|
123
|
+
initialValue,
|
|
124
|
+
onChange: (value2) => {
|
|
125
|
+
var _a2, _b;
|
|
126
|
+
const newEditorState = getTextAroundCursor(editor);
|
|
127
|
+
const fullEditorText = newEditorState ? newEditorState.textBeforeCursor + newEditorState.textAfterCursor : getFullEditorTextWithNewlines(editor);
|
|
128
|
+
setLastKnownFullEditorText(fullEditorText);
|
|
129
|
+
onChangeHandlerForAutocomplete(newEditorState);
|
|
130
|
+
(_a2 = props.onValueChange) == null ? void 0 : _a2.call(props, fullEditorText);
|
|
131
|
+
(_b = props.onChange) == null ? void 0 : _b.call(props, makeSemiFakeReactTextAreaEvent(fullEditorText));
|
|
132
|
+
},
|
|
133
|
+
children: /* @__PURE__ */ jsx(Editable, __spreadValues({
|
|
134
|
+
renderElement: renderElementMemoized,
|
|
135
|
+
renderPlaceholder: renderPlaceholderMemoized,
|
|
136
|
+
onKeyDown: (event) => {
|
|
137
|
+
var _a2;
|
|
138
|
+
onKeyDownHandlerForAutocomplete(event);
|
|
139
|
+
(_a2 = props.onKeyDown) == null ? void 0 : _a2.call(props, event);
|
|
140
|
+
},
|
|
141
|
+
className: moddedClassName
|
|
142
|
+
}, propsToForward))
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
function makeSemiFakeReactTextAreaEvent(currentText) {
|
|
147
|
+
return {
|
|
148
|
+
target: {
|
|
149
|
+
value: currentText,
|
|
150
|
+
type: "copilot-textarea"
|
|
151
|
+
},
|
|
152
|
+
currentTarget: {
|
|
153
|
+
value: currentText,
|
|
154
|
+
type: "copilot-textarea"
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export { BaseCopilotTextarea };
|
|
160
|
+
//# sourceMappingURL=out.js.map
|
|
161
|
+
//# sourceMappingURL=chunk-M6QFKIBE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/base-copilot-textarea/base-copilot-textarea.tsx"],"names":["_a","value"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS,aAAa,WAAW,SAAS,gBAAgB;AACjE,SAAqB,cAAc;AACnC,SAAS,UAAU,aAAa;AAChC,SAAS,eAAe;AA8KhB;AAjJD,IAAM,sBAAsB,MAAM;AAAA,EACvC,CACE,OAGA,QACgB;AAChB,UAAM,wBAAmD,kCACpD,mCACA,MAAM;AAGX,UAAM,uBAAuB,QAAQ,MAAG;AA5C5C,UAAAA;AA4C+C,cAAAA,MAAA,MAAM,UAAN,OAAAA,MAAe;AAAA,OAAI,CAAC,CAAC;AAChE,UAAM,CAAC,yBAAyB,0BAA0B,IACxD,SAAS,oBAAoB;AAE/B,UAAM,eAA6B,QAAQ,MAAM;AAC/C,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,UAAU,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF,GAAG,CAAC,oBAAoB,CAAC;AAEzB,UAAM,SAAS,yBAAyB;AAExC,UAAM,aAAa;AAAA,MACjB,CAAC,mBAAwC;AACvC,eAAO,WAAW,QAAQ,eAAe,MAAM;AAAA,UAC7C,IAAI,eAAe;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,CAAC,MAAM;AAAA,IACT;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACpB,IAAI;AAAA,MACF,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,MAAM;AAAA,MACN;AAAA,MACA,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,IACxB;AAGA,cAAU,MAAM;AACd,qCAA+B,MAAM;AACrC,UAAI,+BAA+B;AACjC;AAAA,UACE;AAAA,UACA,8BAA8B;AAAA,UAC9B,8BAA8B;AAAA,QAChC;AAAA,MACF;AAAA,IACF,GAAG,CAAC,6BAA6B,CAAC;AAElC,UAAM,2BAAgD,QAAQ,MAAM;AAClE,aAAO;AAAA,QACL,WAAW;AAAA,QACX,OAAO;AAAA,SACJ,MAAM;AAAA,IAEb,GAAG,CAAC,MAAM,gBAAgB,CAAC;AAE3B,sBAAkB,0BAA0B,MAAM,eAAe;AAEjE,UAAM,wBAAwB,QAAQ,MAAM;AAC1C,aAAO,0BAA0B,wBAAwB;AAAA,IAC3D,GAAG,CAAC,wBAAwB,CAAC;AAE7B,UAAM,4BAA4B,QAAQ,MAAM;AAE9C,YAAM,mCAAwD;AAAA,QAC5D,KAAK;AAAA,MACP;AAEA,YAAM,4BAAiD,kCAClD,mCACA,MAAM;AAGX,aAAO,8BAA8B,yBAAyB;AAAA,IAChE,GAAG,CAAC,MAAM,gBAAgB,CAAC;AAG3B,cAAU,MAAM;AA1HpB,UAAAA,KAAA;AA2HM,UAAI,MAAM,UAAU,yBAAyB;AAC3C;AAAA,MACF;AAEA,kCAA2BA,MAAA,MAAM,UAAN,OAAAA,MAAe,EAAE;AAC5C,wBAAkB,SAAQ,WAAM,UAAN,YAAe,EAAE;AAAA,IAC7C,GAAG,CAAC,MAAM,KAAK,CAAC;AAGhB,UAUI,YATF;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IA5IN,IA8IQ,IADC,2BACD,IADC;AAAA,MARH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAIF,UAAM,mBAAmB,MAAM;AAC7B,YAAM,gBAAgB;AACtB,YAAM,gBAAgB,MAAM,kBACxB,gBACA;AACJ,YAAM,2BAA2B;AACjC,YAAM,kBAAkB;AAAA,QACtB;AAAA,QACA,gCAAa;AAAA,MACf;AACA,aAAO,GAAG,iBAAiB,iBAAiB;AAAA,IAC9C,GAAG;AAEH,kCAA8B,QAAQ,GAAG;AAEzC,WACE,oBAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA,UAAU,CAACC,WAAU;AAnK7B,YAAAD,KAAA;AAoKU,cAAM,iBAAiB,oBAAoB,MAAM;AAEjD,cAAM,iBAAiB,iBACnB,eAAe,mBAAmB,eAAe,kBACjD,8BAA8B,MAAM;AAExC,mCAA2B,cAAc;AACzC,uCAA+B,cAAc;AAE7C,SAAAA,MAAA,MAAM,kBAAN,gBAAAA,IAAA,YAAsB;AACtB,oBAAM,aAAN,+BAAiB,+BAA+B,cAAc;AAAA,MAChE;AAAA,MAEA,8BAAC;AAAA,QACC,eAAe;AAAA,QACf,mBAAmB;AAAA,QACnB,WAAW,CAAC,UAAU;AApLhC,cAAAA;AAqLY,0CAAgC,KAAK;AACrC,WAAAA,MAAA,MAAM,cAAN,gBAAAA,IAAA,YAAkB;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,SACP,eACN;AAAA,KACF;AAAA,EAEJ;AACF;AAaA,SAAS,+BACP,aACwC;AACxC,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IACA,eAAe;AAAA,MACb,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AACF","sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Descendant, Editor } from \"slate\";\nimport { Editable, Slate } from \"slate-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useAutosuggestions } from \"../../hooks/base-copilot-textarea-implementation/use-autosuggestions\";\nimport { useCopilotTextareaEditor } from \"../../hooks/base-copilot-textarea-implementation/use-copilot-textarea-editor\";\nimport { usePopulateCopilotTextareaRef } from \"../../hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref\";\nimport {\n getFullEditorTextWithNewlines,\n 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 { BaseCopilotTextareaProps } from \"../../types/base/base-copilot-textarea-props\";\nimport \"./base-copilot-textarea.css\";\nimport { makeRenderElementFunction } from \"./render-element\";\nimport { makeRenderPlaceholderFunction } from \"./render-placeholder\";\nimport { useAddBrandingCss } from \"./use-add-branding-css\";\n\nexport interface HTMLCopilotTextAreaElement extends HTMLElement {\n value: string;\n focus: () => void;\n blur: () => void;\n}\n\nexport const BaseCopilotTextarea = React.forwardRef(\n (\n props: BaseCopilotTextareaProps & {\n autosuggestionsFunction: AutosuggestionsBareFunction;\n },\n ref: React.Ref<HTMLCopilotTextAreaElement>\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 onChange,\n onKeyDown,\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(\n defaultTailwindClassName,\n className ?? \"\"\n );\n return `${baseClassName} ${brandingClass} ${mergedClassName}`;\n })();\n\n usePopulateCopilotTextareaRef(editor, ref);\n\n return (\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\n props.onValueChange?.(fullEditorText);\n props.onChange?.(makeSemiFakeReactTextAreaEvent(fullEditorText));\n }}\n >\n <Editable\n renderElement={renderElementMemoized}\n renderPlaceholder={renderPlaceholderMemoized}\n onKeyDown={(event) => {\n onKeyDownHandlerForAutocomplete(event); // forward the event for internal use\n props.onKeyDown?.(event); // forward the event for external use\n }}\n className={moddedClassName}\n {...propsToForward}\n />\n </Slate>\n );\n }\n);\n\n// Consumers of <textarea> expect a `onChange: (React.ChangeEvent<HTMLTextAreaElement>) => void` event handler to be passed in.\n// This is *extremely* common, and we want to support it.\n//\n// We can't support the full functionality, but in 99% of cases, the consumer only cares about the `event.target.value` property --\n// that's how they get the new value of the textarea.\n//\n// So, the tradeoff we are making is minimizing compiler complaint, with a small chance of runtime error.\n// The alternative would be defining a different onChange entrypoint (we actually do have that in `onValueChange`),\n// And starting to explain subtleties to users the moment they try to use the component for the first time for very basic functionality.\n//\n// If this proves problematic, we can always revisit this decision.\nfunction makeSemiFakeReactTextAreaEvent(\n currentText: string\n): React.ChangeEvent<HTMLTextAreaElement> {\n return {\n target: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n currentTarget: {\n value: currentText,\n type: \"copilot-textarea\",\n },\n } as React.ChangeEvent<HTMLTextAreaElement>;\n}\n"]}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { BaseAutosuggestionsConfig } from '../../types/base/base-autosuggestions-config.js';
|
|
1
|
+
import React from 'react';
|
|
3
2
|
import { AutosuggestionsBareFunction } from '../../types/base/autosuggestions-bare-function.js';
|
|
3
|
+
import { BaseCopilotTextareaProps } from '../../types/base/base-copilot-textarea-props.js';
|
|
4
|
+
import '../../types/base/base-autosuggestions-config.js';
|
|
4
5
|
|
|
5
|
-
interface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
value?: string;
|
|
10
|
-
onValueChange?: (value: string) => void;
|
|
11
|
-
autosuggestionsConfig: Partial<BaseAutosuggestionsConfig> & {
|
|
12
|
-
purposePrompt: string;
|
|
13
|
-
};
|
|
6
|
+
interface HTMLCopilotTextAreaElement extends HTMLElement {
|
|
7
|
+
value: string;
|
|
8
|
+
focus: () => void;
|
|
9
|
+
blur: () => void;
|
|
14
10
|
}
|
|
15
|
-
declare
|
|
11
|
+
declare const BaseCopilotTextarea: React.ForwardRefExoticComponent<BaseCopilotTextareaProps & {
|
|
16
12
|
autosuggestionsFunction: AutosuggestionsBareFunction;
|
|
17
|
-
}
|
|
13
|
+
} & React.RefAttributes<HTMLCopilotTextAreaElement>>;
|
|
18
14
|
|
|
19
|
-
export { BaseCopilotTextarea,
|
|
15
|
+
export { BaseCopilotTextarea, HTMLCopilotTextAreaElement };
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
export { BaseCopilotTextarea } from '../../chunk-
|
|
1
|
+
export { BaseCopilotTextarea } from '../../chunk-M6QFKIBE.mjs';
|
|
2
|
+
import '../../chunk-HZGSG7ST.mjs';
|
|
3
|
+
import '../../chunk-UW3ITU2Y.mjs';
|
|
4
|
+
import '../../chunk-CSGFJU3L.mjs';
|
|
5
|
+
import '../../chunk-AOEXKPIX.mjs';
|
|
2
6
|
import '../../chunk-WJYQWL4I.mjs';
|
|
3
7
|
import '../../chunk-4XYYSJ5C.mjs';
|
|
4
8
|
import '../../chunk-TSF4AJIK.mjs';
|
|
5
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-KCHYD3EB.mjs';
|
|
10
|
+
import '../../chunk-KGKLUWKW.mjs';
|
|
6
11
|
import '../../chunk-WJHSY5T6.mjs';
|
|
7
12
|
import '../../chunk-7KWRVIYV.mjs';
|
|
8
13
|
import '../../chunk-LNAIMEB2.mjs';
|
|
9
14
|
import '../../chunk-OELUUJZY.mjs';
|
|
10
|
-
import '../../chunk-
|
|
11
|
-
import '../../chunk-E2UEE45I.mjs';
|
|
12
|
-
import '../../chunk-UW3ITU2Y.mjs';
|
|
13
|
-
import '../../chunk-KGKLUWKW.mjs';
|
|
14
|
-
import '../../chunk-6SYD77G6.mjs';
|
|
15
|
-
import '../../chunk-KCHYD3EB.mjs';
|
|
15
|
+
import '../../chunk-IGQI27NI.mjs';
|
|
16
16
|
import '../../chunk-NKW5OU2S.mjs';
|
|
17
|
+
import '../../chunk-3UQM3NLM.mjs';
|
|
17
18
|
import '../../chunk-MRXNTQOX.mjs';
|
|
18
19
|
//# sourceMappingURL=out.js.map
|
|
19
20
|
//# sourceMappingURL=base-copilot-textarea.mjs.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseCopilotTextareaProps } from '../../types/base/base-copilot-textarea-props.js';
|
|
3
|
+
import { HTMLCopilotTextAreaElement } from '../../types/html-copilot-textarea-element.js';
|
|
1
4
|
import { AutosuggestionsConfig } from '../../types/standard-autosuggestions/autosuggestions-config.js';
|
|
2
|
-
import { BaseCopilotTextareaProps } from '../base-copilot-textarea/base-copilot-textarea.js';
|
|
3
5
|
import '../../types/base/base-autosuggestions-config.js';
|
|
4
6
|
import '../../types/standard-autosuggestions/minimal-chat-gpt-message.js';
|
|
5
|
-
import 'react';
|
|
6
|
-
import '../../types/base/autosuggestions-bare-function.js';
|
|
7
7
|
|
|
8
8
|
interface CopilotTextareaProps extends BaseCopilotTextareaProps {
|
|
9
9
|
autosuggestionsConfig: Partial<AutosuggestionsConfig> & {
|
|
10
10
|
purposePrompt: string;
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
declare
|
|
13
|
+
declare const CopilotTextarea: React.ForwardRefExoticComponent<CopilotTextareaProps & React.RefAttributes<HTMLCopilotTextAreaElement>>;
|
|
14
14
|
|
|
15
15
|
export { CopilotTextarea, CopilotTextareaProps };
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
export { CopilotTextarea } from '../../chunk-
|
|
1
|
+
export { CopilotTextarea } from '../../chunk-DCQ27XRF.mjs';
|
|
2
2
|
import '../../chunk-A3SFEHWZ.mjs';
|
|
3
3
|
import '../../chunk-AZQCUNBV.mjs';
|
|
4
4
|
import '../../chunk-EHQ5TN4R.mjs';
|
|
5
|
-
import '../../chunk-
|
|
5
|
+
import '../../chunk-M6QFKIBE.mjs';
|
|
6
|
+
import '../../chunk-HZGSG7ST.mjs';
|
|
7
|
+
import '../../chunk-UW3ITU2Y.mjs';
|
|
8
|
+
import '../../chunk-CSGFJU3L.mjs';
|
|
9
|
+
import '../../chunk-AOEXKPIX.mjs';
|
|
6
10
|
import '../../chunk-WJYQWL4I.mjs';
|
|
7
11
|
import '../../chunk-4XYYSJ5C.mjs';
|
|
8
12
|
import '../../chunk-TSF4AJIK.mjs';
|
|
9
|
-
import '../../chunk-
|
|
13
|
+
import '../../chunk-KCHYD3EB.mjs';
|
|
14
|
+
import '../../chunk-KGKLUWKW.mjs';
|
|
10
15
|
import '../../chunk-WJHSY5T6.mjs';
|
|
11
16
|
import '../../chunk-7KWRVIYV.mjs';
|
|
12
17
|
import '../../chunk-LNAIMEB2.mjs';
|
|
13
18
|
import '../../chunk-OELUUJZY.mjs';
|
|
14
|
-
import '../../chunk-
|
|
15
|
-
import '../../chunk-E2UEE45I.mjs';
|
|
16
|
-
import '../../chunk-UW3ITU2Y.mjs';
|
|
17
|
-
import '../../chunk-KGKLUWKW.mjs';
|
|
18
|
-
import '../../chunk-6SYD77G6.mjs';
|
|
19
|
-
import '../../chunk-KCHYD3EB.mjs';
|
|
19
|
+
import '../../chunk-IGQI27NI.mjs';
|
|
20
20
|
import '../../chunk-NKW5OU2S.mjs';
|
|
21
|
+
import '../../chunk-3UQM3NLM.mjs';
|
|
21
22
|
import '../../chunk-MRXNTQOX.mjs';
|
|
22
23
|
//# sourceMappingURL=out.js.map
|
|
23
24
|
//# sourceMappingURL=copilot-textarea.mjs.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export { BaseCopilotTextarea
|
|
1
|
+
export { BaseCopilotTextarea } from './base-copilot-textarea/base-copilot-textarea.js';
|
|
2
2
|
export { CopilotTextarea, CopilotTextareaProps } from './copilot-textarea/copilot-textarea.js';
|
|
3
3
|
import 'react';
|
|
4
|
-
import '../types/base/base-autosuggestions-config.js';
|
|
5
4
|
import '../types/base/autosuggestions-bare-function.js';
|
|
5
|
+
import '../types/base/base-copilot-textarea-props.js';
|
|
6
|
+
import '../types/base/base-autosuggestions-config.js';
|
|
7
|
+
import '../types/html-copilot-textarea-element.js';
|
|
6
8
|
import '../types/standard-autosuggestions/autosuggestions-config.js';
|
|
7
9
|
import '../types/standard-autosuggestions/minimal-chat-gpt-message.js';
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import '../chunk-MMVDU6DF.mjs';
|
|
2
|
-
export { CopilotTextarea } from '../chunk-
|
|
2
|
+
export { CopilotTextarea } from '../chunk-DCQ27XRF.mjs';
|
|
3
3
|
import '../chunk-A3SFEHWZ.mjs';
|
|
4
4
|
import '../chunk-AZQCUNBV.mjs';
|
|
5
5
|
import '../chunk-EHQ5TN4R.mjs';
|
|
6
|
-
export { BaseCopilotTextarea } from '../chunk-
|
|
6
|
+
export { BaseCopilotTextarea } from '../chunk-M6QFKIBE.mjs';
|
|
7
|
+
import '../chunk-HZGSG7ST.mjs';
|
|
8
|
+
import '../chunk-UW3ITU2Y.mjs';
|
|
9
|
+
import '../chunk-CSGFJU3L.mjs';
|
|
10
|
+
import '../chunk-AOEXKPIX.mjs';
|
|
7
11
|
import '../chunk-WJYQWL4I.mjs';
|
|
8
12
|
import '../chunk-4XYYSJ5C.mjs';
|
|
9
13
|
import '../chunk-TSF4AJIK.mjs';
|
|
10
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-KCHYD3EB.mjs';
|
|
15
|
+
import '../chunk-KGKLUWKW.mjs';
|
|
11
16
|
import '../chunk-WJHSY5T6.mjs';
|
|
12
17
|
import '../chunk-7KWRVIYV.mjs';
|
|
13
18
|
import '../chunk-LNAIMEB2.mjs';
|
|
14
19
|
import '../chunk-OELUUJZY.mjs';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-E2UEE45I.mjs';
|
|
17
|
-
import '../chunk-UW3ITU2Y.mjs';
|
|
18
|
-
import '../chunk-KGKLUWKW.mjs';
|
|
19
|
-
import '../chunk-6SYD77G6.mjs';
|
|
20
|
-
import '../chunk-KCHYD3EB.mjs';
|
|
20
|
+
import '../chunk-IGQI27NI.mjs';
|
|
21
21
|
import '../chunk-NKW5OU2S.mjs';
|
|
22
|
+
import '../chunk-3UQM3NLM.mjs';
|
|
22
23
|
import '../chunk-MRXNTQOX.mjs';
|
|
23
24
|
//# sourceMappingURL=out.js.map
|
|
24
25
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AutosuggestionsBareFunction } from '
|
|
2
|
-
import { AutosuggestionState } from '
|
|
3
|
-
import { EditorAutocompleteState } from '
|
|
1
|
+
import { AutosuggestionsBareFunction } from '../../types/base/autosuggestions-bare-function.js';
|
|
2
|
+
import { AutosuggestionState } from '../../types/base/autosuggestion-state.js';
|
|
3
|
+
import { EditorAutocompleteState } from '../../types/base/editor-autocomplete-state.js';
|
|
4
4
|
import 'slate';
|
|
5
5
|
|
|
6
6
|
interface UseAutosuggestionsResult {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useAutosuggestions } from '../../chunk-HZGSG7ST.mjs';
|
|
2
|
+
import '../../chunk-UW3ITU2Y.mjs';
|
|
3
|
+
import '../../chunk-KGKLUWKW.mjs';
|
|
4
|
+
import '../../chunk-NKW5OU2S.mjs';
|
|
5
|
+
import '../../chunk-MRXNTQOX.mjs';
|
|
6
|
+
//# sourceMappingURL=out.js.map
|
|
7
|
+
//# sourceMappingURL=use-autosuggestions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Editor } from 'slate';
|
|
3
|
+
import { HTMLCopilotTextAreaElement } from '../../types/html-copilot-textarea-element.js';
|
|
4
|
+
|
|
5
|
+
declare function usePopulateCopilotTextareaRef(editor: Editor, ref: React.Ref<HTMLCopilotTextAreaElement>): void;
|
|
6
|
+
|
|
7
|
+
export { usePopulateCopilotTextareaRef };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { usePopulateCopilotTextareaRef } from '../../chunk-AOEXKPIX.mjs';
|
|
2
|
+
import '../../chunk-TSF4AJIK.mjs';
|
|
3
|
+
import '../../chunk-3UQM3NLM.mjs';
|
|
4
|
+
import '../../chunk-MRXNTQOX.mjs';
|
|
5
|
+
//# sourceMappingURL=out.js.map
|
|
6
|
+
//# sourceMappingURL=use-populate-copilot-textarea-ref.mjs.map
|
package/dist/hooks/base-copilot-textarea-implementation/use-populate-copilot-textarea-ref.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/dist/index.css
CHANGED
|
@@ -337,6 +337,10 @@ video {
|
|
|
337
337
|
.italic {
|
|
338
338
|
font-style: italic;
|
|
339
339
|
}
|
|
340
|
+
.blur {
|
|
341
|
+
--tw-blur: blur(8px);
|
|
342
|
+
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
343
|
+
}
|
|
340
344
|
.filter {
|
|
341
345
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
342
346
|
}
|