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.
Files changed (71) hide show
  1. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts +1 -1
  2. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts.map +1 -1
  3. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +32 -32
  4. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -1
  5. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.js.map +1 -1
  6. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js.map +1 -1
  7. package/dist/src/fields/TiptapEditor/extensions/FontSize/FontSize.js.map +1 -1
  8. package/dist/src/fields/TiptapEditor/extensions/Heading/Heading.js.map +1 -1
  9. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/ImageBlock.js.map +1 -1
  10. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js.map +1 -1
  11. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js.map +1 -1
  12. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js +3 -3
  13. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js.map +1 -1
  14. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js.map +1 -1
  15. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
  16. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/facebook.js.map +1 -1
  17. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/instagram.js.map +1 -1
  18. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/tiktok.js.map +1 -1
  19. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/twitter.js.map +1 -1
  20. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/youtube.js.map +1 -1
  21. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.js.map +1 -1
  22. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js.map +1 -1
  23. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.d.ts.map +1 -1
  24. package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts +1 -1
  25. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.js.map +1 -1
  26. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.js.map +1 -1
  27. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.js.map +1 -1
  28. package/dist/src/fields/TiptapEditor/extensions/serverside/FacebookServerside.js.map +1 -1
  29. package/dist/src/fields/TiptapEditor/extensions/serverside/InstagramServerside.js.map +1 -1
  30. package/dist/src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.js.map +1 -1
  31. package/dist/src/fields/TiptapEditor/extensions/serverside/TiktokServerside.js.map +1 -1
  32. package/dist/src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.js.map +1 -1
  33. package/dist/src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.js.map +1 -1
  34. package/dist/src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.js.map +1 -1
  35. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js.map +1 -1
  36. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
  37. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.d.ts +2 -2
  38. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.d.ts.map +1 -1
  39. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js +4 -5
  40. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js.map +1 -1
  41. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts +3 -3
  42. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts.map +1 -1
  43. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js +41 -35
  44. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
  45. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts +3 -3
  46. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -1
  47. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +63 -87
  48. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
  49. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts +1 -1
  50. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts.map +1 -1
  51. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js +50 -64
  52. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js.map +1 -1
  53. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.d.ts +11 -0
  54. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.d.ts.map +1 -0
  55. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.js +80 -0
  56. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.js.map +1 -0
  57. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.d.ts +5 -0
  58. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.d.ts.map +1 -0
  59. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.js +67 -0
  60. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.js.map +1 -0
  61. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/utils.js.map +1 -1
  62. package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
  63. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts +397 -0
  64. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts.map +1 -0
  65. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.js +31 -0
  66. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.js.map +1 -0
  67. package/dist/src/fields/TiptapEditor/lib/utils/cssVar.js.map +1 -1
  68. package/dist/src/mobile.css +1 -1
  69. package/dist/src/styles.css +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +30 -27
@@ -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 "lucide-react";
3
- import { checkJsonCompletion, formatCompletion } from "../../../panels/AIEditorPanel/utils.js";
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
- }, checkJsonCompletion(completion) ? formatCompletion(completion) : completion).run();
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, checkJsonCompletion(completion) ? formatCompletion(completion) : completion).run();
29
+ editor.chain().focus().insertContentAt(selection.to + 1, completion?.content ?? []).run();
31
30
  },
32
31
  children: [
33
32
  /*#__PURE__*/ _jsx(TextQuote, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.tsx"],"sourcesContent":["import { Editor } from \"@tiptap/react\";\nimport { Check, TextQuote, TrashIcon } from \"lucide-react\";\nimport { checkJsonCompletion, formatCompletion } from \"../../../panels/AIEditorPanel/utils.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\nconst AICompletionCommands = ({\n completion,\n onDiscard,\n editor,\n}: {\n editor: Editor;\n completion: string;\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 checkJsonCompletion(completion) ? formatCompletion(completion) : completion\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,\n checkJsonCompletion(completion) ? formatCompletion(completion) : completion\n )\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","checkJsonCompletion","formatCompletion","Toolbar","AICompletionCommands","completion","onDiscard","editor","Button","className","value","onClick","selection","view","state","chain","focus","insertContentAt","from","to","run","Divider","horizontal"],"mappings":";AACA,SAASA,KAAK,EAAEC,SAAS,EAAEC,SAAS,QAAQ,eAAe;AAC3D,SAASC,mBAAmB,EAAEC,gBAAgB,QAAQ,yCAAyC;AAC/F,SAASC,OAAO,QAAQ,yBAAyB;AAEjD,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,GACAlB,oBAAoBI,cAAcH,iBAAiBG,cAAcA,YAElEe,GAAG;gBACR;;kCAEA,KAACtB;wBAAMW,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,GAC9BlB,oBAAoBI,cAAcH,iBAAiBG,cAAcA,YAElEe,GAAG;gBACR;;kCAEA,KAACrB;wBAAUU,WAAU;;oBAAkC;;;0BAGzD,KAACN,QAAQkB,OAAO;gBAACC,UAAU;;0BAE3B,MAACnB,QAAQK,MAAM;gBACbG,SAASL;gBACTI,OAAM;gBACND,WAAU;;kCAEV,KAACT;wBAAUS,WAAU;;oBAAkC;;;;;AAK/D;AAEA,eAAeL,qBAAqB"}
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"}
@@ -1,13 +1,13 @@
1
- import { Editor } from "@tiptap/react";
1
+ import { Editor, JSONContent } from '@tiptap/react';
2
2
  interface AISelectorCommandsProps {
3
3
  editor: Editor;
4
- messages?: string;
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, }: AISelectorCommandsProps) => import("react").JSX.Element;
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,CAAC;AAyDvC,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,CAAC;CACX;AAED,QAAA,MAAM,kBAAkB,oCAIrB,uBAAuB,gCA+GzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
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"}
@@ -1,15 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
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, 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";
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: "summarize",
21
- label: "Summarize text",
22
- icon: WrapText
21
+ value: 'improve',
22
+ label: 'Improve writing',
23
+ icon: RefreshCcwDot
23
24
  },
24
25
  {
25
- value: "rewrite",
26
- label: "Rewrite into Axios",
27
- icon: WrapText
26
+ value: 'fix',
27
+ label: 'Fix grammar',
28
+ icon: CheckCheck
28
29
  },
29
30
  {
30
- value: "improve",
31
- label: "Improve writing",
32
- icon: RefreshCcwDot
31
+ value: 'rewrite_with_guidelines',
32
+ label: 'Rewrite per Editorial Guidelines',
33
+ icon: BookText
33
34
  },
34
35
  {
35
- value: "fix",
36
- label: "Fix grammar",
37
- icon: CheckCheck
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: "shorter",
41
- label: "Make shorter",
46
+ value: 'shorter',
47
+ label: 'Make shorter',
42
48
  icon: ArrowDownWideNarrow
43
49
  },
44
50
  {
45
- value: "longer",
46
- label: "Make longer",
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("highlightText") || "Highlight text",
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: "translate",
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 ?? "" : editor.state.doc.textBetween(from, to, " ");
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 ?? "en"
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: "continue",
165
- language: editor?.storage?.aiCommand?.language ?? code ?? "en"
170
+ option: 'continue',
171
+ language: editor?.storage?.aiCommand?.language ?? code ?? 'en'
166
172
  });
167
173
  },
168
174
  value: "continue",
@@ -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 "react";
2
- import { Editor } from "@tiptap/react";
3
- import { Group } from "src/fields/TiptapEditor/extensions/AICommand/types.js";
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":"AAGA,OAAO,KAON,MAAM,OAAO,CAAC;AAKf,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,EAEL,KAAK,EACN,MAAM,uDAAuD,CAAC;AAY/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE,KAAK,EAAE,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,cAAc,qFAsT1B,CAAC"}
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
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useAssistant } from '@ai-sdk/react';
4
- import { ArrowUpCircle, Sparkles } from "lucide-react";
5
- import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
6
- import Markdown from "react-markdown";
7
- import TextareaAutosize from "react-textarea-autosize";
8
- import { useLocale } from "@payloadcms/ui/providers/Locale";
9
- import i18next from "i18next";
10
- import { extractMarkdown } from "../../../lib/extract.js";
11
- import { getPrevText } from "../../../lib/utils/index.js";
12
- import AISelectorCommands from "../../menus/TextMenu/components/ai-selector-commands.js";
13
- import CrazySpinner from "../../ui/crazy-spinner.js";
14
- import { DropdownButton } from "../../ui/Dropdown/Dropdown.js";
15
- import { Icon } from "../../ui/Icon.js";
16
- import { ScrollArea } from "../../ui/scroll-area.js";
17
- import { Surface } from "../../ui/Surface.js";
18
- import { Toolbar } from "../../ui/Toolbar.js";
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 { status, messages, append, input, submitMessage, handleInputChange } = useAssistant({
32
- api: '/api/generate'
30
+ const { object, submit, isLoading } = useObject({
31
+ api: '/api/generate',
32
+ schema: TiptapSchema
33
33
  });
34
- const isLoading = status === 'in_progress';
35
- const assistantMessages = messages?.filter((message)=>{
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
- const editorSelection = editor.state.selection.content().content.toJSON();
44
- if (completion) {
45
- return append({
46
- role: 'user',
47
- content: completion
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 ?? "en"
43
+ language: code ?? 'en',
44
+ selection: object
53
45
  }
54
- }).then(()=>setInputValue(""));
46
+ });
47
+ setInputValue('');
48
+ return;
55
49
  }
56
- const text = getPrevText(editor, {
57
- chars: 5000
58
- });
59
- append({
60
- role: "user",
61
- content: text
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
- }).then(()=>setInputValue(""));
57
+ });
58
+ setInputValue('');
70
59
  }, [
71
60
  code,
72
61
  inputValue,
73
- completion
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 (!isLoading && hasCompletion) {
82
- editor.storage.aiCommand.completion = completion;
71
+ if (hasCompletion) {
72
+ editor.storage.aiCommand.completion = object;
83
73
  }
84
74
  }, [
85
- completion,
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 === "ArrowDown") {
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 === "ArrowUp") {
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 === "Enter") {
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 ? "-mt-72" : ""}`,
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
- hasCompletion && completion?.length > 10 && (checkJsonCompletion(completion) ? !isLoading : true) && /*#__PURE__*/ _jsx("div", {
165
+ markdown && /*#__PURE__*/ _jsx("div", {
179
166
  className: "flex w-full",
180
167
  children: /*#__PURE__*/ _jsx(ScrollArea, {
181
- className: "h-72 prose p-2 px-4 prose-sm w-full max-w-none",
168
+ className: "prose p-2 px-4 prose-sm",
182
169
  dir: i18next.dir(),
183
170
  children: /*#__PURE__*/ _jsx(Markdown, {
184
- children: checkJsonCompletion(completion) ? extractMarkdown({
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: "none"
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("tellAiPlaceholder") || "Tell AI (Beta) what to do next" : i18next.t("askAiPlaceholder") || "Ask AI (Beta) to edit or generate...",
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 === "Enter") handleClick();
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: completion,
232
+ messages: object,
253
233
  onSelect: (value, options)=>{
254
234
  if (options?.option === 'translate') {
255
- append({
256
- role: 'user',
257
- content: value
258
- }, {
259
- data: options
235
+ submit({
236
+ prompt: value,
237
+ body: options
260
238
  });
261
239
  } else {
262
- append({
263
- role: 'user',
264
- content: value
265
- }, {
266
- data: {
240
+ submit({
241
+ prompt: value,
242
+ body: {
267
243
  ...options,
268
244
  source: code
269
245
  }