@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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -0
  3. package/dist/_chunks/AccentCursive-CpAPpH9C.mjs +3383 -0
  4. package/dist/_chunks/AccentCursive-CpAPpH9C.mjs.map +1 -0
  5. package/dist/_chunks/AccentCursive-D6sTlhub.js +3384 -0
  6. package/dist/_chunks/AccentCursive-D6sTlhub.js.map +1 -0
  7. package/dist/_chunks/FormattedHeadingInput-DycgfIze.mjs +101 -0
  8. package/dist/_chunks/FormattedHeadingInput-DycgfIze.mjs.map +1 -0
  9. package/dist/_chunks/FormattedHeadingInput-FFjiRSEJ.js +101 -0
  10. package/dist/_chunks/FormattedHeadingInput-FFjiRSEJ.js.map +1 -0
  11. package/dist/_chunks/RichTextInput-BZQ2iVqa.mjs +4481 -0
  12. package/dist/_chunks/RichTextInput-BZQ2iVqa.mjs.map +1 -0
  13. package/dist/_chunks/RichTextInput-BbbQxPc-.js +4414 -0
  14. package/dist/_chunks/RichTextInput-BbbQxPc-.js.map +1 -0
  15. package/dist/_chunks/RichTextInput-BjLR2pi0.js +4416 -0
  16. package/dist/_chunks/RichTextInput-BjLR2pi0.js.map +1 -0
  17. package/dist/_chunks/RichTextInput-BlxoJMa2.js +4488 -0
  18. package/dist/_chunks/RichTextInput-BlxoJMa2.js.map +1 -0
  19. package/dist/_chunks/RichTextInput-Bm3X8fR2.mjs +4400 -0
  20. package/dist/_chunks/RichTextInput-Bm3X8fR2.mjs.map +1 -0
  21. package/dist/_chunks/RichTextInput-Bms-gSvK.js +4407 -0
  22. package/dist/_chunks/RichTextInput-Bms-gSvK.js.map +1 -0
  23. package/dist/_chunks/RichTextInput-BtNjPJRN.mjs +4400 -0
  24. package/dist/_chunks/RichTextInput-BtNjPJRN.mjs.map +1 -0
  25. package/dist/_chunks/RichTextInput-Bw3tcXfp.js +4407 -0
  26. package/dist/_chunks/RichTextInput-Bw3tcXfp.js.map +1 -0
  27. package/dist/_chunks/RichTextInput-CsgNpoxq.mjs +4409 -0
  28. package/dist/_chunks/RichTextInput-CsgNpoxq.mjs.map +1 -0
  29. package/dist/_chunks/RichTextInput-CwTvEMda.js +4407 -0
  30. package/dist/_chunks/RichTextInput-CwTvEMda.js.map +1 -0
  31. package/dist/_chunks/RichTextInput-DG-36krM.js +1181 -0
  32. package/dist/_chunks/RichTextInput-DG-36krM.js.map +1 -0
  33. package/dist/_chunks/RichTextInput-DLac-zNQ.mjs +4400 -0
  34. package/dist/_chunks/RichTextInput-DLac-zNQ.mjs.map +1 -0
  35. package/dist/_chunks/RichTextInput-DSXttrvi.js +4407 -0
  36. package/dist/_chunks/RichTextInput-DSXttrvi.js.map +1 -0
  37. package/dist/_chunks/RichTextInput-DeJ6Exto.mjs +4400 -0
  38. package/dist/_chunks/RichTextInput-DeJ6Exto.mjs.map +1 -0
  39. package/dist/_chunks/RichTextInput-DgT88AkO.mjs +1175 -0
  40. package/dist/_chunks/RichTextInput-DgT88AkO.mjs.map +1 -0
  41. package/dist/_chunks/RichTextInput-DlMaDJQF.mjs +4400 -0
  42. package/dist/_chunks/RichTextInput-DlMaDJQF.mjs.map +1 -0
  43. package/dist/_chunks/RichTextInput-DtaYdjCs.mjs +4400 -0
  44. package/dist/_chunks/RichTextInput-DtaYdjCs.mjs.map +1 -0
  45. package/dist/_chunks/RichTextInput-YTKXo5oq.js +4407 -0
  46. package/dist/_chunks/RichTextInput-YTKXo5oq.js.map +1 -0
  47. package/dist/_chunks/RichTextInput-tmg-oMJk.mjs +4407 -0
  48. package/dist/_chunks/RichTextInput-tmg-oMJk.mjs.map +1 -0
  49. package/dist/_chunks/RichTextInput-umhMsI5o.js +4407 -0
  50. package/dist/_chunks/RichTextInput-umhMsI5o.js.map +1 -0
  51. package/dist/_chunks/en-B4KWt_jN.js +5 -0
  52. package/dist/_chunks/en-B4KWt_jN.js.map +1 -0
  53. package/dist/_chunks/en-Byx4XI2L.mjs +5 -0
  54. package/dist/_chunks/en-Byx4XI2L.mjs.map +1 -0
  55. package/dist/admin/index.js +71 -0
  56. package/dist/admin/index.js.map +1 -0
  57. package/dist/admin/index.mjs +72 -0
  58. package/dist/admin/index.mjs.map +1 -0
  59. package/dist/admin/src/components/BaseTiptapInput.d.ts +12 -0
  60. package/dist/admin/src/components/FormattedHeadingInput.d.ts +4 -0
  61. package/dist/admin/src/components/Initializer.d.ts +5 -0
  62. package/dist/admin/src/components/LinkDialog.d.ts +14 -0
  63. package/dist/admin/src/components/RichTextInput.d.ts +4 -0
  64. package/dist/admin/src/components/Spacer.d.ts +3 -0
  65. package/dist/admin/src/components/TableSizeDialog.d.ts +10 -0
  66. package/dist/admin/src/components/TiptapInput.d.ts +7 -0
  67. package/dist/admin/src/components/TiptapInputStyles.d.ts +2 -0
  68. package/dist/admin/src/components/ToolbarButton.d.ts +11 -0
  69. package/dist/admin/src/extensions/AccentCursive.d.ts +18 -0
  70. package/dist/admin/src/extensions/Heading.d.ts +8 -0
  71. package/dist/admin/src/extensions/Link.d.ts +7 -0
  72. package/dist/admin/src/extensions/Script.d.ts +7 -0
  73. package/dist/admin/src/extensions/StarterKit.d.ts +13 -0
  74. package/dist/admin/src/extensions/Table.d.ts +11 -0
  75. package/dist/admin/src/extensions/TextAlign.d.ts +9 -0
  76. package/dist/admin/src/fields/formattedHeadingField.d.ts +20 -0
  77. package/dist/admin/src/fields/richTextField.d.ts +20 -0
  78. package/dist/admin/src/icons/TextAlignCenter.d.ts +2 -0
  79. package/dist/admin/src/icons/TextAlignJustify.d.ts +2 -0
  80. package/dist/admin/src/icons/TextAlignLeft.d.ts +2 -0
  81. package/dist/admin/src/icons/TextAlignRight.d.ts +2 -0
  82. package/dist/admin/src/index.d.ts +10 -0
  83. package/dist/admin/src/pluginId.d.ts +1 -0
  84. package/dist/admin/src/utils/getTranslation.d.ts +2 -0
  85. package/dist/admin/src/utils/tiptapUtils.d.ts +18 -0
  86. package/dist/server/index.js +44 -0
  87. package/dist/server/index.js.map +1 -0
  88. package/dist/server/index.mjs +45 -0
  89. package/dist/server/index.mjs.map +1 -0
  90. package/dist/server/src/bootstrap.d.ts +5 -0
  91. package/dist/server/src/config/index.d.ts +5 -0
  92. package/dist/server/src/content-types/index.d.ts +2 -0
  93. package/dist/server/src/controllers/index.d.ts +2 -0
  94. package/dist/server/src/destroy.d.ts +5 -0
  95. package/dist/server/src/fields/richTextField.d.ts +2 -0
  96. package/dist/server/src/index.d.ts +25 -0
  97. package/dist/server/src/middlewares/index.d.ts +2 -0
  98. package/dist/server/src/policies/index.d.ts +2 -0
  99. package/dist/server/src/register.d.ts +5 -0
  100. package/dist/server/src/routes/index.d.ts +2 -0
  101. package/dist/server/src/services/index.d.ts +2 -0
  102. package/dist/shared/fields.d.ts +1 -0
  103. package/dist/shared/pluginId.d.ts +1 -0
  104. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichTextInput-DG-36krM.js","sources":["../../admin/src/extensions/StarterKit.tsx","../../admin/src/components/LinkDialog.tsx","../../admin/src/extensions/Link.tsx","../../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 { 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","// 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';\nimport { AccentCursiveMark, useAccentCursive } from '../extensions/AccentCursive';\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 AccentCursiveMark,\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 const accentCursive = useAccentCursive(editor, { disabled: props.disabled });\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 {accentCursive.button}\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":["useEditorState","toolbarButton","BoldIcon","ItalicIcon","UnderlineIcon","StrikeThroughIcon","BulletListIcon","NumberListIcon","CodeIcon","QuotesIcon","React","jsx","Dialog","jsxs","Field","TextInput","Button","useState","useRef","LinkIcon","Node","mergeAttributes","textblockTypeInputRule","Heading","SingleSelect","SingleSelectOption","Fragment","Extension","Plugin","PluginKey","state","Extension2","dropCursor","Extension3","Plugin2","PluginKey2","DecorationSet","Decoration","Extension4","gapCursor","callOrReturn","getExtensionField","Extension5","Plugin3","PluginKey3","isNodeEmpty","Decoration2","DecorationSet2","Extension6","Plugin4","PluginKey4","isNodeSelection","DecorationSet3","Decoration3","Extension7","PluginKey5","Plugin5","Extension8","undo","redo","history","useEffect","Flex","GridNine","StarterKit","AccentCursiveMark","Superscript","Subscript","TableKit","TextAlign","forwardRef","useTiptapEditor","useAccentCursive","BaseTiptapInput","spacer"],"mappings":"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","x_google_ignoreList":[3,6]}