payload-richtext-tiptap 0.0.66 → 0.0.68

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AICommand.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAC;AAiBjD,eAAO,MAAM,SAAS,qBA2SpB,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"AICommand.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBjD,eAAO,MAAM,SAAS,qBAmTpB,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -9,6 +9,7 @@ import AIMenuList from "./AIMenuList.js";
9
9
  // import { AICommandPanel } from "../../features/panels/AICommandPanel/AICommandPanel.js";
10
10
  const extensionName = "aiCommand";
11
11
  let popup;
12
+ let popupSelection;
12
13
  export const AICommand = Extension.create({
13
14
  name: extensionName,
14
15
  priority: 200,
@@ -34,8 +35,11 @@ export const AICommand = Extension.create({
34
35
  ]
35
36
  },
36
37
  onHidden: (instance)=>{
37
- const selection = this?.editor?.state?.selection;
38
- this.editor?.chain()?.focus()?.insertContentAt(selection.to - 1, this?.editor?.storage?.aiCommand?.completion ?? "")?.deleteNode("paragraph")?.run();
38
+ const selection = this.editor.state.selection;
39
+ this.editor?.chain()?.focus()?.insertContentAt({
40
+ from: popupSelection.from - 1,
41
+ to: popupSelection.to
42
+ }, "")?.insertContentAt(selection.to, this?.editor?.storage?.aiCommand?.completion ?? "")?.run();
39
43
  }
40
44
  });
41
45
  },
@@ -44,7 +48,7 @@ export const AICommand = Extension.create({
44
48
  Suggestion({
45
49
  editor: this.editor,
46
50
  char: " ",
47
- allowSpaces: true,
51
+ allowSpaces: false,
48
52
  startOfLine: true,
49
53
  pluginKey: new PluginKey(extensionName),
50
54
  allow: ({ state, range })=>{
@@ -52,11 +56,12 @@ export const AICommand = Extension.create({
52
56
  const isRootDepth = $from.depth === 1;
53
57
  const isParagraph = $from.parent.type.name === "paragraph";
54
58
  const isStartOfNode = $from.parent.textContent?.charAt(0) === " ";
59
+ const textLength = $from.parent.textContent?.length;
55
60
  // TODO
56
61
  const isInColumn = this.editor.isActive("column");
57
62
  const afterContent = $from.parent.textContent?.substring($from.parent.textContent?.indexOf(" "));
58
63
  const isValidAfterContent = !afterContent?.endsWith(" ");
59
- return (isRootDepth && isParagraph && isStartOfNode || isInColumn && isParagraph && isStartOfNode) && isValidAfterContent;
64
+ return (isRootDepth && isParagraph && isStartOfNode || isInColumn && isParagraph && isStartOfNode) && isValidAfterContent && textLength === 1;
60
65
  },
61
66
  command: ({ editor, props })=>{
62
67
  // const { view, state } = editor;
@@ -142,6 +147,11 @@ export const AICommand = Extension.create({
142
147
  appendTo: ()=>document.body,
143
148
  content: component.element
144
149
  });
150
+ const selection = this?.editor?.state?.selection;
151
+ popupSelection = {
152
+ from: selection?.from,
153
+ to: selection?.to
154
+ };
145
155
  popup?.[0].show();
146
156
  },
147
157
  onUpdate (props) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"sourcesContent":["\"use client\";\nimport { Editor, Extension } from \"@tiptap/core\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport { ReactRenderer } from \"@tiptap/react\";\nimport Suggestion, {\n SuggestionKeyDownProps,\n SuggestionProps,\n} from \"@tiptap/suggestion\";\nimport tippy from \"tippy.js\";\n\nimport { GROUPS } from \"./groups.js\";\nimport AIMenuList from \"./AIMenuList.js\";\n// import { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\n\nconst extensionName = \"aiCommand\";\n\nlet popup: any;\n\nexport const AICommand = Extension.create({\n name: extensionName,\n\n priority: 200,\n\n onCreate() {\n const t = tippy as any;\n popup = t(\"body\", {\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom-start\",\n theme: \"slash-command\",\n // maxWidth: \"16rem\",\n offset: [0, -16],\n popperOptions: {\n strategy: \"fixed\",\n modifiers: [\n {\n name: \"flip\",\n enabled: false,\n },\n ],\n },\n onHidden: (instance) => {\n const selection = this?.editor?.state?.selection;\n\n this.editor\n ?.chain()\n ?.focus()\n ?.insertContentAt(\n selection.to - 1,\n this?.editor?.storage?.aiCommand?.completion ?? \"\"\n )\n ?.deleteNode(\"paragraph\")\n ?.run();\n },\n });\n },\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n char: \" \",\n allowSpaces: true,\n startOfLine: true,\n pluginKey: new PluginKey(extensionName),\n allow: ({ state, range }) => {\n const $from = state.doc.resolve(range.from);\n const isRootDepth = $from.depth === 1;\n const isParagraph = $from.parent.type.name === \"paragraph\";\n const isStartOfNode = $from.parent.textContent?.charAt(0) === \" \";\n // TODO\n const isInColumn = this.editor.isActive(\"column\");\n\n const afterContent = $from.parent.textContent?.substring(\n $from.parent.textContent?.indexOf(\" \")\n );\n const isValidAfterContent = !afterContent?.endsWith(\" \");\n\n return (\n ((isRootDepth && isParagraph && isStartOfNode) ||\n (isInColumn && isParagraph && isStartOfNode)) &&\n isValidAfterContent\n );\n },\n command: ({ editor, props }: { editor: Editor; props: any }) => {\n // const { view, state } = editor;\n // const { $head, $from } = view.state.selection;\n\n // const end = $from.pos;\n // const from = $head?.nodeBefore\n // ? end -\n // ($head.nodeBefore.text?.substring(\n // $head.nodeBefore.text?.indexOf(\" \")\n // ).length ?? 0)\n // : $from.start();\n\n // const tr = state.tr.deleteRange(from, end);\n // view.dispatch(tr);\n\n props.action(editor);\n // view.focus();\n },\n items: ({ query }: { query: string }) => {\n const withFilteredCommands = GROUPS.map((group) => ({\n ...group,\n commands: group.commands\n .filter((item) => {\n const labelNormalized = item.label.toLowerCase().trim();\n const queryNormalized = query.toLowerCase().trim();\n\n if (item.aliases) {\n const aliases = item.aliases.map((alias) =>\n alias.toLowerCase().trim()\n );\n\n return (\n labelNormalized.includes(queryNormalized) ||\n aliases.includes(queryNormalized)\n );\n }\n\n return labelNormalized.includes(queryNormalized);\n })\n .filter((command) =>\n command.shouldBeHidden\n ? !command.shouldBeHidden(this.editor)\n : true\n ),\n }));\n\n const withoutEmptyGroups = withFilteredCommands.filter((group) => {\n if (group.commands.length > 0) {\n return true;\n }\n\n return false;\n });\n\n const withEnabledSettings = withoutEmptyGroups.map((group) => ({\n ...group,\n commands: group.commands.map((command) => ({\n ...command,\n isEnabled: true,\n })),\n }));\n\n return withEnabledSettings;\n },\n render: () => {\n let component: any;\n\n let scrollHandler: (() => void) | null = null;\n\n return {\n onStart: (props: SuggestionProps) => {\n component = new ReactRenderer(AIMenuList, {\n props,\n editor: props.editor,\n });\n props.editor.storage.aiCommand.active = true;\n const { view } = props.editor;\n\n const editorNode = view.dom as HTMLElement;\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect;\n }\n\n const rect = props.clientRect();\n\n if (!rect) {\n return props.editor.storage[extensionName].rect;\n }\n\n let yPos = rect.y;\n\n if (\n rect.top + component.element.offsetHeight + 40 >\n window.innerHeight\n ) {\n const diff =\n rect.top +\n component.element.offsetHeight -\n window.innerHeight +\n 40;\n yPos = rect.y - diff;\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n const editorXOffset = editorNode.getBoundingClientRect().x;\n const boundigClient = editorNode.getBoundingClientRect();\n\n return new DOMRect(\n rect.x,\n yPos,\n boundigClient.width,\n rect.height\n );\n };\n\n scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n };\n\n view.dom.parentElement?.addEventListener(\"scroll\", scrollHandler);\n\n popup?.[0].setProps({\n getReferenceClientRect,\n appendTo: () => document.body,\n content: component.element,\n });\n\n popup?.[0].show();\n },\n\n onUpdate(props: SuggestionProps) {\n component.updateProps(props);\n\n const { view } = props.editor;\n\n const editorNode = view.dom as HTMLElement;\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect;\n }\n\n const rect = props.clientRect();\n\n if (!rect) {\n return props.editor.storage[extensionName].rect;\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n return new DOMRect(rect.x, rect.y, rect.width, rect.height);\n };\n\n let scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n };\n\n view.dom.parentElement?.addEventListener(\"scroll\", scrollHandler);\n\n // eslint-disable-next-line no-param-reassign\n props.editor.storage[extensionName].rect = props.clientRect\n ? getReferenceClientRect()\n : {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n };\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n },\n\n onKeyDown(props: SuggestionKeyDownProps) {\n if (props.event.key === \"Escape\") {\n popup?.[0].hide();\n\n return true;\n }\n\n if (!popup?.[0].state.isShown) {\n popup?.[0].show();\n }\n\n return component.ref?.onKeyDown(props);\n },\n\n onExit(props) {\n popup?.[0].hide();\n if (scrollHandler) {\n const { view } = props.editor;\n view.dom.parentElement?.removeEventListener(\n \"scroll\",\n scrollHandler\n );\n }\n\n props.editor.storage.aiCommand.active = false;\n props.editor.storage.aiCommand.userPrompt = \"\";\n props.editor.storage.aiCommand.completion = \"\";\n\n component.destroy();\n },\n };\n },\n }),\n ];\n },\n\n addStorage() {\n return {\n rect: {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n userPrompt: \"\",\n completion: \"\",\n language: \"en\",\n title: \"\",\n active: false,\n };\n },\n});\n\nexport default AICommand;\n"],"names":["Extension","PluginKey","ReactRenderer","Suggestion","tippy","GROUPS","AIMenuList","extensionName","popup","AICommand","create","name","priority","onCreate","t","interactive","trigger","placement","theme","offset","popperOptions","strategy","modifiers","enabled","onHidden","instance","selection","editor","state","chain","focus","insertContentAt","to","storage","aiCommand","completion","deleteNode","run","addProseMirrorPlugins","char","allowSpaces","startOfLine","pluginKey","allow","range","$from","doc","resolve","from","isRootDepth","depth","isParagraph","parent","type","isStartOfNode","textContent","charAt","isInColumn","isActive","afterContent","substring","indexOf","isValidAfterContent","endsWith","command","props","action","items","query","withFilteredCommands","map","group","commands","filter","item","labelNormalized","label","toLowerCase","trim","queryNormalized","aliases","alias","includes","shouldBeHidden","withoutEmptyGroups","length","withEnabledSettings","isEnabled","render","component","scrollHandler","onStart","active","view","editorNode","dom","getReferenceClientRect","clientRect","rect","yPos","y","top","element","offsetHeight","window","innerHeight","diff","editorXOffset","getBoundingClientRect","x","boundigClient","DOMRect","width","height","setProps","parentElement","addEventListener","appendTo","document","body","content","show","onUpdate","updateProps","left","right","bottom","onKeyDown","event","key","hide","isShown","ref","onExit","removeEventListener","userPrompt","destroy","addStorage","language","title"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"sourcesContent":["\"use client\";\nimport { Editor, Extension } from \"@tiptap/core\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport { ReactRenderer } from \"@tiptap/react\";\nimport Suggestion, {\n SuggestionKeyDownProps,\n SuggestionProps,\n} from \"@tiptap/suggestion\";\nimport tippy from \"tippy.js\";\n\nimport { GROUPS } from \"./groups.js\";\nimport AIMenuList from \"./AIMenuList.js\";\n// import { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\n\nconst extensionName = \"aiCommand\";\n\nlet popup: any;\nlet popupSelection: { from: number; to: number };\n\nexport const AICommand = Extension.create({\n name: extensionName,\n\n priority: 200,\n\n onCreate() {\n const t = tippy as any;\n popup = t(\"body\", {\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom-start\",\n theme: \"slash-command\",\n // maxWidth: \"16rem\",\n offset: [0, -16],\n popperOptions: {\n strategy: \"fixed\",\n modifiers: [\n {\n name: \"flip\",\n enabled: false,\n },\n ],\n },\n onHidden: (instance) => {\n const selection = this.editor.state.selection;\n\n this.editor\n ?.chain()\n ?.focus()\n ?.insertContentAt(\n { from: popupSelection.from - 1, to: popupSelection.to },\n \"\"\n )\n ?.insertContentAt(\n selection.to,\n this?.editor?.storage?.aiCommand?.completion ?? \"\"\n )\n ?.run();\n },\n });\n },\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n char: \" \",\n allowSpaces: false,\n startOfLine: true,\n pluginKey: new PluginKey(extensionName),\n allow: ({ state, range }) => {\n const $from = state.doc.resolve(range.from);\n const isRootDepth = $from.depth === 1;\n const isParagraph = $from.parent.type.name === \"paragraph\";\n const isStartOfNode = $from.parent.textContent?.charAt(0) === \" \";\n const textLength = $from.parent.textContent?.length;\n\n // TODO\n const isInColumn = this.editor.isActive(\"column\");\n\n const afterContent = $from.parent.textContent?.substring(\n $from.parent.textContent?.indexOf(\" \")\n );\n const isValidAfterContent = !afterContent?.endsWith(\" \");\n return (\n ((isRootDepth && isParagraph && isStartOfNode) ||\n (isInColumn && isParagraph && isStartOfNode)) &&\n isValidAfterContent &&\n textLength === 1\n );\n },\n command: ({ editor, props }: { editor: Editor; props: any }) => {\n // const { view, state } = editor;\n // const { $head, $from } = view.state.selection;\n\n // const end = $from.pos;\n // const from = $head?.nodeBefore\n // ? end -\n // ($head.nodeBefore.text?.substring(\n // $head.nodeBefore.text?.indexOf(\" \")\n // ).length ?? 0)\n // : $from.start();\n\n // const tr = state.tr.deleteRange(from, end);\n // view.dispatch(tr);\n\n props.action(editor);\n // view.focus();\n },\n items: ({ query }: { query: string }) => {\n const withFilteredCommands = GROUPS.map((group) => ({\n ...group,\n commands: group.commands\n .filter((item) => {\n const labelNormalized = item.label.toLowerCase().trim();\n const queryNormalized = query.toLowerCase().trim();\n\n if (item.aliases) {\n const aliases = item.aliases.map((alias) =>\n alias.toLowerCase().trim()\n );\n\n return (\n labelNormalized.includes(queryNormalized) ||\n aliases.includes(queryNormalized)\n );\n }\n\n return labelNormalized.includes(queryNormalized);\n })\n .filter((command) =>\n command.shouldBeHidden\n ? !command.shouldBeHidden(this.editor)\n : true\n ),\n }));\n\n const withoutEmptyGroups = withFilteredCommands.filter((group) => {\n if (group.commands.length > 0) {\n return true;\n }\n\n return false;\n });\n\n const withEnabledSettings = withoutEmptyGroups.map((group) => ({\n ...group,\n commands: group.commands.map((command) => ({\n ...command,\n isEnabled: true,\n })),\n }));\n\n return withEnabledSettings;\n },\n render: () => {\n let component: any;\n\n let scrollHandler: (() => void) | null = null;\n\n return {\n onStart: (props: SuggestionProps) => {\n component = new ReactRenderer(AIMenuList, {\n props,\n editor: props.editor,\n });\n props.editor.storage.aiCommand.active = true;\n const { view } = props.editor;\n\n const editorNode = view.dom as HTMLElement;\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect;\n }\n\n const rect = props.clientRect();\n\n if (!rect) {\n return props.editor.storage[extensionName].rect;\n }\n\n let yPos = rect.y;\n\n if (\n rect.top + component.element.offsetHeight + 40 >\n window.innerHeight\n ) {\n const diff =\n rect.top +\n component.element.offsetHeight -\n window.innerHeight +\n 40;\n yPos = rect.y - diff;\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n const editorXOffset = editorNode.getBoundingClientRect().x;\n const boundigClient = editorNode.getBoundingClientRect();\n\n return new DOMRect(\n rect.x,\n yPos,\n boundigClient.width,\n rect.height\n );\n };\n\n scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n };\n\n view.dom.parentElement?.addEventListener(\"scroll\", scrollHandler);\n\n popup?.[0].setProps({\n getReferenceClientRect,\n appendTo: () => document.body,\n content: component.element,\n });\n\n const selection = this?.editor?.state?.selection;\n popupSelection = { from: selection?.from, to: selection?.to };\n\n popup?.[0].show();\n },\n\n onUpdate(props: SuggestionProps) {\n component.updateProps(props);\n\n const { view } = props.editor;\n\n const editorNode = view.dom as HTMLElement;\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect;\n }\n\n const rect = props.clientRect();\n\n if (!rect) {\n return props.editor.storage[extensionName].rect;\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n return new DOMRect(rect.x, rect.y, rect.width, rect.height);\n };\n\n let scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n };\n\n view.dom.parentElement?.addEventListener(\"scroll\", scrollHandler);\n\n // eslint-disable-next-line no-param-reassign\n props.editor.storage[extensionName].rect = props.clientRect\n ? getReferenceClientRect()\n : {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n };\n popup?.[0].setProps({\n getReferenceClientRect,\n });\n },\n\n onKeyDown(props: SuggestionKeyDownProps) {\n if (props.event.key === \"Escape\") {\n popup?.[0].hide();\n\n return true;\n }\n\n if (!popup?.[0].state.isShown) {\n popup?.[0].show();\n }\n\n return component.ref?.onKeyDown(props);\n },\n\n onExit(props) {\n popup?.[0].hide();\n if (scrollHandler) {\n const { view } = props.editor;\n view.dom.parentElement?.removeEventListener(\n \"scroll\",\n scrollHandler\n );\n }\n\n props.editor.storage.aiCommand.active = false;\n props.editor.storage.aiCommand.userPrompt = \"\";\n props.editor.storage.aiCommand.completion = \"\";\n\n component.destroy();\n },\n };\n },\n }),\n ];\n },\n\n addStorage() {\n return {\n rect: {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n userPrompt: \"\",\n completion: \"\",\n language: \"en\",\n title: \"\",\n active: false,\n };\n },\n});\n\nexport default AICommand;\n"],"names":["Extension","PluginKey","ReactRenderer","Suggestion","tippy","GROUPS","AIMenuList","extensionName","popup","popupSelection","AICommand","create","name","priority","onCreate","t","interactive","trigger","placement","theme","offset","popperOptions","strategy","modifiers","enabled","onHidden","instance","selection","editor","state","chain","focus","insertContentAt","from","to","storage","aiCommand","completion","run","addProseMirrorPlugins","char","allowSpaces","startOfLine","pluginKey","allow","range","$from","doc","resolve","isRootDepth","depth","isParagraph","parent","type","isStartOfNode","textContent","charAt","textLength","length","isInColumn","isActive","afterContent","substring","indexOf","isValidAfterContent","endsWith","command","props","action","items","query","withFilteredCommands","map","group","commands","filter","item","labelNormalized","label","toLowerCase","trim","queryNormalized","aliases","alias","includes","shouldBeHidden","withoutEmptyGroups","withEnabledSettings","isEnabled","render","component","scrollHandler","onStart","active","view","editorNode","dom","getReferenceClientRect","clientRect","rect","yPos","y","top","element","offsetHeight","window","innerHeight","diff","editorXOffset","getBoundingClientRect","x","boundigClient","DOMRect","width","height","setProps","parentElement","addEventListener","appendTo","document","body","content","show","onUpdate","updateProps","left","right","bottom","onKeyDown","event","key","hide","isShown","ref","onExit","removeEventListener","userPrompt","destroy","addStorage","language","title"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { openAssetHQType } from "../../types.js";
2
3
  import { TiptapProps } from "./types.js";
3
4
  export declare const BlockEditor: ({ handleChange, content, openAssetHQHandler, additionalContext, isEditable, autoFocus, dir, }: TiptapProps & {
@@ -6,6 +7,6 @@ export declare const BlockEditor: ({ handleChange, content, openAssetHQHandler,
6
7
  autoFocus?: boolean;
7
8
  isEditable?: boolean;
8
9
  dir?: "ltr" | "rtl" | "auto";
9
- }) => import("react").JSX.Element;
10
+ }) => React.JSX.Element;
10
11
  export default BlockEditor;
11
12
  //# sourceMappingURL=BlockEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockEditor.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,eAAO,MAAM,WAAW,kGAQrB,WAAW,GAAG;IACf,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAC9B,gCA+DA,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"BlockEditor.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAe/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,eAAO,MAAM,WAAW,kGAQrB,WAAW,GAAG;IACf,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAC9B,sBAiEA,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,16 +1,17 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { EditorContent } from "@tiptap/react";
4
- import { useMemo, useRef } from "react";
4
+ import React, { useMemo, useRef } from "react";
5
5
  import { EditorContext } from "../../context/EditorContext.js";
6
6
  import { IframeMenu } from "../../extensions/Iframe/menus/index.js";
7
7
  import ImageBlockMenu from "../../extensions/ImageBlock/components/ImageBlockMenu.js";
8
- import VideoBlockMenu from "../../extensions/VideoBlock/components/VideoBlockMenu.js";
9
8
  import { InsideLinksMenu } from "../../extensions/InsideLinks/menus/index.js";
10
9
  import { ColumnsMenu } from "../../extensions/MultiColumn/menus/ColumnsMenu.js";
11
10
  import { SocialMediaMenu } from "../../extensions/SocialMedia/menus/index.js";
12
11
  import { TableColumnMenu, TableRowMenu } from "../../extensions/Table/menus/index.js";
12
+ import VideoBlockMenu from "../../extensions/VideoBlock/components/VideoBlockMenu.js";
13
13
  import { useBlockEditor } from "../../hooks/useBlockEditor.js";
14
+ import { isRTL } from "../../lib/utils/isRtl.js";
14
15
  import { Sidebar } from "../Sidebar/Sidebar.js";
15
16
  import { ContentItemMenu } from "../menus/ContentItemMenu/ContentItemMenu.js";
16
17
  import { TextMenu } from "../menus/TextMenu/TextMenu.js";
@@ -35,7 +36,7 @@ export const BlockEditor = ({ handleChange, content, openAssetHQHandler, additio
35
36
  children: /*#__PURE__*/ _jsxs("div", {
36
37
  className: "flex h-full overflow-visible",
37
38
  ref: menuContainerRef,
38
- dir: dir,
39
+ dir: dir ?? (isRTL(editor.getText()) ? "rtl" : "ltr"),
39
40
  children: [
40
41
  isEditable && /*#__PURE__*/ _jsx(Sidebar, {
41
42
  isOpen: leftSidebar.isOpen,
@@ -63,7 +64,8 @@ export const BlockEditor = ({ handleChange, content, openAssetHQHandler, additio
63
64
  appendTo: menuContainerRef
64
65
  }),
65
66
  /*#__PURE__*/ _jsx(TextMenu, {
66
- editor: editor
67
+ editor: editor,
68
+ dir: dir ?? (isRTL(editor.getText()) ? "rtl" : "ltr")
67
69
  }),
68
70
  /*#__PURE__*/ _jsx(IframeMenu, {
69
71
  editor: editor,
@@ -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 VideoBlockMenu from \"../../extensions/VideoBlock/components/VideoBlockMenu.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 { openAssetHQType } from \"../../types.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\";\nexport const BlockEditor = ({\n handleChange,\n content,\n openAssetHQHandler,\n additionalContext,\n isEditable = true,\n autoFocus = true,\n dir,\n}: TiptapProps & {\n openAssetHQHandler?: openAssetHQType;\n additionalContext?: Record<string, any>;\n autoFocus?: boolean;\n isEditable?: boolean;\n dir?: \"ltr\" | \"rtl\" | \"auto\";\n}) => {\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 openAssetHQHandler: openAssetHQHandler,\n additionalContext: additionalContext,\n autoFocus,\n isEditable,\n });\n\n const displayedUsers = users.slice(0, 3);\n\n const providerValue = useMemo(() => {\n return {};\n }, []);\n\n return (\n editor && (\n <EditorContext.Provider value={providerValue}>\n <div\n className=\"flex h-full overflow-visible\"\n ref={menuContainerRef}\n dir={dir}\n >\n {isEditable && (\n <Sidebar\n isOpen={leftSidebar.isOpen}\n onClose={leftSidebar.close}\n editor={editor}\n />\n )}\n <div className=\"relative flex flex-col flex-1 h-full justify-center items-center \">\n <EditorContent\n editor={editor}\n ref={editorRef}\n className=\"flex-1 overflow-y-visible w-full h-full outline-none outline-offset-0\"\n style={{\n outline: \"none\",\n }}\n />\n {isEditable && (\n <>\n <ContentItemMenu editor={editor} />\n <LinkMenu editor={editor} appendTo={menuContainerRef} />\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 <VideoBlockMenu editor={editor} appendTo={menuContainerRef} />\n </>\n )}\n </div>\n </div>\n </EditorContext.Provider>\n )\n );\n};\n\nexport default BlockEditor;\n"],"names":["EditorContent","useMemo","useRef","EditorContext","IframeMenu","ImageBlockMenu","VideoBlockMenu","InsideLinksMenu","ColumnsMenu","SocialMediaMenu","TableColumnMenu","TableRowMenu","useBlockEditor","Sidebar","ContentItemMenu","TextMenu","LinkMenu","BlockEditor","handleChange","content","openAssetHQHandler","additionalContext","isEditable","autoFocus","dir","menuContainerRef","editorRef","editor","users","characterCount","leftSidebar","displayedUsers","slice","providerValue","Provider","value","div","className","ref","isOpen","onClose","close","style","outline","appendTo"],"mappings":"AAAA;;AACA,SAASA,aAAa,QAAQ,gBAAgB;AAC9C,SAAoBC,OAAO,EAAEC,MAAM,QAAQ,QAAQ;AAInD,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,UAAU,QAAQ,yCAAyC;AACpE,OAAOC,oBAAoB,2DAA2D;AACtF,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,OAAO,QAAQ,wBAAwB;AAChD,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,SAASC,QAAQ,QAAQ,gCAAgC;AACzD,SAASC,QAAQ,QAAQ,oBAAoB;AAE7C,OAAO,MAAMC,cAAc,CAAC,EAC1BC,YAAY,EACZC,OAAO,EACPC,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,IAAI,EACjBC,YAAY,IAAI,EAChBC,GAAG,EAOJ;IACC,MAAMC,mBAAmBvB,OAAO;IAChC,MAAMwB,YAAYxB,OAAuB;IAEzC,MAAM,EAAEyB,MAAM,EAAEC,KAAK,EAAEC,cAAc,EAAEC,WAAW,EAAE,GAAGlB,eAAe;QACpEO,SAASA;QACTD,cAAcA;QACdE,oBAAoBA;QACpBC,mBAAmBA;QACnBE;QACAD;IACF;IAEA,MAAMS,iBAAiBH,MAAMI,KAAK,CAAC,GAAG;IAEtC,MAAMC,gBAAgBhC,QAAQ;QAC5B,OAAO,CAAC;IACV,GAAG,EAAE;IAEL,OACE0B,wBACE,KAACxB,cAAc+B,QAAQ;QAACC,OAAOF;kBAC7B,cAAA,MAACG;YACCC,WAAU;YACVC,KAAKb;YACLD,KAAKA;;gBAEJF,4BACC,KAACT;oBACC0B,QAAQT,YAAYS,MAAM;oBAC1BC,SAASV,YAAYW,KAAK;oBAC1Bd,QAAQA;;8BAGZ,MAACS;oBAAIC,WAAU;;sCACb,KAACrC;4BACC2B,QAAQA;4BACRW,KAAKZ;4BACLW,WAAU;4BACVK,OAAO;gCACLC,SAAS;4BACX;;wBAEDrB,4BACC;;8CACE,KAACR;oCAAgBa,QAAQA;;8CACzB,KAACX;oCAASW,QAAQA;oCAAQiB,UAAUnB;;8CACpC,KAACV;oCAASY,QAAQA;;8CAClB,KAACvB;oCAAWuB,QAAQA;oCAAQiB,UAAUnB;;8CACtC,KAAChB;oCAAgBkB,QAAQA;oCAAQiB,UAAUnB;;8CAC3C,KAAClB;oCAAgBoB,QAAQA;oCAAQiB,UAAUnB;;8CAC3C,KAACjB;oCAAYmB,QAAQA;oCAAQiB,UAAUnB;;8CACvC,KAACd;oCAAagB,QAAQA;oCAAQiB,UAAUnB;;8CACxC,KAACf;oCAAgBiB,QAAQA;oCAAQiB,UAAUnB;;8CAC3C,KAACpB;oCAAesB,QAAQA;oCAAQiB,UAAUnB;;8CAC1C,KAACnB;oCAAeqB,QAAQA;oCAAQiB,UAAUnB;;;;;;;;;AAQ1D,EAAE;AAEF,eAAeR,YAAY"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/features/BlockEditor/BlockEditor.tsx"],"sourcesContent":["\"use client\";\nimport { EditorContent } from \"@tiptap/react\";\nimport React, { useMemo, useRef } from \"react\";\n\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 VideoBlockMenu from \"../../extensions/VideoBlock/components/VideoBlockMenu.js\";\nimport { useBlockEditor } from \"../../hooks/useBlockEditor.js\";\nimport { isRTL } from \"../../lib/utils/isRtl.js\";\nimport { openAssetHQType } from \"../../types.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\";\nexport const BlockEditor = ({\n handleChange,\n content,\n openAssetHQHandler,\n additionalContext,\n isEditable = true,\n autoFocus = true,\n dir,\n}: TiptapProps & {\n openAssetHQHandler?: openAssetHQType;\n additionalContext?: Record<string, any>;\n autoFocus?: boolean;\n isEditable?: boolean;\n dir?: \"ltr\" | \"rtl\" | \"auto\";\n}) => {\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 openAssetHQHandler: openAssetHQHandler,\n additionalContext: additionalContext,\n autoFocus,\n isEditable,\n });\n\n const displayedUsers = users.slice(0, 3);\n const providerValue = useMemo(() => {\n return {};\n }, []);\n\n return (\n editor && (\n <EditorContext.Provider value={providerValue}>\n <div\n className=\"flex h-full overflow-visible\"\n ref={menuContainerRef}\n dir={dir ?? (isRTL(editor.getText()) ? \"rtl\" : \"ltr\")}\n >\n {isEditable && (\n <Sidebar\n isOpen={leftSidebar.isOpen}\n onClose={leftSidebar.close}\n editor={editor}\n />\n )}\n <div className=\"relative flex flex-col flex-1 h-full justify-center items-center \">\n <EditorContent\n editor={editor}\n ref={editorRef}\n className=\"flex-1 overflow-y-visible w-full h-full outline-none outline-offset-0\"\n style={{\n outline: \"none\",\n }}\n />\n {isEditable && (\n <>\n <ContentItemMenu editor={editor} />\n <LinkMenu editor={editor} appendTo={menuContainerRef} />\n <TextMenu\n editor={editor}\n dir={dir ?? (isRTL(editor.getText()) ? \"rtl\" : \"ltr\")}\n />\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 <VideoBlockMenu editor={editor} appendTo={menuContainerRef} />\n </>\n )}\n </div>\n </div>\n </EditorContext.Provider>\n )\n );\n};\n\nexport default BlockEditor;\n"],"names":["EditorContent","React","useMemo","useRef","EditorContext","IframeMenu","ImageBlockMenu","InsideLinksMenu","ColumnsMenu","SocialMediaMenu","TableColumnMenu","TableRowMenu","VideoBlockMenu","useBlockEditor","isRTL","Sidebar","ContentItemMenu","TextMenu","LinkMenu","BlockEditor","handleChange","content","openAssetHQHandler","additionalContext","isEditable","autoFocus","dir","menuContainerRef","editorRef","editor","users","characterCount","leftSidebar","displayedUsers","slice","providerValue","Provider","value","div","className","ref","getText","isOpen","onClose","close","style","outline","appendTo"],"mappings":"AAAA;;AACA,SAASA,aAAa,QAAQ,gBAAgB;AAC9C,OAAOC,SAASC,OAAO,EAAEC,MAAM,QAAQ,QAAQ;AAE/C,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,OAAOC,oBAAoB,2DAA2D;AACtF,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,KAAK,QAAQ,2BAA2B;AAEjD,SAASC,OAAO,QAAQ,wBAAwB;AAChD,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,SAASC,QAAQ,QAAQ,gCAAgC;AACzD,SAASC,QAAQ,QAAQ,oBAAoB;AAE7C,OAAO,MAAMC,cAAc,CAAC,EAC1BC,YAAY,EACZC,OAAO,EACPC,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,IAAI,EACjBC,YAAY,IAAI,EAChBC,GAAG,EAOJ;IACC,MAAMC,mBAAmBxB,OAAO;IAChC,MAAMyB,YAAYzB,OAAuB;IAEzC,MAAM,EAAE0B,MAAM,EAAEC,KAAK,EAAEC,cAAc,EAAEC,WAAW,EAAE,GAAGnB,eAAe;QACpEQ,SAASA;QACTD,cAAcA;QACdE,oBAAoBA;QACpBC,mBAAmBA;QACnBE;QACAD;IACF;IAEA,MAAMS,iBAAiBH,MAAMI,KAAK,CAAC,GAAG;IACtC,MAAMC,gBAAgBjC,QAAQ;QAC5B,OAAO,CAAC;IACV,GAAG,EAAE;IAEL,OACE2B,wBACE,KAACzB,cAAcgC,QAAQ;QAACC,OAAOF;kBAC7B,cAAA,MAACG;YACCC,WAAU;YACVC,KAAKb;YACLD,KAAKA,OAAQZ,CAAAA,MAAMe,OAAOY,OAAO,MAAM,QAAQ,KAAI;;gBAElDjB,4BACC,KAACT;oBACC2B,QAAQV,YAAYU,MAAM;oBAC1BC,SAASX,YAAYY,KAAK;oBAC1Bf,QAAQA;;8BAGZ,MAACS;oBAAIC,WAAU;;sCACb,KAACvC;4BACC6B,QAAQA;4BACRW,KAAKZ;4BACLW,WAAU;4BACVM,OAAO;gCACLC,SAAS;4BACX;;wBAEDtB,4BACC;;8CACE,KAACR;oCAAgBa,QAAQA;;8CACzB,KAACX;oCAASW,QAAQA;oCAAQkB,UAAUpB;;8CACpC,KAACV;oCACCY,QAAQA;oCACRH,KAAKA,OAAQZ,CAAAA,MAAMe,OAAOY,OAAO,MAAM,QAAQ,KAAI;;8CAErD,KAACpC;oCAAWwB,QAAQA;oCAAQkB,UAAUpB;;8CACtC,KAAClB;oCAAgBoB,QAAQA;oCAAQkB,UAAUpB;;8CAC3C,KAACpB;oCAAgBsB,QAAQA;oCAAQkB,UAAUpB;;8CAC3C,KAACnB;oCAAYqB,QAAQA;oCAAQkB,UAAUpB;;8CACvC,KAAChB;oCAAakB,QAAQA;oCAAQkB,UAAUpB;;8CACxC,KAACjB;oCAAgBmB,QAAQA;oCAAQkB,UAAUpB;;8CAC3C,KAACrB;oCAAeuB,QAAQA;oCAAQkB,UAAUpB;;8CAC1C,KAACf;oCAAeiB,QAAQA;oCAAQkB,UAAUpB;;;;;;;;;AAQ1D,EAAE;AAEF,eAAeR,YAAY"}
@@ -1,6 +1,7 @@
1
1
  import { Editor } from "@tiptap/react";
2
2
  export type TextMenuProps = {
3
3
  editor: Editor;
4
+ dir: "rtl" | "ltr" | "auto";
4
5
  };
5
- export declare const TextMenu: ({ editor }: TextMenuProps) => import("react").JSX.Element;
6
+ export declare const TextMenu: ({ editor, dir }: TextMenuProps) => import("react").JSX.Element;
6
7
  //# sourceMappingURL=TextMenu.d.ts.map
@@ -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;AA0CnD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,QAAQ,eAAgB,aAAa,gCA2NjD,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;AA0CnD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,QAAQ,oBAAqB,aAAa,gCA8NtD,CAAC"}
@@ -22,16 +22,16 @@ const MemoColorPicker = /*#__PURE__*/ memo(ColorPicker);
22
22
  const MemoFontFamilyPicker = /*#__PURE__*/ memo(FontFamilyPicker);
23
23
  const MemoFontSizePicker = /*#__PURE__*/ memo(FontSizePicker);
24
24
  const MemoContentTypePicker = /*#__PURE__*/ memo(ContentTypePicker);
25
- export const TextMenu = ({ editor })=>{
25
+ export const TextMenu = ({ editor, dir })=>{
26
26
  const commands = useTextmenuCommands(editor);
27
27
  const states = useTextmenuStates(editor);
28
28
  const blockOptions = useTextmenuContentTypes(editor);
29
29
  const [openAi, setOpenAi] = useState(false);
30
30
  return /*#__PURE__*/ _jsx(BubbleMenu, {
31
31
  tippyOptions: {
32
- placement: "bottom",
32
+ placement: "auto",
33
33
  popperOptions: {
34
- placement: "bottom"
34
+ placement: "auto"
35
35
  },
36
36
  onHide: ()=>{
37
37
  setOpenAi(false);
@@ -112,49 +112,6 @@ export const TextMenu = ({ editor })=>{
112
112
  icon: Underline
113
113
  })
114
114
  }),
115
- /*#__PURE__*/ _jsx(MemoButton, {
116
- type: "button",
117
- tooltip: "Strikehrough",
118
- tooltipShortcut: [
119
- "Mod",
120
- "Shift",
121
- "S"
122
- ],
123
- onClick: commands.onStrike,
124
- active: states.isStrike,
125
- children: /*#__PURE__*/ _jsx(Icon, {
126
- icon: Strikethrough
127
- })
128
- }),
129
- /*#__PURE__*/ _jsx(MemoButton, {
130
- type: "button",
131
- tooltip: "Code",
132
- tooltipShortcut: [
133
- "Mod",
134
- "E"
135
- ],
136
- onClick: commands.onCode,
137
- active: states.isCode,
138
- children: /*#__PURE__*/ _jsx(Icon, {
139
- icon: Code
140
- })
141
- }),
142
- /*#__PURE__*/ _jsx(MemoButton, {
143
- type: "button",
144
- tooltip: "Code block",
145
- onClick: commands.onCodeBlock,
146
- children: /*#__PURE__*/ _jsx(Icon, {
147
- icon: FileCode
148
- })
149
- }),
150
- /*#__PURE__*/ _jsx(MemoButton, {
151
- type: "button",
152
- tooltip: "Clear Formatting",
153
- onClick: commands.onClearFormatting,
154
- children: /*#__PURE__*/ _jsx(Icon, {
155
- icon: RemoveFormatting
156
- })
157
- }),
158
115
  /*#__PURE__*/ _jsx(EditLinkPopover, {
159
116
  onSetLink: commands.onLink
160
117
  }),
@@ -313,6 +270,49 @@ export const TextMenu = ({ editor })=>{
313
270
  children: /*#__PURE__*/ _jsx(Icon, {
314
271
  icon: AlignJustify
315
272
  })
273
+ }),
274
+ /*#__PURE__*/ _jsx(MemoButton, {
275
+ type: "button",
276
+ tooltip: "Strikehrough",
277
+ tooltipShortcut: [
278
+ "Mod",
279
+ "Shift",
280
+ "S"
281
+ ],
282
+ onClick: commands.onStrike,
283
+ active: states.isStrike,
284
+ children: /*#__PURE__*/ _jsx(Icon, {
285
+ icon: Strikethrough
286
+ })
287
+ }),
288
+ /*#__PURE__*/ _jsx(MemoButton, {
289
+ type: "button",
290
+ tooltip: "Code",
291
+ tooltipShortcut: [
292
+ "Mod",
293
+ "E"
294
+ ],
295
+ onClick: commands.onCode,
296
+ active: states.isCode,
297
+ children: /*#__PURE__*/ _jsx(Icon, {
298
+ icon: Code
299
+ })
300
+ }),
301
+ /*#__PURE__*/ _jsx(MemoButton, {
302
+ type: "button",
303
+ tooltip: "Code block",
304
+ onClick: commands.onCodeBlock,
305
+ children: /*#__PURE__*/ _jsx(Icon, {
306
+ icon: FileCode
307
+ })
308
+ }),
309
+ /*#__PURE__*/ _jsx(MemoButton, {
310
+ type: "button",
311
+ tooltip: "Clear Formatting",
312
+ onClick: commands.onClearFormatting,
313
+ children: /*#__PURE__*/ _jsx(Icon, {
314
+ icon: RemoveFormatting
315
+ })
316
316
  })
317
317
  ]
318
318
  })
@@ -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"],"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\";\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 dir: \"rtl\" | \"ltr\" | \"auto\";\n};\n\nexport const TextMenu = ({ editor, dir }: 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: \"auto\",\n popperOptions: {\n placement: \"auto\",\n },\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\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 <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 </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","dir","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","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","onStrike","isStrike","onCode","isCode","onCodeBlock","onClearFormatting"],"mappings":"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"}