payload-richtext-tiptap 0.0.138 → 0.0.140
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/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +32 -32
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/FontSize/FontSize.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/Heading/Heading.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/ImageBlock.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js +3 -3
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/facebook.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/instagram.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/tiktok.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/twitter.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/youtube.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/FacebookServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/InstagramServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/TiktokServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.d.ts +2 -2
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js +4 -5
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts +3 -3
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js +41 -35
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts +3 -3
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +63 -87
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js +50 -64
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.d.ts +11 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.js +80 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.d.ts +5 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.js +67 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/utils.js.map +1 -1
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
- package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts +397 -0
- package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/lib/tiptapSchema.js +31 -0
- package/dist/src/fields/TiptapEditor/lib/tiptapSchema.js.map +1 -0
- package/dist/src/fields/TiptapEditor/lib/utils/cssVar.js.map +1 -1
- package/dist/src/mobile.css +1 -1
- package/dist/src/styles.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -27
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Check, TextQuote, TrashIcon } from
|
|
3
|
-
import {
|
|
4
|
-
import { Toolbar } from "../../../ui/Toolbar.js";
|
|
2
|
+
import { Check, TextQuote, TrashIcon } from 'lucide-react';
|
|
3
|
+
import { Toolbar } from '../../../ui/Toolbar.js';
|
|
5
4
|
const AICompletionCommands = ({ completion, onDiscard, editor })=>{
|
|
6
5
|
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
7
6
|
children: [
|
|
@@ -13,7 +12,7 @@ const AICompletionCommands = ({ completion, onDiscard, editor })=>{
|
|
|
13
12
|
editor.chain().focus().insertContentAt({
|
|
14
13
|
from: selection.from,
|
|
15
14
|
to: selection.to
|
|
16
|
-
},
|
|
15
|
+
}, completion?.content ?? []).run();
|
|
17
16
|
},
|
|
18
17
|
children: [
|
|
19
18
|
/*#__PURE__*/ _jsx(Check, {
|
|
@@ -27,7 +26,7 @@ const AICompletionCommands = ({ completion, onDiscard, editor })=>{
|
|
|
27
26
|
value: "insert",
|
|
28
27
|
onClick: ()=>{
|
|
29
28
|
const selection = editor.view.state.selection;
|
|
30
|
-
editor.chain().focus().insertContentAt(selection.to + 1,
|
|
29
|
+
editor.chain().focus().insertContentAt(selection.to + 1, completion?.content ?? []).run();
|
|
31
30
|
},
|
|
32
31
|
children: [
|
|
33
32
|
/*#__PURE__*/ _jsx(TextQuote, {
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.tsx"],"sourcesContent":["import { Editor } from
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.tsx"],"sourcesContent":["import { Editor, JSONContent } from '@tiptap/react'\nimport { Check, TextQuote, TrashIcon } from 'lucide-react'\nimport { Toolbar } from '../../../ui/Toolbar.js'\n\nconst AICompletionCommands = ({\n completion,\n onDiscard,\n editor,\n}: {\n editor: Editor\n completion: JSONContent\n onDiscard: () => void\n}) => {\n return (\n <>\n <Toolbar.Button\n className='gap-2 px-4 w-full flex justify-start '\n value='replace'\n onClick={() => {\n const selection = editor.view.state.selection\n\n editor\n .chain()\n .focus()\n .insertContentAt(\n {\n from: selection.from,\n to: selection.to,\n },\n completion?.content ?? [],\n )\n .run()\n }}\n >\n <Check className='h-4 w-4 text-muted-foreground' />\n Replace selection\n </Toolbar.Button>\n <Toolbar.Button\n className='gap-2 px-4 w-full flex justify-start'\n value='insert'\n onClick={() => {\n const selection = editor.view.state.selection\n editor\n .chain()\n .focus()\n .insertContentAt(selection.to + 1, completion?.content ?? [])\n .run()\n }}\n >\n <TextQuote className='h-4 w-4 text-muted-foreground' />\n Insert below\n </Toolbar.Button>\n <Toolbar.Divider horizontal />\n\n <Toolbar.Button\n onClick={onDiscard}\n value='thrash'\n className='w-full text-red-500 bg-red-500 dark:text-red-500 hover:bg-red-500 dark:hover:text-red-500 dark:hover:bg-red-500 bg-opacity-10 hover:bg-opacity-20 dark:hover:bg-opacity-20'\n >\n <TrashIcon className='h-4 w-4 text-muted-foreground' />\n Discard\n </Toolbar.Button>\n </>\n )\n}\n\nexport default AICompletionCommands\n"],"names":["Check","TextQuote","TrashIcon","Toolbar","AICompletionCommands","completion","onDiscard","editor","Button","className","value","onClick","selection","view","state","chain","focus","insertContentAt","from","to","content","run","Divider","horizontal"],"mappings":";AACA,SAASA,KAAK,EAAEC,SAAS,EAAEC,SAAS,QAAQ,eAAc;AAC1D,SAASC,OAAO,QAAQ,yBAAwB;AAEhD,MAAMC,uBAAuB,CAAC,EAC5BC,UAAU,EACVC,SAAS,EACTC,MAAM,EAKP;IACC,qBACE;;0BACE,MAACJ,QAAQK,MAAM;gBACbC,WAAU;gBACVC,OAAM;gBACNC,SAAS;oBACP,MAAMC,YAAYL,OAAOM,IAAI,CAACC,KAAK,CAACF,SAAS;oBAE7CL,OACGQ,KAAK,GACLC,KAAK,GACLC,eAAe,CACd;wBACEC,MAAMN,UAAUM,IAAI;wBACpBC,IAAIP,UAAUO,EAAE;oBAClB,GACAd,YAAYe,WAAW,EAAE,EAE1BC,GAAG;gBACR;;kCAEA,KAACrB;wBAAMS,WAAU;;oBAAkC;;;0BAGrD,MAACN,QAAQK,MAAM;gBACbC,WAAU;gBACVC,OAAM;gBACNC,SAAS;oBACP,MAAMC,YAAYL,OAAOM,IAAI,CAACC,KAAK,CAACF,SAAS;oBAC7CL,OACGQ,KAAK,GACLC,KAAK,GACLC,eAAe,CAACL,UAAUO,EAAE,GAAG,GAAGd,YAAYe,WAAW,EAAE,EAC3DC,GAAG;gBACR;;kCAEA,KAACpB;wBAAUQ,WAAU;;oBAAkC;;;0BAGzD,KAACN,QAAQmB,OAAO;gBAACC,UAAU;;0BAE3B,MAACpB,QAAQK,MAAM;gBACbG,SAASL;gBACTI,OAAM;gBACND,WAAU;;kCAEV,KAACP;wBAAUO,WAAU;;oBAAkC;;;;;AAK/D;AAEA,eAAeL,qBAAoB"}
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Editor } from
|
|
1
|
+
import { Editor, JSONContent } from '@tiptap/react';
|
|
2
2
|
interface AISelectorCommandsProps {
|
|
3
3
|
editor: Editor;
|
|
4
|
-
messages?:
|
|
4
|
+
messages?: JSONContent;
|
|
5
5
|
onSelect: (value: string, options: {
|
|
6
6
|
option: string;
|
|
7
7
|
language?: string;
|
|
8
8
|
selection?: JSON;
|
|
9
9
|
}) => void;
|
|
10
10
|
}
|
|
11
|
-
declare const AISelectorCommands: ({ messages, onSelect, editor
|
|
11
|
+
declare const AISelectorCommands: ({ messages, onSelect, editor }: AISelectorCommandsProps) => import("react").JSX.Element;
|
|
12
12
|
export default AISelectorCommands;
|
|
13
13
|
//# sourceMappingURL=ai-selector-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"ai-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAgEnD,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,KAC7D,IAAI,CAAA;CACV;AAED,QAAA,MAAM,kBAAkB,mCAAoC,uBAAuB,gCAgHlF,CAAA;AAED,eAAe,kBAAkB,CAAA"}
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from
|
|
3
|
-
import * as Popover from
|
|
4
|
-
import i18next from
|
|
5
|
-
import { ArrowDownWideNarrow, CheckCheck, ChevronDown, Languages, RefreshCcwDot, StepForward, WrapText } from
|
|
6
|
-
import { languages } from
|
|
7
|
-
import { getPrevText } from
|
|
8
|
-
import { DropdownCategoryTitle } from
|
|
9
|
-
import { Icon } from
|
|
10
|
-
import { Surface } from
|
|
11
|
-
import { Toolbar } from
|
|
12
|
-
import { useMemo } from
|
|
2
|
+
import { useLocale } from '@payloadcms/ui/providers/Locale';
|
|
3
|
+
import * as Popover from '@radix-ui/react-popover';
|
|
4
|
+
import i18next from 'i18next';
|
|
5
|
+
import { ArrowDownWideNarrow, BookText, CheckCheck, ChevronDown, Languages, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';
|
|
6
|
+
import { languages } from '../../../../lib/constants.js';
|
|
7
|
+
import { getPrevText } from '../../../../lib/utils/index.js';
|
|
8
|
+
import { DropdownCategoryTitle } from '../../../ui/Dropdown/Dropdown.js';
|
|
9
|
+
import { Icon } from '../../../ui/Icon.js';
|
|
10
|
+
import { Surface } from '../../../ui/Surface.js';
|
|
11
|
+
import { Toolbar } from '../../../ui/Toolbar.js';
|
|
12
|
+
import { useMemo } from 'react';
|
|
13
|
+
import { extractMarkdown } from '../../../../lib/extract.js';
|
|
13
14
|
const options = [
|
|
14
15
|
// {
|
|
15
16
|
// value: 'translate',
|
|
@@ -17,33 +18,38 @@ const options = [
|
|
|
17
18
|
// icon: WrapText,
|
|
18
19
|
// },
|
|
19
20
|
{
|
|
20
|
-
value:
|
|
21
|
-
label:
|
|
22
|
-
icon:
|
|
21
|
+
value: 'improve',
|
|
22
|
+
label: 'Improve writing',
|
|
23
|
+
icon: RefreshCcwDot
|
|
23
24
|
},
|
|
24
25
|
{
|
|
25
|
-
value:
|
|
26
|
-
label:
|
|
27
|
-
icon:
|
|
26
|
+
value: 'fix',
|
|
27
|
+
label: 'Fix grammar',
|
|
28
|
+
icon: CheckCheck
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
|
-
value:
|
|
31
|
-
label:
|
|
32
|
-
icon:
|
|
31
|
+
value: 'rewrite_with_guidelines',
|
|
32
|
+
label: 'Rewrite per Editorial Guidelines',
|
|
33
|
+
icon: BookText
|
|
33
34
|
},
|
|
34
35
|
{
|
|
35
|
-
value:
|
|
36
|
-
label:
|
|
37
|
-
icon:
|
|
36
|
+
value: 'rewrite',
|
|
37
|
+
label: 'Rewrite into Axios',
|
|
38
|
+
icon: WrapText
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
value: 'summarize',
|
|
42
|
+
label: 'Summarize text',
|
|
43
|
+
icon: WrapText
|
|
38
44
|
},
|
|
39
45
|
{
|
|
40
|
-
value:
|
|
41
|
-
label:
|
|
46
|
+
value: 'shorter',
|
|
47
|
+
label: 'Make shorter',
|
|
42
48
|
icon: ArrowDownWideNarrow
|
|
43
49
|
},
|
|
44
50
|
{
|
|
45
|
-
value:
|
|
46
|
-
label:
|
|
51
|
+
value: 'longer',
|
|
52
|
+
label: 'Make longer',
|
|
47
53
|
icon: WrapText
|
|
48
54
|
}
|
|
49
55
|
];
|
|
@@ -74,7 +80,7 @@ const AISelectorCommands = ({ messages, onSelect, editor })=>{
|
|
|
74
80
|
className: "gap-2 px-4 w-full flex justify-start ",
|
|
75
81
|
type: "button",
|
|
76
82
|
// active={!!states.currentHighlight}
|
|
77
|
-
tooltip: i18next.t(
|
|
83
|
+
tooltip: i18next.t('highlightText') || 'Highlight text',
|
|
78
84
|
children: [
|
|
79
85
|
/*#__PURE__*/ _jsx(Icon, {
|
|
80
86
|
icon: Languages,
|
|
@@ -106,8 +112,8 @@ const AISelectorCommands = ({ messages, onSelect, editor })=>{
|
|
|
106
112
|
sortedLanguages.map((lang)=>/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
107
113
|
onClick: ()=>{
|
|
108
114
|
const editorSelection = editor.state.selection.content().content.toJSON();
|
|
109
|
-
onSelect(
|
|
110
|
-
option:
|
|
115
|
+
onSelect('', {
|
|
116
|
+
option: 'translate',
|
|
111
117
|
language: lang.value,
|
|
112
118
|
selection: editorSelection
|
|
113
119
|
});
|
|
@@ -129,10 +135,10 @@ const AISelectorCommands = ({ messages, onSelect, editor })=>{
|
|
|
129
135
|
onClick: ()=>{
|
|
130
136
|
const { from, to, empty } = editor.state.selection;
|
|
131
137
|
const editorSelection = editor.state.selection.content().content.toJSON();
|
|
132
|
-
const content = messages ? messages ??
|
|
138
|
+
const content = messages ? extractMarkdown(messages) ?? '' : editor.state.doc.textBetween(from, to, ' ');
|
|
133
139
|
onSelect(content, {
|
|
134
140
|
option: option.value,
|
|
135
|
-
language: editor?.storage?.aiCommand?.language ?? code ??
|
|
141
|
+
language: editor?.storage?.aiCommand?.language ?? code ?? 'en'
|
|
136
142
|
});
|
|
137
143
|
},
|
|
138
144
|
className: " gap-2 px-4 w-full flex justify-start",
|
|
@@ -157,12 +163,12 @@ const AISelectorCommands = ({ messages, onSelect, editor })=>{
|
|
|
157
163
|
/*#__PURE__*/ _jsxs(Toolbar.Button, {
|
|
158
164
|
onClick: ()=>{
|
|
159
165
|
const editorSelection = editor.state.selection.content().content.toJSON();
|
|
160
|
-
const text = messages ? messages : getPrevText(editor, {
|
|
166
|
+
const text = messages ? extractMarkdown(messages) ?? '' : getPrevText(editor, {
|
|
161
167
|
chars: 5000
|
|
162
168
|
});
|
|
163
169
|
onSelect(text, {
|
|
164
|
-
option:
|
|
165
|
-
language: editor?.storage?.aiCommand?.language ?? code ??
|
|
170
|
+
option: 'continue',
|
|
171
|
+
language: editor?.storage?.aiCommand?.language ?? code ?? 'en'
|
|
166
172
|
});
|
|
167
173
|
},
|
|
168
174
|
value: "continue",
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"sourcesContent":["import { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { Editor } from \"@tiptap/react\";\nimport i18next from \"i18next\";\nimport {\n ArrowDownWideNarrow,\n CheckCheck,\n ChevronDown,\n Languages,\n RefreshCcwDot,\n StepForward,\n WrapText,\n} from \"lucide-react\";\nimport { languages } from \"../../../../lib/constants.js\";\nimport { getPrevText } from \"../../../../lib/utils/index.js\";\nimport { DropdownCategoryTitle } from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\nimport { useMemo } from \"react\";\nconst options = [\n // {\n // value: 'translate',\n // label: 'Translate text',\n // icon: WrapText,\n // },\n {\n value: \"summarize\",\n label: \"Summarize text\",\n icon: WrapText,\n },\n {\n value: \"rewrite\",\n label: \"Rewrite into Axios\",\n icon: WrapText,\n },\n {\n value: \"improve\",\n label: \"Improve writing\",\n icon: RefreshCcwDot,\n },\n\n {\n value: \"fix\",\n label: \"Fix grammar\",\n icon: CheckCheck,\n },\n {\n value: \"shorter\",\n label: \"Make shorter\",\n icon: ArrowDownWideNarrow,\n },\n {\n value: \"longer\",\n label: \"Make longer\",\n icon: WrapText,\n },\n];\n\ninterface AISelectorCommandsProps {\n editor: Editor;\n messages?: string;\n onSelect: (\n value: string,\n options: { option: string; language?: string, selection?: JSON }\n ) => void;\n}\n\nconst AISelectorCommands = ({\n messages,\n onSelect,\n editor,\n}: AISelectorCommandsProps) => {\n const { code } = useLocale();\n const editorSelection = editor?.state?.selection?.content?.()?.content?.toJSON()\n const sortedLanguages = useMemo(() => {\n const editorLanguage = editor.storage?.aiCommand?.language\n return languages.sort((a, b) => {\n if (editorLanguage?.includes(a.value)) return -1;\n if (editorLanguage?.includes(b.value)) return 1;\n return 0;\n })\n },[languages, editor.storage?.aiCommand?.language]);\n\n return (\n <>\n <DropdownCategoryTitle>Edit or review selection</DropdownCategoryTitle>\n {editorSelection && <Popover.Root>\n <Popover.Trigger asChild>\n <Toolbar.Button\n className=\"gap-2 px-4 w-full flex justify-start \"\n type=\"button\"\n // active={!!states.currentHighlight}\n tooltip={i18next.t(\"highlightText\") || \"Highlight text\"}\n >\n <Icon icon={Languages} className=\"h-4 w-4 text-blue-500\" />\n Translate text\n <span className=\"text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline\">\n Beta\n </span>\n <Icon icon={ChevronDown} className=\"h-4 w-4 text-blue-500\" />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content side=\"right\" align=\"start\" sideOffset={8} asChild>\n <Surface className=\"flex flex-col min-w-[15rem] p-2 max-h-[20rem] overflow-auto\">\n <DropdownCategoryTitle>Languages</DropdownCategoryTitle>\n\n {sortedLanguages.map((lang) => (\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n onSelect(\"\", {\n option: \"translate\",\n language: lang.value,\n selection: editorSelection\n });\n }}\n className=\"gap-2 px-4 w-full flex justify-start \"\n key={lang.value}\n >\n {lang.label}\n </Toolbar.Button>\n ))}\n </Surface>\n </Popover.Content>\n </Popover.Root>}\n\n {options.map((option) => (\n <Toolbar.Button\n // onSelect={(value) => {\n // const slice = editor.state.selection.content()\n // const text = editor?.storage?.markdown?.serializer.serialize(slice.content)\n // onSelect(text, option.value)\n // }}\n onClick={() => {\n const { from, to, empty } = editor.state.selection;\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n const content = messages\n ? messages ?? \"\"\n : editor.state.doc.textBetween(from, to, \" \");\n onSelect(content, {\n option: option.value,\n language: editor?.storage?.aiCommand?.language ?? code ?? \"en\",\n });\n }}\n className=\" gap-2 px-4 w-full flex justify-start\"\n key={option.value}\n value={option.value}\n >\n <option.icon className=\"h-4 w-4 text-blue-500\" />\n {option.label}\n <span className=\"text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline\">\n Beta\n </span>\n </Toolbar.Button>\n ))}\n <Toolbar.Divider horizontal />\n <DropdownCategoryTitle>Use AI to do more</DropdownCategoryTitle>\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n const text = messages\n ? messages\n : getPrevText(editor, { chars: 5000 });\n onSelect(text, {\n option: \"continue\",\n language: editor?.storage?.aiCommand?.language ?? code ?? \"en\",\n });\n }}\n value=\"continue\"\n className=\"gap-2 px-4 w-full flex justify-start\"\n >\n <StepForward className=\"h-4 w-4 text-blue-500\" />\n Continue writing\n <span className=\"text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline\">\n Beta\n </span>\n </Toolbar.Button>\n </>\n );\n};\n\nexport default AISelectorCommands;\n"],"names":["useLocale","Popover","i18next","ArrowDownWideNarrow","CheckCheck","ChevronDown","Languages","RefreshCcwDot","StepForward","WrapText","languages","getPrevText","DropdownCategoryTitle","Icon","Surface","Toolbar","useMemo","options","value","label","icon","AISelectorCommands","messages","onSelect","editor","code","editorSelection","state","selection","content","toJSON","sortedLanguages","editorLanguage","storage","aiCommand","language","sort","a","b","includes","Root","Trigger","asChild","Button","className","type","tooltip","t","span","Content","side","align","sideOffset","map","lang","onClick","option","from","to","empty","doc","textBetween","Divider","horizontal","text","chars"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"sourcesContent":["import { useLocale } from '@payloadcms/ui/providers/Locale'\nimport * as Popover from '@radix-ui/react-popover'\nimport { Editor, JSONContent } from '@tiptap/react'\nimport i18next from 'i18next'\nimport {\n ArrowDownWideNarrow,\n BookText,\n CheckCheck,\n ChevronDown,\n Languages,\n RefreshCcwDot,\n StepForward,\n WrapText,\n} from 'lucide-react'\nimport { languages } from '../../../../lib/constants.js'\nimport { getPrevText } from '../../../../lib/utils/index.js'\nimport { DropdownCategoryTitle } from '../../../ui/Dropdown/Dropdown.js'\nimport { Icon } from '../../../ui/Icon.js'\nimport { Surface } from '../../../ui/Surface.js'\nimport { Toolbar } from '../../../ui/Toolbar.js'\nimport { useMemo } from 'react'\nimport { extractMarkdown } from '../../../../lib/extract.js'\nconst options = [\n // {\n // value: 'translate',\n // label: 'Translate text',\n // icon: WrapText,\n // },\n {\n value: 'improve',\n label: 'Improve writing',\n icon: RefreshCcwDot,\n },\n {\n value: 'fix',\n label: 'Fix grammar',\n icon: CheckCheck,\n },\n {\n value: 'rewrite_with_guidelines',\n label: 'Rewrite per Editorial Guidelines',\n icon: BookText,\n },\n {\n value: 'rewrite',\n label: 'Rewrite into Axios',\n icon: WrapText,\n },\n\n {\n value: 'summarize',\n label: 'Summarize text',\n icon: WrapText,\n },\n {\n value: 'shorter',\n label: 'Make shorter',\n icon: ArrowDownWideNarrow,\n },\n {\n value: 'longer',\n label: 'Make longer',\n icon: WrapText,\n },\n]\n\ninterface AISelectorCommandsProps {\n editor: Editor\n messages?: JSONContent\n onSelect: (\n value: string,\n options: { option: string; language?: string; selection?: JSON },\n ) => void\n}\n\nconst AISelectorCommands = ({ messages, onSelect, editor }: AISelectorCommandsProps) => {\n const { code } = useLocale()\n const editorSelection = editor?.state?.selection?.content?.()?.content?.toJSON()\n const sortedLanguages = useMemo(() => {\n const editorLanguage = editor.storage?.aiCommand?.language\n return languages.sort((a, b) => {\n if (editorLanguage?.includes(a.value)) return -1\n if (editorLanguage?.includes(b.value)) return 1\n return 0\n })\n }, [languages, editor.storage?.aiCommand?.language])\n\n return (\n <>\n <DropdownCategoryTitle>Edit or review selection</DropdownCategoryTitle>\n {editorSelection && (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Toolbar.Button\n className='gap-2 px-4 w-full flex justify-start '\n type='button'\n // active={!!states.currentHighlight}\n tooltip={i18next.t('highlightText') || 'Highlight text'}\n >\n <Icon icon={Languages} className='h-4 w-4 text-blue-500' />\n Translate text\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n <Icon icon={ChevronDown} className='h-4 w-4 text-blue-500' />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content side='right' align='start' sideOffset={8} asChild>\n <Surface className='flex flex-col min-w-[15rem] p-2 max-h-[20rem] overflow-auto'>\n <DropdownCategoryTitle>Languages</DropdownCategoryTitle>\n\n {sortedLanguages.map((lang) => (\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n onSelect('', {\n option: 'translate',\n language: lang.value,\n selection: editorSelection,\n })\n }}\n className='gap-2 px-4 w-full flex justify-start '\n key={lang.value}\n >\n {lang.label}\n </Toolbar.Button>\n ))}\n </Surface>\n </Popover.Content>\n </Popover.Root>\n )}\n\n {options.map((option) => (\n <Toolbar.Button\n // onSelect={(value) => {\n // const slice = editor.state.selection.content()\n // const text = editor?.storage?.markdown?.serializer.serialize(slice.content)\n // onSelect(text, option.value)\n // }}\n onClick={() => {\n const { from, to, empty } = editor.state.selection\n const editorSelection = editor.state.selection.content().content.toJSON()\n const content = messages\n ? (extractMarkdown(messages) ?? '')\n : editor.state.doc.textBetween(from, to, ' ')\n onSelect(content, {\n option: option.value,\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n className=' gap-2 px-4 w-full flex justify-start'\n key={option.value}\n value={option.value}\n >\n <option.icon className='h-4 w-4 text-blue-500' />\n {option.label}\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n ))}\n <Toolbar.Divider horizontal />\n <DropdownCategoryTitle>Use AI to do more</DropdownCategoryTitle>\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n const text = messages\n ? (extractMarkdown(messages) ?? '')\n : getPrevText(editor, { chars: 5000 })\n onSelect(text, {\n option: 'continue',\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n value='continue'\n className='gap-2 px-4 w-full flex justify-start'\n >\n <StepForward className='h-4 w-4 text-blue-500' />\n Continue writing\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n </>\n )\n}\n\nexport default AISelectorCommands\n"],"names":["useLocale","Popover","i18next","ArrowDownWideNarrow","BookText","CheckCheck","ChevronDown","Languages","RefreshCcwDot","StepForward","WrapText","languages","getPrevText","DropdownCategoryTitle","Icon","Surface","Toolbar","useMemo","extractMarkdown","options","value","label","icon","AISelectorCommands","messages","onSelect","editor","code","editorSelection","state","selection","content","toJSON","sortedLanguages","editorLanguage","storage","aiCommand","language","sort","a","b","includes","Root","Trigger","asChild","Button","className","type","tooltip","t","span","Content","side","align","sideOffset","map","lang","onClick","option","from","to","empty","doc","textBetween","Divider","horizontal","text","chars"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import { Editor } from
|
|
3
|
-
import { Group } from
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Editor } from '@tiptap/react';
|
|
3
|
+
import { Group } from '../../../extensions/AICommand/types.js';
|
|
4
4
|
export type AICommandPanelProps = {
|
|
5
5
|
editor: Editor;
|
|
6
6
|
userPrompt?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AICommandPanel.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AICommandPanel.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAON,MAAM,OAAO,CAAA;AAKd,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAItC,OAAO,EAAW,KAAK,EAAE,MAAM,wCAAwC,CAAA;AAYvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,KAAK,EAAE,KAAK,EAAE,CAAA;CACf,CAAA;AAED,eAAO,MAAM,cAAc,qFAkQ1B,CAAA"}
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import i18next from
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { checkJsonCompletion, formatCompletion } from "../AIEditorPanel/utils.js";
|
|
3
|
+
import { ArrowUpCircle, Sparkles } from 'lucide-react';
|
|
4
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
5
|
+
import Markdown from 'react-markdown';
|
|
6
|
+
import TextareaAutosize from 'react-textarea-autosize';
|
|
7
|
+
import { useLocale } from '@payloadcms/ui/providers/Locale';
|
|
8
|
+
import { experimental_useObject as useObject } from '@ai-sdk/react';
|
|
9
|
+
import i18next from 'i18next';
|
|
10
|
+
import { TiptapSchema } from '../../../lib/tiptapSchema.js';
|
|
11
|
+
import AISelectorCommands from '../../menus/TextMenu/components/ai-selector-commands.js';
|
|
12
|
+
import CrazySpinner from '../../ui/crazy-spinner.js';
|
|
13
|
+
import { DropdownButton } from '../../ui/Dropdown/Dropdown.js';
|
|
14
|
+
import { Icon } from '../../ui/Icon.js';
|
|
15
|
+
import { ScrollArea } from '../../ui/scroll-area.js';
|
|
16
|
+
import { Surface } from '../../ui/Surface.js';
|
|
17
|
+
import { Toolbar } from '../../ui/Toolbar.js';
|
|
18
|
+
import { useExtractMarkdown } from '../AIEditorPanel/markdown.hook.js';
|
|
20
19
|
export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange, userPrompt, items, ...restProps }, ref)=>{
|
|
21
|
-
const [inputValue, setInputValue] = useState(userPrompt ??
|
|
20
|
+
const [inputValue, setInputValue] = useState(userPrompt ?? '');
|
|
22
21
|
const { code } = useLocale();
|
|
23
22
|
const { view } = editor;
|
|
24
23
|
const scrollContainer = useRef(null);
|
|
@@ -28,49 +27,40 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
28
27
|
const editorNode = view.dom;
|
|
29
28
|
const boundigClient = editorNode.getBoundingClientRect();
|
|
30
29
|
const inputRef = useRef(null);
|
|
31
|
-
const {
|
|
32
|
-
api: '/api/generate'
|
|
30
|
+
const { object, submit, isLoading } = useObject({
|
|
31
|
+
api: '/api/generate',
|
|
32
|
+
schema: TiptapSchema
|
|
33
33
|
});
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
return message?.role === 'assistant';
|
|
37
|
-
});
|
|
38
|
-
const completion = [
|
|
39
|
-
...assistantMessages
|
|
40
|
-
]?.pop()?.content ?? "";
|
|
41
|
-
const hasCompletion = completion.length > 0;
|
|
34
|
+
const { markdown } = useExtractMarkdown(object);
|
|
35
|
+
const hasCompletion = Boolean(object);
|
|
42
36
|
const handleClick = useCallback(()=>{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}, {
|
|
49
|
-
data: {
|
|
50
|
-
option: "zap",
|
|
37
|
+
if (object) {
|
|
38
|
+
submit({
|
|
39
|
+
prompt: '',
|
|
40
|
+
body: {
|
|
41
|
+
option: 'zap',
|
|
51
42
|
command: inputValue,
|
|
52
|
-
language: code ??
|
|
43
|
+
language: code ?? 'en',
|
|
44
|
+
selection: object
|
|
53
45
|
}
|
|
54
|
-
})
|
|
46
|
+
});
|
|
47
|
+
setInputValue('');
|
|
48
|
+
return;
|
|
55
49
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}, {
|
|
63
|
-
data: {
|
|
64
|
-
option: "zap",
|
|
65
|
-
command: (editor.storage.aiCommand.title ? "Context Title:" + editor.storage.aiCommand.title + ";\n" : "") + (editor.storage.aiCommand.language ? "Context language:" + editor.storage.aiCommand.language + ";\n" : "") + inputValue,
|
|
66
|
-
language: editor.storage.aiCommand.language ?? code ?? "en",
|
|
67
|
-
selection: editorSelection
|
|
50
|
+
submit({
|
|
51
|
+
prompt: '',
|
|
52
|
+
body: {
|
|
53
|
+
option: 'zap',
|
|
54
|
+
command: inputValue,
|
|
55
|
+
language: code ?? 'en'
|
|
68
56
|
}
|
|
69
|
-
})
|
|
57
|
+
});
|
|
58
|
+
setInputValue('');
|
|
70
59
|
}, [
|
|
71
60
|
code,
|
|
72
61
|
inputValue,
|
|
73
|
-
|
|
62
|
+
object,
|
|
63
|
+
submit
|
|
74
64
|
]);
|
|
75
65
|
useEffect(()=>{
|
|
76
66
|
if (userPrompt) setInputValue(userPrompt);
|
|
@@ -78,15 +68,13 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
78
68
|
userPrompt
|
|
79
69
|
]);
|
|
80
70
|
useEffect(()=>{
|
|
81
|
-
if (
|
|
82
|
-
editor.storage.aiCommand.completion =
|
|
71
|
+
if (hasCompletion) {
|
|
72
|
+
editor.storage.aiCommand.completion = object;
|
|
83
73
|
}
|
|
84
74
|
}, [
|
|
85
|
-
|
|
75
|
+
object,
|
|
86
76
|
isLoading
|
|
87
77
|
]);
|
|
88
|
-
// Anytime the groups change, i.e. the user types to narrow it down, we want to
|
|
89
|
-
// reset the current selection to the first menu item
|
|
90
78
|
useEffect(()=>{
|
|
91
79
|
setSelectedGroupIndex(0);
|
|
92
80
|
setSelectedCommandIndex(0);
|
|
@@ -96,14 +84,13 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
96
84
|
const selectItem = useCallback((groupIndex, commandIndex)=>{
|
|
97
85
|
const command = items[groupIndex].commands[commandIndex];
|
|
98
86
|
setInputValue(command.action(editor));
|
|
99
|
-
// props.command(command);
|
|
100
87
|
}, [
|
|
101
88
|
items,
|
|
102
89
|
editor
|
|
103
90
|
]);
|
|
104
91
|
useImperativeHandle(ref, ()=>({
|
|
105
92
|
onKeyDown: ({ event })=>{
|
|
106
|
-
if (event.key ===
|
|
93
|
+
if (event.key === 'ArrowDown') {
|
|
107
94
|
if (!items.length) {
|
|
108
95
|
return false;
|
|
109
96
|
}
|
|
@@ -121,7 +108,7 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
121
108
|
setSelectedGroupIndex(newGroupIndex);
|
|
122
109
|
return true;
|
|
123
110
|
}
|
|
124
|
-
if (event.key ===
|
|
111
|
+
if (event.key === 'ArrowUp') {
|
|
125
112
|
if (!items.length) {
|
|
126
113
|
return false;
|
|
127
114
|
}
|
|
@@ -139,7 +126,7 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
139
126
|
setSelectedGroupIndex(newGroupIndex);
|
|
140
127
|
return true;
|
|
141
128
|
}
|
|
142
|
-
if (event.key ===
|
|
129
|
+
if (event.key === 'Enter') {
|
|
143
130
|
if (!items.length || selectedGroupIndex === -1 || selectedCommandIndex === -1) {
|
|
144
131
|
return false;
|
|
145
132
|
}
|
|
@@ -169,22 +156,19 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
169
156
|
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
170
157
|
children: [
|
|
171
158
|
/*#__PURE__*/ _jsx(Surface, {
|
|
172
|
-
className: `p-2 min-w-[20rem] flex flex-col gap-2 w-full ${hasCompletion ?
|
|
159
|
+
className: `p-2 min-w-[20rem] flex flex-col gap-2 w-full ${hasCompletion ? '-mt-72' : ''}`,
|
|
173
160
|
style: {
|
|
174
161
|
width: boundigClient?.width
|
|
175
162
|
},
|
|
176
163
|
children: /*#__PURE__*/ _jsxs(_Fragment, {
|
|
177
164
|
children: [
|
|
178
|
-
|
|
165
|
+
markdown && /*#__PURE__*/ _jsx("div", {
|
|
179
166
|
className: "flex w-full",
|
|
180
167
|
children: /*#__PURE__*/ _jsx(ScrollArea, {
|
|
181
|
-
className: "
|
|
168
|
+
className: "prose p-2 px-4 prose-sm",
|
|
182
169
|
dir: i18next.dir(),
|
|
183
170
|
children: /*#__PURE__*/ _jsx(Markdown, {
|
|
184
|
-
children:
|
|
185
|
-
type: 'doc',
|
|
186
|
-
content: formatCompletion(completion)
|
|
187
|
-
}) : completion
|
|
171
|
+
children: markdown
|
|
188
172
|
})
|
|
189
173
|
})
|
|
190
174
|
}),
|
|
@@ -214,7 +198,7 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
214
198
|
/*#__PURE__*/ _jsx(TextareaAutosize, {
|
|
215
199
|
ref: inputRef,
|
|
216
200
|
style: {
|
|
217
|
-
resize:
|
|
201
|
+
resize: 'none'
|
|
218
202
|
},
|
|
219
203
|
className: "w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none outline-none border-0 ",
|
|
220
204
|
value: inputValue,
|
|
@@ -222,17 +206,13 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
222
206
|
editor.storage.aiCommand.userPrompt = e.target.value;
|
|
223
207
|
setInputValue(e.target.value);
|
|
224
208
|
},
|
|
225
|
-
placeholder: hasCompletion ? i18next.t(
|
|
209
|
+
placeholder: hasCompletion ? i18next.t('tellAiPlaceholder') || 'Tell AI (Beta) what to do next' : i18next.t('askAiPlaceholder') || 'Ask AI (Beta) to edit or generate...',
|
|
226
210
|
autoFocus: true,
|
|
227
|
-
// onFocus={() => {
|
|
228
|
-
// addAIHighlight(editor)}}
|
|
229
211
|
onKeyDown: (e)=>{
|
|
230
|
-
if (e.key ===
|
|
212
|
+
if (e.key === 'Enter') handleClick();
|
|
231
213
|
}
|
|
232
214
|
}),
|
|
233
215
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
234
|
-
// size="icon"
|
|
235
|
-
// className="absolute right-2 top-1/2 h-6 w-6 -translate-y-1/2 rounded-full bg-zinc-100 hover:bg-zinc-150"
|
|
236
216
|
onClick: handleClick,
|
|
237
217
|
children: /*#__PURE__*/ _jsx(ArrowUpCircle, {})
|
|
238
218
|
})
|
|
@@ -249,21 +229,17 @@ export const AICommandPanel = /*#__PURE__*/ forwardRef(({ editor, onOpenChange,
|
|
|
249
229
|
className: "grid grid-cols-1 gap-0.5",
|
|
250
230
|
children: hasCompletion ? /*#__PURE__*/ _jsx(AISelectorCommands, {
|
|
251
231
|
editor: editor,
|
|
252
|
-
messages:
|
|
232
|
+
messages: object,
|
|
253
233
|
onSelect: (value, options)=>{
|
|
254
234
|
if (options?.option === 'translate') {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}, {
|
|
259
|
-
data: options
|
|
235
|
+
submit({
|
|
236
|
+
prompt: value,
|
|
237
|
+
body: options
|
|
260
238
|
});
|
|
261
239
|
} else {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}, {
|
|
266
|
-
data: {
|
|
240
|
+
submit({
|
|
241
|
+
prompt: value,
|
|
242
|
+
body: {
|
|
267
243
|
...options,
|
|
268
244
|
source: code
|
|
269
245
|
}
|