payload-richtext-tiptap 0.0.41 → 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/Components.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/Components.js +3 -3
- package/dist/src/fields/TiptapEditor/Components.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts +4 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +223 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.d.ts +5 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.js +135 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/CommandButton.d.ts +10 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/CommandButton.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/CommandButton.js +29 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/CommandButton.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/MenuList.d.ts +5 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/MenuList.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/MenuList.js +123 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/MenuList.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.d.ts +4 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js +85 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/index.d.ts +2 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/index.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/index.js +3 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/index.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.d.ts +22 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.js +3 -0
- package/dist/src/fields/TiptapEditor/extensions/AICommand/types.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/ImageUpload.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/ImageUpload.js +3 -2
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/ImageUpload.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.d.ts +2 -2
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.js +38 -21
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.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 +3 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js +23 -16
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/index.d.ts +1 -0
- package/dist/src/fields/TiptapEditor/extensions/index.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/index.js +1 -0
- package/dist/src/fields/TiptapEditor/extensions/index.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts +4 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js +3 -2
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.d.ts +14 -0
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.js +94 -0
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts +8 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +168 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/index.d.ts +2 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/index.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/index.js +3 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/index.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js +29 -17
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.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/fields/TiptapEditor/hooks/useBlockEditor.d.ts +3 -1
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js +4 -3
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
- package/dist/src/fields/TiptapEditor/lib/extract.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/lib/extract.js +6 -5
- package/dist/src/fields/TiptapEditor/lib/extract.js.map +1 -1
- package/dist/src/fields/TiptapEditor/types.d.js +3 -0
- package/dist/src/fields/TiptapEditor/types.d.js.map +1 -0
- package/dist/src/styles.css +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCompletion } from "ai/react";
|
|
4
|
+
import { ArrowUpCircle, Sparkles } from "lucide-react";
|
|
5
|
+
import { useCallback, useEffect, 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 { getPrevText } from "../../../lib/utils/index.js";
|
|
10
|
+
import { isRTL } from "../../../lib/utils/isRtl.js";
|
|
11
|
+
import CrazySpinner from "../../ui/crazy-spinner.js";
|
|
12
|
+
import { ScrollArea } from "../../ui/scroll-area.js";
|
|
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 ?? "");
|
|
17
|
+
const { code } = useLocale();
|
|
18
|
+
const { view } = editor;
|
|
19
|
+
const editorNode = view.dom;
|
|
20
|
+
const boundigClient = editorNode.getBoundingClientRect();
|
|
21
|
+
const inputRef = useRef(null);
|
|
22
|
+
// const { status, messages, input, submitMessage, handleInputChange } = useAssistant({
|
|
23
|
+
// // id: "novel",
|
|
24
|
+
// api: "/api/assistant",
|
|
25
|
+
// onResponse: (response) => {
|
|
26
|
+
// if (response.status === 429) {
|
|
27
|
+
// toast.error("You have reached your request limit for the day.");
|
|
28
|
+
// return;
|
|
29
|
+
// }
|
|
30
|
+
// },
|
|
31
|
+
// onError: (e) => {
|
|
32
|
+
// toast.error(e.message);
|
|
33
|
+
// },
|
|
34
|
+
// });
|
|
35
|
+
const { completion, complete, isLoading } = useCompletion({
|
|
36
|
+
// id: "novel",
|
|
37
|
+
api: "/api/generate",
|
|
38
|
+
onResponse: (response)=>{
|
|
39
|
+
if (response.status === 429) {
|
|
40
|
+
console.log("You have reached your request limit for the day.");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
onError: (e)=>{
|
|
45
|
+
console.log("ERROR", e.message);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const hasCompletion = completion.length > 0;
|
|
49
|
+
const handleClick = useCallback(()=>{
|
|
50
|
+
if (completion) {
|
|
51
|
+
return complete(completion, {
|
|
52
|
+
body: {
|
|
53
|
+
option: "zap",
|
|
54
|
+
command: inputValue,
|
|
55
|
+
language: code ?? "en"
|
|
56
|
+
}
|
|
57
|
+
}).then(()=>setInputValue(""));
|
|
58
|
+
}
|
|
59
|
+
const text = getPrevText(editor, {
|
|
60
|
+
chars: 5000
|
|
61
|
+
});
|
|
62
|
+
complete(text, {
|
|
63
|
+
body: {
|
|
64
|
+
option: "zap",
|
|
65
|
+
command: inputValue,
|
|
66
|
+
language: code ?? "en"
|
|
67
|
+
}
|
|
68
|
+
}).then(()=>setInputValue(""));
|
|
69
|
+
}, [
|
|
70
|
+
code,
|
|
71
|
+
inputValue
|
|
72
|
+
]);
|
|
73
|
+
useEffect(()=>{
|
|
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
|
+
// }
|
|
89
|
+
}, [
|
|
90
|
+
completion,
|
|
91
|
+
isLoading
|
|
92
|
+
]);
|
|
93
|
+
return /*#__PURE__*/ _jsx(Surface, {
|
|
94
|
+
className: `p-2 min-w-[20rem] flex flex-col gap-2 `,
|
|
95
|
+
style: {
|
|
96
|
+
width: boundigClient?.width
|
|
97
|
+
},
|
|
98
|
+
children: /*#__PURE__*/ _jsxs(_Fragment, {
|
|
99
|
+
children: [
|
|
100
|
+
hasCompletion && /*#__PURE__*/ _jsx("div", {
|
|
101
|
+
className: "flex w-full",
|
|
102
|
+
children: /*#__PURE__*/ _jsx(ScrollArea, {
|
|
103
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
104
|
+
className: "prose p-2 px-4 prose-sm",
|
|
105
|
+
dir: isRTL(completion) ? "rtl" : "ltr",
|
|
106
|
+
children: /*#__PURE__*/ _jsx(Markdown, {
|
|
107
|
+
children: completion
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
}),
|
|
112
|
+
isLoading && /*#__PURE__*/ _jsxs("div", {
|
|
113
|
+
className: "flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500",
|
|
114
|
+
style: {
|
|
115
|
+
width: boundigClient?.width
|
|
116
|
+
},
|
|
117
|
+
children: [
|
|
118
|
+
/*#__PURE__*/ _jsx(Sparkles, {
|
|
119
|
+
className: "mr-2 h-4 w-4 shrink-0 "
|
|
120
|
+
}),
|
|
121
|
+
"AI is thinking",
|
|
122
|
+
/*#__PURE__*/ _jsx("div", {
|
|
123
|
+
className: "ml-2 mt-1",
|
|
124
|
+
children: /*#__PURE__*/ _jsx(CrazySpinner, {})
|
|
125
|
+
})
|
|
126
|
+
]
|
|
127
|
+
}),
|
|
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
|
+
})
|
|
162
|
+
})
|
|
163
|
+
]
|
|
164
|
+
})
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
//# sourceMappingURL=AICommandPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/index.tsx"],"sourcesContent":["export * from \"./AICommandPanel.js\";\n"],"names":[],"mappings":"AAAA,cAAc,sBAAsB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIEditorPanel.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"AIEditorPanel.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAevC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,aAAa,6BAA8B,kBAAkB,gCAuJzE,CAAC"}
|
|
@@ -3,7 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
3
3
|
import { useLocale } from "@payloadcms/ui/providers/Locale";
|
|
4
4
|
import { useCompletion } from "ai/react";
|
|
5
5
|
import { ArrowRight, Sparkles } from "lucide-react";
|
|
6
|
-
import { useCallback, useState } from "react";
|
|
6
|
+
import { useCallback, useRef, useState } from "react";
|
|
7
|
+
import TextareaAutosize from "react-textarea-autosize";
|
|
7
8
|
import Markdown from "react-markdown";
|
|
8
9
|
import { getPrevText } from "../../../lib/utils/index.js";
|
|
9
10
|
import { isRTL } from "../../../lib/utils/isRtl.js";
|
|
@@ -16,6 +17,10 @@ import { ScrollArea } from "../../ui/scroll-area.js";
|
|
|
16
17
|
export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
17
18
|
const [inputValue, setInputValue] = useState("");
|
|
18
19
|
const { code } = useLocale();
|
|
20
|
+
const { view } = editor;
|
|
21
|
+
const editorNode = view.dom;
|
|
22
|
+
const boundigClient = editorNode.getBoundingClientRect();
|
|
23
|
+
const inputRef = useRef(null);
|
|
19
24
|
// const { status, messages, input, submitMessage, handleInputChange } = useAssistant({
|
|
20
25
|
// // id: "novel",
|
|
21
26
|
// api: "/api/assistant",
|
|
@@ -44,13 +49,15 @@ export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
|
44
49
|
});
|
|
45
50
|
const hasCompletion = completion.length > 0;
|
|
46
51
|
const handleClick = useCallback(()=>{
|
|
47
|
-
if (completion)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
if (completion) {
|
|
53
|
+
return complete(completion, {
|
|
54
|
+
body: {
|
|
55
|
+
option: "zap",
|
|
56
|
+
command: inputValue,
|
|
57
|
+
language: code ?? "en"
|
|
58
|
+
}
|
|
59
|
+
}).then(()=>setInputValue(""));
|
|
60
|
+
}
|
|
54
61
|
const text = getPrevText(editor, {
|
|
55
62
|
chars: 5000
|
|
56
63
|
});
|
|
@@ -62,14 +69,18 @@ export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
|
62
69
|
}
|
|
63
70
|
}).then(()=>setInputValue(""));
|
|
64
71
|
}, [
|
|
65
|
-
code
|
|
72
|
+
code,
|
|
73
|
+
inputValue
|
|
66
74
|
]);
|
|
67
75
|
return /*#__PURE__*/ _jsx(Surface, {
|
|
68
|
-
className:
|
|
76
|
+
className: `p-2 min-w-[20rem] `,
|
|
77
|
+
style: {
|
|
78
|
+
width: boundigClient?.width
|
|
79
|
+
},
|
|
69
80
|
children: /*#__PURE__*/ _jsxs(_Fragment, {
|
|
70
81
|
children: [
|
|
71
82
|
hasCompletion && /*#__PURE__*/ _jsx("div", {
|
|
72
|
-
className: "flex
|
|
83
|
+
className: "flex w-full",
|
|
73
84
|
children: /*#__PURE__*/ _jsx(ScrollArea, {
|
|
74
85
|
children: /*#__PURE__*/ _jsx("div", {
|
|
75
86
|
className: "prose p-2 px-4 prose-sm",
|
|
@@ -101,7 +112,8 @@ export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
|
101
112
|
/*#__PURE__*/ _jsx(Sparkles, {
|
|
102
113
|
className: "mr-2 h-4 w-4 shrink-0 text-blue-500 "
|
|
103
114
|
}),
|
|
104
|
-
/*#__PURE__*/ _jsx(
|
|
115
|
+
/*#__PURE__*/ _jsx(TextareaAutosize, {
|
|
116
|
+
ref: inputRef,
|
|
105
117
|
className: "w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none",
|
|
106
118
|
value: inputValue,
|
|
107
119
|
onChange: (e)=>{
|
|
@@ -109,7 +121,8 @@ export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
|
109
121
|
},
|
|
110
122
|
placeholder: hasCompletion ? "Tell AI what to do next" : "Ask AI to edit or generate...",
|
|
111
123
|
autoFocus: true,
|
|
112
|
-
// onFocus={() =>
|
|
124
|
+
// onFocus={() => {
|
|
125
|
+
// addAIHighlight(editor)}}
|
|
113
126
|
onKeyDown: (e)=>{
|
|
114
127
|
if (e.key === "Enter") handleClick();
|
|
115
128
|
}
|
|
@@ -131,10 +144,9 @@ export const AIEditorPanel = ({ editor, onOpenChange })=>{
|
|
|
131
144
|
completion: completion
|
|
132
145
|
}) : /*#__PURE__*/ _jsx(AISelectorCommands, {
|
|
133
146
|
editor: editor,
|
|
134
|
-
onSelect: (value
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
});
|
|
147
|
+
onSelect: (value)=>{
|
|
148
|
+
setInputValue(value);
|
|
149
|
+
inputRef.current.focus();
|
|
138
150
|
}
|
|
139
151
|
})
|
|
140
152
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor } from \"@tiptap/react\";\nimport { useCompletion } from \"ai/react\";\nimport { ArrowRight, Sparkles } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport Markdown from \"react-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\";\nexport type AIEditorPanelProps = {\n editor: Editor;\n onOpenChange: (value: boolean) => void;\n};\n\nexport const AIEditorPanel = ({ editor, onOpenChange }: AIEditorPanelProps) => {\n const [inputValue, setInputValue] = useState(\"\");\n const { code } = useLocale();\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 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 const text = getPrevText(editor, { chars: 5000 });\n\n complete(text, {\n body: { option: \"zap\", command: inputValue, language: code ?? \"en\" },\n }).then(() => setInputValue(\"\"));\n }, [code]);\n return (\n <Surface
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { Editor } 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 \"react-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\";\nexport type AIEditorPanelProps = {\n editor: Editor;\n onOpenChange: (value: boolean) => void;\n};\n\nexport const AIEditorPanel = ({ editor, onOpenChange }: AIEditorPanelProps) => {\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 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 return (\n <Surface\n className={`p-2 min-w-[20rem] `}\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 className=\"flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500\">\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 <AISelectorCommands\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","useCompletion","ArrowRight","Sparkles","useCallback","useRef","useState","TextareaAutosize","Markdown","getPrevText","isRTL","AICompletionCommands","AISelectorCommands","Surface","Toolbar","CrazySpinner","ScrollArea","AIEditorPanel","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","className","style","width","div","dir","ref","value","onChange","target","placeholder","autoFocus","onKeyDown","key","Button","onClick","onDiscard","chain","unsetHighlight","focus","run","onSelect","current"],"mappings":"AAAA;;AAEA,SAASA,SAAS,QAAQ,kCAAkC;AAE5D,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,UAAU,EAAEC,QAAQ,QAAQ,eAAe;AACpD,SAASC,WAAW,EAAaC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AACjE,OAAOC,sBAAsB,0BAA0B;AAEvD,OAAOC,cAAc,iBAAiB;AACtC,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,KAAK,QAAQ,8BAA8B;AACpD,OAAOC,0BAA0B,2DAA2D;AAC5F,OAAOC,wBAAwB,0DAA0D;AACzF,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,OAAOC,kBAAkB,4BAA4B;AACrD,SAASC,UAAU,QAAQ,0BAA0B;AAMrD,OAAO,MAAMC,gBAAgB,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAsB;IACxE,MAAM,CAACC,YAAYC,cAAc,GAAGf,SAAS;IAC7C,MAAM,EAAEgB,IAAI,EAAE,GAAGtB;IACjB,MAAM,EAAEuB,IAAI,EAAE,GAAGL;IAEjB,MAAMM,aAAaD,KAAKE,GAAG;IAC3B,MAAMC,gBAAgBF,WAAWG,qBAAqB;IACtD,MAAMC,WAAWvB,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,EAAEwB,UAAU,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAG9B,cAAc;QACxD,eAAe;QACf+B,KAAK;QACLC,YAAY,CAACC;YACX,IAAIA,SAASC,MAAM,KAAK,KAAK;gBAC3BC,QAAQC,GAAG,CAAC;gBAEZ;YACF;QACF;QACAC,SAAS,CAACC;YACRH,QAAQC,GAAG,CAAC,SAASE,EAAEC,OAAO;QAChC;IACF;IAEA,MAAMC,gBAAgBZ,WAAWa,MAAM,GAAG;IAC1C,MAAMC,cAAcvC,YAAY;QAC9B,IAAIyB,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,YAAYS,QAAQ;YAAEgC,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;IAErB,qBACE,KAACP;QACCsC,WAAW,CAAC,kBAAkB,CAAC;QAC/BC,OAAO;YACLC,OAAO3B,eAAe2B;QACxB;kBAEA,cAAA;;gBACGZ,+BACC,KAACa;oBAAIH,WAAU;8BACb,cAAA,KAACnC;kCACC,cAAA,KAACsC;4BACCH,WAAU;4BACVI,KAAK7C,MAAMmB,cAAc,QAAQ;sCAEjC,cAAA,KAACrB;0CAAUqB;;;;;gBAMlBE,2BACC,MAACuB;oBAAIH,WAAU;;sCACb,KAAChD;4BAASgD,WAAU;;wBAA4B;sCAEhD,KAACG;4BAAIH,WAAU;sCACb,cAAA,KAACpC;;;;gBAKN,CAACgB,2BACA;;sCACE,MAACuB;4BAAIH,WAAU;;8CAab,KAAChD;oCAASgD,WAAU;;8CACpB,KAAC5C;oCACCiD,KAAK5B;oCACLuB,WAAU;oCACVM,OAAOrC;oCACPsC,UAAU,CAACnB;wCACTlB,cAAckB,EAAEoB,MAAM,CAACF,KAAK;oCAC9B;oCACAG,aACEnB,gBACI,4BACA;oCAENoB,SAAS;oCACT,mBAAmB;oCACnB,6BAA6B;oCAE7BC,WAAW,CAACvB;wCACV,IAAIA,EAAEwB,GAAG,KAAK,SAASpB;oCACzB;;8CAEF,KAAC7B,QAAQkD,MAAM;oCACb,cAAc;oCAEd,4GAA4G;oCAC5GC,SAAStB;8CAET,cAAA,KAACzC;;;;wBAGJuC,8BACC,KAAC9B;4BACCO,QAAQA;4BACRgD,WAAW;gCACThD,OAAOiD,KAAK,GAAGC,cAAc,GAAGC,KAAK,GAAGC,GAAG;gCAC3CnD,aAAa;4BACf;4BACAU,YAAYA;2CAGd,KAACjB;4BACCM,QAAQA;4BACRqD,UAAU,CAACd;gCACTpC,cAAcoC;gCACd7B,SAAS4C,OAAO,CAACH,KAAK;4BACxB;;;;;;;AAQhB,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"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { Editor } from "@tiptap/react";
|
|
2
|
+
import { openAssetHQType } from "../types.js";
|
|
2
3
|
declare global {
|
|
3
4
|
interface Window {
|
|
4
5
|
editor: Editor | null;
|
|
5
6
|
}
|
|
6
7
|
}
|
|
7
|
-
export declare const useBlockEditor: ({ content, handleChange, }: {
|
|
8
|
+
export declare const useBlockEditor: ({ content, handleChange, openAssetHQHandler, }: {
|
|
8
9
|
content: {
|
|
9
10
|
html: string;
|
|
10
11
|
json: any;
|
|
11
12
|
};
|
|
12
13
|
handleChange: (data: any) => void;
|
|
14
|
+
openAssetHQHandler: openAssetHQType;
|
|
13
15
|
}) => {
|
|
14
16
|
editor: Editor;
|
|
15
17
|
users: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBlockEditor.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/hooks/useBlockEditor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAa,MAAM,eAAe,CAAC;AASlD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;CACF;AAED,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"useBlockEditor.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/hooks/useBlockEditor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAa,MAAM,eAAe,CAAC;AASlD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB;CACF;AAED,eAAO,MAAM,cAAc,mDAIxB;IACD,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,kBAAkB,EAAE,eAAe,CAAC;CACrC;;;;;CAqFA,CAAC"}
|
|
@@ -3,10 +3,10 @@ import { useMemo } from "react";
|
|
|
3
3
|
import { useEditor } from "@tiptap/react";
|
|
4
4
|
import ExtensionKit from "../extensions/extension-kit.js";
|
|
5
5
|
import { useSidebar } from "./useSidebar.js";
|
|
6
|
+
import { useTranslation } from "@payloadcms/ui/providers/Translation";
|
|
6
7
|
import TurndownService from "turndown";
|
|
7
8
|
import { gfm } from "turndown-plugin-gfm";
|
|
8
|
-
|
|
9
|
-
export const useBlockEditor = ({ content, handleChange })=>{
|
|
9
|
+
export const useBlockEditor = ({ content, handleChange, openAssetHQHandler })=>{
|
|
10
10
|
const leftSidebar = useSidebar();
|
|
11
11
|
const turndownService = new TurndownService({});
|
|
12
12
|
// Use the gfm plugin
|
|
@@ -30,6 +30,7 @@ export const useBlockEditor = ({ content, handleChange })=>{
|
|
|
30
30
|
},
|
|
31
31
|
extensions: [
|
|
32
32
|
...ExtensionKit({
|
|
33
|
+
openAssetHQHandler
|
|
33
34
|
})
|
|
34
35
|
],
|
|
35
36
|
editorProps: {
|
|
@@ -71,7 +72,7 @@ export const useBlockEditor = ({ content, handleChange })=>{
|
|
|
71
72
|
// setCollabState(event.status)
|
|
72
73
|
// })
|
|
73
74
|
// }, [provider])
|
|
74
|
-
if (window) window.editor = editor;
|
|
75
|
+
if (typeof window != "undefined") window.editor = editor;
|
|
75
76
|
return {
|
|
76
77
|
editor,
|
|
77
78
|
users,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/hooks/useBlockEditor.ts"],"sourcesContent":["\"use client\";\nimport { useMemo } from \"react\";\n\nimport { Editor, useEditor } from \"@tiptap/react\";\n\nimport ExtensionKit from \"../extensions/extension-kit.js\";\nimport { EditorUser } from \"../features/BlockEditor/types.js\";\nimport { useSidebar } from \"./useSidebar.js\";\n\nimport TurndownService from \"turndown\";\nimport { gfm } from \"turndown-plugin-gfm\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/hooks/useBlockEditor.ts"],"sourcesContent":["\"use client\";\nimport { useMemo } from \"react\";\n\nimport { Editor, useEditor } from \"@tiptap/react\";\n\nimport ExtensionKit from \"../extensions/extension-kit.js\";\nimport { EditorUser } from \"../features/BlockEditor/types.js\";\nimport { useSidebar } from \"./useSidebar.js\";\n\nimport { useTranslation } from \"@payloadcms/ui/providers/Translation\";\nimport TurndownService from \"turndown\";\nimport { gfm } from \"turndown-plugin-gfm\";\nimport { openAssetHQType } from \"../types.js\";\ndeclare global {\n interface Window {\n editor: Editor | null;\n }\n}\n\nexport const useBlockEditor = ({\n content,\n handleChange,\n openAssetHQHandler,\n}: {\n content: { html: string; json: any };\n handleChange: (data: any) => void;\n openAssetHQHandler: openAssetHQType;\n}) => {\n const leftSidebar = useSidebar();\n\n const turndownService = new TurndownService({});\n // Use the gfm plugin\n turndownService.use(gfm);\n turndownService.addRule(\"twitter\", {\n filter: \"div\",\n replacement: function (content) {\n return \"\\n\\n\" + content + \"\\n\\n\";\n },\n });\n const { t, i18n } = useTranslation();\n\n const editor = useEditor(\n {\n content: content?.json ?? content ?? {},\n autofocus: true,\n onCreate: ({ editor }) => {\n // provider?.on('synced', () => {\n // if (editor.isEmpty) {\n // editor.commands.setContent(initialContent)\n // }\n // })\n },\n extensions: [\n ...ExtensionKit({\n openAssetHQHandler,\n // provider,\n }),\n // Collaboration.configure({\n // document: ydoc,\n // }),\n // CollaborationCursor.configure({\n // provider,\n // user: {\n // name: randomElement(userNames),\n // color: randomElement(userColors),\n // },\n // }),\n ],\n editorProps: {\n attributes: {\n languages: i18n.language,\n autocomplete: \"off\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n class: \"min-h-full\",\n },\n },\n onUpdate: ({ editor }) => {\n handleChange(editor?.getJSON() ?? {});\n },\n },\n []\n );\n const users = useMemo(() => {\n if (!editor?.storage.collaborationCursor?.users) {\n return [];\n }\n\n return editor.storage.collaborationCursor?.users.map((user: EditorUser) => {\n const names = user.name?.split(\" \");\n const firstName = names?.[0];\n const lastName = names?.[names.length - 1];\n const initials = `${firstName?.[0] || \"?\"}${lastName?.[0] || \"?\"}`;\n\n return { ...user, initials: initials.length ? initials : \"?\" };\n });\n }, [editor?.storage.collaborationCursor?.users]);\n\n const characterCount = editor?.storage.characterCount || {\n characters: () => 0,\n words: () => 0,\n };\n\n // useEffect(() => {\n // provider?.on('status', (event: { status: WebSocketStatus }) => {\n // setCollabState(event.status)\n // })\n // }, [provider])\n\n if (typeof window != \"undefined\") window.editor = editor;\n\n return { editor, users, characterCount, leftSidebar };\n};\n"],"names":["useMemo","useEditor","ExtensionKit","useSidebar","useTranslation","TurndownService","gfm","useBlockEditor","content","handleChange","openAssetHQHandler","leftSidebar","turndownService","use","addRule","filter","replacement","t","i18n","editor","json","autofocus","onCreate","extensions","editorProps","attributes","languages","language","autocomplete","autocorrect","autocapitalize","class","onUpdate","getJSON","users","storage","collaborationCursor","map","user","names","name","split","firstName","lastName","length","initials","characterCount","characters","words","window"],"mappings":"AAAA;AACA,SAASA,OAAO,QAAQ,QAAQ;AAEhC,SAAiBC,SAAS,QAAQ,gBAAgB;AAElD,OAAOC,kBAAkB,iCAAiC;AAE1D,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,cAAc,QAAQ,uCAAuC;AACtE,OAAOC,qBAAqB,WAAW;AACvC,SAASC,GAAG,QAAQ,sBAAsB;AAQ1C,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,YAAY,EACZC,kBAAkB,EAKnB;IACC,MAAMC,cAAcR;IAEpB,MAAMS,kBAAkB,IAAIP,gBAAgB,CAAC;IAC7C,qBAAqB;IACrBO,gBAAgBC,GAAG,CAACP;IACpBM,gBAAgBE,OAAO,CAAC,WAAW;QACjCC,QAAQ;QACRC,aAAa,SAAUR,OAAO;YAC5B,OAAO,SAASA,UAAU;QAC5B;IACF;IACA,MAAM,EAAES,CAAC,EAAEC,IAAI,EAAE,GAAGd;IAEpB,MAAMe,SAASlB,UACb;QACEO,SAASA,SAASY,QAAQZ,WAAW,CAAC;QACtCa,WAAW;QACXC,UAAU,CAAC,EAAEH,MAAM,EAAE;QACnB,iCAAiC;QACjC,0BAA0B;QAC1B,iDAAiD;QACjD,MAAM;QACN,KAAK;QACP;QACAI,YAAY;eACPrB,aAAa;gBACdQ;YAEF;SAWD;QACDc,aAAa;YACXC,YAAY;gBACVC,WAAWR,KAAKS,QAAQ;gBACxBC,cAAc;gBACdC,aAAa;gBACbC,gBAAgB;gBAChBC,OAAO;YACT;QACF;QACAC,UAAU,CAAC,EAAEb,MAAM,EAAE;YACnBV,aAAaU,QAAQc,aAAa,CAAC;QACrC;IACF,GACA,EAAE;IAEJ,MAAMC,QAAQlC,QAAQ;QACpB,IAAI,CAACmB,QAAQgB,QAAQC,qBAAqBF,OAAO;YAC/C,OAAO,EAAE;QACX;QAEA,OAAOf,OAAOgB,OAAO,CAACC,mBAAmB,EAAEF,MAAMG,IAAI,CAACC;YACpD,MAAMC,QAAQD,KAAKE,IAAI,EAAEC,MAAM;YAC/B,MAAMC,YAAYH,OAAO,CAAC,EAAE;YAC5B,MAAMI,WAAWJ,OAAO,CAACA,MAAMK,MAAM,GAAG,EAAE;YAC1C,MAAMC,WAAW,CAAC,EAAEH,WAAW,CAAC,EAAE,IAAI,IAAI,EAAEC,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC;YAElE,OAAO;gBAAE,GAAGL,IAAI;gBAAEO,UAAUA,SAASD,MAAM,GAAGC,WAAW;YAAI;QAC/D;IACF,GAAG;QAAC1B,QAAQgB,QAAQC,qBAAqBF;KAAM;IAE/C,MAAMY,iBAAiB3B,QAAQgB,QAAQW,kBAAkB;QACvDC,YAAY,IAAM;QAClBC,OAAO,IAAM;IACf;IAEA,oBAAoB;IACpB,qEAAqE;IACrE,mCAAmC;IACnC,OAAO;IACP,iBAAiB;IAEjB,IAAI,OAAOC,UAAU,aAAaA,OAAO9B,MAAM,GAAGA;IAElD,OAAO;QAAEA;QAAQe;QAAOY;QAAgBnC;IAAY;AACtD,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/lib/extract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/lib/extract.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,kBAAmB,MAAM,uCAWtD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,GAAG,QAWxC,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Editor } from "@tiptap/core";
|
|
2
|
-
import { Markdown } from "tiptap-markdown";
|
|
3
2
|
import ExtensionKit from "../extensions/extension-kit.js";
|
|
4
3
|
export const extractTiptapJson = (markdownValue)=>{
|
|
5
4
|
const editor = new Editor({
|
|
6
5
|
content: markdownValue,
|
|
7
6
|
extensions: [
|
|
8
7
|
...ExtensionKit({
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// provider,
|
|
9
|
+
openAssetHQHandler: ()=>{}
|
|
10
|
+
})
|
|
11
11
|
]
|
|
12
12
|
});
|
|
13
13
|
return editor.getJSON();
|
|
@@ -17,8 +17,9 @@ export const extractMarkdown = (json)=>{
|
|
|
17
17
|
content: json,
|
|
18
18
|
extensions: [
|
|
19
19
|
...ExtensionKit({
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// provider,
|
|
21
|
+
openAssetHQHandler: ()=>{}
|
|
22
|
+
})
|
|
22
23
|
]
|
|
23
24
|
});
|
|
24
25
|
return editor.storage.markdown.getMarkdown();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/lib/extract.ts"],"sourcesContent":["import { Editor } from \"@tiptap/core\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../src/fields/TiptapEditor/lib/extract.ts"],"sourcesContent":["import { Editor } from \"@tiptap/core\";\nimport ExtensionKit from \"../extensions/extension-kit.js\";\n\nexport const extractTiptapJson = (markdownValue: string) => {\n const editor = new Editor({\n content: markdownValue,\n extensions: [\n ...ExtensionKit({\n // provider,\n openAssetHQHandler: () => {},\n }),\n ],\n });\n return editor.getJSON();\n};\n\nexport const extractMarkdown = (json: any) => {\n const editor = new Editor({\n content: json,\n extensions: [\n ...ExtensionKit({\n // provider,\n openAssetHQHandler: () => {},\n }),\n ],\n });\n return editor.storage.markdown.getMarkdown();\n};\n"],"names":["Editor","ExtensionKit","extractTiptapJson","markdownValue","editor","content","extensions","openAssetHQHandler","getJSON","extractMarkdown","json","storage","markdown","getMarkdown"],"mappings":"AAAA,SAASA,MAAM,QAAQ,eAAe;AACtC,OAAOC,kBAAkB,iCAAiC;AAE1D,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,SAAS,IAAIJ,OAAO;QACxBK,SAASF;QACTG,YAAY;eACPL,aAAa;gBACd,YAAY;gBACZM,oBAAoB,KAAO;YAC7B;SACD;IACH;IACA,OAAOH,OAAOI,OAAO;AACvB,EAAE;AAEF,OAAO,MAAMC,kBAAkB,CAACC;IAC9B,MAAMN,SAAS,IAAIJ,OAAO;QACxBK,SAASK;QACTJ,YAAY;eACPL,aAAa;gBACd,YAAY;gBACZM,oBAAoB,KAAO;YAC7B;SACD;IACH;IACA,OAAOH,OAAOO,OAAO,CAACC,QAAQ,CAACC,WAAW;AAC5C,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/TiptapEditor/types.d.ts"],"sourcesContent":["export type openAssetHQType = (\n listener: (linkOfAsset: string) => void,\n file?: File\n) => void;\n"],"names":[],"mappings":"AAAA,WAGU"}
|
package/dist/src/styles.css
CHANGED
|
@@ -1841,10 +1841,6 @@ select {
|
|
|
1841
1841
|
max-height: 20rem;
|
|
1842
1842
|
}
|
|
1843
1843
|
|
|
1844
|
-
.max-h-\[400px\] {
|
|
1845
|
-
max-height: 400px;
|
|
1846
|
-
}
|
|
1847
|
-
|
|
1848
1844
|
.max-h-\[min\(80vh\2c 24rem\)\] {
|
|
1849
1845
|
max-height: min(80vh,24rem);
|
|
1850
1846
|
}
|
|
@@ -2057,6 +2053,10 @@ select {
|
|
|
2057
2053
|
user-select: none;
|
|
2058
2054
|
}
|
|
2059
2055
|
|
|
2056
|
+
.resize {
|
|
2057
|
+
resize: both;
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
2060
|
.appearance-none {
|
|
2061
2061
|
-webkit-appearance: none;
|
|
2062
2062
|
-moz-appearance: none;
|