payload-richtext-tiptap 0.0.28 → 0.0.30
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/BlockquoteFigure/Design.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Design.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Design.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Design.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockView.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockView.js +3 -2
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockView.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockWidth.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockWidth.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockWidth.js +6 -5
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockWidth.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUploader.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUploader.js +7 -6
- package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUploader.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/CommandButton.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/CommandButton.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/CommandButton.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/InstagramEmbed.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/InstagramEmbed.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/InstagramEmbed.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/SocialMediaEmbed.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/SocialMediaEmbed.js +3 -2
- package/dist/src/fields/TiptapEditor/extensions/SocialMedia/SocialMediaEmbed.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js +4 -3
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.js +4 -3
- package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/Sidebar/Sidebar.js +4 -3
- package/dist/src/fields/TiptapEditor/features/Sidebar/Sidebar.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.js +3 -2
- package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.js +5 -4
- package/dist/src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js +4 -3
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.js +3 -2
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js +3 -2
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js +2 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js +7 -6
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js +8 -7
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js +11 -10
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/ColorButton.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/ColorButton.js +4 -3
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/ColorButton.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/Colorpicker.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/Colorpicker.js +5 -4
- package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/Colorpicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/IframeLinkEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/IframeLinkEditorPanel.js +5 -4
- package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/IframeLinkEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/InsideLinksEditorPanel/InsideLinksEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/InsideLinksEditorPanel/InsideLinksEditorPanel.js +4 -3
- package/dist/src/fields/TiptapEditor/features/panels/InsideLinksEditorPanel/InsideLinksEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/LinkEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/LinkEditorPanel.js +7 -6
- package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/LinkEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.js +3 -2
- package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/SocialMediaEditorPanel/SocialMediaEditorPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/SocialMediaEditorPanel/SocialMediaEditorPanel.js +7 -6
- package/dist/src/fields/TiptapEditor/features/panels/SocialMediaEditorPanel/SocialMediaEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Button/Button.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Button/Button.js +2 -1
- package/dist/src/fields/TiptapEditor/features/ui/Button/Button.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 +3 -2
- package/dist/src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Icon.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Icon.js +2 -1
- package/dist/src/fields/TiptapEditor/features/ui/Icon.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Loader/Loader.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Loader/Loader.js +5 -4
- package/dist/src/fields/TiptapEditor/features/ui/Loader/Loader.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Panel/index.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Panel/index.js +7 -6
- package/dist/src/fields/TiptapEditor/features/ui/Panel/index.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/PopoverMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/PopoverMenu.js +9 -7
- package/dist/src/fields/TiptapEditor/features/ui/PopoverMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Spinner/Spinner.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Spinner/Spinner.js +2 -1
- package/dist/src/fields/TiptapEditor/features/ui/Spinner/Spinner.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Surface.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Surface.js +2 -1
- package/dist/src/fields/TiptapEditor/features/ui/Surface.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Textarea/Textarea.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Textarea/Textarea.js +2 -1
- package/dist/src/fields/TiptapEditor/features/ui/Textarea/Textarea.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Toggle/Toggle.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Toggle/Toggle.js +5 -2
- package/dist/src/fields/TiptapEditor/features/ui/Toggle/Toggle.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Toolbar.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Toolbar.js +5 -3
- package/dist/src/fields/TiptapEditor/features/ui/Toolbar.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Tooltip/index.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/Tooltip/index.js +8 -7
- package/dist/src/fields/TiptapEditor/features/ui/Tooltip/index.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/crazy-spinner.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/crazy-spinner.js +5 -4
- package/dist/src/fields/TiptapEditor/features/ui/crazy-spinner.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/scroll-area.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/ui/scroll-area.js +5 -4
- package/dist/src/fields/TiptapEditor/features/ui/scroll-area.js.map +1 -1
- package/dist/src/styles.css +2126 -2648
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
package/dist/src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.tsx"],"sourcesContent":["import React from \"react\";\nimport { Node, NodeViewRendererProps } from \"@tiptap/core\";\nimport { NodeViewWrapper, ReactNodeViewRenderer } from \"@tiptap/react\";\nimport { TableOfContents } from \"../../features/TableOfContents/index.js\";\n\nconst TableOfNodeContent = (props: NodeViewRendererProps) => {\n const { editor } = props;\n\n return (\n <NodeViewWrapper>\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/TableOfContentsNode/TableOfContentsNode.tsx"],"sourcesContent":["import React from \"react\";\nimport { Node, NodeViewRendererProps } from \"@tiptap/core\";\nimport { NodeViewWrapper, ReactNodeViewRenderer } from \"@tiptap/react\";\nimport { TableOfContents } from \"../../features/TableOfContents/index.js\";\nimport { twj } from \"tw-to-css\";\n\nconst TableOfNodeContent = (props: NodeViewRendererProps) => {\n const { editor } = props;\n\n return (\n <NodeViewWrapper>\n <div style={twj(\"p-2 -m-2 rounded-lg\")} contentEditable={false}>\n <TableOfContents editor={editor} />\n </div>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n tableOfContentsNode: {\n insertTableOfContents: () => ReturnType;\n };\n }\n}\n\nexport const TableOfContentsNode = Node.create({\n name: \"tableOfContentsNode\",\n group: \"block\",\n atom: true,\n selectable: true,\n draggable: true,\n inline: false,\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"table-of-content\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"div\", { ...HTMLAttributes, \"data-type\": \"table-of-content\" }];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(TableOfNodeContent);\n },\n\n addCommands() {\n return {\n insertTableOfContents:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n });\n },\n };\n },\n});\n"],"names":["React","Node","NodeViewWrapper","ReactNodeViewRenderer","TableOfContents","twj","TableOfNodeContent","props","editor","div","style","contentEditable","TableOfContentsNode","create","name","group","atom","selectable","draggable","inline","parseHTML","tag","renderHTML","HTMLAttributes","addNodeView","addCommands","insertTableOfContents","commands","insertContent","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,OAAOA,WAAW,QAAQ;AAC1B,SAASC,IAAI,QAA+B,eAAe;AAC3D,SAASC,eAAe,EAAEC,qBAAqB,QAAQ,gBAAgB;AACvE,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,GAAG,QAAQ,YAAY;AAEhC,MAAMC,qBAAqB,CAACC;IAC1B,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,qBACE,KAACL;kBACC,cAAA,KAACO;YAAIC,OAAOL,IAAI;YAAwBM,iBAAiB;sBACvD,cAAA,KAACP;gBAAgBI,QAAQA;;;;AAIjC;AAUA,OAAO,MAAMI,sBAAsBX,KAAKY,MAAM,CAAC;IAC7CC,MAAM;IACNC,OAAO;IACPC,MAAM;IACNC,YAAY;IACZC,WAAW;IACXC,QAAQ;IAERC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IAEAC,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YAAC;YAAO;gBAAE,GAAGA,cAAc;gBAAE,aAAa;YAAmB;SAAE;IACxE;IAEAC;QACE,OAAOrB,sBAAsBG;IAC/B;IAEAmB;QACE,OAAO;YACLC,uBACE,IACA,CAAC,EAAEC,QAAQ,EAAE;oBACX,OAAOA,SAASC,aAAa,CAAC;wBAC5BC,MAAM,IAAI,CAACf,IAAI;oBACjB;gBACF;QACJ;IACF;AACF,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockEditor.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockEditor.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,wBAAwB,CAAC;AAGhC,eAAO,MAAM,WAAW,8BAA+B,WAAW,gCA+FjE,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -16,6 +16,7 @@ import { ContentItemMenu } from "../menus/ContentItemMenu/ContentItemMenu.js";
|
|
|
16
16
|
import { TextMenu } from "../menus/TextMenu/TextMenu.js";
|
|
17
17
|
import { LinkMenu } from "../menus/index.js";
|
|
18
18
|
import "../../../../styles.css";
|
|
19
|
+
import { twj } from "tw-to-css";
|
|
19
20
|
export const BlockEditor = ({ handleChange, content })=>{
|
|
20
21
|
const menuContainerRef = useRef(null);
|
|
21
22
|
const editorRef = useRef(null);
|
|
@@ -57,17 +58,17 @@ export const BlockEditor = ({ handleChange, content })=>{
|
|
|
57
58
|
value: providerValue,
|
|
58
59
|
children: /*#__PURE__*/ _jsx("div", {
|
|
59
60
|
lang: i18n.language,
|
|
60
|
-
|
|
61
|
+
style: twj("flex h-full overflow-visible editor-tiptap"),
|
|
61
62
|
ref: menuContainerRef,
|
|
62
63
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
63
|
-
|
|
64
|
+
style: twj("relative flex flex-col flex-1 h-full justify-center items-center "),
|
|
64
65
|
children: [
|
|
65
66
|
/*#__PURE__*/ _jsx(EditorContent, {
|
|
66
67
|
editor: editor,
|
|
67
68
|
ref: editorRef,
|
|
68
69
|
lang: i18n.language,
|
|
69
|
-
className: "flex-1 overflow-y-visible w-full h-full outline-none outline-offset-0",
|
|
70
70
|
style: {
|
|
71
|
+
...twj("flex-1 overflow-y-visible w-full h-full outline-none outline-offset-0"),
|
|
71
72
|
outline: "none"
|
|
72
73
|
}
|
|
73
74
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"sourcesContent":["\"use client\";\nimport { EditorContent } from \"@tiptap/react\";\nimport { useEffect, useMemo, useRef } from \"react\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { useTranslation } from \"@payloadcms/ui/providers/Translation\";\nimport { EditorContext } from \"../../context/EditorContext.js\";\nimport { IframeMenu } from \"../../extensions/Iframe/menus/index.js\";\nimport ImageBlockMenu from \"../../extensions/ImageBlock/components/ImageBlockMenu.js\";\nimport { InsideLinksMenu } from \"../../extensions/InsideLinks/menus/index.js\";\nimport { ColumnsMenu } from \"../../extensions/MultiColumn/menus/ColumnsMenu.js\";\nimport { SocialMediaMenu } from \"../../extensions/SocialMedia/menus/index.js\";\nimport {\n TableColumnMenu,\n TableRowMenu,\n} from \"../../extensions/Table/menus/index.js\";\nimport { useBlockEditor } from \"../../hooks/useBlockEditor.js\";\nimport { Sidebar } from \"../Sidebar/Sidebar.js\";\nimport { ContentItemMenu } from \"../menus/ContentItemMenu/ContentItemMenu.js\";\nimport { TextMenu } from \"../menus/TextMenu/TextMenu.js\";\nimport { LinkMenu } from \"../menus/index.js\";\nimport { TiptapProps } from \"./types.js\";\n\nimport \"../../../../styles.css\";\n\nexport const BlockEditor = ({ handleChange, content }: TiptapProps) => {\n const menuContainerRef = useRef(null);\n const editorRef = useRef<HTMLDivElement>(null);\n\n const { editor, users, characterCount, leftSidebar } = useBlockEditor({\n content: content,\n handleChange: handleChange,\n });\n\n const { code } = useLocale();\n\n const displayedUsers = users.slice(0, 3);\n\n const providerValue = useMemo(() => {\n return {};\n }, []);\n\n useEffect(() => {\n if (code === \"ar\" || code === \"fa\") {\n editor?.commands?.setTextDirection(\"rtl\");\n editor?.commands?.setContent(\"dwa\");\n }\n }, [code]);\n\n if (!editor) {\n return null;\n }\n const { i18n } = useTranslation();\n\n // Define the content for different languages\n const contentEn = \"للكتابة...\"; // Content for English or default language\n const contentAr = \"انقر هنا للكتابة...\"; // Content for Arabic language\n const contentFa = \"اینجا کلیک کنید تا شروع به نوشتن کنید...\";\n\n /*switch (i18n.language) {\n case 'ar':\n editor.commands.setContent(contentAr)\n break\n case 'fa':\n editor.commands.setContent(contentFa)\n break\n default:\n editor.commands.setContent(contentEn)\n }*/\n\n return (\n <EditorContext.Provider value={providerValue}>\n <div\n lang={i18n.language}\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"sourcesContent":["\"use client\";\nimport { EditorContent } from \"@tiptap/react\";\nimport { useEffect, useMemo, useRef } from \"react\";\n\nimport { useLocale } from \"@payloadcms/ui/providers/Locale\";\nimport { useTranslation } from \"@payloadcms/ui/providers/Translation\";\nimport { EditorContext } from \"../../context/EditorContext.js\";\nimport { IframeMenu } from \"../../extensions/Iframe/menus/index.js\";\nimport ImageBlockMenu from \"../../extensions/ImageBlock/components/ImageBlockMenu.js\";\nimport { InsideLinksMenu } from \"../../extensions/InsideLinks/menus/index.js\";\nimport { ColumnsMenu } from \"../../extensions/MultiColumn/menus/ColumnsMenu.js\";\nimport { SocialMediaMenu } from \"../../extensions/SocialMedia/menus/index.js\";\nimport {\n TableColumnMenu,\n TableRowMenu,\n} from \"../../extensions/Table/menus/index.js\";\nimport { useBlockEditor } from \"../../hooks/useBlockEditor.js\";\nimport { Sidebar } from \"../Sidebar/Sidebar.js\";\nimport { ContentItemMenu } from \"../menus/ContentItemMenu/ContentItemMenu.js\";\nimport { TextMenu } from \"../menus/TextMenu/TextMenu.js\";\nimport { LinkMenu } from \"../menus/index.js\";\nimport { TiptapProps } from \"./types.js\";\n\nimport \"../../../../styles.css\";\nimport { twj } from \"tw-to-css\";\n\nexport const BlockEditor = ({ handleChange, content }: TiptapProps) => {\n const menuContainerRef = useRef(null);\n const editorRef = useRef<HTMLDivElement>(null);\n\n const { editor, users, characterCount, leftSidebar } = useBlockEditor({\n content: content,\n handleChange: handleChange,\n });\n\n const { code } = useLocale();\n\n const displayedUsers = users.slice(0, 3);\n\n const providerValue = useMemo(() => {\n return {};\n }, []);\n\n useEffect(() => {\n if (code === \"ar\" || code === \"fa\") {\n editor?.commands?.setTextDirection(\"rtl\");\n editor?.commands?.setContent(\"dwa\");\n }\n }, [code]);\n\n if (!editor) {\n return null;\n }\n const { i18n } = useTranslation();\n\n // Define the content for different languages\n const contentEn = \"للكتابة...\"; // Content for English or default language\n const contentAr = \"انقر هنا للكتابة...\"; // Content for Arabic language\n const contentFa = \"اینجا کلیک کنید تا شروع به نوشتن کنید...\";\n\n /*switch (i18n.language) {\n case 'ar':\n editor.commands.setContent(contentAr)\n break\n case 'fa':\n editor.commands.setContent(contentFa)\n break\n default:\n editor.commands.setContent(contentEn)\n }*/\n\n return (\n <EditorContext.Provider value={providerValue}>\n <div\n lang={i18n.language}\n style={twj(\"flex h-full overflow-visible editor-tiptap\")}\n ref={menuContainerRef}\n >\n {/* <Sidebar\n isOpen={leftSidebar.isOpen}\n onClose={leftSidebar.close}\n editor={editor}\n /> */}\n <div\n style={twj(\n \"relative flex flex-col flex-1 h-full justify-center items-center \"\n )}\n >\n {/* <EditorHeader\n characters={characterCount.characters()}\n users={displayedUsers}\n words={characterCount.words()}\n isSidebarOpen={leftSidebar.isOpen}\n toggleSidebar={leftSidebar.toggle}\n /> */}\n <EditorContent\n editor={editor}\n ref={editorRef}\n lang={i18n.language}\n style={{\n ...twj(\n \"flex-1 overflow-y-visible w-full h-full outline-none outline-offset-0\"\n ),\n outline: \"none\",\n }}\n />\n <ContentItemMenu editor={editor} />\n <LinkMenu editor={editor} appendTo={menuContainerRef} />\n\n <TextMenu editor={editor} />\n <IframeMenu editor={editor} appendTo={menuContainerRef} />\n <SocialMediaMenu editor={editor} appendTo={menuContainerRef} />\n <InsideLinksMenu editor={editor} appendTo={menuContainerRef} />\n <ColumnsMenu editor={editor} appendTo={menuContainerRef} />\n <TableRowMenu editor={editor} appendTo={menuContainerRef} />\n <TableColumnMenu editor={editor} appendTo={menuContainerRef} />\n <ImageBlockMenu editor={editor} appendTo={menuContainerRef} />\n </div>\n </div>\n </EditorContext.Provider>\n );\n};\n\nexport default BlockEditor;\n"],"names":["EditorContent","useEffect","useMemo","useRef","useLocale","useTranslation","EditorContext","IframeMenu","ImageBlockMenu","InsideLinksMenu","ColumnsMenu","SocialMediaMenu","TableColumnMenu","TableRowMenu","useBlockEditor","ContentItemMenu","TextMenu","LinkMenu","twj","BlockEditor","handleChange","content","menuContainerRef","editorRef","editor","users","characterCount","leftSidebar","code","displayedUsers","slice","providerValue","commands","setTextDirection","setContent","i18n","contentEn","contentAr","contentFa","Provider","value","div","lang","language","style","ref","outline","appendTo"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,SAASA,aAAa,QAAQ,gBAAgB;AAC9C,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,QAAQ;AAEnD,SAASC,SAAS,QAAQ,kCAAkC;AAC5D,SAASC,cAAc,QAAQ,uCAAuC;AACtE,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,UAAU,QAAQ,yCAAyC;AACpE,OAAOC,oBAAoB,2DAA2D;AACtF,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,SAASC,WAAW,QAAQ,oDAAoD;AAChF,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,SACEC,eAAe,EACfC,YAAY,QACP,wCAAwC;AAC/C,SAASC,cAAc,QAAQ,gCAAgC;AAE/D,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,SAASC,QAAQ,QAAQ,gCAAgC;AACzD,SAASC,QAAQ,QAAQ,oBAAoB;AAG7C,OAAO,yBAAyB;AAChC,SAASC,GAAG,QAAQ,YAAY;AAEhC,OAAO,MAAMC,cAAc,CAAC,EAAEC,YAAY,EAAEC,OAAO,EAAe;IAChE,MAAMC,mBAAmBnB,OAAO;IAChC,MAAMoB,YAAYpB,OAAuB;IAEzC,MAAM,EAAEqB,MAAM,EAAEC,KAAK,EAAEC,cAAc,EAAEC,WAAW,EAAE,GAAGb,eAAe;QACpEO,SAASA;QACTD,cAAcA;IAChB;IAEA,MAAM,EAAEQ,IAAI,EAAE,GAAGxB;IAEjB,MAAMyB,iBAAiBJ,MAAMK,KAAK,CAAC,GAAG;IAEtC,MAAMC,gBAAgB7B,QAAQ;QAC5B,OAAO,CAAC;IACV,GAAG,EAAE;IAELD,UAAU;QACR,IAAI2B,SAAS,QAAQA,SAAS,MAAM;YAClCJ,QAAQQ,UAAUC,iBAAiB;YACnCT,QAAQQ,UAAUE,WAAW;QAC/B;IACF,GAAG;QAACN;KAAK;IAET,IAAI,CAACJ,QAAQ;QACX,OAAO;IACT;IACA,MAAM,EAAEW,IAAI,EAAE,GAAG9B;IAEjB,6CAA6C;IAC7C,MAAM+B,YAAY,cAAc,0CAA0C;IAC1E,MAAMC,YAAY,uBAAuB,8BAA8B;IACvE,MAAMC,YAAY;IAElB;;;;;;;;;GASC,GAED,qBACE,KAAChC,cAAciC,QAAQ;QAACC,OAAOT;kBAC7B,cAAA,KAACU;YACCC,MAAMP,KAAKQ,QAAQ;YACnBC,OAAO1B,IAAI;YACX2B,KAAKvB;sBAOL,cAAA,MAACmB;gBACCG,OAAO1B,IACL;;kCAUF,KAAClB;wBACCwB,QAAQA;wBACRqB,KAAKtB;wBACLmB,MAAMP,KAAKQ,QAAQ;wBACnBC,OAAO;4BACL,GAAG1B,IACD,wEACD;4BACD4B,SAAS;wBACX;;kCAEF,KAAC/B;wBAAgBS,QAAQA;;kCACzB,KAACP;wBAASO,QAAQA;wBAAQuB,UAAUzB;;kCAEpC,KAACN;wBAASQ,QAAQA;;kCAClB,KAACjB;wBAAWiB,QAAQA;wBAAQuB,UAAUzB;;kCACtC,KAACX;wBAAgBa,QAAQA;wBAAQuB,UAAUzB;;kCAC3C,KAACb;wBAAgBe,QAAQA;wBAAQuB,UAAUzB;;kCAC3C,KAACZ;wBAAYc,QAAQA;wBAAQuB,UAAUzB;;kCACvC,KAACT;wBAAaW,QAAQA;wBAAQuB,UAAUzB;;kCACxC,KAACV;wBAAgBY,QAAQA;wBAAQuB,UAAUzB;;kCAC3C,KAACd;wBAAegB,QAAQA;wBAAQuB,UAAUzB;;;;;;AAKpD,EAAE;AAEF,eAAeH,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorHeader.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorHeader.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,gEAMtB,iBAAiB,sBAuBnB,CAAC"}
|
|
@@ -4,14 +4,15 @@ import { PanelLeft, PanelLeftClose } from "lucide-react";
|
|
|
4
4
|
import { Icon } from "../../ui/Icon.js";
|
|
5
5
|
import { Toolbar } from "../../ui/Toolbar.js";
|
|
6
6
|
import { EditorInfo } from "./EditorInfo.js";
|
|
7
|
+
import { twj } from "tw-to-css";
|
|
7
8
|
export const EditorHeader = ({ characters, users, words, isSidebarOpen, toggleSidebar })=>{
|
|
8
9
|
return /*#__PURE__*/ _jsxs("div", {
|
|
9
|
-
|
|
10
|
+
style: twj("w-full flex flex-row items-center justify-between flex-none py-2 text-black bg-white border-b border-neutral-200 dark:bg-black dark:text-white dark:border-neutral-800"),
|
|
10
11
|
children: [
|
|
11
12
|
/*#__PURE__*/ _jsx("div", {
|
|
12
|
-
|
|
13
|
+
style: twj("flex flex-row gap-x-1.5 items-center"),
|
|
13
14
|
children: /*#__PURE__*/ _jsx("div", {
|
|
14
|
-
|
|
15
|
+
style: twj("flex items-center gap-x-1.5"),
|
|
15
16
|
children: /*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
16
17
|
type: "button",
|
|
17
18
|
tooltip: isSidebarOpen ? "Close sidebar" : "Open sidebar",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { PanelLeft, PanelLeftClose } from \"lucide-react\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { EditorUser } from \"../types.js\";\nimport { EditorInfo } from \"./EditorInfo.js\";\n\nexport type EditorHeaderProps = {\n isSidebarOpen?: boolean;\n toggleSidebar?: () => void;\n characters: number;\n words: number;\n users: EditorUser[];\n};\n\nexport const EditorHeader = ({\n characters,\n users,\n words,\n isSidebarOpen,\n toggleSidebar,\n}: EditorHeaderProps) => {\n return (\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { PanelLeft, PanelLeftClose } from \"lucide-react\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { EditorUser } from \"../types.js\";\nimport { EditorInfo } from \"./EditorInfo.js\";\nimport { twj } from \"tw-to-css\";\n\nexport type EditorHeaderProps = {\n isSidebarOpen?: boolean;\n toggleSidebar?: () => void;\n characters: number;\n words: number;\n users: EditorUser[];\n};\n\nexport const EditorHeader = ({\n characters,\n users,\n words,\n isSidebarOpen,\n toggleSidebar,\n}: EditorHeaderProps) => {\n return (\n <div\n style={twj(\n \"w-full flex flex-row items-center justify-between flex-none py-2 text-black bg-white border-b border-neutral-200 dark:bg-black dark:text-white dark:border-neutral-800\"\n )}\n >\n <div style={twj(\"flex flex-row gap-x-1.5 items-center\")}>\n <div style={twj(\"flex items-center gap-x-1.5\")}>\n <Toolbar.Button\n type=\"button\"\n tooltip={isSidebarOpen ? \"Close sidebar\" : \"Open sidebar\"}\n onClick={toggleSidebar}\n active={isSidebarOpen}\n className={isSidebarOpen ? \"bg-transparent\" : \"\"}\n >\n <Icon icon={isSidebarOpen ? PanelLeftClose : PanelLeft} />\n </Toolbar.Button>\n </div>\n </div>\n <EditorInfo characters={characters} words={words} users={users} />\n </div>\n );\n};\n"],"names":["React","PanelLeft","PanelLeftClose","Icon","Toolbar","EditorInfo","twj","EditorHeader","characters","users","words","isSidebarOpen","toggleSidebar","div","style","Button","type","tooltip","onClick","active","className","icon"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,OAAOA,WAAW,QAAQ;AAE1B,SAASC,SAAS,EAAEC,cAAc,QAAQ,eAAe;AACzD,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,OAAO,QAAQ,sBAAsB;AAE9C,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,GAAG,QAAQ,YAAY;AAUhC,OAAO,MAAMC,eAAe,CAAC,EAC3BC,UAAU,EACVC,KAAK,EACLC,KAAK,EACLC,aAAa,EACbC,aAAa,EACK;IAClB,qBACE,MAACC;QACCC,OAAOR,IACL;;0BAGF,KAACO;gBAAIC,OAAOR,IAAI;0BACd,cAAA,KAACO;oBAAIC,OAAOR,IAAI;8BACd,cAAA,KAACF,QAAQW,MAAM;wBACbC,MAAK;wBACLC,SAASN,gBAAgB,kBAAkB;wBAC3CO,SAASN;wBACTO,QAAQR;wBACRS,WAAWT,gBAAgB,mBAAmB;kCAE9C,cAAA,KAACR;4BAAKkB,MAAMV,gBAAgBT,iBAAiBD;;;;;0BAInD,KAACI;gBAAWG,YAAYA;gBAAYE,OAAOA;gBAAOD,OAAOA;;;;AAG/D,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/Sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/Sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAKvC,eAAO,MAAM,OAAO,2DAKf;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,uBA2BF,CAAC"}
|
|
@@ -4,6 +4,7 @@ import React from "react";
|
|
|
4
4
|
import { memo, useCallback } from "react";
|
|
5
5
|
import { TableOfContents } from "../TableOfContents/index.js";
|
|
6
6
|
import { cn } from "../../lib/utils/index.js";
|
|
7
|
+
import { twj } from "tw-to-css";
|
|
7
8
|
export const Sidebar = /*#__PURE__*/ memo(({ editor, isOpen, onClose })=>{
|
|
8
9
|
const handlePotentialClose = useCallback(()=>{
|
|
9
10
|
if (window.innerWidth < 1024) {
|
|
@@ -14,11 +15,11 @@ export const Sidebar = /*#__PURE__*/ memo(({ editor, isOpen, onClose })=>{
|
|
|
14
15
|
]);
|
|
15
16
|
const windowClassName = cn("absolute top-0 left-0 bg-white lg:bg-white/30 lg:backdrop-blur-xl h-full lg:h-auto lg:relative z-[999] w-0 duration-300 transition-all", "dark:bg-black lg:dark:bg-black/30", !isOpen && "border-r-transparent", isOpen && "w-80 border-r border-r-neutral-200 dark:border-r-neutral-800");
|
|
16
17
|
return /*#__PURE__*/ _jsx("div", {
|
|
17
|
-
|
|
18
|
+
style: twj(windowClassName),
|
|
18
19
|
children: /*#__PURE__*/ _jsx("div", {
|
|
19
|
-
|
|
20
|
+
style: twj("w-full h-full overflow-hidden"),
|
|
20
21
|
children: /*#__PURE__*/ _jsx("div", {
|
|
21
|
-
|
|
22
|
+
style: twj("w-full h-full p-2 overflow-auto"),
|
|
22
23
|
children: /*#__PURE__*/ _jsx(TableOfContents, {
|
|
23
24
|
onItemClick: handlePotentialClose,
|
|
24
25
|
editor: editor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/features/Sidebar/Sidebar.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { memo, useCallback } from \"react\";\nimport { Editor } from \"@tiptap/react\";\nimport { TableOfContents } from \"../TableOfContents/index.js\";\nimport { cn } from \"../../lib/utils/index.js\";\n\nexport const Sidebar = memo(\n ({\n editor,\n isOpen,\n onClose,\n }: {\n editor: Editor;\n isOpen?: boolean;\n onClose: () => void;\n }) => {\n const handlePotentialClose = useCallback(() => {\n if (window.innerWidth < 1024) {\n onClose();\n }\n }, [onClose]);\n\n const windowClassName = cn(\n \"absolute top-0 left-0 bg-white lg:bg-white/30 lg:backdrop-blur-xl h-full lg:h-auto lg:relative z-[999] w-0 duration-300 transition-all\",\n \"dark:bg-black lg:dark:bg-black/30\",\n !isOpen && \"border-r-transparent\",\n isOpen && \"w-80 border-r border-r-neutral-200 dark:border-r-neutral-800\"\n );\n\n return (\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/features/Sidebar/Sidebar.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { memo, useCallback } from \"react\";\nimport { Editor } from \"@tiptap/react\";\nimport { TableOfContents } from \"../TableOfContents/index.js\";\nimport { cn } from \"../../lib/utils/index.js\";\nimport { twj } from \"tw-to-css\";\n\nexport const Sidebar = memo(\n ({\n editor,\n isOpen,\n onClose,\n }: {\n editor: Editor;\n isOpen?: boolean;\n onClose: () => void;\n }) => {\n const handlePotentialClose = useCallback(() => {\n if (window.innerWidth < 1024) {\n onClose();\n }\n }, [onClose]);\n\n const windowClassName = cn(\n \"absolute top-0 left-0 bg-white lg:bg-white/30 lg:backdrop-blur-xl h-full lg:h-auto lg:relative z-[999] w-0 duration-300 transition-all\",\n \"dark:bg-black lg:dark:bg-black/30\",\n !isOpen && \"border-r-transparent\",\n isOpen && \"w-80 border-r border-r-neutral-200 dark:border-r-neutral-800\"\n );\n\n return (\n <div style={twj(windowClassName)}>\n <div style={twj(\"w-full h-full overflow-hidden\")}>\n <div style={twj(\"w-full h-full p-2 overflow-auto\")}>\n <TableOfContents\n onItemClick={handlePotentialClose}\n editor={editor}\n />\n </div>\n </div>\n </div>\n );\n }\n);\n\nSidebar.displayName = \"TableOfContentSidepanel\";\n"],"names":["React","memo","useCallback","TableOfContents","cn","twj","Sidebar","editor","isOpen","onClose","handlePotentialClose","window","innerWidth","windowClassName","div","style","onItemClick","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,OAAOA,WAAW,QAAQ;AAC1B,SAASC,IAAI,EAAEC,WAAW,QAAQ,QAAQ;AAE1C,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,SAASC,EAAE,QAAQ,2BAA2B;AAC9C,SAASC,GAAG,QAAQ,YAAY;AAEhC,OAAO,MAAMC,wBAAUL,KACrB,CAAC,EACCM,MAAM,EACNC,MAAM,EACNC,OAAO,EAKR;IACC,MAAMC,uBAAuBR,YAAY;QACvC,IAAIS,OAAOC,UAAU,GAAG,MAAM;YAC5BH;QACF;IACF,GAAG;QAACA;KAAQ;IAEZ,MAAMI,kBAAkBT,GACtB,0IACA,qCACA,CAACI,UAAU,wBACXA,UAAU;IAGZ,qBACE,KAACM;QAAIC,OAAOV,IAAIQ;kBACd,cAAA,KAACC;YAAIC,OAAOV,IAAI;sBACd,cAAA,KAACS;gBAAIC,OAAOV,IAAI;0BACd,cAAA,KAACF;oBACCa,aAAaN;oBACbH,QAAQA;;;;;AAMpB,GACA;AAEFD,QAAQW,WAAW,GAAG"}
|
package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentItemMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ContentItemMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAqBvC,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,eAAe,eAAgB,oBAAoB,gCA4E/D,CAAC"}
|
|
@@ -11,6 +11,7 @@ import { DropdownButton } from "../../ui/Dropdown/Dropdown.js";
|
|
|
11
11
|
import { Surface } from "../../ui/Surface.js";
|
|
12
12
|
import useContentItemActions from "./hooks/useContentItemActions.js";
|
|
13
13
|
import { useData } from "./hooks/useData.js";
|
|
14
|
+
import { twj } from "tw-to-css";
|
|
14
15
|
export const ContentItemMenu = ({ editor })=>{
|
|
15
16
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
16
17
|
const [tippyOptions, setTippyOptions] = useState();
|
|
@@ -40,7 +41,7 @@ export const ContentItemMenu = ({ editor })=>{
|
|
|
40
41
|
zIndex: 99
|
|
41
42
|
},
|
|
42
43
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
43
|
-
|
|
44
|
+
style: twj("flex items-center gap-0.5"),
|
|
44
45
|
children: [
|
|
45
46
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
46
47
|
type: "button",
|
|
@@ -67,7 +68,7 @@ export const ContentItemMenu = ({ editor })=>{
|
|
|
67
68
|
align: "start",
|
|
68
69
|
sideOffset: 8,
|
|
69
70
|
children: /*#__PURE__*/ _jsxs(Surface, {
|
|
70
|
-
|
|
71
|
+
style: twj("p-2 flex flex-col min-w-[16rem]"),
|
|
71
72
|
children: [
|
|
72
73
|
/*#__PURE__*/ _jsx(Popover.Close, {
|
|
73
74
|
children: /*#__PURE__*/ _jsxs(DropdownButton, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.tsx"],"sourcesContent":["\"use client\";\nimport { DragHandle } from \"@tiptap-pro/extension-drag-handle-react\";\nimport { Editor } from \"@tiptap/react\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\n\nimport { useTranslation } from \"@payloadcms/ui/providers/Translation\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport {\n Clipboard,\n Copy,\n GripVertical,\n Plus,\n RemoveFormatting,\n Trash2,\n} from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DropdownButton } from \"../../ui/Dropdown/Dropdown.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport useContentItemActions from \"./hooks/useContentItemActions.js\";\nimport { useData } from \"./hooks/useData.js\";\n\nexport type ContentItemMenuProps = {\n editor: Editor;\n};\n\nexport const ContentItemMenu = ({ editor }: ContentItemMenuProps) => {\n const [menuOpen, setMenuOpen] = useState(false);\n const [tippyOptions, setTippyOptions] = useState();\n const data = useData();\n const { i18n } = useTranslation();\n const actions = useContentItemActions(\n editor,\n data.currentNode,\n data.currentNodePos\n );\n\n useEffect(() => {\n if (menuOpen) {\n editor.commands.setMeta(\"lockDragHandle\", true);\n } else {\n editor.commands.setMeta(\"lockDragHandle\", false);\n }\n }, [editor, menuOpen]);\n\n return (\n <DragHandle\n pluginKey=\"ContentItemMenu\"\n editor={editor}\n onNodeChange={data.handleNodeChange}\n tippyOptions={{\n placement: \"left\",\n offset: [-12, 2],\n zIndex: 99,\n }}\n >\n <div
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.tsx"],"sourcesContent":["\"use client\";\nimport { DragHandle } from \"@tiptap-pro/extension-drag-handle-react\";\nimport { Editor } from \"@tiptap/react\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\n\nimport { useTranslation } from \"@payloadcms/ui/providers/Translation\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport {\n Clipboard,\n Copy,\n GripVertical,\n Plus,\n RemoveFormatting,\n Trash2,\n} from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DropdownButton } from \"../../ui/Dropdown/Dropdown.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport useContentItemActions from \"./hooks/useContentItemActions.js\";\nimport { useData } from \"./hooks/useData.js\";\nimport { twj } from \"tw-to-css\";\n\nexport type ContentItemMenuProps = {\n editor: Editor;\n};\n\nexport const ContentItemMenu = ({ editor }: ContentItemMenuProps) => {\n const [menuOpen, setMenuOpen] = useState(false);\n const [tippyOptions, setTippyOptions] = useState();\n const data = useData();\n const { i18n } = useTranslation();\n const actions = useContentItemActions(\n editor,\n data.currentNode,\n data.currentNodePos\n );\n\n useEffect(() => {\n if (menuOpen) {\n editor.commands.setMeta(\"lockDragHandle\", true);\n } else {\n editor.commands.setMeta(\"lockDragHandle\", false);\n }\n }, [editor, menuOpen]);\n\n return (\n <DragHandle\n pluginKey=\"ContentItemMenu\"\n editor={editor}\n onNodeChange={data.handleNodeChange}\n tippyOptions={{\n placement: \"left\",\n offset: [-12, 2],\n zIndex: 99,\n }}\n >\n <div style={twj(\"flex items-center gap-0.5\")}>\n <Toolbar.Button type=\"button\" onClick={actions.handleAdd}>\n <Icon icon={Plus} />\n </Toolbar.Button>\n <Popover.Root open={menuOpen} onOpenChange={setMenuOpen}>\n <Popover.Trigger asChild>\n <Toolbar.Button type=\"button\">\n <Icon icon={GripVertical} />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"start\" sideOffset={8}>\n <Surface style={twj(\"p-2 flex flex-col min-w-[16rem]\")}>\n <Popover.Close>\n <DropdownButton onClick={actions.resetTextFormatting}>\n <Icon icon={RemoveFormatting} />\n Clear formatting\n </DropdownButton>\n </Popover.Close>\n <Popover.Close>\n <DropdownButton onClick={actions.copyNodeToClipboard}>\n <Icon icon={Clipboard} />\n Copy to clipboard\n </DropdownButton>\n </Popover.Close>\n <Popover.Close>\n <DropdownButton onClick={actions.duplicateNode}>\n <Icon icon={Copy} />\n Duplicate\n </DropdownButton>\n </Popover.Close>\n <Toolbar.Divider horizontal />\n <Popover.Close>\n <DropdownButton\n onClick={actions.deleteNode}\n className=\"text-red-500 bg-red-500 dark:text-red-500 hover:bg-red-500 dark:hover:text-red-500 dark:hover:bg-red-500 bg-opacity-10 hover:bg-opacity-20 dark:hover:bg-opacity-20\"\n >\n <Icon icon={Trash2} />\n Delete\n </DropdownButton>\n </Popover.Close>\n </Surface>\n </Popover.Content>\n </Popover.Root>\n </div>\n </DragHandle>\n );\n};\n"],"names":["DragHandle","Icon","Toolbar","useTranslation","Popover","Clipboard","Copy","GripVertical","Plus","RemoveFormatting","Trash2","useEffect","useState","DropdownButton","Surface","useContentItemActions","useData","twj","ContentItemMenu","editor","menuOpen","setMenuOpen","tippyOptions","setTippyOptions","data","i18n","actions","currentNode","currentNodePos","commands","setMeta","pluginKey","onNodeChange","handleNodeChange","placement","offset","zIndex","div","style","Button","type","onClick","handleAdd","icon","Root","open","onOpenChange","Trigger","asChild","Content","side","align","sideOffset","Close","resetTextFormatting","copyNodeToClipboard","duplicateNode","Divider","horizontal","deleteNode","className"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,SAASA,UAAU,QAAQ,0CAA0C;AAErE,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,OAAO,QAAQ,sBAAsB;AAE9C,SAASC,cAAc,QAAQ,uCAAuC;AACtE,YAAYC,aAAa,0BAA0B;AACnD,SACEC,SAAS,EACTC,IAAI,EACJC,YAAY,EACZC,IAAI,EACJC,gBAAgB,EAChBC,MAAM,QACD,eAAe;AACtB,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAC5C,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,OAAOC,2BAA2B,mCAAmC;AACrE,SAASC,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,GAAG,QAAQ,YAAY;AAMhC,OAAO,MAAMC,kBAAkB,CAAC,EAAEC,MAAM,EAAwB;IAC9D,MAAM,CAACC,UAAUC,YAAY,GAAGT,SAAS;IACzC,MAAM,CAACU,cAAcC,gBAAgB,GAAGX;IACxC,MAAMY,OAAOR;IACb,MAAM,EAAES,IAAI,EAAE,GAAGtB;IACjB,MAAMuB,UAAUX,sBACdI,QACAK,KAAKG,WAAW,EAChBH,KAAKI,cAAc;IAGrBjB,UAAU;QACR,IAAIS,UAAU;YACZD,OAAOU,QAAQ,CAACC,OAAO,CAAC,kBAAkB;QAC5C,OAAO;YACLX,OAAOU,QAAQ,CAACC,OAAO,CAAC,kBAAkB;QAC5C;IACF,GAAG;QAACX;QAAQC;KAAS;IAErB,qBACE,KAACpB;QACC+B,WAAU;QACVZ,QAAQA;QACRa,cAAcR,KAAKS,gBAAgB;QACnCX,cAAc;YACZY,WAAW;YACXC,QAAQ;gBAAC,CAAC;gBAAI;aAAE;YAChBC,QAAQ;QACV;kBAEA,cAAA,MAACC;YAAIC,OAAOrB,IAAI;;8BACd,KAACf,QAAQqC,MAAM;oBAACC,MAAK;oBAASC,SAASf,QAAQgB,SAAS;8BACtD,cAAA,KAACzC;wBAAK0C,MAAMnC;;;8BAEd,MAACJ,QAAQwC,IAAI;oBAACC,MAAMzB;oBAAU0B,cAAczB;;sCAC1C,KAACjB,QAAQ2C,OAAO;4BAACC,OAAO;sCACtB,cAAA,KAAC9C,QAAQqC,MAAM;gCAACC,MAAK;0CACnB,cAAA,KAACvC;oCAAK0C,MAAMpC;;;;sCAGhB,KAACH,QAAQ6C,OAAO;4BAACC,MAAK;4BAASC,OAAM;4BAAQC,YAAY;sCACvD,cAAA,MAACtC;gCAAQwB,OAAOrB,IAAI;;kDAClB,KAACb,QAAQiD,KAAK;kDACZ,cAAA,MAACxC;4CAAe4B,SAASf,QAAQ4B,mBAAmB;;8DAClD,KAACrD;oDAAK0C,MAAMlC;;gDAAoB;;;;kDAIpC,KAACL,QAAQiD,KAAK;kDACZ,cAAA,MAACxC;4CAAe4B,SAASf,QAAQ6B,mBAAmB;;8DAClD,KAACtD;oDAAK0C,MAAMtC;;gDAAa;;;;kDAI7B,KAACD,QAAQiD,KAAK;kDACZ,cAAA,MAACxC;4CAAe4B,SAASf,QAAQ8B,aAAa;;8DAC5C,KAACvD;oDAAK0C,MAAMrC;;gDAAQ;;;;kDAIxB,KAACJ,QAAQuD,OAAO;wCAACC,UAAU;;kDAC3B,KAACtD,QAAQiD,KAAK;kDACZ,cAAA,MAACxC;4CACC4B,SAASf,QAAQiC,UAAU;4CAC3BC,WAAU;;8DAEV,KAAC3D;oDAAK0C,MAAMjC;;gDAAU;;;;;;;;;;;;AAUxC,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAC;AAMzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"LinkMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAyB,MAAM,OAAO,CAAC;AAMzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,QAAQ,yBAA0B,SAAS,KAAG,SAwG1D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { Instagram, Twitter, Youtube } from "lucide-react";
|
|
|
5
5
|
import { LinkEditorPanel, LinkPreviewPanel } from "../../panels/index.js";
|
|
6
6
|
import { Surface } from "../../ui/Surface.js";
|
|
7
7
|
import { Toolbar } from "../../ui/Toolbar.js";
|
|
8
|
+
import { twj } from "tw-to-css";
|
|
8
9
|
export const LinkMenu = ({ editor, appendTo })=>{
|
|
9
10
|
const [showEdit, setShowEdit] = useState(false);
|
|
10
11
|
const shouldShow = useCallback(()=>{
|
|
@@ -97,7 +98,7 @@ export const LinkMenu = ({ editor, appendTo })=>{
|
|
|
97
98
|
}
|
|
98
99
|
},
|
|
99
100
|
children: /*#__PURE__*/ _jsx(Surface, {
|
|
100
|
-
|
|
101
|
+
style: twj("p-2 min-w-[20rem]"),
|
|
101
102
|
children: checkIfMatch(link, editor)
|
|
102
103
|
})
|
|
103
104
|
})
|
|
@@ -115,7 +116,7 @@ const checkIfMatch = (url, editor)=>{
|
|
|
115
116
|
editor.chain().selectParentNode().deleteSelection().insertTwitter(url).run();
|
|
116
117
|
},
|
|
117
118
|
value: "continue",
|
|
118
|
-
|
|
119
|
+
style: twj("gap-2 px-4 w-full flex justify-start"),
|
|
119
120
|
children: [
|
|
120
121
|
/*#__PURE__*/ _jsx(Twitter, {}),
|
|
121
122
|
"Embed Tweet"
|
|
@@ -127,7 +128,7 @@ const checkIfMatch = (url, editor)=>{
|
|
|
127
128
|
editor.chain().selectParentNode().deleteSelection().insertInstagram(url).run();
|
|
128
129
|
},
|
|
129
130
|
value: "continue",
|
|
130
|
-
|
|
131
|
+
style: twj("gap-2 px-4 w-full flex justify-start"),
|
|
131
132
|
children: [
|
|
132
133
|
/*#__PURE__*/ _jsx(Instagram, {}),
|
|
133
134
|
"Embed Instagram"
|
|
@@ -139,7 +140,7 @@ const checkIfMatch = (url, editor)=>{
|
|
|
139
140
|
editor.chain().selectParentNode().deleteSelection().insertYoutube(url).run();
|
|
140
141
|
},
|
|
141
142
|
value: "continue",
|
|
142
|
-
|
|
143
|
+
style: twj("gap-2 px-4 w-full flex justify-start"),
|
|
143
144
|
children: [
|
|
144
145
|
/*#__PURE__*/ _jsx(Youtube, {}),
|
|
145
146
|
"Embed Youtube"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu, Editor } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useState } from \"react\";\n\nimport { Instagram, Twitter, Youtube } from \"lucide-react\";\nimport { LinkEditorPanel, LinkPreviewPanel } from \"../../panels/index.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { MenuProps } from \"../types.js\";\n\nexport const LinkMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const [showEdit, setShowEdit] = useState(false);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"link\");\n return isActive;\n }, [editor]);\n\n const shouldShowSocialMedia = useCallback(() => {\n const { href: link, target } = editor.getAttributes(\"link\");\n const isActive = editor.isActive(\"link\");\n return isActive && checkIfMatchesSocialMedia(link);\n }, [editor]);\n\n const { href: link, target } = editor.getAttributes(\"link\");\n\n const handleEdit = useCallback(() => {\n setShowEdit(true);\n }, []);\n\n const onSetLink = useCallback(\n (url: string, openInNewTab?: boolean) => {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: url, target: openInNewTab ? \"_blank\" : \"\" })\n .run();\n setShowEdit(false);\n },\n [editor]\n );\n\n const onUnsetLink = useCallback(() => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n setShowEdit(false);\n return null;\n }, [editor]);\n\n const onShowEdit = useCallback(() => {\n setShowEdit(true);\n }, []);\n\n const onHideEdit = useCallback(() => {\n setShowEdit(false);\n }, []);\n\n return (\n <>\n <BaseBubbleMenu\n editor={editor}\n pluginKey=\"textMenu\"\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n appendTo: () => {\n return appendTo?.current;\n },\n onHidden: () => {\n setShowEdit(false);\n },\n }}\n >\n {showEdit ? (\n <LinkEditorPanel\n initialUrl={link}\n initialOpenInNewTab={target === \"_blank\"}\n onSetLink={onSetLink}\n />\n ) : (\n <LinkPreviewPanel\n url={link}\n onClear={onUnsetLink}\n onEdit={handleEdit}\n />\n )}\n </BaseBubbleMenu>\n <BaseBubbleMenu\n editor={editor}\n pluginKey=\"socialMediaTextMenu\"\n shouldShow={shouldShowSocialMedia}\n updateDelay={0}\n tippyOptions={{\n popperOptions: {\n placement: \"bottom-start\",\n },\n placement: \"bottom-start\",\n appendTo: () => {\n return appendTo?.current;\n },\n onHidden: () => {\n setShowEdit(false);\n },\n }}\n >\n <Surface
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu, Editor } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useState } from \"react\";\n\nimport { Instagram, Twitter, Youtube } from \"lucide-react\";\nimport { LinkEditorPanel, LinkPreviewPanel } from \"../../panels/index.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { MenuProps } from \"../types.js\";\nimport { twj } from \"tw-to-css\";\n\nexport const LinkMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const [showEdit, setShowEdit] = useState(false);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"link\");\n return isActive;\n }, [editor]);\n\n const shouldShowSocialMedia = useCallback(() => {\n const { href: link, target } = editor.getAttributes(\"link\");\n const isActive = editor.isActive(\"link\");\n return isActive && checkIfMatchesSocialMedia(link);\n }, [editor]);\n\n const { href: link, target } = editor.getAttributes(\"link\");\n\n const handleEdit = useCallback(() => {\n setShowEdit(true);\n }, []);\n\n const onSetLink = useCallback(\n (url: string, openInNewTab?: boolean) => {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: url, target: openInNewTab ? \"_blank\" : \"\" })\n .run();\n setShowEdit(false);\n },\n [editor]\n );\n\n const onUnsetLink = useCallback(() => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n setShowEdit(false);\n return null;\n }, [editor]);\n\n const onShowEdit = useCallback(() => {\n setShowEdit(true);\n }, []);\n\n const onHideEdit = useCallback(() => {\n setShowEdit(false);\n }, []);\n\n return (\n <>\n <BaseBubbleMenu\n editor={editor}\n pluginKey=\"textMenu\"\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n appendTo: () => {\n return appendTo?.current;\n },\n onHidden: () => {\n setShowEdit(false);\n },\n }}\n >\n {showEdit ? (\n <LinkEditorPanel\n initialUrl={link}\n initialOpenInNewTab={target === \"_blank\"}\n onSetLink={onSetLink}\n />\n ) : (\n <LinkPreviewPanel\n url={link}\n onClear={onUnsetLink}\n onEdit={handleEdit}\n />\n )}\n </BaseBubbleMenu>\n <BaseBubbleMenu\n editor={editor}\n pluginKey=\"socialMediaTextMenu\"\n shouldShow={shouldShowSocialMedia}\n updateDelay={0}\n tippyOptions={{\n popperOptions: {\n placement: \"bottom-start\",\n },\n placement: \"bottom-start\",\n appendTo: () => {\n return appendTo?.current;\n },\n onHidden: () => {\n setShowEdit(false);\n },\n }}\n >\n <Surface style={twj(\"p-2 min-w-[20rem]\")}>\n {checkIfMatch(link, editor)}\n </Surface>\n </BaseBubbleMenu>\n </>\n );\n};\n\nexport default LinkMenu;\n\nconst checkIfMatch = (url: string, editor: Editor) => {\n const twitterRegex =\n /^https:\\/\\/twitter\\.com\\/([a-zA-Z0-9_-]+)\\/status\\/(\\d+)/g;\n const instagramRegex = /^https:\\/\\/www\\.instagram\\.com\\/p\\/([A-Za-z0-9_-]+)/g;\n const youtubeRegex =\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube(-nocookie)?\\.com|youtu.be))(\\/(?:[\\w\\-]+\\?v=|embed\\/|live\\/|v\\/)?)([\\w\\-]+)(\\S+)?/g;\n\n if (twitterRegex.test(url)) {\n return (\n <Toolbar.Button\n onClick={() => {\n editor\n .chain()\n .selectParentNode()\n .deleteSelection()\n .insertTwitter(url)\n .run();\n }}\n value=\"continue\"\n style={twj(\"gap-2 px-4 w-full flex justify-start\")}\n >\n <Twitter />\n Embed Tweet\n </Toolbar.Button>\n );\n } else if (instagramRegex.test(url)) {\n return (\n <Toolbar.Button\n onClick={() => {\n editor\n .chain()\n .selectParentNode()\n .deleteSelection()\n .insertInstagram(url)\n .run();\n }}\n value=\"continue\"\n style={twj(\"gap-2 px-4 w-full flex justify-start\")}\n >\n <Instagram />\n Embed Instagram\n </Toolbar.Button>\n );\n } else if (youtubeRegex.test(url)) {\n return (\n <Toolbar.Button\n onClick={() => {\n editor\n .chain()\n .selectParentNode()\n .deleteSelection()\n .insertYoutube(url)\n .run();\n }}\n value=\"continue\"\n style={twj(\"gap-2 px-4 w-full flex justify-start\")}\n >\n <Youtube />\n Embed Youtube\n </Toolbar.Button>\n );\n }\n return null;\n};\n\nconst checkIfMatchesSocialMedia = (url: string) => {\n const twitterRegex =\n /^https:\\/\\/twitter\\.com\\/([a-zA-Z0-9_-]+)\\/status\\/(\\d+)/g;\n const instagramRegex = /^https:\\/\\/www\\.instagram\\.com\\/p\\/([A-Za-z0-9_-]+)/g;\n const youtubeRegex =\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube(-nocookie)?\\.com|youtu.be))(\\/(?:[\\w\\-]+\\?v=|embed\\/|live\\/|v\\/)?)([\\w\\-]+)(\\S+)?/g;\n\n if (twitterRegex.test(url)) {\n return true;\n } else if (instagramRegex.test(url)) {\n return true;\n } else if (youtubeRegex.test(url)) {\n return true;\n }\n return false;\n};\n"],"names":["BubbleMenu","BaseBubbleMenu","useCallback","useState","Instagram","Twitter","Youtube","LinkEditorPanel","LinkPreviewPanel","Surface","Toolbar","twj","LinkMenu","editor","appendTo","showEdit","setShowEdit","shouldShow","isActive","shouldShowSocialMedia","href","link","target","getAttributes","checkIfMatchesSocialMedia","handleEdit","onSetLink","url","openInNewTab","chain","focus","extendMarkRange","setLink","run","onUnsetLink","unsetLink","onShowEdit","onHideEdit","pluginKey","updateDelay","tippyOptions","popperOptions","modifiers","name","enabled","current","onHidden","initialUrl","initialOpenInNewTab","onClear","onEdit","placement","style","checkIfMatch","twitterRegex","instagramRegex","youtubeRegex","test","Button","onClick","selectParentNode","deleteSelection","insertTwitter","value","insertInstagram","insertYoutube"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"TextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AA2CnD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,QAAQ,eAAgB,aAAa,gCA6NjD,CAAC"}
|
|
@@ -15,6 +15,7 @@ import { FontSizePicker } from "./components/FontSizePicker.js";
|
|
|
15
15
|
import { useTextmenuCommands } from "./hooks/useTextmenuCommands.js";
|
|
16
16
|
import { useTextmenuContentTypes } from "./hooks/useTextmenuContentTypes.js";
|
|
17
17
|
import { useTextmenuStates } from "./hooks/useTextmenuStates.js";
|
|
18
|
+
import { twj } from "tw-to-css";
|
|
18
19
|
// We memorize the button so each button is not rerendered
|
|
19
20
|
// on every editor state change
|
|
20
21
|
const MemoButton = /*#__PURE__*/ memo(Toolbar.Button);
|
|
@@ -49,7 +50,7 @@ export const TextMenu = ({ editor })=>{
|
|
|
49
50
|
}) : /*#__PURE__*/ _jsxs(Toolbar.Wrapper, {
|
|
50
51
|
children: [
|
|
51
52
|
/*#__PURE__*/ _jsxs(Toolbar.Button, {
|
|
52
|
-
|
|
53
|
+
style: twj("text-purple-500 hover:text-purple-600 active:text-purple-600 dark:text-purple-400 dark:hover:text-purple-300 dark:active:text-purple-400"),
|
|
53
54
|
activeClassname: "text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200",
|
|
54
55
|
onClick: ()=>setOpenAi(true),
|
|
55
56
|
children: [
|
|
@@ -176,7 +177,7 @@ export const TextMenu = ({ editor })=>{
|
|
|
176
177
|
sideOffset: 8,
|
|
177
178
|
asChild: true,
|
|
178
179
|
children: /*#__PURE__*/ _jsx(Surface, {
|
|
179
|
-
|
|
180
|
+
style: twj("p-1"),
|
|
180
181
|
children: /*#__PURE__*/ _jsx(MemoColorPicker, {
|
|
181
182
|
color: states.currentHighlight,
|
|
182
183
|
onChange: commands.onChangeHighlight,
|
|
@@ -204,7 +205,7 @@ export const TextMenu = ({ editor })=>{
|
|
|
204
205
|
sideOffset: 8,
|
|
205
206
|
asChild: true,
|
|
206
207
|
children: /*#__PURE__*/ _jsx(Surface, {
|
|
207
|
-
|
|
208
|
+
style: twj("p-1"),
|
|
208
209
|
children: /*#__PURE__*/ _jsx(MemoColorPicker, {
|
|
209
210
|
color: states.currentColor,
|
|
210
211
|
onChange: commands.onChangeColor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"sourcesContent":["import * as Popover from \"@radix-ui/react-popover\";\nimport { BubbleMenu, Editor } from \"@tiptap/react\";\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n Code,\n FileCode,\n Highlighter,\n Italic,\n MoveVertical,\n Palette,\n RemoveFormatting,\n Sparkles,\n Strikethrough,\n Subscript,\n Superscript,\n Underline,\n} from \"lucide-react\";\nimport { memo, useState } from \"react\";\nimport { ColorPicker } from \"../../panels/index.js\";\nimport { AIEditorPanel } from \"../../panels/AIEditorPanel/AIEditorPanel.js\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { ContentTypePicker } from \"./components/ContentTypePicker.js\";\nimport { EditLinkPopover } from \"./components/EditLinkPopover.js\";\nimport { FontFamilyPicker } from \"./components/FontFamilyPicker.js\";\nimport { FontSizePicker } from \"./components/FontSizePicker.js\";\nimport { useTextmenuCommands } from \"./hooks/useTextmenuCommands.js\";\nimport { useTextmenuContentTypes } from \"./hooks/useTextmenuContentTypes.js\";\nimport { useTextmenuStates } from \"./hooks/useTextmenuStates.js\";\n\n// We memorize the button so each button is not rerendered\n// on every editor state change\nconst MemoButton = memo(Toolbar.Button);\nconst MemoColorPicker = memo(ColorPicker);\nconst MemoFontFamilyPicker = memo(FontFamilyPicker);\nconst MemoFontSizePicker = memo(FontSizePicker);\nconst MemoContentTypePicker = memo(ContentTypePicker);\n\nexport type TextMenuProps = {\n editor: Editor;\n};\n\nexport const TextMenu = ({ editor }: TextMenuProps) => {\n const commands = useTextmenuCommands(editor);\n const states = useTextmenuStates(editor);\n const blockOptions = useTextmenuContentTypes(editor);\n const [openAi, setOpenAi] = useState(false);\n\n return (\n <BubbleMenu\n tippyOptions={{\n placement: \"bottom\",\n popperOptions: { placement: \"bottom\" },\n onHide: () => {\n setOpenAi(false);\n },\n }}\n editor={editor}\n pluginKey=\"textMenu\"\n shouldShow={states.shouldShow}\n updateDelay={100}\n >\n {openAi ? (\n <AIEditorPanel\n editor={editor}\n onOpenChange={(value) => {\n setOpenAi(value);\n }}\n />\n ) : (\n <Toolbar.Wrapper>\n <Toolbar.Button\n className=\"text-purple-500 hover:text-purple-600 active:text-purple-600 dark:text-purple-400 dark:hover:text-purple-300 dark:active:text-purple-400\"\n activeClassname=\"text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200\"\n onClick={() => setOpenAi(true)}\n >\n <Icon icon={Sparkles} className=\"mr-1\" />\n AI Tools\n </Toolbar.Button>\n <Toolbar.Divider />\n\n <MemoContentTypePicker options={blockOptions} />\n <MemoFontFamilyPicker\n onChange={commands.onSetFont}\n value={states.currentFont || \"\"}\n />\n <MemoFontSizePicker\n onChange={commands.onSetFontSize}\n value={states.currentSize || \"\"}\n />\n <Toolbar.Divider />\n <MemoButton\n type=\"button\"\n tooltip=\"Bold\"\n tooltipShortcut={[\"Mod\", \"B\"]}\n onClick={commands.onBold}\n active={states.isBold}\n >\n <Icon icon={Bold} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Italic\"\n tooltipShortcut={[\"Mod\", \"I\"]}\n onClick={commands.onItalic}\n active={states.isItalic}\n >\n <Icon icon={Italic} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Underline\"\n tooltipShortcut={[\"Mod\", \"U\"]}\n onClick={commands.onUnderline}\n active={states.isUnderline}\n >\n <Icon icon={Underline} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Strikehrough\"\n tooltipShortcut={[\"Mod\", \"Shift\", \"S\"]}\n onClick={commands.onStrike}\n active={states.isStrike}\n >\n <Icon icon={Strikethrough} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Code\"\n tooltipShortcut={[\"Mod\", \"E\"]}\n onClick={commands.onCode}\n active={states.isCode}\n >\n <Icon icon={Code} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Code block\"\n onClick={commands.onCodeBlock}\n >\n <Icon icon={FileCode} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Clear Formatting\"\n onClick={commands.onClearFormatting}\n >\n <Icon icon={RemoveFormatting} />\n </MemoButton>\n <EditLinkPopover onSetLink={commands.onLink} />\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton\n type=\"button\"\n active={!!states.currentHighlight}\n tooltip=\"Highlight text\"\n >\n <Icon icon={Highlighter} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" sideOffset={8} asChild>\n <Surface className=\"p-1\">\n <MemoColorPicker\n color={states.currentHighlight}\n onChange={commands.onChangeHighlight}\n onClear={commands.onClearHighlight}\n />\n </Surface>\n </Popover.Content>\n </Popover.Root>\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton\n type=\"button\"\n active={!!states.currentColor}\n tooltip=\"Text color\"\n >\n <Icon icon={Palette} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" sideOffset={8} asChild>\n <Surface className=\"p-1\">\n <MemoColorPicker\n color={states.currentColor}\n onChange={commands.onChangeColor}\n onClear={commands.onClearColor}\n />\n </Surface>\n </Popover.Content>\n </Popover.Root>\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton type=\"button\" tooltip=\"More options\">\n <Icon icon={MoveVertical} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" asChild>\n <Toolbar.Wrapper>\n <MemoButton\n type=\"button\"\n tooltip=\"Subscript\"\n tooltipShortcut={[\"Mod\", \".\"]}\n onClick={commands.onSubscript}\n active={states.isSubscript}\n >\n <Icon icon={Subscript} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Superscript\"\n tooltipShortcut={[\"Mod\", \",\"]}\n onClick={commands.onSuperscript}\n active={states.isSuperscript}\n >\n <Icon icon={Superscript} />\n </MemoButton>\n <Toolbar.Divider />\n <MemoButton\n type=\"button\"\n tooltip=\"Align left\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"L\"]}\n onClick={commands.onAlignLeft}\n active={states.isAlignLeft}\n >\n <Icon icon={AlignLeft} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Align center\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"E\"]}\n onClick={commands.onAlignCenter}\n active={states.isAlignCenter}\n >\n <Icon icon={AlignCenter} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Align right\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"R\"]}\n onClick={commands.onAlignRight}\n active={states.isAlignRight}\n >\n <Icon icon={AlignRight} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Justify\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"J\"]}\n onClick={commands.onAlignJustify}\n active={states.isAlignJustify}\n >\n <Icon icon={AlignJustify} />\n </MemoButton>\n </Toolbar.Wrapper>\n </Popover.Content>\n </Popover.Root>\n </Toolbar.Wrapper>\n )}\n </BubbleMenu>\n );\n};\n"],"names":["Popover","BubbleMenu","AlignCenter","AlignJustify","AlignLeft","AlignRight","Bold","Code","FileCode","Highlighter","Italic","MoveVertical","Palette","RemoveFormatting","Sparkles","Strikethrough","Subscript","Superscript","Underline","memo","useState","ColorPicker","AIEditorPanel","Icon","Surface","Toolbar","ContentTypePicker","EditLinkPopover","FontFamilyPicker","FontSizePicker","useTextmenuCommands","useTextmenuContentTypes","useTextmenuStates","MemoButton","Button","MemoColorPicker","MemoFontFamilyPicker","MemoFontSizePicker","MemoContentTypePicker","TextMenu","editor","commands","states","blockOptions","openAi","setOpenAi","tippyOptions","placement","popperOptions","onHide","pluginKey","shouldShow","updateDelay","onOpenChange","value","Wrapper","className","activeClassname","onClick","icon","Divider","options","onChange","onSetFont","currentFont","onSetFontSize","currentSize","type","tooltip","tooltipShortcut","onBold","active","isBold","onItalic","isItalic","onUnderline","isUnderline","onStrike","isStrike","onCode","isCode","onCodeBlock","onClearFormatting","onSetLink","onLink","Root","Trigger","asChild","currentHighlight","Content","side","sideOffset","color","onChangeHighlight","onClear","onClearHighlight","currentColor","onChangeColor","onClearColor","onSubscript","isSubscript","onSuperscript","isSuperscript","onAlignLeft","isAlignLeft","onAlignCenter","isAlignCenter","onAlignRight","isAlignRight","onAlignJustify","isAlignJustify"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"sourcesContent":["import * as Popover from \"@radix-ui/react-popover\";\nimport { BubbleMenu, Editor } from \"@tiptap/react\";\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n Code,\n FileCode,\n Highlighter,\n Italic,\n MoveVertical,\n Palette,\n RemoveFormatting,\n Sparkles,\n Strikethrough,\n Subscript,\n Superscript,\n Underline,\n} from \"lucide-react\";\nimport { memo, useState } from \"react\";\nimport { ColorPicker } from \"../../panels/index.js\";\nimport { AIEditorPanel } from \"../../panels/AIEditorPanel/AIEditorPanel.js\";\nimport { Icon } from \"../../ui/Icon.js\";\nimport { Surface } from \"../../ui/Surface.js\";\nimport { Toolbar } from \"../../ui/Toolbar.js\";\nimport { ContentTypePicker } from \"./components/ContentTypePicker.js\";\nimport { EditLinkPopover } from \"./components/EditLinkPopover.js\";\nimport { FontFamilyPicker } from \"./components/FontFamilyPicker.js\";\nimport { FontSizePicker } from \"./components/FontSizePicker.js\";\nimport { useTextmenuCommands } from \"./hooks/useTextmenuCommands.js\";\nimport { useTextmenuContentTypes } from \"./hooks/useTextmenuContentTypes.js\";\nimport { useTextmenuStates } from \"./hooks/useTextmenuStates.js\";\nimport { twj } from \"tw-to-css\";\n\n// We memorize the button so each button is not rerendered\n// on every editor state change\nconst MemoButton = memo(Toolbar.Button);\nconst MemoColorPicker = memo(ColorPicker);\nconst MemoFontFamilyPicker = memo(FontFamilyPicker);\nconst MemoFontSizePicker = memo(FontSizePicker);\nconst MemoContentTypePicker = memo(ContentTypePicker);\n\nexport type TextMenuProps = {\n editor: Editor;\n};\n\nexport const TextMenu = ({ editor }: TextMenuProps) => {\n const commands = useTextmenuCommands(editor);\n const states = useTextmenuStates(editor);\n const blockOptions = useTextmenuContentTypes(editor);\n const [openAi, setOpenAi] = useState(false);\n\n return (\n <BubbleMenu\n tippyOptions={{\n placement: \"bottom\",\n popperOptions: { placement: \"bottom\" },\n onHide: () => {\n setOpenAi(false);\n },\n }}\n editor={editor}\n pluginKey=\"textMenu\"\n shouldShow={states.shouldShow}\n updateDelay={100}\n >\n {openAi ? (\n <AIEditorPanel\n editor={editor}\n onOpenChange={(value) => {\n setOpenAi(value);\n }}\n />\n ) : (\n <Toolbar.Wrapper>\n <Toolbar.Button\n style={twj(\n \"text-purple-500 hover:text-purple-600 active:text-purple-600 dark:text-purple-400 dark:hover:text-purple-300 dark:active:text-purple-400\"\n )}\n activeClassname=\"text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200\"\n onClick={() => setOpenAi(true)}\n >\n <Icon icon={Sparkles} className=\"mr-1\" />\n AI Tools\n </Toolbar.Button>\n <Toolbar.Divider />\n\n <MemoContentTypePicker options={blockOptions} />\n <MemoFontFamilyPicker\n onChange={commands.onSetFont}\n value={states.currentFont || \"\"}\n />\n <MemoFontSizePicker\n onChange={commands.onSetFontSize}\n value={states.currentSize || \"\"}\n />\n <Toolbar.Divider />\n <MemoButton\n type=\"button\"\n tooltip=\"Bold\"\n tooltipShortcut={[\"Mod\", \"B\"]}\n onClick={commands.onBold}\n active={states.isBold}\n >\n <Icon icon={Bold} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Italic\"\n tooltipShortcut={[\"Mod\", \"I\"]}\n onClick={commands.onItalic}\n active={states.isItalic}\n >\n <Icon icon={Italic} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Underline\"\n tooltipShortcut={[\"Mod\", \"U\"]}\n onClick={commands.onUnderline}\n active={states.isUnderline}\n >\n <Icon icon={Underline} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Strikehrough\"\n tooltipShortcut={[\"Mod\", \"Shift\", \"S\"]}\n onClick={commands.onStrike}\n active={states.isStrike}\n >\n <Icon icon={Strikethrough} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Code\"\n tooltipShortcut={[\"Mod\", \"E\"]}\n onClick={commands.onCode}\n active={states.isCode}\n >\n <Icon icon={Code} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Code block\"\n onClick={commands.onCodeBlock}\n >\n <Icon icon={FileCode} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Clear Formatting\"\n onClick={commands.onClearFormatting}\n >\n <Icon icon={RemoveFormatting} />\n </MemoButton>\n <EditLinkPopover onSetLink={commands.onLink} />\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton\n type=\"button\"\n active={!!states.currentHighlight}\n tooltip=\"Highlight text\"\n >\n <Icon icon={Highlighter} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" sideOffset={8} asChild>\n <Surface style={twj(\"p-1\")}>\n <MemoColorPicker\n color={states.currentHighlight}\n onChange={commands.onChangeHighlight}\n onClear={commands.onClearHighlight}\n />\n </Surface>\n </Popover.Content>\n </Popover.Root>\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton\n type=\"button\"\n active={!!states.currentColor}\n tooltip=\"Text color\"\n >\n <Icon icon={Palette} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" sideOffset={8} asChild>\n <Surface style={twj(\"p-1\")}>\n <MemoColorPicker\n color={states.currentColor}\n onChange={commands.onChangeColor}\n onClear={commands.onClearColor}\n />\n </Surface>\n </Popover.Content>\n </Popover.Root>\n <Popover.Root>\n <Popover.Trigger asChild>\n <MemoButton type=\"button\" tooltip=\"More options\">\n <Icon icon={MoveVertical} />\n </MemoButton>\n </Popover.Trigger>\n <Popover.Content side=\"top\" asChild>\n <Toolbar.Wrapper>\n <MemoButton\n type=\"button\"\n tooltip=\"Subscript\"\n tooltipShortcut={[\"Mod\", \".\"]}\n onClick={commands.onSubscript}\n active={states.isSubscript}\n >\n <Icon icon={Subscript} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Superscript\"\n tooltipShortcut={[\"Mod\", \",\"]}\n onClick={commands.onSuperscript}\n active={states.isSuperscript}\n >\n <Icon icon={Superscript} />\n </MemoButton>\n <Toolbar.Divider />\n <MemoButton\n type=\"button\"\n tooltip=\"Align left\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"L\"]}\n onClick={commands.onAlignLeft}\n active={states.isAlignLeft}\n >\n <Icon icon={AlignLeft} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Align center\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"E\"]}\n onClick={commands.onAlignCenter}\n active={states.isAlignCenter}\n >\n <Icon icon={AlignCenter} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Align right\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"R\"]}\n onClick={commands.onAlignRight}\n active={states.isAlignRight}\n >\n <Icon icon={AlignRight} />\n </MemoButton>\n <MemoButton\n type=\"button\"\n tooltip=\"Justify\"\n tooltipShortcut={[\"Shift\", \"Mod\", \"J\"]}\n onClick={commands.onAlignJustify}\n active={states.isAlignJustify}\n >\n <Icon icon={AlignJustify} />\n </MemoButton>\n </Toolbar.Wrapper>\n </Popover.Content>\n </Popover.Root>\n </Toolbar.Wrapper>\n )}\n </BubbleMenu>\n );\n};\n"],"names":["Popover","BubbleMenu","AlignCenter","AlignJustify","AlignLeft","AlignRight","Bold","Code","FileCode","Highlighter","Italic","MoveVertical","Palette","RemoveFormatting","Sparkles","Strikethrough","Subscript","Superscript","Underline","memo","useState","ColorPicker","AIEditorPanel","Icon","Surface","Toolbar","ContentTypePicker","EditLinkPopover","FontFamilyPicker","FontSizePicker","useTextmenuCommands","useTextmenuContentTypes","useTextmenuStates","twj","MemoButton","Button","MemoColorPicker","MemoFontFamilyPicker","MemoFontSizePicker","MemoContentTypePicker","TextMenu","editor","commands","states","blockOptions","openAi","setOpenAi","tippyOptions","placement","popperOptions","onHide","pluginKey","shouldShow","updateDelay","onOpenChange","value","Wrapper","style","activeClassname","onClick","icon","className","Divider","options","onChange","onSetFont","currentFont","onSetFontSize","currentSize","type","tooltip","tooltipShortcut","onBold","active","isBold","onItalic","isItalic","onUnderline","isUnderline","onStrike","isStrike","onCode","isCode","onCodeBlock","onClearFormatting","onSetLink","onLink","Root","Trigger","asChild","currentHighlight","Content","side","sideOffset","color","onChangeHighlight","onClear","onClearHighlight","currentColor","onChangeColor","onClearColor","onSubscript","isSubscript","onSuperscript","isSuperscript","onAlignLeft","isAlignLeft","onAlignCenter","isAlignCenter","onAlignRight","isAlignRight","onAlignJustify","isAlignJustify"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,YAAYA,aAAa,0BAA0B;AACnD,SAASC,UAAU,QAAgB,gBAAgB;AACnD,SACEC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,UAAU,EACVC,IAAI,EACJC,IAAI,EACJC,QAAQ,EACRC,WAAW,EACXC,MAAM,EACNC,YAAY,EACZC,OAAO,EACPC,gBAAgB,EAChBC,QAAQ,EACRC,aAAa,EACbC,SAAS,EACTC,WAAW,EACXC,SAAS,QACJ,eAAe;AACtB,SAASC,IAAI,EAAEC,QAAQ,QAAQ,QAAQ;AACvC,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,aAAa,QAAQ,8CAA8C;AAC5E,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,eAAe,QAAQ,kCAAkC;AAClE,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,cAAc,QAAQ,iCAAiC;AAChE,SAASC,mBAAmB,QAAQ,iCAAiC;AACrE,SAASC,uBAAuB,QAAQ,qCAAqC;AAC7E,SAASC,iBAAiB,QAAQ,+BAA+B;AACjE,SAASC,GAAG,QAAQ,YAAY;AAEhC,0DAA0D;AAC1D,+BAA+B;AAC/B,MAAMC,2BAAaf,KAAKM,QAAQU,MAAM;AACtC,MAAMC,gCAAkBjB,KAAKE;AAC7B,MAAMgB,qCAAuBlB,KAAKS;AAClC,MAAMU,mCAAqBnB,KAAKU;AAChC,MAAMU,sCAAwBpB,KAAKO;AAMnC,OAAO,MAAMc,WAAW,CAAC,EAAEC,MAAM,EAAiB;IAChD,MAAMC,WAAWZ,oBAAoBW;IACrC,MAAME,SAASX,kBAAkBS;IACjC,MAAMG,eAAeb,wBAAwBU;IAC7C,MAAM,CAACI,QAAQC,UAAU,GAAG1B,SAAS;IAErC,qBACE,KAACnB;QACC8C,cAAc;YACZC,WAAW;YACXC,eAAe;gBAAED,WAAW;YAAS;YACrCE,QAAQ;gBACNJ,UAAU;YACZ;QACF;QACAL,QAAQA;QACRU,WAAU;QACVC,YAAYT,OAAOS,UAAU;QAC7BC,aAAa;kBAEZR,uBACC,KAACvB;YACCmB,QAAQA;YACRa,cAAc,CAACC;gBACbT,UAAUS;YACZ;2BAGF,MAAC9B,QAAQ+B,OAAO;;8BACd,MAAC/B,QAAQU,MAAM;oBACbsB,OAAOxB,IACL;oBAEFyB,iBAAgB;oBAChBC,SAAS,IAAMb,UAAU;;sCAEzB,KAACvB;4BAAKqC,MAAM9C;4BAAU+C,WAAU;;wBAAS;;;8BAG3C,KAACpC,QAAQqC,OAAO;8BAEhB,KAACvB;oBAAsBwB,SAASnB;;8BAChC,KAACP;oBACC2B,UAAUtB,SAASuB,SAAS;oBAC5BV,OAAOZ,OAAOuB,WAAW,IAAI;;8BAE/B,KAAC5B;oBACC0B,UAAUtB,SAASyB,aAAa;oBAChCZ,OAAOZ,OAAOyB,WAAW,IAAI;;8BAE/B,KAAC3C,QAAQqC,OAAO;8BAChB,KAAC5B;oBACCmC,MAAK;oBACLC,SAAQ;oBACRC,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BZ,SAASjB,SAAS8B,MAAM;oBACxBC,QAAQ9B,OAAO+B,MAAM;8BAErB,cAAA,KAACnD;wBAAKqC,MAAMtD;;;8BAEd,KAAC4B;oBACCmC,MAAK;oBACLC,SAAQ;oBACRC,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BZ,SAASjB,SAASiC,QAAQ;oBAC1BF,QAAQ9B,OAAOiC,QAAQ;8BAEvB,cAAA,KAACrD;wBAAKqC,MAAMlD;;;8BAEd,KAACwB;oBACCmC,MAAK;oBACLC,SAAQ;oBACRC,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BZ,SAASjB,SAASmC,WAAW;oBAC7BJ,QAAQ9B,OAAOmC,WAAW;8BAE1B,cAAA,KAACvD;wBAAKqC,MAAM1C;;;8BAEd,KAACgB;oBACCmC,MAAK;oBACLC,SAAQ;oBACRC,iBAAiB;wBAAC;wBAAO;wBAAS;qBAAI;oBACtCZ,SAASjB,SAASqC,QAAQ;oBAC1BN,QAAQ9B,OAAOqC,QAAQ;8BAEvB,cAAA,KAACzD;wBAAKqC,MAAM7C;;;8BAEd,KAACmB;oBACCmC,MAAK;oBACLC,SAAQ;oBACRC,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BZ,SAASjB,SAASuC,MAAM;oBACxBR,QAAQ9B,OAAOuC,MAAM;8BAErB,cAAA,KAAC3D;wBAAKqC,MAAMrD;;;8BAEd,KAAC2B;oBACCmC,MAAK;oBACLC,SAAQ;oBACRX,SAASjB,SAASyC,WAAW;8BAE7B,cAAA,KAAC5D;wBAAKqC,MAAMpD;;;8BAEd,KAAC0B;oBACCmC,MAAK;oBACLC,SAAQ;oBACRX,SAASjB,SAAS0C,iBAAiB;8BAEnC,cAAA,KAAC7D;wBAAKqC,MAAM/C;;;8BAEd,KAACc;oBAAgB0D,WAAW3C,SAAS4C,MAAM;;8BAC3C,MAACtF,QAAQuF,IAAI;;sCACX,KAACvF,QAAQwF,OAAO;4BAACC,OAAO;sCACtB,cAAA,KAACvD;gCACCmC,MAAK;gCACLI,QAAQ,CAAC,CAAC9B,OAAO+C,gBAAgB;gCACjCpB,SAAQ;0CAER,cAAA,KAAC/C;oCAAKqC,MAAMnD;;;;sCAGhB,KAACT,QAAQ2F,OAAO;4BAACC,MAAK;4BAAMC,YAAY;4BAAGJ,OAAO;sCAChD,cAAA,KAACjE;gCAAQiC,OAAOxB,IAAI;0CAClB,cAAA,KAACG;oCACC0D,OAAOnD,OAAO+C,gBAAgB;oCAC9B1B,UAAUtB,SAASqD,iBAAiB;oCACpCC,SAAStD,SAASuD,gBAAgB;;;;;;8BAK1C,MAACjG,QAAQuF,IAAI;;sCACX,KAACvF,QAAQwF,OAAO;4BAACC,OAAO;sCACtB,cAAA,KAACvD;gCACCmC,MAAK;gCACLI,QAAQ,CAAC,CAAC9B,OAAOuD,YAAY;gCAC7B5B,SAAQ;0CAER,cAAA,KAAC/C;oCAAKqC,MAAMhD;;;;sCAGhB,KAACZ,QAAQ2F,OAAO;4BAACC,MAAK;4BAAMC,YAAY;4BAAGJ,OAAO;sCAChD,cAAA,KAACjE;gCAAQiC,OAAOxB,IAAI;0CAClB,cAAA,KAACG;oCACC0D,OAAOnD,OAAOuD,YAAY;oCAC1BlC,UAAUtB,SAASyD,aAAa;oCAChCH,SAAStD,SAAS0D,YAAY;;;;;;8BAKtC,MAACpG,QAAQuF,IAAI;;sCACX,KAACvF,QAAQwF,OAAO;4BAACC,OAAO;sCACtB,cAAA,KAACvD;gCAAWmC,MAAK;gCAASC,SAAQ;0CAChC,cAAA,KAAC/C;oCAAKqC,MAAMjD;;;;sCAGhB,KAACX,QAAQ2F,OAAO;4BAACC,MAAK;4BAAMH,OAAO;sCACjC,cAAA,MAAChE,QAAQ+B,OAAO;;kDACd,KAACtB;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAO;yCAAI;wCAC7BZ,SAASjB,SAAS2D,WAAW;wCAC7B5B,QAAQ9B,OAAO2D,WAAW;kDAE1B,cAAA,KAAC/E;4CAAKqC,MAAM5C;;;kDAEd,KAACkB;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAO;yCAAI;wCAC7BZ,SAASjB,SAAS6D,aAAa;wCAC/B9B,QAAQ9B,OAAO6D,aAAa;kDAE5B,cAAA,KAACjF;4CAAKqC,MAAM3C;;;kDAEd,KAACQ,QAAQqC,OAAO;kDAChB,KAAC5B;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCZ,SAASjB,SAAS+D,WAAW;wCAC7BhC,QAAQ9B,OAAO+D,WAAW;kDAE1B,cAAA,KAACnF;4CAAKqC,MAAMxD;;;kDAEd,KAAC8B;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCZ,SAASjB,SAASiE,aAAa;wCAC/BlC,QAAQ9B,OAAOiE,aAAa;kDAE5B,cAAA,KAACrF;4CAAKqC,MAAM1D;;;kDAEd,KAACgC;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCZ,SAASjB,SAASmE,YAAY;wCAC9BpC,QAAQ9B,OAAOmE,YAAY;kDAE3B,cAAA,KAACvF;4CAAKqC,MAAMvD;;;kDAEd,KAAC6B;wCACCmC,MAAK;wCACLC,SAAQ;wCACRC,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCZ,SAASjB,SAASqE,cAAc;wCAChCtC,QAAQ9B,OAAOqE,cAAc;kDAE7B,cAAA,KAACzF;4CAAKqC,MAAMzD;;;;;;;;;;;AAS9B,EAAE"}
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentTypePicker.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,UAAU,EAAW,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ContentTypePicker.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,UAAU,EAAW,MAAM,cAAc,CAAC;AAWhE,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CACtC,uBAAuB,GAAG,yBAAyB,CACpD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AASF,eAAO,MAAM,iBAAiB,gBAAiB,sBAAsB,gCAgDpE,CAAC"}
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.js
CHANGED
|
@@ -6,6 +6,7 @@ import { DropdownButton, DropdownCategoryTitle } from "../../../ui/Dropdown/Drop
|
|
|
6
6
|
import { Icon } from "../../../ui/Icon.js";
|
|
7
7
|
import { Surface } from "../../../ui/Surface.js";
|
|
8
8
|
import { Toolbar } from "../../../ui/Toolbar.js";
|
|
9
|
+
import { twj } from "tw-to-css";
|
|
9
10
|
const isOption = (option)=>option.type === "option";
|
|
10
11
|
const isCategory = (option)=>option.type === "category";
|
|
11
12
|
export const ContentTypePicker = ({ options })=>{
|
|
@@ -33,7 +34,7 @@ export const ContentTypePicker = ({ options })=>{
|
|
|
33
34
|
/*#__PURE__*/ _jsx(Dropdown.Content, {
|
|
34
35
|
asChild: true,
|
|
35
36
|
children: /*#__PURE__*/ _jsx(Surface, {
|
|
36
|
-
|
|
37
|
+
style: twj("flex flex-col gap-1 px-2 py-4"),
|
|
37
38
|
children: options.map((option)=>{
|
|
38
39
|
if (isOption(option)) {
|
|
39
40
|
return /*#__PURE__*/ _jsxs(DropdownButton, {
|
|
@@ -49,7 +50,7 @@ export const ContentTypePicker = ({ options })=>{
|
|
|
49
50
|
}, option.id);
|
|
50
51
|
} else if (isCategory(option)) {
|
|
51
52
|
return /*#__PURE__*/ _jsx("div", {
|
|
52
|
-
|
|
53
|
+
style: twj("mt-2 first:mt-0"),
|
|
53
54
|
children: /*#__PURE__*/ _jsx(DropdownCategoryTitle, {
|
|
54
55
|
children: option.label
|
|
55
56
|
}, option.id)
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown, LucideIcon, Pilcrow } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport {\n DropdownButton,\n DropdownCategoryTitle,\n} from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\nexport type ContentTypePickerOption = {\n label: string;\n id: string;\n type: \"option\";\n disabled: () => boolean;\n isActive: () => boolean;\n onClick: () => void;\n icon: LucideIcon;\n};\n\nexport type ContentTypePickerCategory = {\n label: string;\n id: string;\n type: \"category\";\n};\n\nexport type ContentPickerOptions = Array<\n ContentTypePickerOption | ContentTypePickerCategory\n>;\n\nexport type ContentTypePickerProps = {\n options: ContentPickerOptions;\n};\n\nconst isOption = (\n option: ContentTypePickerOption | ContentTypePickerCategory\n): option is ContentTypePickerOption => option.type === \"option\";\nconst isCategory = (\n option: ContentTypePickerOption | ContentTypePickerCategory\n): option is ContentTypePickerCategory => option.type === \"category\";\n\nexport const ContentTypePicker = ({ options }: ContentTypePickerProps) => {\n const activeItem = useMemo(\n () =>\n options.find((option) => option.type === \"option\" && option.isActive()),\n [options]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button\n type=\"button\"\n active={activeItem?.id !== \"paragraph\" && !!activeItem?.type}\n >\n <Icon\n icon={(activeItem?.type === \"option\" && activeItem.icon) || Pilcrow}\n />\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown, LucideIcon, Pilcrow } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport {\n DropdownButton,\n DropdownCategoryTitle,\n} from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\nimport { twj } from \"tw-to-css\";\n\nexport type ContentTypePickerOption = {\n label: string;\n id: string;\n type: \"option\";\n disabled: () => boolean;\n isActive: () => boolean;\n onClick: () => void;\n icon: LucideIcon;\n};\n\nexport type ContentTypePickerCategory = {\n label: string;\n id: string;\n type: \"category\";\n};\n\nexport type ContentPickerOptions = Array<\n ContentTypePickerOption | ContentTypePickerCategory\n>;\n\nexport type ContentTypePickerProps = {\n options: ContentPickerOptions;\n};\n\nconst isOption = (\n option: ContentTypePickerOption | ContentTypePickerCategory\n): option is ContentTypePickerOption => option.type === \"option\";\nconst isCategory = (\n option: ContentTypePickerOption | ContentTypePickerCategory\n): option is ContentTypePickerCategory => option.type === \"category\";\n\nexport const ContentTypePicker = ({ options }: ContentTypePickerProps) => {\n const activeItem = useMemo(\n () =>\n options.find((option) => option.type === \"option\" && option.isActive()),\n [options]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button\n type=\"button\"\n active={activeItem?.id !== \"paragraph\" && !!activeItem?.type}\n >\n <Icon\n icon={(activeItem?.type === \"option\" && activeItem.icon) || Pilcrow}\n />\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface style={twj(\"flex flex-col gap-1 px-2 py-4\")}>\n {options.map((option) => {\n if (isOption(option)) {\n return (\n <DropdownButton\n key={option.id}\n onClick={option.onClick}\n isActive={option.isActive()}\n >\n <Icon icon={option.icon} className=\"w-4 h-4 mr-1\" />\n {option.label}\n </DropdownButton>\n );\n } else if (isCategory(option)) {\n return (\n <div style={twj(\"mt-2 first:mt-0\")} key={option.id}>\n <DropdownCategoryTitle key={option.id}>\n {option.label}\n </DropdownCategoryTitle>\n </div>\n );\n }\n })}\n </Surface>\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n"],"names":["Dropdown","ChevronDown","Pilcrow","useMemo","DropdownButton","DropdownCategoryTitle","Icon","Surface","Toolbar","twj","isOption","option","type","isCategory","ContentTypePicker","options","activeItem","find","isActive","Root","Trigger","asChild","Button","active","id","icon","className","Content","style","map","onClick","label","div"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,YAAYA,cAAc,gCAAgC;AAC1D,SAASC,WAAW,EAAcC,OAAO,QAAQ,eAAe;AAChE,SAASC,OAAO,QAAQ,QAAQ;AAChC,SACEC,cAAc,EACdC,qBAAqB,QAChB,mCAAmC;AAC1C,SAASC,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,GAAG,QAAQ,YAAY;AA0BhC,MAAMC,WAAW,CACfC,SACsCA,OAAOC,IAAI,KAAK;AACxD,MAAMC,aAAa,CACjBF,SACwCA,OAAOC,IAAI,KAAK;AAE1D,OAAO,MAAME,oBAAoB,CAAC,EAAEC,OAAO,EAA0B;IACnE,MAAMC,aAAab,QACjB,IACEY,QAAQE,IAAI,CAAC,CAACN,SAAWA,OAAOC,IAAI,KAAK,YAAYD,OAAOO,QAAQ,KACtE;QAACH;KAAQ;IAGX,qBACE,MAACf,SAASmB,IAAI;;0BACZ,KAACnB,SAASoB,OAAO;gBAACC,OAAO;0BACvB,cAAA,MAACb,QAAQc,MAAM;oBACbV,MAAK;oBACLW,QAAQP,YAAYQ,OAAO,eAAe,CAAC,CAACR,YAAYJ;;sCAExD,KAACN;4BACCmB,MAAM,AAACT,YAAYJ,SAAS,YAAYI,WAAWS,IAAI,IAAKvB;;sCAE9D,KAACI;4BAAKmB,MAAMxB;4BAAayB,WAAU;;;;;0BAGvC,KAAC1B,SAAS2B,OAAO;gBAACN,OAAO;0BACvB,cAAA,KAACd;oBAAQqB,OAAOnB,IAAI;8BACjBM,QAAQc,GAAG,CAAC,CAAClB;wBACZ,IAAID,SAASC,SAAS;4BACpB,qBACE,MAACP;gCAEC0B,SAASnB,OAAOmB,OAAO;gCACvBZ,UAAUP,OAAOO,QAAQ;;kDAEzB,KAACZ;wCAAKmB,MAAMd,OAAOc,IAAI;wCAAEC,WAAU;;oCAClCf,OAAOoB,KAAK;;+BALRpB,OAAOa,EAAE;wBAQpB,OAAO,IAAIX,WAAWF,SAAS;4BAC7B,qBACE,KAACqB;gCAAIJ,OAAOnB,IAAI;0CACd,cAAA,KAACJ;8CACEM,OAAOoB,KAAK;mCADapB,OAAOa,EAAE;+BADEb,OAAOa,EAAE;wBAMtD;oBACF;;;;;AAKV,EAAE"}
|
package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FontFamilyPicker.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FontFamilyPicker.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.tsx"],"names":[],"mappings":"AA0CA,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,gBAAgB,yBAG1B,qBAAqB,gCAwCvB,CAAC"}
|