payload-richtext-tiptap 0.0.71 → 0.0.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/fields/TiptapEditor/Components.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/Components.js +3 -4
- package/dist/src/fields/TiptapEditor/Components.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +2 -2
- package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js +16 -15
- package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js +5 -4
- package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/SlashCommand.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/SlashCommand.js +2 -2
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/SlashCommand.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.js +30 -29
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js +5 -4
- package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts +2 -2
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js +16 -1
- 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 +2 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/types.d.ts +7 -0
- package/dist/src/fields/TiptapEditor/features/BlockEditor/types.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/types.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.js +5 -4
- package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.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 +16 -15
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditIframeLinkPopover.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditIframeLinkPopover.js +2 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditIframeLinkPopover.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditLinkPopover.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditLinkPopover.js +2 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditLinkPopover.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 +24 -23
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/SocialMediaPopover.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/SocialMediaPopover.js +2 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/SocialMediaPopover.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 +2 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuContentTypes.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuContentTypes.js +9 -8
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuContentTypes.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +2 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.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 +2 -1
- package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.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 +2 -1
- 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 +2 -1
- package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/IframeLinkEditorPanel.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 +2 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/LinkEditorPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js +4 -10
- package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAA0B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAA0B,MAAM,SAAS,CAAC;AAsClE,eAAO,MAAM,eAAe,EAAE,eAyB7B,CAAC"}
|
|
@@ -10,8 +10,9 @@ import { useCallback, useEffect, useState } from "react";
|
|
|
10
10
|
// import '@fontsource/inter/600.css'
|
|
11
11
|
// import '@fontsource/inter/700.css'
|
|
12
12
|
// import { BlockEditor } from './features/BlockEditor'
|
|
13
|
-
import { useField
|
|
13
|
+
import { useField } from "@payloadcms/ui";
|
|
14
14
|
import { BlockEditor } from "./features/BlockEditor/BlockEditor.js";
|
|
15
|
+
import i18next from "i18next";
|
|
15
16
|
const useDarkmode = ()=>{
|
|
16
17
|
const [isDarkMode, setIsDarkMode] = useState(typeof window !== "undefined" ? document.documentElement.getAttribute("data-theme") === "dark" : false);
|
|
17
18
|
useEffect(()=>{
|
|
@@ -41,10 +42,8 @@ export const EditorComponent = (props)=>{
|
|
|
41
42
|
});
|
|
42
43
|
useDarkmode();
|
|
43
44
|
const hasCollab = false;
|
|
44
|
-
// const { i18n } = useTranslation()
|
|
45
|
-
const { code } = useLocale();
|
|
46
45
|
return /*#__PURE__*/ _jsx("div", {
|
|
47
|
-
lang:
|
|
46
|
+
lang: i18next.language,
|
|
48
47
|
className: "editor-tiptap content-field content-field-disabled",
|
|
49
48
|
style: {
|
|
50
49
|
width: "100%",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"sourcesContent":["\"use client\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n// import 'cal-sans'\n\n// import '@fontsource/inter/100.css'\n// import '@fontsource/inter/200.css'\n// import '@fontsource/inter/300.css'\n// import '@fontsource/inter/400.css'\n// import '@fontsource/inter/500.css'\n// import '@fontsource/inter/600.css'\n// import '@fontsource/inter/700.css'\n// import { BlockEditor } from './features/BlockEditor'\nimport { useField
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"sourcesContent":["\"use client\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n// import 'cal-sans'\n\n// import '@fontsource/inter/100.css'\n// import '@fontsource/inter/200.css'\n// import '@fontsource/inter/300.css'\n// import '@fontsource/inter/400.css'\n// import '@fontsource/inter/500.css'\n// import '@fontsource/inter/600.css'\n// import '@fontsource/inter/700.css'\n// import { BlockEditor } from './features/BlockEditor'\nimport { useField } from \"@payloadcms/ui\";\nimport { BlockEditor } from \"./features/BlockEditor/BlockEditor.js\";\n\n// import \"../../styles.css\";\nimport { CustomComponent, JSONField, ServerProps } from \"payload\";\nimport i18next from \"i18next\";\n\ntype Props = JSONField & ServerProps;\n\nconst useDarkmode = () => {\n const [isDarkMode, setIsDarkMode] = useState<boolean>(\n typeof window !== \"undefined\"\n ? document.documentElement.getAttribute(\"data-theme\") === \"dark\"\n : false\n );\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handleChange = () => setIsDarkMode(mediaQuery.matches);\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n useEffect(() => {\n document.documentElement.classList.toggle(\"dark\", isDarkMode);\n }, [isDarkMode]);\n\n const toggleDarkMode = useCallback(\n () => setIsDarkMode((isDark) => !isDark),\n []\n );\n const lightMode = useCallback(() => setIsDarkMode(false), []);\n const darkMode = useCallback(() => setIsDarkMode(true), []);\n\n return {\n isDarkMode,\n toggleDarkMode,\n lightMode,\n darkMode,\n };\n};\n\nexport const EditorComponent: CustomComponent = (props) => {\n const { value, setValue } = useField<any>({\n path: props.name,\n });\n\n useDarkmode();\n const hasCollab = false;\n return (\n <div\n lang={i18next.language}\n className=\"editor-tiptap content-field content-field-disabled\"\n style={{ width: \"100%\", height: \"100%\", overflow: \"visible\" }}\n >\n {/* {DarkModeSwitcher} */}\n {/* <FieldLabel label={props?.label ?? capitalize(props?.name) ?? ''} /> */}\n <BlockEditor\n hasCollab={hasCollab}\n content={value}\n openAssetHQHandler={(listener) => { }}\n handleChange={(value) => {\n setValue(value);\n }}\n />\n </div>\n );\n};\n"],"names":["useCallback","useEffect","useState","useField","BlockEditor","i18next","useDarkmode","isDarkMode","setIsDarkMode","window","document","documentElement","getAttribute","mediaQuery","matchMedia","handleChange","matches","addEventListener","removeEventListener","classList","toggle","toggleDarkMode","isDark","lightMode","darkMode","EditorComponent","props","value","setValue","path","name","hasCollab","div","lang","language","className","style","width","height","overflow","content","openAssetHQHandler","listener"],"mappings":"AAAA;;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAEzD,oBAAoB;AAEpB,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,uDAAuD;AACvD,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,WAAW,QAAQ,wCAAwC;AAIpE,OAAOC,aAAa,UAAU;AAI9B,MAAMC,cAAc;IAClB,MAAM,CAACC,YAAYC,cAAc,GAAGN,SAClC,OAAOO,WAAW,cACdC,SAASC,eAAe,CAACC,YAAY,CAAC,kBAAkB,SACxD;IAGNX,UAAU;QACR,MAAMY,aAAaJ,OAAOK,UAAU,CAAC;QACrC,MAAMC,eAAe,IAAMP,cAAcK,WAAWG,OAAO;QAC3DH,WAAWI,gBAAgB,CAAC,UAAUF;QACtC,OAAO,IAAMF,WAAWK,mBAAmB,CAAC,UAAUH;IACxD,GAAG,EAAE;IAELd,UAAU;QACRS,SAASC,eAAe,CAACQ,SAAS,CAACC,MAAM,CAAC,QAAQb;IACpD,GAAG;QAACA;KAAW;IAEf,MAAMc,iBAAiBrB,YACrB,IAAMQ,cAAc,CAACc,SAAW,CAACA,SACjC,EAAE;IAEJ,MAAMC,YAAYvB,YAAY,IAAMQ,cAAc,QAAQ,EAAE;IAC5D,MAAMgB,WAAWxB,YAAY,IAAMQ,cAAc,OAAO,EAAE;IAE1D,OAAO;QACLD;QACAc;QACAE;QACAC;IACF;AACF;AAEA,OAAO,MAAMC,kBAAmC,CAACC;IAC/C,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGzB,SAAc;QACxC0B,MAAMH,MAAMI,IAAI;IAClB;IAEAxB;IACA,MAAMyB,YAAY;IAClB,qBACE,KAACC;QACCC,MAAM5B,QAAQ6B,QAAQ;QACtBC,WAAU;QACVC,OAAO;YAAEC,OAAO;YAAQC,QAAQ;YAAQC,UAAU;QAAU;kBAI5D,cAAA,KAACnC;YACC2B,WAAWA;YACXS,SAASb;YACTc,oBAAoB,CAACC,YAAe;YACpC3B,cAAc,CAACY;gBACbC,SAASD;YACX;;;AAIR,EAAE"}
|
|
@@ -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;
|
|
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,qBAoTpB,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -4,7 +4,6 @@ import { PluginKey } from "@tiptap/pm/state";
|
|
|
4
4
|
import { ReactRenderer } from "@tiptap/react";
|
|
5
5
|
import Suggestion from "@tiptap/suggestion";
|
|
6
6
|
import tippy from "tippy.js";
|
|
7
|
-
import { GROUPS } from "./groups.js";
|
|
8
7
|
import AIMenuList from "./AIMenuList.js";
|
|
9
8
|
// import { AICommandPanel } from "../../features/panels/AICommandPanel/AICommandPanel.js";
|
|
10
9
|
const extensionName = "aiCommand";
|
|
@@ -78,7 +77,8 @@ export const AICommand = Extension.create({
|
|
|
78
77
|
props.action(editor);
|
|
79
78
|
// view.focus();
|
|
80
79
|
},
|
|
81
|
-
items: ({ query })=>{
|
|
80
|
+
items: async ({ query })=>{
|
|
81
|
+
const GROUPS = (await import("./groups.js")).default;
|
|
82
82
|
const withFilteredCommands = GROUPS.map((group)=>({
|
|
83
83
|
...group,
|
|
84
84
|
commands: group.commands.filter((item)=>{
|
|
@@ -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;\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
|
+
{"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 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: async ({ query }: { query: string }) => {\n const GROUPS = (await import(\"./groups.js\")).default;\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","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","GROUPS","default","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,MAAM,EAAE,KAAK,EAkFzB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Pen } from "lucide-react";
|
|
2
|
+
import i18next from "i18next";
|
|
2
3
|
export const GROUPS = [
|
|
3
4
|
{
|
|
4
5
|
name: "draft",
|
|
5
|
-
title: "Draft with AI",
|
|
6
|
+
title: i18next.t("draftWithAI") || "Draft with AI",
|
|
6
7
|
commands: [
|
|
7
8
|
{
|
|
8
9
|
name: "brainstorm",
|
|
9
|
-
label: "Brainstorm Ideas...",
|
|
10
|
-
description: "Brainstorm ideas on ",
|
|
10
|
+
label: i18next.t("brainstormIdeas") || "Brainstorm Ideas...",
|
|
11
11
|
icon: Pen,
|
|
12
|
+
description: i18next.t("brainstormIdeasDesc") || "Brainstorm ideas on ",
|
|
12
13
|
action: (editor)=>{
|
|
13
14
|
// "Brainstorm ideas on "
|
|
14
15
|
return "Brainstorm ideas on ";
|
|
@@ -17,8 +18,8 @@ export const GROUPS = [
|
|
|
17
18
|
},
|
|
18
19
|
{
|
|
19
20
|
name: "blog",
|
|
20
|
-
label: "Blog post...",
|
|
21
|
-
description: "Blog post",
|
|
21
|
+
label: i18next.t("blogPost") || "Blog post...",
|
|
22
|
+
description: i18next.t("blogPostDesc") || "Blog post",
|
|
22
23
|
action: (editor)=>{
|
|
23
24
|
return "Write a blog post about ";
|
|
24
25
|
// "Write a blog post about "
|
|
@@ -28,8 +29,8 @@ export const GROUPS = [
|
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
name: "outline",
|
|
31
|
-
label: "Outline...",
|
|
32
|
-
description: "Outline",
|
|
32
|
+
label: i18next.t("outline") || "Outline...",
|
|
33
|
+
description: i18next.t("outlineDesc") || "Outline",
|
|
33
34
|
action: (editor)=>{
|
|
34
35
|
return "Write an outline about ";
|
|
35
36
|
// editor.chain().focus().setHeading({ level: 1 }).run();
|
|
@@ -38,9 +39,9 @@ export const GROUPS = [
|
|
|
38
39
|
},
|
|
39
40
|
{
|
|
40
41
|
name: "social",
|
|
41
|
-
label: "Social Media post...",
|
|
42
|
-
description: "Social Media post",
|
|
42
|
+
label: i18next.t("socialMediaPost") || "Social Media post...",
|
|
43
43
|
icon: Pen,
|
|
44
|
+
description: i18next.t("socialMediaPostDesc") || "Social Media post",
|
|
44
45
|
action: (editor)=>{
|
|
45
46
|
return;
|
|
46
47
|
"Write a social media post about ";
|
|
@@ -49,9 +50,9 @@ export const GROUPS = [
|
|
|
49
50
|
},
|
|
50
51
|
{
|
|
51
52
|
name: "press",
|
|
52
|
-
label: "Press release...",
|
|
53
|
-
description: "Press release",
|
|
53
|
+
label: i18next.t("pressEelease") || "Press release...",
|
|
54
54
|
icon: Pen,
|
|
55
|
+
description: i18next.t("pressEeleaseDesc") || "Press release",
|
|
55
56
|
action: (editor)=>{
|
|
56
57
|
return "Write a press release about ";
|
|
57
58
|
// editor.chain().focus().setHeading({ level: 1 }).run();
|
|
@@ -59,8 +60,8 @@ export const GROUPS = [
|
|
|
59
60
|
},
|
|
60
61
|
{
|
|
61
62
|
name: "creative",
|
|
62
|
-
label: "Creative Story...",
|
|
63
|
-
description: "Creative Story",
|
|
63
|
+
label: i18next.t("creativeStory") || "Creative Story...",
|
|
64
|
+
description: i18next.t("creativeStoryDesc") || "Creative Story",
|
|
64
65
|
action: (editor)=>{
|
|
65
66
|
return "Write a creative story about ";
|
|
66
67
|
// editor.chain().focus().setHeading({ level: 1 }).run();
|
|
@@ -69,8 +70,8 @@ export const GROUPS = [
|
|
|
69
70
|
},
|
|
70
71
|
{
|
|
71
72
|
name: "essay",
|
|
72
|
-
label: "Essay...",
|
|
73
|
-
description: "Essay",
|
|
73
|
+
label: i18next.t("essay") || "Essay...",
|
|
74
|
+
description: i18next.t("essayDesc") || "Essay",
|
|
74
75
|
action: (editor)=>{
|
|
75
76
|
return "Write an essay about ";
|
|
76
77
|
// editor.chain().focus().setHeading({ level: 1 }).run();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"sourcesContent":["import {\n Book,\n Columns2,\n Facebook,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Instagram,\n Link,\n Linkedin,\n List,\n ListOrdered,\n ListTodo,\n Minus,\n Music,\n Pen,\n Quote,\n SquareCode,\n Table,\n Twitch,\n Twitter,\n Youtube,\n} from \"lucide-react\";\nimport { Group } from \"./types.js\";\n\nexport const GROUPS: Group[] = [\n {\n name: \"draft\",\n title: \"Draft with AI\",\n commands: [\n {\n name: \"brainstorm\",\n label: \"Brainstorm Ideas...\",\n description: \"Brainstorm ideas on \",\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"sourcesContent":["import {\n Book,\n Columns2,\n Facebook,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Instagram,\n Link,\n Linkedin,\n List,\n ListOrdered,\n ListTodo,\n Minus,\n Music,\n Pen,\n Quote,\n SquareCode,\n Table,\n Twitch,\n Twitter,\n Youtube,\n} from \"lucide-react\";\nimport { Group } from \"./types.js\";\nimport i18next from \"i18next\";\n\nexport const GROUPS: Group[] = [\n {\n name: \"draft\",\n title: i18next.t(\"draftWithAI\") || \"Draft with AI\",\n commands: [\n {\n name: \"brainstorm\",\n label: i18next.t(\"brainstormIdeas\") || \"Brainstorm Ideas...\",\n icon: Pen,\n description: i18next.t(\"brainstormIdeasDesc\") || \"Brainstorm ideas on \",\n action: (editor) => {\n // \"Brainstorm ideas on \"\n return \"Brainstorm ideas on \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"blog\",\n label: i18next.t(\"blogPost\") || \"Blog post...\",\n description: i18next.t(\"blogPostDesc\") || \"Blog post\",\n action: (editor) => {\n return \"Write a blog post about \";\n\n // \"Write a blog post about \"\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n {\n name: \"outline\",\n label: i18next.t(\"outline\") || \"Outline...\",\n description: i18next.t(\"outlineDesc\") || \"Outline\",\n action: (editor) => {\n return \"Write an outline about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n\n {\n name: \"social\",\n label: i18next.t(\"socialMediaPost\") || \"Social Media post...\",\n icon: Pen,\n description: i18next.t(\"socialMediaPostDesc\") || \"Social Media post\",\n action: (editor) => {\n return;\n (\"Write a social media post about \");\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"press\",\n label: i18next.t(\"pressEelease\") || \"Press release...\",\n icon: Pen,\n description: i18next.t(\"pressEeleaseDesc\") || \"Press release\",\n action: (editor) => {\n return \"Write a press release about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"creative\",\n label: i18next.t(\"creativeStory\") || \"Creative Story...\",\n description: i18next.t(\"creativeStoryDesc\") || \"Creative Story\",\n action: (editor) => {\n return \"Write a creative story about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n {\n name: \"essay\",\n label: i18next.t(\"essay\") || \"Essay...\",\n description: i18next.t(\"essayDesc\") || \"Essay\",\n action: (editor) => {\n return \"Write an essay about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n ],\n },\n];\n\nexport default GROUPS;\n"],"names":["Pen","i18next","GROUPS","name","title","t","commands","label","icon","description","action","editor"],"mappings":"AAAA,SAgBEA,GAAG,QAOE,eAAe;AAEtB,OAAOC,aAAa,UAAU;AAE9B,OAAO,MAAMC,SAAkB;IAC7B;QACEC,MAAM;QACNC,OAAOH,QAAQI,CAAC,CAAC,kBAAkB;QACnCC,UAAU;YACR;gBACEH,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP,0BAA0B;oBAC1B,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,eAAe;gBAChCI,aAAaR,QAAQI,CAAC,CAAC,mBAAmB;gBAC1CK,QAAQ,CAACC;oBACP,OAAO;gBAEP,8BAA8B;gBAC9B,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,cAAc;gBAC/BI,aAAaR,QAAQI,CAAC,CAAC,kBAAkB;gBACzCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YAEA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP;oBACC;gBACD,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,mBAAmB;gBACpCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,uBAAuB;gBAC9CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,oBAAoB;gBACrCI,aAAaR,QAAQI,CAAC,CAAC,wBAAwB;gBAC/CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,YAAY;gBAC7BI,aAAaR,QAAQI,CAAC,CAAC,gBAAgB;gBACvCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;SACD;IACH;CACD,CAAC;AAEF,eAAeE,OAAO"}
|
package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioBlockMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAWvD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioBlockMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAWvD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAO7D,eAAO,MAAM,cAAc,yBAA0B,SAAS,KAAG,SAqIhE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { Icon } from "../../../features/ui/Icon.js";
|
|
|
8
8
|
import { Toolbar } from "../../../features/ui/Toolbar.js";
|
|
9
9
|
import { getRenderContainer } from "../../../lib/utils/index.js";
|
|
10
10
|
import { AudioBlockWidth } from "./AudioBlockWidth.js";
|
|
11
|
+
import i18next from "i18next";
|
|
11
12
|
export const AudioBlockMenu = ({ editor, appendTo })=>{
|
|
12
13
|
const menuRef = useRef(null);
|
|
13
14
|
const tippyInstance = useRef(null);
|
|
@@ -97,7 +98,7 @@ export const AudioBlockMenu = ({ editor, appendTo })=>{
|
|
|
97
98
|
children: [
|
|
98
99
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
99
100
|
type: "button",
|
|
100
|
-
tooltip: "Hide/Show caption",
|
|
101
|
+
tooltip: i18next.t("toggleCaption") || "Hide/Show caption",
|
|
101
102
|
active: editor.isActive("audioBlock", {
|
|
102
103
|
caption: false
|
|
103
104
|
}),
|
|
@@ -110,7 +111,7 @@ export const AudioBlockMenu = ({ editor, appendTo })=>{
|
|
|
110
111
|
}),
|
|
111
112
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
112
113
|
type: "button",
|
|
113
|
-
tooltip: "Align audio left",
|
|
114
|
+
tooltip: i18next.t("alignAudioLeft") || "Align audio left",
|
|
114
115
|
active: editor.isActive("audioBlock", {
|
|
115
116
|
align: "left"
|
|
116
117
|
}),
|
|
@@ -121,7 +122,7 @@ export const AudioBlockMenu = ({ editor, appendTo })=>{
|
|
|
121
122
|
}),
|
|
122
123
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
123
124
|
type: "button",
|
|
124
|
-
tooltip: "Align audio center",
|
|
125
|
+
tooltip: i18next.t("alignAudioCenter") || "Align audio center",
|
|
125
126
|
active: editor.isActive("audioBlock", {
|
|
126
127
|
align: "center"
|
|
127
128
|
}),
|
|
@@ -132,7 +133,7 @@ export const AudioBlockMenu = ({ editor, appendTo })=>{
|
|
|
132
133
|
}),
|
|
133
134
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
134
135
|
type: "button",
|
|
135
|
-
tooltip: "Align audio right",
|
|
136
|
+
tooltip: i18next.t("alignAudioRight") || "Align audio right",
|
|
136
137
|
active: editor.isActive("audioBlock", {
|
|
137
138
|
align: "right"
|
|
138
139
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n Pencil,\n PencilOff,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { AudioBlockWidth } from \"./AudioBlockWidth.js\";\n\nexport const AudioBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-audioBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"audioBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignAudioLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignAudioCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignAudioRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onHideCaption = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockCaption(\n editor.isActive(\"audioBlock\", { caption: false }) ? true : false\n )\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`audioBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n Pencil,\n PencilOff,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { AudioBlockWidth } from \"./AudioBlockWidth.js\";\nimport i18next from \"i18next\";\n\nexport const AudioBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-audioBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"audioBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignAudioLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignAudioCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignAudioRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onHideCaption = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockCaption(\n editor.isActive(\"audioBlock\", { caption: false }) ? true : false\n )\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setAudioBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`audioBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"toggleCaption\") || \"Hide/Show caption\"}\n active={editor.isActive(\"audioBlock\", { caption: false })}\n onClick={onHideCaption}\n >\n <Icon\n icon={\n editor.isActive(\"audioBlock\", { caption: false })\n ? PencilOff\n : Pencil\n }\n />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignAudioLeft\") || \"Align audio left\"}\n active={editor.isActive(\"audioBlock\", { align: \"left\" })}\n onClick={onAlignAudioLeft}\n >\n <Icon icon={AlignHorizontalDistributeStart} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignAudioCenter\") || \"Align audio center\"}\n active={editor.isActive(\"audioBlock\", { align: \"center\" })}\n onClick={onAlignAudioCenter}\n >\n <Icon icon={AlignHorizontalDistributeCenter} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignAudioRight\") || \"Align audio right\"}\n active={editor.isActive(\"audioBlock\", { align: \"right\" })}\n onClick={onAlignAudioRight}\n >\n <Icon icon={AlignHorizontalDistributeEnd} />\n </Toolbar.Button>\n <Toolbar.Divider />\n <AudioBlockWidth\n onChange={onWidthChange}\n value={parseInt(editor.getAttributes(\"audioBlock\").width)}\n />\n </Toolbar.Wrapper>\n </BaseBubbleMenu>\n );\n};\n\nexport default AudioBlockMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","useCallback","useRef","sticky","v4","uuid","AlignHorizontalDistributeCenter","AlignHorizontalDistributeEnd","AlignHorizontalDistributeStart","Pencil","PencilOff","Icon","Toolbar","getRenderContainer","AudioBlockWidth","i18next","AudioBlockMenu","editor","appendTo","menuRef","tippyInstance","getReferenceClientRect","renderContainer","rect","getBoundingClientRect","DOMRect","shouldShow","isActive","onAlignAudioLeft","chain","focus","undefined","scrollIntoView","setAudioBlockAlign","run","onAlignAudioCenter","onAlignAudioRight","onHideCaption","setAudioBlockCaption","caption","onWidthChange","value","setAudioBlockWidth","pluginKey","updateDelay","tippyOptions","offset","popperOptions","modifiers","name","enabled","onCreate","instance","current","plugins","Wrapper","shouldShowContent","ref","Button","type","tooltip","t","active","onClick","icon","align","Divider","onChange","parseInt","getAttributes","width"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"IframeMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAK7D,eAAO,MAAM,UAAU,yBAA0B,SAAS,sBA0CzD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -4,6 +4,7 @@ import React, { useCallback } from "react";
|
|
|
4
4
|
import { EditIframeLinkPopover } from "../../../features/menus/TextMenu/components/EditIframeLinkPopover.js";
|
|
5
5
|
import { Toolbar } from "../../../features/ui/Toolbar.js";
|
|
6
6
|
import { getRenderContainer } from "../../../lib/utils/index.js";
|
|
7
|
+
import i18next from "i18next";
|
|
7
8
|
export const IframeMenu = ({ editor, appendTo })=>{
|
|
8
9
|
const getReferenceClientRect = useCallback(()=>{
|
|
9
10
|
const renderContainer = getRenderContainer(editor, "iframe");
|
|
@@ -36,7 +37,7 @@ export const IframeMenu = ({ editor, appendTo })=>{
|
|
|
36
37
|
children: /*#__PURE__*/ _jsx(Toolbar.Wrapper, {
|
|
37
38
|
children: /*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
38
39
|
type: "button",
|
|
39
|
-
tooltip: "Sidebar left",
|
|
40
|
+
tooltip: i18next.t("sidebarLeft") || "Sidebar left",
|
|
40
41
|
active: true,
|
|
41
42
|
children: /*#__PURE__*/ _jsx(EditIframeLinkPopover, {
|
|
42
43
|
onSetLink: onSetLink,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport React, { useCallback } from \"react\";\nimport { sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { EditIframeLinkPopover } from \"../../../features/menus/TextMenu/components/EditIframeLinkPopover.js\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\n\nexport const IframeMenu = ({ editor, appendTo }: MenuProps) => {\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"iframe\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isIframe = editor.isActive(\"iframe\");\n return isIframe;\n }, [editor]);\n\n const onSetLink = useCallback(\n (src: string) => editor.chain().focus().setIframe({ src: src }).run(),\n [editor]\n );\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`iframeMenu`}\n shouldShow={shouldShow}\n tippyOptions={{ popperOptions: { placement: \"top-start\" } }}\n updateDelay={100}\n >\n <Toolbar.Wrapper>\n <Toolbar.Button\n type=\"button\"\n tooltip
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport React, { useCallback } from \"react\";\nimport { sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { EditIframeLinkPopover } from \"../../../features/menus/TextMenu/components/EditIframeLinkPopover.js\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport i18next from \"i18next\";\n\nexport const IframeMenu = ({ editor, appendTo }: MenuProps) => {\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"iframe\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isIframe = editor.isActive(\"iframe\");\n return isIframe;\n }, [editor]);\n\n const onSetLink = useCallback(\n (src: string) => editor.chain().focus().setIframe({ src: src }).run(),\n [editor]\n );\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`iframeMenu`}\n shouldShow={shouldShow}\n tippyOptions={{ popperOptions: { placement: \"top-start\" } }}\n updateDelay={100}\n >\n <Toolbar.Wrapper>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"sidebarLeft\") || \"Sidebar left\"}\n active={true}\n // onClick={onColumnLeft}\n >\n <EditIframeLinkPopover\n onSetLink={onSetLink}\n initialSrcLink={editor?.getAttributes(\"iframe\")?.editorValue ?? \"\"}\n />\n </Toolbar.Button>\n </Toolbar.Wrapper>\n </BaseBubbleMenu>\n );\n};\n\nexport default IframeMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","React","useCallback","EditIframeLinkPopover","Toolbar","getRenderContainer","i18next","IframeMenu","editor","appendTo","getReferenceClientRect","renderContainer","rect","getBoundingClientRect","DOMRect","shouldShow","isIframe","isActive","onSetLink","src","chain","focus","setIframe","run","pluginKey","tippyOptions","popperOptions","placement","updateDelay","Wrapper","Button","type","tooltip","t","active","initialSrcLink","getAttributes","editorValue"],"mappings":";AAAA,SAASA,cAAcC,cAAc,QAAQ,gBAAgB;AAC7D,OAAOC,SAASC,WAAW,QAAQ,QAAQ;AAI3C,SAASC,qBAAqB,QAAQ,uEAAuE;AAE7G,SAASC,OAAO,QAAQ,kCAAkC;AAC1D,SAASC,kBAAkB,QAAQ,8BAA8B;AACjE,OAAOC,aAAa,UAAU;AAE9B,OAAO,MAAMC,aAAa,CAAC,EAAEC,MAAM,EAAEC,QAAQ,EAAa;IACxD,MAAMC,yBAAyBR,YAAY;QACzC,MAAMS,kBAAkBN,mBAAmBG,QAAQ;QACnD,MAAMI,OACJD,iBAAiBE,2BACjB,IAAIC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG;QAE/B,OAAOF;IACT,GAAG;QAACJ;KAAO;IAEX,MAAMO,aAAab,YAAY;QAC7B,MAAMc,WAAWR,OAAOS,QAAQ,CAAC;QACjC,OAAOD;IACT,GAAG;QAACR;KAAO;IAEX,MAAMU,YAAYhB,YAChB,CAACiB,MAAgBX,OAAOY,KAAK,GAAGC,KAAK,GAAGC,SAAS,CAAC;YAAEH,KAAKA;QAAI,GAAGI,GAAG,IACnE;QAACf;KAAO;IAEV,qBACE,KAACR;QACCQ,QAAQA;QACRgB,WAAW,CAAC,UAAU,CAAC;QACvBT,YAAYA;QACZU,cAAc;YAAEC,eAAe;gBAAEC,WAAW;YAAY;QAAE;QAC1DC,aAAa;kBAEb,cAAA,KAACxB,QAAQyB,OAAO;sBACd,cAAA,KAACzB,QAAQ0B,MAAM;gBACbC,MAAK;gBACLC,SAAS1B,QAAQ2B,CAAC,CAAC,kBAAkB;gBACrCC,QAAQ;0BAGR,cAAA,KAAC/B;oBACCe,WAAWA;oBACXiB,gBAAgB3B,QAAQ4B,cAAc,WAAWC,eAAe;;;;;AAM5E,EAAE;AAEF,eAAe9B,WAAW"}
|
package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageBlockMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AASvD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageBlockMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AASvD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAO7D,eAAO,MAAM,cAAc,yBAA0B,SAAS,KAAG,SA6GhE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { Icon } from "../../../features/ui/Icon.js";
|
|
|
8
8
|
import { Toolbar } from "../../../features/ui/Toolbar.js";
|
|
9
9
|
import { getRenderContainer } from "../../../lib/utils/index.js";
|
|
10
10
|
import { ImageBlockWidth } from "./ImageBlockWidth.js";
|
|
11
|
+
import i18next from "i18next";
|
|
11
12
|
export const ImageBlockMenu = ({ editor, appendTo })=>{
|
|
12
13
|
const menuRef = useRef(null);
|
|
13
14
|
const tippyInstance = useRef(null);
|
|
@@ -88,7 +89,7 @@ export const ImageBlockMenu = ({ editor, appendTo })=>{
|
|
|
88
89
|
children: [
|
|
89
90
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
90
91
|
type: "button",
|
|
91
|
-
tooltip: "Align image left",
|
|
92
|
+
tooltip: i18next.t("alignImageLeft") || "Align image left",
|
|
92
93
|
active: editor.isActive("imageBlock", {
|
|
93
94
|
align: "left"
|
|
94
95
|
}),
|
|
@@ -99,7 +100,7 @@ export const ImageBlockMenu = ({ editor, appendTo })=>{
|
|
|
99
100
|
}),
|
|
100
101
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
101
102
|
type: "button",
|
|
102
|
-
tooltip: "Align image center",
|
|
103
|
+
tooltip: i18next.t("alignImageCenter") || "Align image center",
|
|
103
104
|
active: editor.isActive("imageBlock", {
|
|
104
105
|
align: "center"
|
|
105
106
|
}),
|
|
@@ -110,7 +111,7 @@ export const ImageBlockMenu = ({ editor, appendTo })=>{
|
|
|
110
111
|
}),
|
|
111
112
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
112
113
|
type: "button",
|
|
113
|
-
tooltip: "Align image right",
|
|
114
|
+
tooltip: i18next.t("alignImageRight") || "Align image right",
|
|
114
115
|
active: editor.isActive("imageBlock", {
|
|
115
116
|
align: "right"
|
|
116
117
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { ImageBlockWidth } from \"./ImageBlockWidth.js\";\n\nexport const ImageBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-imageBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"imageBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignImageLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignImageCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignImageRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`imageBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { ImageBlockWidth } from \"./ImageBlockWidth.js\";\nimport i18next from \"i18next\";\n\nexport const ImageBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-imageBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"imageBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignImageLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignImageCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignImageRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setImageBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`imageBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignImageLeft\") || \"Align image left\"}\n active={editor.isActive(\"imageBlock\", { align: \"left\" })}\n onClick={onAlignImageLeft}\n >\n <Icon icon={AlignHorizontalDistributeStart} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignImageCenter\") || \"Align image center\"}\n active={editor.isActive(\"imageBlock\", { align: \"center\" })}\n onClick={onAlignImageCenter}\n >\n <Icon icon={AlignHorizontalDistributeCenter} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignImageRight\") || \"Align image right\"}\n active={editor.isActive(\"imageBlock\", { align: \"right\" })}\n onClick={onAlignImageRight}\n >\n <Icon icon={AlignHorizontalDistributeEnd} />\n </Toolbar.Button>\n <Toolbar.Divider />\n <ImageBlockWidth\n onChange={onWidthChange}\n value={parseInt(editor.getAttributes(\"imageBlock\").width)}\n />\n </Toolbar.Wrapper>\n </BaseBubbleMenu>\n );\n};\n\nexport default ImageBlockMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","useCallback","useRef","sticky","v4","uuid","AlignHorizontalDistributeCenter","AlignHorizontalDistributeEnd","AlignHorizontalDistributeStart","Icon","Toolbar","getRenderContainer","ImageBlockWidth","i18next","ImageBlockMenu","editor","appendTo","menuRef","tippyInstance","getReferenceClientRect","renderContainer","rect","getBoundingClientRect","DOMRect","shouldShow","isActive","onAlignImageLeft","chain","focus","undefined","scrollIntoView","setImageBlockAlign","run","onAlignImageCenter","onAlignImageRight","onWidthChange","value","setImageBlockWidth","pluginKey","updateDelay","tippyOptions","offset","popperOptions","modifiers","name","enabled","onCreate","instance","current","plugins","Wrapper","shouldShowContent","ref","Button","type","tooltip","t","active","align","onClick","icon","Divider","onChange","parseInt","getAttributes","width"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnsMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"ColumnsMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAO7D,eAAO,MAAM,WAAW,yBAA0B,SAAS,gCA8E1D,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { Icon } from "../../../features/ui/Icon.js";
|
|
|
8
8
|
import { Toolbar } from "../../../features/ui/Toolbar.js";
|
|
9
9
|
import { getRenderContainer } from "../../../lib/utils/index.js";
|
|
10
10
|
import { ColumnLayout } from "../Columns.js";
|
|
11
|
+
import i18next from "i18next";
|
|
11
12
|
export const ColumnsMenu = ({ editor, appendTo })=>{
|
|
12
13
|
const getReferenceClientRect = useCallback(()=>{
|
|
13
14
|
const renderContainer = getRenderContainer(editor, "columns");
|
|
@@ -66,7 +67,7 @@ export const ColumnsMenu = ({ editor, appendTo })=>{
|
|
|
66
67
|
children: [
|
|
67
68
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
68
69
|
type: "button",
|
|
69
|
-
tooltip: "Sidebar left",
|
|
70
|
+
tooltip: i18next.t("sidebarLeft") || "Sidebar left",
|
|
70
71
|
active: editor.isActive("columns", {
|
|
71
72
|
layout: ColumnLayout.SidebarLeft
|
|
72
73
|
}),
|
|
@@ -77,7 +78,7 @@ export const ColumnsMenu = ({ editor, appendTo })=>{
|
|
|
77
78
|
}),
|
|
78
79
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
79
80
|
type: "button",
|
|
80
|
-
tooltip: "Two columns",
|
|
81
|
+
tooltip: i18next.t("twoColumns") || "Two columns",
|
|
81
82
|
active: editor.isActive("columns", {
|
|
82
83
|
layout: ColumnLayout.TwoColumn
|
|
83
84
|
}),
|
|
@@ -88,7 +89,7 @@ export const ColumnsMenu = ({ editor, appendTo })=>{
|
|
|
88
89
|
}),
|
|
89
90
|
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
90
91
|
type: "button",
|
|
91
|
-
tooltip: "Sidebar right",
|
|
92
|
+
tooltip: i18next.t("sidebarRight") || "Sidebar right",
|
|
92
93
|
active: editor.isActive("columns", {
|
|
93
94
|
layout: ColumnLayout.SidebarRight
|
|
94
95
|
}),
|