pillardash-ui-react 0.1.138 → 0.1.140
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/cjs/components/Form/TextEditor/ImagePopover.js +2 -0
- package/dist/cjs/components/Form/TextEditor/ImagePopover.js.map +1 -0
- package/dist/cjs/components/Form/TextEditor/LinkPopover.js +2 -0
- package/dist/cjs/components/Form/TextEditor/LinkPopover.js.map +1 -0
- package/dist/cjs/components/Form/TextEditor/TextEditor.js +1 -1
- package/dist/cjs/components/Form/TextEditor/TextEditor.js.map +1 -1
- package/dist/cjs/components/Form/TextEditor/ToolbarGroups.js +2 -0
- package/dist/cjs/components/Form/TextEditor/ToolbarGroups.js.map +1 -0
- package/dist/cjs/components/Form/TextEditor/extensions.js +2 -0
- package/dist/cjs/components/Form/TextEditor/extensions.js.map +1 -0
- package/dist/cjs/components/Form/TextEditor/toolbar.js +2 -0
- package/dist/cjs/components/Form/TextEditor/toolbar.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/core/dist/index.js +1 -1
- package/dist/cjs/node_modules/@tiptap/core/dist/index.js.map +1 -1
- package/dist/cjs/node_modules/@tiptap/extension-list/dist/index.js +1 -1
- package/dist/cjs/node_modules/@tiptap/extension-list/dist/index.js.map +1 -1
- package/dist/cjs/node_modules/@tiptap/extension-table/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-table/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-cell/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-cell/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-header/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-header/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-row/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-table-row/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-task-item/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-task-item/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-task-list/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-task-list/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/@tiptap/extension-text-align/dist/index.js +2 -0
- package/dist/cjs/node_modules/@tiptap/extension-text-align/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-keymap/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-keymap/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-model/dist/index.js +1 -1
- package/dist/cjs/node_modules/prosemirror-model/dist/index.js.map +1 -1
- package/dist/cjs/node_modules/prosemirror-tables/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-tables/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/prosemirror-transform/dist/index.js +1 -1
- package/dist/cjs/node_modules/prosemirror-transform/dist/index.js.map +1 -1
- package/dist/cjs/node_modules/prosemirror-view/dist/index.js +2 -0
- package/dist/cjs/node_modules/prosemirror-view/dist/index.js.map +1 -0
- package/dist/cjs/node_modules/w3c-keyname/index.js +2 -0
- package/dist/cjs/node_modules/w3c-keyname/index.js.map +1 -0
- package/dist/esm/components/Form/TextEditor/ImagePopover.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/ImagePopover.mjs.map +1 -0
- package/dist/esm/components/Form/TextEditor/LinkPopover.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/LinkPopover.mjs.map +1 -0
- package/dist/esm/components/Form/TextEditor/TextEditor.mjs +1 -1
- package/dist/esm/components/Form/TextEditor/TextEditor.mjs.map +1 -1
- package/dist/esm/components/Form/TextEditor/ToolbarGroups.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/ToolbarGroups.mjs.map +1 -0
- package/dist/esm/components/Form/TextEditor/extensions.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/extensions.mjs.map +1 -0
- package/dist/esm/components/Form/TextEditor/toolbar.mjs +2 -0
- package/dist/esm/components/Form/TextEditor/toolbar.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/core/dist/index.mjs +1 -1
- package/dist/esm/node_modules/@tiptap/core/dist/index.mjs.map +1 -1
- package/dist/esm/node_modules/@tiptap/extension-list/dist/index.mjs +1 -1
- package/dist/esm/node_modules/@tiptap/extension-list/dist/index.mjs.map +1 -1
- package/dist/esm/node_modules/@tiptap/extension-table/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-table/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-table-cell/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-table-cell/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-table-header/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-table-header/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-table-row/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-table-row/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-task-item/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-task-item/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-task-list/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-task-list/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/@tiptap/extension-text-align/dist/index.mjs +2 -0
- package/dist/esm/node_modules/@tiptap/extension-text-align/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-keymap/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-keymap/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-model/dist/index.mjs +1 -1
- package/dist/esm/node_modules/prosemirror-model/dist/index.mjs.map +1 -1
- package/dist/esm/node_modules/prosemirror-tables/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-tables/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/prosemirror-transform/dist/index.mjs +1 -1
- package/dist/esm/node_modules/prosemirror-transform/dist/index.mjs.map +1 -1
- package/dist/esm/node_modules/prosemirror-view/dist/index.mjs +2 -0
- package/dist/esm/node_modules/prosemirror-view/dist/index.mjs.map +1 -0
- package/dist/esm/node_modules/w3c-keyname/index.mjs +2 -0
- package/dist/esm/node_modules/w3c-keyname/index.mjs.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/styles.css +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),t=require("react/jsx-runtime"),r=require("react"),n=require("lucide-react"),a=require("./toolbar.js");module.exports=function(s){var i=s.editor,l=s.onImageUpload,o=r.useState(!1),u=o[0],c=o[1],d=r.useState(""),m=d[0],f=d[1],b=r.useState(""),g=b[0],x=b[1],p=r.useState(!1),v=p[0],h=p[1],w=r.useRef(null);r.useEffect((function(){if(u){var e=function(e){w.current&&(w.current.contains(e.target)||c(!1))},t=function(e){"Escape"===e.key&&c(!1)};return window.addEventListener("mousedown",e),window.addEventListener("keydown",t),function(){window.removeEventListener("mousedown",e),window.removeEventListener("keydown",t)}}}),[u]);return t.jsxs("div",{className:"relative",ref:w,children:[t.jsx(a.ToolbarButton,{onClick:function(){return c((function(e){return!e}))},title:"Insert image",children:t.jsx(n.ImagePlus,{size:16})}),u&&t.jsxs("div",{className:"absolute left-1/2 z-10 mt-2 w-72 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 shadow-lg",children:[t.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"Image URL"}),t.jsx("input",{className:"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm",value:m,onChange:function(e){return f(e.target.value)},placeholder:"https://example.com/image.jpg"}),t.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"Alt text"}),t.jsx("input",{className:"mb-3 w-full rounded border border-gray-300 px-2 py-1 text-sm",value:g,onChange:function(e){return x(e.target.value)},placeholder:"Describe the image"}),t.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"Upload image"}),t.jsx("input",{className:"mb-3 block w-full text-sm text-gray-700 file:mr-3 file:rounded file:border-0 file:bg-gray-100 file:px-3 file:py-1 file:text-sm file:hover:bg-gray-200",type:"file",accept:"image/*",onChange:function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var r,n,a,s;return e.__generator(this,(function(e){switch(e.label){case 0:if(!(r=null===(s=t.target.files)||void 0===s?void 0:s[0]))return[2];if(!r.type.startsWith("image/"))return t.target.value="",[2];h(!0),e.label=1;case 1:return e.trys.push([1,,6,7]),n="",l?[4,l(r)]:[3,3];case 2:return a=e.sent(),n=a.url,[3,5];case 3:return[4,new Promise((function(e,t){var n=new FileReader;n.onload=function(){"string"==typeof n.result?e(n.result):t(new Error("Invalid file result"))},n.onerror=function(){var e;return t(null!==(e=n.error)&&void 0!==e?e:new Error("Failed to read file"))},n.readAsDataURL(r)}))];case 4:n=e.sent(),e.label=5;case 5:return i.chain().focus().setImage({src:n,alt:g.trim()||r.name}).run(),c(!1),f(""),x(""),[3,7];case 6:return h(!1),t.target.value="",[7];case 7:return[2]}}))}))},disabled:v}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx("button",{type:"button",className:"rounded bg-gray-100 px-3 py-1 text-sm hover:bg-gray-200",onClick:function(){return c(!1)},children:"Cancel"}),t.jsx("button",{type:"button",className:"ml-auto rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){var e=m.trim();if(e)try{var t=new URL(e.includes(":")?e:"https://".concat(e));if(!["http:","https:"].includes(t.protocol))return;i.chain().focus().setImage({src:t.toString(),alt:g.trim()||void 0}).run(),c(!1),f(""),x("")}catch(e){return}},disabled:v,children:v?"Uploading...":"Insert"})]})]})]})};
|
|
2
|
+
//# sourceMappingURL=ImagePopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImagePopover.js","sources":["../../../../../src/components/Form/TextEditor/ImagePopover.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport { ImagePlus } from \"lucide-react\";\n\nimport { ToolbarButton } from \"./toolbar\";\n\ninterface ImagePopoverProps {\n editor: Editor;\n onImageUpload?: (file: File) => Promise<{ url: string; assetId?: string }>;\n}\n\nconst ImagePopover: React.FC<ImagePopoverProps> = ({ editor, onImageUpload }) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [src, setSrc] = React.useState(\"\");\n const [alt, setAlt] = React.useState(\"\");\n const [isUploading, setIsUploading] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!popoverRef.current) return;\n if (!popoverRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n const onEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setIsOpen(false);\n };\n\n window.addEventListener(\"mousedown\", onPointerDown);\n window.addEventListener(\"keydown\", onEscape);\n return () => {\n window.removeEventListener(\"mousedown\", onPointerDown);\n window.removeEventListener(\"keydown\", onEscape);\n };\n }, [isOpen]);\n\n const applyImage = () => {\n const normalizedSrc = src.trim();\n if (!normalizedSrc) return;\n\n try {\n const parsedUrl = new URL(normalizedSrc.includes(\":\") ? normalizedSrc : `https://${normalizedSrc}`);\n if (![\"http:\", \"https:\"].includes(parsedUrl.protocol)) return;\n\n editor.chain().focus().setImage({ src: parsedUrl.toString(), alt: alt.trim() || undefined }).run();\n setIsOpen(false);\n setSrc(\"\");\n setAlt(\"\");\n } catch {\n return;\n }\n };\n\n const handleFileUpload = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) {\n return;\n }\n\n if (!file.type.startsWith(\"image/\")) {\n event.target.value = \"\";\n return;\n }\n\n setIsUploading(true);\n try {\n let imageSrc = \"\";\n\n if (onImageUpload) {\n const uploaded = await onImageUpload(file);\n imageSrc = uploaded.url;\n } else {\n imageSrc = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Invalid file result\"));\n }\n };\n reader.onerror = () => reject(reader.error ?? new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n }\n\n editor.chain().focus().setImage({ src: imageSrc, alt: alt.trim() || file.name }).run();\n setIsOpen(false);\n setSrc(\"\");\n setAlt(\"\");\n } finally {\n setIsUploading(false);\n event.target.value = \"\";\n }\n };\n\n return (\n <div className=\"relative\" ref={popoverRef}>\n <ToolbarButton\n onClick={() => setIsOpen((prev) => !prev)}\n title=\"Insert image\"\n >\n <ImagePlus size={16} />\n </ToolbarButton>\n\n {isOpen && (\n <div className=\"absolute left-1/2 z-10 mt-2 w-72 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 shadow-lg\">\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">Image URL</label>\n <input\n className=\"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm\"\n value={src}\n onChange={(e) => setSrc(e.target.value)}\n placeholder=\"https://example.com/image.jpg\"\n />\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">Alt text</label>\n <input\n className=\"mb-3 w-full rounded border border-gray-300 px-2 py-1 text-sm\"\n value={alt}\n onChange={(e) => setAlt(e.target.value)}\n placeholder=\"Describe the image\"\n />\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">Upload image</label>\n <input\n className=\"mb-3 block w-full text-sm text-gray-700 file:mr-3 file:rounded file:border-0 file:bg-gray-100 file:px-3 file:py-1 file:text-sm file:hover:bg-gray-200\"\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileUpload}\n disabled={isUploading}\n />\n <div className=\"flex gap-2\">\n <button type=\"button\" className=\"rounded bg-gray-100 px-3 py-1 text-sm hover:bg-gray-200\" onClick={() => setIsOpen(false)}>Cancel</button>\n <button type=\"button\" className=\"ml-auto rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50\" onClick={applyImage} disabled={isUploading}>{isUploading ? \"Uploading...\" : \"Insert\"}</button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ImagePopover;\n"],"names":["_a","editor","onImageUpload","_b","React","useState","isOpen","setIsOpen","_c","src","setSrc","_d","alt","setAlt","_e","isUploading","setIsUploading","popoverRef","useRef","useEffect","onPointerDown","event","current","contains","target","onEscape","key","window","addEventListener","removeEventListener","_jsxs","className","ref","children","_jsx","ToolbarButton","onClick","prev","title","ImagePlus","size","value","onChange","e","placeholder","type","accept","__awaiter","file","files","startsWith","imageSrc","uploaded","sent","url","Promise","resolve","reject","reader","FileReader","onload","result","Error","onerror","error","readAsDataURL","chain","focus","setImage","trim","name","run","disabled","normalizedSrc","parsedUrl","URL","includes","concat","protocol","toString","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("lucide-react"),r=require("./toolbar.js");module.exports=function(l){var o=l.editor,a=t.useState(!1),i=a[0],s=a[1],u=t.useRef(null),c=t.useState(""),d=c[0],x=c[1],b=t.useState("_blank"),m=b[0],v=b[1],p=t.useState("noopener"),f=p[0],h=p[1];t.useEffect((function(){if(i){var e=function(e){u.current&&(u.current.contains(e.target)||s(!1))},t=function(e){"Escape"===e.key&&s(!1)};return window.addEventListener("mousedown",e),window.addEventListener("keydown",t),function(){window.removeEventListener("mousedown",e),window.removeEventListener("keydown",t)}}}),[i]);return e.jsxs("div",{className:"relative",ref:u,children:[e.jsx(r.ToolbarButton,{onClick:function(){var e,t,n,r=o.getAttributes("link");x(null!==(e=null==r?void 0:r.href)&&void 0!==e?e:""),v(null!==(t=null==r?void 0:r.target)&&void 0!==t?t:"_blank"),h(null!==(n=null==r?void 0:r.rel)&&void 0!==n?n:"noopener"),s((function(e){return!e}))},active:o.isActive("link"),title:"Link",ariaPressed:o.isActive("link"),children:e.jsx(n.Link,{size:16})}),i&&e.jsxs("div",{className:"absolute left-1/2 z-10 mt-2 w-72 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 shadow-lg",children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"URL"}),e.jsx("input",{className:"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm",value:d,onChange:function(e){return x(e.target.value)},placeholder:"https://example.com"}),e.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"Target"}),e.jsxs("select",{className:"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm",value:m,onChange:function(e){return v(e.target.value)},children:[e.jsx("option",{value:"_blank",children:"New Tab"}),e.jsx("option",{value:"_self",children:"Same Window"})]}),e.jsx("label",{className:"mb-1 block text-xs font-medium text-gray-600",children:"Rel"}),e.jsx("input",{className:"mb-3 w-full rounded border border-gray-300 px-2 py-1 text-sm",value:f,onChange:function(e){return h(e.target.value)},placeholder:"noopener"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"button",className:"rounded bg-gray-100 px-3 py-1 text-sm hover:bg-gray-200",onClick:function(){return s(!1)},children:"Cancel"}),o.isActive("link")&&e.jsx("button",{type:"button",className:"rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200",onClick:function(){o.chain().focus().unsetLink().run(),s(!1)},children:"Unlink"}),e.jsx("button",{type:"button",className:"ml-auto rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700",onClick:function(){var e=d.trim();if(e)try{var t=new URL(e.includes(":")?e:"https://".concat(e));if(!["http:","https:","mailto:"].includes(t.protocol))return;o.chain().focus().setLink({href:t.toString(),target:m,rel:f}).run(),s(!1)}catch(e){return}},children:"Apply"})]})]})]})};
|
|
2
|
+
//# sourceMappingURL=LinkPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkPopover.js","sources":["../../../../../src/components/Form/TextEditor/LinkPopover.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Editor } from \"@tiptap/react\";\n\nimport { Link as LinkIcon } from \"lucide-react\";\nimport { ToolbarButton } from \"./toolbar\";\n\ninterface LinkPopoverProps {\n editor: Editor;\n}\n\ntype LinkTarget = \"_blank\" | \"_self\";\n\nconst LinkPopover: React.FC<LinkPopoverProps> = ({ editor }) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement | null>(null);\n const [href, setHref] = React.useState(\"\");\n const [target, setTarget] = React.useState<LinkTarget>(\"_blank\");\n const [rel, setRel] = React.useState(\"noopener\");\n\n React.useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const onPointerDown = (event: MouseEvent) => {\n if (!popoverRef.current) {\n return;\n }\n\n if (!popoverRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n const onEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n window.addEventListener(\"mousedown\", onPointerDown);\n window.addEventListener(\"keydown\", onEscape);\n return () => {\n window.removeEventListener(\"mousedown\", onPointerDown);\n window.removeEventListener(\"keydown\", onEscape);\n };\n }, [isOpen]);\n\n const removeLink = () => {\n editor.chain().focus().unsetLink().run();\n };\n\n const applyLink = () => {\n const normalizedUrl = href.trim();\n if (!normalizedUrl) return;\n\n try {\n const parsedUrl = new URL(normalizedUrl.includes(\":\") ? normalizedUrl : `https://${normalizedUrl}`);\n if (![\"http:\", \"https:\", \"mailto:\"].includes(parsedUrl.protocol)) return;\n\n editor.chain().focus().setLink({ href: parsedUrl.toString(), target, rel }).run();\n setIsOpen(false);\n } catch {\n return;\n }\n };\n\n return (\n <div className=\"relative\" ref={popoverRef}>\n <ToolbarButton\n onClick={() => {\n const activeLink = editor.getAttributes(\"link\");\n setHref(activeLink?.href ?? \"\");\n setTarget(activeLink?.target ?? \"_blank\");\n setRel(activeLink?.rel ?? \"noopener\");\n setIsOpen((prev) => !prev);\n }}\n active={editor.isActive(\"link\")}\n title=\"Link\"\n ariaPressed={editor.isActive(\"link\")}\n >\n <LinkIcon size={16} />\n </ToolbarButton>\n\n {isOpen && (\n <div className=\"absolute left-1/2 z-10 mt-2 w-72 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 shadow-lg\">\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">URL</label>\n <input className=\"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm\" value={href} onChange={(e) => setHref(e.target.value)} placeholder=\"https://example.com\" />\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">Target</label>\n <select className=\"mb-2 w-full rounded border border-gray-300 px-2 py-1 text-sm\" value={target} onChange={(e) => setTarget(e.target.value as LinkTarget)}>\n <option value=\"_blank\">New Tab</option>\n <option value=\"_self\">Same Window</option>\n </select>\n <label className=\"mb-1 block text-xs font-medium text-gray-600\">Rel</label>\n <input className=\"mb-3 w-full rounded border border-gray-300 px-2 py-1 text-sm\" value={rel} onChange={(e) => setRel(e.target.value)} placeholder=\"noopener\" />\n <div className=\"flex gap-2\">\n <button type=\"button\" className=\"rounded bg-gray-100 px-3 py-1 text-sm hover:bg-gray-200\" onClick={() => setIsOpen(false)}>Cancel</button>\n {editor.isActive(\"link\") && <button type=\"button\" className=\"rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200\" onClick={() => { removeLink(); setIsOpen(false); }}>Unlink</button>}\n <button type=\"button\" className=\"ml-auto rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700\" onClick={applyLink}>Apply</button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default LinkPopover;\n"],"names":["_a","editor","_b","React","useState","isOpen","setIsOpen","popoverRef","useRef","_c","href","setHref","_d","target","setTarget","_e","rel","setRel","useEffect","onPointerDown","event","current","contains","onEscape","key","window","addEventListener","removeEventListener","_jsxs","className","ref","children","_jsx","ToolbarButton","onClick","activeLink","getAttributes","prev","active","isActive","title","ariaPressed","LinkIcon","size","value","onChange","e","placeholder","type","chain","focus","unsetLink","run","normalizedUrl","trim","parsedUrl","URL","includes","concat","protocol","setLink","toString"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("
|
|
1
|
+
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),t=require("react/jsx-runtime"),o=require("react"),i=require("@tiptap/react"),s=require("./ImagePopover.js"),r=require("./LinkPopover.js"),l=require("./ToolbarGroups.js"),n=require("./extensions.js"),a=require("./toolbar.js");module.exports=function(d){var u=d.initialContent,c=void 0===u?"":u,g=d.onUpdate,b=d.features,m=d.stickyToolbar,f=void 0===m||m,x=d.toolbarPreset,v=void 0===x?"standard":x,h=d.onImageUpload,j=o.useMemo((function(){return n.withDefaultFeatures(e.__assign(e.__assign({},n.toolbarPresetFeatures[v]),b))}),[b,v]),p=o.useState(!1),k=p[0],T=p[1],y=o.useState(null),w=y[0],q=y[1],L=i.useEditor({extensions:n.createTextEditorExtensions(j),content:c,onUpdate:function(e){var t=e.editor;g(t.getHTML())},editorProps:{attributes:{class:n.editorContentClassName},handleKeyDown:function(e,t){return!!j.slashCommand&&("/"===t.key?(T(!0),!1):("Escape"===t.key&&T(!1),!1))}},immediatelyRender:!1});o.useEffect((function(){if(L){var e=function(){var e=L.state.selection;if(e.from!==e.to&&L.isFocused){var t=window.getSelection();if(t&&0!==t.rangeCount){var o=t.getRangeAt(0).getBoundingClientRect();q({top:o.top+window.scrollY-48,left:o.left+window.scrollX+o.width/2})}else q(null)}else q(null)},t=function(){return q(null)};return L.on("selectionUpdate",e),L.on("blur",t),function(){L.off("selectionUpdate",e),L.off("blur",t)}}}),[L]);var C=o.useRef(c);o.useEffect((function(){L&&(c!==C.current&&L.getHTML()===C.current&&(L.commands.setContent(c||"",{emitUpdate:!1}),C.current=c))}),[L,c]);var D=j.heading||j.formatting||j.lists||j.code||j.quote||j.link||j.table||j.image||j.taskList||j.alignment;return L?t.jsxs("div",{className:"pd-text-editor w-full rounded-lg border border-gray-200 shadow-sm",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-1 border-b bg-gray-50 p-3 ".concat(f?"sticky top-0 z-10":""),children:[j.history&&t.jsx(l.HistoryTools,{editor:L}),j.history&&D&&t.jsx(a.ToolbarDivider,{}),j.heading&&t.jsx(a.HeadingSelect,{value:(null==L?void 0:L.isActive("heading",{level:1}))?1:(null==L?void 0:L.isActive("heading",{level:2}))?2:(null==L?void 0:L.isActive("heading",{level:3}))?3:0,onChange:function(e){0===e?L.chain().focus().setParagraph().run():L.chain().focus().toggleHeading({level:e}).run()}}),j.heading&&(j.formatting||j.lists||j.code||j.quote||j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.formatting&&t.jsx(l.FormattingTools,{editor:L}),j.formatting&&(j.alignment||j.lists||j.code||j.quote||j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.alignment&&t.jsx(l.AlignmentTools,{editor:L}),j.alignment&&(j.lists||j.code||j.quote||j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.lists&&t.jsx(l.ListTools,{editor:L}),j.lists&&(j.code||j.quote||j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.code&&t.jsx(l.CodeTools,{editor:L}),j.code&&(j.quote||j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.quote&&t.jsx(l.QuoteTools,{editor:L}),j.quote&&(j.link||j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.link&&t.jsx(r,{editor:L}),j.link&&(j.table||j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.table&&t.jsx(l.TableTools,{editor:L}),j.table&&(j.image||j.taskList)&&t.jsx(a.ToolbarDivider,{}),j.image&&t.jsx(s,{editor:L,onImageUpload:h}),j.image&&j.taskList&&t.jsx(a.ToolbarDivider,{}),j.taskList&&t.jsx(l.InsertTools,{editor:L})]}),!1===f&&w&&t.jsxs("div",{className:"fixed z-20 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-1 shadow-lg",style:{top:w.top,left:w.left},children:[t.jsx(l.FormattingTools,{editor:L}),j.link&&t.jsx(r,{editor:L})]}),j.slashCommand&&k&&t.jsxs("div",{className:"absolute left-4 top-16 z-20 w-56 rounded-lg border border-gray-200 bg-white p-2 shadow-lg",children:[t.jsx("button",{type:"button",className:"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100",onClick:function(){L.chain().focus().toggleHeading({level:1}).run(),T(!1)},children:"Heading 1"}),t.jsx("button",{type:"button",className:"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100",onClick:function(){L.chain().focus().toggleBulletList().run(),T(!1)},children:"Bullet List"}),t.jsx("button",{type:"button",className:"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100",onClick:function(){L.chain().focus().toggleCodeBlock().run(),T(!1)},children:"Code Block"})]}),t.jsx(i.EditorContent,{editor:L,className:"w-full min-h-[300px] focus-within:bg-white"})]}):t.jsx("div",{className:"rounded-lg border bg-gray-50 h-48 animate-pulse"})};
|
|
2
2
|
//# sourceMappingURL=TextEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.js","sources":["../../../../../src/components/Form/TextEditor/TextEditor.tsx"],"sourcesContent":["import React from \"react\";\n\nimport Bold from \"@tiptap/extension-bold\";\nimport BulletList from \"@tiptap/extension-bullet-list\";\nimport Code from \"@tiptap/extension-code\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport Document from \"@tiptap/extension-document\";\nimport Heading from \"@tiptap/extension-heading\";\nimport Italic from \"@tiptap/extension-italic\";\nimport Link from \"@tiptap/extension-link\";\nimport ListItem from \"@tiptap/extension-list-item\";\nimport OrderedList from \"@tiptap/extension-ordered-list\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Strike from \"@tiptap/extension-strike\";\nimport Text from \"@tiptap/extension-text\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n Bold as BoldIcon,\n Italic as ItalicIcon,\n Underline as UnderlineIcon,\n List,\n ListOrdered,\n Heading1,\n Heading2,\n Heading3,\n Code as CodeIcon,\n FileCode,\n Link as LinkIcon,\n Strikethrough,\n Quote,\n Minus,\n Undo2,\n Redo2, SeparatorVertical\n} from \"lucide-react\";\n\nexport interface TextEditorProps {\n initialContent?: string;\n onUpdate: (content: string) => void;\n}\n\nconst TextEditor: React.FC<TextEditorProps> = ({ initialContent = \"\", onUpdate }) => {\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: false,\n codeBlock: false,\n }),\n Document,\n Paragraph,\n Text,\n Bold,\n Italic,\n Underline,\n Strike,\n Code,\n CodeBlock.configure({\n HTMLAttributes: {\n class: 'bg-gray-100 p-3 rounded text-sm font-mono',\n },\n }),\n Heading.configure({\n levels: [1, 2, 3],\n }),\n BulletList,\n OrderedList,\n ListItem,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: 'text-blue-600 underline',\n },\n }),\n ],\n content: initialContent,\n onUpdate: ({ editor }) => {\n onUpdate(editor.getHTML());\n },\n editorProps: {\n attributes: {\n class: 'prose prose-sm sm:prose lg:prose-lg xl:prose-2xl mx-auto focus:outline-none min-h-[200px] p-4',\n },\n },\n immediatelyRender: false,\n });\n\n const addLink = () => {\n const url = window.prompt('Enter URL:');\n if (url) {\n editor?.chain().focus().setLink({ href: url }).run();\n }\n };\n\n const removeLink = () => {\n editor?.chain().focus().unsetLink().run();\n };\n\n if (!editor) {\n return <div className=\"rounded-lg border bg-gray-50 h-48 animate-pulse\"></div>;\n }\n\n return (\n <div className='rounded-lg border border-gray-200 shadow-sm'>\n {/* Toolbar */}\n <div className='flex flex-wrap items-center gap-1 border-b bg-gray-50 p-3'>\n {/* Undo/Redo */}\n <button\n onClick={() => editor.chain().focus().undo().run()}\n className={`p-2 rounded hover:bg-gray-200 transition-colors ${!editor.can().undo() ? 'opacity-50 cursor-not-allowed' : ''}`}\n type='button'\n disabled={!editor.can().undo()}\n title=\"Undo\"\n >\n <Undo2 size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().redo().run()}\n className={`p-2 rounded hover:bg-gray-200 transition-colors ${!editor.can().redo() ? 'opacity-50 cursor-not-allowed' : ''}`}\n type='button'\n disabled={!editor.can().redo()}\n title=\"Redo\"\n >\n <Redo2 size={16} />\n </button>\n\n <div className=\"mx-2 h-6 w-px bg-gray-300\"></div>\n\n {/* Headings */}\n <button\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"heading\", { level: 1 })\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Heading 1\"\n >\n <Heading1 size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"heading\", { level: 2 })\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Heading 2\"\n >\n <Heading2 size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"heading\", { level: 3 })\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Heading 3\"\n >\n <Heading3 size={16} />\n </button>\n\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n\n {/* Text Formatting */}\n <button\n onClick={() => editor.chain().focus().toggleBold().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"bold\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Bold\"\n >\n <BoldIcon size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleItalic().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"italic\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Italic\"\n >\n <ItalicIcon size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"underline\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Underline\"\n >\n <UnderlineIcon size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleStrike().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"strike\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Strikethrough\"\n >\n <Strikethrough size={16} />\n </button>\n\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n\n {/* Lists */}\n <button\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"bulletList\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Bullet List\"\n >\n <List size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"orderedList\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Numbered List\"\n >\n <ListOrdered size={16} />\n </button>\n\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n\n {/* Code */}\n <button\n onClick={() => editor.chain().focus().toggleCode().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"code\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Inline Code\"\n >\n <CodeIcon size={16} />\n </button>\n <button\n onClick={() => editor.chain().focus().toggleCodeBlock().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"codeBlock\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Code Block\"\n >\n <FileCode size={16} />\n </button>\n\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n\n {/* Quote */}\n <button\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n className={`p-2 rounded transition-colors ${\n editor.isActive(\"blockquote\")\n ? \"bg-blue-200 text-blue-800\"\n : \"hover:bg-gray-200\"\n }`}\n type='button'\n title=\"Quote\"\n >\n <Quote size={16} />\n </button>\n\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n\n {/* Link */}\n {editor.isActive('link') ? (\n <button\n onClick={removeLink}\n className=\"p-2 rounded bg-blue-200 text-blue-800 hover:bg-blue-300 transition-colors\"\n type='button'\n title=\"Remove Link\"\n >\n <LinkIcon size={16} />\n </button>\n ) : (\n <button\n onClick={addLink}\n className=\"p-2 rounded hover:bg-gray-200 transition-colors\"\n type='button'\n title=\"Add Link\"\n >\n <LinkIcon size={16} />\n </button>\n )}\n </div>\n\n {/* Editor */}\n <EditorContent\n editor={editor}\n className='min-h-[300px] focus-within:bg-white'\n />\n </div>\n );\n};\n\nexport default TextEditor;"],"names":["_a","_b","initialContent","onUpdate","editor","useEditor","extensions","StarterKit","configure","heading","codeBlock","Document","Paragraph","Text","Bold","Italic","Underline","Strike","Code","CodeBlock","HTMLAttributes","class","Heading","levels","BulletList","OrderedList","ListItem","Link","openOnClick","content","getHTML","editorProps","attributes","immediatelyRender","_jsxs","className","children","_jsx","onClick","chain","focus","undo","run","concat","can","type","disabled","title","Undo2","size","redo","Redo2","toggleHeading","level","isActive","Heading1","Heading2","Heading3","SeparatorVertical","toggleBold","BoldIcon","toggleItalic","ItalicIcon","toggleUnderline","UnderlineIcon","toggleStrike","Strikethrough","toggleBulletList","List","toggleOrderedList","ListOrdered","toggleCode","CodeIcon","toggleCodeBlock","FileCode","toggleBlockquote","Quote","unsetLink","LinkIcon","url","window","prompt","setLink","href","EditorContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextEditor.js","sources":["../../../../../src/components/Form/TextEditor/TextEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport ImagePopover from \"./ImagePopover\";\nimport LinkPopover from \"./LinkPopover\";\nimport { AlignmentTools, CodeTools, FormattingTools, HistoryTools, InsertTools, ListTools, QuoteTools, TableTools } from \"./ToolbarGroups\";\nimport { createTextEditorExtensions, editorContentClassName, type TextEditorFeatures, type ToolbarPreset, toolbarPresetFeatures, withDefaultFeatures } from \"./extensions\";\nimport { HeadingLevel, HeadingSelect, ToolbarDivider } from \"./toolbar\";\n\nexport interface TextEditorProps {\n initialContent?: string;\n onUpdate: (content: string) => void;\n features?: TextEditorFeatures;\n stickyToolbar?: boolean;\n toolbarPreset?: ToolbarPreset;\n onImageUpload?: (file: File) => Promise<{ url: string; assetId?: string }>;\n}\n\nconst TextEditor: React.FC<TextEditorProps> = ({ initialContent = \"\", onUpdate, features, stickyToolbar = true, toolbarPreset = \"standard\", onImageUpload }) => {\n const enabledFeatures = React.useMemo(() => withDefaultFeatures({ ...toolbarPresetFeatures[toolbarPreset], ...features }), [features, toolbarPreset]);\n const [slashOpen, setSlashOpen] = React.useState(false);\n const [bubblePos, setBubblePos] = React.useState<{ top: number; left: number } | null>(null);\n\n const editor = useEditor({\n extensions: createTextEditorExtensions(enabledFeatures),\n content: initialContent,\n onUpdate: ({ editor }) => {\n onUpdate(editor.getHTML());\n },\n editorProps: {\n attributes: {\n class: editorContentClassName,\n },\n handleKeyDown: (_view, event) => {\n if (!enabledFeatures.slashCommand) return false;\n if (event.key === \"/\") {\n setSlashOpen(true);\n return false;\n }\n if (event.key === \"Escape\") {\n setSlashOpen(false);\n }\n return false;\n },\n },\n immediatelyRender: false,\n });\n\n React.useEffect(() => {\n if (!editor) return;\n const updateBubble = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setBubblePos(null);\n return;\n }\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) {\n setBubblePos(null);\n return;\n }\n const rect = selection.getRangeAt(0).getBoundingClientRect();\n setBubblePos({ top: rect.top + window.scrollY - 48, left: rect.left + window.scrollX + rect.width / 2 });\n };\n const onBlur = () => setBubblePos(null);\n editor.on(\"selectionUpdate\", updateBubble);\n editor.on(\"blur\", onBlur);\n return () => {\n editor.off(\"selectionUpdate\", updateBubble);\n editor.off(\"blur\", onBlur);\n };\n }, [editor]);\n\n const lastAppliedInitialContentRef = React.useRef(initialContent);\n\n React.useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (initialContent === lastAppliedInitialContentRef.current) {\n return;\n }\n\n const currentContent = editor.getHTML();\n const wasUntouchedSinceLastSync = currentContent === lastAppliedInitialContentRef.current;\n\n if (!wasUntouchedSinceLastSync) {\n return;\n }\n\n editor.commands.setContent(initialContent || \"\", { emitUpdate: false });\n lastAppliedInitialContentRef.current = initialContent;\n }, [editor, initialContent]);\n\n const getActiveHeadingLevel = (): HeadingLevel => {\n if (editor?.isActive(\"heading\", { level: 1 })) return 1;\n if (editor?.isActive(\"heading\", { level: 2 })) return 2;\n if (editor?.isActive(\"heading\", { level: 3 })) return 3;\n return 0;\n };\n\n const hasAnyMainTools =\n enabledFeatures.heading ||\n enabledFeatures.formatting ||\n enabledFeatures.lists ||\n enabledFeatures.code ||\n enabledFeatures.quote ||\n enabledFeatures.link ||\n enabledFeatures.table ||\n enabledFeatures.image ||\n enabledFeatures.taskList ||\n enabledFeatures.alignment;\n\n if (!editor) {\n return <div className=\"rounded-lg border bg-gray-50 h-48 animate-pulse\"></div>;\n }\n\n return (\n <div className='pd-text-editor w-full rounded-lg border border-gray-200 shadow-sm'>\n {/* Toolbar */}\n <div className={`flex flex-wrap items-center gap-1 border-b bg-gray-50 p-3 ${stickyToolbar ? \"sticky top-0 z-10\" : \"\"}`}>\n {/* Undo/Redo */}\n {enabledFeatures.history && <HistoryTools editor={editor} />}\n\n {enabledFeatures.history && hasAnyMainTools && <ToolbarDivider />}\n\n {/* Headings */}\n {enabledFeatures.heading && <HeadingSelect value={getActiveHeadingLevel()} onChange={(level) => {\n if (level === 0) editor.chain().focus().setParagraph().run();\n else editor.chain().focus().toggleHeading({ level }).run();\n }} />}\n\n {enabledFeatures.heading && (enabledFeatures.formatting || enabledFeatures.lists || enabledFeatures.code || enabledFeatures.quote || enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.formatting && <FormattingTools editor={editor} />}\n\n {enabledFeatures.formatting && (enabledFeatures.alignment || enabledFeatures.lists || enabledFeatures.code || enabledFeatures.quote || enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.alignment && <AlignmentTools editor={editor} />}\n\n {enabledFeatures.alignment && (enabledFeatures.lists || enabledFeatures.code || enabledFeatures.quote || enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.lists && <ListTools editor={editor} />}\n\n {enabledFeatures.lists && (enabledFeatures.code || enabledFeatures.quote || enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.code && <CodeTools editor={editor} />}\n\n {enabledFeatures.code && (enabledFeatures.quote || enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.quote && <QuoteTools editor={editor} />}\n\n {enabledFeatures.quote && (enabledFeatures.link || enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {/* Link */}\n {enabledFeatures.link && <LinkPopover editor={editor} />}\n\n {enabledFeatures.link && (enabledFeatures.table || enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.table && <TableTools editor={editor} />}\n\n {enabledFeatures.table && (enabledFeatures.image || enabledFeatures.taskList) && <ToolbarDivider />}\n\n {enabledFeatures.image && <ImagePopover editor={editor} onImageUpload={onImageUpload} />}\n\n {enabledFeatures.image && enabledFeatures.taskList && <ToolbarDivider />}\n\n {enabledFeatures.taskList && <InsertTools editor={editor} />}\n </div>\n\n {stickyToolbar === false && bubblePos && (\n <div className=\"fixed z-20 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-1 shadow-lg\" style={{ top: bubblePos.top, left: bubblePos.left }}>\n <FormattingTools editor={editor} />\n {enabledFeatures.link && <LinkPopover editor={editor} />}\n </div>\n )}\n\n {enabledFeatures.slashCommand && slashOpen && (\n <div className=\"absolute left-4 top-16 z-20 w-56 rounded-lg border border-gray-200 bg-white p-2 shadow-lg\">\n <button type=\"button\" className=\"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100\" onClick={() => { editor.chain().focus().toggleHeading({ level: 1 }).run(); setSlashOpen(false); }}>Heading 1</button>\n <button type=\"button\" className=\"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100\" onClick={() => { editor.chain().focus().toggleBulletList().run(); setSlashOpen(false); }}>Bullet List</button>\n <button type=\"button\" className=\"block w-full rounded px-2 py-1 text-left text-sm hover:bg-gray-100\" onClick={() => { editor.chain().focus().toggleCodeBlock().run(); setSlashOpen(false); }}>Code Block</button>\n </div>\n )}\n\n {/* Editor */}\n <EditorContent\n editor={editor}\n className='w-full min-h-[300px] focus-within:bg-white'\n />\n </div>\n );\n};\n\nexport default TextEditor;\n"],"names":["_a","_b","initialContent","onUpdate","features","_c","stickyToolbar","_d","toolbarPreset","onImageUpload","enabledFeatures","React","useMemo","withDefaultFeatures","__assign","toolbarPresetFeatures","_e","useState","slashOpen","setSlashOpen","_f","bubblePos","setBubblePos","editor","useEditor","extensions","createTextEditorExtensions","content","getHTML","editorProps","attributes","class","editorContentClassName","handleKeyDown","_view","event","slashCommand","key","immediatelyRender","useEffect","updateBubble","state","selection","from","to","isFocused","window","getSelection","rangeCount","rect","getRangeAt","getBoundingClientRect","top","scrollY","left","scrollX","width","onBlur","on","off","lastAppliedInitialContentRef","useRef","current","commands","setContent","emitUpdate","hasAnyMainTools","heading","formatting","lists","code","quote","link","table","image","taskList","alignment","_jsxs","className","children","concat","history","_jsx","HistoryTools","ToolbarDivider","HeadingSelect","value","isActive","level","onChange","chain","focus","setParagraph","run","toggleHeading","FormattingTools","AlignmentTools","ListTools","CodeTools","QuoteTools","LinkPopover","TableTools","ImagePopover","InsertTools","style","type","onClick","toggleBulletList","toggleCodeBlock","EditorContent"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("react"),i=require("lucide-react"),n=require("./toolbar.js");exports.AlignmentTools=function(t){var r=t.editor;return e.jsxs(e.Fragment,{children:[e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().setTextAlign("left").run()},active:r.isActive({textAlign:"left"}),ariaPressed:r.isActive({textAlign:"left"}),title:"Align left",children:e.jsx(i.AlignLeft,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().setTextAlign("center").run()},active:r.isActive({textAlign:"center"}),ariaPressed:r.isActive({textAlign:"center"}),title:"Align center",children:e.jsx(i.AlignCenter,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().setTextAlign("right").run()},active:r.isActive({textAlign:"right"}),ariaPressed:r.isActive({textAlign:"right"}),title:"Align right",children:e.jsx(i.AlignRight,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().setTextAlign("justify").run()},active:r.isActive({textAlign:"justify"}),ariaPressed:r.isActive({textAlign:"justify"}),title:"Justify",children:e.jsx(i.AlignJustify,{size:16})})]})},exports.CodeTools=function(t){var r=t.editor;return e.jsxs(e.Fragment,{children:[e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleCode().run()},active:r.isActive("code"),ariaPressed:r.isActive("code"),title:"Inline code",children:e.jsx(i.Code,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleCodeBlock().run()},active:r.isActive("codeBlock"),ariaPressed:r.isActive("codeBlock"),title:"Code block",children:e.jsx(i.FileCode,{size:16})})]})},exports.FormattingTools=function(t){var r=t.editor;return e.jsxs(e.Fragment,{children:[e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleBold().run()},active:r.isActive("bold"),ariaPressed:r.isActive("bold"),title:"Bold",children:e.jsx(i.Bold,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleItalic().run()},active:r.isActive("italic"),ariaPressed:r.isActive("italic"),title:"Italic",children:e.jsx(i.Italic,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleUnderline().run()},active:r.isActive("underline"),ariaPressed:r.isActive("underline"),title:"Underline",children:e.jsx(i.Underline,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleStrike().run()},active:r.isActive("strike"),ariaPressed:r.isActive("strike"),title:"Strikethrough",children:e.jsx(i.Strikethrough,{size:16})})]})},exports.HistoryTools=function(t){var r=t.editor;return e.jsxs(e.Fragment,{children:[e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().undo().run()},disabled:!r.can().undo(),title:"Undo",children:e.jsx(i.Undo2,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().redo().run()},disabled:!r.can().redo(),title:"Redo",children:e.jsx(i.Redo2,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().unsetAllMarks().run()},title:"Clear formatting",children:e.jsx(i.Minus,{size:16})})]})},exports.InsertTools=function(t){var r=t.editor;return e.jsx(e.Fragment,{children:e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleTaskList().run()},active:r.isActive("taskList"),ariaPressed:r.isActive("taskList"),title:"Task list",children:e.jsx(i.ListTodo,{size:16})})})},exports.ListTools=function(t){var r=t.editor;return e.jsxs(e.Fragment,{children:[e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleBulletList().run()},active:r.isActive("bulletList"),ariaPressed:r.isActive("bulletList"),title:"Bullet list",children:e.jsx(i.List,{size:16})}),e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleOrderedList().run()},active:r.isActive("orderedList"),ariaPressed:r.isActive("orderedList"),title:"Numbered list",children:e.jsx(i.ListOrdered,{size:16})})]})},exports.QuoteTools=function(t){var r=t.editor;return e.jsx(n.ToolbarButton,{onClick:function(){return r.chain().focus().toggleBlockquote().run()},active:r.isActive("blockquote"),ariaPressed:r.isActive("blockquote"),title:"Quote",children:e.jsx(i.Quote,{size:16})})},exports.TableTools=function(r){var o=r.editor,s=t.useState(!1),l=s[0],c=s[1],u=t.useRef(null),a=o.isActive("table");t.useEffect((function(){if(l){var e=function(e){var t;(null===(t=u.current)||void 0===t?void 0:t.contains(e.target))||c(!1)},t=function(e){"Escape"===e.key&&c(!1)};return window.addEventListener("mousedown",e),window.addEventListener("keydown",t),function(){window.removeEventListener("mousedown",e),window.removeEventListener("keydown",t)}}}),[l]);var d=function(e){e(),c(!1)};return e.jsxs("div",{className:"relative",ref:u,children:[e.jsx(n.ToolbarButton,{onClick:function(){return c((function(e){return!e}))},title:"Table actions",active:a,ariaPressed:l,children:e.jsx(i.Table2,{size:16})}),l&&e.jsxs("div",{className:"absolute left-1/2 z-10 mt-2 w-56 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-1 shadow-lg",children:[e.jsxs("button",{type:"button",className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100",onClick:function(){return d((function(){return o.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run()}))},children:[e.jsx(i.Table2,{size:14})," Insert table"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().addRowAfter().run()}))},children:[e.jsx(i.Rows3,{size:14})," Add row"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().deleteRow().run()}))},children:[e.jsx(i.Trash2,{size:14})," Delete row"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().addColumnAfter().run()}))},children:[e.jsx(i.Columns3,{size:14})," Add column"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().deleteColumn().run()}))},children:[e.jsx(i.TableProperties,{size:14})," Delete column"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().mergeOrSplit().run()}))},children:[e.jsx(i.Split,{size:14})," Merge/Split cells"]}),e.jsxs("button",{type:"button",disabled:!a,className:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm text-red-700 hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50",onClick:function(){return d((function(){return o.chain().focus().deleteTable().run()}))},children:[e.jsx(i.Trash2,{size:14})," Delete table"]})]})]})};
|
|
2
|
+
//# sourceMappingURL=ToolbarGroups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarGroups.js","sources":["../../../../../src/components/Form/TextEditor/ToolbarGroups.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport {\n Bold as BoldIcon,\n Italic as ItalicIcon,\n Underline as UnderlineIcon,\n List,\n ListOrdered,\n Code as CodeIcon,\n FileCode,\n Strikethrough,\n Quote,\n Minus,\n Undo2,\n Redo2,\n Table2,\n Rows3,\n Columns3,\n TableProperties,\n Split,\n Trash2,\n ListTodo,\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignJustify,\n} from \"lucide-react\";\n\nimport { ToolbarButton } from \"./toolbar\";\n\nexport const HistoryTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo\"><Undo2 size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo\"><Redo2 size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().unsetAllMarks().run()} title=\"Clear formatting\"><Minus size={16} /></ToolbarButton>\n </>\n);\n\nexport const FormattingTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} active={editor.isActive(\"bold\")} ariaPressed={editor.isActive(\"bold\")} title=\"Bold\"><BoldIcon size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} active={editor.isActive(\"italic\")} ariaPressed={editor.isActive(\"italic\")} title=\"Italic\"><ItalicIcon size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} active={editor.isActive(\"underline\")} ariaPressed={editor.isActive(\"underline\")} title=\"Underline\"><UnderlineIcon size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} active={editor.isActive(\"strike\")} ariaPressed={editor.isActive(\"strike\")} title=\"Strikethrough\"><Strikethrough size={16} /></ToolbarButton>\n </>\n);\n\nexport const ListTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().toggleBulletList().run()} active={editor.isActive(\"bulletList\")} ariaPressed={editor.isActive(\"bulletList\")} title=\"Bullet list\"><List size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleOrderedList().run()} active={editor.isActive(\"orderedList\")} ariaPressed={editor.isActive(\"orderedList\")} title=\"Numbered list\"><ListOrdered size={16} /></ToolbarButton>\n </>\n);\n\nexport const CodeTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCode().run()} active={editor.isActive(\"code\")} ariaPressed={editor.isActive(\"code\")} title=\"Inline code\"><CodeIcon size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCodeBlock().run()} active={editor.isActive(\"codeBlock\")} ariaPressed={editor.isActive(\"codeBlock\")} title=\"Code block\"><FileCode size={16} /></ToolbarButton>\n </>\n);\n\nexport const QuoteTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <ToolbarButton onClick={() => editor.chain().focus().toggleBlockquote().run()} active={editor.isActive(\"blockquote\")} ariaPressed={editor.isActive(\"blockquote\")} title=\"Quote\"><Quote size={16} /></ToolbarButton>\n);\n\nexport const TableTools: React.FC<{ editor: Editor }> = ({ editor }) => {\n const [open, setOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement | null>(null);\n const inTable = editor.isActive(\"table\");\n\n React.useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent) => {\n if (!ref.current?.contains(event.target as Node)) setOpen(false);\n };\n const onEsc = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n window.addEventListener(\"keydown\", onEsc);\n return () => {\n window.removeEventListener(\"mousedown\", onDown);\n window.removeEventListener(\"keydown\", onEsc);\n };\n }, [open]);\n\n const run = (action: () => void) => {\n action();\n setOpen(false);\n };\n\n return (\n <div className=\"relative\" ref={ref}>\n <ToolbarButton onClick={() => setOpen((prev) => !prev)} title=\"Table actions\" active={inTable} ariaPressed={open}>\n <Table2 size={16} />\n </ToolbarButton>\n {open && (\n <div className=\"absolute left-1/2 z-10 mt-2 w-56 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-1 shadow-lg\">\n <button type=\"button\" className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100\" onClick={() => run(() => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run())}><Table2 size={14} /> Insert table</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().addRowAfter().run())}><Rows3 size={14} /> Add row</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().deleteRow().run())}><Trash2 size={14} /> Delete row</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().addColumnAfter().run())}><Columns3 size={14} /> Add column</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().deleteColumn().run())}><TableProperties size={14} /> Delete column</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().mergeOrSplit().run())}><Split size={14} /> Merge/Split cells</button>\n <button type=\"button\" disabled={!inTable} className=\"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm text-red-700 hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50\" onClick={() => run(() => editor.chain().focus().deleteTable().run())}><Trash2 size={14} /> Delete table</button>\n </div>\n )}\n </div>\n );\n};\n\nexport const InsertTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().toggleTaskList().run()} active={editor.isActive(\"taskList\")} ariaPressed={editor.isActive(\"taskList\")} title=\"Task list\"><ListTodo size={16} /></ToolbarButton>\n </>\n);\n\nexport const AlignmentTools: React.FC<{ editor: Editor }> = ({ editor }) => (\n <>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign(\"left\").run()} active={editor.isActive({ textAlign: \"left\" })} ariaPressed={editor.isActive({ textAlign: \"left\" })} title=\"Align left\"><AlignLeft size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign(\"center\").run()} active={editor.isActive({ textAlign: \"center\" })} ariaPressed={editor.isActive({ textAlign: \"center\" })} title=\"Align center\"><AlignCenter size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign(\"right\").run()} active={editor.isActive({ textAlign: \"right\" })} ariaPressed={editor.isActive({ textAlign: \"right\" })} title=\"Align right\"><AlignRight size={16} /></ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign(\"justify\").run()} active={editor.isActive({ textAlign: \"justify\" })} ariaPressed={editor.isActive({ textAlign: \"justify\" })} title=\"Justify\"><AlignJustify size={16} /></ToolbarButton>\n </>\n);\n"],"names":["_a","editor","_jsxs","_Fragment","children","_jsx","ToolbarButton","onClick","chain","focus","setTextAlign","run","active","isActive","textAlign","ariaPressed","title","AlignLeft","size","AlignCenter","AlignRight","AlignJustify","toggleCode","CodeIcon","toggleCodeBlock","FileCode","toggleBold","BoldIcon","toggleItalic","ItalicIcon","toggleUnderline","UnderlineIcon","toggleStrike","Strikethrough","undo","disabled","can","Undo2","redo","Redo2","unsetAllMarks","Minus","toggleTaskList","ListTodo","toggleBulletList","List","toggleOrderedList","ListOrdered","toggleBlockquote","Quote","_b","React","useState","open","setOpen","ref","useRef","inTable","useEffect","onDown","event","current","contains","target","onEsc","key","window","addEventListener","removeEventListener","action","className","prev","Table2","type","insertTable","rows","cols","withHeaderRow","addRowAfter","Rows3","deleteRow","Trash2","addColumnAfter","Columns3","deleteColumn","TableProperties","mergeOrSplit","Split","deleteTable"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),t=require("../../../node_modules/@tiptap/extension-bold/dist/index.js"),i=require("../../../node_modules/@tiptap/extension-bullet-list/dist/index.js"),s=require("../../../node_modules/@tiptap/extension-code/dist/index.js"),n=require("../../../node_modules/@tiptap/extension-code-block/dist/index.js"),r=require("../../../node_modules/@tiptap/extension-heading/dist/index.js"),a=require("@tiptap/extension-image"),d=require("../../../node_modules/@tiptap/extension-italic/dist/index.js"),o=require("@tiptap/extension-link"),l=require("../../../node_modules/@tiptap/extension-list-item/dist/index.js"),u=require("../../../node_modules/@tiptap/extension-ordered-list/dist/index.js"),p=require("../../../node_modules/@tiptap/extension-strike/dist/index.js"),x=require("../../../node_modules/@tiptap/extension-table/dist/index.js"),m=require("../../../node_modules/@tiptap/extension-table-cell/dist/index.js"),_=require("../../../node_modules/@tiptap/extension-table-header/dist/index.js"),f=require("../../../node_modules/@tiptap/extension-table-row/dist/index.js"),g=require("../../../node_modules/@tiptap/extension-task-item/dist/index.js"),c=require("../../../node_modules/@tiptap/extension-task-list/dist/index.js"),b=require("../../../node_modules/@tiptap/extension-text-align/dist/index.js"),h=require("@tiptap/extension-underline"),q=require("@tiptap/starter-kit"),j={heading:!0,formatting:!0,lists:!0,code:!0,quote:!0,link:!0,history:!0,placeholder:!0,slashCommand:!1,table:!1,image:!1,taskList:!1,alignment:!0},k={minimal:{heading:!1,formatting:!0,lists:!1,code:!1,quote:!1,link:!0,history:!0,placeholder:!0,slashCommand:!1,table:!1,image:!1,taskList:!1,alignment:!1},standard:e.__assign({},j),full:e.__assign(e.__assign({},j),{slashCommand:!0,table:!0,image:!0,taskList:!0,alignment:!0})},y=function(t){return e.__assign(e.__assign({},j),t)};exports.createTextEditorExtensions=function(j){var k=y(j);return e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray(e.__spreadArray([q.configure({heading:!1,bulletList:!1,orderedList:!1,listItem:!1,codeBlock:!1})],k.formatting?[t.default,d.default,h,p.default]:[],!0),k.code?[s.default,n.default.configure({HTMLAttributes:{class:"bg-gray-100 p-3 rounded text-sm font-mono"}})]:[],!0),k.heading?[r.default.configure({levels:[1,2,3]})]:[],!0),k.alignment?[b.default.configure({types:["heading","paragraph"]})]:[],!0),k.lists?[i.default,u.default,l.default]:[],!0),k.link?[o.configure({openOnClick:!1,HTMLAttributes:{class:"text-blue-600 underline"}})]:[],!0),k.taskList?[c.default,g.default.configure({nested:!0})]:[],!0),k.image?[a.configure({inline:!1,allowBase64:!0})]:[],!0),k.table?[x.Table.configure({resizable:!0}),f.default,_.default,m.default]:[],!0)},exports.defaultTextEditorFeatures=j,exports.editorContentClassName="prose prose-sm max-w-none prose-h1:text-3xl prose-h1:font-bold prose-h2:text-2xl prose-h2:font-semibold prose-h3:text-xl prose-h3:font-semibold mx-auto focus:outline-none min-h-[200px] p-4",exports.toolbarPresetFeatures=k,exports.withDefaultFeatures=y;
|
|
2
|
+
//# sourceMappingURL=extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","sources":["../../../../../src/components/Form/TextEditor/extensions.ts"],"sourcesContent":["import Bold from \"@tiptap/extension-bold\";\nimport BulletList from \"@tiptap/extension-bullet-list\";\nimport Code from \"@tiptap/extension-code\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport Heading from \"@tiptap/extension-heading\";\nimport Image from \"@tiptap/extension-image\";\nimport Italic from \"@tiptap/extension-italic\";\nimport Link from \"@tiptap/extension-link\";\nimport ListItem from \"@tiptap/extension-list-item\";\nimport OrderedList from \"@tiptap/extension-ordered-list\";\nimport Strike from \"@tiptap/extension-strike\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport StarterKit from \"@tiptap/starter-kit\";\n\nexport interface TextEditorFeatures {\n heading?: boolean;\n formatting?: boolean;\n lists?: boolean;\n code?: boolean;\n quote?: boolean;\n link?: boolean;\n history?: boolean;\n placeholder?: boolean;\n slashCommand?: boolean;\n table?: boolean;\n image?: boolean;\n taskList?: boolean;\n alignment?: boolean;\n}\n\nexport type ToolbarPreset = \"minimal\" | \"standard\" | \"full\";\n\nexport const defaultTextEditorFeatures: Required<TextEditorFeatures> = {\n heading: true,\n formatting: true,\n lists: true,\n code: true,\n quote: true,\n link: true,\n history: true,\n placeholder: true,\n slashCommand: false,\n table: false,\n image: false,\n taskList: false,\n alignment: true,\n};\n\nexport const toolbarPresetFeatures: Record<ToolbarPreset, Required<TextEditorFeatures>> = {\n minimal: {\n heading: false,\n formatting: true,\n lists: false,\n code: false,\n quote: false,\n link: true,\n history: true,\n placeholder: true,\n slashCommand: false,\n table: false,\n image: false,\n taskList: false,\n alignment: false,\n },\n standard: {\n ...defaultTextEditorFeatures,\n },\n full: {\n ...defaultTextEditorFeatures,\n slashCommand: true,\n table: true,\n image: true,\n taskList: true,\n alignment: true,\n },\n};\n\nexport const withDefaultFeatures = (features?: TextEditorFeatures): Required<TextEditorFeatures> => ({\n ...defaultTextEditorFeatures,\n ...features,\n});\n\nexport const createTextEditorExtensions = (features?: TextEditorFeatures) => {\n const f = withDefaultFeatures(features);\n\n return [\n StarterKit.configure({\n heading: false,\n bulletList: false,\n orderedList: false,\n listItem: false,\n codeBlock: false,\n }),\n ...(f.formatting ? [Bold, Italic, Underline, Strike] : []),\n ...(f.code\n ? [\n Code,\n CodeBlock.configure({\n HTMLAttributes: {\n class: \"bg-gray-100 p-3 rounded text-sm font-mono\",\n },\n }),\n ]\n : []),\n ...(f.heading ? [Heading.configure({ levels: [1, 2, 3] })] : []),\n ...(f.alignment ? [TextAlign.configure({ types: [\"heading\", \"paragraph\"] })] : []),\n ...(f.lists ? [BulletList, OrderedList, ListItem] : []),\n ...(f.link\n ? [\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"text-blue-600 underline\",\n },\n }),\n ]\n : []),\n ...(f.taskList ? [TaskList, TaskItem.configure({ nested: true })] : []),\n ...(f.image ? [Image.configure({ inline: false, allowBase64: true })] : []),\n ...(f.table\n ? [\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n ]\n : []),\n ];\n};\n\nexport const editorContentClassName =\n \"prose prose-sm max-w-none prose-h1:text-3xl prose-h1:font-bold prose-h2:text-2xl prose-h2:font-semibold prose-h3:text-xl prose-h3:font-semibold mx-auto focus:outline-none min-h-[200px] p-4\";\n"],"names":["defaultTextEditorFeatures","heading","formatting","lists","code","quote","link","history","placeholder","slashCommand","table","image","taskList","alignment","toolbarPresetFeatures","minimal","standard","__assign","full","withDefaultFeatures","features","f","__spreadArray","StarterKit","configure","bulletList","orderedList","listItem","codeBlock","Bold","Italic","Underline","Strike","Code","CodeBlock","HTMLAttributes","class","Heading","levels","TextAlign","types","BulletList","OrderedList","ListItem","Link","openOnClick","TaskList","TaskItem","nested","Image","inline","allowBase64","Table","resizable","TableRow","TableHeader","TableCell"],"mappings":"+5CAuCaA,EAA0D,CACnEC,SAAS,EACTC,YAAY,EACZC,OAAO,EACPC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,aAAa,EACbC,cAAc,EACdC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,WAAW,GAGFC,EAA6E,CACtFC,QAAS,CACLd,SAAS,EACTC,YAAY,EACZC,OAAO,EACPC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,aAAa,EACbC,cAAc,EACdC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,WAAW,GAEfG,SAAQC,EAAAA,SAAA,CAAA,EACDjB,GAEPkB,KAAID,EAAAA,SAAAA,WAAA,CAAA,EACGjB,GAAyB,CAC5BS,cAAc,EACdC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,WAAW,KAINM,EAAsB,SAACC,GAAgE,OAAAH,EAAAA,SAAAA,WAAA,CAAA,EAC7FjB,GACAoB,EAF6F,qCAK1D,SAACA,GACvC,IAAMC,EAAIF,EAAoBC,GAE9B,OAAAE,EAAAA,cAAAA,gBAAAA,EAAAA,cAAAA,EAAAA,cAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,cAAAA,EAAAA,cAAAA,gBAAA,CACIC,EAAWC,UAAU,CACjBvB,SAAS,EACTwB,YAAY,EACZC,aAAa,EACbC,UAAU,EACVC,WAAW,KAEXP,EAAEnB,WAAa,CAAC2B,EAAAA,QAAMC,EAAAA,QAAQC,EAAWC,EAAAA,SAAU,IAAG,GACtDX,EAAEjB,KACA,CACI6B,EAAAA,QACAC,EAAAA,QAAUV,UAAU,CAChBW,eAAgB,CACZC,MAAO,gDAInB,OACFf,EAAEpB,QAAU,CAACoC,UAAQb,UAAU,CAAEc,OAAQ,CAAC,EAAG,EAAG,MAAS,OACzDjB,EAAER,UAAY,CAAC0B,EAAAA,QAAUf,UAAU,CAAEgB,MAAO,CAAC,UAAW,gBAAmB,OAC3EnB,EAAElB,MAAQ,CAACsC,EAAAA,QAAYC,EAAAA,QAAaC,EAAAA,SAAY,OAChDtB,EAAEf,KACA,CACIsC,EAAKpB,UAAU,CACXqB,aAAa,EACbV,eAAgB,CACZC,MAAO,8BAInB,IAAG,GACLf,EAAET,SAAW,CAACkC,EAAAA,QAAUC,EAAAA,QAASvB,UAAU,CAAEwB,QAAQ,KAAW,IAAG,GACnE3B,EAAEV,MAAQ,CAACsC,EAAMzB,UAAU,CAAE0B,QAAQ,EAAOC,aAAa,KAAW,IAAG,GACvE9B,EAAEX,MACA,CACI0C,EAAAA,MAAM5B,UAAU,CAAE6B,WAAW,IAC7BC,EAAAA,QACAC,EAAAA,QACAC,EAAAA,SAEJ,IAAG,EAEjB,qEAGI"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),a=require("lucide-react");exports.HeadingSelect=function(a){var r=a.value,t=a.onChange;return e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("select",{className:"rounded border border-gray-300 bg-white px-2 py-1 text-sm","aria-label":"Heading level",value:r,onChange:function(e){return t(Number(e.target.value))},children:[e.jsx("option",{value:0,children:"Normal"}),e.jsx("option",{value:1,className:"text-2xl",children:"Heading 1"}),e.jsx("option",{value:2,className:"text-xl",children:"Heading 2"}),e.jsx("option",{value:3,className:"text-lg",children:"Heading 3"})]})})},exports.ToolbarButton=function(a){var r=a.onClick,t=a.active,l=void 0!==t&&t,i=a.disabled,n=void 0!==i&&i,o=a.title,s=a.children,c=a.ariaPressed;return e.jsx("button",{onClick:r,className:"p-2 rounded transition-colors ".concat(l?"bg-blue-200 text-blue-800":"hover:bg-gray-200"," ").concat(n?"opacity-50 cursor-not-allowed":""),type:"button",disabled:n,title:o,"aria-label":o,"aria-pressed":c,children:s})},exports.ToolbarDivider=function(){return e.jsx(a.SeparatorVertical,{className:"mx-2 h-6 w-px bg-gray-300"})};
|
|
2
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sources":["../../../../../src/components/Form/TextEditor/toolbar.tsx"],"sourcesContent":["import React from \"react\";\nimport { Heading1, Heading2, Heading3, SeparatorVertical } from \"lucide-react\";\n\nexport type HeadingLevel = 0 | 1 | 2 | 3;\n\nexport const ToolbarButton: React.FC<{\n onClick: () => void;\n active?: boolean;\n disabled?: boolean;\n title: string;\n children: React.ReactNode;\n ariaPressed?: boolean;\n}> = ({\n onClick,\n active = false,\n disabled = false,\n title,\n children,\n ariaPressed,\n}) => (\n <button\n onClick={onClick}\n className={`p-2 rounded transition-colors ${active ? \"bg-blue-200 text-blue-800\" : \"hover:bg-gray-200\"} ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}`}\n type=\"button\"\n disabled={disabled}\n title={title}\n aria-label={title}\n aria-pressed={ariaPressed}\n >\n {children}\n </button>\n);\n\nexport const ToolbarDivider = () => (\n <SeparatorVertical className=\"mx-2 h-6 w-px bg-gray-300\" />\n);\n\nexport const HeadingSelect: React.FC<{\n value: HeadingLevel;\n onChange: (value: HeadingLevel) => void;\n}> = ({ value, onChange }) => (\n <div className=\"flex items-center gap-2\">\n <select\n className=\"rounded border border-gray-300 bg-white px-2 py-1 text-sm\"\n aria-label=\"Heading level\"\n value={value}\n onChange={(e) => onChange(Number(e.target.value) as HeadingLevel)}\n >\n <option value={0}>Normal</option>\n <option value={1} className=\"text-2xl\">\n Heading 1\n </option>\n <option value={2} className=\"text-xl\">\n Heading 2\n </option>\n <option value={3} className=\"text-lg\">\n Heading 3\n </option>\n </select>\n {/*<Heading1 size={14} className=\"text-gray-500\" />\n <Heading2 size={14} className=\"text-gray-500\" />\n <Heading3 size={14} className=\"text-gray-500\" />*/}\n </div>\n);\n"],"names":["_a","value","onChange","_jsx","className","children","_jsxs","e","Number","target","onClick","_b","active","_c","disabled","title","ariaPressed","concat","type","SeparatorVertical"],"mappings":"gGAwCK,SAACA,OAAEC,EAAKD,EAAAC,MAAEC,EAAQF,EAAAE,SAAO,OAC5BC,EAAAA,IAAA,MAAA,CAAKC,UAAU,0BAAyBC,SACtCC,EAAAA,KAAA,SAAA,CACEF,UAAU,4DAA2D,aAC1D,gBACXH,MAAOA,EACPC,SAAU,SAACK,GAAM,OAAAL,EAASM,OAAOD,EAAEE,OAAOR,OAAzB,EAAgDI,SAAA,CAEjEF,EAAAA,IAAA,SAAA,CAAQF,MAAO,EAACI,SAAA,WAChBF,EAAAA,cAAQF,MAAO,EAAGG,UAAU,WAAUC,SAAA,cAGtCF,EAAAA,cAAQF,MAAO,EAAGG,UAAU,UAASC,SAAA,cAGrCF,EAAAA,cAAQF,MAAO,EAAGG,UAAU,UAASC,SAAA,kBAfb,wBA5BzB,SAACL,OACJU,EAAOV,EAAAU,QACPC,EAAAX,EAAAY,OAAAA,OAAM,IAAAD,GAAQA,EACdE,EAAAb,EAAAc,SAAAA,OAAQ,IAAAD,GAAQA,EAChBE,EAAKf,EAAAe,MACLV,EAAQL,EAAAK,SACRW,EAAWhB,EAAAgB,YACP,OACJb,EAAAA,cACEO,QAASA,EACTN,UAAW,iCAAAa,OAAiCL,EAAS,4BAA8B,oBAAmB,KAAAK,OAAIH,EAAW,gCAAkC,IACvJI,KAAK,SACLJ,SAAUA,EACVC,MAAOA,EAAK,aACAA,iBACEC,EAAWX,SAExBA,GAVC,yBAcwB,WAAM,OAClCF,MAACgB,EAAAA,kBAAiB,CAACf,UAAU,6BADK"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../../../prosemirror-state/dist/index.js"),t=require("../../../prosemirror-transform/dist/index.js"),n=require("../../../prosemirror-model/dist/index.js"),r=require("../../../prosemirror-commands/dist/index.js"),o=require("../../../prosemirror-schema-list/dist/index.js"),s=Object.defineProperty,a=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})};function i(e){const{state:t,transaction:n}=e;let{selection:r}=n,{doc:o}=n,{storedMarks:s}=n;return{...t,apply:t.apply.bind(t),applyTransaction:t.applyTransaction.bind(t),plugins:t.plugins,schema:t.schema,reconfigure:t.reconfigure.bind(t),toJSON:t.toJSON.bind(t),get storedMarks(){return s},get selection(){return r},get doc(){return o},get tr(){return r=n.selection,o=n.doc,s=n.storedMarks,n}}}var c=class{constructor(e){this.editor=e.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=e.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){const{rawCommands:e,editor:t,state:n}=this,{view:r}=t,{tr:o}=n,s=this.buildProps(o);return Object.fromEntries(Object.entries(e).map((([e,t])=>[e,(...e)=>{const n=t(...e)(s);return o.getMeta("preventDispatch")||this.hasCustomState||r.dispatch(o),n}])))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(e,t=!0){const{rawCommands:n,editor:r,state:o}=this,{view:s}=r,a=[],i=!!e,c=e||o.tr,d={...Object.fromEntries(Object.entries(n).map((([e,n])=>[e,(...e)=>{const r=this.buildProps(c,t),o=n(...e)(r);return a.push(o),d}]))),run:()=>(i||!t||c.getMeta("preventDispatch")||this.hasCustomState||s.dispatch(c),a.every((e=>!0===e)))};return d}createCan(e){const{rawCommands:t,state:n}=this,r=!1,o=e||n.tr,s=this.buildProps(o,r);return{...Object.fromEntries(Object.entries(t).map((([e,t])=>[e,(...e)=>t(...e)({...s,dispatch:void 0})]))),chain:()=>this.createChain(o,r)}}buildProps(e,t=!0){const{rawCommands:n,editor:r,state:o}=this,{view:s}=r,a={tr:e,editor:r,view:s,state:i({state:o,transaction:e}),dispatch:t?()=>{}:void 0,chain:()=>this.createChain(e,t),can:()=>this.createCan(e),get commands(){return Object.fromEntries(Object.entries(n).map((([e,t])=>[e,(...e)=>t(...e)(a)])))}};return a}};function d(e,n){const r=new t.Transform(e);return n.forEach((e=>{e.steps.forEach((e=>{r.step(e)}))})),r}var l=e=>{const t=e.childNodes;for(let n=t.length-1;n>=0;n-=1){const r=t[n];3===r.nodeType&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?e.removeChild(r):1===r.nodeType&&l(r)}return e};function p(e){if("undefined"==typeof window)throw new Error("[tiptap error]: there is no window object available, so this function cannot be used");const t=`<body>${e}</body>`,n=(new window.DOMParser).parseFromString(t,"text/html").body;return l(n)}function m(e,t,r){if(e instanceof n.Node||e instanceof n.Fragment)return e;r={slice:!0,parseOptions:{},...r};const o="string"==typeof e;if("object"==typeof e&&null!==e)try{if(Array.isArray(e)&&e.length>0)return n.Fragment.fromArray(e.map((e=>t.nodeFromJSON(e))));const o=t.nodeFromJSON(e);return r.errorOnInvalidContent&&o.check(),o}catch(n){if(r.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:n});return console.warn("[tiptap warn]: Invalid content.","Passed value:",e,"Error:",n),m("",t,r)}if(o){if(r.errorOnInvalidContent){let o=!1,s="";const a=new n.Schema({topNode:t.spec.topNode,marks:t.spec.marks,nodes:t.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:e=>(o=!0,s="string"==typeof e?e:e.outerHTML,null)}]}})});if(r.slice?n.DOMParser.fromSchema(a).parseSlice(p(e),r.parseOptions):n.DOMParser.fromSchema(a).parse(p(e),r.parseOptions),r.errorOnInvalidContent&&o)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${s}`)})}const o=n.DOMParser.fromSchema(t);return r.slice?o.parseSlice(p(e),r.parseOptions).content:o.parse(p(e),r.parseOptions)}return m("",t,r)}function u(e,t,n={},r={}){return m(e,t,{slice:!1,parseOptions:n,errorOnInvalidContent:r.errorOnInvalidContent})}function f(e){for(let t=0;t<e.edgeCount;t+=1){const{type:n}=e.edge(t);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}function h(e,t){for(let n=e.depth;n>0;n-=1){const r=e.node(n);if(t(r))return{pos:n>0?e.before(n):0,start:e.start(n),depth:n,node:r}}}function g(e){return t=>h(t.$from,e)}function y(e,t,n){if(void 0===e.config[t]&&e.parent)return y(e.parent,t,n);if("function"==typeof e.config[t]){return e.config[t].bind({...n,parent:e.parent?y(e.parent,t,n):null})}return e.config[t]}function k(e){return"function"==typeof e}function x(e,t=void 0,...n){return k(e)?t?e.bind(t)(...n):e(...n):e}function v(e){return{baseExtensions:e.filter((e=>"extension"===e.type)),nodeExtensions:e.filter((e=>"node"===e.type)),markExtensions:e.filter((e=>"mark"===e.type))}}function b(e,t,n){const{from:r,to:o}=t,{blockSeparator:s="\n\n",textSerializers:a={}}=n||{};let i="";return e.nodesBetween(r,o,((e,n,c,d)=>{var l;e.isBlock&&n>r&&(i+=s);const p=null==a?void 0:a[e.type.name];if(p)return c&&(i+=p({node:e,pos:n,parent:c,index:d,range:t})),!1;e.isText&&(i+=null==(l=null==e?void 0:e.text)?void 0:l.slice(Math.max(r,n)-n,o-n))})),i}function w(e){return Object.fromEntries(Object.entries(e.nodes).filter((([,e])=>e.spec.toText)).map((([e,t])=>[e,t.spec.toText])))}function M(e,t){if("string"==typeof e){if(!t.marks[e])throw Error(`There is no mark type named '${e}'. Maybe you forgot to add the extension?`);return t.marks[e]}return e}function S(e,t){const n=M(t,e.schema),{from:r,to:o,empty:s}=e.selection,a=[];s?(e.storedMarks&&a.push(...e.storedMarks),a.push(...e.selection.$head.marks())):e.doc.nodesBetween(r,o,(e=>{a.push(...e.marks)}));const i=a.find((e=>e.type.name===n.name));return i?{...i.attrs}:{}}function O(e,t){if("string"==typeof e){if(!t.nodes[e])throw Error(`There is no node type named '${e}'. Maybe you forgot to add the extension?`);return t.nodes[e]}return e}function C(e,t){return t.nodes[e]?"node":t.marks[e]?"mark":null}function E(e,t=JSON.stringify){const n={};return e.filter((e=>{const r=t(e);return!Object.prototype.hasOwnProperty.call(n,r)&&(n[r]=!0)}))}function T(e){const{mapping:t,steps:n}=e,r=[];return t.maps.forEach(((e,o)=>{const s=[];if(e.ranges.length)e.forEach(((e,t)=>{s.push({from:e,to:t})}));else{const{from:e,to:t}=n[o];if(void 0===e||void 0===t)return;s.push({from:e,to:t})}s.forEach((({from:e,to:n})=>{const s=t.slice(o).map(e,-1),a=t.slice(o).map(n),i=t.invert().map(s,-1),c=t.invert().map(a);r.push({oldRange:{from:i,to:c},newRange:{from:s,to:a}})}))})),function(e){const t=E(e);return 1===t.length?t:t.filter(((e,n)=>!t.filter(((e,t)=>t!==n)).some((t=>e.oldRange.from>=t.oldRange.from&&e.oldRange.to<=t.oldRange.to&&e.newRange.from>=t.newRange.from&&e.newRange.to<=t.newRange.to))))}(r)}function $(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function P(e,t,n={strict:!0}){const r=Object.keys(t);return!r.length||r.every((r=>n.strict?t[r]===e[r]:$(t[r])?t[r].test(e[r]):t[r]===e[r]))}function j(e,t,n={}){return e.find((e=>e.type===t&&P(Object.fromEntries(Object.keys(n).map((t=>[t,e.attrs[t]]))),n)))}function A(e,t,n={}){return!!j(e,t,n)}function I(e,t,n){var r;if(!e||!t)return;let o=e.parent.childAfter(e.parentOffset);if(o.node&&o.node.marks.some((e=>e.type===t))||(o=e.parent.childBefore(e.parentOffset)),!o.node||!o.node.marks.some((e=>e.type===t)))return;n=n||(null==(r=o.node.marks[0])?void 0:r.attrs);if(!j([...o.node.marks],t,n))return;let s=o.index,a=e.start()+o.offset,i=s+1,c=a+o.node.nodeSize;for(;s>0&&A([...e.parent.child(s-1).marks],t,n);)s-=1,a-=e.parent.child(s).nodeSize;for(;i<e.parent.childCount&&A([...e.parent.child(i).marks],t,n);)c+=e.parent.child(i).nodeSize,i+=1;return{from:a,to:c}}function R(e,t,n){const r=[];return e===t?n.resolve(e).marks().forEach((t=>{const o=I(n.resolve(e),t.type);o&&r.push({mark:t,...o})})):n.nodesBetween(e,t,((e,t)=>{e&&void 0!==(null==e?void 0:e.nodeSize)&&r.push(...e.marks.map((n=>({from:t,to:t+e.nodeSize,mark:n}))))})),r}function N(e,t,n){return Object.fromEntries(Object.entries(n).filter((([n])=>{const r=e.find((e=>e.type===t&&e.name===n));return!!r&&r.attribute.keepOnSplit})))}function B(e,t,n={}){const{empty:r,ranges:o}=e.selection,s=t?M(t,e.schema):null;if(r)return!!(e.storedMarks||e.selection.$from.marks()).filter((e=>!s||s.name===e.type.name)).find((e=>P(e.attrs,n,{strict:!1})));let a=0;const i=[];if(o.forEach((({$from:t,$to:n})=>{const r=t.pos,o=n.pos;e.doc.nodesBetween(r,o,((e,t)=>{if(!e.isText&&!e.marks.length)return;const n=Math.max(r,t),s=Math.min(o,t+e.nodeSize);a+=s-n,i.push(...e.marks.map((e=>({mark:e,from:n,to:s}))))}))})),0===a)return!1;const c=i.filter((e=>!s||s.name===e.mark.type.name)).filter((e=>P(e.mark.attrs,n,{strict:!1}))).reduce(((e,t)=>e+t.to-t.from),0),d=i.filter((e=>!s||e.mark.type!==s&&e.mark.type.excludes(s))).reduce(((e,t)=>e+t.to-t.from),0);return(c>0?c+d:c)>=a}function z(e,t,n={}){const{from:r,to:o,empty:s}=e.selection,a=t?O(t,e.schema):null,i=[];e.doc.nodesBetween(r,o,((e,t)=>{if(e.isText)return;const n=Math.max(r,t),s=Math.min(o,t+e.nodeSize);i.push({node:e,from:n,to:s})}));const c=o-r,d=i.filter((e=>!a||a.name===e.node.type.name)).filter((e=>P(e.node.attrs,n,{strict:!1})));if(s)return!!d.length;return d.reduce(((e,t)=>e+t.to-t.from),0)>=c}function F(e,t){const{nodeExtensions:n}=v(t),r=n.find((t=>t.name===e));if(!r)return!1;const o=x(y(r,"group",{name:r.name,options:r.options,storage:r.storage}));return"string"==typeof o&&o.split(" ").includes("list")}function D(e,{checkChildren:t=!0,ignoreWhitespace:n=!1}={}){var r;if(n){if("hardBreak"===e.type.name)return!0;if(e.isText)return/^\s*$/m.test(null!=(r=e.text)?r:"")}if(e.isText)return!e.text;if(e.isAtom||e.isLeaf)return!1;if(0===e.content.childCount)return!0;if(t){let r=!0;return e.content.forEach((e=>{!1!==r&&(D(e,{ignoreWhitespace:n,checkChildren:t})||(r=!1))})),r}return!1}function L(t){return t instanceof e.TextSelection}function K(e=0,t=0,n=0){return Math.min(Math.max(e,t),n)}function V(t,n=null){if(!n)return null;const r=e.Selection.atStart(t),o=e.Selection.atEnd(t);if("start"===n||!0===n)return r;if("end"===n)return o;const s=r.from,a=o.to;return"all"===n?e.TextSelection.create(t,K(0,s,a),K(t.content.size,s,a)):e.TextSelection.create(t,K(n,s,a),K(n,s,a))}function q(n,r,o){const s=n.steps.length-1;if(s<r)return;const a=n.steps[s];if(!(a instanceof t.ReplaceStep||a instanceof t.ReplaceAroundStep))return;const i=n.mapping.maps[s];let c=0;i.forEach(((e,t,n,r)=>{0===c&&(c=r)})),n.setSelection(e.Selection.near(n.doc.resolve(c),o))}var _=class{constructor(e){this.find=e.find,this.handler=e.handler}};function W(e){return"Object"===function(e){return Object.prototype.toString.call(e).slice(8,-1)}(e)&&(e.constructor===Object&&Object.getPrototypeOf(e)===Object.prototype)}function J(e,t){const n={...e};return W(e)&&W(t)&&Object.keys(t).forEach((r=>{W(t[r])&&W(e[r])?n[r]=J(e[r],t[r]):n[r]=t[r]})),n}var U=class{constructor(e={}){this.type="extendable",this.parent=null,this.child=null,this.name="",this.config={name:this.name},this.config={...this.config,...e},this.name=this.config.name}get options(){return{...x(y(this,"addOptions",{name:this.name}))||{}}}get storage(){return{...x(y(this,"addStorage",{name:this.name,options:this.options}))||{}}}configure(e={}){const t=this.extend({...this.config,addOptions:()=>J(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){const t=new this.constructor({...this.config,...e});return t.parent=this,this.child=t,t.name="name"in e?e.name:t.parent.name,t}},H=class{constructor(e){this.find=e.find,this.handler=e.handler}},G={};a(G,{ClipboardTextSerializer:()=>X,Commands:()=>lt,Delete:()=>pt,Drop:()=>mt,Editable:()=>ut,FocusEvents:()=>ht,Keymap:()=>gt,Paste:()=>yt,Tabindex:()=>kt,focusEventsPluginKey:()=>ft});var Q=class e extends U{constructor(){super(...arguments),this.type="extension"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},X=Q.create({name:"clipboardTextSerializer",addOptions:()=>({blockSeparator:void 0}),addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{const{editor:e}=this,{state:t,schema:n}=e,{doc:r,selection:o}=t,{ranges:s}=o,a=Math.min(...s.map((e=>e.$from.pos))),i=Math.max(...s.map((e=>e.$to.pos))),c=w(n);return b(r,{from:a,to:i},{...void 0!==this.options.blockSeparator?{blockSeparator:this.options.blockSeparator}:{},textSerializers:c})}}})]}}),Y={};a(Y,{blur:()=>Z,clearContent:()=>ee,clearNodes:()=>te,command:()=>ne,createParagraphNear:()=>re,cut:()=>oe,deleteCurrentNode:()=>se,deleteNode:()=>ae,deleteRange:()=>ie,deleteSelection:()=>ce,enter:()=>de,exitCode:()=>le,extendMarkRange:()=>pe,first:()=>me,focus:()=>he,forEach:()=>ge,insertContent:()=>ye,insertContentAt:()=>ke,joinBackward:()=>be,joinDown:()=>ve,joinForward:()=>we,joinItemBackward:()=>Me,joinItemForward:()=>Se,joinTextblockBackward:()=>Oe,joinTextblockForward:()=>Ce,joinUp:()=>xe,keyboardShortcut:()=>Te,lift:()=>$e,liftEmptyBlock:()=>Pe,liftListItem:()=>je,newlineInCode:()=>Ae,resetAttributes:()=>Re,scrollIntoView:()=>Ne,selectAll:()=>Be,selectNodeBackward:()=>ze,selectNodeForward:()=>Fe,selectParentNode:()=>De,selectTextblockEnd:()=>Le,selectTextblockStart:()=>Ke,setContent:()=>Ve,setMark:()=>qe,setMeta:()=>_e,setNode:()=>We,setNodeSelection:()=>Je,setTextSelection:()=>Ue,sinkListItem:()=>He,splitBlock:()=>Qe,splitListItem:()=>Xe,toggleList:()=>et,toggleMark:()=>tt,toggleNode:()=>nt,toggleWrap:()=>rt,undoInputRule:()=>ot,unsetAllMarks:()=>st,unsetMark:()=>at,updateAttributes:()=>it,wrapIn:()=>ct,wrapInList:()=>dt});var Z=()=>({editor:e,view:t})=>(requestAnimationFrame((()=>{var n;e.isDestroyed||(t.dom.blur(),null==(n=null==window?void 0:window.getSelection())||n.removeAllRanges())})),!0),ee=(e=!0)=>({commands:t})=>t.setContent("",{emitUpdate:e}),te=()=>({state:e,tr:n,dispatch:r})=>{const{selection:o}=n,{ranges:s}=o;return!r||(s.forEach((({$from:r,$to:o})=>{e.doc.nodesBetween(r.pos,o.pos,((e,r)=>{if(e.type.isText)return;const{doc:o,mapping:s}=n,a=o.resolve(s.map(r)),i=o.resolve(s.map(r+e.nodeSize)),c=a.blockRange(i);if(!c)return;const d=t.liftTarget(c);if(e.type.isTextblock){const{defaultType:e}=a.parent.contentMatchAt(a.index());n.setNodeMarkup(c.start,e)}(d||0===d)&&n.lift(c,d)}))})),!0)},ne=e=>t=>e(t),re=()=>({state:e,dispatch:t})=>r.createParagraphNear(e,t),oe=(t,n)=>({editor:r,tr:o})=>{const{state:s}=r,a=s.doc.slice(t.from,t.to);o.deleteRange(t.from,t.to);const i=o.mapping.map(n);return o.insert(i,a.content),o.setSelection(new e.TextSelection(o.doc.resolve(Math.max(i-1,0)))),!0},se=()=>({tr:e,dispatch:t})=>{const{selection:n}=e,r=n.$anchor.node();if(r.content.size>0)return!1;const o=e.selection.$anchor;for(let n=o.depth;n>0;n-=1){if(o.node(n).type===r.type){if(t){const t=o.before(n),r=o.after(n);e.delete(t,r).scrollIntoView()}return!0}}return!1},ae=e=>({tr:t,state:n,dispatch:r})=>{const o=O(e,n.schema),s=t.selection.$anchor;for(let e=s.depth;e>0;e-=1){if(s.node(e).type===o){if(r){const n=s.before(e),r=s.after(e);t.delete(n,r).scrollIntoView()}return!0}}return!1},ie=e=>({tr:t,dispatch:n})=>{const{from:r,to:o}=e;return n&&t.delete(r,o),!0},ce=()=>({state:e,dispatch:t})=>r.deleteSelection(e,t),de=()=>({commands:e})=>e.keyboardShortcut("Enter"),le=()=>({state:e,dispatch:t})=>r.exitCode(e,t),pe=(t,n={})=>({tr:r,state:o,dispatch:s})=>{const a=M(t,o.schema),{doc:i,selection:c}=r,{$from:d,from:l,to:p}=c;if(s){const t=I(d,a,n);if(t&&t.from<=l&&t.to>=p){const n=e.TextSelection.create(i,t.from,t.to);r.setSelection(n)}}return!0},me=e=>t=>{const n="function"==typeof e?e(t):e;for(let e=0;e<n.length;e+=1)if(n[e](t))return!0;return!1};function ue(){return"Android"===navigator.platform||/android/i.test(navigator.userAgent)}function fe(){return["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}var he=(e=null,t={})=>({editor:n,view:r,tr:o,dispatch:s})=>{t={scrollIntoView:!0,...t};const a=()=>{(fe()||ue())&&r.dom.focus(),requestAnimationFrame((()=>{n.isDestroyed||(r.focus(),(null==t?void 0:t.scrollIntoView)&&n.commands.scrollIntoView())}))};if(r.hasFocus()&&null===e||!1===e)return!0;if(s&&null===e&&!L(n.state.selection))return a(),!0;const i=V(o.doc,e)||n.state.selection,c=n.state.selection.eq(i);return s&&(c||o.setSelection(i),c&&o.storedMarks&&o.setStoredMarks(o.storedMarks),a()),!0},ge=(e,t)=>n=>e.every(((e,r)=>t(e,{...n,index:r}))),ye=(e,t)=>({tr:n,commands:r})=>r.insertContentAt({from:n.selection.from,to:n.selection.to},e,t),ke=(e,t,r)=>({tr:o,dispatch:s,editor:a})=>{var i;if(s){let s;r={parseOptions:a.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...r};const{selection:c}=a.state,d=e=>{a.emit("contentError",{editor:a,error:e,disableCollaboration:()=>{"collaboration"in a.storage&&"object"==typeof a.storage.collaboration&&a.storage.collaboration&&(a.storage.collaboration.isDisabled=!0)}})},l={preserveWhitespace:"full",...r.parseOptions};if(!r.errorOnInvalidContent&&!a.options.enableContentCheck&&a.options.emitContentError)try{m(t,a.schema,{parseOptions:l,errorOnInvalidContent:!0})}catch(e){d(e)}try{s=m(t,a.schema,{parseOptions:l,errorOnInvalidContent:null!=(i=r.errorOnInvalidContent)?i:a.options.enableContentCheck})}catch(e){return d(e),!1}let{from:p,to:u}="number"==typeof e?{from:e,to:e}:{from:e.from,to:e.to},f=!0,h=!0;if(("type"in s?[s]:s).forEach((e=>{e.check(),f=!!f&&(e.isText&&0===e.marks.length),h=!!h&&e.isBlock})),p===u&&h){const{parent:e}=o.doc.resolve(p);e.isTextblock&&!e.type.spec.code&&!e.childCount&&(p-=1,u+=1)}let g;if(f){if(Array.isArray(t))g=t.map((e=>e.text||"")).join("");else if(t instanceof n.Fragment){let e="";t.forEach((t=>{t.text&&(e+=t.text)})),g=e}else g="object"==typeof t&&t&&t.text?t.text:t;o.insertText(g,p,u)}else{g=s;const e=0===c.$from.parentOffset,t=c.$from.node().isText||c.$from.node().isTextblock,n=c.$from.node().content.size>0;e&&t&&n&&(p=Math.max(0,p-1)),o.replaceWith(p,u,g)}r.updateSelection&&q(o,o.steps.length-1,-1),r.applyInputRules&&o.setMeta("applyInputRules",{from:p,text:g}),r.applyPasteRules&&o.setMeta("applyPasteRules",{from:p,text:g})}return!0},xe=()=>({state:e,dispatch:t})=>r.joinUp(e,t),ve=()=>({state:e,dispatch:t})=>r.joinDown(e,t),be=()=>({state:e,dispatch:t})=>r.joinBackward(e,t),we=()=>({state:e,dispatch:t})=>r.joinForward(e,t),Me=()=>({state:e,dispatch:n,tr:r})=>{try{const o=t.joinPoint(e.doc,e.selection.$from.pos,-1);return null!=o&&(r.join(o,2),n&&n(r),!0)}catch{return!1}},Se=()=>({state:e,dispatch:n,tr:r})=>{try{const o=t.joinPoint(e.doc,e.selection.$from.pos,1);return null!=o&&(r.join(o,2),n&&n(r),!0)}catch{return!1}},Oe=()=>({state:e,dispatch:t})=>r.joinTextblockBackward(e,t),Ce=()=>({state:e,dispatch:t})=>r.joinTextblockForward(e,t);function Ee(){return"undefined"!=typeof navigator&&/Mac/.test(navigator.platform)}var Te=e=>({editor:t,view:n,tr:r,dispatch:o})=>{const s=function(e){const t=e.split(/-(?!$)/);let n,r,o,s,a=t[t.length-1];"Space"===a&&(a=" ");for(let e=0;e<t.length-1;e+=1){const a=t[e];if(/^(cmd|meta|m)$/i.test(a))s=!0;else if(/^a(lt)?$/i.test(a))n=!0;else if(/^(c|ctrl|control)$/i.test(a))r=!0;else if(/^s(hift)?$/i.test(a))o=!0;else{if(!/^mod$/i.test(a))throw new Error(`Unrecognized modifier name: ${a}`);fe()||Ee()?s=!0:r=!0}}return n&&(a=`Alt-${a}`),r&&(a=`Ctrl-${a}`),s&&(a=`Meta-${a}`),o&&(a=`Shift-${a}`),a}(e).split(/-(?!$)/),a=s.find((e=>!["Alt","Ctrl","Meta","Shift"].includes(e))),i=new KeyboardEvent("keydown",{key:"Space"===a?" ":a,altKey:s.includes("Alt"),ctrlKey:s.includes("Ctrl"),metaKey:s.includes("Meta"),shiftKey:s.includes("Shift"),bubbles:!0,cancelable:!0}),c=t.captureTransaction((()=>{n.someProp("handleKeyDown",(e=>e(n,i)))}));return null==c||c.steps.forEach((e=>{const t=e.map(r.mapping);t&&o&&r.maybeStep(t)})),!0},$e=(e,t={})=>({state:n,dispatch:o})=>!!z(n,O(e,n.schema),t)&&r.lift(n,o),Pe=()=>({state:e,dispatch:t})=>r.liftEmptyBlock(e,t),je=e=>({state:t,dispatch:n})=>{const r=O(e,t.schema);return o.liftListItem(r)(t,n)},Ae=()=>({state:e,dispatch:t})=>r.newlineInCode(e,t);function Ie(e,t){const n="string"==typeof t?[t]:t;return Object.keys(e).reduce(((t,r)=>(n.includes(r)||(t[r]=e[r]),t)),{})}var Re=(e,t)=>({tr:n,state:r,dispatch:o})=>{let s=null,a=null;const i=C("string"==typeof e?e:e.name,r.schema);return!!i&&("node"===i&&(s=O(e,r.schema)),"mark"===i&&(a=M(e,r.schema)),o&&n.selection.ranges.forEach((e=>{r.doc.nodesBetween(e.$from.pos,e.$to.pos,((e,r)=>{s&&s===e.type&&n.setNodeMarkup(r,void 0,Ie(e.attrs,t)),a&&e.marks.length&&e.marks.forEach((o=>{a===o.type&&n.addMark(r,r+e.nodeSize,a.create(Ie(o.attrs,t)))}))}))})),!0)},Ne=()=>({tr:e,dispatch:t})=>(t&&e.scrollIntoView(),!0),Be=()=>({tr:t,dispatch:n})=>{if(n){const n=new e.AllSelection(t.doc);t.setSelection(n)}return!0},ze=()=>({state:e,dispatch:t})=>r.selectNodeBackward(e,t),Fe=()=>({state:e,dispatch:t})=>r.selectNodeForward(e,t),De=()=>({state:e,dispatch:t})=>r.selectParentNode(e,t),Le=()=>({state:e,dispatch:t})=>r.selectTextblockEnd(e,t),Ke=()=>({state:e,dispatch:t})=>r.selectTextblockStart(e,t),Ve=(e,{errorOnInvalidContent:t,emitUpdate:n=!0,parseOptions:r={}}={})=>({editor:o,tr:s,dispatch:a,commands:i})=>{const{doc:c}=s;if("full"!==r.preserveWhitespace){const i=u(e,o.schema,r,{errorOnInvalidContent:null!=t?t:o.options.enableContentCheck});return a&&s.replaceWith(0,c.content.size,i).setMeta("preventUpdate",!n),!0}return a&&s.setMeta("preventUpdate",!n),i.insertContentAt({from:0,to:c.content.size},e,{parseOptions:r,errorOnInvalidContent:null!=t?t:o.options.enableContentCheck})};var qe=(e,t={})=>({tr:n,state:r,dispatch:o})=>{const{selection:s}=n,{empty:a,ranges:i}=s,c=M(e,r.schema);if(o)if(a){const e=S(r,c);n.addStoredMark(c.create({...e,...t}))}else i.forEach((e=>{const o=e.$from.pos,s=e.$to.pos;r.doc.nodesBetween(o,s,((e,r)=>{const a=Math.max(r,o),i=Math.min(r+e.nodeSize,s);e.marks.find((e=>e.type===c))?e.marks.forEach((e=>{c===e.type&&n.addMark(a,i,c.create({...e.attrs,...t}))})):n.addMark(a,i,c.create(t))}))}));return function(e,t,n){var r;const{selection:o}=t;let s=null;if(L(o)&&(s=o.$cursor),s){const t=null!=(r=e.storedMarks)?r:s.marks();return!!n.isInSet(t)||!t.some((e=>e.type.excludes(n)))}const{ranges:a}=o;return a.some((({$from:t,$to:r})=>{let o=0===t.depth&&e.doc.inlineContent&&e.doc.type.allowsMarkType(n);return e.doc.nodesBetween(t.pos,r.pos,((e,t,r)=>{if(o)return!1;if(e.isInline){const t=!r||r.type.allowsMarkType(n),s=!!n.isInSet(e.marks)||!e.marks.some((e=>e.type.excludes(n)));o=t&&s}return!o})),o}))}(r,n,c)},_e=(e,t)=>({tr:n})=>(n.setMeta(e,t),!0),We=(e,t={})=>({state:n,dispatch:o,chain:s})=>{const a=O(e,n.schema);let i;return n.selection.$anchor.sameParent(n.selection.$head)&&(i=n.selection.$anchor.parent.attrs),a.isTextblock?s().command((({commands:e})=>!!r.setBlockType(a,{...i,...t})(n)||e.clearNodes())).command((({state:e})=>r.setBlockType(a,{...i,...t})(e,o))).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},Je=t=>({tr:n,dispatch:r})=>{if(r){const{doc:r}=n,o=K(t,0,r.content.size),s=e.NodeSelection.create(r,o);n.setSelection(s)}return!0},Ue=t=>({tr:n,dispatch:r})=>{if(r){const{doc:r}=n,{from:o,to:s}="number"==typeof t?{from:t,to:t}:t,a=e.TextSelection.atStart(r).from,i=e.TextSelection.atEnd(r).to,c=K(o,a,i),d=K(s,a,i),l=e.TextSelection.create(r,c,d);n.setSelection(l)}return!0},He=e=>({state:t,dispatch:n})=>{const r=O(e,t.schema);return o.sinkListItem(r)(t,n)};function Ge(e,t){const n=e.storedMarks||e.selection.$to.parentOffset&&e.selection.$from.marks();if(n){const r=n.filter((e=>null==t?void 0:t.includes(e.type.name)));e.tr.ensureMarks(r)}}var Qe=({keepMarks:n=!0}={})=>({tr:r,state:o,dispatch:s,editor:a})=>{const{selection:i,doc:c}=r,{$from:d,$to:l}=i,p=N(a.extensionManager.attributes,d.node().type.name,d.node().attrs);if(i instanceof e.NodeSelection&&i.node.isBlock)return!(!d.parentOffset||!t.canSplit(c,d.pos))&&(s&&(n&&Ge(o,a.extensionManager.splittableMarks),r.split(d.pos).scrollIntoView()),!0);if(!d.parent.isBlock)return!1;const m=l.parentOffset===l.parent.content.size,u=0===d.depth?void 0:f(d.node(-1).contentMatchAt(d.indexAfter(-1)));let h=m&&u?[{type:u,attrs:p}]:void 0,g=t.canSplit(r.doc,r.mapping.map(d.pos),1,h);if(h||g||!t.canSplit(r.doc,r.mapping.map(d.pos),1,u?[{type:u}]:void 0)||(g=!0,h=u?[{type:u,attrs:p}]:void 0),s){if(g&&(i instanceof e.TextSelection&&r.deleteSelection(),r.split(r.mapping.map(d.pos),1,h),u&&!m&&!d.parentOffset&&d.parent.type!==u)){const e=r.mapping.map(d.before()),t=r.doc.resolve(e);d.node(-1).canReplaceWith(t.index(),t.index()+1,u)&&r.setNodeMarkup(r.mapping.map(d.before()),u)}n&&Ge(o,a.extensionManager.splittableMarks),r.scrollIntoView()}return g},Xe=(r,o={})=>({tr:s,state:a,dispatch:i,editor:c})=>{var d;const l=O(r,a.schema),{$from:p,$to:m}=a.selection,u=a.selection.node;if(u&&u.isBlock||p.depth<2||!p.sameParent(m))return!1;const f=p.node(-1);if(f.type!==l)return!1;const h=c.extensionManager.attributes;if(0===p.parent.content.size&&p.node(-1).childCount===p.indexAfter(-1)){if(2===p.depth||p.node(-3).type!==l||p.index(-2)!==p.node(-2).childCount-1)return!1;if(i){let t=n.Fragment.empty;const r=p.index(-1)?1:p.index(-2)?2:3;for(let e=p.depth-r;e>=p.depth-3;e-=1)t=n.Fragment.from(p.node(e).copy(t));const a=p.indexAfter(-1)<p.node(-2).childCount?1:p.indexAfter(-2)<p.node(-3).childCount?2:3,i={...N(h,p.node().type.name,p.node().attrs),...o},c=(null==(d=l.contentMatch.defaultType)?void 0:d.createAndFill(i))||void 0;t=t.append(n.Fragment.from(l.createAndFill(null,c)||void 0));const m=p.before(p.depth-(r-1));s.replace(m,p.after(-a),new n.Slice(t,4-r,0));let u=-1;s.doc.nodesBetween(m,s.doc.content.size,((e,t)=>{if(u>-1)return!1;e.isTextblock&&0===e.content.size&&(u=t+1)})),u>-1&&s.setSelection(e.TextSelection.near(s.doc.resolve(u))),s.scrollIntoView()}return!0}const g=m.pos===p.end()?f.contentMatchAt(0).defaultType:null,y={...N(h,f.type.name,f.attrs),...o},k={...N(h,p.node().type.name,p.node().attrs),...o};s.delete(p.pos,m.pos);const x=g?[{type:l,attrs:y},{type:g,attrs:k}]:[{type:l,attrs:y}];if(!t.canSplit(s.doc,p.pos,2))return!1;if(i){const{selection:e,storedMarks:t}=a,{splittableMarks:n}=c.extensionManager,r=t||e.$to.parentOffset&&e.$from.marks();if(s.split(p.pos,2,x).scrollIntoView(),!r||!i)return!0;const o=r.filter((e=>n.includes(e.type.name)));s.ensureMarks(o)}return!0},Ye=(e,n)=>{const r=g((e=>e.type===n))(e.selection);if(!r)return!0;const o=e.doc.resolve(Math.max(0,r.pos-1)).before(r.depth);if(void 0===o)return!0;const s=e.doc.nodeAt(o);return r.node.type!==(null==s?void 0:s.type)||!t.canJoin(e.doc,r.pos)||(e.join(r.pos),!0)},Ze=(e,n)=>{const r=g((e=>e.type===n))(e.selection);if(!r)return!0;const o=e.doc.resolve(r.start).after(r.depth);if(void 0===o)return!0;const s=e.doc.nodeAt(o);return r.node.type!==(null==s?void 0:s.type)||!t.canJoin(e.doc,o)||(e.join(o),!0)},et=(e,t,n,r={})=>({editor:o,tr:s,state:a,dispatch:i,chain:c,commands:d,can:l})=>{const{extensions:p,splittableMarks:m}=o.extensionManager,u=O(e,a.schema),f=O(t,a.schema),{selection:h,storedMarks:y}=a,{$from:k,$to:x}=h,v=k.blockRange(x),b=y||h.$to.parentOffset&&h.$from.marks();if(!v)return!1;const w=g((e=>F(e.type.name,p)))(h);if(v.depth>=1&&w&&v.depth-w.depth<=1){if(w.node.type===u)return d.liftListItem(f);if(F(w.node.type.name,p)&&u.validContent(w.node.content)&&i)return c().command((()=>(s.setNodeMarkup(w.pos,u),!0))).command((()=>Ye(s,u))).command((()=>Ze(s,u))).run()}return n&&b&&i?c().command((()=>{const e=l().wrapInList(u,r),t=b.filter((e=>m.includes(e.type.name)));return s.ensureMarks(t),!!e||d.clearNodes()})).wrapInList(u,r).command((()=>Ye(s,u))).command((()=>Ze(s,u))).run():c().command((()=>!!l().wrapInList(u,r)||d.clearNodes())).wrapInList(u,r).command((()=>Ye(s,u))).command((()=>Ze(s,u))).run()},tt=(e,t={},n={})=>({state:r,commands:o})=>{const{extendEmptyMarkRange:s=!1}=n,a=M(e,r.schema);return B(r,a,t)?o.unsetMark(a,{extendEmptyMarkRange:s}):o.setMark(a,t)},nt=(e,t,n={})=>({state:r,commands:o})=>{const s=O(e,r.schema),a=O(t,r.schema),i=z(r,s,n);let c;return r.selection.$anchor.sameParent(r.selection.$head)&&(c=r.selection.$anchor.parent.attrs),i?o.setNode(a,c):o.setNode(s,{...c,...n})},rt=(e,t={})=>({state:n,commands:r})=>{const o=O(e,n.schema);return z(n,o,t)?r.lift(o):r.wrapIn(o,t)},ot=()=>({state:e,dispatch:t})=>{const n=e.plugins;for(let r=0;r<n.length;r+=1){const o=n[r];let s;if(o.spec.isInputRules&&(s=o.getState(e))){if(t){const t=e.tr,n=s.transform;for(let e=n.steps.length-1;e>=0;e-=1)t.step(n.steps[e].invert(n.docs[e]));if(s.text){const n=t.doc.resolve(s.from).marks();t.replaceWith(s.from,s.to,e.schema.text(s.text,n))}else t.delete(s.from,s.to)}return!0}}return!1},st=()=>({tr:e,dispatch:t})=>{const{selection:n}=e,{empty:r,ranges:o}=n;return r||t&&o.forEach((t=>{e.removeMark(t.$from.pos,t.$to.pos)})),!0},at=(e,t={})=>({tr:n,state:r,dispatch:o})=>{var s;const{extendEmptyMarkRange:a=!1}=t,{selection:i}=n,c=M(e,r.schema),{$from:d,empty:l,ranges:p}=i;if(!o)return!0;if(l&&a){let{from:e,to:t}=i;const r=null==(s=d.marks().find((e=>e.type===c)))?void 0:s.attrs,o=I(d,c,r);o&&(e=o.from,t=o.to),n.removeMark(e,t,c)}else p.forEach((e=>{n.removeMark(e.$from.pos,e.$to.pos,c)}));return n.removeStoredMark(c),!0},it=(e,t={})=>({tr:n,state:r,dispatch:o})=>{let s=null,a=null;const i=C("string"==typeof e?e:e.name,r.schema);return!!i&&("node"===i&&(s=O(e,r.schema)),"mark"===i&&(a=M(e,r.schema)),o&&n.selection.ranges.forEach((e=>{const o=e.$from.pos,i=e.$to.pos;let c,d,l,p;n.selection.empty?r.doc.nodesBetween(o,i,((e,t)=>{s&&s===e.type&&(l=Math.max(t,o),p=Math.min(t+e.nodeSize,i),c=t,d=e)})):r.doc.nodesBetween(o,i,((e,r)=>{r<o&&s&&s===e.type&&(l=Math.max(r,o),p=Math.min(r+e.nodeSize,i),c=r,d=e),r>=o&&r<=i&&(s&&s===e.type&&n.setNodeMarkup(r,void 0,{...e.attrs,...t}),a&&e.marks.length&&e.marks.forEach((s=>{if(a===s.type){const c=Math.max(r,o),d=Math.min(r+e.nodeSize,i);n.addMark(c,d,a.create({...s.attrs,...t}))}})))})),d&&(void 0!==c&&n.setNodeMarkup(c,void 0,{...d.attrs,...t}),a&&d.marks.length&&d.marks.forEach((e=>{a===e.type&&n.addMark(l,p,a.create({...e.attrs,...t}))})))})),!0)},ct=(e,t={})=>({state:n,dispatch:o})=>{const s=O(e,n.schema);return r.wrapIn(s,t)(n,o)},dt=(e,t={})=>({state:n,dispatch:r})=>{const s=O(e,n.schema);return o.wrapInList(s,t)(n,r)},lt=Q.create({name:"commands",addCommands:()=>({...Y})}),pt=Q.create({name:"delete",onUpdate({transaction:e,appendedTransactions:n}){var r,o,s;const a=()=>{var r,o,s,a;if(null!=(a=null==(s=null==(o=null==(r=this.editor.options.coreExtensionOptions)?void 0:r.delete)?void 0:o.filterTransaction)?void 0:s.call(o,e))?a:e.getMeta("y-sync$"))return;const i=d(e.before,[e,...n]);T(i).forEach((t=>{i.mapping.mapResult(t.oldRange.from).deletedAfter&&i.mapping.mapResult(t.oldRange.to).deletedBefore&&i.before.nodesBetween(t.oldRange.from,t.oldRange.to,((n,r)=>{const o=r+n.nodeSize-2,s=t.oldRange.from<=r&&o<=t.oldRange.to;this.editor.emit("delete",{type:"node",node:n,from:r,to:o,newFrom:i.mapping.map(r),newTo:i.mapping.map(o),deletedRange:t.oldRange,newRange:t.newRange,partial:!s,editor:this.editor,transaction:e,combinedTransform:i})}))}));const c=i.mapping;i.steps.forEach(((n,r)=>{var o,s;if(n instanceof t.RemoveMarkStep){const t=c.slice(r).map(n.from,-1),a=c.slice(r).map(n.to),d=c.invert().map(t,-1),l=c.invert().map(a),p=null==(o=i.doc.nodeAt(t-1))?void 0:o.marks.some((e=>e.eq(n.mark))),m=null==(s=i.doc.nodeAt(a))?void 0:s.marks.some((e=>e.eq(n.mark)));this.editor.emit("delete",{type:"mark",mark:n.mark,from:n.from,to:n.to,deletedRange:{from:d,to:l},newRange:{from:t,to:a},partial:Boolean(m||p),editor:this.editor,transaction:e,combinedTransform:i})}}))};null==(s=null==(o=null==(r=this.editor.options.coreExtensionOptions)?void 0:r.delete)?void 0:o.async)||s?setTimeout(a,0):a()}}),mt=Q.create({name:"drop",addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("tiptapDrop"),props:{handleDrop:(e,t,n,r)=>{this.editor.emit("drop",{editor:this.editor,event:t,slice:n,moved:r})}}})]}}),ut=Q.create({name:"editable",addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("editable"),props:{editable:()=>this.editor.options.editable}})]}}),ft=new e.PluginKey("focusEvents"),ht=Q.create({name:"focusEvents",addProseMirrorPlugins(){const{editor:t}=this;return[new e.Plugin({key:ft,props:{handleDOMEvents:{focus:(e,n)=>{t.isFocused=!0;const r=t.state.tr.setMeta("focus",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1},blur:(e,n)=>{t.isFocused=!1;const r=t.state.tr.setMeta("blur",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1}}}})]}}),gt=Q.create({name:"keymap",addKeyboardShortcuts(){const t=()=>this.editor.commands.first((({commands:t})=>[()=>t.undoInputRule(),()=>t.command((({tr:n})=>{const{selection:r,doc:o}=n,{empty:s,$anchor:a}=r,{pos:i,parent:c}=a,d=a.parent.isTextblock&&i>0?n.doc.resolve(i-1):a,l=d.parent.type.spec.isolating,p=a.pos-a.parentOffset,m=l&&1===d.parent.childCount?p===a.pos:e.Selection.atStart(o).from===i;return!(!s||!c.type.isTextblock||c.textContent.length||!m||m&&"paragraph"===a.parent.type.name)&&t.clearNodes()})),()=>t.deleteSelection(),()=>t.joinBackward(),()=>t.selectNodeBackward()])),n=()=>this.editor.commands.first((({commands:e})=>[()=>e.deleteSelection(),()=>e.deleteCurrentNode(),()=>e.joinForward(),()=>e.selectNodeForward()])),r={Enter:()=>this.editor.commands.first((({commands:e})=>[()=>e.newlineInCode(),()=>e.createParagraphNear(),()=>e.liftEmptyBlock(),()=>e.splitBlock()])),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:t,"Mod-Backspace":t,"Shift-Backspace":t,Delete:n,"Mod-Delete":n,"Mod-a":()=>this.editor.commands.selectAll()},o={...r},s={...r,"Ctrl-h":t,"Alt-Backspace":t,"Ctrl-d":n,"Ctrl-Alt-Backspace":n,"Alt-Delete":n,"Alt-d":n,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return fe()||Ee()?s:o},addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("clearDocument"),appendTransaction:(t,n,r)=>{if(t.some((e=>e.getMeta("composition"))))return;const o=t.some((e=>e.docChanged))&&!n.doc.eq(r.doc),s=t.some((e=>e.getMeta("preventClearDocument")));if(!o||s)return;const{empty:a,from:d,to:l}=n.selection,p=e.Selection.atStart(n.doc).from,m=e.Selection.atEnd(n.doc).to;if(a||!(d===p&&l===m))return;if(!D(r.doc))return;const u=r.tr,f=i({state:r,transaction:u}),{commands:h}=new c({editor:this.editor,state:f});return h.clearNodes(),u.steps.length?u:void 0}})]}}),yt=Q.create({name:"paste",addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("tiptapPaste"),props:{handlePaste:(e,t,n)=>{this.editor.emit("paste",{editor:this.editor,event:t,slice:n})}}})]}}),kt=Q.create({name:"tabindex",addProseMirrorPlugins(){return[new e.Plugin({key:new e.PluginKey("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}});exports.CommandManager=c,exports.Extension=Q,exports.InputRule=_,exports.Mark=class e extends U{constructor(){super(...arguments),this.type="mark"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}static handleExit({editor:e,mark:t}){const{tr:n}=e.state,r=e.state.selection.$from;if(r.pos===r.end()){const o=r.marks();if(!!!o.find((e=>(null==e?void 0:e.type.name)===t.name)))return!1;const s=o.find((e=>(null==e?void 0:e.type.name)===t.name));return s&&n.removeStoredMark(s),n.insertText(" ",r.pos),e.view.dispatch(n),!0}return!1}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},exports.Node=class e extends U{constructor(){super(...arguments),this.type="node"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},exports.PasteRule=H,exports.callOrReturn=x,exports.combineTransactionSteps=d,exports.createChainableState=i,exports.createDocument=u,exports.createNodeFromContent=m,exports.defaultBlockAt=f,exports.deleteProps=Ie,exports.elementFromString=p,exports.extensions=G,exports.findParentNode=g,exports.findParentNodeClosestToPos=h,exports.getChangedRanges=T,exports.getExtensionField=y,exports.getMarkAttributes=S,exports.getMarkRange=I,exports.getMarkType=M,exports.getMarksBetween=R,exports.getNodeAtPosition=(e,t,n,r=20)=>{const o=e.doc.resolve(n);let s=r,a=null;for(;s>0&&null===a;){const e=o.node(s);(null==e?void 0:e.type.name)===t?a=e:s-=1}return[a,s]},exports.getNodeType=O,exports.getSchemaTypeNameByName=C,exports.getSplittedAttributes=N,exports.getTextBetween=b,exports.getTextSerializersFromSchema=w,exports.isAndroid=ue,exports.isAtEndOfNode=(e,t)=>{const{$from:n,$to:r,$anchor:o}=e.selection;if(t){const n=g((e=>e.type.name===t))(e.selection);if(!n)return!1;const r=e.doc.resolve(n.pos+1);return o.pos+1===r.end()}return!(r.parentOffset<r.parent.nodeSize-2||n.pos!==r.pos)},exports.isAtStartOfNode=e=>{const{$from:t,$to:n}=e.selection;return!(t.parentOffset>0||t.pos!==n.pos)},exports.isFunction=k,exports.isList=F,exports.isMacOS=Ee,exports.isMarkActive=B,exports.isNodeActive=z,exports.isNodeEmpty=D,exports.isPlainObject=W,exports.isRegExp=$,exports.isTextSelection=L,exports.isiOS=fe,exports.markInputRule=function(e){return new _({find:e.find,handler:({state:t,range:n,match:r})=>{const o=x(e.getAttributes,void 0,r);if(!1===o||null===o)return null;const{tr:s}=t,a=r[r.length-1],i=r[0];if(a){const r=i.search(/\S/),c=n.from+i.indexOf(a),d=c+a.length;if(R(n.from,n.to,t.doc).filter((t=>t.mark.type.excluded.find((n=>n===e.type&&n!==t.mark.type)))).filter((e=>e.to>c)).length)return null;d<n.to&&s.delete(d,n.to),c>n.from&&s.delete(n.from+r,c);const l=n.from+r+a.length;s.addMark(n.from+r,l,e.type.create(o||{})),s.removeStoredMark(e.type)}}})},exports.markPasteRule=function(e){return new H({find:e.find,handler:({state:t,range:n,match:r,pasteEvent:o})=>{const s=x(e.getAttributes,void 0,r,o);if(!1===s||null===s)return null;const{tr:a}=t,i=r[r.length-1],c=r[0];let d=n.to;if(i){const r=c.search(/\S/),o=n.from+c.indexOf(i),l=o+i.length;if(R(n.from,n.to,t.doc).filter((t=>t.mark.type.excluded.find((n=>n===e.type&&n!==t.mark.type)))).filter((e=>e.to>o)).length)return null;l<n.to&&a.delete(l,n.to),o>n.from&&a.delete(n.from+r,o),d=n.from+r+i.length,a.addMark(n.from+r,d,e.type.create(s||{})),a.removeStoredMark(e.type)}}})},exports.mergeAttributes=function(...e){return e.filter((e=>!!e)).reduce(((e,t)=>{const n={...e};return Object.entries(t).forEach((([e,t])=>{if(n[e])if("class"===e){const r=t?String(t).split(" "):[],o=n[e]?n[e].split(" "):[],s=r.filter((e=>!o.includes(e)));n[e]=[...o,...s].join(" ")}else if("style"===e){const r=t?t.split(";").map((e=>e.trim())).filter(Boolean):[],o=n[e]?n[e].split(";").map((e=>e.trim())).filter(Boolean):[],s=new Map;o.forEach((e=>{const[t,n]=e.split(":").map((e=>e.trim()));s.set(t,n)})),r.forEach((e=>{const[t,n]=e.split(":").map((e=>e.trim()));s.set(t,n)})),n[e]=Array.from(s.entries()).map((([e,t])=>`${e}: ${t}`)).join("; ")}else n[e]=t;else n[e]=t})),n}),{})},exports.mergeDeep=J,exports.minMax=K,exports.objectIncludes=P,exports.removeDuplicates=E,exports.resolveFocusPosition=V,exports.selectionToInsertionEnd=q,exports.splitExtensions=v,exports.textblockTypeInputRule=function(e){return new _({find:e.find,handler:({state:t,range:n,match:r})=>{const o=t.doc.resolve(n.from),s=x(e.getAttributes,void 0,r)||{};if(!o.node(-1).canReplaceWith(o.index(-1),o.indexAfter(-1),e.type))return null;t.tr.delete(n.from,n.to).setBlockType(n.from,n.from,e.type,s)}})},exports.wrappingInputRule=function(e){return new _({find:e.find,handler:({state:n,range:r,match:o,chain:s})=>{const a=x(e.getAttributes,void 0,o)||{},i=n.tr.delete(r.from,r.to),c=i.doc.resolve(r.from).blockRange(),d=c&&t.findWrapping(c,e.type,a);if(!d)return null;if(i.wrap(c,d),e.keepMarks&&e.editor){const{selection:t,storedMarks:r}=n,{splittableMarks:o}=e.editor.extensionManager,s=r||t.$to.parentOffset&&t.$from.marks();if(s){const e=s.filter((e=>o.includes(e.type.name)));i.ensureMarks(e)}}if(e.keepAttributes){const t="bulletList"===e.type.name||"orderedList"===e.type.name?"listItem":"taskList";s().updateAttributes(t,a).run()}const l=i.doc.resolve(r.from-1).nodeBefore;l&&l.type===e.type&&t.canJoin(i.doc,r.from-1)&&(!e.joinPredicate||e.joinPredicate(o,l))&&i.join(r.from-1)}})};
|
|
1
|
+
"use strict";var e=require("../../../prosemirror-transform/dist/index.js"),t=require("../../../prosemirror-commands/dist/index.js"),n=require("../../../prosemirror-state/dist/index.js"),r=require("../../../prosemirror-model/dist/index.js"),o=require("../../../prosemirror-schema-list/dist/index.js"),s=Object.defineProperty,i=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})};function a(e){const{state:t,transaction:n}=e;let{selection:r}=n,{doc:o}=n,{storedMarks:s}=n;return{...t,apply:t.apply.bind(t),applyTransaction:t.applyTransaction.bind(t),plugins:t.plugins,schema:t.schema,reconfigure:t.reconfigure.bind(t),toJSON:t.toJSON.bind(t),get storedMarks(){return s},get selection(){return r},get doc(){return o},get tr(){return r=n.selection,o=n.doc,s=n.storedMarks,n}}}var c=class{constructor(e){this.editor=e.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=e.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){const{rawCommands:e,editor:t,state:n}=this,{view:r}=t,{tr:o}=n,s=this.buildProps(o);return Object.fromEntries(Object.entries(e).map((([e,t])=>[e,(...e)=>{const n=t(...e)(s);return o.getMeta("preventDispatch")||this.hasCustomState||r.dispatch(o),n}])))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(e,t=!0){const{rawCommands:n,editor:r,state:o}=this,{view:s}=r,i=[],a=!!e,c=e||o.tr,l={...Object.fromEntries(Object.entries(n).map((([e,n])=>[e,(...e)=>{const r=this.buildProps(c,t),o=n(...e)(r);return i.push(o),l}]))),run:()=>(a||!t||c.getMeta("preventDispatch")||this.hasCustomState||s.dispatch(c),i.every((e=>!0===e)))};return l}createCan(e){const{rawCommands:t,state:n}=this,r=!1,o=e||n.tr,s=this.buildProps(o,r);return{...Object.fromEntries(Object.entries(t).map((([e,t])=>[e,(...e)=>t(...e)({...s,dispatch:void 0})]))),chain:()=>this.createChain(o,r)}}buildProps(e,t=!0){const{rawCommands:n,editor:r,state:o}=this,{view:s}=r,i={tr:e,editor:r,view:s,state:a({state:o,transaction:e}),dispatch:t?()=>{}:void 0,chain:()=>this.createChain(e,t),can:()=>this.createCan(e),get commands(){return Object.fromEntries(Object.entries(n).map((([e,t])=>[e,(...e)=>t(...e)(i)])))}};return i}},l={};i(l,{blur:()=>d,clearContent:()=>p,clearNodes:()=>u,command:()=>f,createParagraphNear:()=>m,cut:()=>h,deleteCurrentNode:()=>g,deleteNode:()=>y,deleteRange:()=>x,deleteSelection:()=>b,enter:()=>v,exitCode:()=>w,extendMarkRange:()=>C,first:()=>A,focus:()=>z,forEach:()=>D,insertContent:()=>F,insertContentAt:()=>V,joinBackward:()=>J,joinDown:()=>W,joinForward:()=>H,joinItemBackward:()=>Z,joinItemForward:()=>Q,joinTextblockBackward:()=>G,joinTextblockForward:()=>X,joinUp:()=>U,keyboardShortcut:()=>ee,lift:()=>ne,liftEmptyBlock:()=>re,liftListItem:()=>oe,newlineInCode:()=>se,resetAttributes:()=>ce,scrollIntoView:()=>le,selectAll:()=>de,selectNodeBackward:()=>pe,selectNodeForward:()=>ue,selectParentNode:()=>fe,selectTextblockEnd:()=>me,selectTextblockStart:()=>he,setContent:()=>ke,setMark:()=>De,setMeta:()=>Fe,setNode:()=>_e,setNodeSelection:()=>Le,setTextDirection:()=>Ke,setTextSelection:()=>qe,sinkListItem:()=>Ve,splitBlock:()=>We,splitListItem:()=>Je,toggleList:()=>Qe,toggleMark:()=>Ge,toggleNode:()=>Xe,toggleWrap:()=>Ye,undoInputRule:()=>et,unsetAllMarks:()=>tt,unsetMark:()=>nt,unsetTextDirection:()=>rt,updateAttributes:()=>ot,wrapIn:()=>st,wrapInList:()=>it});var d=()=>({editor:e,view:t})=>(requestAnimationFrame((()=>{var n;e.isDestroyed||(t.dom.blur(),null==(n=null==window?void 0:window.getSelection())||n.removeAllRanges())})),!0),p=(e=!0)=>({commands:t})=>t.setContent("",{emitUpdate:e}),u=()=>({state:t,tr:n,dispatch:r})=>{const{selection:o}=n,{ranges:s}=o;return!r||(s.forEach((({$from:r,$to:o})=>{t.doc.nodesBetween(r.pos,o.pos,((t,r)=>{if(t.type.isText)return;const{doc:o,mapping:s}=n,i=o.resolve(s.map(r)),a=o.resolve(s.map(r+t.nodeSize)),c=i.blockRange(a);if(!c)return;const l=e.liftTarget(c);if(t.type.isTextblock){const{defaultType:e}=i.parent.contentMatchAt(i.index());n.setNodeMarkup(c.start,e)}(l||0===l)&&n.lift(c,l)}))})),!0)},f=e=>t=>e(t),m=()=>({state:e,dispatch:n})=>t.createParagraphNear(e,n),h=(e,t)=>({editor:r,tr:o})=>{const{state:s}=r,i=s.doc.slice(e.from,e.to);o.deleteRange(e.from,e.to);const a=o.mapping.map(t);return o.insert(a,i.content),o.setSelection(new n.TextSelection(o.doc.resolve(Math.max(a-1,0)))),!0},g=()=>({tr:e,dispatch:t})=>{const{selection:n}=e,r=n.$anchor.node();if(r.content.size>0)return!1;const o=e.selection.$anchor;for(let n=o.depth;n>0;n-=1){if(o.node(n).type===r.type){if(t){const t=o.before(n),r=o.after(n);e.delete(t,r).scrollIntoView()}return!0}}return!1};function k(e,t){if("string"==typeof e){if(!t.nodes[e])throw Error(`There is no node type named '${e}'. Maybe you forgot to add the extension?`);return t.nodes[e]}return e}var y=e=>({tr:t,state:n,dispatch:r})=>{const o=k(e,n.schema),s=t.selection.$anchor;for(let e=s.depth;e>0;e-=1){if(s.node(e).type===o){if(r){const n=s.before(e),r=s.after(e);t.delete(n,r).scrollIntoView()}return!0}}return!1},x=e=>({tr:t,dispatch:n})=>{const{from:r,to:o}=e;return n&&t.delete(r,o),!0},b=()=>({state:e,dispatch:n})=>t.deleteSelection(e,n),v=()=>({commands:e})=>e.keyboardShortcut("Enter"),w=()=>({state:e,dispatch:n})=>t.exitCode(e,n);function M(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function S(e,t,n={strict:!0}){const r=Object.keys(t);return!r.length||r.every((r=>n.strict?t[r]===e[r]:M(t[r])?t[r].test(e[r]):t[r]===e[r]))}function $(e,t,n={}){return e.find((e=>e.type===t&&S(Object.fromEntries(Object.keys(n).map((t=>[t,e.attrs[t]]))),n)))}function T(e,t,n={}){return!!$(e,t,n)}function E(e,t,n){if(!e||!t)return;let r=e.parent.childAfter(e.parentOffset);if(r.node&&r.node.marks.some((e=>e.type===t))||(r=e.parent.childBefore(e.parentOffset)),!r.node||!r.node.marks.some((e=>e.type===t)))return;if(!n){const e=r.node.marks.find((e=>e.type===t));e&&(n=e.attrs)}if(!$([...r.node.marks],t,n))return;let o=r.index,s=e.start()+r.offset,i=o+1,a=s+r.node.nodeSize;for(;o>0&&T([...e.parent.child(o-1).marks],t,n);)o-=1,s-=e.parent.child(o).nodeSize;for(;i<e.parent.childCount&&T([...e.parent.child(i).marks],t,n);)a+=e.parent.child(i).nodeSize,i+=1;return{from:s,to:a}}function O(e,t){if("string"==typeof e){if(!t.marks[e])throw Error(`There is no mark type named '${e}'. Maybe you forgot to add the extension?`);return t.marks[e]}return e}var C=(e,t)=>({tr:r,state:o,dispatch:s})=>{const i=O(e,o.schema),{doc:a,selection:c}=r,{$from:l,from:d,to:p}=c;if(s){const e=E(l,i,t);if(e&&e.from<=d&&e.to>=p){const t=n.TextSelection.create(a,e.from,e.to);r.setSelection(t)}}return!0},A=e=>t=>{const n="function"==typeof e?e(t):e;for(let e=0;e<n.length;e+=1)if(n[e](t))return!0;return!1};function P(e){return e instanceof n.TextSelection}function I(e=0,t=0,n=0){return Math.min(Math.max(e,t),n)}function j(e,t=null){if(!t)return null;const r=n.Selection.atStart(e),o=n.Selection.atEnd(e);if("start"===t||!0===t)return r;if("end"===t)return o;const s=r.from,i=o.to;return"all"===t?n.TextSelection.create(e,I(0,s,i),I(e.content.size,s,i)):n.TextSelection.create(e,I(t,s,i),I(t,s,i))}function N(){return"Android"===navigator.platform||/android/i.test(navigator.userAgent)}function R(){return["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}function B(){return"undefined"!=typeof navigator&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}var z=(e=null,t={})=>({editor:n,view:r,tr:o,dispatch:s})=>{t={scrollIntoView:!0,...t};const i=()=>{(R()||N())&&r.dom.focus(),!B()||R()||N()||r.dom.focus({preventScroll:!0}),requestAnimationFrame((()=>{n.isDestroyed||(r.focus(),(null==t?void 0:t.scrollIntoView)&&n.commands.scrollIntoView())}))};try{if(r.hasFocus()&&null===e||!1===e)return!0}catch{return!1}if(s&&null===e&&!P(n.state.selection))return i(),!0;const a=j(o.doc,e)||n.state.selection,c=n.state.selection.eq(a);return s&&(c||o.setSelection(a),c&&o.storedMarks&&o.setStoredMarks(o.storedMarks),i()),!0},D=(e,t)=>n=>e.every(((e,r)=>t(e,{...n,index:r}))),F=(e,t)=>({tr:n,commands:r})=>r.insertContentAt({from:n.selection.from,to:n.selection.to},e,t),_=e=>{const t=e.childNodes;for(let n=t.length-1;n>=0;n-=1){const r=t[n];3===r.nodeType&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?e.removeChild(r):1===r.nodeType&&_(r)}return e};function L(e){if("undefined"==typeof window)throw new Error("[tiptap error]: there is no window object available, so this function cannot be used");const t=`<body>${e}</body>`,n=(new window.DOMParser).parseFromString(t,"text/html").body;return _(n)}function K(e,t,n){if(e instanceof r.Node||e instanceof r.Fragment)return e;n={slice:!0,parseOptions:{},...n};const o="string"==typeof e;if("object"==typeof e&&null!==e)try{if(Array.isArray(e)&&e.length>0)return r.Fragment.fromArray(e.map((e=>t.nodeFromJSON(e))));const o=t.nodeFromJSON(e);return n.errorOnInvalidContent&&o.check(),o}catch(r){if(n.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:r});return console.warn("[tiptap warn]: Invalid content.","Passed value:",e,"Error:",r),K("",t,n)}if(o){if(n.errorOnInvalidContent){let o=!1,s="";const i=new r.Schema({topNode:t.spec.topNode,marks:t.spec.marks,nodes:t.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:e=>(o=!0,s="string"==typeof e?e:e.outerHTML,null)}]}})});if(n.slice?r.DOMParser.fromSchema(i).parseSlice(L(e),n.parseOptions):r.DOMParser.fromSchema(i).parse(L(e),n.parseOptions),n.errorOnInvalidContent&&o)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${s}`)})}const o=r.DOMParser.fromSchema(t);return n.slice?o.parseSlice(L(e),n.parseOptions).content:o.parse(L(e),n.parseOptions)}return K("",t,n)}function q(t,r,o){const s=t.steps.length-1;if(s<r)return;const i=t.steps[s];if(!(i instanceof e.ReplaceStep||i instanceof e.ReplaceAroundStep))return;const a=t.mapping.maps[s];let c=0;a.forEach(((e,t,n,r)=>{0===c&&(c=r)})),t.setSelection(n.Selection.near(t.doc.resolve(c),o))}var V=(e,t,n)=>({tr:o,dispatch:s,editor:i})=>{var a;if(s){let s;const c=e=>{i.emit("contentError",{editor:i,error:e,disableCollaboration:()=>{"collaboration"in i.storage&&"object"==typeof i.storage.collaboration&&i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},l={preserveWhitespace:"full",...(n={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...n}).parseOptions};if(!n.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{K(t,i.schema,{parseOptions:l,errorOnInvalidContent:!0})}catch(e){c(e)}try{s=K(t,i.schema,{parseOptions:l,errorOnInvalidContent:null!=(a=n.errorOnInvalidContent)?a:i.options.enableContentCheck})}catch(e){return c(e),!1}let{from:d,to:p}="number"==typeof e?{from:e,to:e}:{from:e.from,to:e.to},u=!0,f=!0;if(("type"in s?[s]:s).forEach((e=>{e.check(),u=!!u&&(e.isText&&0===e.marks.length),f=!!f&&e.isBlock})),d===p&&f){const{parent:e}=o.doc.resolve(d);e.isTextblock&&!e.type.spec.code&&!e.childCount&&(d-=1,p+=1)}let m;if(u){if(Array.isArray(t))m=t.map((e=>e.text||"")).join("");else if(t instanceof r.Fragment){let e="";t.forEach((t=>{t.text&&(e+=t.text)})),m=e}else m="object"==typeof t&&t&&t.text?t.text:t;o.insertText(m,d,p)}else{m=s;const e=o.doc.resolve(d),t=e.node(),n=0===e.parentOffset,r=t.isText||t.isTextblock,i=t.content.size>0;n&&r&&i&&f&&(d=Math.max(0,d-1)),o.replaceWith(d,p,m)}n.updateSelection&&q(o,o.steps.length-1,-1),n.applyInputRules&&o.setMeta("applyInputRules",{from:d,text:m}),n.applyPasteRules&&o.setMeta("applyPasteRules",{from:d,text:m})}return!0},U=()=>({state:e,dispatch:n})=>t.joinUp(e,n),W=()=>({state:e,dispatch:n})=>t.joinDown(e,n),J=()=>({state:e,dispatch:n})=>t.joinBackward(e,n),H=()=>({state:e,dispatch:n})=>t.joinForward(e,n),Z=()=>({state:t,dispatch:n,tr:r})=>{try{const o=e.joinPoint(t.doc,t.selection.$from.pos,-1);return null!=o&&(r.join(o,2),n&&n(r),!0)}catch{return!1}},Q=()=>({state:t,dispatch:n,tr:r})=>{try{const o=e.joinPoint(t.doc,t.selection.$from.pos,1);return null!=o&&(r.join(o,2),n&&n(r),!0)}catch{return!1}},G=()=>({state:e,dispatch:n})=>t.joinTextblockBackward(e,n),X=()=>({state:e,dispatch:n})=>t.joinTextblockForward(e,n);function Y(){return"undefined"!=typeof navigator&&/Mac/.test(navigator.platform)}var ee=e=>({editor:t,view:n,tr:r,dispatch:o})=>{const s=function(e){const t=e.split(/-(?!$)/);let n,r,o,s,i=t[t.length-1];"Space"===i&&(i=" ");for(let e=0;e<t.length-1;e+=1){const i=t[e];if(/^(cmd|meta|m)$/i.test(i))s=!0;else if(/^a(lt)?$/i.test(i))n=!0;else if(/^(c|ctrl|control)$/i.test(i))r=!0;else if(/^s(hift)?$/i.test(i))o=!0;else{if(!/^mod$/i.test(i))throw new Error(`Unrecognized modifier name: ${i}`);R()||Y()?s=!0:r=!0}}return n&&(i=`Alt-${i}`),r&&(i=`Ctrl-${i}`),s&&(i=`Meta-${i}`),o&&(i=`Shift-${i}`),i}(e).split(/-(?!$)/),i=s.find((e=>!["Alt","Ctrl","Meta","Shift"].includes(e))),a=new KeyboardEvent("keydown",{key:"Space"===i?" ":i,altKey:s.includes("Alt"),ctrlKey:s.includes("Ctrl"),metaKey:s.includes("Meta"),shiftKey:s.includes("Shift"),bubbles:!0,cancelable:!0}),c=t.captureTransaction((()=>{n.someProp("handleKeyDown",(e=>e(n,a)))}));return null==c||c.steps.forEach((e=>{const t=e.map(r.mapping);t&&o&&r.maybeStep(t)})),!0};function te(e,t,n={}){const{from:r,to:o,empty:s}=e.selection,i=t?k(t,e.schema):null,a=[];e.doc.nodesBetween(r,o,((e,t)=>{if(e.isText)return;const n=Math.max(r,t),s=Math.min(o,t+e.nodeSize);a.push({node:e,from:n,to:s})}));const c=o-r,l=a.filter((e=>!i||i.name===e.node.type.name)).filter((e=>S(e.node.attrs,n,{strict:!1})));if(s)return!!l.length;return l.reduce(((e,t)=>e+t.to-t.from),0)>=c}var ne=(e,n={})=>({state:r,dispatch:o})=>!!te(r,k(e,r.schema),n)&&t.lift(r,o),re=()=>({state:e,dispatch:n})=>t.liftEmptyBlock(e,n),oe=e=>({state:t,dispatch:n})=>{const r=k(e,t.schema);return o.liftListItem(r)(t,n)},se=()=>({state:e,dispatch:n})=>t.newlineInCode(e,n);function ie(e,t){return t.nodes[e]?"node":t.marks[e]?"mark":null}function ae(e,t){const n="string"==typeof t?[t]:t;return Object.keys(e).reduce(((t,r)=>(n.includes(r)||(t[r]=e[r]),t)),{})}var ce=(e,t)=>({tr:n,state:r,dispatch:o})=>{let s=null,i=null;const a=ie("string"==typeof e?e:e.name,r.schema);if(!a)return!1;"node"===a&&(s=k(e,r.schema)),"mark"===a&&(i=O(e,r.schema));let c=!1;return n.selection.ranges.forEach((e=>{r.doc.nodesBetween(e.$from.pos,e.$to.pos,((e,r)=>{s&&s===e.type&&(c=!0,o&&n.setNodeMarkup(r,void 0,ae(e.attrs,t))),i&&e.marks.length&&e.marks.forEach((s=>{i===s.type&&(c=!0,o&&n.addMark(r,r+e.nodeSize,i.create(ae(s.attrs,t))))}))}))})),c},le=()=>({tr:e,dispatch:t})=>(t&&e.scrollIntoView(),!0),de=()=>({tr:e,dispatch:t})=>{if(t){const t=new n.AllSelection(e.doc);e.setSelection(t)}return!0},pe=()=>({state:e,dispatch:n})=>t.selectNodeBackward(e,n),ue=()=>({state:e,dispatch:n})=>t.selectNodeForward(e,n),fe=()=>({state:e,dispatch:n})=>t.selectParentNode(e,n),me=()=>({state:e,dispatch:n})=>t.selectTextblockEnd(e,n),he=()=>({state:e,dispatch:n})=>t.selectTextblockStart(e,n);function ge(e,t,n={},r={}){return K(e,t,{slice:!1,parseOptions:n,errorOnInvalidContent:r.errorOnInvalidContent})}var ke=(e,{errorOnInvalidContent:t,emitUpdate:n=!0,parseOptions:r={}}={})=>({editor:o,tr:s,dispatch:i,commands:a})=>{const{doc:c}=s;if("full"!==r.preserveWhitespace){const a=ge(e,o.schema,r,{errorOnInvalidContent:null!=t?t:o.options.enableContentCheck});return i&&s.replaceWith(0,c.content.size,a).setMeta("preventUpdate",!n),!0}return i&&s.setMeta("preventUpdate",!n),a.insertContentAt({from:0,to:c.content.size},e,{parseOptions:r,errorOnInvalidContent:null!=t?t:o.options.enableContentCheck})};function ye(e,t){const n=O(t,e.schema),{from:r,to:o,empty:s}=e.selection,i=[];s?(e.storedMarks&&i.push(...e.storedMarks),i.push(...e.selection.$head.marks())):e.doc.nodesBetween(r,o,(e=>{i.push(...e.marks)}));const a=i.find((e=>e.type.name===n.name));return a?{...a.attrs}:{}}function xe(t,n){const r=new e.Transform(t);return n.forEach((e=>{e.steps.forEach((e=>{r.step(e)}))})),r}function be(e){for(let t=0;t<e.edgeCount;t+=1){const{type:n}=e.edge(t);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}function ve(e,t){for(let n=e.depth;n>0;n-=1){const r=e.node(n);if(t(r))return{pos:n>0?e.before(n):0,start:e.start(n),depth:n,node:r}}}function we(e){return t=>ve(t.$from,e)}function Me(e,t,n){if(void 0===e.config[t]&&e.parent)return Me(e.parent,t,n);if("function"==typeof e.config[t]){return e.config[t].bind({...n,parent:e.parent?Me(e.parent,t,n):null})}return e.config[t]}function Se(e){return"function"==typeof e}function $e(e,t=void 0,...n){return Se(e)?t?e.bind(t)(...n):e(...n):e}function Te(e){return{baseExtensions:e.filter((e=>"extension"===e.type)),nodeExtensions:e.filter((e=>"node"===e.type)),markExtensions:e.filter((e=>"mark"===e.type))}}function Ee(e){const t=[],n=function(e){const t=[];let n="",r=!1,o=!1,s=0;const i=e.length;for(let a=0;a<i;a+=1){const i=e[a];if("'"!==i||o)if('"'!==i||r){if(!r&&!o){if("("===i){s+=1,n+=i;continue}if(")"===i&&s>0){s-=1,n+=i;continue}if(";"===i&&0===s){t.push(n),n="";continue}}n+=i}else o=!o,n+=i;else r=!r,n+=i}return n&&t.push(n),t}(e||""),r=n.length;for(let e=0;e<r;e+=1){const r=n[e],o=r.indexOf(":");if(-1===o)continue;const s=r.slice(0,o).trim(),i=r.slice(o+1).trim();s&&i&&t.push([s,i])}return t}function Oe(...e){return e.filter((e=>!!e)).reduce(((e,t)=>{const n={...e};return Object.entries(t).forEach((([e,t])=>{if(n[e])if("class"===e){const r=t?String(t).split(" "):[],o=n[e]?n[e].split(" "):[],s=r.filter((e=>!o.includes(e)));n[e]=[...o,...s].join(" ")}else if("style"===e){const r=new Map([...Ee(n[e]),...Ee(t)]);n[e]=Array.from(r.entries()).map((([e,t])=>`${e}: ${t}`)).join("; ")}else n[e]=t;else n[e]=t})),n}),{})}function Ce(e,t,n){const{from:r,to:o}=t,{blockSeparator:s="\n\n",textSerializers:i={}}=n||{};let a="";return e.nodesBetween(r,o,((e,n,c,l)=>{var d;e.isBlock&&n>r&&(a+=s);const p=null==i?void 0:i[e.type.name];if(p)return c&&(a+=p({node:e,pos:n,parent:c,index:l,range:t})),!1;e.isText&&(a+=null==(d=null==e?void 0:e.text)?void 0:d.slice(Math.max(r,n)-n,o-n))})),a}function Ae(e){return Object.fromEntries(Object.entries(e.nodes).filter((([,e])=>e.spec.toText)).map((([e,t])=>[e,t.spec.toText])))}function Pe(e,t=JSON.stringify){const n={};return e.filter((e=>{const r=t(e);return!Object.prototype.hasOwnProperty.call(n,r)&&(n[r]=!0)}))}function Ie(e){const{mapping:t,steps:n}=e,r=[];return t.maps.forEach(((e,o)=>{const s=[];if(e.ranges.length)e.forEach(((e,t)=>{s.push({from:e,to:t})}));else{const{from:e,to:t}=n[o];if(void 0===e||void 0===t)return;s.push({from:e,to:t})}s.forEach((({from:e,to:n})=>{const s=t.slice(o).map(e,-1),i=t.slice(o).map(n),a=t.invert().map(s,-1),c=t.invert().map(i);r.push({oldRange:{from:a,to:c},newRange:{from:s,to:i}})}))})),function(e){const t=Pe(e);return 1===t.length?t:t.filter(((e,n)=>!t.filter(((e,t)=>t!==n)).some((t=>e.oldRange.from>=t.oldRange.from&&e.oldRange.to<=t.oldRange.to&&e.newRange.from>=t.newRange.from&&e.newRange.to<=t.newRange.to))))}(r)}function je(e,t,n){const r=[];return e===t?n.resolve(e).marks().forEach((t=>{const o=E(n.resolve(e),t.type);o&&r.push({mark:t,...o})})):n.nodesBetween(e,t,((e,t)=>{e&&void 0!==(null==e?void 0:e.nodeSize)&&r.push(...e.marks.map((n=>({from:t,to:t+e.nodeSize,mark:n}))))})),r}function Ne(e,t,n){return Object.fromEntries(Object.entries(n).filter((([n])=>{const r=e.find((e=>e.type===t&&e.name===n));return!!r&&r.attribute.keepOnSplit})))}function Re(e,t,n={}){const{empty:r,ranges:o}=e.selection,s=t?O(t,e.schema):null;if(r)return!!(e.storedMarks||e.selection.$from.marks()).filter((e=>!s||s.name===e.type.name)).find((e=>S(e.attrs,n,{strict:!1})));let i=0;const a=[];if(o.forEach((({$from:t,$to:n})=>{const r=t.pos,o=n.pos;e.doc.nodesBetween(r,o,((e,t)=>{if(s&&e.inlineContent&&!e.type.allowsMarkType(s))return!1;if(!e.isText&&!e.marks.length)return;const n=Math.max(r,t),c=Math.min(o,t+e.nodeSize);i+=c-n,a.push(...e.marks.map((e=>({mark:e,from:n,to:c}))))}))})),0===i)return!1;const c=a.filter((e=>!s||s.name===e.mark.type.name)).filter((e=>S(e.mark.attrs,n,{strict:!1}))).reduce(((e,t)=>e+t.to-t.from),0),l=a.filter((e=>!s||e.mark.type!==s&&e.mark.type.excludes(s))).reduce(((e,t)=>e+t.to-t.from),0);return(c>0?c+l:c)>=i}function Be(e,t){const{nodeExtensions:n}=Te(t),r=n.find((t=>t.name===e));if(!r)return!1;const o=$e(Me(r,"group",{name:r.name,options:r.options,storage:r.storage}));return"string"==typeof o&&o.split(" ").includes("list")}function ze(e,{checkChildren:t=!0,ignoreWhitespace:n=!1}={}){var r;if(n){if("hardBreak"===e.type.name)return!0;if(e.isText)return!/\S/.test(null!=(r=e.text)?r:"")}if(e.isText)return!e.text;if(e.isAtom||e.isLeaf)return!1;if(0===e.content.childCount)return!0;if(t){let r=!0;return e.content.forEach((e=>{!1!==r&&(ze(e,{ignoreWhitespace:n,checkChildren:t})||(r=!1))})),r}return!1}var De=(e,t={})=>({tr:n,state:r,dispatch:o})=>{const{selection:s}=n,{empty:i,ranges:a}=s,c=O(e,r.schema);if(o)if(i){const e=ye(r,c);n.addStoredMark(c.create({...e,...t}))}else a.forEach((e=>{const o=e.$from.pos,s=e.$to.pos;r.doc.nodesBetween(o,s,((e,r)=>{const i=Math.max(r,o),a=Math.min(r+e.nodeSize,s);e.marks.find((e=>e.type===c))?e.marks.forEach((e=>{c===e.type&&n.addMark(i,a,c.create({...e.attrs,...t}))})):n.addMark(i,a,c.create(t))}))}));return function(e,t,n){var r;const{selection:o}=t;let s=null;if(P(o)&&(s=o.$cursor),s){const t=null!=(r=e.storedMarks)?r:s.marks();return s.parent.type.allowsMarkType(n)&&(!!n.isInSet(t)||!t.some((e=>e.type.excludes(n))))}const{ranges:i}=o;return i.some((({$from:t,$to:r})=>{let o=0===t.depth&&e.doc.inlineContent&&e.doc.type.allowsMarkType(n);return e.doc.nodesBetween(t.pos,r.pos,((e,t,r)=>{if(o)return!1;if(e.isInline){const t=!r||r.type.allowsMarkType(n),s=!!n.isInSet(e.marks)||!e.marks.some((e=>e.type.excludes(n)));o=t&&s}return!o})),o}))}(r,n,c)},Fe=(e,t)=>({tr:n})=>(n.setMeta(e,t),!0),_e=(e,n={})=>({state:r,dispatch:o,chain:s})=>{const i=k(e,r.schema);let a;return r.selection.$anchor.sameParent(r.selection.$head)&&(a=r.selection.$anchor.parent.attrs),i.isTextblock?s().command((({commands:e})=>!!t.setBlockType(i,{...a,...n})(r)||e.clearNodes())).command((({state:e})=>t.setBlockType(i,{...a,...n})(e,o))).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},Le=e=>({tr:t,dispatch:r})=>{if(r){const{doc:r}=t,o=I(e,0,r.content.size),s=n.NodeSelection.create(r,o);t.setSelection(s)}return!0},Ke=(e,t)=>({tr:n,state:r,dispatch:o})=>{const{selection:s}=r;let i,a;return"number"==typeof t?(i=t,a=t):t&&"from"in t&&"to"in t?(i=t.from,a=t.to):(i=s.from,a=s.to),o&&n.doc.nodesBetween(i,a,((t,r)=>{t.isText||n.setNodeMarkup(r,void 0,{...t.attrs,dir:e})})),!0},qe=e=>({tr:t,dispatch:r})=>{if(r){const{doc:r}=t,{from:o,to:s}="number"==typeof e?{from:e,to:e}:e,i=n.TextSelection.atStart(r).from,a=n.TextSelection.atEnd(r).to,c=I(o,i,a),l=I(s,i,a),d=n.TextSelection.create(r,c,l);t.setSelection(d)}return!0},Ve=e=>({state:t,dispatch:n})=>{const r=k(e,t.schema);return o.sinkListItem(r)(t,n)};function Ue(e,t){const n=e.storedMarks||e.selection.$to.parentOffset&&e.selection.$from.marks();if(n){const r=n.filter((e=>null==t?void 0:t.includes(e.type.name)));e.tr.ensureMarks(r)}}var We=({keepMarks:t=!0}={})=>({tr:r,state:o,dispatch:s,editor:i})=>{const{selection:a,doc:c}=r,{$from:l,$to:d}=a,p=Ne(i.extensionManager.attributes,l.node().type.name,l.node().attrs);if(a instanceof n.NodeSelection&&a.node.isBlock)return!(!l.parentOffset||!e.canSplit(c,l.pos))&&(s&&(t&&Ue(o,i.extensionManager.splittableMarks),r.split(l.pos).scrollIntoView()),!0);if(!l.parent.isBlock)return!1;const u=d.parentOffset===d.parent.content.size,f=0===l.depth?void 0:be(l.node(-1).contentMatchAt(l.indexAfter(-1)));let m=u&&f?[{type:f,attrs:p}]:void 0,h=e.canSplit(r.doc,r.mapping.map(l.pos),1,m);if(m||h||!e.canSplit(r.doc,r.mapping.map(l.pos),1,f?[{type:f}]:void 0)||(h=!0,m=f?[{type:f,attrs:p}]:void 0),s){if(h&&(a instanceof n.TextSelection&&r.deleteSelection(),r.split(r.mapping.map(l.pos),1,m),f&&!u&&!l.parentOffset&&l.parent.type!==f)){const e=r.mapping.map(l.before()),t=r.doc.resolve(e);l.node(-1).canReplaceWith(t.index(),t.index()+1,f)&&r.setNodeMarkup(r.mapping.map(l.before()),f)}t&&Ue(o,i.extensionManager.splittableMarks),r.scrollIntoView()}return h},Je=(t,o={})=>({tr:s,state:i,dispatch:a,editor:c})=>{var l;const d=k(t,i.schema),{$from:p,$to:u}=i.selection,f=i.selection.node;if(f&&f.isBlock||p.depth<2||!p.sameParent(u))return!1;const m=p.node(-1);if(m.type!==d)return!1;const h=c.extensionManager.attributes;if(0===p.parent.content.size&&p.node(-1).childCount===p.indexAfter(-1)){if(2===p.depth||p.node(-3).type!==d||p.index(-2)!==p.node(-2).childCount-1)return!1;if(a){let e=r.Fragment.empty;const t=p.index(-1)?1:p.index(-2)?2:3;for(let n=p.depth-t;n>=p.depth-3;n-=1)e=r.Fragment.from(p.node(n).copy(e));const i=p.indexAfter(-1)<p.node(-2).childCount?1:p.indexAfter(-2)<p.node(-3).childCount?2:3,a={...Ne(h,p.node().type.name,p.node().attrs),...o},c=(null==(l=d.contentMatch.defaultType)?void 0:l.createAndFill(a))||void 0;e=e.append(r.Fragment.from(d.createAndFill(null,c)||void 0));const u=p.before(p.depth-(t-1));s.replace(u,p.after(-i),new r.Slice(e,4-t,0));let f=-1;s.doc.nodesBetween(u,s.doc.content.size,((e,t)=>{if(f>-1)return!1;e.isTextblock&&0===e.content.size&&(f=t+1)})),f>-1&&s.setSelection(n.TextSelection.near(s.doc.resolve(f))),s.scrollIntoView()}return!0}const g=u.pos===p.end()?m.contentMatchAt(0).defaultType:null,y={...Ne(h,m.type.name,m.attrs),...o},x={...Ne(h,p.node().type.name,p.node().attrs),...o};s.delete(p.pos,u.pos);const b=g?[{type:d,attrs:y},{type:g,attrs:x}]:[{type:d,attrs:y}];if(!e.canSplit(s.doc,p.pos,2))return!1;if(a){const{selection:e,storedMarks:t}=i,{splittableMarks:n}=c.extensionManager,r=t||e.$to.parentOffset&&e.$from.marks();if(s.split(p.pos,2,b).scrollIntoView(),!r||!a)return!0;const o=r.filter((e=>n.includes(e.type.name)));s.ensureMarks(o)}return!0},He=(t,n)=>{const r=we((e=>e.type===n))(t.selection);if(!r)return!0;const o=t.doc.resolve(Math.max(0,r.pos-1)).before(r.depth);if(void 0===o)return!0;const s=t.doc.nodeAt(o);return r.node.type!==(null==s?void 0:s.type)||!e.canJoin(t.doc,r.pos)||(t.join(r.pos),!0)},Ze=(t,n)=>{const r=we((e=>e.type===n))(t.selection);if(!r)return!0;const o=t.doc.resolve(r.start).after(r.depth);if(void 0===o)return!0;const s=t.doc.nodeAt(o);return r.node.type!==(null==s?void 0:s.type)||!e.canJoin(t.doc,o)||(t.join(o),!0)};var Qe=(e,t,r,o={})=>({editor:s,tr:i,state:a,dispatch:c,chain:l,commands:d,can:p})=>{const{extensions:u,splittableMarks:f}=s.extensionManager,m=k(e,a.schema),h=k(t,a.schema),{selection:g,storedMarks:y}=a,{$from:x,$to:b}=g,v=x.blockRange(b),w=y||g.$to.parentOffset&&g.$from.marks();if(!v)return!1;const M=we((e=>Be(e.type.name,u)))(g),S=0===g.from&&g.to===a.doc.content.size,$=a.doc.content.content,T=1===$.length?$[0]:null,E=S&&T&&Be(T.type.name,u)?{node:T,pos:0}:null,O=null!=M?M:E,C=!!E;if((!!M&&v.depth>=1&&v.depth-M.depth<=1||C)&&O){if(O.node.type===m)return S&&C?l().command((({tr:e,dispatch:t})=>{const r=function(e){const t=e.doc,r=t.firstChild;if(!r)return null;const o=t.resolve(1),s=t.resolve(r.nodeSize-1);return n.TextSelection.between(o,s)}(e);return!!r&&(e.setSelection(r),t&&t(e),!0)})).liftListItem(h).run():d.liftListItem(h);if(Be(O.node.type.name,u)&&m.validContent(O.node.content))return l().command((()=>(i.setNodeMarkup(O.pos,m),!0))).command((()=>He(i,m))).command((()=>Ze(i,m))).run()}return r&&w&&c?l().command((()=>{const e=p().wrapInList(m,o),t=w.filter((e=>f.includes(e.type.name)));return i.ensureMarks(t),!!e||d.clearNodes()})).wrapInList(m,o).command((()=>He(i,m))).command((()=>Ze(i,m))).run():l().command((()=>!!p().wrapInList(m,o)||d.clearNodes())).wrapInList(m,o).command((()=>He(i,m))).command((()=>Ze(i,m))).run()},Ge=(e,t={},n={})=>({state:r,commands:o})=>{const{extendEmptyMarkRange:s=!1}=n,i=O(e,r.schema);return Re(r,i,t)?o.unsetMark(i,{extendEmptyMarkRange:s}):o.setMark(i,t)},Xe=(e,t,n={})=>({state:r,commands:o})=>{const s=k(e,r.schema),i=k(t,r.schema),a=te(r,s,n);let c;return r.selection.$anchor.sameParent(r.selection.$head)&&(c=r.selection.$anchor.parent.attrs),a?o.setNode(i,c):o.setNode(s,{...c,...n})},Ye=(e,t={})=>({state:n,commands:r})=>{const o=k(e,n.schema);return te(n,o,t)?r.lift(o):r.wrapIn(o,t)},et=()=>({state:e,dispatch:t})=>{const n=e.plugins;for(let r=0;r<n.length;r+=1){const o=n[r];let s;if(o.spec.isInputRules&&(s=o.getState(e))){if(t){const t=e.tr,n=s.transform;for(let e=n.steps.length-1;e>=0;e-=1)t.step(n.steps[e].invert(n.docs[e]));if(s.text){const n=t.doc.resolve(s.from).marks();t.replaceWith(s.from,s.to,e.schema.text(s.text,n))}else t.delete(s.from,s.to)}return!0}}return!1},tt=()=>({tr:e,dispatch:t})=>{const{selection:n}=e,{empty:r,ranges:o}=n;return r||t&&o.forEach((t=>{e.removeMark(t.$from.pos,t.$to.pos)})),!0},nt=(e,t={})=>({tr:n,state:r,dispatch:o})=>{var s;const{extendEmptyMarkRange:i=!1}=t,{selection:a}=n,c=O(e,r.schema),{$from:l,empty:d,ranges:p}=a;if(!o)return!0;if(d&&i){let{from:e,to:t}=a;const r=null==(s=l.marks().find((e=>e.type===c)))?void 0:s.attrs,o=E(l,c,r);o&&(e=o.from,t=o.to),n.removeMark(e,t,c)}else p.forEach((e=>{n.removeMark(e.$from.pos,e.$to.pos,c)}));return n.removeStoredMark(c),!0},rt=e=>({tr:t,state:n,dispatch:r})=>{const{selection:o}=n;let s,i;return"number"==typeof e?(s=e,i=e):e&&"from"in e&&"to"in e?(s=e.from,i=e.to):(s=o.from,i=o.to),r&&t.doc.nodesBetween(s,i,((e,n)=>{if(e.isText)return;const r={...e.attrs};delete r.dir,t.setNodeMarkup(n,void 0,r)})),!0},ot=(e,t={})=>({tr:n,state:r,dispatch:o})=>{let s=null,i=null;const a=ie("string"==typeof e?e:e.name,r.schema);if(!a)return!1;"node"===a&&(s=k(e,r.schema)),"mark"===a&&(i=O(e,r.schema));let c=!1;return n.selection.ranges.forEach((e=>{const a=e.$from.pos,l=e.$to.pos;let d,p,u,f;n.selection.empty?r.doc.nodesBetween(a,l,((e,t)=>{s&&s===e.type&&(c=!0,u=Math.max(t,a),f=Math.min(t+e.nodeSize,l),d=t,p=e)})):r.doc.nodesBetween(a,l,((e,r)=>{r<a&&s&&s===e.type&&(c=!0,u=Math.max(r,a),f=Math.min(r+e.nodeSize,l),d=r,p=e),r>=a&&r<=l&&(s&&s===e.type&&(c=!0,o&&n.setNodeMarkup(r,void 0,{...e.attrs,...t})),i&&e.marks.length&&e.marks.forEach((s=>{if(i===s.type&&(c=!0,o)){const o=Math.max(r,a),c=Math.min(r+e.nodeSize,l);n.addMark(o,c,i.create({...s.attrs,...t}))}})))})),p&&(void 0!==d&&o&&n.setNodeMarkup(d,void 0,{...p.attrs,...t}),i&&p.marks.length&&p.marks.forEach((e=>{i===e.type&&o&&n.addMark(u,f,i.create({...e.attrs,...t}))})))})),c},st=(e,n={})=>({state:r,dispatch:o})=>{const s=k(e,r.schema);return t.wrapIn(s,n)(r,o)},it=(e,t={})=>({state:n,dispatch:r})=>{const s=k(e,n.schema);return o.wrapInList(s,t)(n,r)},at=class{constructor(e){var t;this.find=e.find,this.handler=e.handler,this.undoable=null==(t=e.undoable)||t}};function ct(e){return"Object"===function(e){return Object.prototype.toString.call(e).slice(8,-1)}(e)&&(e.constructor===Object&&Object.getPrototypeOf(e)===Object.prototype)}function lt(e,t){const n={...e};return ct(e)&&ct(t)&&Object.keys(t).forEach((r=>{ct(t[r])&&ct(e[r])?n[r]=lt(e[r],t[r]):n[r]=t[r]})),n}var dt=class{constructor(e={}){this.type="extendable",this.parent=null,this.child=null,this.name="",this.config={name:this.name},this.config={...this.config,...e},this.name=this.config.name}get options(){return{...$e(Me(this,"addOptions",{name:this.name}))||{}}}get storage(){return{...$e(Me(this,"addStorage",{name:this.name,options:this.options}))||{}}}configure(e={}){const t=this.extend({...this.config,addOptions:()=>lt(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){const t=new this.constructor({...this.config,...e});return t.parent=this,this.child=t,t.name="name"in e?e.name:t.parent.name,t}},pt=class{constructor(e){this.find=e.find,this.handler=e.handler}},ut={};i(ut,{ClipboardTextSerializer:()=>mt,Commands:()=>ht,Delete:()=>gt,Drop:()=>kt,Editable:()=>yt,FocusEvents:()=>bt,Keymap:()=>vt,Paste:()=>wt,Tabindex:()=>Mt,TextDirection:()=>St,focusEventsPluginKey:()=>xt});var ft=class e extends dt{constructor(){super(...arguments),this.type="extension"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},mt=ft.create({name:"clipboardTextSerializer",addOptions:()=>({blockSeparator:void 0}),addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{const{editor:e}=this,{state:t,schema:n}=e,{doc:r,selection:o}=t,{ranges:s}=o,i=Math.min(...s.map((e=>e.$from.pos))),a=Math.max(...s.map((e=>e.$to.pos))),c=Ae(n);return Ce(r,{from:i,to:a},{...void 0!==this.options.blockSeparator?{blockSeparator:this.options.blockSeparator}:{},textSerializers:c})}}})]}}),ht=ft.create({name:"commands",addCommands:()=>({...l})}),gt=ft.create({name:"delete",onUpdate({transaction:t,appendedTransactions:n}){var r,o,s;const i=()=>{var r,o,s,i;if(null!=(i=null==(s=null==(o=null==(r=this.editor.options.coreExtensionOptions)?void 0:r.delete)?void 0:o.filterTransaction)?void 0:s.call(o,t))?i:t.getMeta("y-sync$"))return;const a=xe(t.before,[t,...n]);Ie(a).forEach((e=>{a.mapping.mapResult(e.oldRange.from).deletedAfter&&a.mapping.mapResult(e.oldRange.to).deletedBefore&&a.before.nodesBetween(e.oldRange.from,e.oldRange.to,((n,r)=>{const o=r+n.nodeSize-2,s=e.oldRange.from<=r&&o<=e.oldRange.to;this.editor.emit("delete",{type:"node",node:n,from:r,to:o,newFrom:a.mapping.map(r),newTo:a.mapping.map(o),deletedRange:e.oldRange,newRange:e.newRange,partial:!s,editor:this.editor,transaction:t,combinedTransform:a})}))}));const c=a.mapping;a.steps.forEach(((n,r)=>{var o,s;if(n instanceof e.RemoveMarkStep){const e=c.slice(r).map(n.from,-1),i=c.slice(r).map(n.to),l=c.invert().map(e,-1),d=c.invert().map(i),p=e>0&&(null==(o=a.doc.nodeAt(e-1))?void 0:o.marks.some((e=>e.eq(n.mark)))),u=null==(s=a.doc.nodeAt(i))?void 0:s.marks.some((e=>e.eq(n.mark)));this.editor.emit("delete",{type:"mark",mark:n.mark,from:n.from,to:n.to,deletedRange:{from:l,to:d},newRange:{from:e,to:i},partial:Boolean(u||p),editor:this.editor,transaction:t,combinedTransform:a})}}))};null==(s=null==(o=null==(r=this.editor.options.coreExtensionOptions)?void 0:r.delete)?void 0:o.async)||s?setTimeout(i,0):i()}}),kt=ft.create({name:"drop",addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("tiptapDrop"),props:{handleDrop:(e,t,n,r)=>{this.editor.emit("drop",{editor:this.editor,event:t,slice:n,moved:r})}}})]}}),yt=ft.create({name:"editable",addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("editable"),props:{editable:()=>this.editor.options.editable}})]}}),xt=new n.PluginKey("focusEvents"),bt=ft.create({name:"focusEvents",addProseMirrorPlugins(){const{editor:e}=this;return[new n.Plugin({key:xt,props:{handleDOMEvents:{focus:(t,n)=>{e.isFocused=!0;const r=e.state.tr.setMeta("focus",{event:n}).setMeta("addToHistory",!1);return t.dispatch(r),!1},blur:(t,n)=>{e.isFocused=!1;const r=e.state.tr.setMeta("blur",{event:n}).setMeta("addToHistory",!1);return t.dispatch(r),!1}}}})]}}),vt=ft.create({name:"keymap",addKeyboardShortcuts(){const e=()=>this.editor.commands.first((({commands:e})=>[()=>e.undoInputRule(),()=>e.command((({tr:t})=>{const{selection:r,doc:o}=t,{empty:s,$anchor:i}=r,{pos:a,parent:c}=i,l=i.parent.isTextblock&&a>0?t.doc.resolve(a-1):i,d=l.parent.type.spec.isolating,p=i.pos-i.parentOffset,u=d&&1===l.parent.childCount?p===i.pos:n.Selection.atStart(o).from===a;return!(!s||!c.type.isTextblock||c.textContent.length||!u||u&&"paragraph"===i.parent.type.name)&&e.clearNodes()})),()=>e.deleteSelection(),()=>e.joinBackward(),()=>e.selectNodeBackward()])),t=()=>this.editor.commands.first((({commands:e})=>[()=>e.deleteSelection(),()=>e.deleteCurrentNode(),()=>e.joinForward(),()=>e.selectNodeForward()])),r={Enter:()=>this.editor.commands.first((({commands:e})=>[()=>e.newlineInCode(),()=>e.createParagraphNear(),()=>e.liftEmptyBlock(),()=>e.splitBlock()])),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:e,"Mod-Backspace":e,"Shift-Backspace":e,Delete:t,"Mod-Delete":t,"Mod-a":()=>this.editor.commands.selectAll()},o={...r},s={...r,"Ctrl-h":e,"Alt-Backspace":e,"Ctrl-d":t,"Ctrl-Alt-Backspace":t,"Alt-Delete":t,"Alt-d":t,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return R()||Y()?s:o},addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("clearDocument"),appendTransaction:(e,t,r)=>{if(e.some((e=>e.getMeta("composition"))))return;const o=e.some((e=>e.docChanged))&&!t.doc.eq(r.doc),s=e.some((e=>e.getMeta("preventClearDocument")));if(!o||s)return;const{empty:i,from:l,to:d}=t.selection,p=n.Selection.atStart(t.doc).from,u=n.Selection.atEnd(t.doc).to;if(i||!(l===p&&d===u))return;if(!ze(r.doc))return;const f=r.tr,m=a({state:r,transaction:f}),{commands:h}=new c({editor:this.editor,state:m});return h.clearNodes(),f.steps.length?f:void 0}})]}}),wt=ft.create({name:"paste",addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("tiptapPaste"),props:{handlePaste:(e,t,n)=>{this.editor.emit("paste",{editor:this.editor,event:t,slice:n})}}})]}}),Mt=ft.create({name:"tabindex",addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}}),St=ft.create({name:"textDirection",addOptions:()=>({direction:void 0}),addGlobalAttributes(){if(!this.options.direction)return[];const{nodeExtensions:e}=Te(this.extensions);return[{types:e.filter((e=>"text"!==e.name)).map((e=>e.name)),attributes:{dir:{default:this.options.direction,parseHTML:e=>{const t=e.getAttribute("dir");return!t||"ltr"!==t&&"rtl"!==t&&"auto"!==t?this.options.direction:t},renderHTML:e=>e.dir?{dir:e.dir}:{}}}}]},addProseMirrorPlugins(){return[new n.Plugin({key:new n.PluginKey("textDirection"),props:{attributes:()=>{const e=this.options.direction;return e?{dir:e}:{}}}})]}});var $t={};function Tt(e){if(!(null==e?void 0:e.trim()))return{};const t={},n=[],r=e.replace(/["']([^"']*)["']/g,(e=>(n.push(e),`__QUOTED_${n.length-1}__`))),o=r.match(/(?:^|\s)\.([a-zA-Z][\w-]*)/g);if(o){const e=o.map((e=>e.trim().slice(1)));t.class=e.join(" ")}const s=r.match(/(?:^|\s)#([a-zA-Z][\w-]*)/);s&&(t.id=s[1]);Array.from(r.matchAll(/([a-zA-Z][\w-]*)\s*=\s*(__QUOTED_\d+__)/g)).forEach((([,e,r])=>{var o;const s=parseInt((null==(o=r.match(/__QUOTED_(\d+)__/))?void 0:o[1])||"0",10),i=n[s];i&&(t[e]=i.slice(1,-1))}));const i=r.replace(/(?:^|\s)\.([a-zA-Z][\w-]*)/g,"").replace(/(?:^|\s)#([a-zA-Z][\w-]*)/g,"").replace(/([a-zA-Z][\w-]*)\s*=\s*__QUOTED_\d+__/g,"").trim();if(i){i.split(/\s+/).filter(Boolean).forEach((e=>{e.match(/^[a-zA-Z][\w-]*$/)&&(t[e]=!0)}))}return t}function Et(e){if(!e||0===Object.keys(e).length)return"";const t=[];if(e.class){String(e.class).split(/\s+/).filter(Boolean).forEach((e=>t.push(`.${e}`)))}return e.id&&t.push(`#${e.id}`),Object.entries(e).forEach((([e,n])=>{"class"!==e&&"id"!==e&&(!0===n?t.push(e):!1!==n&&null!=n&&t.push(`${e}="${String(n)}"`))})),t.join(" ")}function Ot(e){const{nodeName:t,name:n,parseAttributes:r=Tt,serializeAttributes:o=Et,defaultAttributes:s={},requiredAttributes:i=[],allowedAttributes:a}=e,c=n||t;return{parseMarkdown:(e,n)=>{const r={...s,...e.attributes};return n.createNode(t,r,[])},markdownTokenizer:{name:t,level:"block",start(e){var t;const n=new RegExp(`^:::${c}(?:\\s|$)`,"m"),r=null==(t=e.match(n))?void 0:t.index;return void 0!==r?r:-1},tokenize(e,n,o){const s=new RegExp(`^:::${c}(?:\\s+\\{([^}]*)\\})?\\s*:::(?:\\n|$)`),a=e.match(s);if(!a)return;const l=a[1]||"",d=r(l);return i.find((e=>!(e in d)))?void 0:{type:t,raw:a[0],attributes:d}}},renderMarkdown:e=>{const t=(e=>{if(!a)return e;const t={};return a.forEach((n=>{n in e&&(t[n]=e[n])})),t})(e.attrs||{}),n=o(t);return`:::${c}${n?` {${n}}`:""} :::`}}}function Ct(e){const{nodeName:t,name:n,getContent:r,parseAttributes:o=Tt,serializeAttributes:s=Et,defaultAttributes:i={},content:a="block",allowedAttributes:c}=e,l=n||t;return{parseMarkdown:(e,n)=>{let o;if(r){const t=r(e);o="string"==typeof t?[{type:"text",text:t}]:t}else o="block"===a?n.parseChildren(e.tokens||[]):n.parseInline(e.tokens||[]);const s={...i,...e.attributes};return n.createNode(t,s,o)},markdownTokenizer:{name:t,level:"block",start(e){var t;const n=new RegExp(`^:::${l}`,"m"),r=null==(t=e.match(n))?void 0:t.index;return void 0!==r?r:-1},tokenize(e,n,r){var s;const i=new RegExp(`^:::${l}(?:\\s+\\{([^}]*)\\})?\\s*\\n`),c=e.match(i);if(!c)return;const[d,p=""]=c,u=o(p);let f=1;const m=d.length;let h="";const g=/^:::([\w-]*)(\s.*)?/gm,k=e.slice(m);for(g.lastIndex=0;;){const n=g.exec(k);if(null===n)break;const o=n.index,i=n[1];if(!(null==(s=n[2])?void 0:s.endsWith(":::")))if(i)f+=1;else if(f-=1,0===f){const s=k.slice(0,o);h=s.trim();const i=e.slice(0,m+o+n[0].length);let c=[];if(h)if("block"===a)for(c=r.blockTokens(s),c.forEach((e=>{!e.text||e.tokens&&0!==e.tokens.length||(e.tokens=r.inlineTokens(e.text))}));c.length>0;){const e=c[c.length-1];if("paragraph"!==e.type||e.text&&""!==e.text.trim())break;c.pop()}else c=r.inlineTokens(h);return{type:t,raw:i,attributes:u,content:h,tokens:c}}}}},renderMarkdown:(e,t)=>{const n=(e=>{if(!c)return e;const t={};return c.forEach((n=>{n in e&&(t[n]=e[n])})),t})(e.attrs||{}),r=s(n),o=r?` {${r}}`:"",i=t.renderChildren(e.content||[],"\n\n");return`:::${l}${o}\n\n${i}\n\n:::`}}}function At(e){if(!e.trim())return{};const t={},n=/(\w+)=(?:"([^"]*)"|'([^']*)')/g;let r=n.exec(e);for(;null!==r;){const[,o,s,i]=r;t[o]=s||i,r=n.exec(e)}return t}function Pt(e){return Object.entries(e).filter((([,e])=>null!=e)).map((([e,t])=>`${e}="${t}"`)).join(" ")}function It(e){const{nodeName:t,name:n,getContent:r,parseAttributes:o=At,serializeAttributes:s=Pt,defaultAttributes:i={},selfClosing:a=!1,allowedAttributes:c}=e,l=n||t,d=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return{parseMarkdown:(e,n)=>{const o={...i,...e.attributes};if(a)return n.createNode(t,o);const s=r?r(e):e.content||"";return s?n.createNode(t,o,[n.createTextNode(s)]):n.createNode(t,o,[])},markdownTokenizer:{name:t,level:"inline",start(e){const t=a?new RegExp(`\\[${d}\\s*[^\\]]*\\]`):new RegExp(`\\[${d}\\s*[^\\]]*\\][\\s\\S]*?\\[\\/${d}\\]`),n=e.match(t),r=null==n?void 0:n.index;return void 0!==r?r:-1},tokenize(e,n,r){const s=a?new RegExp(`^\\[${d}\\s*([^\\]]*)\\]`):new RegExp(`^\\[${d}\\s*([^\\]]*)\\]([\\s\\S]*?)\\[\\/${d}\\]`),i=e.match(s);if(!i)return;let c="",l="";if(a){const[,e]=i;l=e}else{const[,e,t]=i;l=e,c=t||""}const p=o(l.trim());return{type:t,raw:i[0],content:c.trim(),attributes:p}}},renderMarkdown:e=>{let t="";r?t=r(e):e.content&&e.content.length>0&&(t=e.content.filter((e=>"text"===e.type)).map((e=>e.text)).join(""));const n=(e=>{if(!c)return e;const t={};return c.forEach((n=>{const r="string"==typeof n?n:n.name,o="string"==typeof n?void 0:n.skipIfDefault;if(r in e){const n=e[r];if(void 0!==o&&n===o)return;t[r]=n}})),t})(e.attrs||{}),o=s(n),i=o?` ${o}`:"";return a?`[${l}${i}]`:`[${l}${i}]${t}[/${l}]`}}}function jt(e,t,n){var r,o,s,i;const a=e.split("\n"),c=[];let l="",d=0;const p=t.baseIndentSize||2;for(;d<a.length;){const e=a[d],u=e.match(t.itemPattern);if(!u){if(c.length>0)break;if(""===e.trim()){d+=1,l=`${l}${e}\n`;continue}return}const f=t.extractItemData(u),{indentLevel:m,mainContent:h}=f;l=`${l}${e}\n`;const g=[h];for(d+=1;d<a.length;){const e=a[d];if(""===e.trim()){const t=a.slice(d+1).findIndex((e=>""!==e.trim()));if(-1===t)break;if(((null==(o=null==(r=a[d+1+t].match(/^(\s*)/))?void 0:r[1])?void 0:o.length)||0)>m){g.push(e),l=`${l}${e}\n`,d+=1;continue}break}if(!(((null==(i=null==(s=e.match(/^(\s*)/))?void 0:s[1])?void 0:i.length)||0)>m))break;g.push(e),l=`${l}${e}\n`,d+=1}let k;const y=g.slice(1);if(y.length>0){const e=y.map((e=>e.slice(m+p))).join("\n");e.trim()&&(k=t.customNestedParser?t.customNestedParser(e):n.blockTokens(e))}const x=t.createToken(f,k);c.push(x)}if(0!==c.length)return{items:c,raw:l}}function Nt(e,t,n,r){if(!e||!Array.isArray(e.content))return"";const o="function"==typeof n?n(r):n,[s,...i]=e.content;let a=`${o}${t.renderChildren([s])}`;return i&&i.length>0&&i.forEach(((e,n)=>{var r,o;const s=null!=(o=null==(r=t.renderChild)?void 0:r.call(t,e,n+1))?o:t.renderChildren([e]);if(null!=s){const n=s.split("\n").map((e=>e?t.indent(e):t.indent(""))).join("\n");a+="paragraph"===e.type?`\n\n${n}`:`\n${n}`}})),a}i($t,{createAtomBlockMarkdownSpec:()=>Ot,createBlockMarkdownSpec:()=>Ct,createInlineMarkdownSpec:()=>It,parseAttributes:()=>Tt,parseIndentedBlocks:()=>jt,renderNestedMarkdownContent:()=>Nt,serializeAttributes:()=>Et});exports.CommandManager=c,exports.Extendable=dt,exports.Extension=ft,exports.InputRule=at,exports.Mark=class e extends dt{constructor(){super(...arguments),this.type="mark"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}static handleExit({editor:e,mark:t}){const{tr:n}=e.state,r=e.state.selection.$from;if(r.pos===r.end()){const o=r.marks();if(!!!o.find((e=>(null==e?void 0:e.type.name)===t.name)))return!1;const s=o.find((e=>(null==e?void 0:e.type.name)===t.name));return s&&n.removeStoredMark(s),n.insertText(" ",r.pos),e.view.dispatch(n),!0}return!1}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},exports.Node=class e extends dt{constructor(){super(...arguments),this.type="node"}static create(t={}){const n="function"==typeof t?t():t;return new e(n)}configure(e){return super.configure(e)}extend(e){const t="function"==typeof e?e():e;return super.extend(t)}},exports.PasteRule=pt,exports.callOrReturn=$e,exports.combineTransactionSteps=xe,exports.commands=l,exports.createAtomBlockMarkdownSpec=Ot,exports.createBlockMarkdownSpec=Ct,exports.createChainableState=a,exports.createDocument=ge,exports.createInlineMarkdownSpec=It,exports.createNodeFromContent=K,exports.defaultBlockAt=be,exports.deleteProps=ae,exports.elementFromString=L,exports.extensions=ut,exports.findParentNode=we,exports.findParentNodeClosestToPos=ve,exports.getChangedRanges=Ie,exports.getExtensionField=Me,exports.getMarkAttributes=ye,exports.getMarkRange=E,exports.getMarkType=O,exports.getMarksBetween=je,exports.getNodeAtPosition=(e,t,n,r=20)=>{const o=e.doc.resolve(n);let s=r,i=null;for(;s>0&&null===i;){const e=o.node(s);(null==e?void 0:e.type.name)===t?i=e:s-=1}return[i,s]},exports.getNodeType=k,exports.getRenderedAttributes=function(e,t){return t.filter((t=>t.type===e.type.name)).filter((e=>e.attribute.rendered)).map((t=>t.attribute.renderHTML?t.attribute.renderHTML(e.attrs)||{}:{[t.name]:e.attrs[t.name]})).reduce(((e,t)=>Oe(e,t)),{})},exports.getSchemaTypeNameByName=ie,exports.getSplittedAttributes=Ne,exports.getTextBetween=Ce,exports.getTextSerializersFromSchema=Ae,exports.isAndroid=N,exports.isAtEndOfNode=(e,t)=>{const{$from:n,$to:r,$anchor:o}=e.selection;if(t){const n=we((e=>e.type.name===t))(e.selection);if(!n)return!1;const r=e.doc.resolve(n.pos+1);return o.pos+1===r.end()}return!(r.parentOffset<r.parent.nodeSize-2||n.pos!==r.pos)},exports.isAtStartOfNode=e=>{const{$from:t,$to:n}=e.selection;return!(t.parentOffset>0||t.pos!==n.pos)},exports.isFunction=Se,exports.isList=Be,exports.isMacOS=Y,exports.isMarkActive=Re,exports.isNodeActive=te,exports.isNodeEmpty=ze,exports.isPlainObject=ct,exports.isRegExp=M,exports.isSafari=B,exports.isTextSelection=P,exports.isiOS=R,exports.markInputRule=function(e){return new at({find:e.find,handler:({state:t,range:n,match:r})=>{const o=$e(e.getAttributes,void 0,r);if(!1===o||null===o)return null;const{tr:s}=t,i=r[r.length-1],a=r[0];if(i){const r=a.search(/\S/),c=n.from+a.indexOf(i),l=c+i.length;if(je(n.from,n.to,t.doc).filter((t=>t.mark.type.excluded.find((n=>n===e.type&&n!==t.mark.type)))).filter((e=>e.to>c)).length)return null;l<n.to&&s.delete(l,n.to),c>n.from&&s.delete(n.from+r,c);const d=n.from+r+i.length;s.addMark(n.from+r,d,e.type.create(o||{})),s.removeStoredMark(e.type)}},undoable:e.undoable})},exports.markPasteRule=function(e){return new pt({find:e.find,handler:({state:t,range:n,match:r,pasteEvent:o})=>{const s=$e(e.getAttributes,void 0,r,o);if(!1===s||null===s)return null;const{tr:i}=t,a=r[r.length-1],c=r[0];let l=n.to;if(a){const o=c.search(/\S/),d=n.from+c.indexOf(a),p=d+a.length;if(je(n.from,n.to,t.doc).filter((t=>t.mark.type.excluded.find((n=>n===e.type&&n!==t.mark.type)))).filter((e=>e.to>d)).length)return null;p<n.to&&i.delete(p,n.to),d>n.from&&i.delete(n.from+o,d),l=n.from+o+a.length,i.addMark(n.from+o,l,e.type.create(s||{}));void 0!==r.index&&void 0!==r.input&&r.index+r[0].length>=r.input.length||i.removeStoredMark(e.type)}}})},exports.markdown=$t,exports.mergeAttributes=Oe,exports.mergeDeep=lt,exports.minMax=I,exports.objectIncludes=S,exports.parseAttributes=Tt,exports.parseIndentedBlocks=jt,exports.removeDuplicates=Pe,exports.renderNestedMarkdownContent=Nt,exports.resolveFocusPosition=j,exports.selectionToInsertionEnd=q,exports.serializeAttributes=Et,exports.splitExtensions=Te,exports.textblockTypeInputRule=function(e){return new at({find:e.find,handler:({state:t,range:n,match:r})=>{const o=t.doc.resolve(n.from),s=$e(e.getAttributes,void 0,r)||{};if(!o.node(-1).canReplaceWith(o.index(-1),o.indexAfter(-1),e.type))return null;t.tr.delete(n.from,n.to).setBlockType(n.from,n.from,e.type,s)},undoable:e.undoable})},exports.wrappingInputRule=function(t){return new at({find:t.find,handler:({state:n,range:r,match:o,chain:s})=>{const i=$e(t.getAttributes,void 0,o)||{},a=n.tr.delete(r.from,r.to),c=a.doc.resolve(r.from).blockRange(),l=c&&e.findWrapping(c,t.type,i);if(!l)return null;if(a.wrap(c,l),t.keepMarks&&t.editor){const{selection:e,storedMarks:r}=n,{splittableMarks:o}=t.editor.extensionManager,s=r||e.$to.parentOffset&&e.$from.marks();if(s){const e=s.filter((e=>o.includes(e.type.name)));a.ensureMarks(e)}}if(t.keepAttributes){const e="bulletList"===t.type.name||"orderedList"===t.type.name?"listItem":"taskList";s().updateAttributes(e,i).run()}const d=a.doc.resolve(r.from-1).nodeBefore;d&&d.type===t.type&&e.canJoin(a.doc,r.from-1)&&(!t.joinPredicate||t.joinPredicate(o,d))&&a.join(r.from-1)},undoable:t.undoable})};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|