payload-richtext-tiptap 0.0.42 → 0.0.43
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.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +29 -14
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.js +39 -27
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js +52 -227
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/Paragraph/AIEditorParagraph.d.ts +3 -0
- package/dist/src/fields/TiptapEditor/extensions/Paragraph/AIEditorParagraph.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/Paragraph/AIEditorParagraph.js +35 -0
- package/dist/src/fields/TiptapEditor/extensions/Paragraph/AIEditorParagraph.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js +35 -26
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js +2 -2
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.d.ts +6 -0
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.js +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts +2 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +60 -85
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.js +5 -1
- package/dist/src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.js.map +1 -1
- package/dist/src/styles.css +4 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/extensions/extension-kit.ts"],"sourcesContent":["import {\n AICommand,\n BlockquoteFigure,\n CharacterCount,\n Color,\n Column,\n // emojiSuggestion,\n Columns,\n Document,\n Dropcursor,\n Facebook,\n Figcaption,\n FileHandler,\n Focus,\n FontFamily,\n FontSize,\n Heading,\n Highlight,\n HorizontalRule,\n ImageBlock,\n InsideLinks,\n Instagram,\n Link,\n Linkedin,\n Placeholder,\n Selection,\n SlashCommand,\n StarterKit,\n Subscript,\n Superscript,\n Table,\n TableCell,\n TableHeader,\n TableOfContents,\n TableRow,\n TaskItem,\n TaskList,\n TextAlign,\n TextStyle,\n Tiktok,\n TrailingNode,\n Twitter,\n Typography,\n Underline,\n Youtube,\n} from \"./index.js\";\n\nimport { CodeBlockLowlight } from \"@tiptap/extension-code-block-lowlight\";\nimport lowlight from \"lowlight\";\nimport TextDirection from \"tiptap-text-direction\";\nimport { ImageUpload } from \"./ImageUpload/ImageUpload.js\";\nimport { TableOfContentsNode } from \"./TableOfContentsNode/TableOfContentsNode.js\";\n\nimport History from \"@tiptap/extension-history\";\nimport API from \"../lib/api.js\";\nimport { openAssetHQType } from \"../types.js\";\nimport { Iframe } from \"./Iframe/iframe.js\";\nimport { Markdown } from \"tiptap-markdown\";\n\ninterface ExtensionKitProps {\n dir?: \"rtl\" | \"ltr\";\n openAssetHQHandler: openAssetHQType;\n}\n\nexport const ExtensionKit = ({\n dir,\n openAssetHQHandler,\n}: ExtensionKitProps) => [\n Markdown,\n Document,\n Columns,\n TaskList,\n TaskItem.configure({\n nested: true,\n }),\n Column,\n Selection,\n Heading.configure({\n levels: [1, 2, 3, 4, 5, 6],\n }),\n HorizontalRule,\n StarterKit.configure({\n document: false,\n dropcursor: false,\n heading: false,\n horizontalRule: false,\n blockquote: false,\n history: false,\n codeBlock: false,\n }),\n CodeBlockLowlight.configure({\n lowlight,\n defaultLanguage: null,\n }),\n TextStyle,\n FontSize,\n FontFamily,\n Color,\n TrailingNode,\n Link.configure({\n openOnClick: false,\n }),\n Highlight.configure({ multicolor: true }),\n Underline,\n CharacterCount.configure({ limit: 50000 }),\n TableOfContents,\n TableOfContentsNode,\n ImageUpload.configure({\n openAssetHQHandler,\n }),\n ImageBlock,\n FileHandler.configure({\n allowedMimeTypes: [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"],\n onDrop: (currentEditor, files, pos) => {\n const file = files[0];\n (async () => {\n openAssetHQHandler((url) => {\n currentEditor\n .chain()\n .setImageBlockAt({ pos, src: url })\n .focus()\n .run();\n }, file);\n })();\n },\n onPaste: (currentEditor, files) => {\n files.forEach(async () => {\n const url = await API.uploadImage();\n\n return currentEditor\n .chain()\n .setImageBlockAt({\n pos: currentEditor.state.selection.anchor,\n src: url,\n })\n .focus()\n .run();\n });\n },\n }),\n // Emoji.configure({\n // enableEmoticons: true,\n // suggestion: emojiSuggestion,\n // }),\n TextAlign.extend({\n addKeyboardShortcuts() {\n return {};\n },\n }).configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Subscript,\n Superscript,\n Table,\n TableCell,\n TableHeader,\n TableRow,\n Typography,\n Placeholder.configure({\n includeChildren: true,\n showOnlyCurrent: false,\n placeholder: () => \"\",\n }),\n SlashCommand,\n Focus,\n Figcaption,\n BlockquoteFigure,\n Dropcursor.configure({\n width: 2,\n class: \"ProseMirror-dropcursor border-black\",\n }),\n History,\n Iframe,\n Twitter,\n Tiktok,\n Instagram,\n Facebook,\n Linkedin,\n Youtube,\n
|
|
1
|
+
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/extensions/extension-kit.ts"],"sourcesContent":["import {\n AICommand,\n BlockquoteFigure,\n CharacterCount,\n Color,\n Column,\n // emojiSuggestion,\n Columns,\n Document,\n Dropcursor,\n Facebook,\n Figcaption,\n FileHandler,\n Focus,\n FontFamily,\n FontSize,\n Heading,\n Highlight,\n HorizontalRule,\n ImageBlock,\n InsideLinks,\n Instagram,\n Link,\n Linkedin,\n Placeholder,\n Paragraph,\n Selection,\n SlashCommand,\n StarterKit,\n Subscript,\n Superscript,\n Table,\n TableCell,\n TableHeader,\n TableOfContents,\n TableRow,\n TaskItem,\n TaskList,\n TextAlign,\n TextStyle,\n Tiktok,\n TrailingNode,\n Twitter,\n Typography,\n Underline,\n Youtube,\n} from \"./index.js\";\n\nimport { CodeBlockLowlight } from \"@tiptap/extension-code-block-lowlight\";\nimport lowlight from \"lowlight\";\nimport TextDirection from \"tiptap-text-direction\";\nimport { ImageUpload } from \"./ImageUpload/ImageUpload.js\";\nimport { TableOfContentsNode } from \"./TableOfContentsNode/TableOfContentsNode.js\";\n\nimport History from \"@tiptap/extension-history\";\nimport API from \"../lib/api.js\";\nimport { openAssetHQType } from \"../types.js\";\nimport { Iframe } from \"./Iframe/iframe.js\";\nimport { Markdown } from \"tiptap-markdown\";\n\ninterface ExtensionKitProps {\n dir?: \"rtl\" | \"ltr\";\n openAssetHQHandler: openAssetHQType;\n}\n\nexport const ExtensionKit = ({\n dir,\n openAssetHQHandler,\n}: ExtensionKitProps) => [\n Markdown,\n Document,\n Columns,\n TaskList,\n TaskItem.configure({\n nested: true,\n }),\n Column,\n Selection,\n Heading.configure({\n levels: [1, 2, 3, 4, 5, 6],\n }),\n HorizontalRule,\n StarterKit.configure({\n document: false,\n dropcursor: false,\n heading: false,\n horizontalRule: false,\n blockquote: false,\n history: false,\n codeBlock: false,\n }),\n CodeBlockLowlight.configure({\n lowlight,\n defaultLanguage: null,\n }),\n TextStyle,\n FontSize,\n FontFamily,\n Color,\n TrailingNode,\n Link.configure({\n openOnClick: false,\n }),\n Highlight.configure({ multicolor: true }),\n Underline,\n CharacterCount.configure({ limit: 50000 }),\n TableOfContents,\n TableOfContentsNode,\n ImageUpload.configure({\n openAssetHQHandler,\n }),\n ImageBlock,\n FileHandler.configure({\n allowedMimeTypes: [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"],\n onDrop: (currentEditor, files, pos) => {\n const file = files[0];\n (async () => {\n openAssetHQHandler((url) => {\n currentEditor\n .chain()\n .setImageBlockAt({ pos, src: url })\n .focus()\n .run();\n }, file);\n })();\n },\n onPaste: (currentEditor, files) => {\n files.forEach(async () => {\n const url = await API.uploadImage();\n\n return currentEditor\n .chain()\n .setImageBlockAt({\n pos: currentEditor.state.selection.anchor,\n src: url,\n })\n .focus()\n .run();\n });\n },\n }),\n // Emoji.configure({\n // enableEmoticons: true,\n // suggestion: emojiSuggestion,\n // }),\n TextAlign.extend({\n addKeyboardShortcuts() {\n return {};\n },\n }).configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Subscript,\n Superscript,\n Table,\n TableCell,\n TableHeader,\n TableRow,\n Typography,\n Placeholder.configure({\n includeChildren: true,\n showOnlyCurrent: false,\n placeholder: () => \"\",\n }),\n SlashCommand,\n Focus,\n Figcaption,\n BlockquoteFigure,\n Dropcursor.configure({\n width: 2,\n class: \"ProseMirror-dropcursor border-black\",\n }),\n History,\n Iframe,\n Twitter,\n Tiktok,\n Instagram,\n Facebook,\n Linkedin,\n Youtube,\n Paragraph,\n InsideLinks,\n TextDirection.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n AICommand,\n];\n\nexport default ExtensionKit;\n"],"names":["AICommand","BlockquoteFigure","CharacterCount","Color","Column","Columns","Document","Dropcursor","Facebook","Figcaption","FileHandler","Focus","FontFamily","FontSize","Heading","Highlight","HorizontalRule","ImageBlock","InsideLinks","Instagram","Link","Linkedin","Placeholder","Paragraph","Selection","SlashCommand","StarterKit","Subscript","Superscript","Table","TableCell","TableHeader","TableOfContents","TableRow","TaskItem","TaskList","TextAlign","TextStyle","Tiktok","TrailingNode","Twitter","Typography","Underline","Youtube","CodeBlockLowlight","lowlight","TextDirection","ImageUpload","TableOfContentsNode","History","API","Iframe","Markdown","ExtensionKit","dir","openAssetHQHandler","configure","nested","levels","document","dropcursor","heading","horizontalRule","blockquote","history","codeBlock","defaultLanguage","openOnClick","multicolor","limit","allowedMimeTypes","onDrop","currentEditor","files","pos","file","url","chain","setImageBlockAt","src","focus","run","onPaste","forEach","uploadImage","state","selection","anchor","extend","addKeyboardShortcuts","types","includeChildren","showOnlyCurrent","placeholder","width","class"],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { Editor } from "@tiptap/react";
|
|
2
|
+
export declare const draftPromptOptions: {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon: import("lucide-react").LucideIcon;
|
|
6
|
+
prompt: string;
|
|
7
|
+
}[];
|
|
2
8
|
interface AIDraftSelectorCommandsProps {
|
|
3
9
|
editor: Editor;
|
|
4
10
|
onSelect: (value: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-draft-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-draft-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAWvC,eAAO,MAAM,kBAAkB;;;;;GAwD9B,CAAC;AAEF,UAAU,4BAA4B;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,QAAA,MAAM,uBAAuB,0BAG1B,4BAA4B,gCAkC9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { useAssistant } from "ai/react";
|
|
|
4
4
|
import { ArrowDownWideNarrow, CheckCheck, RefreshCcwDot, WrapText } from "lucide-react";
|
|
5
5
|
import { DropdownCategoryTitle } from "../../../ui/Dropdown/Dropdown.js";
|
|
6
6
|
import { Toolbar } from "../../../ui/Toolbar.js";
|
|
7
|
-
const draftPromptOptions = [
|
|
7
|
+
export const draftPromptOptions = [
|
|
8
8
|
// {
|
|
9
9
|
// value: 'translate',
|
|
10
10
|
// label: 'Translate text',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.tsx"],"sourcesContent":["import { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor } from \"@tiptap/react\";\nimport { useAssistant } from \"ai/react\";\nimport {\n ArrowDownWideNarrow,\n CheckCheck,\n RefreshCcwDot,\n WrapText,\n} from \"lucide-react\";\nimport { DropdownCategoryTitle } from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.tsx"],"sourcesContent":["import { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor } from \"@tiptap/react\";\nimport { useAssistant } from \"ai/react\";\nimport {\n ArrowDownWideNarrow,\n CheckCheck,\n RefreshCcwDot,\n WrapText,\n} from \"lucide-react\";\nimport { DropdownCategoryTitle } from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\nexport const draftPromptOptions = [\n // {\n // value: 'translate',\n // label: 'Translate text',\n // icon: WrapText,\n // },\n {\n value: \"brainstorm\",\n label: \"Brainstorm Ideas...\",\n\n icon: WrapText,\n prompt: \"Brainstorm ideas on \",\n },\n {\n value: \"blog\",\n label: \"Blog post...\",\n\n icon: WrapText,\n prompt: \"Write a blog post about \",\n },\n {\n value: \"outline\",\n label: \"Outline...\",\n\n icon: RefreshCcwDot,\n prompt: \"Write an outline about \",\n },\n\n {\n value: \"social\",\n label: \"Social Media post...\",\n\n icon: CheckCheck,\n prompt: \"Write a social media post about \",\n },\n {\n value: \"press\",\n label: \"Press release...\",\n\n icon: ArrowDownWideNarrow,\n prompt: \"Write a press release about \",\n },\n {\n value: \"creative\",\n label: \"Creative Story...\",\n\n icon: WrapText,\n prompt: \"Write a creative story about \",\n },\n {\n value: \"essay\",\n label: \"Essay...\",\n\n icon: WrapText,\n prompt: \"Write an essay about \",\n },\n];\n\ninterface AIDraftSelectorCommandsProps {\n editor: Editor;\n onSelect: (value: string) => void;\n}\n\nconst AIDraftSelectorCommands = ({\n onSelect,\n editor,\n}: AIDraftSelectorCommandsProps) => {\n const { status, messages, input, submitMessage, handleInputChange } =\n useAssistant({\n api: \"/api/assistant\",\n });\n const { code } = useLocale();\n\n return (\n <>\n <DropdownCategoryTitle>Draft with AI</DropdownCategoryTitle>\n <Toolbar.Divider horizontal />\n\n {draftPromptOptions.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 content = editor.state.doc.textBetween(from, to, \" \");\n onSelect(option.prompt);\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 </Toolbar.Button>\n ))}\n </>\n );\n};\n\nexport default AIDraftSelectorCommands;\n"],"names":["useLocale","useAssistant","ArrowDownWideNarrow","CheckCheck","RefreshCcwDot","WrapText","DropdownCategoryTitle","Toolbar","draftPromptOptions","value","label","icon","prompt","AIDraftSelectorCommands","onSelect","editor","status","messages","input","submitMessage","handleInputChange","api","code","Divider","horizontal","map","option","Button","onClick","from","to","empty","state","selection","className"],"mappings":";AAAA,SAASA,SAAS,QAAQ,kCAAkC;AAE5D,SAASC,YAAY,QAAQ,WAAW;AACxC,SACEC,mBAAmB,EACnBC,UAAU,EACVC,aAAa,EACbC,QAAQ,QACH,eAAe;AACtB,SAASC,qBAAqB,QAAQ,mCAAmC;AACzE,SAASC,OAAO,QAAQ,yBAAyB;AAEjD,OAAO,MAAMC,qBAAqB;IAChC,IAAI;IACJ,wBAAwB;IACxB,6BAA6B;IAC7B,oBAAoB;IACpB,KAAK;IACL;QACEC,OAAO;QACPC,OAAO;QAEPC,MAAMN;QACNO,QAAQ;IACV;IACA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMN;QACNO,QAAQ;IACV;IACA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMP;QACNQ,QAAQ;IACV;IAEA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMR;QACNS,QAAQ;IACV;IACA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMT;QACNU,QAAQ;IACV;IACA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMN;QACNO,QAAQ;IACV;IACA;QACEH,OAAO;QACPC,OAAO;QAEPC,MAAMN;QACNO,QAAQ;IACV;CACD,CAAC;AAOF,MAAMC,0BAA0B,CAAC,EAC/BC,QAAQ,EACRC,MAAM,EACuB;IAC7B,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,aAAa,EAAEC,iBAAiB,EAAE,GACjEnB,aAAa;QACXoB,KAAK;IACP;IACF,MAAM,EAAEC,IAAI,EAAE,GAAGtB;IAEjB,qBACE;;0BACE,KAACM;0BAAsB;;0BACvB,KAACC,QAAQgB,OAAO;gBAACC,UAAU;;YAE1BhB,mBAAmBiB,GAAG,CAAC,CAACC,uBACvB,MAACnB,QAAQoB,MAAM;oBACb,yBAAyB;oBACzB,mDAAmD;oBACnD,6EAA6E;oBAC7E,iCAAiC;oBACjC,KAAK;oBACLC,SAAS;wBACP,MAAM,EAAEC,IAAI,EAAEC,EAAE,EAAEC,KAAK,EAAE,GAAGhB,OAAOiB,KAAK,CAACC,SAAS;wBAClD,+DAA+D;wBAC/DnB,SAASY,OAAOd,MAAM;oBACxB;oBACAsB,WAAU;oBAEVzB,OAAOiB,OAAOjB,KAAK;;sCAEnB,KAACiB,OAAOf,IAAI;4BAACuB,WAAU;;wBACtBR,OAAOhB,KAAK;;mBAJRgB,OAAOjB,KAAK;;;AAS3B;AAEA,eAAeI,wBAAwB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Editor } from "@tiptap/react";
|
|
2
2
|
export type AICommandPanelProps = {
|
|
3
3
|
editor: Editor;
|
|
4
|
+
userPrompt?: string;
|
|
4
5
|
onOpenChange: (value: boolean) => void;
|
|
5
6
|
};
|
|
6
|
-
export declare const AICommandPanel: ({ editor, onOpenChange, }: AICommandPanelProps) => import("react").JSX.Element;
|
|
7
|
+
export declare const AICommandPanel: ({ editor, onOpenChange, userPrompt, ...restProps }: AICommandPanelProps) => import("react").JSX.Element;
|
|
7
8
|
//# sourceMappingURL=AICommandPanel.d.ts.map
|
|
@@ -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":"AASA,OAAO,EAAE,MAAM,EAA4B,MAAM,eAAe,CAAC;AAajE,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;CACxC,CAAC;AAEF,eAAO,MAAM,cAAc,uDAKxB,mBAAmB,gCAiLrB,CAAC"}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useLocale } from "@payloadcms/ui/providers/Locale";
|
|
4
|
-
import { useEditor } from "@tiptap/react";
|
|
5
3
|
import { useCompletion } from "ai/react";
|
|
6
|
-
import {
|
|
4
|
+
import { ArrowUpCircle, Sparkles } from "lucide-react";
|
|
7
5
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
6
|
+
import Markdown from "react-markdown";
|
|
8
7
|
import TextareaAutosize from "react-textarea-autosize";
|
|
9
|
-
import {
|
|
8
|
+
import { useLocale } from "@payloadcms/ui/providers/Locale";
|
|
10
9
|
import { getPrevText } from "../../../lib/utils/index.js";
|
|
11
10
|
import { isRTL } from "../../../lib/utils/isRtl.js";
|
|
12
|
-
import AICompletionCommands from "../../menus/TextMenu/components/ai-completion-command.js";
|
|
13
|
-
import { Surface } from "../../ui/Surface.js";
|
|
14
|
-
import { Toolbar } from "../../ui/Toolbar.js";
|
|
15
11
|
import CrazySpinner from "../../ui/crazy-spinner.js";
|
|
16
12
|
import { ScrollArea } from "../../ui/scroll-area.js";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
export const AICommandPanel = ({ editor, onOpenChange })=>{
|
|
20
|
-
const [inputValue, setInputValue] = useState("");
|
|
13
|
+
import { Surface } from "../../ui/Surface.js";
|
|
14
|
+
import { Toolbar } from "../../ui/Toolbar.js";
|
|
15
|
+
export const AICommandPanel = ({ editor, onOpenChange, userPrompt, ...restProps })=>{
|
|
16
|
+
const [inputValue, setInputValue] = useState(userPrompt ?? "");
|
|
21
17
|
const { code } = useLocale();
|
|
22
18
|
const { view } = editor;
|
|
23
19
|
const editorNode = view.dom;
|
|
@@ -75,37 +71,25 @@ export const AICommandPanel = ({ editor, onOpenChange })=>{
|
|
|
75
71
|
inputValue
|
|
76
72
|
]);
|
|
77
73
|
useEffect(()=>{
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
if (userPrompt) setInputValue(userPrompt);
|
|
75
|
+
}, [
|
|
76
|
+
userPrompt
|
|
77
|
+
]);
|
|
78
|
+
useEffect(()=>{
|
|
79
|
+
editor.storage.aiCommand.completion = completion;
|
|
80
|
+
// if (!isLoading && completion) {
|
|
81
|
+
// const selection = editor.state.selection;
|
|
82
|
+
// editor
|
|
83
|
+
// .chain()
|
|
84
|
+
// .focus()
|
|
85
|
+
// .insertContentAt(selection.to - 1, completion)
|
|
86
|
+
// .insertContentAt(selection.to, " ")
|
|
87
|
+
// .run();
|
|
88
|
+
// }
|
|
82
89
|
}, [
|
|
83
90
|
completion,
|
|
84
91
|
isLoading
|
|
85
92
|
]);
|
|
86
|
-
const editorMarkdown = useEditor({
|
|
87
|
-
content: completion ?? "",
|
|
88
|
-
autofocus: true,
|
|
89
|
-
onCreate: ({ editor })=>{
|
|
90
|
-
// provider?.on('synced', () => {
|
|
91
|
-
// if (editor.isEmpty) {
|
|
92
|
-
// editor.commands.setContent(initialContent)
|
|
93
|
-
// }
|
|
94
|
-
// })
|
|
95
|
-
},
|
|
96
|
-
extensions: [
|
|
97
|
-
StarterKit,
|
|
98
|
-
Markdown
|
|
99
|
-
],
|
|
100
|
-
editorProps: {
|
|
101
|
-
attributes: {
|
|
102
|
-
autocomplete: "off",
|
|
103
|
-
autocorrect: "off",
|
|
104
|
-
autocapitalize: "off",
|
|
105
|
-
class: "min-h-full"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}, []);
|
|
109
93
|
return /*#__PURE__*/ _jsx(Surface, {
|
|
110
94
|
className: `p-2 min-w-[20rem] flex flex-col gap-2 `,
|
|
111
95
|
style: {
|
|
@@ -118,7 +102,10 @@ export const AICommandPanel = ({ editor, onOpenChange })=>{
|
|
|
118
102
|
children: /*#__PURE__*/ _jsx(ScrollArea, {
|
|
119
103
|
children: /*#__PURE__*/ _jsx("div", {
|
|
120
104
|
className: "prose p-2 px-4 prose-sm",
|
|
121
|
-
dir: isRTL(completion) ? "rtl" : "ltr"
|
|
105
|
+
dir: isRTL(completion) ? "rtl" : "ltr",
|
|
106
|
+
children: /*#__PURE__*/ _jsx(Markdown, {
|
|
107
|
+
children: completion
|
|
108
|
+
})
|
|
122
109
|
})
|
|
123
110
|
})
|
|
124
111
|
}),
|
|
@@ -138,52 +125,40 @@ export const AICommandPanel = ({ editor, onOpenChange })=>{
|
|
|
138
125
|
})
|
|
139
126
|
]
|
|
140
127
|
}),
|
|
141
|
-
!isLoading && /*#__PURE__*/
|
|
142
|
-
children:
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
editor.chain().unsetHighlight().focus().run();
|
|
176
|
-
onOpenChange(false);
|
|
177
|
-
},
|
|
178
|
-
completion: completion
|
|
179
|
-
}) : /*#__PURE__*/ _jsx(AIDraftSelectorCommands, {
|
|
180
|
-
editor: editor,
|
|
181
|
-
onSelect: (value)=>{
|
|
182
|
-
setInputValue(value);
|
|
183
|
-
inputRef.current.focus();
|
|
184
|
-
}
|
|
185
|
-
})
|
|
186
|
-
]
|
|
128
|
+
!isLoading && /*#__PURE__*/ _jsx(_Fragment, {
|
|
129
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
130
|
+
className: "flex justify-between items-center ",
|
|
131
|
+
children: [
|
|
132
|
+
/*#__PURE__*/ _jsx(Sparkles, {
|
|
133
|
+
className: "mr-2 h-4 w-4 shrink-0 text-blue-500 "
|
|
134
|
+
}),
|
|
135
|
+
/*#__PURE__*/ _jsx(TextareaAutosize, {
|
|
136
|
+
ref: inputRef,
|
|
137
|
+
style: {
|
|
138
|
+
resize: "none"
|
|
139
|
+
},
|
|
140
|
+
className: "w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none outline-none border-0 ",
|
|
141
|
+
value: inputValue,
|
|
142
|
+
onChange: (e)=>{
|
|
143
|
+
editor.storage.aiCommand.userPrompt = e.target.value;
|
|
144
|
+
setInputValue(e.target.value);
|
|
145
|
+
},
|
|
146
|
+
placeholder: hasCompletion ? "Tell AI what to do next" : "Ask AI to edit or generate...",
|
|
147
|
+
autoFocus: true,
|
|
148
|
+
// onFocus={() => {
|
|
149
|
+
// addAIHighlight(editor)}}
|
|
150
|
+
onKeyDown: (e)=>{
|
|
151
|
+
if (e.key === "Enter") handleClick();
|
|
152
|
+
}
|
|
153
|
+
}),
|
|
154
|
+
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
155
|
+
// size="icon"
|
|
156
|
+
// className="absolute right-2 top-1/2 h-6 w-6 -translate-y-1/2 rounded-full bg-zinc-100 hover:bg-zinc-150"
|
|
157
|
+
onClick: handleClick,
|
|
158
|
+
children: /*#__PURE__*/ _jsx(ArrowUpCircle, {})
|
|
159
|
+
})
|
|
160
|
+
]
|
|
161
|
+
})
|
|
187
162
|
})
|
|
188
163
|
]
|
|
189
164
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor, EditorContent, useEditor } from \"@tiptap/react\";\nimport { useCompletion } from \"ai/react\";\nimport { ArrowRight, Sparkles } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport TextareaAutosize from \"react-textarea-autosize\";\n\nimport { Markdown } from \"tiptap-markdown\";\nimport { getPrevText } from \"../../../lib/utils/index.js\";\nimport { isRTL } from \"../../../lib/utils/isRtl.js\";\nimport AICompletionCommands from \"../../menus/TextMenu/components/ai-completion-command.js\";\nimport AISelectorCommands from \"../../menus/TextMenu/components/ai-selector-commands.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport CrazySpinner from \"../../ui/crazy-spinner.js\";\nimport { ScrollArea } from \"../../ui/scroll-area.js\";\nimport AIDraftSelectorCommands from \"../../menus/TextMenu/components/ai-draft-selector-commands.js\";\nimport StarterKit from \"@tiptap/starter-kit\";\nexport type AICommandPanelProps = {\n editor: Editor;\n onOpenChange: (value: boolean) => void;\n};\n\nexport const AICommandPanel = ({\n editor,\n onOpenChange,\n}: AICommandPanelProps) => {\n const [inputValue, setInputValue] = useState(\"\");\n const { code } = useLocale();\n const { view } = editor;\n\n const editorNode = view.dom as HTMLElement;\n const boundigClient = editorNode.getBoundingClientRect();\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n // const { status, messages, input, submitMessage, handleInputChange } = useAssistant({\n // // id: \"novel\",\n // api: \"/api/assistant\",\n // onResponse: (response) => {\n // if (response.status === 429) {\n // toast.error(\"You have reached your request limit for the day.\");\n // return;\n // }\n // },\n // onError: (e) => {\n // toast.error(e.message);\n // },\n // });\n\n const { completion, complete, isLoading } = useCompletion({\n // id: \"novel\",\n api: \"/api/generate\",\n onResponse: (response) => {\n if (response.status === 429) {\n console.log(\"You have reached your request limit for the day.\");\n\n return;\n }\n },\n\n onError: (e) => {\n console.log(\"ERROR\", e.message);\n },\n });\n\n const hasCompletion = completion.length > 0;\n const handleClick = useCallback(() => {\n if (completion) {\n return complete(completion, {\n body: { option: \"zap\", command: inputValue, language: code ?? \"en\" },\n }).then(() => setInputValue(\"\"));\n }\n const text = getPrevText(editor, { chars: 5000 });\n\n complete(text, {\n body: { option: \"zap\", command: inputValue, language: code ?? \"en\" },\n }).then(() => setInputValue(\"\"));\n }, [code, inputValue]);\n\n useEffect(() => {\n if (!isLoading && completion) {\n const selection = editor.state.selection;\n editor\n .chain()\n .focus()\n .insertContentAt(selection.to - 1, completion)\n .insertContentAt(selection.to, \" \")\n .run();\n }\n }, [completion, isLoading]);\n\n const editorMarkdown = useEditor(\n {\n content: completion ?? \"\",\n autofocus: true,\n onCreate: ({ editor }) => {\n // provider?.on('synced', () => {\n // if (editor.isEmpty) {\n // editor.commands.setContent(initialContent)\n // }\n // })\n },\n\n extensions: [StarterKit, Markdown],\n editorProps: {\n attributes: {\n autocomplete: \"off\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n class: \"min-h-full\",\n },\n },\n },\n []\n );\n return (\n <Surface\n className={`p-2 min-w-[20rem] flex flex-col gap-2 `}\n style={{\n width: boundigClient?.width,\n }}\n >\n <>\n {hasCompletion && (\n <div className=\"flex w-full\">\n <ScrollArea>\n <div\n className=\"prose p-2 px-4 prose-sm\"\n dir={isRTL(completion) ? \"rtl\" : \"ltr\"}\n >\n {/* <Markdown>{completion}</Markdown> */}\n </div>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div\n className=\"flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500\"\n style={{\n width: boundigClient?.width,\n }}\n >\n <Sparkles className=\"mr-2 h-4 w-4 shrink-0 \" />\n AI is thinking\n <div className=\"ml-2 mt-1\">\n <CrazySpinner />\n </div>\n </div>\n )}\n\n {!isLoading && (\n <>\n <div className=\"flex justify-between items-center \">\n {/* <CommandInput\n value={inputValue}\n onValueChange={setInputValue}\n autoFocus\n placeholder={\n hasCompletion ? 'Tell AI what to do next' : 'Ask AI to edit or generate...'\n }\n // onFocus={() => addAIHighlight(editor)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleClick()\n }}\n /> */}\n <Sparkles className=\"mr-2 h-4 w-4 shrink-0 text-blue-500 \" />\n <TextareaAutosize\n ref={inputRef}\n className=\"w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n }}\n placeholder={\n hasCompletion\n ? \"Tell AI what to do next\"\n : \"Ask AI to edit or generate...\"\n }\n autoFocus\n // onFocus={() => {\n // addAIHighlight(editor)}}\n\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n />\n <Toolbar.Button\n // size=\"icon\"\n\n // className=\"absolute right-2 top-1/2 h-6 w-6 -translate-y-1/2 rounded-full bg-zinc-100 hover:bg-zinc-150\"\n onClick={handleClick}\n >\n <ArrowRight />\n </Toolbar.Button>\n </div>\n {hasCompletion ? (\n <AICompletionCommands\n editor={editor}\n onDiscard={() => {\n editor.chain().unsetHighlight().focus().run();\n onOpenChange(false);\n }}\n completion={completion}\n />\n ) : (\n <AIDraftSelectorCommands\n editor={editor}\n onSelect={(value) => {\n setInputValue(value);\n inputRef.current.focus();\n }}\n />\n )}\n </>\n )}\n </>\n </Surface>\n );\n};\n"],"names":["useLocale","useEditor","useCompletion","ArrowRight","Sparkles","useCallback","useEffect","useRef","useState","TextareaAutosize","Markdown","getPrevText","isRTL","AICompletionCommands","Surface","Toolbar","CrazySpinner","ScrollArea","AIDraftSelectorCommands","StarterKit","AICommandPanel","editor","onOpenChange","inputValue","setInputValue","code","view","editorNode","dom","boundigClient","getBoundingClientRect","inputRef","completion","complete","isLoading","api","onResponse","response","status","console","log","onError","e","message","hasCompletion","length","handleClick","body","option","command","language","then","text","chars","selection","state","chain","focus","insertContentAt","to","run","editorMarkdown","content","autofocus","onCreate","extensions","editorProps","attributes","autocomplete","autocorrect","autocapitalize","class","className","style","width","div","dir","ref","value","onChange","target","placeholder","autoFocus","onKeyDown","key","Button","onClick","onDiscard","unsetHighlight","onSelect","current"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCompletion } from \"ai/react\";\nimport { ArrowRight, ArrowUpCircle, Sparkles } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport Markdown from \"react-markdown\";\nimport TextareaAutosize from \"react-textarea-autosize\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor, EditorContent, useEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\n\nimport { getPrevText } from \"../../../lib/utils/index.js\";\nimport { isRTL } from \"../../../lib/utils/isRtl.js\";\nimport AICompletionCommands from \"../../menus/TextMenu/components/ai-completion-command.js\";\nimport AIDraftSelectorCommands from \"../../menus/TextMenu/components/ai-draft-selector-commands.js\";\nimport AISelectorCommands from \"../../menus/TextMenu/components/ai-selector-commands.js\";\nimport CrazySpinner from \"../../ui/crazy-spinner.js\";\nimport { ScrollArea } from \"../../ui/scroll-area.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\n\nexport type AICommandPanelProps = {\n editor: Editor;\n userPrompt?: string;\n onOpenChange: (value: boolean) => void;\n};\n\nexport const AICommandPanel = ({\n editor,\n onOpenChange,\n userPrompt,\n ...restProps\n}: AICommandPanelProps) => {\n const [inputValue, setInputValue] = useState(userPrompt ?? \"\");\n const { code } = useLocale();\n const { view } = editor;\n\n const editorNode = view.dom as HTMLElement;\n const boundigClient = editorNode.getBoundingClientRect();\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n // const { status, messages, input, submitMessage, handleInputChange } = useAssistant({\n // // id: \"novel\",\n // api: \"/api/assistant\",\n // onResponse: (response) => {\n // if (response.status === 429) {\n // toast.error(\"You have reached your request limit for the day.\");\n // return;\n // }\n // },\n // onError: (e) => {\n // toast.error(e.message);\n // },\n // });\n\n const { completion, complete, isLoading } = useCompletion({\n // id: \"novel\",\n api: \"/api/generate\",\n onResponse: (response) => {\n if (response.status === 429) {\n console.log(\"You have reached your request limit for the day.\");\n\n return;\n }\n },\n\n onError: (e) => {\n console.log(\"ERROR\", e.message);\n },\n });\n\n const hasCompletion = completion.length > 0;\n const handleClick = useCallback(() => {\n if (completion) {\n return complete(completion, {\n body: { option: \"zap\", command: inputValue, language: code ?? \"en\" },\n }).then(() => setInputValue(\"\"));\n }\n const text = getPrevText(editor, { chars: 5000 });\n\n complete(text, {\n body: { option: \"zap\", command: inputValue, language: code ?? \"en\" },\n }).then(() => setInputValue(\"\"));\n }, [code, inputValue]);\n\n useEffect(() => {\n if (userPrompt) setInputValue(userPrompt);\n }, [userPrompt]);\n useEffect(() => {\n editor.storage.aiCommand.completion = completion;\n // if (!isLoading && completion) {\n // const selection = editor.state.selection;\n // editor\n // .chain()\n // .focus()\n // .insertContentAt(selection.to - 1, completion)\n // .insertContentAt(selection.to, \" \")\n // .run();\n\n // }\n }, [completion, isLoading]);\n\n return (\n <Surface\n className={`p-2 min-w-[20rem] flex flex-col gap-2 `}\n style={{\n width: boundigClient?.width,\n }}\n >\n <>\n {hasCompletion && (\n <div className=\"flex w-full\">\n <ScrollArea>\n <div\n className=\"prose p-2 px-4 prose-sm\"\n dir={isRTL(completion) ? \"rtl\" : \"ltr\"}\n >\n <Markdown>{completion}</Markdown>\n </div>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div\n className=\"flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500\"\n style={{\n width: boundigClient?.width,\n }}\n >\n <Sparkles className=\"mr-2 h-4 w-4 shrink-0 \" />\n AI is thinking\n <div className=\"ml-2 mt-1\">\n <CrazySpinner />\n </div>\n </div>\n )}\n\n {!isLoading && (\n <>\n <div className=\"flex justify-between items-center \">\n {/* <CommandInput\n value={inputValue}\n onValueChange={setInputValue}\n autoFocus\n placeholder={\n hasCompletion ? 'Tell AI what to do next' : 'Ask AI to edit or generate...'\n }\n // onFocus={() => addAIHighlight(editor)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleClick()\n }}\n /> */}\n <Sparkles className=\"mr-2 h-4 w-4 shrink-0 text-blue-500 \" />\n <TextareaAutosize\n ref={inputRef}\n style={{ resize: \"none\" }}\n className=\"w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none outline-none border-0 \"\n value={inputValue}\n onChange={(e) => {\n editor.storage.aiCommand.userPrompt = e.target.value;\n\n setInputValue(e.target.value);\n }}\n placeholder={\n hasCompletion\n ? \"Tell AI what to do next\"\n : \"Ask AI to edit or generate...\"\n }\n autoFocus\n // onFocus={() => {\n // addAIHighlight(editor)}}\n\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n />\n <Toolbar.Button\n // size=\"icon\"\n\n // className=\"absolute right-2 top-1/2 h-6 w-6 -translate-y-1/2 rounded-full bg-zinc-100 hover:bg-zinc-150\"\n onClick={handleClick}\n >\n <ArrowUpCircle />\n </Toolbar.Button>\n </div>\n {/* {hasCompletion ? (\n <AICompletionCommands\n editor={editor}\n onDiscard={() => {\n editor.chain().unsetHighlight().focus().run();\n onOpenChange(false);\n }}\n completion={completion}\n />\n ) : (\n <AIDraftSelectorCommands\n editor={editor}\n onSelect={(value) => {\n setInputValue(value);\n inputRef.current.focus();\n }}\n />\n )} */}\n </>\n )}\n </>\n </Surface>\n );\n};\n"],"names":["useCompletion","ArrowUpCircle","Sparkles","useCallback","useEffect","useRef","useState","Markdown","TextareaAutosize","useLocale","getPrevText","isRTL","CrazySpinner","ScrollArea","Surface","Toolbar","AICommandPanel","editor","onOpenChange","userPrompt","restProps","inputValue","setInputValue","code","view","editorNode","dom","boundigClient","getBoundingClientRect","inputRef","completion","complete","isLoading","api","onResponse","response","status","console","log","onError","e","message","hasCompletion","length","handleClick","body","option","command","language","then","text","chars","storage","aiCommand","className","style","width","div","dir","ref","resize","value","onChange","target","placeholder","autoFocus","onKeyDown","key","Button","onClick"],"mappings":"AAAA;;AAEA,SAASA,aAAa,QAAQ,WAAW;AACzC,SAAqBC,aAAa,EAAEC,QAAQ,QAAQ,eAAe;AACnE,SAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AACjE,OAAOC,cAAc,iBAAiB;AACtC,OAAOC,sBAAsB,0BAA0B;AAEvD,SAASC,SAAS,QAAQ,kCAAkC;AAI5D,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,KAAK,QAAQ,8BAA8B;AAIpD,OAAOC,kBAAkB,4BAA4B;AACrD,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,OAAO,QAAQ,sBAAsB;AAQ9C,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,YAAY,EACZC,UAAU,EACV,GAAGC,WACiB;IACpB,MAAM,CAACC,YAAYC,cAAc,GAAGhB,SAASa,cAAc;IAC3D,MAAM,EAAEI,IAAI,EAAE,GAAGd;IACjB,MAAM,EAAEe,IAAI,EAAE,GAAGP;IAEjB,MAAMQ,aAAaD,KAAKE,GAAG;IAC3B,MAAMC,gBAAgBF,WAAWG,qBAAqB;IACtD,MAAMC,WAAWxB,OAA4B;IAE7C,uFAAuF;IACvF,oBAAoB;IACpB,2BAA2B;IAC3B,gCAAgC;IAChC,qCAAqC;IACrC,yEAAyE;IACzE,gBAAgB;IAChB,QAAQ;IACR,OAAO;IACP,sBAAsB;IACtB,8BAA8B;IAC9B,OAAO;IACP,MAAM;IAEN,MAAM,EAAEyB,UAAU,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGhC,cAAc;QACxD,eAAe;QACfiC,KAAK;QACLC,YAAY,CAACC;YACX,IAAIA,SAASC,MAAM,KAAK,KAAK;gBAC3BC,QAAQC,GAAG,CAAC;gBAEZ;YACF;QACF;QAEAC,SAAS,CAACC;YACRH,QAAQC,GAAG,CAAC,SAASE,EAAEC,OAAO;QAChC;IACF;IAEA,MAAMC,gBAAgBZ,WAAWa,MAAM,GAAG;IAC1C,MAAMC,cAAczC,YAAY;QAC9B,IAAI2B,YAAY;YACd,OAAOC,SAASD,YAAY;gBAC1Be,MAAM;oBAAEC,QAAQ;oBAAOC,SAAS1B;oBAAY2B,UAAUzB,QAAQ;gBAAK;YACrE,GAAG0B,IAAI,CAAC,IAAM3B,cAAc;QAC9B;QACA,MAAM4B,OAAOxC,YAAYO,QAAQ;YAAEkC,OAAO;QAAK;QAE/CpB,SAASmB,MAAM;YACbL,MAAM;gBAAEC,QAAQ;gBAAOC,SAAS1B;gBAAY2B,UAAUzB,QAAQ;YAAK;QACrE,GAAG0B,IAAI,CAAC,IAAM3B,cAAc;IAC9B,GAAG;QAACC;QAAMF;KAAW;IAErBjB,UAAU;QACR,IAAIe,YAAYG,cAAcH;IAChC,GAAG;QAACA;KAAW;IACff,UAAU;QACRa,OAAOmC,OAAO,CAACC,SAAS,CAACvB,UAAU,GAAGA;IACtC,kCAAkC;IAClC,4CAA4C;IAC5C,SAAS;IACT,aAAa;IACb,aAAa;IACb,mDAAmD;IACnD,wCAAwC;IACxC,YAAY;IAEZ,IAAI;IACN,GAAG;QAACA;QAAYE;KAAU;IAE1B,qBACE,KAAClB;QACCwC,WAAW,CAAC,uCAAuC,CAAC;QACpDC,OAAO;YACLC,OAAO7B,eAAe6B;QACxB;kBAEA,cAAA;;gBACGd,+BACC,KAACe;oBAAIH,WAAU;8BACb,cAAA,KAACzC;kCACC,cAAA,KAAC4C;4BACCH,WAAU;4BACVI,KAAK/C,MAAMmB,cAAc,QAAQ;sCAEjC,cAAA,KAACvB;0CAAUuB;;;;;gBAMlBE,2BACC,MAACyB;oBACCH,WAAU;oBACVC,OAAO;wBACLC,OAAO7B,eAAe6B;oBACxB;;sCAEA,KAACtD;4BAASoD,WAAU;;wBAA4B;sCAEhD,KAACG;4BAAIH,WAAU;sCACb,cAAA,KAAC1C;;;;gBAKN,CAACoB,2BACA;8BACE,cAAA,MAACyB;wBAAIH,WAAU;;0CAab,KAACpD;gCAASoD,WAAU;;0CACpB,KAAC9C;gCACCmD,KAAK9B;gCACL0B,OAAO;oCAAEK,QAAQ;gCAAO;gCACxBN,WAAU;gCACVO,OAAOxC;gCACPyC,UAAU,CAACtB;oCACTvB,OAAOmC,OAAO,CAACC,SAAS,CAAClC,UAAU,GAAGqB,EAAEuB,MAAM,CAACF,KAAK;oCAEpDvC,cAAckB,EAAEuB,MAAM,CAACF,KAAK;gCAC9B;gCACAG,aACEtB,gBACI,4BACA;gCAENuB,SAAS;gCACT,mBAAmB;gCACnB,6BAA6B;gCAE7BC,WAAW,CAAC1B;oCACV,IAAIA,EAAE2B,GAAG,KAAK,SAASvB;gCACzB;;0CAEF,KAAC7B,QAAQqD,MAAM;gCACb,cAAc;gCAEd,4GAA4G;gCAC5GC,SAASzB;0CAET,cAAA,KAAC3C;;;;;;;;AA0BjB,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,qBAAqB,kBAE/B;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,sBAMA,CAAC;AAEF,eAAO,MAAM,cAAc,0DAMxB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,
|
|
1
|
+
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,qBAAqB,kBAE/B;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,sBAMA,CAAC;AAEF,eAAO,MAAM,cAAc,0DAMxB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,sBA0BA,CAAC"}
|
|
@@ -13,7 +13,11 @@ export const DropdownButton = ({ children, isActive, onClick, disabled, classNam
|
|
|
13
13
|
type: "button",
|
|
14
14
|
className: buttonClass,
|
|
15
15
|
disabled: disabled,
|
|
16
|
-
onClick:
|
|
16
|
+
onClick: (e)=>{
|
|
17
|
+
e.preventDefault();
|
|
18
|
+
e.stopPropagation();
|
|
19
|
+
onClick();
|
|
20
|
+
},
|
|
17
21
|
children: children
|
|
18
22
|
});
|
|
19
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn } from \"../../../lib/utils/index.js\";\n\nexport const DropdownCategoryTitle = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n return (\n <div className=\"text-[.65rem] font-semibold mb-1 uppercase text-neutral-500 dark:text-neutral-400 px-1.5\">\n {children}\n </div>\n );\n};\n\nexport const DropdownButton = ({\n children,\n isActive,\n onClick,\n disabled,\n className,\n}: {\n children: React.ReactNode;\n isActive?: boolean;\n onClick?: () => void;\n disabled?: boolean;\n className?: string;\n}) => {\n const buttonClass = cn(\n \"flex items-center gap-2 p-1.5 text-sm font-medium text-neutral-500 dark:text-neutral-400 text-left bg-transparent w-full rounded outline-none\",\n !isActive && !disabled,\n \"hover:bg-neutral-100 hover:text-neutral-800 dark:hover:bg-neutral-900 dark:hover:text-neutral-200\",\n isActive &&\n !disabled &&\n \"bg-neutral-100 text-neutral-800 dark:bg-neutral-900 dark:text-neutral-200\",\n disabled && \"text-neutral-400 cursor-not-allowed dark:text-neutral-600\",\n className\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClass}\n disabled={disabled}\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n"],"names":["React","cn","DropdownCategoryTitle","children","div","className","DropdownButton","isActive","onClick","disabled","buttonClass","button","type"],"mappings":";AAAA,OAAOA,WAAW,QAAQ;AAC1B,SAASC,EAAE,QAAQ,8BAA8B;AAEjD,OAAO,MAAMC,wBAAwB,CAAC,EACpCC,QAAQ,EAGT;IACC,qBACE,KAACC;QAAIC,WAAU;kBACZF;;AAGP,EAAE;AAEF,OAAO,MAAMG,iBAAiB,CAAC,EAC7BH,QAAQ,EACRI,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRJ,SAAS,EAOV;IACC,MAAMK,cAAcT,GAClB,iJACA,CAACM,YAAY,CAACE,UACd,qGACAF,YACE,CAACE,YACD,6EACFA,YAAY,6DACZJ;IAGF,qBACE,KAACM;QACCC,MAAK;QACLP,WAAWK;QACXD,UAAUA;QACVD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn } from \"../../../lib/utils/index.js\";\n\nexport const DropdownCategoryTitle = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n return (\n <div className=\"text-[.65rem] font-semibold mb-1 uppercase text-neutral-500 dark:text-neutral-400 px-1.5\">\n {children}\n </div>\n );\n};\n\nexport const DropdownButton = ({\n children,\n isActive,\n onClick,\n disabled,\n className,\n}: {\n children: React.ReactNode;\n isActive?: boolean;\n onClick?: () => void;\n disabled?: boolean;\n className?: string;\n}) => {\n const buttonClass = cn(\n \"flex items-center gap-2 p-1.5 text-sm font-medium text-neutral-500 dark:text-neutral-400 text-left bg-transparent w-full rounded outline-none\",\n !isActive && !disabled,\n \"hover:bg-neutral-100 hover:text-neutral-800 dark:hover:bg-neutral-900 dark:hover:text-neutral-200\",\n isActive &&\n !disabled &&\n \"bg-neutral-100 text-neutral-800 dark:bg-neutral-900 dark:text-neutral-200\",\n disabled && \"text-neutral-400 cursor-not-allowed dark:text-neutral-600\",\n className\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClass}\n disabled={disabled}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick();\n }}\n >\n {children}\n </button>\n );\n};\n"],"names":["React","cn","DropdownCategoryTitle","children","div","className","DropdownButton","isActive","onClick","disabled","buttonClass","button","type","e","preventDefault","stopPropagation"],"mappings":";AAAA,OAAOA,WAAW,QAAQ;AAC1B,SAASC,EAAE,QAAQ,8BAA8B;AAEjD,OAAO,MAAMC,wBAAwB,CAAC,EACpCC,QAAQ,EAGT;IACC,qBACE,KAACC;QAAIC,WAAU;kBACZF;;AAGP,EAAE;AAEF,OAAO,MAAMG,iBAAiB,CAAC,EAC7BH,QAAQ,EACRI,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRJ,SAAS,EAOV;IACC,MAAMK,cAAcT,GAClB,iJACA,CAACM,YAAY,CAACE,UACd,qGACAF,YACE,CAACE,YACD,6EACFA,YAAY,6DACZJ;IAGF,qBACE,KAACM;QACCC,MAAK;QACLP,WAAWK;QACXD,UAAUA;QACVD,SAAS,CAACK;YACRA,EAAEC,cAAc;YAChBD,EAAEE,eAAe;YACjBP;QACF;kBAECL;;AAGP,EAAE"}
|