payload-richtext-tiptap 0.0.116 → 0.0.118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/fields/TiptapEditor/extensions/Iframe/iframe.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/Iframe/iframe.js +6 -0
- package/dist/src/fields/TiptapEditor/extensions/Iframe/iframe.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.d.ts +6 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.js +31 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.d.ts +11 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.js +90 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.d.ts +14 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.js +70 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/index.d.ts +2 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/index.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/index.js +3 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/index.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/index.d.ts +2 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/index.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/index.js +3 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/index.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.d.ts +8 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.js +44 -0
- package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.js +5 -5
- package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts +2 -2
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js +4 -3
- package/dist/src/fields/TiptapEditor/extensions/extension-kit.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/index.d.ts +1 -0
- package/dist/src/fields/TiptapEditor/extensions/index.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/index.js +2 -1
- package/dist/src/fields/TiptapEditor/extensions/index.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/ServersideTiptapBody.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/serverside/ServersideTiptapBody.js +3 -2
- package/dist/src/fields/TiptapEditor/extensions/serverside/ServersideTiptapBody.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts +3 -2
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js +7 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/BlockEditor/types.d.ts +13 -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/panels/AICommandPanel/AICommandPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +13 -4
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/tiptap.schema.d.ts +847 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/tiptap.schema.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/tiptap.schema.js +88 -0
- package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/tiptap.schema.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/styles.css +200 -196
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/Iframe/iframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAC;AAIrD,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,MAAM,EAAE;YACN;;eAEG;YACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAA;aAAE,KAAK,UAAU,CAAC;YACrD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC;YACvC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;SAChE,CAAC;KACH;CACF;AAED,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/Iframe/iframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,cAAc,CAAC;AAIrD,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,MAAM,EAAE;YACN;;eAEG;YACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAA;aAAE,KAAK,UAAU,CAAC;YACrD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC;YACvC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;SAChE,CAAC;KACH;CACF;AAED,eAAO,MAAM,MAAM,0BAqKjB,CAAC"}
|
|
@@ -27,6 +27,12 @@ export const Iframe = Node.create({
|
|
|
27
27
|
allowfullscreen: {
|
|
28
28
|
default: this.options.allowFullscreen,
|
|
29
29
|
parseHTML: ()=>this.options.allowFullscreen
|
|
30
|
+
},
|
|
31
|
+
sandbox: {
|
|
32
|
+
default: "allow-forms allow-modals"
|
|
33
|
+
},
|
|
34
|
+
referrerpolicy: {
|
|
35
|
+
default: "no-referrer"
|
|
30
36
|
}
|
|
31
37
|
};
|
|
32
38
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Iframe/iframe.ts"],"sourcesContent":["import { mergeAttributes, Node } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport IframeEmbed from \"./IframeEmbed.js\";\n\nexport interface IframeOptions {\n allowFullscreen: boolean;\n HTMLAttributes: {\n [key: string]: any;\n };\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n iframe: {\n /**\n * Add an iframe\n */\n setIframe: (options?: { src: string }) => ReturnType;\n setHtml: (value: string) => ReturnType;\n insertIframe: (src?: string, className?: string) => ReturnType;\n };\n }\n}\n\nexport const Iframe = Node.create<IframeOptions>({\n name: \"iframe\",\n inline: false,\n group: \"block\",\n content: \"inline*\",\n draggable: true,\n\n atom: true,\n\n addOption() {\n return {\n allowFullscreen: true,\n HTMLAttributes: {\n class: \"iframe-wrapper\",\n },\n };\n },\n\n addAttributes() {\n return {\n src: {\n default: null,\n },\n frameborder: {\n default: 0,\n },\n allowfullscreen: {\n default: this.options.allowFullscreen,\n parseHTML: () => this.options.allowFullscreen,\n },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"iframe\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n ];\n },\n parseHTML() {\n return [\n {\n tag: \"iframe\",\n },\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(IframeEmbed);\n },\n\n addCommands() {\n return {\n setIframe:\n (options: { src: string }) =>\n ({ tr, dispatch }) => {\n const { selection } = tr;\n let attributes: Record<string, any> = {\n ...options,\n };\n\n if (options?.src?.includes(\"iframe\")) {\n const parser = new DOMParser();\n const html = parser.parseFromString(options?.src, \"text/html\");\n const attrNames = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttributeNames();\n\n attrNames?.forEach((attr) => {\n attributes[attr] = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttribute(attr);\n });\n } else if (!isValidHttpUrl(options?.src)) {\n const htmlData =\n \"data:text/html;charset=utf-8,\" + encodeURI(options?.src);\n attributes = {\n ...attributes,\n src: htmlData,\n };\n }\n const node = this.type.create(attributes);\n\n if (dispatch) {\n tr.replaceRangeWith(selection.from, selection.to, node);\n }\n\n // return commands.insertContent({\n // type: 'iframe',\n // attrs: attributes,\n // })\n\n return true;\n },\n\n setHtml:\n (value) =>\n ({ commands, state }) => {\n console.log(value);\n let attributes: Record<string, any> = {\n editorValue: value,\n };\n\n if (value?.includes(\"youtube.com\")) {\n const ytValue = value?.split(\"v=\")?.[1]?.split(\"&\")?.[0];\n attributes = {\n ...attributes,\n\n src: `https://www.youtube.com/embed/${ytValue}?controls=0`,\n title: \"YouTube video player\",\n };\n } else if (value?.includes(\"instagram.com\")) {\n const instagramValue = value?.split(\"p/\")?.[1]?.split(\"/\")?.[0];\n attributes = {\n ...attributes,\n\n src: `https://www.instagram.com/p/${instagramValue}/embed`,\n title: \"Instagram\",\n };\n } else if (isValidHttpUrl(value)) {\n attributes = {\n ...attributes,\n\n src: value,\n };\n } else if (value?.includes(\"iframe\")) {\n const parser = new DOMParser();\n const html = parser.parseFromString(value, \"text/html\");\n const attrNames = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttributeNames();\n\n attrNames?.forEach((attr) => {\n attributes[attr] = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttribute(attr);\n });\n } else {\n const htmlData = \"data:text/html;charset=utf-8,\" + encodeURI(value);\n attributes = {\n ...attributes,\n src: htmlData,\n };\n }\n\n return true;\n },\n insertIframe:\n (src, className) =>\n ({ commands, state }) => {\n return commands.insertContent({\n type: \"iframe\",\n attrs: {\n src,\n class: className,\n },\n });\n },\n };\n },\n});\n\nfunction isValidHttpUrl(string: string) {\n let url;\n\n try {\n url = new URL(string);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n"],"names":["mergeAttributes","Node","ReactNodeViewRenderer","IframeEmbed","Iframe","create","name","inline","group","content","draggable","atom","addOption","allowFullscreen","HTMLAttributes","class","addAttributes","src","default","frameborder","allowfullscreen","options","parseHTML","renderHTML","tag","addNodeView","addCommands","setIframe","tr","dispatch","selection","attributes","includes","parser","DOMParser","html","parseFromString","attrNames","getElementsByTagName","getAttributeNames","forEach","attr","getAttribute","isValidHttpUrl","htmlData","encodeURI","node","type","replaceRangeWith","from","to","setHtml","value","commands","state","console","log","editorValue","ytValue","split","title","instagramValue","insertIframe","className","insertContent","attrs","string","url","URL","_","protocol"],"mappings":"AAAA,SAASA,eAAe,EAAEC,IAAI,QAAQ,eAAe;AACrD,SAASC,qBAAqB,QAAQ,gBAAgB;AACtD,OAAOC,iBAAiB,mBAAmB;AAsB3C,OAAO,MAAMC,SAASH,KAAKI,MAAM,CAAgB;IAC/CC,MAAM;IACNC,QAAQ;IACRC,OAAO;IACPC,SAAS;IACTC,WAAW;IAEXC,MAAM;IAENC;QACE,OAAO;YACLC,iBAAiB;YACjBC,gBAAgB;gBACdC,OAAO;YACT;QACF;IACF;IAEAC;QACE,OAAO;YACLC,KAAK;gBACHC,SAAS;YACX;YACAC,aAAa;gBACXD,SAAS;YACX;YACAE,iBAAiB;gBACfF,SAAS,IAAI,CAACG,OAAO,CAACR,eAAe;gBACrCS,WAAW,IAAM,IAAI,CAACD,OAAO,CAACR,eAAe;YAC/C;QACF;IACF;
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Iframe/iframe.ts"],"sourcesContent":["import { mergeAttributes, Node } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport IframeEmbed from \"./IframeEmbed.js\";\n\nexport interface IframeOptions {\n allowFullscreen: boolean;\n HTMLAttributes: {\n [key: string]: any;\n };\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n iframe: {\n /**\n * Add an iframe\n */\n setIframe: (options?: { src: string }) => ReturnType;\n setHtml: (value: string) => ReturnType;\n insertIframe: (src?: string, className?: string) => ReturnType;\n };\n }\n}\n\nexport const Iframe = Node.create<IframeOptions>({\n name: \"iframe\",\n inline: false,\n group: \"block\",\n content: \"inline*\",\n draggable: true,\n\n atom: true,\n\n addOption() {\n return {\n allowFullscreen: true,\n HTMLAttributes: {\n class: \"iframe-wrapper\",\n },\n };\n },\n\n addAttributes() {\n return {\n src: {\n default: null,\n },\n frameborder: {\n default: 0,\n },\n allowfullscreen: {\n default: this.options.allowFullscreen,\n parseHTML: () => this.options.allowFullscreen,\n },\n sandbox: {\n default: \"allow-forms allow-modals\",\n },\n referrerpolicy: {\n default: \"no-referrer\"\n }\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"iframe\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n ];\n },\n parseHTML() {\n return [\n {\n tag: \"iframe\",\n },\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(IframeEmbed);\n },\n\n addCommands() {\n return {\n setIframe:\n (options: { src: string }) =>\n ({ tr, dispatch }) => {\n const { selection } = tr;\n let attributes: Record<string, any> = {\n ...options,\n };\n\n if (options?.src?.includes(\"iframe\")) {\n const parser = new DOMParser();\n const html = parser.parseFromString(options?.src, \"text/html\");\n const attrNames = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttributeNames();\n\n attrNames?.forEach((attr) => {\n attributes[attr] = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttribute(attr);\n });\n } else if (!isValidHttpUrl(options?.src)) {\n const htmlData =\n \"data:text/html;charset=utf-8,\" + encodeURI(options?.src);\n attributes = {\n ...attributes,\n src: htmlData,\n };\n }\n const node = this.type.create(attributes);\n\n if (dispatch) {\n tr.replaceRangeWith(selection.from, selection.to, node);\n }\n\n // return commands.insertContent({\n // type: 'iframe',\n // attrs: attributes,\n // })\n\n return true;\n },\n\n setHtml:\n (value) =>\n ({ commands, state }) => {\n console.log(value);\n let attributes: Record<string, any> = {\n editorValue: value,\n };\n\n if (value?.includes(\"youtube.com\")) {\n const ytValue = value?.split(\"v=\")?.[1]?.split(\"&\")?.[0];\n attributes = {\n ...attributes,\n\n src: `https://www.youtube.com/embed/${ytValue}?controls=0`,\n title: \"YouTube video player\",\n };\n } else if (value?.includes(\"instagram.com\")) {\n const instagramValue = value?.split(\"p/\")?.[1]?.split(\"/\")?.[0];\n attributes = {\n ...attributes,\n\n src: `https://www.instagram.com/p/${instagramValue}/embed`,\n title: \"Instagram\",\n };\n } else if (isValidHttpUrl(value)) {\n attributes = {\n ...attributes,\n\n src: value,\n };\n } else if (value?.includes(\"iframe\")) {\n const parser = new DOMParser();\n const html = parser.parseFromString(value, \"text/html\");\n const attrNames = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttributeNames();\n\n attrNames?.forEach((attr) => {\n attributes[attr] = html\n .getElementsByTagName(\"iframe\")?.[0]\n ?.getAttribute(attr);\n });\n } else {\n const htmlData = \"data:text/html;charset=utf-8,\" + encodeURI(value);\n attributes = {\n ...attributes,\n src: htmlData,\n };\n }\n\n return true;\n },\n insertIframe:\n (src, className) =>\n ({ commands, state }) => {\n return commands.insertContent({\n type: \"iframe\",\n attrs: {\n src,\n class: className,\n },\n });\n },\n };\n },\n});\n\nfunction isValidHttpUrl(string: string) {\n let url;\n\n try {\n url = new URL(string);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n"],"names":["mergeAttributes","Node","ReactNodeViewRenderer","IframeEmbed","Iframe","create","name","inline","group","content","draggable","atom","addOption","allowFullscreen","HTMLAttributes","class","addAttributes","src","default","frameborder","allowfullscreen","options","parseHTML","sandbox","referrerpolicy","renderHTML","tag","addNodeView","addCommands","setIframe","tr","dispatch","selection","attributes","includes","parser","DOMParser","html","parseFromString","attrNames","getElementsByTagName","getAttributeNames","forEach","attr","getAttribute","isValidHttpUrl","htmlData","encodeURI","node","type","replaceRangeWith","from","to","setHtml","value","commands","state","console","log","editorValue","ytValue","split","title","instagramValue","insertIframe","className","insertContent","attrs","string","url","URL","_","protocol"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type EditIframeLinkPopoverProps = {
|
|
2
|
+
onSetLink: (src: string) => void;
|
|
3
|
+
initialSrcLink: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const EditLinkPreviewPopover: ({ onSetLink, initialSrcLink, }: EditIframeLinkPopoverProps) => import("react").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=EditLinkPreviewPopover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditLinkPreviewPopover.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,sBAAsB,mCAGhC,0BAA0B,gCAqB5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as Popover from "@radix-ui/react-popover";
|
|
3
|
+
import { Link } from "lucide-react";
|
|
4
|
+
import { Icon } from "../../features/ui/Icon.js";
|
|
5
|
+
import { Toolbar } from "../../features/ui/Toolbar.js";
|
|
6
|
+
import i18next from "i18next";
|
|
7
|
+
import { LinkPreviewEditorPanel } from "./LinkPreviewEditorPanel.js";
|
|
8
|
+
export const EditLinkPreviewPopover = ({ onSetLink, initialSrcLink })=>{
|
|
9
|
+
return /*#__PURE__*/ _jsxs(Popover.Root, {
|
|
10
|
+
children: [
|
|
11
|
+
/*#__PURE__*/ _jsx(Popover.Trigger, {
|
|
12
|
+
asChild: true,
|
|
13
|
+
children: /*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
14
|
+
type: "button",
|
|
15
|
+
tooltip: i18next.t("setEmbedCodeOrLink") || "Set Embed Code / Embed Link",
|
|
16
|
+
children: /*#__PURE__*/ _jsx(Icon, {
|
|
17
|
+
icon: Link
|
|
18
|
+
})
|
|
19
|
+
})
|
|
20
|
+
}),
|
|
21
|
+
/*#__PURE__*/ _jsx(Popover.Content, {
|
|
22
|
+
children: /*#__PURE__*/ _jsx(LinkPreviewEditorPanel, {
|
|
23
|
+
onSetLink: onSetLink,
|
|
24
|
+
initialSrc: initialSrcLink ?? ""
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
]
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=EditLinkPreviewPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.tsx"],"sourcesContent":["import * as Popover from \"@radix-ui/react-popover\";\nimport { Link } from \"lucide-react\";\nimport { Icon } from \"../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../features/ui/Toolbar.js\";\nimport i18next from \"i18next\";\nimport { LinkPreviewEditorPanel } from \"./LinkPreviewEditorPanel.js\";\n\nexport type EditIframeLinkPopoverProps = {\n onSetLink: (src: string) => void;\n initialSrcLink: string;\n};\n\nexport const EditLinkPreviewPopover = ({\n onSetLink,\n initialSrcLink,\n}: EditIframeLinkPopoverProps) => {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Toolbar.Button\n type=\"button\"\n tooltip={\n i18next.t(\"setEmbedCodeOrLink\") || \"Set Embed Code / Embed Link\"\n }\n >\n <Icon icon={Link} />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content>\n <LinkPreviewEditorPanel\n onSetLink={onSetLink}\n initialSrc={initialSrcLink ?? \"\"}\n />\n </Popover.Content>\n </Popover.Root>\n );\n};\n"],"names":["Popover","Link","Icon","Toolbar","i18next","LinkPreviewEditorPanel","EditLinkPreviewPopover","onSetLink","initialSrcLink","Root","Trigger","asChild","Button","type","tooltip","t","icon","Content","initialSrc"],"mappings":";AAAA,YAAYA,aAAa,0BAA0B;AACnD,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,IAAI,QAAQ,4BAA4B;AACjD,SAASC,OAAO,QAAQ,+BAA+B;AACvD,OAAOC,aAAa,UAAU;AAC9B,SAASC,sBAAsB,QAAQ,8BAA8B;AAOrE,OAAO,MAAMC,yBAAyB,CAAC,EACrCC,SAAS,EACTC,cAAc,EACa;IAC3B,qBACE,MAACR,QAAQS,IAAI;;0BACX,KAACT,QAAQU,OAAO;gBAACC,OAAO;0BACtB,cAAA,KAACR,QAAQS,MAAM;oBACbC,MAAK;oBACLC,SACEV,QAAQW,CAAC,CAAC,yBAAyB;8BAGrC,cAAA,KAACb;wBAAKc,MAAMf;;;;0BAGhB,KAACD,QAAQiB,OAAO;0BACd,cAAA,KAACZ;oBACCE,WAAWA;oBACXW,YAAYV,kBAAkB;;;;;AAKxC,EAAE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Node } from "@tiptap/core";
|
|
2
|
+
import { SiteMetaData } from "../../features/BlockEditor/types.jsx";
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
linkPreview: {
|
|
6
|
+
setLinkPreview: (src?: string, metadata?: SiteMetaData) => ReturnType;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare const LinkPreview: Node<any, any>;
|
|
11
|
+
//# sourceMappingURL=LinkPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkPreview.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,WAAW,EAAE;YACX,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,KAAK,UAAU,CAAC;SACvE,CAAC;KACH;CACF;AAED,eAAO,MAAM,WAAW,gBAuFtB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Node, mergeAttributes } from "@tiptap/core";
|
|
2
|
+
export const LinkPreview = Node.create({
|
|
3
|
+
name: "linkPreview",
|
|
4
|
+
group: "block",
|
|
5
|
+
atom: true,
|
|
6
|
+
addAttributes () {
|
|
7
|
+
return {
|
|
8
|
+
href: {
|
|
9
|
+
default: ""
|
|
10
|
+
},
|
|
11
|
+
title: {
|
|
12
|
+
default: ""
|
|
13
|
+
},
|
|
14
|
+
description: {
|
|
15
|
+
default: ""
|
|
16
|
+
},
|
|
17
|
+
image: {
|
|
18
|
+
default: ""
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
parseHTML () {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
tag: "div[data-link-preview]"
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
},
|
|
29
|
+
renderHTML ({ node }) {
|
|
30
|
+
return [
|
|
31
|
+
"div",
|
|
32
|
+
mergeAttributes({
|
|
33
|
+
"data-link-preview": "",
|
|
34
|
+
style: "position: relative; border: 1px solid #ddd; padding: 10px; display: flex; align-items: center; gap: 10px; border-radius: 6px; background: #f9f9f9;"
|
|
35
|
+
}),
|
|
36
|
+
node.attrs.image ? [
|
|
37
|
+
"img",
|
|
38
|
+
{
|
|
39
|
+
src: node.attrs.image,
|
|
40
|
+
width: "120px",
|
|
41
|
+
height: "120px",
|
|
42
|
+
style: "border-radius: 4px;"
|
|
43
|
+
}
|
|
44
|
+
] : "",
|
|
45
|
+
[
|
|
46
|
+
"div",
|
|
47
|
+
{},
|
|
48
|
+
[
|
|
49
|
+
"strong",
|
|
50
|
+
{},
|
|
51
|
+
node.attrs.title
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"p",
|
|
55
|
+
{
|
|
56
|
+
style: "font-size: 12px; color: gray; margin: 0;"
|
|
57
|
+
},
|
|
58
|
+
node.attrs.description
|
|
59
|
+
]
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
"a",
|
|
63
|
+
{
|
|
64
|
+
href: node.attrs.href,
|
|
65
|
+
target: "_blank",
|
|
66
|
+
rel: "noopener noreferrer",
|
|
67
|
+
style: "position: absolute; top: 5px; right: 5px; text-decoration: none; font-size: 14px; color: #555; cursor: pointer;"
|
|
68
|
+
},
|
|
69
|
+
"🔗"
|
|
70
|
+
]
|
|
71
|
+
];
|
|
72
|
+
},
|
|
73
|
+
addCommands () {
|
|
74
|
+
return {
|
|
75
|
+
setLinkPreview: (src, metadata)=>({ commands, state })=>{
|
|
76
|
+
return commands.insertContent({
|
|
77
|
+
type: "linkPreview",
|
|
78
|
+
attrs: {
|
|
79
|
+
href: src,
|
|
80
|
+
title: metadata?.title,
|
|
81
|
+
description: metadata?.description,
|
|
82
|
+
image: metadata?.images?.[0] || "/png/placeholder.png"
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=LinkPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.tsx"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\nimport { SiteMetaData } from \"../../features/BlockEditor/types.jsx\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n linkPreview: {\n setLinkPreview: (src?: string, metadata?: SiteMetaData) => ReturnType;\n };\n }\n}\n\nexport const LinkPreview = Node.create({\n name: \"linkPreview\",\n group: \"block\",\n atom: true,\n\n addAttributes() {\n return {\n href: {\n default: \"\",\n },\n title: { default: \"\" },\n description: {\n default: \"\",\n },\n image: {\n default: \"\",\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"div[data-link-preview]\",\n },\n ];\n },\n\n renderHTML({ node }) {\n return [\n \"div\",\n mergeAttributes({\n \"data-link-preview\": \"\",\n style:\n \"position: relative; border: 1px solid #ddd; padding: 10px; display: flex; align-items: center; gap: 10px; border-radius: 6px; background: #f9f9f9;\",\n }),\n node.attrs.image\n ? [\n \"img\",\n {\n src: node.attrs.image,\n width: \"120px\",\n height: \"120px\",\n style: \"border-radius: 4px;\",\n },\n ]\n : \"\",\n [\n \"div\",\n {},\n [\"strong\", {}, node.attrs.title],\n [\n \"p\",\n { style: \"font-size: 12px; color: gray; margin: 0;\" },\n node.attrs.description,\n ],\n ],\n [\n \"a\",\n {\n href: node.attrs.href,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n style:\n \"position: absolute; top: 5px; right: 5px; text-decoration: none; font-size: 14px; color: #555; cursor: pointer;\",\n },\n \"🔗\",\n ],\n ];\n },\n addCommands() {\n return {\n setLinkPreview:\n (src, metadata) =>\n ({ commands, state }) => {\n return commands.insertContent({\n type: \"linkPreview\",\n attrs: {\n href: src,\n title: metadata?.title,\n description: metadata?.description,\n image: metadata?.images?.[0] || \"/png/placeholder.png\",\n },\n });\n },\n };\n },\n});\n"],"names":["Node","mergeAttributes","LinkPreview","create","name","group","atom","addAttributes","href","default","title","description","image","parseHTML","tag","renderHTML","node","style","attrs","src","width","height","target","rel","addCommands","setLinkPreview","metadata","commands","state","insertContent","type","images"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAWrD,OAAO,MAAMC,cAAcF,KAAKG,MAAM,CAAC;IACrCC,MAAM;IACNC,OAAO;IACPC,MAAM;IAENC;QACE,OAAO;YACLC,MAAM;gBACJC,SAAS;YACX;YACAC,OAAO;gBAAED,SAAS;YAAG;YACrBE,aAAa;gBACXF,SAAS;YACX;YACAG,OAAO;gBACLH,SAAS;YACX;QACF;IACF;IAEAI;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IAEAC,YAAW,EAAEC,IAAI,EAAE;QACjB,OAAO;YACL;YACAf,gBAAgB;gBACd,qBAAqB;gBACrBgB,OACE;YACJ;YACAD,KAAKE,KAAK,CAACN,KAAK,GACZ;gBACE;gBACA;oBACEO,KAAKH,KAAKE,KAAK,CAACN,KAAK;oBACrBQ,OAAO;oBACPC,QAAQ;oBACRJ,OAAO;gBACT;aACD,GACD;YACJ;gBACE;gBACA,CAAC;gBACD;oBAAC;oBAAU,CAAC;oBAAGD,KAAKE,KAAK,CAACR,KAAK;iBAAC;gBAChC;oBACE;oBACA;wBAAEO,OAAO;oBAA2C;oBACpDD,KAAKE,KAAK,CAACP,WAAW;iBACvB;aACF;YACD;gBACE;gBACA;oBACEH,MAAMQ,KAAKE,KAAK,CAACV,IAAI;oBACrBc,QAAQ;oBACRC,KAAK;oBACLN,OACE;gBACJ;gBACA;aACD;SACF;IACH;IACAO;QACE,OAAO;YACLC,gBACE,CAACN,KAAKO,WACN,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAE;oBAClB,OAAOD,SAASE,aAAa,CAAC;wBAC5BC,MAAM;wBACNZ,OAAO;4BACLV,MAAMW;4BACNT,OAAOgB,UAAUhB;4BACjBC,aAAae,UAAUf;4BACvBC,OAAOc,UAAUK,QAAQ,CAAC,EAAE,IAAI;wBAClC;oBACF;gBACF;QACJ;IACF;AACF,GAAG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type LinkPreviewEditorPanelProps = {
|
|
3
|
+
initialSrc?: string;
|
|
4
|
+
initialOpenInNewTab?: boolean;
|
|
5
|
+
onSetLink: (src: string) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const useLinkEditorState: ({ initialSrc, onSetLink, }: LinkPreviewEditorPanelProps) => {
|
|
8
|
+
url: string;
|
|
9
|
+
setUrl: React.Dispatch<React.SetStateAction<string>>;
|
|
10
|
+
onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
11
|
+
handleSubmit: (e: React.FormEvent) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const LinkPreviewEditorPanel: ({ onSetLink, initialOpenInNewTab, initialSrc, }: LinkPreviewEditorPanelProps) => React.JSX.Element;
|
|
14
|
+
//# sourceMappingURL=LinkPreviewEditorPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkPreviewEditorPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAQrD,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,kBAAkB,+BAG5B,2BAA2B;;;sBAIlB,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC;sBAS1C,KAAK,CAAC,SAAS;CAetB,CAAC;AAEF,eAAO,MAAM,sBAAsB,oDAIhC,2BAA2B,sBAiC7B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useCallback, useState } from "react";
|
|
3
|
+
import { Link } from "lucide-react";
|
|
4
|
+
import { Icon } from "../../features/ui/Icon.js";
|
|
5
|
+
import { Surface } from "../../features/ui/Surface.js";
|
|
6
|
+
import i18next from "i18next";
|
|
7
|
+
import { Button } from "../../features/ui/Button/Button.js";
|
|
8
|
+
export const useLinkEditorState = ({ initialSrc, onSetLink })=>{
|
|
9
|
+
const [url, setUrl] = useState(initialSrc || "");
|
|
10
|
+
const onChange = useCallback((event)=>{
|
|
11
|
+
setUrl(event.target.value);
|
|
12
|
+
}, []);
|
|
13
|
+
// const isValidUrl = useMemo(() => /^(\S+):(\/\/)?\S+$/.test(url), [url]);
|
|
14
|
+
const handleSubmit = useCallback((e)=>{
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
// if (isValidUrl) {
|
|
17
|
+
onSetLink(url);
|
|
18
|
+
// }
|
|
19
|
+
}, [
|
|
20
|
+
url,
|
|
21
|
+
onSetLink
|
|
22
|
+
]);
|
|
23
|
+
return {
|
|
24
|
+
url,
|
|
25
|
+
setUrl,
|
|
26
|
+
onChange,
|
|
27
|
+
handleSubmit
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export const LinkPreviewEditorPanel = ({ onSetLink, initialOpenInNewTab, initialSrc })=>{
|
|
31
|
+
const state = useLinkEditorState({
|
|
32
|
+
onSetLink,
|
|
33
|
+
initialOpenInNewTab,
|
|
34
|
+
initialSrc
|
|
35
|
+
});
|
|
36
|
+
return /*#__PURE__*/ _jsx(Surface, {
|
|
37
|
+
className: "p-2",
|
|
38
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
39
|
+
className: "flex items-center gap-2",
|
|
40
|
+
children: [
|
|
41
|
+
/*#__PURE__*/ _jsxs("label", {
|
|
42
|
+
className: "flex items-center gap-2 p-2 rounded-lg bg-neutral-100 dark:bg-neutral-900 cursor-text",
|
|
43
|
+
children: [
|
|
44
|
+
/*#__PURE__*/ _jsx(Icon, {
|
|
45
|
+
icon: Link,
|
|
46
|
+
className: "flex-none text-black dark:text-white"
|
|
47
|
+
}),
|
|
48
|
+
/*#__PURE__*/ _jsx("textarea", {
|
|
49
|
+
className: "flex-1 bg-transparent outline-none min-w-[16rem] min-h-[200px] text-black text-sm dark:text-white",
|
|
50
|
+
placeholder: i18next.t("enterEmbedCode") || "Enter Embed Code",
|
|
51
|
+
value: state.url,
|
|
52
|
+
onChange: state.onChange
|
|
53
|
+
})
|
|
54
|
+
]
|
|
55
|
+
}),
|
|
56
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
57
|
+
variant: "primary",
|
|
58
|
+
buttonSize: "small",
|
|
59
|
+
type: "button",
|
|
60
|
+
onClick: (e)=>{
|
|
61
|
+
state.handleSubmit(e);
|
|
62
|
+
},
|
|
63
|
+
children: "Set Link"
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=LinkPreviewEditorPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport { Link } from \"lucide-react\";\n\nimport { Icon } from \"../../features/ui/Icon.js\";\nimport { Surface } from \"../../features/ui/Surface.js\";\nimport i18next from \"i18next\";\nimport { Button } from \"../../features/ui/Button/Button.js\";\n\nexport type LinkPreviewEditorPanelProps = {\n initialSrc?: string;\n initialOpenInNewTab?: boolean;\n onSetLink: (src: string) => void;\n};\n\nexport const useLinkEditorState = ({\n initialSrc,\n onSetLink,\n}: LinkPreviewEditorPanelProps) => {\n const [url, setUrl] = useState(initialSrc || \"\");\n\n const onChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n setUrl(event.target.value);\n },\n []\n );\n\n // const isValidUrl = useMemo(() => /^(\\S+):(\\/\\/)?\\S+$/.test(url), [url]);\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n // if (isValidUrl) {\n onSetLink(url);\n // }\n },\n [url, onSetLink]\n );\n\n return {\n url,\n setUrl,\n onChange,\n handleSubmit,\n };\n};\n\nexport const LinkPreviewEditorPanel = ({\n onSetLink,\n initialOpenInNewTab,\n initialSrc,\n}: LinkPreviewEditorPanelProps) => {\n const state = useLinkEditorState({\n onSetLink,\n initialOpenInNewTab,\n initialSrc,\n });\n\n return (\n <Surface className=\"p-2\">\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-2 p-2 rounded-lg bg-neutral-100 dark:bg-neutral-900 cursor-text\">\n <Icon icon={Link} className=\"flex-none text-black dark:text-white\" />\n <textarea\n className=\"flex-1 bg-transparent outline-none min-w-[16rem] min-h-[200px] text-black text-sm dark:text-white\"\n placeholder={i18next.t(\"enterEmbedCode\") || \"Enter Embed Code\"}\n value={state.url}\n onChange={state.onChange}\n />\n </label>\n <Button\n variant=\"primary\"\n buttonSize=\"small\"\n type=\"button\"\n onClick={(e) => {\n state.handleSubmit(e);\n }}\n // disabled={!state.isValidUrl}\n >\n Set Link\n </Button>\n </div>\n </Surface>\n );\n};\n"],"names":["React","useCallback","useState","Link","Icon","Surface","i18next","Button","useLinkEditorState","initialSrc","onSetLink","url","setUrl","onChange","event","target","value","handleSubmit","e","preventDefault","LinkPreviewEditorPanel","initialOpenInNewTab","state","className","div","label","icon","textarea","placeholder","t","variant","buttonSize","type","onClick"],"mappings":";AAAA,OAAOA,SAASC,WAAW,EAAEC,QAAQ,QAAQ,QAAQ;AACrD,SAASC,IAAI,QAAQ,eAAe;AAEpC,SAASC,IAAI,QAAQ,4BAA4B;AACjD,SAASC,OAAO,QAAQ,+BAA+B;AACvD,OAAOC,aAAa,UAAU;AAC9B,SAASC,MAAM,QAAQ,qCAAqC;AAQ5D,OAAO,MAAMC,qBAAqB,CAAC,EACjCC,UAAU,EACVC,SAAS,EACmB;IAC5B,MAAM,CAACC,KAAKC,OAAO,GAAGV,SAASO,cAAc;IAE7C,MAAMI,WAAWZ,YACf,CAACa;QACCF,OAAOE,MAAMC,MAAM,CAACC,KAAK;IAC3B,GACA,EAAE;IAGJ,2EAA2E;IAE3E,MAAMC,eAAehB,YACnB,CAACiB;QACCA,EAAEC,cAAc;QAChB,oBAAoB;QACpBT,UAAUC;IACV,IAAI;IACN,GACA;QAACA;QAAKD;KAAU;IAGlB,OAAO;QACLC;QACAC;QACAC;QACAI;IACF;AACF,EAAE;AAEF,OAAO,MAAMG,yBAAyB,CAAC,EACrCV,SAAS,EACTW,mBAAmB,EACnBZ,UAAU,EACkB;IAC5B,MAAMa,QAAQd,mBAAmB;QAC/BE;QACAW;QACAZ;IACF;IAEA,qBACE,KAACJ;QAAQkB,WAAU;kBACjB,cAAA,MAACC;YAAID,WAAU;;8BACb,MAACE;oBAAMF,WAAU;;sCACf,KAACnB;4BAAKsB,MAAMvB;4BAAMoB,WAAU;;sCAC5B,KAACI;4BACCJ,WAAU;4BACVK,aAAatB,QAAQuB,CAAC,CAAC,qBAAqB;4BAC5Cb,OAAOM,MAAMX,GAAG;4BAChBE,UAAUS,MAAMT,QAAQ;;;;8BAG5B,KAACN;oBACCuB,SAAQ;oBACRC,YAAW;oBACXC,MAAK;oBACLC,SAAS,CAACf;wBACRI,MAAML,YAAY,CAACC;oBACrB;8BAED;;;;;AAMT,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/index.ts"],"sourcesContent":["export * from \"./LinkPreview.js\";\n"],"names":[],"mappings":"AAAA,cAAc,mBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/menus/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/menus/index.ts"],"sourcesContent":["export * from \"./linkPreviewMenu.js\";\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MenuProps } from "../../../features/menus/types.js";
|
|
3
|
+
import { FetchSiteMetadataType } from "src/fields/TiptapEditor/features/BlockEditor/types.jsx";
|
|
4
|
+
export declare const ILinkPreviewMenu: ({ editor, appendTo, fetchSiteMetadata, }: MenuProps & {
|
|
5
|
+
fetchSiteMetadata: FetchSiteMetadataType;
|
|
6
|
+
}) => React.JSX.Element;
|
|
7
|
+
export default ILinkPreviewMenu;
|
|
8
|
+
//# sourceMappingURL=linkPreviewMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkPreviewMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAI7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAE/F,eAAO,MAAM,gBAAgB,6CAI1B,SAAS,GAAG;IAAE,iBAAiB,EAAE,qBAAqB,CAAA;CAAE,sBAmC1D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react";
|
|
3
|
+
import React, { useCallback } from "react";
|
|
4
|
+
import { Toolbar } from "../../../features/ui/Toolbar.js";
|
|
5
|
+
import { LinkPreviewEditorPanel } from "../LinkPreviewEditorPanel.js";
|
|
6
|
+
export const ILinkPreviewMenu = ({ editor, appendTo, fetchSiteMetadata })=>{
|
|
7
|
+
const shouldShow = useCallback(()=>{
|
|
8
|
+
const isLinkPreview = editor.isActive("linkPreview");
|
|
9
|
+
return isLinkPreview;
|
|
10
|
+
}, [
|
|
11
|
+
editor
|
|
12
|
+
]);
|
|
13
|
+
const onSetLink = useCallback(async (src)=>{
|
|
14
|
+
if (fetchSiteMetadata) {
|
|
15
|
+
const metadata = await fetchSiteMetadata(src);
|
|
16
|
+
console.log(src, metadata);
|
|
17
|
+
editor.chain().focus().setLinkPreview(src, metadata).run();
|
|
18
|
+
}
|
|
19
|
+
}, [
|
|
20
|
+
editor
|
|
21
|
+
]);
|
|
22
|
+
return /*#__PURE__*/ _jsx(BaseBubbleMenu, {
|
|
23
|
+
editor: editor,
|
|
24
|
+
pluginKey: "linkPreview",
|
|
25
|
+
shouldShow: shouldShow,
|
|
26
|
+
tippyOptions: {
|
|
27
|
+
popperOptions: {
|
|
28
|
+
placement: "top-start"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
updateDelay: 100,
|
|
32
|
+
children: /*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
33
|
+
type: "button",
|
|
34
|
+
children: /*#__PURE__*/ _jsx(LinkPreviewEditorPanel, {
|
|
35
|
+
onSetLink: onSetLink,
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
initialSrcLink: editor?.getAttributes("linkPreview")?.editorValue ?? ""
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
export default ILinkPreviewMenu;
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=linkPreviewMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.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 { MenuProps } from \"../../../features/menus/types.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport i18next from \"i18next\";\nimport { LinkPreviewEditorPanel } from \"../LinkPreviewEditorPanel.js\";\nimport { FetchSiteMetadataType } from \"src/fields/TiptapEditor/features/BlockEditor/types.jsx\";\n\nexport const ILinkPreviewMenu = ({\n editor,\n appendTo,\n fetchSiteMetadata,\n}: MenuProps & { fetchSiteMetadata: FetchSiteMetadataType }) => {\n const shouldShow = useCallback(() => {\n const isLinkPreview = editor.isActive(\"linkPreview\");\n return isLinkPreview;\n }, [editor]);\n\n const onSetLink = useCallback(\n async (src: string) => {\n if (fetchSiteMetadata) {\n const metadata = await fetchSiteMetadata(src);\n console.log(src, metadata);\n editor.chain().focus().setLinkPreview(src, metadata).run();\n }\n },\n [editor]\n );\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey=\"linkPreview\"\n shouldShow={shouldShow}\n tippyOptions={{ popperOptions: { placement: \"top-start\" } }}\n updateDelay={100}\n >\n <Toolbar.Button type=\"button\">\n <LinkPreviewEditorPanel\n onSetLink={onSetLink}\n // @ts-ignore\n initialSrcLink={\n editor?.getAttributes(\"linkPreview\")?.editorValue ?? \"\"\n }\n />\n </Toolbar.Button>\n </BaseBubbleMenu>\n );\n};\n\nexport default ILinkPreviewMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","React","useCallback","Toolbar","LinkPreviewEditorPanel","ILinkPreviewMenu","editor","appendTo","fetchSiteMetadata","shouldShow","isLinkPreview","isActive","onSetLink","src","metadata","console","log","chain","focus","setLinkPreview","run","pluginKey","tippyOptions","popperOptions","placement","updateDelay","Button","type","initialSrcLink","getAttributes","editorValue"],"mappings":";AAAA,SAASA,cAAcC,cAAc,QAAQ,gBAAgB;AAC7D,OAAOC,SAASC,WAAW,QAAQ,QAAQ;AAK3C,SAASC,OAAO,QAAQ,kCAAkC;AAE1D,SAASC,sBAAsB,QAAQ,+BAA+B;AAGtE,OAAO,MAAMC,mBAAmB,CAAC,EAC/BC,MAAM,EACNC,QAAQ,EACRC,iBAAiB,EACwC;IACzD,MAAMC,aAAaP,YAAY;QAC7B,MAAMQ,gBAAgBJ,OAAOK,QAAQ,CAAC;QACtC,OAAOD;IACT,GAAG;QAACJ;KAAO;IAEX,MAAMM,YAAYV,YAChB,OAAOW;QACL,IAAIL,mBAAmB;YACrB,MAAMM,WAAW,MAAMN,kBAAkBK;YACzCE,QAAQC,GAAG,CAACH,KAAKC;YACjBR,OAAOW,KAAK,GAAGC,KAAK,GAAGC,cAAc,CAACN,KAAKC,UAAUM,GAAG;QAC1D;IACF,GACA;QAACd;KAAO;IAEV,qBACE,KAACN;QACCM,QAAQA;QACRe,WAAU;QACVZ,YAAYA;QACZa,cAAc;YAAEC,eAAe;gBAAEC,WAAW;YAAY;QAAE;QAC1DC,aAAa;kBAEb,cAAA,KAACtB,QAAQuB,MAAM;YAACC,MAAK;sBACnB,cAAA,KAACvB;gBACCQ,WAAWA;gBACX,aAAa;gBACbgB,gBACEtB,QAAQuB,cAAc,gBAAgBC,eAAe;;;;AAMjE,EAAE;AAEF,eAAezB,iBAAiB"}
|
|
@@ -125,16 +125,16 @@ export const GROUPS = [
|
|
|
125
125
|
title: "Embed",
|
|
126
126
|
commands: [
|
|
127
127
|
{
|
|
128
|
-
name: "
|
|
129
|
-
label: i18next.t("
|
|
128
|
+
name: "linkPreview",
|
|
129
|
+
label: i18next.t("embed") || "Embed Link",
|
|
130
130
|
description: i18next.t("iframeDesc") || "Insert an Embed link",
|
|
131
131
|
icon: Link,
|
|
132
132
|
aliases: [
|
|
133
|
-
"
|
|
133
|
+
"linkPreview"
|
|
134
134
|
],
|
|
135
|
-
shouldBeHidden: (editor)=>editor.isActive("
|
|
135
|
+
shouldBeHidden: (editor)=>editor.isActive("linkPreview"),
|
|
136
136
|
action: (editor)=>{
|
|
137
|
-
editor.chain().focus().
|
|
137
|
+
editor.chain().focus().setLinkPreview().run();
|
|
138
138
|
}
|
|
139
139
|
},
|
|
140
140
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/SlashCommand/groups.ts"],"sourcesContent":["import {\n Facebook,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Instagram,\n Link,\n List,\n ListOrdered,\n Minus,\n Music,\n Quote,\n Twitter,\n Video,\n Youtube,\n} from \"lucide-react\";\nimport { Group } from \"./types.js\";\nimport i18next from \"i18next\";\n\nexport const GROUPS: Group[] = [\n {\n name: \"format\",\n title: i18next.t(\"format\") || \"Format\",\n commands: [\n {\n name: \"heading1\",\n label: i18next.t(\"heading1\") || \"Heading 1\",\n description: i18next.t(\"heading1Desc\") || \"High priority section title\",\n icon: Heading1,\n aliases: [\"h1\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"heading2\",\n label: i18next.t(\"heading2\") || \"Heading 2\",\n description:\n i18next.t(\"heading2Desc\") || \"Medium priority section title\",\n icon: Heading2,\n aliases: [\"h2\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 2 }).run();\n },\n },\n {\n name: \"heading3\",\n label: i18next.t(\"heading3\") || \"Heading 3\",\n description: i18next.t(\"heading3Desc\") || \"Low priority section title\",\n icon: Heading3,\n aliases: [\"h3\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 3 }).run();\n },\n },\n // {\n // name: \"bulletList\",\n // label: i18next.t(\"bulletList\") || 'Bullet List',\n // description:i18next.t(\"bulletListDesc\") || \"Unordered list of items\",\n // icon: List,\n // aliases: [\"ul\"],\n // action: (editor) => {\n // editor.chain().focus().toggleBulletList().run();\n // },\n // },\n // {\n // name: \"numberedList\",\n // label: i18next.t(\"numberedList\") || 'Numbered List',\n // description:i18next.t(\"numberedListDesc\") || \"Ordered list of items\",\n // icon: ListOrdered,\n // aliases: [\"ol\"],\n // action: (editor) => {\n // editor.chain().focus().toggleOrderedList().run();\n // },\n // },\n\n {\n name: \"blockquote\",\n label: i18next.t(\"blockquote\") || \"Blockquote\",\n description: i18next.t(\"blockquoteDesc\") || \"Element for quoting\",\n icon: Quote,\n action: (editor) => {\n editor.chain().focus().setBlockquote().run();\n },\n },\n ],\n },\n {\n name: \"insert\",\n title: \"Insert\",\n commands: [\n {\n name: \"image\",\n label: i18next.t(\"image\") || \"Image\",\n description: i18next.t(\"imageDesc\") || \"Insert an image\",\n icon: Image,\n aliases: [\"img\"],\n action: (editor) => {\n editor.chain().focus().setImageUpload(\"image\").run();\n },\n },\n {\n name: \"video\",\n label: i18next.t(\"video\") || \"Video\",\n description: i18next.t(\"videoDesc\") || \"Insert a video\",\n icon: Video,\n aliases: [\"video\"],\n action: (editor) => {\n editor.chain().focus().setImageUpload(\"video\").run();\n },\n },\n\n {\n name: \"horizontalRule\",\n label: i18next.t(\"horizontalRule\") || \"HorizontalRule\",\n description:\n i18next.t(\"horizontalRuleDesc\") || \"Insert a horizontal divider\",\n icon: Minus,\n aliases: [\"hr\"],\n action: (editor) => {\n editor.chain().focus().setHorizontalRule().run();\n },\n },\n ],\n },\n {\n name: \"embed\",\n title: \"Embed\",\n commands: [\n {\n name: \"iframe\",\n label: i18next.t(\"iframe\") || \"Embed Link\",\n description: i18next.t(\"iframeDesc\") || \"Insert an Embed link\",\n icon: Link,\n aliases: [\"iframe\"],\n shouldBeHidden: (editor) => editor.isActive(\"iframe\"),\n action: (editor) => {\n editor.chain().focus().insertIframe().run();\n },\n },\n {\n name: \"twitter\",\n label: i18next.t(\"twitter\") || \"Twitter\",\n description: i18next.t(\"twitterDesc\") || \"Insert a Twitter embed\",\n icon: Twitter,\n aliases: [\"x\", \"twitter\"],\n shouldBeHidden: (editor) => editor.isActive(\"twitter\"),\n action: (editor) => {\n editor.chain().focus().insertTwitter().run();\n },\n },\n {\n name: \"facebook\",\n label: i18next.t(\"facebook\") || \"Facebook\",\n description: i18next.t(\"facebookDesc\") || \"Insert a Facebook embed\",\n icon: Facebook,\n aliases: [\"meta\", \"facebook\"],\n shouldBeHidden: (editor) => editor.isActive(\"facebook\"),\n action: (editor) => {\n editor.chain().focus().insertFacebook().run();\n },\n },\n {\n name: \"instagram\",\n label: i18next.t(\"instagram\") || \"Instagram\",\n description: i18next.t(\"instagramDesc\") || \"Insert a Instagram embed\",\n icon: Instagram,\n aliases: [\"instagram\"],\n shouldBeHidden: (editor) => editor.isActive(\"instagram\"),\n action: (editor) => {\n editor.chain().focus().insertInstagram().run();\n },\n },\n {\n name: \"youtube\",\n label: i18next.t(\"youtube\") || \"Youtube\",\n description: i18next.t(\"youtubeDesc\") || \"Insert a Youtube embed\",\n icon: Youtube,\n aliases: [\"youtube\"],\n shouldBeHidden: (editor) => editor.isActive(\"youtube\"),\n action: (editor) => {\n editor.chain().focus().insertYoutube().run();\n },\n },\n\n {\n name: \"tiktok\",\n label: i18next.t(\"tiktok\") || \"Tiktok\",\n description: i18next.t(\"tiktokDesc\") || \"Insert a Tiktok embed\",\n icon: Music,\n aliases: [\"tiktok\"],\n shouldBeHidden: (editor) => editor.isActive(\"tiktok\"),\n action: (editor) => {\n editor.chain().focus().insertTiktok().run();\n },\n },\n ],\n },\n];\n\nexport default GROUPS;\n"],"names":["Facebook","Heading1","Heading2","Heading3","Image","Instagram","Link","Minus","Music","Quote","Twitter","Video","Youtube","i18next","GROUPS","name","title","t","commands","label","description","icon","aliases","action","editor","chain","focus","setHeading","level","run","setBlockquote","setImageUpload","setHorizontalRule","shouldBeHidden","isActive","insertIframe","insertTwitter","insertFacebook","insertInstagram","insertYoutube","insertTiktok"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/SlashCommand/groups.ts"],"sourcesContent":["import {\n Facebook,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Instagram,\n Link,\n List,\n ListOrdered,\n Minus,\n Music,\n Quote,\n Twitter,\n Video,\n Youtube,\n} from \"lucide-react\";\nimport { Group } from \"./types.js\";\nimport i18next from \"i18next\";\n\nexport const GROUPS: Group[] = [\n {\n name: \"format\",\n title: i18next.t(\"format\") || \"Format\",\n commands: [\n {\n name: \"heading1\",\n label: i18next.t(\"heading1\") || \"Heading 1\",\n description: i18next.t(\"heading1Desc\") || \"High priority section title\",\n icon: Heading1,\n aliases: [\"h1\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"heading2\",\n label: i18next.t(\"heading2\") || \"Heading 2\",\n description:\n i18next.t(\"heading2Desc\") || \"Medium priority section title\",\n icon: Heading2,\n aliases: [\"h2\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 2 }).run();\n },\n },\n {\n name: \"heading3\",\n label: i18next.t(\"heading3\") || \"Heading 3\",\n description: i18next.t(\"heading3Desc\") || \"Low priority section title\",\n icon: Heading3,\n aliases: [\"h3\"],\n action: (editor) => {\n editor.chain().focus().setHeading({ level: 3 }).run();\n },\n },\n // {\n // name: \"bulletList\",\n // label: i18next.t(\"bulletList\") || 'Bullet List',\n // description:i18next.t(\"bulletListDesc\") || \"Unordered list of items\",\n // icon: List,\n // aliases: [\"ul\"],\n // action: (editor) => {\n // editor.chain().focus().toggleBulletList().run();\n // },\n // },\n // {\n // name: \"numberedList\",\n // label: i18next.t(\"numberedList\") || 'Numbered List',\n // description:i18next.t(\"numberedListDesc\") || \"Ordered list of items\",\n // icon: ListOrdered,\n // aliases: [\"ol\"],\n // action: (editor) => {\n // editor.chain().focus().toggleOrderedList().run();\n // },\n // },\n\n {\n name: \"blockquote\",\n label: i18next.t(\"blockquote\") || \"Blockquote\",\n description: i18next.t(\"blockquoteDesc\") || \"Element for quoting\",\n icon: Quote,\n action: (editor) => {\n editor.chain().focus().setBlockquote().run();\n },\n },\n ],\n },\n {\n name: \"insert\",\n title: \"Insert\",\n commands: [\n {\n name: \"image\",\n label: i18next.t(\"image\") || \"Image\",\n description: i18next.t(\"imageDesc\") || \"Insert an image\",\n icon: Image,\n aliases: [\"img\"],\n action: (editor) => {\n editor.chain().focus().setImageUpload(\"image\").run();\n },\n },\n {\n name: \"video\",\n label: i18next.t(\"video\") || \"Video\",\n description: i18next.t(\"videoDesc\") || \"Insert a video\",\n icon: Video,\n aliases: [\"video\"],\n action: (editor) => {\n editor.chain().focus().setImageUpload(\"video\").run();\n },\n },\n\n {\n name: \"horizontalRule\",\n label: i18next.t(\"horizontalRule\") || \"HorizontalRule\",\n description:\n i18next.t(\"horizontalRuleDesc\") || \"Insert a horizontal divider\",\n icon: Minus,\n aliases: [\"hr\"],\n action: (editor) => {\n editor.chain().focus().setHorizontalRule().run();\n },\n },\n ],\n },\n {\n name: \"embed\",\n title: \"Embed\",\n commands: [\n {\n name: \"linkPreview\",\n label: i18next.t(\"embed\") || \"Embed Link\",\n description: i18next.t(\"iframeDesc\") || \"Insert an Embed link\",\n icon: Link,\n aliases: [\"linkPreview\"],\n shouldBeHidden: (editor) => editor.isActive(\"linkPreview\"),\n action: (editor) => {\n editor.chain().focus().setLinkPreview().run();\n },\n },\n {\n name: \"twitter\",\n label: i18next.t(\"twitter\") || \"Twitter\",\n description: i18next.t(\"twitterDesc\") || \"Insert a Twitter embed\",\n icon: Twitter,\n aliases: [\"x\", \"twitter\"],\n shouldBeHidden: (editor) => editor.isActive(\"twitter\"),\n action: (editor) => {\n editor.chain().focus().insertTwitter().run();\n },\n },\n {\n name: \"facebook\",\n label: i18next.t(\"facebook\") || \"Facebook\",\n description: i18next.t(\"facebookDesc\") || \"Insert a Facebook embed\",\n icon: Facebook,\n aliases: [\"meta\", \"facebook\"],\n shouldBeHidden: (editor) => editor.isActive(\"facebook\"),\n action: (editor) => {\n editor.chain().focus().insertFacebook().run();\n },\n },\n {\n name: \"instagram\",\n label: i18next.t(\"instagram\") || \"Instagram\",\n description: i18next.t(\"instagramDesc\") || \"Insert a Instagram embed\",\n icon: Instagram,\n aliases: [\"instagram\"],\n shouldBeHidden: (editor) => editor.isActive(\"instagram\"),\n action: (editor) => {\n editor.chain().focus().insertInstagram().run();\n },\n },\n {\n name: \"youtube\",\n label: i18next.t(\"youtube\") || \"Youtube\",\n description: i18next.t(\"youtubeDesc\") || \"Insert a Youtube embed\",\n icon: Youtube,\n aliases: [\"youtube\"],\n shouldBeHidden: (editor) => editor.isActive(\"youtube\"),\n action: (editor) => {\n editor.chain().focus().insertYoutube().run();\n },\n },\n\n {\n name: \"tiktok\",\n label: i18next.t(\"tiktok\") || \"Tiktok\",\n description: i18next.t(\"tiktokDesc\") || \"Insert a Tiktok embed\",\n icon: Music,\n aliases: [\"tiktok\"],\n shouldBeHidden: (editor) => editor.isActive(\"tiktok\"),\n action: (editor) => {\n editor.chain().focus().insertTiktok().run();\n },\n },\n ],\n },\n];\n\nexport default GROUPS;\n"],"names":["Facebook","Heading1","Heading2","Heading3","Image","Instagram","Link","Minus","Music","Quote","Twitter","Video","Youtube","i18next","GROUPS","name","title","t","commands","label","description","icon","aliases","action","editor","chain","focus","setHeading","level","run","setBlockquote","setImageUpload","setHorizontalRule","shouldBeHidden","isActive","setLinkPreview","insertTwitter","insertFacebook","insertInstagram","insertYoutube","insertTiktok"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { openAssetHQType } from "../types.js";
|
|
2
2
|
interface ExtensionKitProps {
|
|
3
3
|
openAssetHQHandler: openAssetHQType;
|
|
4
|
-
dir?:
|
|
4
|
+
dir?: "ltr" | "rtl";
|
|
5
5
|
}
|
|
6
|
-
export declare const ExtensionKit: ({ dir, openAssetHQHandler }: ExtensionKitProps) => (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-subscript").SubscriptExtensionOptions, any>)[];
|
|
6
|
+
export declare const ExtensionKit: ({ dir, openAssetHQHandler, }: ExtensionKitProps) => (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-subscript").SubscriptExtensionOptions, any>)[];
|
|
7
7
|
export default ExtensionKit;
|
|
8
8
|
//# sourceMappingURL=extension-kit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-kit.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/extensions/extension-kit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-kit.d.ts","sourceRoot":"","sources":["../../../../../src/fields/TiptapEditor/extensions/extension-kit.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,UAAU,iBAAiB;IACzB,kBAAkB,EAAE,eAAe,CAAC;IACpC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,iCAGtB,iBAAiB,+LAsHnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { AICommand, AudioBlock, BlockquoteFigure, CharacterCount, Document, Dropcursor, Facebook, Figcaption, FileHandler, Focus, Heading, HorizontalRule, ImageBlock, InsideLinks, Instagram, Link, Linkedin, Placeholder, Selection, SlashCommand, StarterKit, Subscript, Superscript, TaskItem, TaskList, TextAlign, TextStyle, Tiktok, TrailingNode, Twitter, Typography, Underline, VideoBlock, Youtube, Iframe } from "./index.js";
|
|
1
|
+
import { AICommand, AudioBlock, BlockquoteFigure, CharacterCount, Document, Dropcursor, Facebook, Figcaption, FileHandler, Focus, Heading, HorizontalRule, LinkPreview, ImageBlock, InsideLinks, Instagram, Link, Linkedin, Placeholder, Selection, SlashCommand, StarterKit, Subscript, Superscript, TaskItem, TaskList, TextAlign, TextStyle, Tiktok, TrailingNode, Twitter, Typography, Underline, VideoBlock, Youtube, Iframe } from "./index.js";
|
|
2
2
|
import { ImageUpload } from "./ImageUpload/ImageUpload.js";
|
|
3
3
|
import History from "@tiptap/extension-history";
|
|
4
4
|
import { Markdown } from "tiptap-markdown";
|
|
5
5
|
import API from "../lib/api.js";
|
|
6
6
|
import i18next from "i18next";
|
|
7
|
-
export const ExtensionKit = ({ dir =
|
|
7
|
+
export const ExtensionKit = ({ dir = "ltr", openAssetHQHandler })=>[
|
|
8
8
|
Markdown,
|
|
9
9
|
Document,
|
|
10
10
|
TaskList,
|
|
@@ -124,7 +124,8 @@ export const ExtensionKit = ({ dir = 'ltr', openAssetHQHandler })=>[
|
|
|
124
124
|
Youtube,
|
|
125
125
|
InsideLinks,
|
|
126
126
|
Iframe,
|
|
127
|
-
AICommand
|
|
127
|
+
AICommand,
|
|
128
|
+
LinkPreview
|
|
128
129
|
];
|
|
129
130
|
export default ExtensionKit;
|
|
130
131
|
|