@notum-cz/strapi-plugin-tiptap-editor 1.0.1
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/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/_chunks/AccentCursive-CpAPpH9C.mjs +3383 -0
- package/dist/_chunks/AccentCursive-CpAPpH9C.mjs.map +1 -0
- package/dist/_chunks/AccentCursive-D6sTlhub.js +3384 -0
- package/dist/_chunks/AccentCursive-D6sTlhub.js.map +1 -0
- package/dist/_chunks/FormattedHeadingInput-DycgfIze.mjs +101 -0
- package/dist/_chunks/FormattedHeadingInput-DycgfIze.mjs.map +1 -0
- package/dist/_chunks/FormattedHeadingInput-FFjiRSEJ.js +101 -0
- package/dist/_chunks/FormattedHeadingInput-FFjiRSEJ.js.map +1 -0
- package/dist/_chunks/RichTextInput-BZQ2iVqa.mjs +4481 -0
- package/dist/_chunks/RichTextInput-BZQ2iVqa.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-BbbQxPc-.js +4414 -0
- package/dist/_chunks/RichTextInput-BbbQxPc-.js.map +1 -0
- package/dist/_chunks/RichTextInput-BjLR2pi0.js +4416 -0
- package/dist/_chunks/RichTextInput-BjLR2pi0.js.map +1 -0
- package/dist/_chunks/RichTextInput-BlxoJMa2.js +4488 -0
- package/dist/_chunks/RichTextInput-BlxoJMa2.js.map +1 -0
- package/dist/_chunks/RichTextInput-Bm3X8fR2.mjs +4400 -0
- package/dist/_chunks/RichTextInput-Bm3X8fR2.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-Bms-gSvK.js +4407 -0
- package/dist/_chunks/RichTextInput-Bms-gSvK.js.map +1 -0
- package/dist/_chunks/RichTextInput-BtNjPJRN.mjs +4400 -0
- package/dist/_chunks/RichTextInput-BtNjPJRN.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-Bw3tcXfp.js +4407 -0
- package/dist/_chunks/RichTextInput-Bw3tcXfp.js.map +1 -0
- package/dist/_chunks/RichTextInput-CsgNpoxq.mjs +4409 -0
- package/dist/_chunks/RichTextInput-CsgNpoxq.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-CwTvEMda.js +4407 -0
- package/dist/_chunks/RichTextInput-CwTvEMda.js.map +1 -0
- package/dist/_chunks/RichTextInput-DG-36krM.js +1181 -0
- package/dist/_chunks/RichTextInput-DG-36krM.js.map +1 -0
- package/dist/_chunks/RichTextInput-DLac-zNQ.mjs +4400 -0
- package/dist/_chunks/RichTextInput-DLac-zNQ.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-DSXttrvi.js +4407 -0
- package/dist/_chunks/RichTextInput-DSXttrvi.js.map +1 -0
- package/dist/_chunks/RichTextInput-DeJ6Exto.mjs +4400 -0
- package/dist/_chunks/RichTextInput-DeJ6Exto.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-DgT88AkO.mjs +1175 -0
- package/dist/_chunks/RichTextInput-DgT88AkO.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-DlMaDJQF.mjs +4400 -0
- package/dist/_chunks/RichTextInput-DlMaDJQF.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-DtaYdjCs.mjs +4400 -0
- package/dist/_chunks/RichTextInput-DtaYdjCs.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-YTKXo5oq.js +4407 -0
- package/dist/_chunks/RichTextInput-YTKXo5oq.js.map +1 -0
- package/dist/_chunks/RichTextInput-tmg-oMJk.mjs +4407 -0
- package/dist/_chunks/RichTextInput-tmg-oMJk.mjs.map +1 -0
- package/dist/_chunks/RichTextInput-umhMsI5o.js +4407 -0
- package/dist/_chunks/RichTextInput-umhMsI5o.js.map +1 -0
- package/dist/_chunks/en-B4KWt_jN.js +5 -0
- package/dist/_chunks/en-B4KWt_jN.js.map +1 -0
- package/dist/_chunks/en-Byx4XI2L.mjs +5 -0
- package/dist/_chunks/en-Byx4XI2L.mjs.map +1 -0
- package/dist/admin/index.js +71 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/index.mjs +72 -0
- package/dist/admin/index.mjs.map +1 -0
- package/dist/admin/src/components/BaseTiptapInput.d.ts +12 -0
- package/dist/admin/src/components/FormattedHeadingInput.d.ts +4 -0
- package/dist/admin/src/components/Initializer.d.ts +5 -0
- package/dist/admin/src/components/LinkDialog.d.ts +14 -0
- package/dist/admin/src/components/RichTextInput.d.ts +4 -0
- package/dist/admin/src/components/Spacer.d.ts +3 -0
- package/dist/admin/src/components/TableSizeDialog.d.ts +10 -0
- package/dist/admin/src/components/TiptapInput.d.ts +7 -0
- package/dist/admin/src/components/TiptapInputStyles.d.ts +2 -0
- package/dist/admin/src/components/ToolbarButton.d.ts +11 -0
- package/dist/admin/src/extensions/AccentCursive.d.ts +18 -0
- package/dist/admin/src/extensions/Heading.d.ts +8 -0
- package/dist/admin/src/extensions/Link.d.ts +7 -0
- package/dist/admin/src/extensions/Script.d.ts +7 -0
- package/dist/admin/src/extensions/StarterKit.d.ts +13 -0
- package/dist/admin/src/extensions/Table.d.ts +11 -0
- package/dist/admin/src/extensions/TextAlign.d.ts +9 -0
- package/dist/admin/src/fields/formattedHeadingField.d.ts +20 -0
- package/dist/admin/src/fields/richTextField.d.ts +20 -0
- package/dist/admin/src/icons/TextAlignCenter.d.ts +2 -0
- package/dist/admin/src/icons/TextAlignJustify.d.ts +2 -0
- package/dist/admin/src/icons/TextAlignLeft.d.ts +2 -0
- package/dist/admin/src/icons/TextAlignRight.d.ts +2 -0
- package/dist/admin/src/index.d.ts +10 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/utils/getTranslation.d.ts +2 -0
- package/dist/admin/src/utils/tiptapUtils.d.ts +18 -0
- package/dist/server/index.js +44 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +45 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/src/bootstrap.d.ts +5 -0
- package/dist/server/src/config/index.d.ts +5 -0
- package/dist/server/src/content-types/index.d.ts +2 -0
- package/dist/server/src/controllers/index.d.ts +2 -0
- package/dist/server/src/destroy.d.ts +5 -0
- package/dist/server/src/fields/richTextField.d.ts +2 -0
- package/dist/server/src/index.d.ts +25 -0
- package/dist/server/src/middlewares/index.d.ts +2 -0
- package/dist/server/src/policies/index.d.ts +2 -0
- package/dist/server/src/register.d.ts +5 -0
- package/dist/server/src/routes/index.d.ts +2 -0
- package/dist/server/src/services/index.d.ts +2 -0
- package/dist/shared/fields.d.ts +1 -0
- package/dist/shared/pluginId.d.ts +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextInput-BbbQxPc-.js","sources":["../../admin/src/components/TiptapInputStyles.ts","../../admin/src/components/BaseTiptapInput.tsx","../../admin/src/utils/tiptapUtils.tsx","../../admin/src/extensions/StarterKit.tsx","../../admin/src/components/LinkDialog.tsx","../../admin/src/extensions/Link.tsx","../../node_modules/@tiptap/core/dist/index.js","../../node_modules/@tiptap/extension-heading/dist/index.js","../../admin/src/extensions/Heading.tsx","../../admin/src/extensions/Script.tsx","../../node_modules/@tiptap/extensions/dist/index.js","../../admin/src/components/TableSizeDialog.tsx","../../admin/src/extensions/Table.tsx","../../admin/src/icons/TextAlignLeft.tsx","../../admin/src/icons/TextAlignJustify.tsx","../../admin/src/icons/TextAlignRight.tsx","../../admin/src/icons/TextAlignCenter.tsx","../../admin/src/extensions/TextAlign.tsx","../../admin/src/components/RichTextInput.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nexport const TiptapInputStyles = styled.div`\n .editor-toolbar {\n margin-bottom: 0.25rem;\n padding-bottom: 0.25rem;\n }\n\n .ProseMirror {\n font-size: 1.4rem; /* Increase editor font size to match Strapi default */\n outline: none;\n max-height: 60vh;\n overflow-y: auto;\n padding: 1rem;\n }\n\n /* Remove unnecessary margin at the top of the editor */\n .ProseMirror *:first-child {\n margin-top: 0;\n }\n\n /* --- Basic text styles --- */\n\n .ProseMirror p {\n margin: 0 0 12px;\n }\n\n .ProseMirror p:last-child {\n margin-bottom: 0;\n }\n\n .ProseMirror h1,\n .ProseMirror h2,\n .ProseMirror h3,\n .ProseMirror h4 {\n font-weight: 600;\n line-height: 1.25;\n margin: 1em 0 0.5em;\n }\n\n .ProseMirror h1 {\n font-size: 4rem;\n }\n\n .ProseMirror h2 {\n font-size: 3.2rem;\n }\n\n .ProseMirror h3 {\n font-size: 2.5rem;\n }\n\n .ProseMirror h4 {\n font-size: 2rem;\n }\n\n .ProseMirror ul,\n .ProseMirror ol {\n margin: 0.75em 0 1em;\n padding-left: 1.5rem;\n }\n\n .ProseMirror ul {\n list-style: disc;\n }\n\n .ProseMirror ol {\n list-style: decimal;\n }\n\n .ProseMirror li {\n margin: 0.25em 0;\n }\n\n .ProseMirror blockquote {\n border-left: 3px solid #222;\n margin: 1em 0;\n padding: 0.25em 1rem;\n font-style: italic;\n background: #fafafa;\n }\n\n .ProseMirror code {\n background: #f3f3f3;\n padding: 2px 4px;\n border-radius: 4px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\n font-size: 0.9em;\n }\n\n .ProseMirror a {\n color: #0c75af;\n text-decoration: underline;\n }\n\n .ProseMirror strong {\n font-weight: 600;\n }\n\n .ProseMirror em {\n font-style: italic;\n }\n\n .ProseMirror u {\n text-decoration: underline;\n }\n\n .ProseMirror s {\n text-decoration: line-through;\n }\n\n // Source: https://tiptap.dev/docs/editor/extensions/nodes/table?gad_source=1&gad_campaignid=22014820935&gclid=Cj0KCQjwjL3HBhCgARIsAPUg7a5ZcPOMy7tBMIDShF9LCrr6JRpVHDI9vlgYCfoVjzM573ROeYQwcdMaArJMEALw_wcB\n\n .ProseMirror {\n table {\n border-collapse: collapse;\n margin: 0;\n overflow: hidden;\n table-layout: fixed;\n width: 100%;\n\n td,\n th {\n border: 1px solid #ddd;\n box-sizing: border-box;\n min-width: 1em;\n padding: 6px 8px;\n position: relative;\n vertical-align: top;\n\n > * {\n margin-bottom: 0;\n }\n }\n\n /* It is not possible to distinguish header vs body cells when rendering\n content in React. So we render all as td and the user should use bold text\n in cells. */\n th {\n background-color: inherit;\n font-weight: normal;\n text-align: left;\n }\n\n .selectedCell:after {\n background: rgba(0, 37, 159, 0.32);\n content: '';\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n position: absolute;\n z-index: 2;\n }\n\n .column-resize-handle {\n background-color: purple;\n bottom: -2px;\n pointer-events: none;\n position: absolute;\n right: -2px;\n top: 0;\n width: 4px;\n }\n }\n\n .tableWrapper {\n margin: 1.5rem 0;\n overflow-x: auto;\n }\n\n &.resize-cursor {\n cursor: ew-resize;\n cursor: col-resize;\n }\n }\n\n /* --- Accent Cursive --- */\n /* How the accented text looks like in editor */\n\n .accent-cursive {\n color: var(--color-accent-dark, #ae8f5b);\n font-style: italic;\n font-weight: bold;\n }\n\n /* --- Only Cursive --- */\n /* How the only cursive text looks like in editor */\n\n .only-cursive {\n font-style: italic;\n font-weight: bold;\n }\n`;\n","import { type InputProps } from '@strapi/strapi/admin';\nimport { Box, Field, Flex } from '@strapi/design-system';\nimport { EditorContent } from '@tiptap/react';\nimport { Editor } from '@tiptap/core';\nimport { TiptapInputStyles } from './TiptapInputStyles';\nimport { FieldValue } from '../utils/tiptapUtils';\nimport { forwardRef } from 'react';\n\ntype TiptapInputProps = InputProps & {\n labelAction?: React.ReactNode;\n editor: Editor;\n field: FieldValue;\n children?: React.ReactNode;\n};\n\nconst BaseTiptapInput = forwardRef<HTMLDivElement, TiptapInputProps>(\n (\n { hint, disabled = false, labelAction, label, name, required = false, editor, field, children },\n forwardedRef\n ) => {\n const borderColor = field.error ? 'danger600' : 'neutral200';\n const background = disabled ? 'neutral200' : 'neutral100';\n\n return (\n <Field.Root name={name} id={name} hint={hint} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n\n <TiptapInputStyles>\n <Box\n className={`tiptap-editor-wrapper ${field.error ? 'has-error' : ''} ${disabled ? 'is-disabled' : ''}`}\n hasRadius\n borderColor={borderColor}\n background={background}\n paddingTop={1}\n paddingBottom={0}\n paddingLeft={0}\n paddingRight={0}\n >\n <Box className=\"editor-toolbar\" paddingLeft={2} paddingRight={2} paddingBottom={2}>\n <Flex gap={1} wrap=\"wrap\">\n {children}\n </Flex>\n </Box>\n <Box\n className=\"editor-content\"\n background=\"neutral0\"\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={2}\n >\n <EditorContent editor={editor} disabled={disabled} ref={forwardedRef} />\n </Box>\n </Box>\n </TiptapInputStyles>\n\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nexport default BaseTiptapInput;\n","import { Extensions, JSONContent } from '@tiptap/core';\nimport { useEditor } from '@tiptap/react';\nimport { type InputProps, useField } from '@strapi/strapi/admin';\nimport { Button, Tooltip } from '@strapi/design-system';\n\nexport interface FieldValue<TValue = any> {\n error?: string;\n initialValue: TValue;\n onChange: (eventOrPath: React.ChangeEvent<any> | string, value?: TValue) => void;\n value: TValue;\n rawError?: any;\n}\n\nexport type TiptapInputProps = InputProps & {\n labelAction?: React.ReactNode;\n};\n\nexport function tiptapContent(text: string): JSONContent {\n return {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: text,\n },\n ],\n },\n ],\n };\n}\n\nfunction parseJSONContent(value: any, defaultValue: string) {\n if (!value) {\n return tiptapContent(defaultValue);\n }\n\n try {\n return typeof value === 'string' ? JSON.parse(value) : value;\n } catch (e) {\n console.error('Failed to parse JSON content:', e);\n return tiptapContent(`\n This component's content is malformed. Please change it or remove this component.\n Original content: ${JSON.stringify(value)}\n `);\n }\n}\n\nexport function useTiptapEditor(\n name: string,\n defaultValue: string = '',\n extensions: Extensions = []\n) {\n const field = useField(name);\n\n const editor = useEditor({\n extensions: extensions,\n content: parseJSONContent(field.value, defaultValue),\n onUpdate: ({ editor }) => {\n const json = editor.getJSON();\n field.onChange(name, JSON.stringify(json));\n },\n });\n\n return { editor, field };\n}\n\nexport function toolbarButton(\n key: string,\n {\n onClick,\n icon,\n active,\n disabled,\n tooltip,\n marginLeft,\n hidden,\n }: {\n onClick: () => void;\n icon: React.ReactNode;\n active?: boolean;\n disabled?: boolean;\n tooltip: string;\n marginLeft?: number;\n hidden?: boolean;\n }\n) {\n return (\n <Tooltip key={key} description={tooltip}>\n <Button\n onClick={onClick}\n variant=\"tertiary\"\n size=\"S\"\n paddingLeft={2}\n paddingRight={2}\n marginLeft={marginLeft ?? 1}\n disabled={disabled}\n style={{\n color: active ? 'black' : undefined,\n backgroundColor: active ? '#d9d8ff' : undefined,\n display: hidden ? 'none' : undefined,\n }}\n >\n {icon}\n </Button>\n </Tooltip>\n );\n}\n\nexport function spacer(width: number) {\n return <div style={{ width: width + 'px' }} />;\n}\n","import { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport { toolbarButton } from '../utils/tiptapUtils';\nimport {\n Bold as BoldIcon,\n BulletList as BulletListIcon,\n Code as CodeIcon,\n Italic as ItalicIcon,\n NumberList as NumberListIcon,\n Quotes as QuotesIcon,\n StrikeThrough as StrikeThroughIcon,\n Underline as UnderlineIcon,\n} from '@strapi/icons';\n\nexport function useStarterKit(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isBold: ctx.editor.isActive('bold') ?? false,\n canBold: ctx.editor.can().chain().toggleBold().run() ?? false,\n isItalic: ctx.editor.isActive('italic') ?? false,\n canItalic: ctx.editor.can().chain().toggleItalic().run() ?? false,\n isUnderline: ctx.editor.isActive('underline') ?? false,\n canUnderline: ctx.editor.can().chain().toggleUnderline().run() ?? false,\n isStrike: ctx.editor.isActive('strike') ?? false,\n canStrike: ctx.editor.can().chain().toggleStrike().run() ?? false,\n isCode: ctx.editor.isActive('code') ?? false,\n canCode: ctx.editor.can().chain().toggleCode().run() ?? false,\n isBulletList: ctx.editor.isActive('bulletList') ?? false,\n canToggleBulletList: ctx.editor.can().chain().toggleBulletList().run() ?? false,\n isOrderedList: ctx.editor.isActive('orderedList') ?? false,\n canToggleOrderedList: ctx.editor.can().chain().toggleOrderedList().run() ?? false,\n isBlockquote: ctx.editor.isActive('blockquote') ?? false,\n canToggleBlockquote: ctx.editor.can().chain().toggleBlockquote().run() ?? false,\n };\n },\n });\n\n const toggleBold = () => editor?.chain().focus().toggleBold().run();\n const toggleItalic = () => editor?.chain().focus().toggleItalic().run();\n const toggleUnderline = () => editor?.chain().focus().toggleUnderline().run();\n const toggleStrike = () => editor?.chain().focus().toggleStrike().run();\n const toggleCode = () => editor?.chain().focus().toggleCode().run();\n const toggleBulletList = () => editor?.chain().focus().toggleBulletList().run();\n const toggleOrderedList = () => editor?.chain().focus().toggleOrderedList().run();\n const toggleBlockquote = () => editor?.chain().focus().toggleBlockquote().run();\n\n return {\n boldButton: toolbarButton('bold', {\n onClick: toggleBold,\n icon: <BoldIcon />,\n active: editorState.isBold,\n disabled: props.disabled || !editor || !editorState.canBold,\n tooltip: 'Bold',\n }),\n italicButton: toolbarButton('italic', {\n onClick: toggleItalic,\n icon: <ItalicIcon />,\n active: editorState.isItalic,\n disabled: props.disabled || !editor || !editorState.canItalic,\n tooltip: 'Italic',\n }),\n underlineButton: toolbarButton('underline', {\n onClick: toggleUnderline,\n icon: <UnderlineIcon />,\n active: editorState.isUnderline,\n disabled: props.disabled || !editor || !editorState.canUnderline,\n tooltip: 'Underline',\n }),\n strikeButton: toolbarButton('strike', {\n onClick: toggleStrike,\n icon: <StrikeThroughIcon />,\n active: editorState.isStrike,\n disabled: props.disabled || !editor || !editorState.canStrike,\n tooltip: 'Strikethrough',\n }),\n bulletButton: toolbarButton('bullet', {\n onClick: toggleBulletList,\n icon: <BulletListIcon />,\n active: editorState.isBulletList,\n disabled: props.disabled || !editor || !editorState.canToggleBulletList,\n tooltip: 'Bullet list',\n }),\n orderedButton: toolbarButton('ordered', {\n onClick: toggleOrderedList,\n icon: <NumberListIcon />,\n active: editorState.isOrderedList,\n disabled: props.disabled || !editor || !editorState.canToggleOrderedList,\n tooltip: 'Numbered list',\n }),\n codeButton: toolbarButton('code', {\n onClick: toggleCode,\n icon: <CodeIcon />,\n active: editorState.isCode,\n disabled: props.disabled || !editor || !editorState.canCode,\n tooltip: 'Inline code',\n }),\n blockquoteButton: toolbarButton('quote', {\n onClick: toggleBlockquote,\n icon: <QuotesIcon />,\n active: editorState.isBlockquote,\n disabled: props.disabled || !editor || !editorState.canToggleBlockquote,\n tooltip: 'Quote',\n }),\n };\n}\n","import React from 'react';\nimport { Button, Dialog, Field, TextInput } from '@strapi/design-system';\n\nexport type LinkDialogPayload = { url: string };\n\ninterface LinkDialogProps {\n open: boolean;\n url: string | undefined;\n mode: 'add' | 'edit';\n onClose: () => void;\n onSave: (payload: LinkDialogPayload) => void;\n onRemove: () => void;\n}\n\n// Dialog for adding or editing/removing a link.\nexport const LinkDialog: React.FC<LinkDialogProps> = ({\n open,\n url,\n mode,\n onClose,\n onSave,\n onRemove,\n}) => {\n const [value, setValue] = React.useState(url || '');\n\n React.useEffect(() => {\n if (open) {\n setValue(url || '');\n }\n }, [open, url, mode]);\n\n const handleSave = () => {\n onSave({ url: value.trim() });\n };\n\n const isSaveDisabled = mode === 'add' ? value.trim() === '' : false; // allow empty to remove when editing\n\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(v: boolean) => {\n if (!v) onClose();\n }}\n >\n {open && (\n <Dialog.Content>\n <Dialog.Header>{mode === 'add' ? 'Add link' : 'Edit link'}</Dialog.Header>\n <Dialog.Body>\n <Field.Root width=\"100%\">\n <Field.Label>URL</Field.Label>\n <TextInput\n name=\"link-url\"\n placeholder=\"https://example.com\"\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setValue(e.target.value)}\n />\n </Field.Root>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Cancel>\n {mode === 'edit' && (\n <Button variant=\"danger-light\" fullWidth onClick={onRemove}>\n Remove link\n </Button>\n )}\n <Dialog.Action>\n <Button\n fullWidth\n variant=\"success-light\"\n onClick={handleSave}\n disabled={isSaveDisabled}\n >\n Save\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n )}\n </Dialog.Root>\n );\n};\n\nexport default LinkDialog;\n","import { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport { toolbarButton } from '../utils/tiptapUtils';\nimport { Link as LinkIcon } from '@strapi/icons';\nimport LinkDialog, { LinkDialogPayload } from '../components/LinkDialog';\nimport { useRef, useState } from 'react';\n\nexport function useLink(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isLink: ctx.editor.isActive('link') ?? false,\n canSetLink: ctx.editor.can().setLink?.({ href: 'https://example.com' }) ?? true,\n };\n },\n });\n\n const [showLinkDialog, setShowLinkDialog] = useState(false);\n const [currentLinkUrl, setCurrentLinkUrl] = useState<string>('');\n const [linkDialogMode, setLinkDialogMode] = useState<'add' | 'edit'>('add');\n const selectionRef = useRef<{ from: number; to: number } | null>(null);\n\n const openAddLinkDialog = () => {\n if (!editor) return;\n const { from, to } = editor.state.selection;\n selectionRef.current = { from, to };\n setCurrentLinkUrl('');\n setLinkDialogMode('add');\n setShowLinkDialog(true);\n };\n\n const openEditLinkDialog = () => {\n if (!editor) return;\n const { from, to } = editor.state.selection;\n selectionRef.current = { from, to };\n const currentHref = (editor.getAttributes('link').href as string | undefined) || '';\n setCurrentLinkUrl(currentHref);\n setLinkDialogMode('edit');\n setShowLinkDialog(true);\n };\n\n const toggleLink = () => {\n if (!editor) return;\n if (editorState.isLink) {\n openEditLinkDialog();\n } else {\n openAddLinkDialog();\n }\n };\n\n const restoreSelection = () => {\n if (!editor) return;\n const sel = selectionRef.current;\n if (sel) {\n editor.chain().setTextSelection({ from: sel.from, to: sel.to }).run();\n }\n };\n\n const handleSaveEditedLink = ({ url }: LinkDialogPayload) => {\n if (!editor) return;\n restoreSelection();\n const chain = editor.chain().focus().extendMarkRange('link');\n if (url === '') {\n chain.unsetLink().run();\n } else {\n // updateAttributes ensures existing link mark is updated instead of creating a new one\n chain.updateAttributes('link', { href: url }).run();\n }\n setShowLinkDialog(false);\n };\n\n const handleRemoveLink = () => {\n if (!editor) return;\n restoreSelection();\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n setShowLinkDialog(false);\n };\n\n const handleSaveNewLink = ({ url }: LinkDialogPayload) => {\n if (!editor) return;\n restoreSelection();\n editor.chain().focus().setLink({ href: url }).run();\n setShowLinkDialog(false);\n };\n\n return {\n linkButton: toolbarButton('link', {\n onClick: toggleLink,\n icon: <LinkIcon />,\n active: editorState.isLink,\n disabled: props.disabled || !editor || !editorState.canSetLink,\n tooltip: editorState.isLink ? 'Edit or remove link' : 'Add link',\n }),\n linkDialog: (\n <LinkDialog\n open={showLinkDialog}\n url={currentLinkUrl}\n mode={linkDialogMode}\n onClose={() => setShowLinkDialog(false)}\n onSave={linkDialogMode === 'add' ? handleSaveNewLink : handleSaveEditedLink}\n onRemove={handleRemoveLink}\n />\n ),\n };\n}\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/helpers/createChainableState.ts\nfunction createChainableState(config) {\n const { state, transaction } = config;\n let { selection } = transaction;\n let { doc } = transaction;\n let { storedMarks } = transaction;\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks;\n },\n get selection() {\n return selection;\n },\n get doc() {\n return doc;\n },\n get tr() {\n selection = transaction.selection;\n doc = transaction.doc;\n storedMarks = transaction.storedMarks;\n return transaction;\n }\n };\n}\n\n// src/CommandManager.ts\nvar CommandManager = class {\n constructor(props) {\n this.editor = props.editor;\n this.rawCommands = this.editor.extensionManager.commands;\n this.customState = props.state;\n }\n get hasCustomState() {\n return !!this.customState;\n }\n get state() {\n return this.customState || this.editor.state;\n }\n get commands() {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const { tr } = state;\n const props = this.buildProps(tr);\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const method = (...args) => {\n const callback = command2(...args)(props);\n if (!tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callback;\n };\n return [name, method];\n })\n );\n }\n get chain() {\n return () => this.createChain();\n }\n get can() {\n return () => this.createCan();\n }\n createChain(startTr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const callbacks = [];\n const hasStartTransaction = !!startTr;\n const tr = startTr || state.tr;\n const run3 = () => {\n if (!hasStartTransaction && shouldDispatch && !tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callbacks.every((callback) => callback === true);\n };\n const chain = {\n ...Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const chainedCommand = (...args) => {\n const props = this.buildProps(tr, shouldDispatch);\n const callback = command2(...args)(props);\n callbacks.push(callback);\n return chain;\n };\n return [name, chainedCommand];\n })\n ),\n run: run3\n };\n return chain;\n }\n createCan(startTr) {\n const { rawCommands, state } = this;\n const dispatch = false;\n const tr = startTr || state.tr;\n const props = this.buildProps(tr, dispatch);\n const formattedCommands = Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)({ ...props, dispatch: void 0 })];\n })\n );\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch)\n };\n }\n buildProps(tr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const props = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr\n }),\n dispatch: shouldDispatch ? () => void 0 : void 0,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)(props)];\n })\n );\n }\n };\n return props;\n }\n};\n\n// src/commands/index.ts\nvar commands_exports = {};\n__export(commands_exports, {\n blur: () => blur,\n clearContent: () => clearContent,\n clearNodes: () => clearNodes,\n command: () => command,\n createParagraphNear: () => createParagraphNear,\n cut: () => cut,\n deleteCurrentNode: () => deleteCurrentNode,\n deleteNode: () => deleteNode,\n deleteRange: () => deleteRange,\n deleteSelection: () => deleteSelection,\n enter: () => enter,\n exitCode: () => exitCode,\n extendMarkRange: () => extendMarkRange,\n first: () => first,\n focus: () => focus,\n forEach: () => forEach,\n insertContent: () => insertContent,\n insertContentAt: () => insertContentAt,\n joinBackward: () => joinBackward,\n joinDown: () => joinDown,\n joinForward: () => joinForward,\n joinItemBackward: () => joinItemBackward,\n joinItemForward: () => joinItemForward,\n joinTextblockBackward: () => joinTextblockBackward,\n joinTextblockForward: () => joinTextblockForward,\n joinUp: () => joinUp,\n keyboardShortcut: () => keyboardShortcut,\n lift: () => lift,\n liftEmptyBlock: () => liftEmptyBlock,\n liftListItem: () => liftListItem,\n newlineInCode: () => newlineInCode,\n resetAttributes: () => resetAttributes,\n scrollIntoView: () => scrollIntoView,\n selectAll: () => selectAll,\n selectNodeBackward: () => selectNodeBackward,\n selectNodeForward: () => selectNodeForward,\n selectParentNode: () => selectParentNode,\n selectTextblockEnd: () => selectTextblockEnd,\n selectTextblockStart: () => selectTextblockStart,\n setContent: () => setContent,\n setMark: () => setMark,\n setMeta: () => setMeta,\n setNode: () => setNode,\n setNodeSelection: () => setNodeSelection,\n setTextDirection: () => setTextDirection,\n setTextSelection: () => setTextSelection,\n sinkListItem: () => sinkListItem,\n splitBlock: () => splitBlock,\n splitListItem: () => splitListItem,\n toggleList: () => toggleList,\n toggleMark: () => toggleMark,\n toggleNode: () => toggleNode,\n toggleWrap: () => toggleWrap,\n undoInputRule: () => undoInputRule,\n unsetAllMarks: () => unsetAllMarks,\n unsetMark: () => unsetMark,\n unsetTextDirection: () => unsetTextDirection,\n updateAttributes: () => updateAttributes,\n wrapIn: () => wrapIn,\n wrapInList: () => wrapInList\n});\n\n// src/commands/blur.ts\nvar blur = () => ({ editor, view }) => {\n requestAnimationFrame(() => {\n var _a;\n if (!editor.isDestroyed) {\n ;\n view.dom.blur();\n (_a = window == null ? void 0 : window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n }\n });\n return true;\n};\n\n// src/commands/clearContent.ts\nvar clearContent = (emitUpdate = true) => ({ commands }) => {\n return commands.setContent(\"\", { emitUpdate });\n};\n\n// src/commands/clearNodes.ts\nimport { liftTarget } from \"@tiptap/pm/transform\";\nvar clearNodes = () => ({ state, tr, dispatch }) => {\n const { selection } = tr;\n const { ranges } = selection;\n if (!dispatch) {\n return true;\n }\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return;\n }\n const { doc, mapping } = tr;\n const $mappedFrom = doc.resolve(mapping.map(pos));\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n const nodeRange = $mappedFrom.blockRange($mappedTo);\n if (!nodeRange) {\n return;\n }\n const targetLiftDepth = liftTarget(nodeRange);\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n tr.setNodeMarkup(nodeRange.start, defaultType);\n }\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n });\n });\n return true;\n};\n\n// src/commands/command.ts\nvar command = (fn) => (props) => {\n return fn(props);\n};\n\n// src/commands/createParagraphNear.ts\nimport { createParagraphNear as originalCreateParagraphNear } from \"@tiptap/pm/commands\";\nvar createParagraphNear = () => ({ state, dispatch }) => {\n return originalCreateParagraphNear(state, dispatch);\n};\n\n// src/commands/cut.ts\nimport { TextSelection } from \"@tiptap/pm/state\";\nvar cut = (originRange, targetPos) => ({ editor, tr }) => {\n const { state } = editor;\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\n tr.deleteRange(originRange.from, originRange.to);\n const newPos = tr.mapping.map(targetPos);\n tr.insert(newPos, contentSlice.content);\n tr.setSelection(new TextSelection(tr.doc.resolve(Math.max(newPos - 1, 0))));\n return true;\n};\n\n// src/commands/deleteCurrentNode.ts\nvar deleteCurrentNode = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const currentNode = selection.$anchor.node();\n if (currentNode.content.size > 0) {\n return false;\n }\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/getNodeType.ts\nfunction getNodeType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.nodes[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/deleteNode.ts\nvar deleteNode = (typeOrName) => ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/deleteRange.ts\nvar deleteRange = (range) => ({ tr, dispatch }) => {\n const { from, to } = range;\n if (dispatch) {\n tr.delete(from, to);\n }\n return true;\n};\n\n// src/commands/deleteSelection.ts\nimport { deleteSelection as originalDeleteSelection } from \"@tiptap/pm/commands\";\nvar deleteSelection = () => ({ state, dispatch }) => {\n return originalDeleteSelection(state, dispatch);\n};\n\n// src/commands/enter.ts\nvar enter = () => ({ commands }) => {\n return commands.keyboardShortcut(\"Enter\");\n};\n\n// src/commands/exitCode.ts\nimport { exitCode as originalExitCode } from \"@tiptap/pm/commands\";\nvar exitCode = () => ({ state, dispatch }) => {\n return originalExitCode(state, dispatch);\n};\n\n// src/commands/extendMarkRange.ts\nimport { TextSelection as TextSelection2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isRegExp.ts\nfunction isRegExp(value) {\n return Object.prototype.toString.call(value) === \"[object RegExp]\";\n}\n\n// src/utilities/objectIncludes.ts\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n const keys = Object.keys(object2);\n if (!keys.length) {\n return true;\n }\n return keys.every((key) => {\n if (options.strict) {\n return object2[key] === object1[key];\n }\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key]);\n }\n return object2[key] === object1[key];\n });\n}\n\n// src/helpers/getMarkRange.ts\nfunction findMarkInSet(marks, type, attributes = {}) {\n return marks.find((item) => {\n return item.type === type && objectIncludes(\n // Only check equality for the attributes that are provided\n Object.fromEntries(Object.keys(attributes).map((k) => [k, item.attrs[k]])),\n attributes\n );\n });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n return !!findMarkInSet(marks, type, attributes);\n}\nfunction getMarkRange($pos, type, attributes) {\n var _a;\n if (!$pos || !type) {\n return;\n }\n let start = $pos.parent.childAfter($pos.parentOffset);\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n start = $pos.parent.childBefore($pos.parentOffset);\n }\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n return;\n }\n attributes = attributes || ((_a = start.node.marks[0]) == null ? void 0 : _a.attrs);\n const mark = findMarkInSet([...start.node.marks], type, attributes);\n if (!mark) {\n return;\n }\n let startIndex = start.index;\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n return {\n from: startPos,\n to: endPos\n };\n}\n\n// src/helpers/getMarkType.ts\nfunction getMarkType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.marks[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/extendMarkRange.ts\nvar extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema);\n const { doc, selection } = tr;\n const { $from, from, to } = selection;\n if (dispatch) {\n const range = getMarkRange($from, type, attributes);\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection2.create(doc, range.from, range.to);\n tr.setSelection(newSelection);\n }\n }\n return true;\n};\n\n// src/commands/first.ts\nvar first = (commands) => (props) => {\n const items = typeof commands === \"function\" ? commands(props) : commands;\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/isTextSelection.ts\nimport { TextSelection as TextSelection3 } from \"@tiptap/pm/state\";\nfunction isTextSelection(value) {\n return value instanceof TextSelection3;\n}\n\n// src/helpers/resolveFocusPosition.ts\nimport { Selection, TextSelection as TextSelection4 } from \"@tiptap/pm/state\";\n\n// src/utilities/minMax.ts\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\n\n// src/helpers/resolveFocusPosition.ts\nfunction resolveFocusPosition(doc, position = null) {\n if (!position) {\n return null;\n }\n const selectionAtStart = Selection.atStart(doc);\n const selectionAtEnd = Selection.atEnd(doc);\n if (position === \"start\" || position === true) {\n return selectionAtStart;\n }\n if (position === \"end\") {\n return selectionAtEnd;\n }\n const minPos = selectionAtStart.from;\n const maxPos = selectionAtEnd.to;\n if (position === \"all\") {\n return TextSelection4.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n }\n return TextSelection4.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\n// src/utilities/isAndroid.ts\nfunction isAndroid() {\n return navigator.platform === \"Android\" || /android/i.test(navigator.userAgent);\n}\n\n// src/utilities/isiOS.ts\nfunction isiOS() {\n return [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n}\n\n// src/utilities/isSafari.ts\nfunction isSafari() {\n return typeof navigator !== \"undefined\" ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n}\n\n// src/commands/focus.ts\nvar focus = (position = null, options = {}) => ({ editor, view, tr, dispatch }) => {\n options = {\n scrollIntoView: true,\n ...options\n };\n const delayedFocus = () => {\n if (isiOS() || isAndroid()) {\n ;\n view.dom.focus();\n }\n if (isSafari() && !isiOS() && !isAndroid()) {\n ;\n view.dom.focus({ preventScroll: true });\n }\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus();\n if (options == null ? void 0 : options.scrollIntoView) {\n editor.commands.scrollIntoView();\n }\n }\n });\n };\n try {\n if (view.hasFocus() && position === null || position === false) {\n return true;\n }\n } catch {\n return false;\n }\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus();\n return true;\n }\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n const isSameSelection = editor.state.selection.eq(selection);\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection);\n }\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks);\n }\n delayedFocus();\n }\n return true;\n};\n\n// src/commands/forEach.ts\nvar forEach = (items, fn) => (props) => {\n return items.every((item, index) => fn(item, { ...props, index }));\n};\n\n// src/commands/insertContent.ts\nvar insertContent = (value, options) => ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\n// src/commands/insertContentAt.ts\nimport { Fragment as Fragment2 } from \"@tiptap/pm/model\";\n\n// src/helpers/createNodeFromContent.ts\nimport { DOMParser, Fragment, Node as ProseMirrorNode, Schema } from \"@tiptap/pm/model\";\n\n// src/utilities/elementFromString.ts\nvar removeWhitespaces = (node) => {\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i];\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child);\n } else if (child.nodeType === 1) {\n removeWhitespaces(child);\n }\n }\n return node;\n};\nfunction elementFromString(value) {\n if (typeof window === \"undefined\") {\n throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");\n }\n const wrappedValue = `<body>${value}</body>`;\n const html = new window.DOMParser().parseFromString(wrappedValue, \"text/html\").body;\n return removeWhitespaces(html);\n}\n\n// src/helpers/createNodeFromContent.ts\nfunction createNodeFromContent(content, schema, options) {\n if (content instanceof ProseMirrorNode || content instanceof Fragment) {\n return content;\n }\n options = {\n slice: true,\n parseOptions: {},\n ...options\n };\n const isJSONContent = typeof content === \"object\" && content !== null;\n const isTextContent = typeof content === \"string\";\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0;\n if (isArrayContent) {\n return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));\n }\n const node = schema.nodeFromJSON(content);\n if (options.errorOnInvalidContent) {\n node.check();\n }\n return node;\n } catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid JSON content\", { cause: error });\n }\n console.warn(\"[tiptap warn]: Invalid content.\", \"Passed value:\", content, \"Error:\", error);\n return createNodeFromContent(\"\", schema, options);\n }\n }\n if (isTextContent) {\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false;\n let invalidContent = \"\";\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [\n {\n tag: \"*\",\n getAttrs: (e) => {\n hasInvalidContent = true;\n invalidContent = typeof e === \"string\" ? e : e.outerHTML;\n return null;\n }\n }\n ]\n }\n })\n });\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n } else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n }\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid HTML content\", {\n cause: new Error(`Invalid element found: ${invalidContent}`)\n });\n }\n }\n const parser = DOMParser.fromSchema(schema);\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n }\n return parser.parse(elementFromString(content), options.parseOptions);\n }\n return createNodeFromContent(\"\", schema, options);\n}\n\n// src/helpers/selectionToInsertionEnd.ts\nimport { Selection as Selection2 } from \"@tiptap/pm/state\";\nimport { ReplaceAroundStep, ReplaceStep } from \"@tiptap/pm/transform\";\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n const last = tr.steps.length - 1;\n if (last < startLen) {\n return;\n }\n const step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n const map = tr.mapping.maps[last];\n let end = 0;\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo;\n }\n });\n tr.setSelection(Selection2.near(tr.doc.resolve(end), bias));\n}\n\n// src/commands/insertContentAt.ts\nvar isFragment = (nodeOrFragment) => {\n return !(\"type\" in nodeOrFragment);\n};\nvar insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n var _a;\n if (dispatch) {\n options = {\n parseOptions: editor.options.parseOptions,\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options\n };\n let content;\n const emitContentError = (error) => {\n editor.emit(\"contentError\", {\n editor,\n error,\n disableCollaboration: () => {\n if (\"collaboration\" in editor.storage && typeof editor.storage.collaboration === \"object\" && editor.storage.collaboration) {\n ;\n editor.storage.collaboration.isDisabled = true;\n }\n }\n });\n };\n const parseOptions = {\n preserveWhitespace: \"full\",\n ...options.parseOptions\n };\n if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n try {\n createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: true\n });\n } catch (e) {\n emitContentError(e);\n }\n }\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) != null ? _a : editor.options.enableContentCheck\n });\n } catch (e) {\n emitContentError(e);\n return false;\n }\n let { from, to } = typeof position === \"number\" ? { from: position, to: position } : { from: position.from, to: position.to };\n let isOnlyTextContent = true;\n let isOnlyBlockContent = true;\n const nodes = isFragment(content) ? content : [content];\n nodes.forEach((node) => {\n node.check();\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n });\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from);\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n if (isEmptyTextBlock) {\n from -= 1;\n to += 1;\n }\n }\n let newContent;\n if (isOnlyTextContent) {\n if (Array.isArray(value)) {\n newContent = value.map((v) => v.text || \"\").join(\"\");\n } else if (value instanceof Fragment2) {\n let text = \"\";\n value.forEach((node) => {\n if (node.text) {\n text += node.text;\n }\n });\n newContent = text;\n } else if (typeof value === \"object\" && !!value && !!value.text) {\n newContent = value.text;\n } else {\n newContent = value;\n }\n tr.insertText(newContent, from, to);\n } else {\n newContent = content;\n const $from = tr.doc.resolve(from);\n const $fromNode = $from.node();\n const fromSelectionAtStart = $from.parentOffset === 0;\n const isTextSelection2 = $fromNode.isText || $fromNode.isTextblock;\n const hasContent = $fromNode.content.size > 0;\n if (fromSelectionAtStart && isTextSelection2 && hasContent) {\n from = Math.max(0, from - 1);\n }\n tr.replaceWith(from, to, newContent);\n }\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n }\n if (options.applyInputRules) {\n tr.setMeta(\"applyInputRules\", { from, text: newContent });\n }\n if (options.applyPasteRules) {\n tr.setMeta(\"applyPasteRules\", { from, text: newContent });\n }\n }\n return true;\n};\n\n// src/commands/join.ts\nimport {\n joinBackward as originalJoinBackward,\n joinDown as originalJoinDown,\n joinForward as originalJoinForward,\n joinUp as originalJoinUp\n} from \"@tiptap/pm/commands\";\nvar joinUp = () => ({ state, dispatch }) => {\n return originalJoinUp(state, dispatch);\n};\nvar joinDown = () => ({ state, dispatch }) => {\n return originalJoinDown(state, dispatch);\n};\nvar joinBackward = () => ({ state, dispatch }) => {\n return originalJoinBackward(state, dispatch);\n};\nvar joinForward = () => ({ state, dispatch }) => {\n return originalJoinForward(state, dispatch);\n};\n\n// src/commands/joinItemBackward.ts\nimport { joinPoint } from \"@tiptap/pm/transform\";\nvar joinItemBackward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinItemForward.ts\nimport { joinPoint as joinPoint2 } from \"@tiptap/pm/transform\";\nvar joinItemForward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint2(state.doc, state.selection.$from.pos, 1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinTextblockBackward.ts\nimport { joinTextblockBackward as originalCommand } from \"@tiptap/pm/commands\";\nvar joinTextblockBackward = () => ({ state, dispatch }) => {\n return originalCommand(state, dispatch);\n};\n\n// src/commands/joinTextblockForward.ts\nimport { joinTextblockForward as originalCommand2 } from \"@tiptap/pm/commands\";\nvar joinTextblockForward = () => ({ state, dispatch }) => {\n return originalCommand2(state, dispatch);\n};\n\n// src/utilities/isMacOS.ts\nfunction isMacOS() {\n return typeof navigator !== \"undefined\" ? /Mac/.test(navigator.platform) : false;\n}\n\n// src/commands/keyboardShortcut.ts\nfunction normalizeKeyName(name) {\n const parts = name.split(/-(?!$)/);\n let result = parts[parts.length - 1];\n if (result === \"Space\") {\n result = \" \";\n }\n let alt;\n let ctrl;\n let shift;\n let meta;\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true;\n } else {\n ctrl = true;\n }\n } else {\n throw new Error(`Unrecognized modifier name: ${mod}`);\n }\n }\n if (alt) {\n result = `Alt-${result}`;\n }\n if (ctrl) {\n result = `Ctrl-${result}`;\n }\n if (meta) {\n result = `Meta-${result}`;\n }\n if (shift) {\n result = `Shift-${result}`;\n }\n return result;\n}\nvar keyboardShortcut = (name) => ({ editor, view, tr, dispatch }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/);\n const key = keys.find((item) => ![\"Alt\", \"Ctrl\", \"Meta\", \"Shift\"].includes(item));\n const event = new KeyboardEvent(\"keydown\", {\n key: key === \"Space\" ? \" \" : key,\n altKey: keys.includes(\"Alt\"),\n ctrlKey: keys.includes(\"Ctrl\"),\n metaKey: keys.includes(\"Meta\"),\n shiftKey: keys.includes(\"Shift\"),\n bubbles: true,\n cancelable: true\n });\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp(\"handleKeyDown\", (f) => f(view, event));\n });\n capturedTransaction == null ? void 0 : capturedTransaction.steps.forEach((step) => {\n const newStep = step.map(tr.mapping);\n if (newStep && dispatch) {\n tr.maybeStep(newStep);\n }\n });\n return true;\n};\n\n// src/commands/lift.ts\nimport { lift as originalLift } from \"@tiptap/pm/commands\";\n\n// src/helpers/isNodeActive.ts\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n const { from, to, empty } = state.selection;\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n const nodeRanges = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo\n });\n });\n const selectionRange = to - from;\n const matchedNodeRanges = nodeRanges.filter((nodeRange) => {\n if (!type) {\n return true;\n }\n return type.name === nodeRange.node.type.name;\n }).filter((nodeRange) => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n if (empty) {\n return !!matchedNodeRanges.length;\n }\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n return range >= selectionRange;\n}\n\n// src/commands/lift.ts\nvar lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (!isActive2) {\n return false;\n }\n return originalLift(state, dispatch);\n};\n\n// src/commands/liftEmptyBlock.ts\nimport { liftEmptyBlock as originalLiftEmptyBlock } from \"@tiptap/pm/commands\";\nvar liftEmptyBlock = () => ({ state, dispatch }) => {\n return originalLiftEmptyBlock(state, dispatch);\n};\n\n// src/commands/liftListItem.ts\nimport { liftListItem as originalLiftListItem } from \"@tiptap/pm/schema-list\";\nvar liftListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalLiftListItem(type)(state, dispatch);\n};\n\n// src/commands/newlineInCode.ts\nimport { newlineInCode as originalNewlineInCode } from \"@tiptap/pm/commands\";\nvar newlineInCode = () => ({ state, dispatch }) => {\n return originalNewlineInCode(state, dispatch);\n};\n\n// src/helpers/getSchemaTypeNameByName.ts\nfunction getSchemaTypeNameByName(name, schema) {\n if (schema.nodes[name]) {\n return \"node\";\n }\n if (schema.marks[name]) {\n return \"mark\";\n }\n return null;\n}\n\n// src/utilities/deleteProps.ts\nfunction deleteProps(obj, propOrProps) {\n const props = typeof propOrProps === \"string\" ? [propOrProps] : propOrProps;\n return Object.keys(obj).reduce((newObj, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop];\n }\n return newObj;\n }, {});\n}\n\n// src/commands/resetAttributes.ts\nvar resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canReset = false;\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canReset = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, deleteProps(node.attrs, attributes));\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canReset = true;\n if (dispatch) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n }\n }\n });\n }\n });\n });\n return canReset;\n};\n\n// src/commands/scrollIntoView.ts\nvar scrollIntoView = () => ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView();\n }\n return true;\n};\n\n// src/commands/selectAll.ts\nimport { AllSelection } from \"@tiptap/pm/state\";\nvar selectAll = () => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = new AllSelection(tr.doc);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/selectNodeBackward.ts\nimport { selectNodeBackward as originalSelectNodeBackward } from \"@tiptap/pm/commands\";\nvar selectNodeBackward = () => ({ state, dispatch }) => {\n return originalSelectNodeBackward(state, dispatch);\n};\n\n// src/commands/selectNodeForward.ts\nimport { selectNodeForward as originalSelectNodeForward } from \"@tiptap/pm/commands\";\nvar selectNodeForward = () => ({ state, dispatch }) => {\n return originalSelectNodeForward(state, dispatch);\n};\n\n// src/commands/selectParentNode.ts\nimport { selectParentNode as originalSelectParentNode } from \"@tiptap/pm/commands\";\nvar selectParentNode = () => ({ state, dispatch }) => {\n return originalSelectParentNode(state, dispatch);\n};\n\n// src/commands/selectTextblockEnd.ts\nimport { selectTextblockEnd as originalSelectTextblockEnd } from \"@tiptap/pm/commands\";\nvar selectTextblockEnd = () => ({ state, dispatch }) => {\n return originalSelectTextblockEnd(state, dispatch);\n};\n\n// src/commands/selectTextblockStart.ts\nimport { selectTextblockStart as originalSelectTextblockStart } from \"@tiptap/pm/commands\";\nvar selectTextblockStart = () => ({ state, dispatch }) => {\n return originalSelectTextblockStart(state, dispatch);\n};\n\n// src/helpers/createDocument.ts\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent\n });\n}\n\n// src/commands/setContent.ts\nvar setContent = (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) => ({ editor, tr, dispatch, commands }) => {\n const { doc } = tr;\n if (parseOptions.preserveWhitespace !== \"full\") {\n const document2 = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document2).setMeta(\"preventUpdate\", !emitUpdate);\n }\n return true;\n }\n if (dispatch) {\n tr.setMeta(\"preventUpdate\", !emitUpdate);\n }\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n};\n\n// src/helpers/getMarkAttributes.ts\nfunction getMarkAttributes(state, typeOrName) {\n const type = getMarkType(typeOrName, state.schema);\n const { from, to, empty } = state.selection;\n const marks = [];\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks);\n }\n marks.push(...state.selection.$head.marks());\n } else {\n state.doc.nodesBetween(from, to, (node) => {\n marks.push(...node.marks);\n });\n }\n const mark = marks.find((markItem) => markItem.type.name === type.name);\n if (!mark) {\n return {};\n }\n return { ...mark.attrs };\n}\n\n// src/helpers/combineTransactionSteps.ts\nimport { Transform } from \"@tiptap/pm/transform\";\nfunction combineTransactionSteps(oldDoc, transactions) {\n const transform = new Transform(oldDoc);\n transactions.forEach((transaction) => {\n transaction.steps.forEach((step) => {\n transform.step(step);\n });\n });\n return transform;\n}\n\n// src/helpers/defaultBlockAt.ts\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n return null;\n}\n\n// src/helpers/findChildren.ts\nfunction findChildren(node, predicate) {\n const nodesWithPos = [];\n node.descendants((child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findChildrenInRange.ts\nfunction findChildrenInRange(node, range, predicate) {\n const nodesWithPos = [];\n node.nodesBetween(range.from, range.to, (child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findParentNodeClosestToPos.ts\nfunction findParentNodeClosestToPos($pos, predicate) {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n}\n\n// src/helpers/findParentNode.ts\nfunction findParentNode(predicate) {\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\n// src/helpers/getExtensionField.ts\nfunction getExtensionField(extension, field, context) {\n if (extension.config[field] === void 0 && extension.parent) {\n return getExtensionField(extension.parent, field, context);\n }\n if (typeof extension.config[field] === \"function\") {\n const value = extension.config[field].bind({\n ...context,\n parent: extension.parent ? getExtensionField(extension.parent, field, context) : null\n });\n return value;\n }\n return extension.config[field];\n}\n\n// src/helpers/flattenExtensions.ts\nfunction flattenExtensions(extensions) {\n return extensions.map((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addExtensions = getExtensionField(extension, \"addExtensions\", context);\n if (addExtensions) {\n return [extension, ...flattenExtensions(addExtensions())];\n }\n return extension;\n }).flat(10);\n}\n\n// src/helpers/generateHTML.ts\nimport { Node } from \"@tiptap/pm/model\";\n\n// src/helpers/getHTMLFromFragment.ts\nimport { DOMSerializer } from \"@tiptap/pm/model\";\nfunction getHTMLFromFragment(fragment, schema) {\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n const temporaryDocument = document.implementation.createHTMLDocument();\n const container = temporaryDocument.createElement(\"div\");\n container.appendChild(documentFragment);\n return container.innerHTML;\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nimport { Schema as Schema2 } from \"@tiptap/pm/model\";\n\n// src/utilities/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/utilities/callOrReturn.ts\nfunction callOrReturn(value, context = void 0, ...props) {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props);\n }\n return value(...props);\n }\n return value;\n}\n\n// src/utilities/isEmptyObject.ts\nfunction isEmptyObject(value = {}) {\n return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\n// src/helpers/splitExtensions.ts\nfunction splitExtensions(extensions) {\n const baseExtensions = extensions.filter((extension) => extension.type === \"extension\");\n const nodeExtensions = extensions.filter((extension) => extension.type === \"node\");\n const markExtensions = extensions.filter((extension) => extension.type === \"mark\");\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions\n };\n}\n\n// src/helpers/getAttributesFromExtensions.ts\nfunction getAttributesFromExtensions(extensions) {\n const extensionAttributes = [];\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n const defaultAttribute = {\n default: null,\n validate: void 0,\n rendered: true,\n renderHTML: null,\n parseHTML: null,\n keepOnSplit: true,\n isRequired: false\n };\n extensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n extensions: nodeAndMarkExtensions\n };\n const addGlobalAttributes = getExtensionField(\n extension,\n \"addGlobalAttributes\",\n context\n );\n if (!addGlobalAttributes) {\n return;\n }\n const globalAttributes = addGlobalAttributes();\n globalAttributes.forEach((globalAttribute) => {\n globalAttribute.types.forEach((type) => {\n Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {\n extensionAttributes.push({\n type,\n name,\n attribute: {\n ...defaultAttribute,\n ...attribute\n }\n });\n });\n });\n });\n });\n nodeAndMarkExtensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addAttributes = getExtensionField(\n extension,\n \"addAttributes\",\n context\n );\n if (!addAttributes) {\n return;\n }\n const attributes = addAttributes();\n Object.entries(attributes).forEach(([name, attribute]) => {\n const mergedAttr = {\n ...defaultAttribute,\n ...attribute\n };\n if (typeof (mergedAttr == null ? void 0 : mergedAttr.default) === \"function\") {\n mergedAttr.default = mergedAttr.default();\n }\n if ((mergedAttr == null ? void 0 : mergedAttr.isRequired) && (mergedAttr == null ? void 0 : mergedAttr.default) === void 0) {\n delete mergedAttr.default;\n }\n extensionAttributes.push({\n type: extension.name,\n name,\n attribute: mergedAttr\n });\n });\n });\n return extensionAttributes;\n}\n\n// src/utilities/mergeAttributes.ts\nfunction mergeAttributes(...objects) {\n return objects.filter((item) => !!item).reduce((items, item) => {\n const mergedAttributes = { ...items };\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key];\n if (!exists) {\n mergedAttributes[key] = value;\n return;\n }\n if (key === \"class\") {\n const valueClasses = value ? String(value).split(\" \") : [];\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(\" \") : [];\n const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(\" \");\n } else if (key === \"style\") {\n const newStyles = value ? value.split(\";\").map((style2) => style2.trim()).filter(Boolean) : [];\n const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(\";\").map((style2) => style2.trim()).filter(Boolean) : [];\n const styleMap = /* @__PURE__ */ new Map();\n existingStyles.forEach((style2) => {\n const [property, val] = style2.split(\":\").map((part) => part.trim());\n styleMap.set(property, val);\n });\n newStyles.forEach((style2) => {\n const [property, val] = style2.split(\":\").map((part) => part.trim());\n styleMap.set(property, val);\n });\n mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join(\"; \");\n } else {\n mergedAttributes[key] = value;\n }\n });\n return mergedAttributes;\n }, {});\n}\n\n// src/helpers/getRenderedAttributes.ts\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n return extensionAttributes.filter((attribute) => attribute.type === nodeOrMark.type.name).filter((item) => item.attribute.rendered).map((item) => {\n if (!item.attribute.renderHTML) {\n return {\n [item.name]: nodeOrMark.attrs[item.name]\n };\n }\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\n// src/utilities/fromString.ts\nfunction fromString(value) {\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n return Number(value);\n }\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n return value;\n}\n\n// src/helpers/injectExtensionAttributesToParseRule.ts\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n if (\"style\" in parseRule) {\n return parseRule;\n }\n return {\n ...parseRule,\n getAttrs: (node) => {\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n if (oldAttributes === false) {\n return false;\n }\n const newAttributes = extensionAttributes.reduce((items, item) => {\n const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name));\n if (value === null || value === void 0) {\n return items;\n }\n return {\n ...items,\n [item.name]: value\n };\n }, {});\n return { ...oldAttributes, ...newAttributes };\n }\n };\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nfunction cleanUpSchemaItem(data) {\n return Object.fromEntries(\n // @ts-ignore\n Object.entries(data).filter(([key, value]) => {\n if (key === \"attrs\" && isEmptyObject(value)) {\n return false;\n }\n return value !== null && value !== void 0;\n })\n );\n}\nfunction buildAttributeSpec(extensionAttribute) {\n var _a, _b;\n const spec = {};\n if (!((_a = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a.isRequired) && \"default\" in ((extensionAttribute == null ? void 0 : extensionAttribute.attribute) || {})) {\n spec.default = extensionAttribute.attribute.default;\n }\n if (((_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate) !== void 0) {\n spec.validate = extensionAttribute.attribute.validate;\n }\n return [extensionAttribute.name, spec];\n}\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n var _a;\n const allAttributes = getAttributesFromExtensions(extensions);\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const topNode = (_a = nodeExtensions.find((extension) => getExtensionField(extension, \"topNode\"))) == null ? void 0 : _a.name;\n const nodes = Object.fromEntries(\n nodeExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraNodeFields = extensions.reduce((fields, e) => {\n const extendNodeSchema = getExtensionField(e, \"extendNodeSchema\", context);\n return {\n ...fields,\n ...extendNodeSchema ? extendNodeSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraNodeFields,\n content: callOrReturn(getExtensionField(extension, \"content\", context)),\n marks: callOrReturn(getExtensionField(extension, \"marks\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n inline: callOrReturn(getExtensionField(extension, \"inline\", context)),\n atom: callOrReturn(getExtensionField(extension, \"atom\", context)),\n selectable: callOrReturn(getExtensionField(extension, \"selectable\", context)),\n draggable: callOrReturn(getExtensionField(extension, \"draggable\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n whitespace: callOrReturn(getExtensionField(extension, \"whitespace\", context)),\n linebreakReplacement: callOrReturn(\n getExtensionField(extension, \"linebreakReplacement\", context)\n ),\n defining: callOrReturn(getExtensionField(extension, \"defining\", context)),\n isolating: callOrReturn(getExtensionField(extension, \"isolating\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (node) => renderHTML({\n node,\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes)\n });\n }\n const renderText = getExtensionField(extension, \"renderText\", context);\n if (renderText) {\n schema.toText = renderText;\n }\n return [extension.name, schema];\n })\n );\n const marks = Object.fromEntries(\n markExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraMarkFields = extensions.reduce((fields, e) => {\n const extendMarkSchema = getExtensionField(e, \"extendMarkSchema\", context);\n return {\n ...fields,\n ...extendMarkSchema ? extendMarkSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraMarkFields,\n inclusive: callOrReturn(getExtensionField(extension, \"inclusive\", context)),\n excludes: callOrReturn(getExtensionField(extension, \"excludes\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n spanning: callOrReturn(getExtensionField(extension, \"spanning\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (mark) => renderHTML({\n mark,\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes)\n });\n }\n return [extension.name, schema];\n })\n );\n return new Schema2({\n topNode,\n nodes,\n marks\n });\n}\n\n// src/utilities/findDuplicates.ts\nfunction findDuplicates(items) {\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n return Array.from(new Set(filtered));\n}\n\n// src/helpers/sortExtensions.ts\nfunction sortExtensions(extensions) {\n const defaultPriority = 100;\n return extensions.sort((a, b) => {\n const priorityA = getExtensionField(a, \"priority\") || defaultPriority;\n const priorityB = getExtensionField(b, \"priority\") || defaultPriority;\n if (priorityA > priorityB) {\n return -1;\n }\n if (priorityA < priorityB) {\n return 1;\n }\n return 0;\n });\n}\n\n// src/helpers/resolveExtensions.ts\nfunction resolveExtensions(extensions) {\n const resolvedExtensions = sortExtensions(flattenExtensions(extensions));\n const duplicatedNames = findDuplicates(resolvedExtensions.map((extension) => extension.name));\n if (duplicatedNames.length) {\n console.warn(\n `[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map((item) => `'${item}'`).join(\", \")}]. This can lead to issues.`\n );\n }\n return resolvedExtensions;\n}\n\n// src/helpers/getSchema.ts\nfunction getSchema(extensions, editor) {\n const resolvedExtensions = resolveExtensions(extensions);\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n// src/helpers/generateHTML.ts\nfunction generateHTML(doc, extensions) {\n const schema = getSchema(extensions);\n const contentNode = Node.fromJSON(schema, doc);\n return getHTMLFromFragment(contentNode.content, schema);\n}\n\n// src/helpers/generateJSON.ts\nimport { DOMParser as DOMParser2 } from \"@tiptap/pm/model\";\nfunction generateJSON(html, extensions) {\n const schema = getSchema(extensions);\n const dom = elementFromString(html);\n return DOMParser2.fromSchema(schema).parse(dom).toJSON();\n}\n\n// src/helpers/generateText.ts\nimport { Node as Node2 } from \"@tiptap/pm/model\";\n\n// src/helpers/getTextBetween.ts\nfunction getTextBetween(startNode, range, options) {\n const { from, to } = range;\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n let text = \"\";\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n var _a;\n if (node.isBlock && pos > from) {\n text += blockSeparator;\n }\n const textSerializer = textSerializers == null ? void 0 : textSerializers[node.type.name];\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range\n });\n }\n return false;\n }\n if (node.isText) {\n text += (_a = node == null ? void 0 : node.text) == null ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos);\n }\n });\n return text;\n}\n\n// src/helpers/getText.ts\nfunction getText(node, options) {\n const range = {\n from: 0,\n to: node.content.size\n };\n return getTextBetween(node, range, options);\n}\n\n// src/helpers/getTextSerializersFromSchema.ts\nfunction getTextSerializersFromSchema(schema) {\n return Object.fromEntries(\n Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])\n );\n}\n\n// src/helpers/generateText.ts\nfunction generateText(doc, extensions, options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n const schema = getSchema(extensions);\n const contentNode = Node2.fromJSON(schema, doc);\n return getText(contentNode, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(schema),\n ...textSerializers\n }\n });\n}\n\n// src/helpers/getNodeAttributes.ts\nfunction getNodeAttributes(state, typeOrName) {\n const type = getNodeType(typeOrName, state.schema);\n const { from, to } = state.selection;\n const nodes = [];\n state.doc.nodesBetween(from, to, (node2) => {\n nodes.push(node2);\n });\n const node = nodes.reverse().find((nodeItem) => nodeItem.type.name === type.name);\n if (!node) {\n return {};\n }\n return { ...node.attrs };\n}\n\n// src/helpers/getAttributes.ts\nfunction getAttributes(state, typeOrName) {\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (schemaType === \"node\") {\n return getNodeAttributes(state, typeOrName);\n }\n if (schemaType === \"mark\") {\n return getMarkAttributes(state, typeOrName);\n }\n return {};\n}\n\n// src/utilities/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n const seen = {};\n return array.filter((item) => {\n const key = by(item);\n return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n });\n}\n\n// src/helpers/getChangedRanges.ts\nfunction simplifyChangedRanges(changes) {\n const uniqueChanges = removeDuplicates(changes);\n return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index);\n return !rest.some((otherChange) => {\n return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to;\n });\n });\n}\nfunction getChangedRanges(transform) {\n const { mapping, steps } = transform;\n const changes = [];\n mapping.maps.forEach((stepMap, index) => {\n const ranges = [];\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index];\n if (from === void 0 || to === void 0) {\n return;\n }\n ranges.push({ from, to });\n } else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to });\n });\n }\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1);\n const newEnd = mapping.slice(index).map(to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n }\n });\n });\n });\n return simplifyChangedRanges(changes);\n}\n\n// src/helpers/getDebugJSON.ts\nfunction getDebugJSON(node, startOffset = 0) {\n const isTopNode = node.type === node.type.schema.topNodeType;\n const increment = isTopNode ? 0 : 1;\n const from = startOffset;\n const to = from + node.nodeSize;\n const marks = node.marks.map((mark) => {\n const output2 = {\n type: mark.type.name\n };\n if (Object.keys(mark.attrs).length) {\n output2.attrs = { ...mark.attrs };\n }\n return output2;\n });\n const attrs = { ...node.attrs };\n const output = {\n type: node.type.name,\n from,\n to\n };\n if (Object.keys(attrs).length) {\n output.attrs = attrs;\n }\n if (marks.length) {\n output.marks = marks;\n }\n if (node.content.childCount) {\n output.content = [];\n node.forEach((child, offset) => {\n var _a;\n (_a = output.content) == null ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n });\n }\n if (node.text) {\n output.text = node.text;\n }\n return output;\n}\n\n// src/helpers/getMarksBetween.ts\nfunction getMarksBetween(from, to, doc) {\n const marks = [];\n if (from === to) {\n doc.resolve(from).marks().forEach((mark) => {\n const $pos = doc.resolve(from);\n const range = getMarkRange($pos, mark.type);\n if (!range) {\n return;\n }\n marks.push({\n mark,\n ...range\n });\n });\n } else {\n doc.nodesBetween(from, to, (node, pos) => {\n if (!node || (node == null ? void 0 : node.nodeSize) === void 0) {\n return;\n }\n marks.push(\n ...node.marks.map((mark) => ({\n from: pos,\n to: pos + node.nodeSize,\n mark\n }))\n );\n });\n }\n return marks;\n}\n\n// src/helpers/getNodeAtPosition.ts\nvar getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n const $pos = state.doc.resolve(pos);\n let currentDepth = maxDepth;\n let node = null;\n while (currentDepth > 0 && node === null) {\n const currentNode = $pos.node(currentDepth);\n if ((currentNode == null ? void 0 : currentNode.type.name) === typeOrName) {\n node = currentNode;\n } else {\n currentDepth -= 1;\n }\n }\n return [node, currentDepth];\n};\n\n// src/helpers/getSchemaTypeByName.ts\nfunction getSchemaTypeByName(name, schema) {\n return schema.nodes[name] || schema.marks[name] || null;\n}\n\n// src/helpers/getSplittedAttributes.ts\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n return Object.fromEntries(\n Object.entries(attributes).filter(([name]) => {\n const extensionAttribute = extensionAttributes.find((item) => {\n return item.type === typeName && item.name === name;\n });\n if (!extensionAttribute) {\n return false;\n }\n return extensionAttribute.attribute.keepOnSplit;\n })\n );\n}\n\n// src/helpers/getTextContentFromNodes.ts\nvar getTextContentFromNodes = ($from, maxMatch = 500) => {\n let textBefore = \"\";\n const sliceEndPos = $from.parentOffset;\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n var _a, _b;\n const chunk = ((_b = (_a = node.type.spec).toText) == null ? void 0 : _b.call(_a, {\n node,\n pos,\n parent,\n index\n })) || node.textContent || \"%leaf%\";\n textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n });\n return textBefore;\n};\n\n// src/helpers/isMarkActive.ts\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n const { empty, ranges } = state.selection;\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks()).filter((mark) => {\n if (!type) {\n return true;\n }\n return type.name === mark.type.name;\n }).find((mark) => objectIncludes(mark.attrs, attributes, { strict: false }));\n }\n let selectionRange = 0;\n const markRanges = [];\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos;\n const to = $to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText && !node.marks.length) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n const range2 = relativeTo - relativeFrom;\n selectionRange += range2;\n markRanges.push(\n ...node.marks.map((mark) => ({\n mark,\n from: relativeFrom,\n to: relativeTo\n }))\n );\n });\n });\n if (selectionRange === 0) {\n return false;\n }\n const matchedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return type.name === markRange.mark.type.name;\n }).filter((markRange) => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const excludedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n return range >= selectionRange;\n}\n\n// src/helpers/isActive.ts\nfunction isActive(state, name, attributes = {}) {\n if (!name) {\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n }\n const schemaType = getSchemaTypeNameByName(name, state.schema);\n if (schemaType === \"node\") {\n return isNodeActive(state, name, attributes);\n }\n if (schemaType === \"mark\") {\n return isMarkActive(state, name, attributes);\n }\n return false;\n}\n\n// src/helpers/isAtEndOfNode.ts\nvar isAtEndOfNode = (state, nodeType) => {\n const { $from, $to, $anchor } = state.selection;\n if (nodeType) {\n const parentNode = findParentNode((node) => node.type.name === nodeType)(state.selection);\n if (!parentNode) {\n return false;\n }\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\n if ($anchor.pos + 1 === $parentPos.end()) {\n return true;\n }\n return false;\n }\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isAtStartOfNode.ts\nvar isAtStartOfNode = (state) => {\n const { $from, $to } = state.selection;\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isExtensionRulesEnabled.ts\nfunction isExtensionRulesEnabled(extension, enabled) {\n if (Array.isArray(enabled)) {\n return enabled.some((enabledExtension) => {\n const name = typeof enabledExtension === \"string\" ? enabledExtension : enabledExtension.name;\n return name === extension.name;\n });\n }\n return enabled;\n}\n\n// src/helpers/isList.ts\nfunction isList(name, extensions) {\n const { nodeExtensions } = splitExtensions(extensions);\n const extension = nodeExtensions.find((item) => item.name === name);\n if (!extension) {\n return false;\n }\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const group = callOrReturn(getExtensionField(extension, \"group\", context));\n if (typeof group !== \"string\") {\n return false;\n }\n return group.split(\" \").includes(\"list\");\n}\n\n// src/helpers/isNodeEmpty.ts\nfunction isNodeEmpty(node, {\n checkChildren = true,\n ignoreWhitespace = false\n} = {}) {\n var _a;\n if (ignoreWhitespace) {\n if (node.type.name === \"hardBreak\") {\n return true;\n }\n if (node.isText) {\n return /^\\s*$/m.test((_a = node.text) != null ? _a : \"\");\n }\n }\n if (node.isText) {\n return !node.text;\n }\n if (node.isAtom || node.isLeaf) {\n return false;\n }\n if (node.content.childCount === 0) {\n return true;\n }\n if (checkChildren) {\n let isContentEmpty = true;\n node.content.forEach((childNode) => {\n if (isContentEmpty === false) {\n return;\n }\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false;\n }\n });\n return isContentEmpty;\n }\n return false;\n}\n\n// src/helpers/isNodeSelection.ts\nimport { NodeSelection } from \"@tiptap/pm/state\";\nfunction isNodeSelection(value) {\n return value instanceof NodeSelection;\n}\n\n// src/helpers/MappablePosition.ts\nvar MappablePosition = class _MappablePosition {\n constructor(position) {\n this.position = position;\n }\n /**\n * Creates a MappablePosition from a JSON object.\n */\n static fromJSON(json) {\n return new _MappablePosition(json.position);\n }\n /**\n * Converts the MappablePosition to a JSON object.\n */\n toJSON() {\n return {\n position: this.position\n };\n }\n};\nfunction getUpdatedPosition(position, transaction) {\n const mapResult = transaction.mapping.mapResult(position.position);\n return {\n position: new MappablePosition(mapResult.pos),\n mapResult\n };\n}\nfunction createMappablePosition(position) {\n return new MappablePosition(position);\n}\n\n// src/helpers/posToDOMRect.ts\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return {\n ...data,\n toJSON: () => data\n };\n}\n\n// src/helpers/rewriteUnknownContent.ts\nfunction rewriteUnknownContentInner({\n json,\n validMarks,\n validNodes,\n options,\n rewrittenContent = []\n}) {\n if (json.marks && Array.isArray(json.marks)) {\n json.marks = json.marks.filter((mark) => {\n const name = typeof mark === \"string\" ? mark : mark.type;\n if (validMarks.has(name)) {\n return true;\n }\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(mark)),\n unsupported: name\n });\n return false;\n });\n }\n if (json.content && Array.isArray(json.content)) {\n json.content = json.content.map(\n (value) => rewriteUnknownContentInner({\n json: value,\n validMarks,\n validNodes,\n options,\n rewrittenContent\n }).json\n ).filter((a) => a !== null && a !== void 0);\n }\n if (json.type && !validNodes.has(json.type)) {\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(json)),\n unsupported: json.type\n });\n if (json.content && Array.isArray(json.content) && (options == null ? void 0 : options.fallbackToParagraph) !== false) {\n json.type = \"paragraph\";\n return {\n json,\n rewrittenContent\n };\n }\n return {\n json: null,\n rewrittenContent\n };\n }\n return { json, rewrittenContent };\n}\nfunction rewriteUnknownContent(json, schema, options) {\n return rewriteUnknownContentInner({\n json,\n validNodes: new Set(Object.keys(schema.nodes)),\n validMarks: new Set(Object.keys(schema.marks)),\n options\n });\n}\n\n// src/commands/setMark.ts\nfunction canSetMark(state, tr, newMarkType) {\n var _a;\n const { selection } = tr;\n let cursor = null;\n if (isTextSelection(selection)) {\n cursor = selection.$cursor;\n }\n if (cursor) {\n const currentMarks = (_a = state.storedMarks) != null ? _a : cursor.marks();\n const parentAllowsMarkType = cursor.parent.type.allowsMarkType(newMarkType);\n return parentAllowsMarkType && (!!newMarkType.isInSet(currentMarks) || !currentMarks.some((mark) => mark.type.excludes(newMarkType)));\n }\n const { ranges } = selection;\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false;\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n if (someNodeSupportsMark) {\n return false;\n }\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some((otherMark) => otherMark.type.excludes(newMarkType));\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n }\n return !someNodeSupportsMark;\n });\n return someNodeSupportsMark;\n });\n}\nvar setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n const type = getMarkType(typeOrName, state.schema);\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type);\n tr.addStoredMark(\n type.create({\n ...oldAttributes,\n ...attributes\n })\n );\n } else {\n ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n const someHasMark = node.marks.find((mark) => mark.type === type);\n if (someHasMark) {\n node.marks.forEach((mark) => {\n if (type === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n type.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n } else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n }\n });\n });\n }\n }\n return canSetMark(state, tr, type);\n};\n\n// src/commands/setMeta.ts\nvar setMeta = (key, value) => ({ tr }) => {\n tr.setMeta(key, value);\n return true;\n};\n\n// src/commands/setNode.ts\nimport { setBlockType } from \"@tiptap/pm/commands\";\nvar setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n return false;\n }\n return chain().command(({ commands }) => {\n const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state);\n if (canSetBlock) {\n return true;\n }\n return commands.clearNodes();\n }).command(({ state: updatedState }) => {\n return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);\n }).run();\n};\n\n// src/commands/setNodeSelection.ts\nimport { NodeSelection as NodeSelection2 } from \"@tiptap/pm/state\";\nvar setNodeSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const from = minMax(position, 0, doc.content.size);\n const selection = NodeSelection2.create(doc, from);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/setTextDirection.ts\nvar setTextDirection = (direction, position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n dir: direction\n });\n });\n }\n return true;\n};\n\n// src/commands/setTextSelection.ts\nimport { TextSelection as TextSelection5 } from \"@tiptap/pm/state\";\nvar setTextSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const { from, to } = typeof position === \"number\" ? { from: position, to: position } : position;\n const minPos = TextSelection5.atStart(doc).from;\n const maxPos = TextSelection5.atEnd(doc).to;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const selection = TextSelection5.create(doc, resolvedFrom, resolvedEnd);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/sinkListItem.ts\nimport { sinkListItem as originalSinkListItem } from \"@tiptap/pm/schema-list\";\nvar sinkListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalSinkListItem(type)(state, dispatch);\n};\n\n// src/commands/splitBlock.ts\nimport { NodeSelection as NodeSelection3, TextSelection as TextSelection6 } from \"@tiptap/pm/state\";\nimport { canSplit } from \"@tiptap/pm/transform\";\nfunction ensureMarks(state, splittableMarks) {\n const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks == null ? void 0 : splittableMarks.includes(mark.type.name));\n state.tr.ensureMarks(filteredMarks);\n }\n}\nvar splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor }) => {\n const { selection, doc } = tr;\n const { $from, $to } = selection;\n const extensionAttributes = editor.extensionManager.attributes;\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n if (selection instanceof NodeSelection3 && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false;\n }\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.split($from.pos).scrollIntoView();\n }\n return true;\n }\n if (!$from.parent.isBlock) {\n return false;\n }\n const atEnd = $to.parentOffset === $to.parent.content.size;\n const deflt = $from.depth === 0 ? void 0 : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let types = atEnd && deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) {\n can = true;\n types = deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n }\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection6) {\n tr.deleteSelection();\n }\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first2 = tr.mapping.map($from.before());\n const $first = tr.doc.resolve(first2);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n }\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.scrollIntoView();\n }\n return can;\n};\n\n// src/commands/splitListItem.ts\nimport { Fragment as Fragment3, Slice } from \"@tiptap/pm/model\";\nimport { TextSelection as TextSelection7 } from \"@tiptap/pm/state\";\nimport { canSplit as canSplit2 } from \"@tiptap/pm/transform\";\nvar splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state, dispatch, editor }) => {\n var _a;\n const type = getNodeType(typeOrName, state.schema);\n const { $from, $to } = state.selection;\n const node = state.selection.node;\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== type) {\n return false;\n }\n const extensionAttributes = editor.extensionManager.attributes;\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment3.empty;\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment3.from($from.node(d).copy(wrap));\n }\n const depthAfter = (\n // eslint-disable-next-line no-nested-ternary\n $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3\n );\n const newNextTypeAttributes2 = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n const nextType2 = ((_a = type.contentMatch.defaultType) == null ? void 0 : _a.createAndFill(newNextTypeAttributes2)) || void 0;\n wrap = wrap.append(Fragment3.from(type.createAndFill(null, nextType2) || void 0));\n const start = $from.before($from.depth - (depthBefore - 1));\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false;\n }\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1;\n }\n });\n if (sel > -1) {\n tr.setSelection(TextSelection7.near(tr.doc.resolve(sel)));\n }\n tr.scrollIntoView();\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs\n };\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n tr.delete($from.pos, $to.pos);\n const types = nextType ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes }\n ] : [{ type, attrs: newTypeAttributes }];\n if (!canSplit2(tr.doc, $from.pos, 2)) {\n return false;\n }\n if (dispatch) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n tr.split($from.pos, 2, types).scrollIntoView();\n if (!marks || !dispatch) {\n return true;\n }\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n};\n\n// src/commands/toggleList.ts\nimport { canJoin } from \"@tiptap/pm/transform\";\nvar joinListBackwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n if (before === void 0) {\n return true;\n }\n const nodeBefore = tr.doc.nodeAt(before);\n const canJoinBackwards = list.node.type === (nodeBefore == null ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\n if (!canJoinBackwards) {\n return true;\n }\n tr.join(list.pos);\n return true;\n};\nvar joinListForwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const after = tr.doc.resolve(list.start).after(list.depth);\n if (after === void 0) {\n return true;\n }\n const nodeAfter = tr.doc.nodeAt(after);\n const canJoinForwards = list.node.type === (nodeAfter == null ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\n if (!canJoinForwards) {\n return true;\n }\n tr.join(after);\n return true;\n};\nvar toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can }) => {\n const { extensions, splittableMarks } = editor.extensionManager;\n const listType = getNodeType(listTypeOrName, state.schema);\n const itemType = getNodeType(itemTypeOrName, state.schema);\n const { selection, storedMarks } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (!range) {\n return false;\n }\n const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return commands.liftListItem(itemType);\n }\n if (isList(parentList.node.type.name, extensions) && listType.validContent(parentList.node.content) && dispatch) {\n return chain().command(() => {\n tr.setNodeMarkup(parentList.pos, listType);\n return true;\n }).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n};\n\n// src/commands/toggleMark.ts\nvar toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options;\n const type = getMarkType(typeOrName, state.schema);\n const isActive2 = isMarkActive(state, type, attributes);\n if (isActive2) {\n return commands.unsetMark(type, { extendEmptyMarkRange });\n }\n return commands.setMark(type, attributes);\n};\n\n// src/commands/toggleNode.ts\nvar toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (isActive2) {\n return commands.setNode(toggleType, attributesToCopy);\n }\n return commands.setNode(type, { ...attributesToCopy, ...attributes });\n};\n\n// src/commands/toggleWrap.ts\nvar toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (isActive2) {\n return commands.lift(type);\n }\n return commands.wrapIn(type, attributes);\n};\n\n// src/commands/undoInputRule.ts\nvar undoInputRule = () => ({ state, dispatch }) => {\n const plugins = state.plugins;\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i];\n let undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr;\n const toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr.delete(undoable.from, undoable.to);\n }\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/unsetAllMarks.ts\nvar unsetAllMarks = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n if (empty) {\n return true;\n }\n if (dispatch) {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos);\n });\n }\n return true;\n};\n\n// src/commands/unsetMark.ts\nvar unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n var _a;\n const { extendEmptyMarkRange = false } = options;\n const { selection } = tr;\n const type = getMarkType(typeOrName, state.schema);\n const { $from, empty, ranges } = selection;\n if (!dispatch) {\n return true;\n }\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection;\n const attrs = (_a = $from.marks().find((mark) => mark.type === type)) == null ? void 0 : _a.attrs;\n const range = getMarkRange($from, type, attrs);\n if (range) {\n from = range.from;\n to = range.to;\n }\n tr.removeMark(from, to, type);\n } else {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos, type);\n });\n }\n tr.removeStoredMark(type);\n return true;\n};\n\n// src/commands/unsetTextDirection.ts\nvar unsetTextDirection = (position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const newAttrs = { ...node.attrs };\n delete newAttrs.dir;\n tr.setNodeMarkup(pos, void 0, newAttrs);\n });\n }\n return true;\n};\n\n// src/commands/updateAttributes.ts\nvar updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canUpdate = false;\n tr.selection.ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n let lastPos;\n let lastNode;\n let trimmedFrom;\n let trimmedTo;\n if (tr.selection.empty) {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n });\n } else {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (pos < from && nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n if (pos >= from && pos <= to) {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n ...attributes\n });\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canUpdate = true;\n if (dispatch) {\n const trimmedFrom2 = Math.max(pos, from);\n const trimmedTo2 = Math.min(pos + node.nodeSize, to);\n tr.addMark(\n trimmedFrom2,\n trimmedTo2,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n }\n });\n }\n }\n });\n }\n if (lastNode) {\n if (lastPos !== void 0 && dispatch) {\n tr.setNodeMarkup(lastPos, void 0, {\n ...lastNode.attrs,\n ...attributes\n });\n }\n if (markType && lastNode.marks.length) {\n lastNode.marks.forEach((mark) => {\n if (markType === mark.type && dispatch) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n }\n }\n });\n return canUpdate;\n};\n\n// src/commands/wrapIn.ts\nimport { wrapIn as originalWrapIn } from \"@tiptap/pm/commands\";\nvar wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapIn(type, attributes)(state, dispatch);\n};\n\n// src/commands/wrapInList.ts\nimport { wrapInList as originalWrapInList } from \"@tiptap/pm/schema-list\";\nvar wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapInList(type, attributes)(state, dispatch);\n};\n\n// src/Editor.ts\nimport { EditorState } from \"@tiptap/pm/state\";\nimport { EditorView } from \"@tiptap/pm/view\";\n\n// src/EventEmitter.ts\nvar EventEmitter = class {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach((callback) => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter((callback) => callback !== fn);\n } else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n once(event, fn) {\n const onceFn = (...args) => {\n this.off(event, onceFn);\n fn.apply(this, args);\n };\n return this.on(event, onceFn);\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n};\n\n// src/ExtensionManager.ts\nimport { keymap } from \"@tiptap/pm/keymap\";\n\n// src/InputRule.ts\nimport { Fragment as Fragment4 } from \"@tiptap/pm/model\";\nimport { Plugin } from \"@tiptap/pm/state\";\nvar InputRule = class {\n constructor(config) {\n var _a;\n this.find = config.find;\n this.handler = config.handler;\n this.undoable = (_a = config.undoable) != null ? _a : true;\n }\n};\nvar inputRuleMatcherHandler = (text, find) => {\n if (isRegExp(find)) {\n return find.exec(text);\n }\n const inputRuleMatch = find(text);\n if (!inputRuleMatch) {\n return null;\n }\n const result = [inputRuleMatch.text];\n result.index = inputRuleMatch.index;\n result.input = text;\n result.data = inputRuleMatch.data;\n if (inputRuleMatch.replaceWith) {\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n }\n result.push(inputRuleMatch.replaceWith);\n }\n return result;\n};\nfunction run(config) {\n var _a;\n const { editor, from, to, text, rules, plugin } = config;\n const { view } = editor;\n if (view.composing) {\n return false;\n }\n const $from = view.state.doc.resolve(from);\n if (\n // check for code node\n $from.parent.type.spec.code || // check for code mark\n !!((_a = $from.nodeBefore || $from.nodeAfter) == null ? void 0 : _a.marks.find((mark) => mark.type.spec.code))\n ) {\n return false;\n }\n let matched = false;\n const textBefore = getTextContentFromNodes($from) + text;\n rules.forEach((rule) => {\n if (matched) {\n return;\n }\n const match = inputRuleMatcherHandler(textBefore, rule.find);\n if (!match) {\n return;\n }\n const tr = view.state.tr;\n const state = createChainableState({\n state: view.state,\n transaction: tr\n });\n const range = {\n from: from - (match[0].length - text.length),\n to\n };\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can\n });\n if (handler === null || !tr.steps.length) {\n return;\n }\n if (rule.undoable) {\n tr.setMeta(plugin, {\n transform: tr,\n from,\n to,\n text\n });\n }\n view.dispatch(tr);\n matched = true;\n });\n return matched;\n}\nfunction inputRulesPlugin(props) {\n const { editor, rules } = props;\n const plugin = new Plugin({\n state: {\n init() {\n return null;\n },\n apply(tr, prev, state) {\n const stored = tr.getMeta(plugin);\n if (stored) {\n return stored;\n }\n const simulatedInputMeta = tr.getMeta(\"applyInputRules\");\n const isSimulatedInput = !!simulatedInputMeta;\n if (isSimulatedInput) {\n setTimeout(() => {\n let { text } = simulatedInputMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment4.from(text), state.schema);\n }\n const { from } = simulatedInputMeta;\n const to = from + text.length;\n run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n });\n }\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) {\n run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\",\n rules,\n plugin\n });\n }\n });\n return false;\n }\n },\n // add support for input rules to trigger on enter\n // this is useful for example for code blocks\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") {\n return false;\n }\n const { $cursor } = view.state.selection;\n if ($cursor) {\n return run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\\n\",\n rules,\n plugin\n });\n }\n return false;\n }\n },\n // @ts-ignore\n isInputRules: true\n });\n return plugin;\n}\n\n// src/utilities/isPlainObject.ts\nfunction getType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n if (getType(value) !== \"Object\") {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\n// src/utilities/mergeDeep.ts\nfunction mergeDeep(target, source) {\n const output = { ...target };\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}\n\n// src/Extendable.ts\nvar Extendable = class {\n constructor(config = {}) {\n this.type = \"extendable\";\n this.parent = null;\n this.child = null;\n this.name = \"\";\n this.config = {\n name: this.name\n };\n this.config = {\n ...this.config,\n ...config\n };\n this.name = this.config.name;\n }\n get options() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addOptions\", {\n name: this.name\n })\n ) || {}\n };\n }\n get storage() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addStorage\", {\n name: this.name,\n options: this.options\n })\n ) || {}\n };\n }\n configure(options = {}) {\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n }\n });\n extension.name = this.name;\n extension.parent = this.parent;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new this.constructor({ ...this.config, ...extendedConfig });\n extension.parent = this;\n this.child = extension;\n extension.name = \"name\" in extendedConfig ? extendedConfig.name : extension.parent.name;\n return extension;\n }\n};\n\n// src/Mark.ts\nvar Mark = class _Mark extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"mark\";\n }\n /**\n * Create a new Mark instance\n * @param config - Mark configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Mark(resolvedConfig);\n }\n static handleExit({ editor, mark }) {\n const { tr } = editor.state;\n const currentPos = editor.state.selection.$from;\n const isAtEnd = currentPos.pos === currentPos.end();\n if (isAtEnd) {\n const currentMarks = currentPos.marks();\n const isInMark = !!currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (!isInMark) {\n return false;\n }\n const removeMark = currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (removeMark) {\n tr.removeStoredMark(removeMark);\n }\n tr.insertText(\" \", currentPos.pos);\n editor.view.dispatch(tr);\n return true;\n }\n return false;\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/PasteRule.ts\nimport { Fragment as Fragment5 } from \"@tiptap/pm/model\";\nimport { Plugin as Plugin2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\n\n// src/PasteRule.ts\nvar PasteRule = class {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n};\nvar pasteRuleMatcherHandler = (text, find, event) => {\n if (isRegExp(find)) {\n return [...text.matchAll(find)];\n }\n const matches = find(text, event);\n if (!matches) {\n return [];\n }\n return matches.map((pasteRuleMatch) => {\n const result = [pasteRuleMatch.text];\n result.index = pasteRuleMatch.index;\n result.input = text;\n result.data = pasteRuleMatch.data;\n if (pasteRuleMatch.replaceWith) {\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n }\n result.push(pasteRuleMatch.replaceWith);\n }\n return result;\n });\n};\nfunction run2(config) {\n const { editor, state, from, to, rule, pasteEvent, dropEvent } = config;\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handlers = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n var _a, _b, _c, _d, _e;\n if (((_b = (_a = node.type) == null ? void 0 : _a.spec) == null ? void 0 : _b.code) || !(node.isText || node.isTextblock || node.isInline)) {\n return;\n }\n const contentSize = (_e = (_d = (_c = node.content) == null ? void 0 : _c.size) != null ? _d : node.nodeSize) != null ? _e : 0;\n const resolvedFrom = Math.max(from, pos);\n const resolvedTo = Math.min(to, pos + contentSize);\n if (resolvedFrom >= resolvedTo) {\n return;\n }\n const textToMatch = node.isText ? node.text || \"\" : node.textBetween(resolvedFrom - pos, resolvedTo - pos, void 0, \"\\uFFFC\");\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n matches.forEach((match) => {\n if (match.index === void 0) {\n return;\n }\n const start = resolvedFrom + match.index + 1;\n const end = start + match[0].length;\n const range = {\n from: state.tr.mapping.map(start),\n to: state.tr.mapping.map(end)\n };\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n pasteEvent,\n dropEvent\n });\n handlers.push(handler);\n });\n });\n const success = handlers.every((handler) => handler !== null);\n return success;\n}\nvar tiptapDragFromOtherEditor = null;\nvar createClipboardPasteEvent = (text) => {\n var _a;\n const event = new ClipboardEvent(\"paste\", {\n clipboardData: new DataTransfer()\n });\n (_a = event.clipboardData) == null ? void 0 : _a.setData(\"text/html\", text);\n return event;\n};\nfunction pasteRulesPlugin(props) {\n const { editor, rules } = props;\n let dragSourceElement = null;\n let isPastedFromProseMirror = false;\n let isDroppedFromProseMirror = false;\n let pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n let dropEvent;\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n const processEvent = ({\n state,\n from,\n to,\n rule,\n pasteEvt\n }) => {\n const tr = state.tr;\n const chainableState = createChainableState({\n state,\n transaction: tr\n });\n const handler = run2({\n editor,\n state: chainableState,\n from: Math.max(from - 1, 0),\n to: to.b - 1,\n rule,\n pasteEvent: pasteEvt,\n dropEvent\n });\n if (!handler || !tr.steps.length) {\n return;\n }\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n return tr;\n };\n const plugins = rules.map((rule) => {\n return new Plugin2({\n // we register a global drag handler to track the current drag source element\n view(view) {\n const handleDragstart = (event) => {\n var _a;\n dragSourceElement = ((_a = view.dom.parentElement) == null ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null;\n if (dragSourceElement) {\n tiptapDragFromOtherEditor = editor;\n }\n };\n const handleDragend = () => {\n if (tiptapDragFromOtherEditor) {\n tiptapDragFromOtherEditor = null;\n }\n };\n window.addEventListener(\"dragstart\", handleDragstart);\n window.addEventListener(\"dragend\", handleDragend);\n return {\n destroy() {\n window.removeEventListener(\"dragstart\", handleDragstart);\n window.removeEventListener(\"dragend\", handleDragend);\n }\n };\n },\n props: {\n handleDOMEvents: {\n drop: (view, event) => {\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n dropEvent = event;\n if (!isDroppedFromProseMirror) {\n const dragFromOtherEditor = tiptapDragFromOtherEditor;\n if (dragFromOtherEditor == null ? void 0 : dragFromOtherEditor.isEditable) {\n setTimeout(() => {\n const selection = dragFromOtherEditor.state.selection;\n if (selection) {\n dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });\n }\n }, 10);\n }\n }\n return false;\n },\n paste: (_view, event) => {\n var _a;\n const html = (_a = event.clipboardData) == null ? void 0 : _a.getData(\"text/html\");\n pasteEvent = event;\n isPastedFromProseMirror = !!(html == null ? void 0 : html.includes(\"data-pm-slice\"));\n return false;\n }\n }\n },\n appendTransaction: (transactions, oldState, state) => {\n const transaction = transactions[0];\n const isPaste = transaction.getMeta(\"uiEvent\") === \"paste\" && !isPastedFromProseMirror;\n const isDrop = transaction.getMeta(\"uiEvent\") === \"drop\" && !isDroppedFromProseMirror;\n const simulatedPasteMeta = transaction.getMeta(\"applyPasteRules\");\n const isSimulatedPaste = !!simulatedPasteMeta;\n if (!isPaste && !isDrop && !isSimulatedPaste) {\n return;\n }\n if (isSimulatedPaste) {\n let { text } = simulatedPasteMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment5.from(text), state.schema);\n }\n const { from: from2 } = simulatedPasteMeta;\n const to2 = from2 + text.length;\n const pasteEvt = createClipboardPasteEvent(text);\n return processEvent({\n rule,\n state,\n from: from2,\n to: { b: to2 },\n pasteEvt\n });\n }\n const from = oldState.doc.content.findDiffStart(state.doc.content);\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\n if (!isNumber(from) || !to || from === to.b) {\n return;\n }\n return processEvent({\n rule,\n state,\n from,\n to,\n pasteEvt: pasteEvent\n });\n }\n });\n });\n return plugins;\n}\n\n// src/ExtensionManager.ts\nvar ExtensionManager = class {\n constructor(extensions, editor) {\n this.splittableMarks = [];\n this.editor = editor;\n this.baseExtensions = extensions;\n this.extensions = resolveExtensions(extensions);\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n this.setupExtensions();\n }\n /**\n * Get all commands from the extensions.\n * @returns An object with all commands where the key is the command name and the value is the command function\n */\n get commands() {\n return this.extensions.reduce((commands, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const addCommands = getExtensionField(extension, \"addCommands\", context);\n if (!addCommands) {\n return commands;\n }\n return {\n ...commands,\n ...addCommands()\n };\n }, {});\n }\n /**\n * Get all registered Prosemirror plugins from the extensions.\n * @returns An array of Prosemirror plugins\n */\n get plugins() {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n const allPlugins = extensions.flatMap((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const plugins = [];\n const addKeyboardShortcuts = getExtensionField(\n extension,\n \"addKeyboardShortcuts\",\n context\n );\n let defaultBindings = {};\n if (extension.type === \"mark\" && getExtensionField(extension, \"exitable\", context)) {\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n }\n if (addKeyboardShortcuts) {\n const bindings = Object.fromEntries(\n Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n return [shortcut, () => method({ editor })];\n })\n );\n defaultBindings = { ...defaultBindings, ...bindings };\n }\n const keyMapPlugin = keymap(defaultBindings);\n plugins.push(keyMapPlugin);\n const addInputRules = getExtensionField(extension, \"addInputRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n const rules = addInputRules();\n if (rules && rules.length) {\n const inputResult = inputRulesPlugin({\n editor,\n rules\n });\n const inputPlugins = Array.isArray(inputResult) ? inputResult : [inputResult];\n plugins.push(...inputPlugins);\n }\n }\n const addPasteRules = getExtensionField(extension, \"addPasteRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n const rules = addPasteRules();\n if (rules && rules.length) {\n const pasteRules = pasteRulesPlugin({ editor, rules });\n plugins.push(...pasteRules);\n }\n }\n const addProseMirrorPlugins = getExtensionField(\n extension,\n \"addProseMirrorPlugins\",\n context\n );\n if (addProseMirrorPlugins) {\n const proseMirrorPlugins = addProseMirrorPlugins();\n plugins.push(...proseMirrorPlugins);\n }\n return plugins;\n });\n return allPlugins;\n }\n /**\n * Get all attributes from the extensions.\n * @returns An array of attributes\n */\n get attributes() {\n return getAttributesFromExtensions(this.extensions);\n }\n /**\n * Get all node views from the extensions.\n * @returns An object with all node views where the key is the node name and the value is the node view function\n */\n get nodeViews() {\n const { editor } = this;\n const { nodeExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n nodeExtensions.filter((extension) => !!getExtensionField(extension, \"addNodeView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getNodeType(extension.name, this.schema)\n };\n const addNodeView = getExtensionField(extension, \"addNodeView\", context);\n if (!addNodeView) {\n return [];\n }\n const nodeViewResult = addNodeView();\n if (!nodeViewResult) {\n return [];\n }\n const nodeview = (node, view, getPos, decorations, innerDecorations) => {\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n return nodeViewResult({\n // pass-through\n node,\n view,\n getPos,\n decorations,\n innerDecorations,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes\n });\n };\n return [extension.name, nodeview];\n })\n );\n }\n /**\n * Get the composed dispatchTransaction function from all extensions.\n * @param baseDispatch The base dispatch function (e.g. from the editor or user props)\n * @returns A composed dispatch function\n */\n dispatchTransaction(baseDispatch) {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n return extensions.reduceRight((next, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const dispatchTransaction = getExtensionField(\n extension,\n \"dispatchTransaction\",\n context\n );\n if (!dispatchTransaction) {\n return next;\n }\n return (transaction) => {\n dispatchTransaction.call(context, { transaction, next });\n };\n }, baseDispatch);\n }\n get markViews() {\n const { editor } = this;\n const { markExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n markExtensions.filter((extension) => !!getExtensionField(extension, \"addMarkView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getMarkType(extension.name, this.schema)\n };\n const addMarkView = getExtensionField(extension, \"addMarkView\", context);\n if (!addMarkView) {\n return [];\n }\n const markView = (mark, view, inline) => {\n const HTMLAttributes = getRenderedAttributes(mark, extensionAttributes);\n return addMarkView()({\n // pass-through\n mark,\n view,\n inline,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes,\n updateAttributes: (attrs) => {\n updateMarkViewAttributes(mark, editor, attrs);\n }\n });\n };\n return [extension.name, markView];\n })\n );\n }\n /**\n * Go through all extensions, create extension storages & setup marks\n * & bind editor event listener.\n */\n setupExtensions() {\n const extensions = this.extensions;\n this.editor.extensionStorage = Object.fromEntries(\n extensions.map((extension) => [extension.name, extension.storage])\n );\n extensions.forEach((extension) => {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n if (extension.type === \"mark\") {\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, \"keepOnSplit\", context))) != null ? _a : true;\n if (keepOnSplit) {\n this.splittableMarks.push(extension.name);\n }\n }\n const onBeforeCreate = getExtensionField(extension, \"onBeforeCreate\", context);\n const onCreate = getExtensionField(extension, \"onCreate\", context);\n const onUpdate = getExtensionField(extension, \"onUpdate\", context);\n const onSelectionUpdate = getExtensionField(\n extension,\n \"onSelectionUpdate\",\n context\n );\n const onTransaction = getExtensionField(extension, \"onTransaction\", context);\n const onFocus = getExtensionField(extension, \"onFocus\", context);\n const onBlur = getExtensionField(extension, \"onBlur\", context);\n const onDestroy = getExtensionField(extension, \"onDestroy\", context);\n if (onBeforeCreate) {\n this.editor.on(\"beforeCreate\", onBeforeCreate);\n }\n if (onCreate) {\n this.editor.on(\"create\", onCreate);\n }\n if (onUpdate) {\n this.editor.on(\"update\", onUpdate);\n }\n if (onSelectionUpdate) {\n this.editor.on(\"selectionUpdate\", onSelectionUpdate);\n }\n if (onTransaction) {\n this.editor.on(\"transaction\", onTransaction);\n }\n if (onFocus) {\n this.editor.on(\"focus\", onFocus);\n }\n if (onBlur) {\n this.editor.on(\"blur\", onBlur);\n }\n if (onDestroy) {\n this.editor.on(\"destroy\", onDestroy);\n }\n });\n }\n};\nExtensionManager.resolve = resolveExtensions;\nExtensionManager.sort = sortExtensions;\nExtensionManager.flatten = flattenExtensions;\n\n// src/extensions/index.ts\nvar extensions_exports = {};\n__export(extensions_exports, {\n ClipboardTextSerializer: () => ClipboardTextSerializer,\n Commands: () => Commands,\n Delete: () => Delete,\n Drop: () => Drop,\n Editable: () => Editable,\n FocusEvents: () => FocusEvents,\n Keymap: () => Keymap,\n Paste: () => Paste,\n Tabindex: () => Tabindex,\n TextDirection: () => TextDirection,\n focusEventsPluginKey: () => focusEventsPluginKey\n});\n\n// src/extensions/clipboardTextSerializer.ts\nimport { Plugin as Plugin3, PluginKey } from \"@tiptap/pm/state\";\n\n// src/Extension.ts\nvar Extension = class _Extension extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"extension\";\n }\n /**\n * Create a new Extension instance\n * @param config - Extension configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Extension(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/extensions/clipboardTextSerializer.ts\nvar ClipboardTextSerializer = Extension.create({\n name: \"clipboardTextSerializer\",\n addOptions() {\n return {\n blockSeparator: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin3({\n key: new PluginKey(\"clipboardTextSerializer\"),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this;\n const { state, schema } = editor;\n const { doc, selection } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range2) => range2.$from.pos));\n const to = Math.max(...ranges.map((range2) => range2.$to.pos));\n const textSerializers = getTextSerializersFromSchema(schema);\n const range = { from, to };\n return getTextBetween(doc, range, {\n ...this.options.blockSeparator !== void 0 ? { blockSeparator: this.options.blockSeparator } : {},\n textSerializers\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/commands.ts\nvar Commands = Extension.create({\n name: \"commands\",\n addCommands() {\n return {\n ...commands_exports\n };\n }\n});\n\n// src/extensions/delete.ts\nimport { RemoveMarkStep } from \"@tiptap/pm/transform\";\nvar Delete = Extension.create({\n name: \"delete\",\n onUpdate({ transaction, appendedTransactions }) {\n var _a, _b, _c;\n const callback = () => {\n var _a2, _b2, _c2, _d;\n if ((_d = (_c2 = (_b2 = (_a2 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a2.delete) == null ? void 0 : _b2.filterTransaction) == null ? void 0 : _c2.call(_b2, transaction)) != null ? _d : transaction.getMeta(\"y-sync$\")) {\n return;\n }\n const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions]);\n const changes = getChangedRanges(nextTransaction);\n changes.forEach((change) => {\n if (nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter && nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore) {\n nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from) => {\n const to = from + node.nodeSize - 2;\n const isFullyWithinRange = change.oldRange.from <= from && to <= change.oldRange.to;\n this.editor.emit(\"delete\", {\n type: \"node\",\n node,\n from,\n to,\n newFrom: nextTransaction.mapping.map(from),\n newTo: nextTransaction.mapping.map(to),\n deletedRange: change.oldRange,\n newRange: change.newRange,\n partial: !isFullyWithinRange,\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n });\n }\n });\n const mapping = nextTransaction.mapping;\n nextTransaction.steps.forEach((step, index) => {\n var _a3, _b3;\n if (step instanceof RemoveMarkStep) {\n const newStart = mapping.slice(index).map(step.from, -1);\n const newEnd = mapping.slice(index).map(step.to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n const foundBeforeMark = (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark));\n const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));\n this.editor.emit(\"delete\", {\n type: \"mark\",\n mark: step.mark,\n from: step.from,\n to: step.to,\n deletedRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n },\n partial: Boolean(foundAfterMark || foundBeforeMark),\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n }\n });\n };\n if ((_c = (_b = (_a = this.editor.options.coreExtensionOptions) == null ? void 0 : _a.delete) == null ? void 0 : _b.async) != null ? _c : true) {\n setTimeout(callback, 0);\n } else {\n callback();\n }\n }\n});\n\n// src/extensions/drop.ts\nimport { Plugin as Plugin4, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nvar Drop = Extension.create({\n name: \"drop\",\n addProseMirrorPlugins() {\n return [\n new Plugin4({\n key: new PluginKey2(\"tiptapDrop\"),\n props: {\n handleDrop: (_, e, slice, moved) => {\n this.editor.emit(\"drop\", {\n editor: this.editor,\n event: e,\n slice,\n moved\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/editable.ts\nimport { Plugin as Plugin5, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nvar Editable = Extension.create({\n name: \"editable\",\n addProseMirrorPlugins() {\n return [\n new Plugin5({\n key: new PluginKey3(\"editable\"),\n props: {\n editable: () => this.editor.options.editable\n }\n })\n ];\n }\n});\n\n// src/extensions/focusEvents.ts\nimport { Plugin as Plugin6, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nvar focusEventsPluginKey = new PluginKey4(\"focusEvents\");\nvar FocusEvents = Extension.create({\n name: \"focusEvents\",\n addProseMirrorPlugins() {\n const { editor } = this;\n return [\n new Plugin6({\n key: focusEventsPluginKey,\n props: {\n handleDOMEvents: {\n focus: (view, event) => {\n editor.isFocused = true;\n const transaction = editor.state.tr.setMeta(\"focus\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n },\n blur: (view, event) => {\n editor.isFocused = false;\n const transaction = editor.state.tr.setMeta(\"blur\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n }\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/keymap.ts\nimport { Plugin as Plugin7, PluginKey as PluginKey5, Selection as Selection3 } from \"@tiptap/pm/state\";\nvar Keymap = Extension.create({\n name: \"keymap\",\n addKeyboardShortcuts() {\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n // maybe convert first text block node to default node\n () => commands.command(({ tr }) => {\n const { selection, doc } = tr;\n const { empty, $anchor } = selection;\n const { pos, parent } = $anchor;\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n const parentPos = $anchor.pos - $anchor.parentOffset;\n const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection3.atStart(doc).from === pos;\n if (!empty || !parent.type.isTextblock || parent.textContent.length || !isAtStart || isAtStart && $anchor.parent.type.name === \"paragraph\") {\n return false;\n }\n return commands.clearNodes();\n }),\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward()\n ]);\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward()\n ]);\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock()\n ]);\n const baseKeymap = {\n Enter: handleEnter,\n \"Mod-Enter\": () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n \"Mod-Backspace\": handleBackspace,\n \"Shift-Backspace\": handleBackspace,\n Delete: handleDelete,\n \"Mod-Delete\": handleDelete,\n \"Mod-a\": () => this.editor.commands.selectAll()\n };\n const pcKeymap = {\n ...baseKeymap\n };\n const macKeymap = {\n ...baseKeymap,\n \"Ctrl-h\": handleBackspace,\n \"Alt-Backspace\": handleBackspace,\n \"Ctrl-d\": handleDelete,\n \"Ctrl-Alt-Backspace\": handleDelete,\n \"Alt-Delete\": handleDelete,\n \"Alt-d\": handleDelete,\n \"Ctrl-a\": () => this.editor.commands.selectTextblockStart(),\n \"Ctrl-e\": () => this.editor.commands.selectTextblockEnd()\n };\n if (isiOS() || isMacOS()) {\n return macKeymap;\n }\n return pcKeymap;\n },\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin7({\n key: new PluginKey5(\"clearDocument\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (transactions.some((tr2) => tr2.getMeta(\"composition\"))) {\n return;\n }\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const ignoreTr = transactions.some((transaction) => transaction.getMeta(\"preventClearDocument\"));\n if (!docChanges || ignoreTr) {\n return;\n }\n const { empty, from, to } = oldState.selection;\n const allFrom = Selection3.atStart(oldState.doc).from;\n const allEnd = Selection3.atEnd(oldState.doc).to;\n const allWasSelected = from === allFrom && to === allEnd;\n if (empty || !allWasSelected) {\n return;\n }\n const isEmpty = isNodeEmpty(newState.doc);\n if (!isEmpty) {\n return;\n }\n const tr = newState.tr;\n const state = createChainableState({\n state: newState,\n transaction: tr\n });\n const { commands } = new CommandManager({\n editor: this.editor,\n state\n });\n commands.clearNodes();\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n })\n ];\n }\n});\n\n// src/extensions/paste.ts\nimport { Plugin as Plugin8, PluginKey as PluginKey6 } from \"@tiptap/pm/state\";\nvar Paste = Extension.create({\n name: \"paste\",\n addProseMirrorPlugins() {\n return [\n new Plugin8({\n key: new PluginKey6(\"tiptapPaste\"),\n props: {\n handlePaste: (_view, e, slice) => {\n this.editor.emit(\"paste\", {\n editor: this.editor,\n event: e,\n slice\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/tabindex.ts\nimport { Plugin as Plugin9, PluginKey as PluginKey7 } from \"@tiptap/pm/state\";\nvar Tabindex = Extension.create({\n name: \"tabindex\",\n addProseMirrorPlugins() {\n return [\n new Plugin9({\n key: new PluginKey7(\"tabindex\"),\n props: {\n attributes: () => this.editor.isEditable ? { tabindex: \"0\" } : {}\n }\n })\n ];\n }\n});\n\n// src/extensions/textDirection.ts\nimport { Plugin as Plugin10, PluginKey as PluginKey8 } from \"@tiptap/pm/state\";\nvar TextDirection = Extension.create({\n name: \"textDirection\",\n addOptions() {\n return {\n direction: void 0\n };\n },\n addGlobalAttributes() {\n if (!this.options.direction) {\n return [];\n }\n const { nodeExtensions } = splitExtensions(this.extensions);\n return [\n {\n types: nodeExtensions.filter((extension) => extension.name !== \"text\").map((extension) => extension.name),\n attributes: {\n dir: {\n default: this.options.direction,\n parseHTML: (element) => {\n const dir = element.getAttribute(\"dir\");\n if (dir && (dir === \"ltr\" || dir === \"rtl\" || dir === \"auto\")) {\n return dir;\n }\n return this.options.direction;\n },\n renderHTML: (attributes) => {\n if (!attributes.dir) {\n return {};\n }\n return {\n dir: attributes.dir\n };\n }\n }\n }\n }\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin10({\n key: new PluginKey8(\"textDirection\"),\n props: {\n attributes: () => {\n const direction = this.options.direction;\n if (!direction) {\n return {};\n }\n return {\n dir: direction\n };\n }\n }\n })\n ];\n }\n});\n\n// src/NodePos.ts\nvar NodePos = class _NodePos {\n constructor(pos, editor, isBlock = false, node = null) {\n this.currentNode = null;\n this.actualDepth = null;\n this.isBlock = isBlock;\n this.resolvedPos = pos;\n this.editor = editor;\n this.currentNode = node;\n }\n get name() {\n return this.node.type.name;\n }\n get node() {\n return this.currentNode || this.resolvedPos.node();\n }\n get element() {\n return this.editor.view.domAtPos(this.pos).node;\n }\n get depth() {\n var _a;\n return (_a = this.actualDepth) != null ? _a : this.resolvedPos.depth;\n }\n get pos() {\n return this.resolvedPos.pos;\n }\n get content() {\n return this.node.content;\n }\n set content(content) {\n let from = this.from;\n let to = this.to;\n if (this.isBlock) {\n if (this.content.size === 0) {\n console.error(`You can\\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n return;\n }\n from = this.from + 1;\n to = this.to - 1;\n }\n this.editor.commands.insertContentAt({ from, to }, content);\n }\n get attributes() {\n return this.node.attrs;\n }\n get textContent() {\n return this.node.textContent;\n }\n get size() {\n return this.node.nodeSize;\n }\n get from() {\n if (this.isBlock) {\n return this.pos;\n }\n return this.resolvedPos.start(this.resolvedPos.depth);\n }\n get range() {\n return {\n from: this.from,\n to: this.to\n };\n }\n get to() {\n if (this.isBlock) {\n return this.pos + this.size;\n }\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n }\n get parent() {\n if (this.depth === 0) {\n return null;\n }\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n const $pos = this.resolvedPos.doc.resolve(parentPos);\n return new _NodePos($pos, this.editor);\n }\n get before() {\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get after() {\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get children() {\n const children = [];\n this.node.content.forEach((node, offset) => {\n const isBlock = node.isBlock && !node.isTextblock;\n const isNonTextAtom = node.isAtom && !node.isText;\n const isInline = node.isInline;\n const targetPos = this.pos + offset + (isNonTextAtom ? 0 : 1);\n if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {\n return;\n }\n const $pos = this.resolvedPos.doc.resolve(targetPos);\n if (!isBlock && !isInline && $pos.depth <= this.depth) {\n return;\n }\n const childNodePos = new _NodePos($pos, this.editor, isBlock, isBlock || isInline ? node : null);\n if (isBlock) {\n childNodePos.actualDepth = this.depth + 1;\n }\n children.push(childNodePos);\n });\n return children;\n }\n get firstChild() {\n return this.children[0] || null;\n }\n get lastChild() {\n const children = this.children;\n return children[children.length - 1] || null;\n }\n closest(selector, attributes = {}) {\n let node = null;\n let currentNode = this.parent;\n while (currentNode && !node) {\n if (currentNode.node.type.name === selector) {\n if (Object.keys(attributes).length > 0) {\n const nodeAttributes = currentNode.node.attrs;\n const attrKeys = Object.keys(attributes);\n for (let index = 0; index < attrKeys.length; index += 1) {\n const key = attrKeys[index];\n if (nodeAttributes[key] !== attributes[key]) {\n break;\n }\n }\n } else {\n node = currentNode;\n }\n }\n currentNode = currentNode.parent;\n }\n return node;\n }\n querySelector(selector, attributes = {}) {\n return this.querySelectorAll(selector, attributes, true)[0] || null;\n }\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n let nodes = [];\n if (!this.children || this.children.length === 0) {\n return nodes;\n }\n const attrKeys = Object.keys(attributes);\n this.children.forEach((childPos) => {\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n if (childPos.node.type.name === selector) {\n const doesAllAttributesMatch = attrKeys.every((key) => attributes[key] === childPos.node.attrs[key]);\n if (doesAllAttributesMatch) {\n nodes.push(childPos);\n }\n }\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n });\n return nodes;\n }\n setAttribute(attributes) {\n const { tr } = this.editor.state;\n tr.setNodeMarkup(this.from, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n this.editor.view.dispatch(tr);\n }\n};\n\n// src/style.ts\nvar style = `.ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}`;\n\n// src/utilities/createStyleTag.ts\nfunction createStyleTag(style2, nonce, suffix) {\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : \"\"}]`);\n if (tiptapStyleTag !== null) {\n return tiptapStyleTag;\n }\n const styleNode = document.createElement(\"style\");\n if (nonce) {\n styleNode.setAttribute(\"nonce\", nonce);\n }\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : \"\"}`, \"\");\n styleNode.innerHTML = style2;\n document.getElementsByTagName(\"head\")[0].appendChild(styleNode);\n return styleNode;\n}\n\n// src/Editor.ts\nvar Editor = class extends EventEmitter {\n constructor(options = {}) {\n super();\n this.css = null;\n this.className = \"tiptap\";\n this.editorView = null;\n this.isFocused = false;\n /**\n * The editor is considered initialized after the `create` event has been emitted.\n */\n this.isInitialized = false;\n this.extensionStorage = {};\n /**\n * A unique ID for this editor instance.\n */\n this.instanceId = Math.random().toString(36).slice(2, 9);\n this.options = {\n element: typeof document !== \"undefined\" ? document.createElement(\"div\") : null,\n content: \"\",\n injectCSS: true,\n injectNonce: void 0,\n extensions: [],\n autofocus: false,\n editable: true,\n textDirection: void 0,\n editorProps: {},\n parseOptions: {},\n coreExtensionOptions: {},\n enableInputRules: true,\n enablePasteRules: true,\n enableCoreExtensions: true,\n enableContentCheck: false,\n emitContentError: false,\n onBeforeCreate: () => null,\n onCreate: () => null,\n onMount: () => null,\n onUnmount: () => null,\n onUpdate: () => null,\n onSelectionUpdate: () => null,\n onTransaction: () => null,\n onFocus: () => null,\n onBlur: () => null,\n onDestroy: () => null,\n onContentError: ({ error }) => {\n throw error;\n },\n onPaste: () => null,\n onDrop: () => null,\n onDelete: () => null,\n enableExtensionDispatchTransaction: true\n };\n this.isCapturingTransaction = false;\n this.capturedTransaction = null;\n /**\n * Returns a set of utilities for working with positions and ranges.\n */\n this.utils = {\n getUpdatedPosition,\n createMappablePosition\n };\n this.setOptions(options);\n this.createExtensionManager();\n this.createCommandManager();\n this.createSchema();\n this.on(\"beforeCreate\", this.options.onBeforeCreate);\n this.emit(\"beforeCreate\", { editor: this });\n this.on(\"mount\", this.options.onMount);\n this.on(\"unmount\", this.options.onUnmount);\n this.on(\"contentError\", this.options.onContentError);\n this.on(\"create\", this.options.onCreate);\n this.on(\"update\", this.options.onUpdate);\n this.on(\"selectionUpdate\", this.options.onSelectionUpdate);\n this.on(\"transaction\", this.options.onTransaction);\n this.on(\"focus\", this.options.onFocus);\n this.on(\"blur\", this.options.onBlur);\n this.on(\"destroy\", this.options.onDestroy);\n this.on(\"drop\", ({ event, slice, moved }) => this.options.onDrop(event, slice, moved));\n this.on(\"paste\", ({ event, slice }) => this.options.onPaste(event, slice));\n this.on(\"delete\", this.options.onDelete);\n const initialDoc = this.createDoc();\n const selection = resolveFocusPosition(initialDoc, this.options.autofocus);\n this.editorState = EditorState.create({\n doc: initialDoc,\n schema: this.schema,\n selection: selection || void 0\n });\n if (this.options.element) {\n this.mount(this.options.element);\n }\n }\n /**\n * Attach the editor to the DOM, creating a new editor view.\n */\n mount(el) {\n if (typeof document === \"undefined\") {\n throw new Error(\n `[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`\n );\n }\n this.createView(el);\n this.emit(\"mount\", { editor: this });\n if (this.css && !document.head.contains(this.css)) {\n document.head.appendChild(this.css);\n }\n window.setTimeout(() => {\n if (this.isDestroyed) {\n return;\n }\n if (this.options.autofocus !== false && this.options.autofocus !== null) {\n this.commands.focus(this.options.autofocus);\n }\n this.emit(\"create\", { editor: this });\n this.isInitialized = true;\n }, 0);\n }\n /**\n * Remove the editor from the DOM, but still allow remounting at a different point in time\n */\n unmount() {\n if (this.editorView) {\n const dom = this.editorView.dom;\n if (dom == null ? void 0 : dom.editor) {\n delete dom.editor;\n }\n this.editorView.destroy();\n }\n this.editorView = null;\n this.isInitialized = false;\n if (this.css && !document.querySelectorAll(`.${this.className}`).length) {\n try {\n if (typeof this.css.remove === \"function\") {\n this.css.remove();\n } else if (this.css.parentNode) {\n this.css.parentNode.removeChild(this.css);\n }\n } catch (error) {\n console.warn(\"Failed to remove CSS element:\", error);\n }\n }\n this.css = null;\n this.emit(\"unmount\", { editor: this });\n }\n /**\n * Returns the editor storage.\n */\n get storage() {\n return this.extensionStorage;\n }\n /**\n * An object of all registered commands.\n */\n get commands() {\n return this.commandManager.commands;\n }\n /**\n * Create a command chain to call multiple commands at once.\n */\n chain() {\n return this.commandManager.chain();\n }\n /**\n * Check if a command or a command chain can be executed. Without executing it.\n */\n can() {\n return this.commandManager.can();\n }\n /**\n * Inject CSS styles.\n */\n injectCSS() {\n if (this.options.injectCSS && typeof document !== \"undefined\") {\n this.css = createStyleTag(style, this.options.injectNonce);\n }\n }\n /**\n * Update editor options.\n *\n * @param options A list of options\n */\n setOptions(options = {}) {\n this.options = {\n ...this.options,\n ...options\n };\n if (!this.editorView || !this.state || this.isDestroyed) {\n return;\n }\n if (this.options.editorProps) {\n this.view.setProps(this.options.editorProps);\n }\n this.view.updateState(this.state);\n }\n /**\n * Update editable state of the editor.\n */\n setEditable(editable, emitUpdate = true) {\n this.setOptions({ editable });\n if (emitUpdate) {\n this.emit(\"update\", { editor: this, transaction: this.state.tr, appendedTransactions: [] });\n }\n }\n /**\n * Returns whether the editor is editable.\n */\n get isEditable() {\n return this.options.editable && this.view && this.view.editable;\n }\n /**\n * Returns the editor state.\n */\n get view() {\n if (this.editorView) {\n return this.editorView;\n }\n return new Proxy(\n {\n state: this.editorState,\n updateState: (state) => {\n this.editorState = state;\n },\n dispatch: (tr) => {\n this.dispatchTransaction(tr);\n },\n // Stub some commonly accessed properties to prevent errors\n composing: false,\n dragging: null,\n editable: true,\n isDestroyed: false\n },\n {\n get: (obj, key) => {\n if (this.editorView) {\n return this.editorView[key];\n }\n if (key === \"state\") {\n return this.editorState;\n }\n if (key in obj) {\n return Reflect.get(obj, key);\n }\n throw new Error(\n `[tiptap error]: The editor view is not available. Cannot access view['${key}']. The editor may not be mounted yet.`\n );\n }\n }\n );\n }\n /**\n * Returns the editor state.\n */\n get state() {\n if (this.editorView) {\n this.editorState = this.view.state;\n }\n return this.editorState;\n }\n /**\n * Register a ProseMirror plugin.\n *\n * @param plugin A ProseMirror plugin\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\n * @returns The new editor state\n */\n registerPlugin(plugin, handlePlugins) {\n const plugins = isFunction(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin];\n const state = this.state.reconfigure({ plugins });\n this.view.updateState(state);\n return state;\n }\n /**\n * Unregister a ProseMirror plugin.\n *\n * @param nameOrPluginKeyToRemove The plugins name\n * @returns The new editor state or undefined if the editor is destroyed\n */\n unregisterPlugin(nameOrPluginKeyToRemove) {\n if (this.isDestroyed) {\n return void 0;\n }\n const prevPlugins = this.state.plugins;\n let plugins = prevPlugins;\n [].concat(nameOrPluginKeyToRemove).forEach((nameOrPluginKey) => {\n const name = typeof nameOrPluginKey === \"string\" ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n plugins = plugins.filter((plugin) => !plugin.key.startsWith(name));\n });\n if (prevPlugins.length === plugins.length) {\n return void 0;\n }\n const state = this.state.reconfigure({\n plugins\n });\n this.view.updateState(state);\n return state;\n }\n /**\n * Creates an extension manager.\n */\n createExtensionManager() {\n var _a, _b;\n const coreExtensions = this.options.enableCoreExtensions ? [\n Editable,\n ClipboardTextSerializer.configure({\n blockSeparator: (_b = (_a = this.options.coreExtensionOptions) == null ? void 0 : _a.clipboardTextSerializer) == null ? void 0 : _b.blockSeparator\n }),\n Commands,\n FocusEvents,\n Keymap,\n Tabindex,\n Drop,\n Paste,\n Delete,\n TextDirection.configure({\n direction: this.options.textDirection\n })\n ].filter((ext) => {\n if (typeof this.options.enableCoreExtensions === \"object\") {\n return this.options.enableCoreExtensions[ext.name] !== false;\n }\n return true;\n }) : [];\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension) => {\n return [\"extension\", \"node\", \"mark\"].includes(extension == null ? void 0 : extension.type);\n });\n this.extensionManager = new ExtensionManager(allExtensions, this);\n }\n /**\n * Creates an command manager.\n */\n createCommandManager() {\n this.commandManager = new CommandManager({\n editor: this\n });\n }\n /**\n * Creates a ProseMirror schema.\n */\n createSchema() {\n this.schema = this.extensionManager.schema;\n }\n /**\n * Creates the initial document.\n */\n createDoc() {\n let doc;\n try {\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: this.options.enableContentCheck\n });\n } catch (e) {\n if (!(e instanceof Error) || ![\"[tiptap error]: Invalid JSON content\", \"[tiptap error]: Invalid HTML content\"].includes(e.message)) {\n throw e;\n }\n this.emit(\"contentError\", {\n editor: this,\n error: e,\n disableCollaboration: () => {\n if (\"collaboration\" in this.storage && typeof this.storage.collaboration === \"object\" && this.storage.collaboration) {\n ;\n this.storage.collaboration.isDisabled = true;\n }\n this.options.extensions = this.options.extensions.filter((extension) => extension.name !== \"collaboration\");\n this.createExtensionManager();\n }\n });\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: false\n });\n }\n return doc;\n }\n /**\n * Creates a ProseMirror view.\n */\n createView(element) {\n const { editorProps, enableExtensionDispatchTransaction } = this.options;\n const baseDispatch = editorProps.dispatchTransaction || this.dispatchTransaction.bind(this);\n const dispatch = enableExtensionDispatchTransaction ? this.extensionManager.dispatchTransaction(baseDispatch) : baseDispatch;\n this.editorView = new EditorView(element, {\n ...editorProps,\n attributes: {\n // add `role=\"textbox\"` to the editor element\n role: \"textbox\",\n ...editorProps == null ? void 0 : editorProps.attributes\n },\n dispatchTransaction: dispatch,\n state: this.editorState,\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n const newState = this.state.reconfigure({\n plugins: this.extensionManager.plugins\n });\n this.view.updateState(newState);\n this.prependClass();\n this.injectCSS();\n const dom = this.view.dom;\n dom.editor = this;\n }\n /**\n * Creates all node and mark views.\n */\n createNodeViews() {\n if (this.view.isDestroyed) {\n return;\n }\n this.view.setProps({\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n }\n /**\n * Prepend class name to element.\n */\n prependClass() {\n this.view.dom.className = `${this.className} ${this.view.dom.className}`;\n }\n captureTransaction(fn) {\n this.isCapturingTransaction = true;\n fn();\n this.isCapturingTransaction = false;\n const tr = this.capturedTransaction;\n this.capturedTransaction = null;\n return tr;\n }\n /**\n * The callback over which to send transactions (state updates) produced by the view.\n *\n * @param transaction An editor state transaction\n */\n dispatchTransaction(transaction) {\n if (this.view.isDestroyed) {\n return;\n }\n if (this.isCapturingTransaction) {\n if (!this.capturedTransaction) {\n this.capturedTransaction = transaction;\n return;\n }\n transaction.steps.forEach((step) => {\n var _a;\n return (_a = this.capturedTransaction) == null ? void 0 : _a.step(step);\n });\n return;\n }\n const { state, transactions } = this.state.applyTransaction(transaction);\n const selectionHasChanged = !this.state.selection.eq(state.selection);\n const rootTrWasApplied = transactions.includes(transaction);\n const prevState = this.state;\n this.emit(\"beforeTransaction\", {\n editor: this,\n transaction,\n nextState: state\n });\n if (!rootTrWasApplied) {\n return;\n }\n this.view.updateState(state);\n this.emit(\"transaction\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n if (selectionHasChanged) {\n this.emit(\"selectionUpdate\", {\n editor: this,\n transaction\n });\n }\n const mostRecentFocusTr = transactions.findLast((tr) => tr.getMeta(\"focus\") || tr.getMeta(\"blur\"));\n const focus2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"focus\");\n const blur2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"blur\");\n if (focus2) {\n this.emit(\"focus\", {\n editor: this,\n event: focus2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (blur2) {\n this.emit(\"blur\", {\n editor: this,\n event: blur2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (transaction.getMeta(\"preventUpdate\") || !transactions.some((tr) => tr.docChanged) || prevState.doc.eq(state.doc)) {\n return;\n }\n this.emit(\"update\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n }\n /**\n * Get attributes of the currently selected node or mark.\n */\n getAttributes(nameOrType) {\n return getAttributes(this.state, nameOrType);\n }\n isActive(nameOrAttributes, attributesOrUndefined) {\n const name = typeof nameOrAttributes === \"string\" ? nameOrAttributes : null;\n const attributes = typeof nameOrAttributes === \"string\" ? attributesOrUndefined : nameOrAttributes;\n return isActive(this.state, name, attributes);\n }\n /**\n * Get the document as JSON.\n */\n getJSON() {\n return this.state.doc.toJSON();\n }\n /**\n * Get the document as HTML.\n */\n getHTML() {\n return getHTMLFromFragment(this.state.doc.content, this.schema);\n }\n /**\n * Get the document as text.\n */\n getText(options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n return getText(this.state.doc, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(this.schema),\n ...textSerializers\n }\n });\n }\n /**\n * Check if there is no content.\n */\n get isEmpty() {\n return isNodeEmpty(this.state.doc);\n }\n /**\n * Destroy the editor.\n */\n destroy() {\n this.emit(\"destroy\");\n this.unmount();\n this.removeAllListeners();\n }\n /**\n * Check if the editor is already destroyed.\n */\n get isDestroyed() {\n var _a, _b;\n return (_b = (_a = this.editorView) == null ? void 0 : _a.isDestroyed) != null ? _b : true;\n }\n $node(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelector(selector, attributes)) || null;\n }\n $nodes(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n }\n $pos(pos) {\n const $pos = this.state.doc.resolve(pos);\n return new NodePos($pos, this);\n }\n get $doc() {\n return this.$pos(0);\n }\n};\n\n// src/inputRules/markInputRule.ts\nfunction markInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n const markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/nodeInputRule.ts\nfunction nodeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const { tr } = state;\n const start = range.from;\n let end = range.to;\n const newNode = config.type.create(attributes);\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n let matchStart = start + offset;\n if (matchStart > end) {\n matchStart = end;\n } else {\n end = matchStart + match[1].length;\n }\n const lastChar = match[0][match[0].length - 1];\n tr.insertText(lastChar, start + match[0].length - 1);\n tr.replaceWith(matchStart, end, newNode);\n } else if (match[0]) {\n const insertionStart = config.type.isInline ? start : start - 1;\n tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n }\n tr.scrollIntoView();\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textblockTypeInputRule.ts\nfunction textblockTypeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const $start = state.doc.resolve(range.from);\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n return null;\n }\n state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textInputRule.ts\nfunction textInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/wrappingInputRule.ts\nimport { canJoin as canJoin2, findWrapping } from \"@tiptap/pm/transform\";\nfunction wrappingInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match, chain }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const tr = state.tr.delete(range.from, range.to);\n const $start = tr.doc.resolve(range.from);\n const blockRange = $start.blockRange();\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\n if (!wrapping) {\n return null;\n }\n tr.wrap(blockRange, wrapping);\n if (config.keepMarks && config.editor) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = config.editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n }\n if (config.keepAttributes) {\n const nodeType = config.type.name === \"bulletList\" || config.type.name === \"orderedList\" ? \"listItem\" : \"taskList\";\n chain().updateAttributes(nodeType, attributes).run();\n }\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\n if (before && before.type === config.type && canJoin2(tr.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) {\n tr.join(range.from - 1);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/jsx-runtime.ts\nfunction Fragment6(props) {\n return props.children;\n}\nvar h = (tag, attributes) => {\n if (tag === \"slot\") {\n return 0;\n }\n if (tag instanceof Function) {\n return tag(attributes);\n }\n const { children, ...rest } = attributes != null ? attributes : {};\n if (tag === \"svg\") {\n throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");\n }\n return [tag, rest, children];\n};\n\n// src/lib/ResizableNodeView.ts\nvar isTouchEvent = (e) => {\n return \"touches\" in e;\n};\nvar ResizableNodeView = class {\n /**\n * Creates a new ResizableNodeView instance.\n *\n * The constructor sets up the resize handles, applies initial sizing from\n * node attributes, and configures all resize behavior options.\n *\n * @param options - Configuration options for the resizable node view\n */\n constructor(options) {\n /** Active resize handle directions */\n this.directions = [\"bottom-left\", \"bottom-right\", \"top-left\", \"top-right\"];\n /** Minimum allowed dimensions */\n this.minSize = {\n height: 8,\n width: 8\n };\n /** Whether to always preserve aspect ratio */\n this.preserveAspectRatio = false;\n /** CSS class names for elements */\n this.classNames = {\n container: \"\",\n wrapper: \"\",\n handle: \"\",\n resizing: \"\"\n };\n /** Initial width of the element (for aspect ratio calculation) */\n this.initialWidth = 0;\n /** Initial height of the element (for aspect ratio calculation) */\n this.initialHeight = 0;\n /** Calculated aspect ratio (width / height) */\n this.aspectRatio = 1;\n /** Whether a resize operation is currently active */\n this.isResizing = false;\n /** The handle currently being dragged */\n this.activeHandle = null;\n /** Starting mouse X position when resize began */\n this.startX = 0;\n /** Starting mouse Y position when resize began */\n this.startY = 0;\n /** Element width when resize began */\n this.startWidth = 0;\n /** Element height when resize began */\n this.startHeight = 0;\n /** Whether Shift key is currently pressed (for temporary aspect ratio lock) */\n this.isShiftKeyPressed = false;\n /** Last known editable state of the editor */\n this.lastEditableState = void 0;\n /** Map of handle elements by direction */\n this.handleMap = /* @__PURE__ */ new Map();\n /**\n * Handles mouse movement during an active resize.\n *\n * Calculates the delta from the starting position, computes new dimensions\n * based on the active handle direction, applies constraints and aspect ratio,\n * then updates the element's style and calls the onResize callback.\n *\n * @param event - The mouse move event\n */\n this.handleMouseMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const deltaX = event.clientX - this.startX;\n const deltaY = event.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n this.handleTouchMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const deltaX = touch.clientX - this.startX;\n const deltaY = touch.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n /**\n * Completes the resize operation when the mouse button is released.\n *\n * Captures final dimensions, calls the onCommit callback to persist changes,\n * removes the resizing state and class, and cleans up document-level listeners.\n */\n this.handleMouseUp = () => {\n if (!this.isResizing) {\n return;\n }\n const finalWidth = this.element.offsetWidth;\n const finalHeight = this.element.offsetHeight;\n this.onCommit(finalWidth, finalHeight);\n this.isResizing = false;\n this.activeHandle = null;\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n };\n /**\n * Tracks Shift key state to enable temporary aspect ratio locking.\n *\n * When Shift is pressed during resize, aspect ratio is preserved even if\n * preserveAspectRatio is false.\n *\n * @param event - The keyboard event\n */\n this.handleKeyDown = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = true;\n }\n };\n /**\n * Tracks Shift key release to disable temporary aspect ratio locking.\n *\n * @param event - The keyboard event\n */\n this.handleKeyUp = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = false;\n }\n };\n var _a, _b, _c, _d, _e, _f;\n this.node = options.node;\n this.editor = options.editor;\n this.element = options.element;\n this.contentElement = options.contentElement;\n this.getPos = options.getPos;\n this.onResize = options.onResize;\n this.onCommit = options.onCommit;\n this.onUpdate = options.onUpdate;\n if ((_a = options.options) == null ? void 0 : _a.min) {\n this.minSize = {\n ...this.minSize,\n ...options.options.min\n };\n }\n if ((_b = options.options) == null ? void 0 : _b.max) {\n this.maxSize = options.options.max;\n }\n if ((_c = options == null ? void 0 : options.options) == null ? void 0 : _c.directions) {\n this.directions = options.options.directions;\n }\n if ((_d = options.options) == null ? void 0 : _d.preserveAspectRatio) {\n this.preserveAspectRatio = options.options.preserveAspectRatio;\n }\n if ((_e = options.options) == null ? void 0 : _e.className) {\n this.classNames = {\n container: options.options.className.container || \"\",\n wrapper: options.options.className.wrapper || \"\",\n handle: options.options.className.handle || \"\",\n resizing: options.options.className.resizing || \"\"\n };\n }\n if ((_f = options.options) == null ? void 0 : _f.createCustomHandle) {\n this.createCustomHandle = options.options.createCustomHandle;\n }\n this.wrapper = this.createWrapper();\n this.container = this.createContainer();\n this.applyInitialSize();\n this.attachHandles();\n this.editor.on(\"update\", this.handleEditorUpdate.bind(this));\n }\n /**\n * Returns the top-level DOM node that should be placed in the editor.\n *\n * This is required by the ProseMirror NodeView interface. The container\n * includes the wrapper, handles, and the actual content element.\n *\n * @returns The container element to be inserted into the editor\n */\n get dom() {\n return this.container;\n }\n get contentDOM() {\n var _a;\n return (_a = this.contentElement) != null ? _a : null;\n }\n handleEditorUpdate() {\n const isEditable = this.editor.isEditable;\n if (isEditable === this.lastEditableState) {\n return;\n }\n this.lastEditableState = isEditable;\n if (!isEditable) {\n this.removeHandles();\n } else if (isEditable && this.handleMap.size === 0) {\n this.attachHandles();\n }\n }\n /**\n * Called when the node's content or attributes change.\n *\n * Updates the internal node reference. If a custom `onUpdate` callback\n * was provided, it will be called to handle additional update logic.\n *\n * @param node - The new/updated node\n * @param decorations - Node decorations\n * @param innerDecorations - Inner decorations\n * @returns `false` if the node type has changed (requires full rebuild), otherwise the result of `onUpdate` or `true`\n */\n update(node, decorations, innerDecorations) {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n if (this.onUpdate) {\n return this.onUpdate(node, decorations, innerDecorations);\n }\n return true;\n }\n /**\n * Cleanup method called when the node view is being removed.\n *\n * Removes all event listeners to prevent memory leaks. This is required\n * by the ProseMirror NodeView interface. If a resize is active when\n * destroy is called, it will be properly cancelled.\n */\n destroy() {\n if (this.isResizing) {\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n this.isResizing = false;\n this.activeHandle = null;\n }\n this.editor.off(\"update\", this.handleEditorUpdate.bind(this));\n this.container.remove();\n }\n /**\n * Creates the outer container element.\n *\n * The container is the top-level element returned by the NodeView and\n * wraps the entire resizable node. It's set up with flexbox to handle\n * alignment and includes data attributes for styling and identification.\n *\n * @returns The container element\n */\n createContainer() {\n const element = document.createElement(\"div\");\n element.dataset.resizeContainer = \"\";\n element.dataset.node = this.node.type.name;\n element.style.display = \"flex\";\n if (this.classNames.container) {\n element.className = this.classNames.container;\n }\n element.appendChild(this.wrapper);\n return element;\n }\n /**\n * Creates the wrapper element that contains the content and handles.\n *\n * The wrapper uses relative positioning so that resize handles can be\n * positioned absolutely within it. This is the direct parent of the\n * content element being made resizable.\n *\n * @returns The wrapper element\n */\n createWrapper() {\n const element = document.createElement(\"div\");\n element.style.position = \"relative\";\n element.style.display = \"block\";\n element.dataset.resizeWrapper = \"\";\n if (this.classNames.wrapper) {\n element.className = this.classNames.wrapper;\n }\n element.appendChild(this.element);\n return element;\n }\n /**\n * Creates a resize handle element for a specific direction.\n *\n * Each handle is absolutely positioned and includes a data attribute\n * identifying its direction for styling purposes.\n *\n * @param direction - The resize direction for this handle\n * @returns The handle element\n */\n createHandle(direction) {\n const handle = document.createElement(\"div\");\n handle.dataset.resizeHandle = direction;\n handle.style.position = \"absolute\";\n if (this.classNames.handle) {\n handle.className = this.classNames.handle;\n }\n return handle;\n }\n /**\n * Positions a handle element according to its direction.\n *\n * Corner handles (e.g., 'top-left') are positioned at the intersection\n * of two edges. Edge handles (e.g., 'top') span the full width or height.\n *\n * @param handle - The handle element to position\n * @param direction - The direction determining the position\n */\n positionHandle(handle, direction) {\n const isTop = direction.includes(\"top\");\n const isBottom = direction.includes(\"bottom\");\n const isLeft = direction.includes(\"left\");\n const isRight = direction.includes(\"right\");\n if (isTop) {\n handle.style.top = \"0\";\n }\n if (isBottom) {\n handle.style.bottom = \"0\";\n }\n if (isLeft) {\n handle.style.left = \"0\";\n }\n if (isRight) {\n handle.style.right = \"0\";\n }\n if (direction === \"top\" || direction === \"bottom\") {\n handle.style.left = \"0\";\n handle.style.right = \"0\";\n }\n if (direction === \"left\" || direction === \"right\") {\n handle.style.top = \"0\";\n handle.style.bottom = \"0\";\n }\n }\n /**\n * Creates and attaches all resize handles to the wrapper.\n *\n * Iterates through the configured directions, creates a handle for each,\n * positions it, attaches the mousedown listener, and appends it to the DOM.\n */\n attachHandles() {\n this.directions.forEach((direction) => {\n let handle;\n if (this.createCustomHandle) {\n handle = this.createCustomHandle(direction);\n } else {\n handle = this.createHandle(direction);\n }\n if (!(handle instanceof HTMLElement)) {\n console.warn(\n `[ResizableNodeView] createCustomHandle(\"${direction}\") did not return an HTMLElement. Falling back to default handle.`\n );\n handle = this.createHandle(direction);\n }\n if (!this.createCustomHandle) {\n this.positionHandle(handle, direction);\n }\n handle.addEventListener(\"mousedown\", (event) => this.handleResizeStart(event, direction));\n handle.addEventListener(\"touchstart\", (event) => this.handleResizeStart(event, direction));\n this.handleMap.set(direction, handle);\n this.wrapper.appendChild(handle);\n });\n }\n /**\n * Removes all resize handles from the wrapper.\n *\n * Cleans up the handle map and removes each handle element from the DOM.\n */\n removeHandles() {\n this.handleMap.forEach((el) => el.remove());\n this.handleMap.clear();\n }\n /**\n * Applies initial sizing from node attributes to the element.\n *\n * If width/height attributes exist on the node, they're applied to the element.\n * Otherwise, the element's natural/current dimensions are measured. The aspect\n * ratio is calculated for later use in aspect-ratio-preserving resizes.\n */\n applyInitialSize() {\n const width = this.node.attrs.width;\n const height = this.node.attrs.height;\n if (width) {\n this.element.style.width = `${width}px`;\n this.initialWidth = width;\n } else {\n this.initialWidth = this.element.offsetWidth;\n }\n if (height) {\n this.element.style.height = `${height}px`;\n this.initialHeight = height;\n } else {\n this.initialHeight = this.element.offsetHeight;\n }\n if (this.initialWidth > 0 && this.initialHeight > 0) {\n this.aspectRatio = this.initialWidth / this.initialHeight;\n }\n }\n /**\n * Initiates a resize operation when a handle is clicked.\n *\n * Captures the starting mouse position and element dimensions, sets up\n * the resize state, adds the resizing class and state attribute, and\n * attaches document-level listeners for mouse movement and keyboard input.\n *\n * @param event - The mouse down event\n * @param direction - The direction of the handle being dragged\n */\n handleResizeStart(event, direction) {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.activeHandle = direction;\n if (isTouchEvent(event)) {\n this.startX = event.touches[0].clientX;\n this.startY = event.touches[0].clientY;\n } else {\n this.startX = event.clientX;\n this.startY = event.clientY;\n }\n this.startWidth = this.element.offsetWidth;\n this.startHeight = this.element.offsetHeight;\n if (this.startWidth > 0 && this.startHeight > 0) {\n this.aspectRatio = this.startWidth / this.startHeight;\n }\n const pos = this.getPos();\n if (pos !== void 0) {\n }\n this.container.dataset.resizeState = \"true\";\n if (this.classNames.resizing) {\n this.container.classList.add(this.classNames.resizing);\n }\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"touchmove\", this.handleTouchMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n document.addEventListener(\"keydown\", this.handleKeyDown);\n document.addEventListener(\"keyup\", this.handleKeyUp);\n }\n handleResize(deltaX, deltaY) {\n if (!this.activeHandle) {\n return;\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n const { width, height } = this.calculateNewDimensions(this.activeHandle, deltaX, deltaY);\n const constrained = this.applyConstraints(width, height, shouldPreserveAspectRatio);\n this.element.style.width = `${constrained.width}px`;\n this.element.style.height = `${constrained.height}px`;\n if (this.onResize) {\n this.onResize(constrained.width, constrained.height);\n }\n }\n /**\n * Calculates new dimensions based on mouse delta and resize direction.\n *\n * Takes the starting dimensions and applies the mouse movement delta\n * according to the handle direction. For corner handles, both dimensions\n * are affected. For edge handles, only one dimension changes. If aspect\n * ratio should be preserved, delegates to applyAspectRatio.\n *\n * @param direction - The active resize handle direction\n * @param deltaX - Horizontal mouse movement since resize start\n * @param deltaY - Vertical mouse movement since resize start\n * @returns The calculated width and height\n */\n calculateNewDimensions(direction, deltaX, deltaY) {\n let newWidth = this.startWidth;\n let newHeight = this.startHeight;\n const isRight = direction.includes(\"right\");\n const isLeft = direction.includes(\"left\");\n const isBottom = direction.includes(\"bottom\");\n const isTop = direction.includes(\"top\");\n if (isRight) {\n newWidth = this.startWidth + deltaX;\n } else if (isLeft) {\n newWidth = this.startWidth - deltaX;\n }\n if (isBottom) {\n newHeight = this.startHeight + deltaY;\n } else if (isTop) {\n newHeight = this.startHeight - deltaY;\n }\n if (direction === \"right\" || direction === \"left\") {\n newWidth = this.startWidth + (isRight ? deltaX : -deltaX);\n }\n if (direction === \"top\" || direction === \"bottom\") {\n newHeight = this.startHeight + (isBottom ? deltaY : -deltaY);\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n if (shouldPreserveAspectRatio) {\n return this.applyAspectRatio(newWidth, newHeight, direction);\n }\n return { width: newWidth, height: newHeight };\n }\n /**\n * Applies min/max constraints to dimensions.\n *\n * When aspect ratio is NOT preserved, constraints are applied independently\n * to width and height. When aspect ratio IS preserved, constraints are\n * applied while maintaining the aspect ratio—if one dimension hits a limit,\n * the other is recalculated proportionally.\n *\n * This ensures that aspect ratio is never broken when constrained.\n *\n * @param width - The unconstrained width\n * @param height - The unconstrained height\n * @param preserveAspectRatio - Whether to maintain aspect ratio while constraining\n * @returns The constrained dimensions\n */\n applyConstraints(width, height, preserveAspectRatio) {\n var _a, _b, _c, _d;\n if (!preserveAspectRatio) {\n let constrainedWidth2 = Math.max(this.minSize.width, width);\n let constrainedHeight2 = Math.max(this.minSize.height, height);\n if ((_a = this.maxSize) == null ? void 0 : _a.width) {\n constrainedWidth2 = Math.min(this.maxSize.width, constrainedWidth2);\n }\n if ((_b = this.maxSize) == null ? void 0 : _b.height) {\n constrainedHeight2 = Math.min(this.maxSize.height, constrainedHeight2);\n }\n return { width: constrainedWidth2, height: constrainedHeight2 };\n }\n let constrainedWidth = width;\n let constrainedHeight = height;\n if (constrainedWidth < this.minSize.width) {\n constrainedWidth = this.minSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (constrainedHeight < this.minSize.height) {\n constrainedHeight = this.minSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n if (((_c = this.maxSize) == null ? void 0 : _c.width) && constrainedWidth > this.maxSize.width) {\n constrainedWidth = this.maxSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (((_d = this.maxSize) == null ? void 0 : _d.height) && constrainedHeight > this.maxSize.height) {\n constrainedHeight = this.maxSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n return { width: constrainedWidth, height: constrainedHeight };\n }\n /**\n * Adjusts dimensions to maintain the original aspect ratio.\n *\n * For horizontal handles (left/right), uses width as the primary dimension\n * and calculates height from it. For vertical handles (top/bottom), uses\n * height as primary and calculates width. For corner handles, uses width\n * as the primary dimension.\n *\n * @param width - The new width\n * @param height - The new height\n * @param direction - The active resize direction\n * @returns Dimensions adjusted to preserve aspect ratio\n */\n applyAspectRatio(width, height, direction) {\n const isHorizontal = direction === \"left\" || direction === \"right\";\n const isVertical = direction === \"top\" || direction === \"bottom\";\n if (isHorizontal) {\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n if (isVertical) {\n return {\n width: height * this.aspectRatio,\n height\n };\n }\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n};\nvar ResizableNodeview = ResizableNodeView;\n\n// src/utilities/canInsertNode.ts\nimport { NodeSelection as NodeSelection4 } from \"@tiptap/pm/state\";\nfunction canInsertNode(state, nodeType) {\n const { selection } = state;\n const { $from } = selection;\n if (selection instanceof NodeSelection4) {\n const index = $from.index();\n const parent = $from.parent;\n return parent.canReplaceWith(index, index + 1, nodeType);\n }\n let depth = $from.depth;\n while (depth >= 0) {\n const index = $from.index(depth);\n const parent = $from.node(depth);\n const match = parent.contentMatchAt(index);\n if (match.matchType(nodeType)) {\n return true;\n }\n depth -= 1;\n }\n return false;\n}\n\n// src/utilities/escapeForRegEx.ts\nfunction escapeForRegEx(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\n// src/utilities/isFirefox.ts\nfunction isFirefox() {\n return typeof navigator !== \"undefined\" ? /Firefox/.test(navigator.userAgent) : false;\n}\n\n// src/utilities/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/utilities/markdown/index.ts\nvar markdown_exports = {};\n__export(markdown_exports, {\n createAtomBlockMarkdownSpec: () => createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec: () => createBlockMarkdownSpec,\n createInlineMarkdownSpec: () => createInlineMarkdownSpec,\n parseAttributes: () => parseAttributes,\n parseIndentedBlocks: () => parseIndentedBlocks,\n renderNestedMarkdownContent: () => renderNestedMarkdownContent,\n serializeAttributes: () => serializeAttributes\n});\n\n// src/utilities/markdown/attributeUtils.ts\nfunction parseAttributes(attrString) {\n if (!(attrString == null ? void 0 : attrString.trim())) {\n return {};\n }\n const attributes = {};\n const quotedStrings = [];\n const tempString = attrString.replace(/[\"']([^\"']*)[\"']/g, (match) => {\n quotedStrings.push(match);\n return `__QUOTED_${quotedStrings.length - 1}__`;\n });\n const classMatches = tempString.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g);\n if (classMatches) {\n const classes = classMatches.map((match) => match.trim().slice(1));\n attributes.class = classes.join(\" \");\n }\n const idMatch = tempString.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/);\n if (idMatch) {\n attributes.id = idMatch[1];\n }\n const kvRegex = /([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g;\n const kvMatches = Array.from(tempString.matchAll(kvRegex));\n kvMatches.forEach(([, key, quotedRef]) => {\n var _a;\n const quotedIndex = parseInt(((_a = quotedRef.match(/__QUOTED_(\\d+)__/)) == null ? void 0 : _a[1]) || \"0\", 10);\n const quotedValue = quotedStrings[quotedIndex];\n if (quotedValue) {\n attributes[key] = quotedValue.slice(1, -1);\n }\n });\n const cleanString = tempString.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();\n if (cleanString) {\n const booleanAttrs = cleanString.split(/\\s+/).filter(Boolean);\n booleanAttrs.forEach((attr) => {\n if (attr.match(/^[a-zA-Z][\\w-]*$/)) {\n attributes[attr] = true;\n }\n });\n }\n return attributes;\n}\nfunction serializeAttributes(attributes) {\n if (!attributes || Object.keys(attributes).length === 0) {\n return \"\";\n }\n const parts = [];\n if (attributes.class) {\n const classes = String(attributes.class).split(/\\s+/).filter(Boolean);\n classes.forEach((cls) => parts.push(`.${cls}`));\n }\n if (attributes.id) {\n parts.push(`#${attributes.id}`);\n }\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"class\" || key === \"id\") {\n return;\n }\n if (value === true) {\n parts.push(key);\n } else if (value !== false && value != null) {\n parts.push(`${key}=\"${String(value)}\"`);\n }\n });\n return parts.join(\" \");\n}\n\n// src/utilities/markdown/createAtomBlockMarkdownSpec.ts\nfunction createAtomBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n requiredAttributes = [],\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}(?:\\\\s|$)`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const regex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`);\n const match = src.match(regex);\n if (!match) {\n return void 0;\n }\n const attrString = match[1] || \"\";\n const attributes = parseAttributes2(attrString);\n const missingRequired = requiredAttributes.find((required) => !(required in attributes));\n if (missingRequired) {\n return void 0;\n }\n return {\n type: nodeName,\n raw: match[0],\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n return `:::${blockName}${attrString} :::`;\n }\n };\n}\n\n// src/utilities/markdown/createBlockMarkdownSpec.ts\nfunction createBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n getContent,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n content = \"block\",\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n let nodeContent;\n if (getContent) {\n const contentResult = getContent(token);\n nodeContent = typeof contentResult === \"string\" ? [{ type: \"text\", text: contentResult }] : contentResult;\n } else if (content === \"block\") {\n nodeContent = h2.parseChildren(token.tokens || []);\n } else {\n nodeContent = h2.parseInline(token.tokens || []);\n }\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, nodeContent);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, lexer) {\n var _a;\n const openingRegex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`);\n const openingMatch = src.match(openingRegex);\n if (!openingMatch) {\n return void 0;\n }\n const [openingTag, attrString = \"\"] = openingMatch;\n const attributes = parseAttributes2(attrString);\n let level = 1;\n const position = openingTag.length;\n let matchedContent = \"\";\n const blockPattern = /^:::([\\w-]*)(\\s.*)?/gm;\n const remaining = src.slice(position);\n blockPattern.lastIndex = 0;\n for (; ; ) {\n const match = blockPattern.exec(remaining);\n if (match === null) {\n break;\n }\n const matchPos = match.index;\n const blockType = match[1];\n if ((_a = match[2]) == null ? void 0 : _a.endsWith(\":::\")) {\n continue;\n }\n if (blockType) {\n level += 1;\n } else {\n level -= 1;\n if (level === 0) {\n const rawContent = remaining.slice(0, matchPos);\n matchedContent = rawContent.trim();\n const fullMatch = src.slice(0, position + matchPos + match[0].length);\n let contentTokens = [];\n if (matchedContent) {\n if (content === \"block\") {\n contentTokens = lexer.blockTokens(rawContent);\n contentTokens.forEach((token) => {\n if (token.text && (!token.tokens || token.tokens.length === 0)) {\n token.tokens = lexer.inlineTokens(token.text);\n }\n });\n while (contentTokens.length > 0) {\n const lastToken = contentTokens[contentTokens.length - 1];\n if (lastToken.type === \"paragraph\" && (!lastToken.text || lastToken.text.trim() === \"\")) {\n contentTokens.pop();\n } else {\n break;\n }\n }\n } else {\n contentTokens = lexer.inlineTokens(matchedContent);\n }\n }\n return {\n type: nodeName,\n raw: fullMatch,\n attributes,\n content: matchedContent,\n tokens: contentTokens\n };\n }\n }\n }\n return void 0;\n }\n },\n renderMarkdown: (node, h2) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n const renderedContent = h2.renderChildren(node.content || [], \"\\n\\n\");\n return `:::${blockName}${attrString}\n\n${renderedContent}\n\n:::`;\n }\n };\n}\n\n// src/utilities/markdown/createInlineMarkdownSpec.ts\nfunction parseShortcodeAttributes(attrString) {\n if (!attrString.trim()) {\n return {};\n }\n const attributes = {};\n const regex = /(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g;\n let match = regex.exec(attrString);\n while (match !== null) {\n const [, key, doubleQuoted, singleQuoted] = match;\n attributes[key] = doubleQuoted || singleQuoted;\n match = regex.exec(attrString);\n }\n return attributes;\n}\nfunction serializeShortcodeAttributes(attrs) {\n return Object.entries(attrs).filter(([, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}=\"${value}\"`).join(\" \");\n}\nfunction createInlineMarkdownSpec(options) {\n const {\n nodeName,\n name: shortcodeName,\n getContent,\n parseAttributes: parseAttributes2 = parseShortcodeAttributes,\n serializeAttributes: serializeAttributes2 = serializeShortcodeAttributes,\n defaultAttributes = {},\n selfClosing = false,\n allowedAttributes\n } = options;\n const shortcode = shortcodeName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((attr) => {\n const attrName = typeof attr === \"string\" ? attr : attr.name;\n const skipIfDefault = typeof attr === \"string\" ? void 0 : attr.skipIfDefault;\n if (attrName in attrs) {\n const value = attrs[attrName];\n if (skipIfDefault !== void 0 && value === skipIfDefault) {\n return;\n }\n filtered[attrName] = value;\n }\n });\n return filtered;\n };\n const escapedShortcode = shortcode.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n if (selfClosing) {\n return h2.createNode(nodeName, attrs);\n }\n const content = getContent ? getContent(token) : token.content || \"\";\n if (content) {\n return h2.createNode(nodeName, attrs, [h2.createTextNode(content)]);\n }\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"inline\",\n start(src) {\n const startPattern = selfClosing ? new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\]`) : new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(startPattern);\n const index = match == null ? void 0 : match.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const tokenPattern = selfClosing ? new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]`) : new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(tokenPattern);\n if (!match) {\n return void 0;\n }\n let content = \"\";\n let attrString = \"\";\n if (selfClosing) {\n const [, attrs] = match;\n attrString = attrs;\n } else {\n const [, attrs, contentMatch] = match;\n attrString = attrs;\n content = contentMatch || \"\";\n }\n const attributes = parseAttributes2(attrString.trim());\n return {\n type: nodeName,\n raw: match[0],\n content: content.trim(),\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n let content = \"\";\n if (getContent) {\n content = getContent(node);\n } else if (node.content && node.content.length > 0) {\n content = node.content.filter((child) => child.type === \"text\").map((child) => child.text).join(\"\");\n }\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` ${attrs}` : \"\";\n if (selfClosing) {\n return `[${shortcode}${attrString}]`;\n }\n return `[${shortcode}${attrString}]${content}[/${shortcode}]`;\n }\n };\n}\n\n// src/utilities/markdown/parseIndentedBlocks.ts\nfunction parseIndentedBlocks(src, config, lexer) {\n var _a, _b, _c, _d;\n const lines = src.split(\"\\n\");\n const items = [];\n let totalRaw = \"\";\n let i = 0;\n const baseIndentSize = config.baseIndentSize || 2;\n while (i < lines.length) {\n const currentLine = lines[i];\n const itemMatch = currentLine.match(config.itemPattern);\n if (!itemMatch) {\n if (items.length > 0) {\n break;\n } else if (currentLine.trim() === \"\") {\n i += 1;\n totalRaw = `${totalRaw}${currentLine}\n`;\n continue;\n } else {\n return void 0;\n }\n }\n const itemData = config.extractItemData(itemMatch);\n const { indentLevel, mainContent } = itemData;\n totalRaw = `${totalRaw}${currentLine}\n`;\n const itemContent = [mainContent];\n i += 1;\n while (i < lines.length) {\n const nextLine = lines[i];\n if (nextLine.trim() === \"\") {\n const nextNonEmptyIndex = lines.slice(i + 1).findIndex((l) => l.trim() !== \"\");\n if (nextNonEmptyIndex === -1) {\n break;\n }\n const nextNonEmpty = lines[i + 1 + nextNonEmptyIndex];\n const nextIndent2 = ((_b = (_a = nextNonEmpty.match(/^(\\s*)/)) == null ? void 0 : _a[1]) == null ? void 0 : _b.length) || 0;\n if (nextIndent2 > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n continue;\n } else {\n break;\n }\n }\n const nextIndent = ((_d = (_c = nextLine.match(/^(\\s*)/)) == null ? void 0 : _c[1]) == null ? void 0 : _d.length) || 0;\n if (nextIndent > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n } else {\n break;\n }\n }\n let nestedTokens;\n const nestedContent = itemContent.slice(1);\n if (nestedContent.length > 0) {\n const dedentedNested = nestedContent.map((nestedLine) => nestedLine.slice(indentLevel + baseIndentSize)).join(\"\\n\");\n if (dedentedNested.trim()) {\n if (config.customNestedParser) {\n nestedTokens = config.customNestedParser(dedentedNested);\n } else {\n nestedTokens = lexer.blockTokens(dedentedNested);\n }\n }\n }\n const token = config.createToken(itemData, nestedTokens);\n items.push(token);\n }\n if (items.length === 0) {\n return void 0;\n }\n return {\n items,\n raw: totalRaw\n };\n}\n\n// src/utilities/markdown/renderNestedMarkdownContent.ts\nfunction renderNestedMarkdownContent(node, h2, prefixOrGenerator, ctx) {\n if (!node || !Array.isArray(node.content)) {\n return \"\";\n }\n const prefix = typeof prefixOrGenerator === \"function\" ? prefixOrGenerator(ctx) : prefixOrGenerator;\n const [content, ...children] = node.content;\n const mainContent = h2.renderChildren([content]);\n const output = [`${prefix}${mainContent}`];\n if (children && children.length > 0) {\n children.forEach((child) => {\n const childContent = h2.renderChildren([child]);\n if (childContent) {\n const indentedChild = childContent.split(\"\\n\").map((line) => line ? h2.indent(line) : \"\").join(\"\\n\");\n output.push(indentedChild);\n }\n });\n }\n return output.join(\"\\n\");\n}\n\n// src/MarkView.ts\nfunction updateMarkViewAttributes(checkMark, editor, attrs = {}) {\n const { state } = editor;\n const { doc, tr } = state;\n const thisMark = checkMark;\n doc.descendants((node, pos) => {\n const from = tr.mapping.map(pos);\n const to = tr.mapping.map(pos) + node.nodeSize;\n let foundMark = null;\n node.marks.forEach((mark) => {\n if (mark !== thisMark) {\n return false;\n }\n foundMark = mark;\n });\n if (!foundMark) {\n return;\n }\n let needsUpdate = false;\n Object.keys(attrs).forEach((k) => {\n if (attrs[k] !== foundMark.attrs[k]) {\n needsUpdate = true;\n }\n });\n if (needsUpdate) {\n const updatedMark = checkMark.type.create({\n ...checkMark.attrs,\n ...attrs\n });\n tr.removeMark(from, to, checkMark.type);\n tr.addMark(from, to, updatedMark);\n }\n });\n if (tr.docChanged) {\n editor.view.dispatch(tr);\n }\n}\nvar MarkView = class {\n constructor(component, props, options) {\n this.component = component;\n this.editor = props.editor;\n this.options = { ...options };\n this.mark = props.mark;\n this.HTMLAttributes = props.HTMLAttributes;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n /**\n * Update the attributes of the mark in the document.\n * @param attrs The attributes to update.\n */\n updateAttributes(attrs, checkMark) {\n updateMarkViewAttributes(checkMark || this.mark, this.editor, attrs);\n }\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n};\n\n// src/Node.ts\nvar Node3 = class _Node extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"node\";\n }\n /**\n * Create a new Node instance\n * @param config - Node configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Node(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/NodeView.ts\nimport { NodeSelection as NodeSelection5 } from \"@tiptap/pm/state\";\nvar NodeView = class {\n constructor(component, props, options) {\n this.isDragging = false;\n this.component = component;\n this.editor = props.editor;\n this.options = {\n stopEvent: null,\n ignoreMutation: null,\n ...options\n };\n this.extension = props.extension;\n this.node = props.node;\n this.decorations = props.decorations;\n this.innerDecorations = props.innerDecorations;\n this.view = props.view;\n this.HTMLAttributes = props.HTMLAttributes;\n this.getPos = props.getPos;\n this.mount();\n }\n mount() {\n return;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n onDragStart(event) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { view } = this.editor;\n const target = event.target;\n const dragHandle = target.nodeType === 3 ? (_a = target.parentElement) == null ? void 0 : _a.closest(\"[data-drag-handle]\") : target.closest(\"[data-drag-handle]\");\n if (!this.dom || ((_b = this.contentDOM) == null ? void 0 : _b.contains(target)) || !dragHandle) {\n return;\n }\n let x = 0;\n let y = 0;\n if (this.dom !== dragHandle) {\n const domBox = this.dom.getBoundingClientRect();\n const handleBox = dragHandle.getBoundingClientRect();\n const offsetX = (_d = event.offsetX) != null ? _d : (_c = event.nativeEvent) == null ? void 0 : _c.offsetX;\n const offsetY = (_f = event.offsetY) != null ? _f : (_e = event.nativeEvent) == null ? void 0 : _e.offsetY;\n x = handleBox.x - domBox.x + offsetX;\n y = handleBox.y - domBox.y + offsetY;\n }\n const clonedNode = this.dom.cloneNode(true);\n try {\n const domBox = this.dom.getBoundingClientRect();\n clonedNode.style.width = `${Math.round(domBox.width)}px`;\n clonedNode.style.height = `${Math.round(domBox.height)}px`;\n clonedNode.style.boxSizing = \"border-box\";\n clonedNode.style.pointerEvents = \"none\";\n } catch {\n }\n let dragImageWrapper = null;\n try {\n dragImageWrapper = document.createElement(\"div\");\n dragImageWrapper.style.position = \"absolute\";\n dragImageWrapper.style.top = \"-9999px\";\n dragImageWrapper.style.left = \"-9999px\";\n dragImageWrapper.style.pointerEvents = \"none\";\n dragImageWrapper.appendChild(clonedNode);\n document.body.appendChild(dragImageWrapper);\n (_g = event.dataTransfer) == null ? void 0 : _g.setDragImage(clonedNode, x, y);\n } finally {\n if (dragImageWrapper) {\n setTimeout(() => {\n try {\n dragImageWrapper == null ? void 0 : dragImageWrapper.remove();\n } catch {\n }\n }, 0);\n }\n }\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return;\n }\n const selection = NodeSelection5.create(view.state.doc, pos);\n const transaction = view.state.tr.setSelection(selection);\n view.dispatch(transaction);\n }\n stopEvent(event) {\n var _a;\n if (!this.dom) {\n return false;\n }\n if (typeof this.options.stopEvent === \"function\") {\n return this.options.stopEvent({ event });\n }\n const target = event.target;\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) == null ? void 0 : _a.contains(target));\n if (!isInElement) {\n return false;\n }\n const isDragEvent = event.type.startsWith(\"drag\");\n const isDropEvent = event.type === \"drop\";\n const isInput = [\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(target.tagName) || target.isContentEditable;\n if (isInput && !isDropEvent && !isDragEvent) {\n return true;\n }\n const { isEditable } = this.editor;\n const { isDragging } = this;\n const isDraggable = !!this.node.type.spec.draggable;\n const isSelectable = NodeSelection5.isSelectable(this.node);\n const isCopyEvent = event.type === \"copy\";\n const isPasteEvent = event.type === \"paste\";\n const isCutEvent = event.type === \"cut\";\n const isClickEvent = event.type === \"mousedown\";\n if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {\n event.preventDefault();\n }\n if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {\n event.preventDefault();\n return false;\n }\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\n const dragHandle = target.closest(\"[data-drag-handle]\");\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n if (isValidDragHandle) {\n this.isDragging = true;\n document.addEventListener(\n \"dragend\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"drop\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"mouseup\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n }\n }\n if (isDragging || isDropEvent || isCopyEvent || isPasteEvent || isCutEvent || isClickEvent && isSelectable) {\n return false;\n }\n return true;\n }\n /**\n * Called when a DOM [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) or a selection change happens within the view.\n * @return `false` if the editor should re-read the selection or re-parse the range around the mutation\n * @return `true` if it can safely be ignored.\n */\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n /**\n * Update the attributes of the prosemirror node.\n */\n updateAttributes(attributes) {\n this.editor.commands.command(({ tr }) => {\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return false;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n return true;\n });\n }\n /**\n * Delete the node.\n */\n deleteNode() {\n const from = this.getPos();\n if (typeof from !== \"number\") {\n return;\n }\n const to = from + this.node.nodeSize;\n this.editor.commands.deleteRange({ from, to });\n }\n};\n\n// src/pasteRules/markPasteRule.ts\nfunction markPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match, pasteEvent }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n let markEnd = range.to;\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n }\n });\n}\n\n// src/pasteRules/nodePasteRule.ts\nfunction nodePasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler({ match, chain, range, pasteEvent }) {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n const content = callOrReturn(config.getContent, void 0, attributes);\n if (attributes === false || attributes === null) {\n return null;\n }\n const node = { type: config.type.name, attrs: attributes };\n if (content) {\n node.content = content;\n }\n if (match.input) {\n chain().deleteRange(range).insertContentAt(range.from, node);\n }\n }\n });\n}\n\n// src/pasteRules/textPasteRule.ts\nfunction textPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n }\n });\n}\n\n// src/Tracker.ts\nvar Tracker = class {\n constructor(transaction) {\n this.transaction = transaction;\n this.currentStep = this.transaction.steps.length;\n }\n map(position) {\n let deleted = false;\n const mappedPosition = this.transaction.steps.slice(this.currentStep).reduce((newPosition, step) => {\n const mapResult = step.getMap().mapResult(newPosition);\n if (mapResult.deleted) {\n deleted = true;\n }\n return mapResult.pos;\n }, position);\n return {\n position: mappedPosition,\n deleted\n };\n }\n};\nexport {\n CommandManager,\n Editor,\n Extendable,\n Extension,\n Fragment6 as Fragment,\n InputRule,\n MappablePosition,\n Mark,\n MarkView,\n Node3 as Node,\n NodePos,\n NodeView,\n PasteRule,\n ResizableNodeView,\n ResizableNodeview,\n Tracker,\n callOrReturn,\n canInsertNode,\n combineTransactionSteps,\n commands_exports as commands,\n createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec,\n createChainableState,\n createDocument,\n h as createElement,\n createInlineMarkdownSpec,\n createMappablePosition,\n createNodeFromContent,\n createStyleTag,\n defaultBlockAt,\n deleteProps,\n elementFromString,\n escapeForRegEx,\n extensions_exports as extensions,\n findChildren,\n findChildrenInRange,\n findDuplicates,\n findParentNode,\n findParentNodeClosestToPos,\n flattenExtensions,\n fromString,\n generateHTML,\n generateJSON,\n generateText,\n getAttributes,\n getAttributesFromExtensions,\n getChangedRanges,\n getDebugJSON,\n getExtensionField,\n getHTMLFromFragment,\n getMarkAttributes,\n getMarkRange,\n getMarkType,\n getMarksBetween,\n getNodeAtPosition,\n getNodeAttributes,\n getNodeType,\n getRenderedAttributes,\n getSchema,\n getSchemaByResolvedExtensions,\n getSchemaTypeByName,\n getSchemaTypeNameByName,\n getSplittedAttributes,\n getText,\n getTextBetween,\n getTextContentFromNodes,\n getTextSerializersFromSchema,\n getUpdatedPosition,\n h,\n injectExtensionAttributesToParseRule,\n inputRulesPlugin,\n isActive,\n isAndroid,\n isAtEndOfNode,\n isAtStartOfNode,\n isEmptyObject,\n isExtensionRulesEnabled,\n isFirefox,\n isFunction,\n isList,\n isMacOS,\n isMarkActive,\n isNodeActive,\n isNodeEmpty,\n isNodeSelection,\n isNumber,\n isPlainObject,\n isRegExp,\n isSafari,\n isString,\n isTextSelection,\n isiOS,\n markInputRule,\n markPasteRule,\n markdown_exports as markdown,\n mergeAttributes,\n mergeDeep,\n minMax,\n nodeInputRule,\n nodePasteRule,\n objectIncludes,\n parseAttributes,\n parseIndentedBlocks,\n pasteRulesPlugin,\n posToDOMRect,\n removeDuplicates,\n renderNestedMarkdownContent,\n resolveExtensions,\n resolveFocusPosition,\n rewriteUnknownContent,\n selectionToInsertionEnd,\n serializeAttributes,\n sortExtensions,\n splitExtensions,\n textInputRule,\n textPasteRule,\n textblockTypeInputRule,\n updateMarkViewAttributes,\n wrappingInputRule\n};\n//# sourceMappingURL=index.js.map","// src/heading.ts\nimport { mergeAttributes, Node, textblockTypeInputRule } from \"@tiptap/core\";\nvar Heading = Node.create({\n name: \"heading\",\n addOptions() {\n return {\n levels: [1, 2, 3, 4, 5, 6],\n HTMLAttributes: {}\n };\n },\n content: \"inline*\",\n group: \"block\",\n defining: true,\n addAttributes() {\n return {\n level: {\n default: 1,\n rendered: false\n }\n };\n },\n parseHTML() {\n return this.options.levels.map((level) => ({\n tag: `h${level}`,\n attrs: { level }\n }));\n },\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level);\n const level = hasLevel ? node.attrs.level : this.options.levels[0];\n return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n parseMarkdown: (token, helpers) => {\n return helpers.createNode(\"heading\", { level: token.depth || 1 }, helpers.parseInline(token.tokens || []));\n },\n renderMarkdown: (node, h) => {\n var _a;\n const level = ((_a = node.attrs) == null ? void 0 : _a.level) ? parseInt(node.attrs.level, 10) : 1;\n const headingChars = \"#\".repeat(level);\n if (!node.content) {\n return \"\";\n }\n return `${headingChars} ${h.renderChildren(node.content)}`;\n },\n addCommands() {\n return {\n setHeading: (attributes) => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.setNode(this.name, attributes);\n },\n toggleHeading: (attributes) => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.toggleNode(this.name, \"paragraph\", attributes);\n }\n };\n },\n addKeyboardShortcuts() {\n return this.options.levels.reduce(\n (items, level) => ({\n ...items,\n ...{\n [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level })\n }\n }),\n {}\n );\n },\n addInputRules() {\n return this.options.levels.map((level) => {\n return textblockTypeInputRule({\n find: new RegExp(`^(#{${Math.min(...this.options.levels)},${level}})\\\\s$`),\n type: this.type,\n getAttributes: {\n level\n }\n });\n });\n }\n});\n\n// src/index.ts\nvar index_default = Heading;\nexport {\n Heading,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","import { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport Heading from '@tiptap/extension-heading';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\n\n// Extend Heading to add 'tag' attribute for semantic HTML tag choice for SEO purposes\nexport const HeadingWithSEOTag = Heading.extend({\n addAttributes() {\n return {\n ...(this as any).parent?.(), // must cast to any to avoid TS error\n tag: { default: null },\n };\n },\n}).configure({ levels: [1, 2, 3, 4] });\n\nexport function useHeading(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n headingLevel: ctx.editor.getAttributes('heading').level as number | undefined,\n headingTag: ctx.editor.getAttributes('heading').tag as string | undefined,\n isParagraph: ctx.editor.isActive('paragraph') ?? false,\n };\n },\n });\n\n const onChangeHeading = (value: string) => {\n if (!editor) return;\n editor.chain().focus();\n\n if (value === 'p') {\n editor.chain().focus().setParagraph().run();\n return;\n }\n\n const level = Number(value[1]) as 1 | 2 | 3 | 4; // value format: h1, h2, h3, h4\n editor.chain().focus().setHeading({ level }).run();\n\n // automatically set the 'tag' attribute to match the heading level if not already set\n if (!editorState.headingTag) {\n editor\n .chain()\n .focus()\n .updateAttributes('heading', { tag: `h${level}` })\n .run();\n }\n };\n\n const onChangeHeadingTag = (value: string) => {\n if (!editor) return;\n if (!editorState.headingLevel) return;\n editor.chain().focus().updateAttributes('heading', { tag: value }).run();\n };\n\n return {\n headingSelect: (\n <SingleSelect\n placeholder=\"Style\"\n aria-label=\"Text style\"\n value={editorState.headingLevel ? `h${editorState.headingLevel}` : 'p'}\n onChange={(v: string | undefined) => v && onChangeHeading(v)}\n disabled={!editor || props.disabled}\n size=\"S\"\n >\n <SingleSelectOption value=\"p\">Paragraph</SingleSelectOption>\n <SingleSelectOption value=\"h1\">Heading 1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">Heading 2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">Heading 3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">Heading 4</SingleSelectOption>\n </SingleSelect>\n ),\n headingTagSelect: (\n <SingleSelect\n placeholder=\"SEO Tag\"\n aria-label=\"Heading's HTML tag for SEO purposes\"\n value={editorState.headingTag}\n onChange={(v: string | undefined) => v && onChangeHeadingTag(v)}\n disabled={!editor || props.disabled || !editorState.headingLevel}\n size=\"S\"\n >\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n ),\n };\n}\n","import { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport { toolbarButton } from '../utils/tiptapUtils';\n\nexport function useScript(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isSuperscript: ctx.editor.isActive('superscript') ?? false,\n canToggleSuperscript: ctx.editor.can().chain().toggleSuperscript().run() ?? false,\n isSubscript: ctx.editor.isActive('subscript') ?? false,\n canToggleSubscript: ctx.editor.can().chain().toggleSubscript().run() ?? false,\n };\n },\n });\n\n const toggleSuperscript = () => {\n editor?.chain().focus().toggleSuperscript().run();\n };\n\n const toggleSubscript = () => {\n editor?.chain().focus().toggleSubscript().run();\n };\n\n return {\n superscriptButton: toolbarButton('superscript', {\n onClick: toggleSuperscript,\n icon: (\n <>\n x<sup>2</sup>\n </>\n ),\n active: editorState.isSuperscript,\n disabled: props.disabled || !editor || !editorState.canToggleSuperscript,\n tooltip: 'Superscript',\n }),\n subscriptButton: toolbarButton('subscript', {\n onClick: toggleSubscript,\n icon: (\n <>\n x<sub>2</sub>\n </>\n ),\n active: editorState.isSubscript,\n disabled: props.disabled || !editor || !editorState.canToggleSubscript,\n tooltip: 'Subscript',\n }),\n };\n}\n","// src/character-count/character-count.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nvar CharacterCount = Extension.create({\n name: \"characterCount\",\n addOptions() {\n return {\n limit: null,\n mode: \"textSize\",\n textCounter: (text) => text.length,\n wordCounter: (text) => text.split(\" \").filter((word) => word !== \"\").length\n };\n },\n addStorage() {\n return {\n characters: () => 0,\n words: () => 0\n };\n },\n onBeforeCreate() {\n this.storage.characters = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const mode = (options == null ? void 0 : options.mode) || this.options.mode;\n if (mode === \"textSize\") {\n const text = node.textBetween(0, node.content.size, void 0, \" \");\n return this.options.textCounter(text);\n }\n return node.nodeSize;\n };\n this.storage.words = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const text = node.textBetween(0, node.content.size, \" \", \" \");\n return this.options.wordCounter(text);\n };\n },\n addProseMirrorPlugins() {\n let initialEvaluationDone = false;\n return [\n new Plugin({\n key: new PluginKey(\"characterCount\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (initialEvaluationDone) {\n return;\n }\n const limit = this.options.limit;\n if (limit === null || limit === void 0 || limit === 0) {\n initialEvaluationDone = true;\n return;\n }\n const initialContentSize = this.storage.characters({ node: newState.doc });\n if (initialContentSize > limit) {\n const over = initialContentSize - limit;\n const from = 0;\n const to = over;\n console.warn(\n `[CharacterCount] Initial content exceeded limit of ${limit} characters. Content was automatically trimmed.`\n );\n const tr = newState.tr.deleteRange(from, to);\n initialEvaluationDone = true;\n return tr;\n }\n initialEvaluationDone = true;\n },\n filterTransaction: (transaction, state) => {\n const limit = this.options.limit;\n if (!transaction.docChanged || limit === 0 || limit === null || limit === void 0) {\n return true;\n }\n const oldSize = this.storage.characters({ node: state.doc });\n const newSize = this.storage.characters({ node: transaction.doc });\n if (newSize <= limit) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize <= oldSize) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize > oldSize) {\n return false;\n }\n const isPaste = transaction.getMeta(\"paste\");\n if (!isPaste) {\n return false;\n }\n const pos = transaction.selection.$head.pos;\n const over = newSize - limit;\n const from = pos - over;\n const to = pos;\n transaction.deleteRange(from, to);\n const updatedSize = this.storage.characters({ node: transaction.doc });\n if (updatedSize > limit) {\n return false;\n }\n return true;\n }\n })\n ];\n }\n});\n\n// src/drop-cursor/drop-cursor.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\nimport { dropCursor } from \"@tiptap/pm/dropcursor\";\nvar Dropcursor = Extension2.create({\n name: \"dropCursor\",\n addOptions() {\n return {\n color: \"currentColor\",\n width: 1,\n class: void 0\n };\n },\n addProseMirrorPlugins() {\n return [dropCursor(this.options)];\n }\n});\n\n// src/focus/focus.ts\nimport { Extension as Extension3 } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nvar Focus = Extension3.create({\n name: \"focus\",\n addOptions() {\n return {\n className: \"has-focus\",\n mode: \"all\"\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin2({\n key: new PluginKey2(\"focus\"),\n props: {\n decorations: ({ doc, selection }) => {\n const { isEditable, isFocused } = this.editor;\n const { anchor } = selection;\n const decorations = [];\n if (!isEditable || !isFocused) {\n return DecorationSet.create(doc, []);\n }\n let maxLevels = 0;\n if (this.options.mode === \"deepest\") {\n doc.descendants((node, pos) => {\n if (node.isText) {\n return;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n maxLevels += 1;\n });\n }\n let currentLevel = 0;\n doc.descendants((node, pos) => {\n if (node.isText) {\n return false;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n currentLevel += 1;\n const outOfScope = this.options.mode === \"deepest\" && maxLevels - currentLevel > 0 || this.options.mode === \"shallowest\" && currentLevel > 1;\n if (outOfScope) {\n return this.options.mode === \"deepest\";\n }\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: this.options.className\n })\n );\n });\n return DecorationSet.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/gap-cursor/gap-cursor.ts\nimport { callOrReturn, Extension as Extension4, getExtensionField } from \"@tiptap/core\";\nimport { gapCursor } from \"@tiptap/pm/gapcursor\";\nvar Gapcursor = Extension4.create({\n name: \"gapCursor\",\n addProseMirrorPlugins() {\n return [gapCursor()];\n },\n extendNodeSchema(extension) {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n return {\n allowGapCursor: (_a = callOrReturn(getExtensionField(extension, \"allowGapCursor\", context))) != null ? _a : null\n };\n }\n});\n\n// src/placeholder/placeholder.ts\nimport { Extension as Extension5, isNodeEmpty } from \"@tiptap/core\";\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration2, DecorationSet as DecorationSet2 } from \"@tiptap/pm/view\";\nvar DEFAULT_DATA_ATTRIBUTE = \"placeholder\";\nfunction preparePlaceholderAttribute(attr) {\n return attr.replace(/\\s+/g, \"-\").replace(/[^a-zA-Z0-9-]/g, \"\").replace(/^[0-9-]+/, \"\").replace(/^-+/, \"\").toLowerCase();\n}\nvar Placeholder = Extension5.create({\n name: \"placeholder\",\n addOptions() {\n return {\n emptyEditorClass: \"is-editor-empty\",\n emptyNodeClass: \"is-empty\",\n dataAttribute: DEFAULT_DATA_ATTRIBUTE,\n placeholder: \"Write something \\u2026\",\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n includeChildren: false\n };\n },\n addProseMirrorPlugins() {\n const dataAttribute = this.options.dataAttribute ? `data-${preparePlaceholderAttribute(this.options.dataAttribute)}` : `data-${DEFAULT_DATA_ATTRIBUTE}`;\n return [\n new Plugin3({\n key: new PluginKey3(\"placeholder\"),\n props: {\n decorations: ({ doc, selection }) => {\n const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\n const { anchor } = selection;\n const decorations = [];\n if (!active) {\n return null;\n }\n const isEmptyDoc = this.editor.isEmpty;\n doc.descendants((node, pos) => {\n const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\n const classes = [this.options.emptyNodeClass];\n if (isEmptyDoc) {\n classes.push(this.options.emptyEditorClass);\n }\n const decoration = Decoration2.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n [dataAttribute]: typeof this.options.placeholder === \"function\" ? this.options.placeholder({\n editor: this.editor,\n node,\n pos,\n hasAnchor\n }) : this.options.placeholder\n });\n decorations.push(decoration);\n }\n return this.options.includeChildren;\n });\n return DecorationSet2.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/selection/selection.ts\nimport { Extension as Extension6, isNodeSelection } from \"@tiptap/core\";\nimport { Plugin as Plugin4, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration3, DecorationSet as DecorationSet3 } from \"@tiptap/pm/view\";\nvar Selection = Extension6.create({\n name: \"selection\",\n addOptions() {\n return {\n className: \"selection\"\n };\n },\n addProseMirrorPlugins() {\n const { editor, options } = this;\n return [\n new Plugin4({\n key: new PluginKey4(\"selection\"),\n props: {\n decorations(state) {\n if (state.selection.empty || editor.isFocused || !editor.isEditable || isNodeSelection(state.selection) || editor.view.dragging) {\n return null;\n }\n return DecorationSet3.create(state.doc, [\n Decoration3.inline(state.selection.from, state.selection.to, {\n class: options.className\n })\n ]);\n }\n }\n })\n ];\n }\n});\n\n// src/trailing-node/trailing-node.ts\nimport { Extension as Extension7 } from \"@tiptap/core\";\nimport { Plugin as Plugin5, PluginKey as PluginKey5 } from \"@tiptap/pm/state\";\nfunction nodeEqualsType({ types, node }) {\n return node && Array.isArray(types) && types.includes(node.type) || (node == null ? void 0 : node.type) === types;\n}\nvar TrailingNode = Extension7.create({\n name: \"trailingNode\",\n addOptions() {\n return {\n node: void 0,\n notAfter: []\n };\n },\n addProseMirrorPlugins() {\n var _a;\n const plugin = new PluginKey5(this.name);\n const defaultNode = this.options.node || ((_a = this.editor.schema.topNodeType.contentMatch.defaultType) == null ? void 0 : _a.name) || \"paragraph\";\n const disabledNodes = Object.entries(this.editor.schema.nodes).map(([, value]) => value).filter((node) => (this.options.notAfter || []).concat(defaultNode).includes(node.name));\n return [\n new Plugin5({\n key: plugin,\n appendTransaction: (_, __, state) => {\n const { doc, tr, schema } = state;\n const shouldInsertNodeAtEnd = plugin.getState(state);\n const endPosition = doc.content.size;\n const type = schema.nodes[defaultNode];\n if (!shouldInsertNodeAtEnd) {\n return;\n }\n return tr.insert(endPosition, type.create());\n },\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n },\n apply: (tr, value) => {\n if (!tr.docChanged) {\n return value;\n }\n if (tr.getMeta(\"__uniqueIDTransaction\")) {\n return value;\n }\n const lastNode = tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n }\n }\n })\n ];\n }\n});\n\n// src/undo-redo/undo-redo.ts\nimport { Extension as Extension8 } from \"@tiptap/core\";\nimport { history, redo, undo } from \"@tiptap/pm/history\";\nvar UndoRedo = Extension8.create({\n name: \"undoRedo\",\n addOptions() {\n return {\n depth: 100,\n newGroupDelay: 500\n };\n },\n addCommands() {\n return {\n undo: () => ({ state, dispatch }) => {\n return undo(state, dispatch);\n },\n redo: () => ({ state, dispatch }) => {\n return redo(state, dispatch);\n }\n };\n },\n addProseMirrorPlugins() {\n return [history(this.options)];\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-z\": () => this.editor.commands.undo(),\n \"Shift-Mod-z\": () => this.editor.commands.redo(),\n \"Mod-y\": () => this.editor.commands.redo(),\n // Russian keyboard layouts\n \"Mod-\\u044F\": () => this.editor.commands.undo(),\n \"Shift-Mod-\\u044F\": () => this.editor.commands.redo()\n };\n }\n});\nexport {\n CharacterCount,\n Dropcursor,\n Focus,\n Gapcursor,\n Placeholder,\n Selection,\n TrailingNode,\n UndoRedo,\n preparePlaceholderAttribute\n};\n//# sourceMappingURL=index.js.map","import { Button, Dialog, Field, Flex, TextInput } from '@strapi/design-system';\nimport { ChangeEvent, FC, useEffect, useState } from 'react';\n\ninterface TableSizeDialogProps {\n open: boolean;\n defaultRows?: number;\n defaultCols?: number;\n onClose: () => void;\n onSave: (rows: number, cols: number) => void;\n}\n\nconst clamp = (val: number, min: number, max: number) => Math.max(min, Math.min(max, val));\n\nconst parseNum = (value: string, fallback: number) => {\n const n = Number(value);\n return Number.isFinite(n) ? n : fallback;\n};\n\nexport const TableSizeDialog: FC<TableSizeDialogProps> = ({\n open,\n defaultRows = 3,\n defaultCols = 3,\n onClose,\n onSave,\n}) => {\n const [rows, setRows] = useState<number>(defaultRows);\n const [cols, setCols] = useState<number>(defaultCols);\n\n useEffect(() => {\n if (open) {\n setRows(defaultRows);\n setCols(defaultCols);\n }\n }, [open, defaultRows, defaultCols]);\n\n const min = 1;\n const max = 10;\n\n const isValid = rows >= min && rows <= max && cols >= min && cols <= max;\n\n const handleSave = () => {\n if (!isValid) return;\n onSave(clamp(rows, min, max), clamp(cols, min, max));\n };\n\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(v: boolean) => {\n if (!v) onClose();\n }}\n >\n {open && (\n <Dialog.Content>\n <Dialog.Header>Insert table</Dialog.Header>\n <Dialog.Body>\n <Flex gap={4} alignItems=\"flex-end\">\n <Field.Root width=\"100%\">\n <Field.Label>Rows</Field.Label>\n <TextInput\n name=\"table-rows\"\n type=\"number\"\n value={String(rows)}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setRows(clamp(parseNum(e.target.value, rows), min, max))\n }\n placeholder={String(defaultRows)}\n />\n <Field.Hint>\n Min {min}, max {max}\n </Field.Hint>\n </Field.Root>\n <Field.Root width=\"100%\">\n <Field.Label>Columns</Field.Label>\n <TextInput\n name=\"table-cols\"\n type=\"number\"\n value={String(cols)}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setCols(clamp(parseNum(e.target.value, cols), min, max))\n }\n placeholder={String(defaultCols)}\n />\n <Field.Hint>\n Min {min}, max {max}\n </Field.Hint>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Cancel>\n <Button variant=\"tertiary\" fullWidth onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Cancel>\n <Dialog.Action>\n <Button fullWidth variant=\"success-light\" onClick={handleSave} disabled={!isValid}>\n Insert\n </Button>\n </Dialog.Action>\n </Dialog.Footer>\n </Dialog.Content>\n )}\n </Dialog.Root>\n );\n};\n\nexport default TableSizeDialog;\n","import { Editor } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport { toolbarButton } from '../utils/tiptapUtils';\nimport { GridNine } from '@strapi/icons';\nimport TableSizeDialog from '../components/TableSizeDialog';\nimport { useState } from 'react';\n\nexport function useTable(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isTable: ctx.editor.isActive('table') ?? false,\n canInsertTable: ctx.editor.can().chain().insertTable().run() ?? false,\n canAddColumn: ctx.editor.can().chain().addColumnAfter().run() ?? false,\n canDeleteColumn: ctx.editor.can().chain().deleteColumn().run() ?? false,\n canAddRow: ctx.editor.can().chain().addRowAfter().run() ?? false,\n canDeleteRow: ctx.editor.can().chain().deleteRow().run() ?? false,\n };\n },\n });\n\n const [open, setOpen] = useState(false);\n\n const handleOpenDialog = () => {\n if (!editor) return;\n setOpen(true);\n };\n\n const handleInsert = (rows: number, cols: number) => {\n if (!editor) return;\n editor.chain().focus().insertTable({ rows, cols, withHeaderRow: true }).run();\n setOpen(false);\n };\n\n const addColumn = () => editor?.chain().focus().addColumnAfter().run();\n const removeColumn = () => editor?.chain().focus().deleteColumn().run();\n const addRow = () => editor?.chain().focus().addRowAfter().run();\n const removeRow = () => editor?.chain().focus().deleteRow().run();\n\n return {\n tableButton: toolbarButton('table', {\n onClick: handleOpenDialog,\n icon: <GridNine />,\n active: editorState.isTable,\n disabled: props.disabled || !editor || !editorState.canInsertTable,\n tooltip: 'Table',\n }),\n // Adding table manipulation buttons\n addColumnButton: toolbarButton('tableAddColumn', {\n onClick: addColumn,\n icon: <>+Col</>,\n active: false,\n hidden: props.disabled || !editor || !editorState.canAddColumn,\n tooltip: 'Add column (to the right)',\n }),\n removeColumnButton: toolbarButton('tableRemoveColumn', {\n onClick: removeColumn,\n icon: <>-Col</>,\n active: false,\n hidden: props.disabled || !editor || !editorState.canDeleteColumn,\n tooltip: 'Remove column',\n }),\n addRowButton: toolbarButton('tableAddRow', {\n onClick: addRow,\n icon: <>+Row</>,\n active: false,\n hidden: props.disabled || !editor || !editorState.canAddRow,\n tooltip: 'Add row (below)',\n }),\n removeRowButton: toolbarButton('tableRemoveRow', {\n onClick: removeRow,\n icon: <>-Row</>,\n active: false,\n hidden: props.disabled || !editor || !editorState.canDeleteRow,\n tooltip: 'Remove row',\n }),\n tableDialog: (\n <TableSizeDialog\n open={open}\n onClose={() => setOpen(false)}\n onSave={handleInsert}\n defaultRows={3}\n defaultCols={3}\n />\n ),\n };\n}\n","import { SVGProps } from 'react';\n\nexport function TextAlignLeft(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M3 10H16M3 14H21M3 18H16M3 6H21\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function TextAlignJustify(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M3 10H21M3 14H21M3 18H21M3 6H21\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function TextAlignRight(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M8 10H21M3 14H21M8 18H21M3 6H21\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function TextAlignCenter(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M3 6H21M3 14H21M17 10H7M17 18H7\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { Editor, Mark } from '@tiptap/core';\nimport { useEditorState } from '@tiptap/react';\nimport { toolbarButton } from '../utils/tiptapUtils';\nimport { TextAlignLeft } from '../icons/TextAlignLeft';\nimport { TextAlignJustify } from '../icons/TextAlignJustify';\nimport { TextAlignRight } from '../icons/TextAlignRight';\nimport { TextAlignCenter } from '../icons/TextAlignCenter';\n\ntype TextAlign = 'left' | 'center' | 'right' | 'justify';\n\nexport function useTextAlign(editor: Editor, props: { disabled?: boolean } = { disabled: false }) {\n const editorState = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isTextAlignLeft: ctx.editor.isActive({ textAlign: 'left' }) ?? false,\n isTextAlignRight: ctx.editor.isActive({ textAlign: 'right' }) ?? false,\n isTextAlignCenter: ctx.editor.isActive({ textAlign: 'center' }) ?? false,\n isTextAlignJustify: ctx.editor.isActive({ textAlign: 'justify' }) ?? false,\n canToggleAlign: ctx.editor.can().chain().setTextAlign('left').run() ?? false,\n };\n },\n });\n\n const setTextAlign = (alignment: TextAlign) => {\n editor.chain().focus().setTextAlign(alignment).run();\n };\n\n return {\n textAlignLeftButton: toolbarButton('text-align-left', {\n onClick: () => setTextAlign('left'),\n icon: <TextAlignLeft />,\n active: editorState.isTextAlignLeft,\n disabled: props.disabled || !editor || !editorState.canToggleAlign,\n tooltip: 'Text Align Left',\n }),\n textAlignCenterButton: toolbarButton('text-align-center', {\n onClick: () => setTextAlign('center'),\n icon: <TextAlignCenter />,\n active: editorState.isTextAlignCenter,\n disabled: props.disabled || !editor || !editorState.canToggleAlign,\n tooltip: 'Text Align Center',\n }),\n textAlignRightButton: toolbarButton('text-align-right', {\n onClick: () => setTextAlign('right'),\n icon: <TextAlignRight />,\n active: editorState.isTextAlignRight,\n disabled: props.disabled || !editor || !editorState.canToggleAlign,\n tooltip: 'Text Align Right',\n }),\n textAlignJustifyButton: toolbarButton('text-align-justify', {\n onClick: () => setTextAlign('justify'),\n icon: <TextAlignJustify />,\n active: editorState.isTextAlignJustify,\n disabled: props.disabled || !editor || !editorState.canToggleAlign,\n tooltip: 'Text Align Justify',\n }),\n };\n}\n","import BaseTiptapInput from './BaseTiptapInput';\nimport { spacer, TiptapInputProps, useTiptapEditor } from '../utils/tiptapUtils';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { useStarterKit } from '../extensions/StarterKit';\nimport { useLink } from '../extensions/Link';\nimport { HeadingWithSEOTag, useHeading } from '../extensions/Heading';\nimport Superscript from '@tiptap/extension-superscript';\nimport Subscript from '@tiptap/extension-subscript';\nimport { useScript } from '../extensions/Script';\nimport { TableKit } from '@tiptap/extension-table';\nimport { Gapcursor } from '@tiptap/extensions';\nimport { useTable } from '../extensions/Table';\nimport { forwardRef } from 'react';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { useTextAlign } from '../extensions/TextAlign';\n\nconst extensions = [\n StarterKit.configure({\n heading: false, // disable default so we can use our custom version\n link: {\n openOnClick: false,\n },\n }),\n HeadingWithSEOTag,\n\n Superscript,\n Subscript,\n Gapcursor, // cursor for resizing tables\n TableKit.configure({\n table: { resizable: true },\n }),\n TextAlign.configure({\n types: ['heading', 'paragraph'],\n }),\n];\n\nconst RichTextInput = forwardRef<HTMLDivElement, TiptapInputProps>((props, forwardedRef) => {\n const { editor, field } = useTiptapEditor(props.name, '', extensions);\n\n const starterKit = useStarterKit(editor, { disabled: props.disabled });\n const heading = useHeading(editor, { disabled: props.disabled });\n\n const link = useLink(editor, { disabled: props.disabled });\n const script = useScript(editor, { disabled: props.disabled });\n const table = useTable(editor, { disabled: props.disabled });\n const textAlign = useTextAlign(editor, { disabled: props.disabled });\n\n return (\n <BaseTiptapInput editor={editor} field={field} {...props} ref={forwardedRef}>\n {heading.headingSelect}\n {heading.headingTagSelect}\n {spacer(8)}\n {starterKit.boldButton}\n {starterKit.italicButton}\n {starterKit.underlineButton}\n {starterKit.strikeButton}\n {script.superscriptButton}\n {script.subscriptButton}\n {spacer(8)}\n {textAlign.textAlignLeftButton}\n {textAlign.textAlignCenterButton}\n {textAlign.textAlignRightButton}\n {textAlign.textAlignJustifyButton}\n {spacer(8)}\n {starterKit.bulletButton}\n {starterKit.orderedButton}\n {spacer(8)}\n {starterKit.codeButton}\n {starterKit.blockquoteButton}\n {link.linkButton}\n {link.linkDialog}\n {spacer(8)}\n {table.tableButton}\n {table.addColumnButton}\n {table.removeColumnButton}\n {table.addRowButton}\n {table.removeRowButton}\n {table.tableDialog}\n </BaseTiptapInput>\n );\n});\n\nexport default RichTextInput;\n"],"names":["styled","forwardRef","jsxs","Field","jsx","Box","Flex","EditorContent","extensions","useField","useEditor","editor","Tooltip","Button","useEditorState","BoldIcon","ItalicIcon","UnderlineIcon","StrikeThroughIcon","BulletListIcon","NumberListIcon","CodeIcon","QuotesIcon","React","Dialog","TextInput","useState","useRef","LinkIcon","state","view","commands","liftTarget","originalCreateParagraphNear","TextSelection","originalDeleteSelection","originalExitCode","TextSelection2","TextSelection3","Selection","TextSelection4","ProseMirrorNode","Fragment","Schema","DOMParser","ReplaceStep","ReplaceAroundStep","Selection2","Fragment2","originalJoinUp","originalJoinDown","originalJoinBackward","originalJoinForward","joinPoint","joinPoint2","originalCommand","originalCommand2","originalLift","originalLiftEmptyBlock","originalLiftListItem","originalNewlineInCode","AllSelection","originalSelectNodeBackward","originalSelectNodeForward","originalSelectParentNode","originalSelectTextblockEnd","originalSelectTextblockStart","transform","Transform","NodeSelection","setBlockType","NodeSelection2","TextSelection5","originalSinkListItem","NodeSelection3","canSplit","TextSelection6","Fragment3","Slice","TextSelection7","canSplit2","canJoin","originalWrapIn","originalWrapInList","Plugin3","PluginKey","RemoveMarkStep","Plugin4","PluginKey2","Plugin5","PluginKey3","PluginKey4","Plugin6","Selection3","Plugin7","PluginKey5","Plugin8","PluginKey6","Plugin9","PluginKey7","Plugin10","PluginKey8","Node","Heading","SingleSelect","SingleSelectOption","Plugin","Extension2","dropCursor","Extension3","Plugin2","DecorationSet","Decoration","Extension4","gapCursor","Extension5","Decoration2","DecorationSet2","Extension6","DecorationSet3","Decoration3","Extension7","Extension8","undo","redo","history","useEffect","GridNine","StarterKit","Superscript","Subscript","TableKit","TextAlign"],"mappings":"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","x_google_ignoreList":[6,7,10]}
|