@pixerate/editor 0.14.3 → 0.15.0

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 (71) hide show
  1. package/dist/agent/index.cjs +28 -220
  2. package/dist/agent/index.cjs.map +1 -1
  3. package/dist/agent/index.d.cts +1 -1
  4. package/dist/agent/index.d.ts +1 -1
  5. package/dist/agent/index.js +5 -154
  6. package/dist/agent/index.js.map +1 -1
  7. package/dist/canvas/index.cjs +113 -377
  8. package/dist/canvas/index.cjs.map +1 -1
  9. package/dist/canvas/index.d.cts +2 -2
  10. package/dist/canvas/index.d.ts +2 -2
  11. package/dist/canvas/index.js +18 -208
  12. package/dist/canvas/index.js.map +1 -1
  13. package/dist/chunk-33UVEDOS.cjs +233 -0
  14. package/dist/chunk-33UVEDOS.cjs.map +1 -0
  15. package/dist/chunk-7FWEWE6T.js +1888 -0
  16. package/dist/chunk-7FWEWE6T.js.map +1 -0
  17. package/dist/chunk-BYCOFZAA.js +514 -0
  18. package/dist/chunk-BYCOFZAA.js.map +1 -0
  19. package/dist/chunk-CYKQLDYH.cjs +1290 -0
  20. package/dist/chunk-CYKQLDYH.cjs.map +1 -0
  21. package/dist/chunk-GLSIZKOX.js +17 -0
  22. package/dist/chunk-GLSIZKOX.js.map +1 -0
  23. package/dist/chunk-GWHJVZPI.js +233 -0
  24. package/dist/chunk-GWHJVZPI.js.map +1 -0
  25. package/dist/chunk-LDES3EOS.cjs +1888 -0
  26. package/dist/chunk-LDES3EOS.cjs.map +1 -0
  27. package/dist/chunk-MPPXH7U5.cjs +336 -0
  28. package/dist/chunk-MPPXH7U5.cjs.map +1 -0
  29. package/dist/chunk-NNJRJJSC.js +1290 -0
  30. package/dist/chunk-NNJRJJSC.js.map +1 -0
  31. package/dist/chunk-O7LOPQMH.js +336 -0
  32. package/dist/chunk-O7LOPQMH.js.map +1 -0
  33. package/dist/chunk-SEDR75VH.cjs +17 -0
  34. package/dist/chunk-SEDR75VH.cjs.map +1 -0
  35. package/dist/chunk-SHWP2A43.cjs +514 -0
  36. package/dist/chunk-SHWP2A43.cjs.map +1 -0
  37. package/dist/chunk-VHZCXHS4.js +222 -0
  38. package/dist/chunk-VHZCXHS4.js.map +1 -0
  39. package/dist/chunk-WADCJ7A7.cjs +222 -0
  40. package/dist/chunk-WADCJ7A7.cjs.map +1 -0
  41. package/dist/extensions/index.cjs +25 -1920
  42. package/dist/extensions/index.cjs.map +1 -1
  43. package/dist/extensions/index.js +22 -1868
  44. package/dist/extensions/index.js.map +1 -1
  45. package/dist/grammar/index.cjs +44 -387
  46. package/dist/grammar/index.cjs.map +1 -1
  47. package/dist/grammar/index.js +23 -321
  48. package/dist/grammar/index.js.map +1 -1
  49. package/dist/history/index.cjs +6 -257
  50. package/dist/history/index.cjs.map +1 -1
  51. package/dist/history/index.js +4 -227
  52. package/dist/history/index.js.map +1 -1
  53. package/dist/image-editor/index.cjs +63 -106
  54. package/dist/image-editor/index.cjs.map +1 -1
  55. package/dist/index.cjs +324 -7232
  56. package/dist/index.cjs.map +1 -1
  57. package/dist/index.d.cts +0 -4
  58. package/dist/index.d.ts +0 -4
  59. package/dist/index.js +258 -7007
  60. package/dist/index.js.map +1 -1
  61. package/dist/serializers/index.cjs +28 -558
  62. package/dist/serializers/index.cjs.map +1 -1
  63. package/dist/serializers/index.js +16 -496
  64. package/dist/serializers/index.js.map +1 -1
  65. package/dist/spreadsheet/index.cjs +21 -1319
  66. package/dist/spreadsheet/index.cjs.map +1 -1
  67. package/dist/spreadsheet/index.js +14 -1274
  68. package/dist/spreadsheet/index.js.map +1 -1
  69. package/dist/{types-lGtRobRV.d.cts → types-DC8b2TsA.d.cts} +1 -1
  70. package/dist/{types-lGtRobRV.d.ts → types-DC8b2TsA.d.ts} +1 -1
  71. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/gradient-text.ts","../src/extensions/slash-commands.ts","../src/extensions/template-suggestions.ts","../src/extensions/loading-node.ts","../src/extensions/SmilieReplacer.ts","../src/extensions/ColorHighlighter.ts","../src/extensions/FontSize.ts","../src/extensions/rich-text-preset.ts","../src/extensions/mention.ts","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/tiptap/tight-lists.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/util/markdown.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/serialize/state.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/html.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/util/dom.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/html.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/blockquote.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/bullet-list.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/code-block.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/hard-break.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/heading.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/horizontal-rule.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/image.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/list-item.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/ordered-list.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/paragraph.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/util/prosemirror.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/table.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/task-item.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/task-list.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/nodes/text.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/bold.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/code.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/italic.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/link.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/marks/strike.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/index.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/util/extensions.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/serialize/MarkdownSerializer.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/parse/MarkdownParser.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/extensions/tiptap/clipboard.js","../../../node_modules/.pnpm/tiptap-markdown@0.8.10_@tiptap+core@2.27.3_@tiptap+pm@2.27.3_/node_modules/tiptap-markdown/src/Markdown.js","../src/extensions/markdown.ts","../src/extensions/image.ts"],"sourcesContent":["import { Mark } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nimport type { Node as ProsemirrorNode } from \"@tiptap/pm/model\";\nimport type { EditorState } from \"@tiptap/pm/state\";\nimport { TEMPLATE_REGEX, VARIABLE_REGEX, INSTRUCTION_REGEX, ColorGradient } from \"../grammar/tokens\";\n\nexport interface GradientTextOptions {\n templateColorMap: Map<string, ColorGradient>;\n speed?: number;\n jsonVariables?: string[] | Set<string>;\n onTemplateClick?: (templateName: string, event: MouseEvent) => void;\n}\n\nconst createGradientDecorations = (\n doc: ProsemirrorNode,\n options: GradientTextOptions,\n): Decoration[] => {\n const decorations: Decoration[] = [];\n const speed = options.speed ?? 1;\n const jsonVarSet = options.jsonVariables\n ? options.jsonVariables instanceof Set\n ? options.jsonVariables\n : new Set(options.jsonVariables)\n : null;\n\n doc.descendants((node, pos) => {\n if (node.isText) {\n const text = node.text || \"\";\n let match: RegExpExecArray | null;\n\n // 1. Template: {{templateName}}\n const tmplRegex = new RegExp(TEMPLATE_REGEX.source, TEMPLATE_REGEX.flags);\n while ((match = tmplRegex.exec(text)) !== null) {\n const templateName = match[1].trim();\n const colors = options.templateColorMap?.get(templateName);\n\n if (colors) {\n const start = pos + match.index;\n const end = start + match[0].length;\n const { from: colorFrom, to: colorTo } = colors;\n\n const style = `--bg-size: ${\n speed * 300\n }%; --color-from: ${colorFrom}; --color-to: ${colorTo}; caret-color: #111 !important; background-image: linear-gradient(to right, ${colorFrom}, ${colorTo}, ${colorFrom}); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent;`;\n\n decorations.push(\n Decoration.inline(start, end, {\n class:\n \"inline animate-gradient bg-gradient-to-r from-[var(--color-from)] via-[var(--color-to)] to-[var(--color-from)] bg-[length:var(--bg-size)_100%] bg-clip-text text-transparent border border-(--color-to)/20 px-1 py-0.5 rounded-sm cursor-pointer\",\n style,\n \"data-template\": templateName,\n }),\n );\n }\n }\n\n // 2. Instruction: __text__\n const instRegex = new RegExp(\n INSTRUCTION_REGEX.source,\n INSTRUCTION_REGEX.flags,\n );\n while ((match = instRegex.exec(text)) !== null) {\n const content = match[1].trim();\n const colors = options.templateColorMap?.get(content) || {\n from: \"#ffaa40\",\n to: \"#9c40ff\",\n };\n\n const start = pos + match.index;\n const end = start + match[0].length;\n const { from: colorFrom, to: colorTo } = colors;\n\n const style = `--bg-size: ${\n speed * 300\n }%; --color-from: ${colorFrom}; --color-to: ${colorTo}; caret-color: #111 !important; background-image: linear-gradient(to right, #fb7185, #8b5cf6, #fb7185); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent;`;\n\n decorations.push(\n Decoration.inline(start, end, {\n class:\n \"italic animate-gradient bg-gradient-to-r from-rose-400 from-50% to-violet-500 to-50% bg-size-[200%_100%] bg-clip-text text-transparent inline-flex items-baseline gap-0.5\",\n style,\n }),\n );\n }\n\n // 3. Variable: {variableName}\n const varRegex = new RegExp(\n VARIABLE_REGEX.source,\n VARIABLE_REGEX.flags,\n );\n while ((match = varRegex.exec(text)) !== null) {\n const variableName = match[1].trim();\n const start = pos + match.index;\n const end = start + match[0].length;\n const isJsonVar = jsonVarSet?.has(variableName);\n\n decorations.push(\n Decoration.inline(start, end, {\n class: isJsonVar\n ? \"bg-violet-400/40 border-b-4 border-rose-300 dark:border-rose-800 inline-flex items-baseline px-1 py-0 text-foreground/80 gap-0.5 rounded-xs\"\n : \"bg-rose-400/40 border-b-4 border-violet-300 dark:border-violet-800 inline-flex items-baseline px-1 py-0 text-foreground/80 gap-0.5 rounded-xs\",\n \"data-variable\": variableName,\n }),\n );\n }\n }\n });\n\n return decorations;\n};\n\nexport const GradientText = Mark.create<GradientTextOptions>({\n name: \"gradientText\",\n\n addOptions() {\n return {\n templateColorMap: new Map(),\n speed: 1,\n jsonVariables: undefined,\n onTemplateClick: undefined,\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n const defaultColors = {\n from: \"#ffaa40\",\n to: \"#9c40ff\",\n };\n const speed = this.options.speed ?? 1;\n const style = `--bg-size: ${speed * 300}%; --color-from: ${\n defaultColors.from\n }; --color-to: ${defaultColors.to}; caret-color: #111 !important;`;\n\n return [\n \"span\",\n {\n class:\n \"inline animate-gradient bg-gradient-to-r from-[var(--color-from)] via-[var(--color-to)] to-[var(--color-from)] bg-[length:var(--bg-size)_100%] bg-clip-text text-transparent\",\n style,\n ...HTMLAttributes,\n },\n 0,\n ];\n },\n\n parseHTML() {\n return [\n {\n tag: \"span\",\n getAttrs: (node) =>\n (node as HTMLElement).classList.contains(\"animate-gradient\") &&\n (node as HTMLElement).classList.contains(\"bg-clip-text\") &&\n null,\n },\n ];\n },\n\n addProseMirrorPlugins() {\n const markOptions = this.options;\n\n return [\n new Plugin({\n state: {\n init(_, { doc }) {\n return DecorationSet.create(\n doc,\n createGradientDecorations(doc, markOptions),\n );\n },\n apply(tr, value: DecorationSet) {\n const newDoc = tr.doc;\n if (tr.docChanged) {\n return DecorationSet.create(\n newDoc,\n createGradientDecorations(newDoc, markOptions),\n );\n }\n return value.map(tr.mapping, newDoc);\n },\n },\n props: {\n decorations(state: EditorState) {\n return (this as any).getState(state) as DecorationSet;\n },\n handleClickOn(view, pos, _node, _nodePos, event) {\n const decorationSet = (this as any).getState(\n view.state,\n ) as DecorationSet;\n const decorations = decorationSet.find(pos, pos + 1);\n\n for (const decoration of decorations) {\n const decorationWithAttrs = decoration as any;\n const templateName =\n decorationWithAttrs.type?.attrs?.[\"data-template\"];\n if (templateName) {\n if (markOptions.onTemplateClick) {\n markOptions.onTemplateClick(templateName, event as MouseEvent);\n }\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"show-gradient-popover\", {\n detail: {\n templateName,\n target: event.target,\n },\n }),\n );\n }\n return true;\n }\n }\n return false;\n },\n },\n }),\n ];\n },\n});\n","import { Extension } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\n\nexport interface SlashCommandMatchData {\n match: RegExpMatchArray;\n query: string;\n from: number;\n to: number;\n coords: { top: number; left: number; bottom: number; right: number };\n}\n\nexport interface SlashCommandsOptions {\n trigger?: string;\n onMatch?: (data: SlashCommandMatchData) => void;\n onClear?: () => void;\n containerId?: string;\n}\n\nexport const SlashCommands = Extension.create<SlashCommandsOptions>({\n name: \"slashCommands\",\n\n addOptions() {\n return {\n trigger: \"/\",\n onMatch: undefined,\n onClear: undefined,\n containerId: undefined,\n };\n },\n\n addProseMirrorPlugins() {\n const opts = this.options;\n\n return [\n new Plugin({\n view() {\n return {\n update(view) {\n const { state } = view;\n const { selection } = state;\n const { $from } = selection;\n\n if (!$from.parent.isTextblock) {\n opts.onClear?.();\n return;\n }\n\n const textBeforeCursor = $from.parent.textBetween(\n 0,\n $from.parentOffset,\n );\n\n const slashMatch = textBeforeCursor.match(\n /(?:^|\\s)\\/([a-zA-Z0-9_-]*)$/,\n );\n\n if (slashMatch) {\n const matchIndex = slashMatch.index ?? 0;\n const offsetInParent =\n matchIndex + (slashMatch[0].startsWith(\" \") ? 1 : 0);\n const matchFrom = $from.start() + offsetInParent;\n const matchTo = $from.pos;\n const coords = view.coordsAtPos($from.pos);\n\n let relativeCoords = {\n top: coords.top,\n left: coords.left,\n bottom: coords.bottom,\n right: coords.right,\n };\n\n if (opts.containerId && typeof document !== \"undefined\") {\n const container = document.getElementById(opts.containerId);\n if (container) {\n const rect = container.getBoundingClientRect();\n relativeCoords = {\n top: coords.bottom - rect.top + 5,\n left: coords.left - rect.left,\n bottom: coords.bottom - rect.top,\n right: coords.right - rect.left,\n };\n }\n }\n\n opts.onMatch?.({\n match: slashMatch,\n query: slashMatch[1] || \"\",\n from: matchFrom,\n to: matchTo,\n coords: relativeCoords,\n });\n } else {\n opts.onClear?.();\n }\n },\n };\n },\n }),\n ];\n },\n});\n","import { Extension } from \"@tiptap/core\";\nimport Suggestion, { SuggestionOptions } from \"@tiptap/suggestion\";\nimport { Template } from \"../grammar/tokens\";\n\nexport interface TemplateSuggestionsOptions {\n templates: Template[];\n char?: string;\n onSuggestion?: (props: {\n query: string;\n range: { from: number; to: number };\n clientRect?: (() => DOMRect | null) | null;\n items: Template[];\n command: (props: { name: string }) => void;\n }) => void;\n}\n\nexport const TemplateSuggestions = Extension.create<TemplateSuggestionsOptions>({\n name: \"templateSuggestions\",\n\n addOptions() {\n return {\n templates: [],\n char: \"{{\",\n onSuggestion: undefined,\n };\n },\n\n addProseMirrorPlugins() {\n const opts = this.options;\n\n const suggestionConfig: Omit<SuggestionOptions<Template>, \"editor\"> = {\n char: opts.char || \"{{\",\n items: ({ query }) => {\n const lower = query.toLowerCase();\n return (opts.templates || []).filter((t) =>\n t.name.toLowerCase().includes(lower),\n );\n },\n command: ({ editor, range, props }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertContent(`{{${props.name}}}`)\n .run();\n },\n render: () => {\n return {\n onStart: (props) => {\n opts.onSuggestion?.(props as any);\n },\n onUpdate: (props) => {\n opts.onSuggestion?.(props as any);\n },\n onExit: () => {\n opts.onSuggestion?.({\n query: \"\",\n range: { from: 0, to: 0 },\n items: [],\n command: () => {},\n });\n },\n };\n },\n };\n\n const SuggestionFn =\n typeof Suggestion === \"function\"\n ? Suggestion\n : (Suggestion as any)?.default || (Suggestion as any)?.Suggestion;\n\n return [\n SuggestionFn({\n editor: this.editor,\n ...suggestionConfig,\n }),\n ];\n },\n});\n","import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const LoadingNode = Node.create({\n name: \"loadingNode\",\n group: \"inline\",\n inline: true,\n selectable: true,\n atom: true,\n\n addAttributes() {\n return {\n id: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-id\"),\n renderHTML: (attributes) => {\n if (!attributes.id) return {};\n return { \"data-id\": attributes.id };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"loading\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"loading\",\n class: \"inline-flex items-center px-1.5 py-0.5 text-xs text-muted-foreground animate-pulse\",\n }),\n \"⏳\",\n ];\n },\n});\n","import { Extension, textInputRule } from \"@tiptap/core\";\n\nexport const SmilieReplacer = Extension.create({\n name: \"smilieReplacer\",\n\n addInputRules() {\n return [\n textInputRule({ find: /-___- $/, replace: \"😑 \" }),\n textInputRule({ find: /:'-\\) $/, replace: \"😂 \" }),\n textInputRule({ find: /':-\\) $/, replace: \"😅 \" }),\n textInputRule({ find: /':-D $/, replace: \"😅 \" }),\n textInputRule({ find: />:-\\) $/, replace: \"😆 \" }),\n textInputRule({ find: /-__- $/, replace: \"😑 \" }),\n textInputRule({ find: /':-\\( $/, replace: \"😓 \" }),\n textInputRule({ find: /:'-\\( $/, replace: \"😢 \" }),\n textInputRule({ find: />:-\\( $/, replace: \"😠 \" }),\n textInputRule({ find: /O:-\\) $/, replace: \"😇 \" }),\n textInputRule({ find: /:'\\) $/, replace: \"😂 \" }),\n textInputRule({ find: /:-D $/, replace: \"😃 \" }),\n textInputRule({ find: /':\\) $/, replace: \"😅 \" }),\n textInputRule({ find: /;-\\) $/, replace: \"😉 \" }),\n textInputRule({ find: /B-\\) $/, replace: \"😎 \" }),\n textInputRule({ find: /:-\\* $/, replace: \"😘 \" }),\n textInputRule({ find: /:-\\) $/, replace: \"🙂 \" }),\n textInputRule({ find: /-_- $/, replace: \"😑 \" }),\n textInputRule({ find: /:-O $/, replace: \"😮 \" }),\n textInputRule({ find: /:-P $/, replace: \"😛 \" }),\n textInputRule({ find: /:-p $/, replace: \"😛 \" }),\n textInputRule({ find: /:-\\/ $/, replace: \"😕 \" }),\n textInputRule({ find: /:-\\( $/, replace: \"😞 \" }),\n textInputRule({ find: /:'\\( $/, replace: \"😢 \" }),\n textInputRule({ find: /:D $/, replace: \"😃 \" }),\n textInputRule({ find: /=D $/, replace: \"😃 \" }),\n textInputRule({ find: /;\\) $/, replace: \"😉 \" }),\n textInputRule({ find: /B\\) $/, replace: \"😎 \" }),\n textInputRule({ find: /:\\) $/, replace: \"🙂 \" }),\n textInputRule({ find: /=\\) $/, replace: \"🙂 \" }),\n textInputRule({ find: /:O $/, replace: \"😮 \" }),\n textInputRule({ find: /:P $/, replace: \"😛 \" }),\n textInputRule({ find: /:p $/, replace: \"😛 \" }),\n textInputRule({ find: /:\\/ $/, replace: \"😕 \" }),\n textInputRule({ find: /:\\( $/, replace: \"😞 \" }),\n textInputRule({ find: /<3 $/, replace: \"❤️ \" }),\n textInputRule({ find: /<\\/3 $/, replace: \"💔 \" }),\n textInputRule({ find: /\\/shrug $/, replace: \"¯\\\\_(ツ)_/¯ \" }),\n ];\n },\n});\n","import { Extension } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nimport type { Node as ProsemirrorNode } from \"@tiptap/pm/model\";\n\nexport function findHexColors(doc: ProsemirrorNode): DecorationSet {\n const hexColorRegex = /(#[0-9a-fA-F]{3,8})\\b/g;\n const decorations: Decoration[] = [];\n\n doc.descendants((node, position) => {\n if (!node.text) return;\n\n let match: RegExpExecArray | null;\n while ((match = hexColorRegex.exec(node.text)) !== null) {\n const color = match[0];\n const from = position + match.index;\n const to = from + color.length;\n\n decorations.push(\n Decoration.inline(from, to, {\n class: \"color-highlight px-1 py-0.5 rounded text-xs font-mono border\",\n style: `--color: ${color}; background-color: ${color}20; border-color: ${color}; color: ${color};`,\n }),\n );\n }\n });\n\n return DecorationSet.create(doc, decorations);\n}\n\nexport const ColorHighlighter = Extension.create({\n name: \"colorHighlighter\",\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n state: {\n init(_, { doc }) {\n return findHexColors(doc);\n },\n apply(transaction, oldState) {\n return transaction.docChanged ? findHexColors(transaction.doc) : oldState;\n },\n },\n props: {\n decorations(state) {\n return (this as any).getState(state);\n },\n },\n }),\n ];\n },\n});\n","import { Extension } from \"@tiptap/core\";\nimport \"@tiptap/extension-text-style\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n fontSize: {\n setFontSize: (size: string) => ReturnType;\n unsetFontSize: () => ReturnType;\n };\n }\n}\n\nexport const FontSize = Extension.create({\n name: \"fontSize\",\n\n addOptions() {\n return {\n types: [\"textStyle\"],\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) =>\n element.style.fontSize.replace(/['\"]+/g, \"\"),\n renderHTML: (attributes) => {\n if (!attributes.fontSize) {\n return {};\n }\n return {\n style: `font-size: ${attributes.fontSize}`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setFontSize:\n (fontSize: string) =>\n ({ chain }) =>\n chain().setMark(\"textStyle\", { fontSize }).run(),\n unsetFontSize:\n () =>\n ({ chain }) =>\n chain()\n .setMark(\"textStyle\", { fontSize: null })\n .removeEmptyTextStyle()\n .run(),\n };\n },\n});\n\nexport default FontSize;\n","import {\n wrappingInputRule,\n markInputRule,\n type Extensions,\n} from \"@tiptap/core\";\nimport * as _StarterKit from \"@tiptap/starter-kit\";\nimport * as _Color from \"@tiptap/extension-color\";\nimport * as _Highlight from \"@tiptap/extension-highlight\";\nimport * as _Link from \"@tiptap/extension-link\";\nimport * as _TaskList from \"@tiptap/extension-task-list\";\nimport * as _TaskItem from \"@tiptap/extension-task-item\";\nimport * as _TextAlign from \"@tiptap/extension-text-align\";\nimport * as _TextStyle from \"@tiptap/extension-text-style\";\nimport * as _Typography from \"@tiptap/extension-typography\";\nimport * as _Underline from \"@tiptap/extension-underline\";\nimport * as _Placeholder from \"@tiptap/extension-placeholder\";\nimport * as _CharacterCount from \"@tiptap/extension-character-count\";\n\nconst resolveExt = (mod: any, name: string) =>\n mod?.[name] ||\n mod?.default?.[name] ||\n mod?.default?.default ||\n mod?.default ||\n mod;\n\nconst StarterKit = resolveExt(_StarterKit, \"StarterKit\");\nconst Color = resolveExt(_Color, \"Color\");\nconst Highlight = resolveExt(_Highlight, \"Highlight\");\nconst Link = resolveExt(_Link, \"Link\");\nconst TaskList = resolveExt(_TaskList, \"TaskList\");\nconst TaskItem = resolveExt(_TaskItem, \"TaskItem\");\nconst TextAlign = resolveExt(_TextAlign, \"TextAlign\");\nconst TextStyle = resolveExt(_TextStyle, \"TextStyle\");\nconst Typography = resolveExt(_Typography, \"Typography\");\nconst Underline = resolveExt(_Underline, \"Underline\");\nconst Placeholder = resolveExt(_Placeholder, \"Placeholder\");\nconst CharacterCount = resolveExt(_CharacterCount, \"CharacterCount\");\n\nimport { SmilieReplacer } from \"./SmilieReplacer\";\nimport { ColorHighlighter } from \"./ColorHighlighter\";\nimport { FontSize } from \"./FontSize\";\nimport { Mention, type MentionOptions } from \"./mention\";\nimport { Markdown, type MarkdownOptions } from \"./markdown\";\nimport { Image, type ImageOptions } from \"./image\";\n\nexport interface RichTextPresetOptions {\n placeholder?: string | ((props: { node: any }) => string);\n characterLimit?: number;\n openLinksOnClick?: boolean;\n enableSmilies?: boolean;\n enableColorHighlighter?: boolean;\n headingLevels?: (1 | 2 | 3 | 4 | 5 | 6)[];\n mention?: MentionOptions | boolean;\n markdown?: MarkdownOptions | boolean;\n image?: ImageOptions | boolean;\n}\n\n/**\n * Creates a standard rich-text extensions bundle with full formatting support.\n */\nexport function createRichTextPreset(\n options: RichTextPresetOptions = {},\n): Extensions {\n const {\n placeholder = \"Start typing...\",\n characterLimit,\n openLinksOnClick = false,\n enableSmilies = true,\n enableColorHighlighter = true,\n headingLevels = [1, 2, 3, 4],\n } = options;\n\n const extensions: Extensions = [\n StarterKit.configure({\n orderedList: {\n HTMLAttributes: {\n class: \"list-decimal pl-4\",\n },\n },\n bulletList: {\n HTMLAttributes: {\n class: \"list-disc pl-4\",\n },\n },\n heading: {\n levels: headingLevels,\n HTMLAttributes: {\n class: \"font-bold tracking-tight\",\n },\n },\n }),\n TextStyle,\n Color,\n Highlight.configure({ multicolor: true }),\n Underline,\n Typography,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Link.extend({\n addInputRules() {\n return [\n markInputRule({\n find: /(?:^|\\s)\\[([^\\]]+)\\]\\(([^)]+)\\)$/,\n type: this.type,\n getAttributes: (match) => ({\n href: match[2],\n }),\n }),\n ];\n },\n }).configure({\n openOnClick: openLinksOnClick,\n autolink: true,\n defaultProtocol: \"https\",\n protocols: [\"file\", \"vscode\", \"cursor\"],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n class: \"text-blue-500 underline underline-offset-2\",\n },\n }),\n TaskList,\n TaskItem.extend({\n addInputRules() {\n return [\n wrappingInputRule({\n find: /^\\s*(\\[([ |x])?\\])\\s$/i,\n type: this.type,\n getAttributes: (match) => ({\n checked: match[2]?.toLowerCase() === \"x\",\n }),\n }),\n ];\n },\n }).configure({\n nested: true,\n }),\n FontSize,\n Placeholder.configure({\n emptyEditorClass: \"is-empty\",\n placeholder:\n typeof placeholder === \"function\" ? placeholder : () => placeholder,\n }),\n ];\n\n if (characterLimit) {\n extensions.push(\n CharacterCount.configure({\n limit: characterLimit,\n }),\n );\n }\n\n if (enableSmilies) {\n extensions.push(SmilieReplacer);\n }\n\n if (enableColorHighlighter) {\n extensions.push(ColorHighlighter);\n }\n\n if (options.mention) {\n const mentionConfig =\n typeof options.mention === \"object\" ? options.mention : {};\n extensions.push(\n Mention.configure({\n HTMLAttributes: {\n class: \"pixerate-mention-node\",\n ...(mentionConfig.HTMLAttributes || {}),\n },\n ...mentionConfig,\n }),\n );\n }\n\n if (options.markdown) {\n const markdownConfig =\n typeof options.markdown === \"object\" ? options.markdown : {};\n extensions.push(\n Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: \"tight\",\n bulletListMarker: \"-\",\n linkify: true,\n breaks: true,\n transformPastedText: true,\n transformCopiedText: true,\n ...markdownConfig,\n }),\n );\n }\n\n if (options.image !== false) {\n const imageConfig =\n typeof options.image === \"object\" ? options.image : {};\n extensions.push(\n Image.configure({\n HTMLAttributes: {\n class: \"rounded-md max-w-full h-auto my-2\",\n ...(imageConfig.HTMLAttributes || {}),\n },\n ...imageConfig,\n }),\n );\n }\n\n return extensions;\n}\n","import {\n Mention as TipTapMention,\n type MentionOptions as TipTapMentionOptions,\n} from \"@tiptap/extension-mention\";\nimport type { SuggestionOptions } from \"@tiptap/suggestion\";\n\nexport interface MentionEntity {\n id: string;\n label: string;\n type?: string;\n avatarUrl?: string;\n color?: string;\n handle?: string;\n name?: string;\n hexColor?: string;\n aliases?: string[];\n [key: string]: any;\n}\n\nexport interface MentionOptions extends Partial<TipTapMentionOptions> {\n HTMLAttributes?: Record<string, any>;\n suggestion?: Partial<SuggestionOptions<MentionEntity>>;\n}\n\nconst BaseMention =\n TipTapMention ||\n (TipTapMention as any)?.default?.default ||\n (TipTapMention as any)?.default ||\n (TipTapMention as any);\n\n/**\n * First-class native Mention extension for @pixerate/editor.\n * Creates atomic inline <span data-type=\"mention\"> nodes with full suggestion support.\n */\nexport const Mention = BaseMention.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n type: {\n default: null,\n parseHTML: (element: HTMLElement) =>\n element.getAttribute(\"data-type-name\") ||\n element.getAttribute(\"data-entity-type\"),\n renderHTML: (attributes: Record<string, any>) => {\n if (!attributes.type) return {};\n return { \"data-type-name\": attributes.type };\n },\n },\n avatarUrl: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-avatar-url\"),\n renderHTML: (attributes: Record<string, any>) => {\n if (!attributes.avatarUrl) return {};\n return { \"data-avatar-url\": attributes.avatarUrl };\n },\n },\n color: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-color\"),\n renderHTML: (attributes: Record<string, any>) => {\n if (!attributes.color) return {};\n return { \"data-color\": attributes.color };\n },\n },\n };\n },\n});\n\n/**\n * Helper to configure the Mention extension with preset defaults.\n */\nexport function createMentionExtension(options: Partial<MentionOptions> = {}) {\n const { HTMLAttributes = {}, ...rest } = options;\n return Mention.configure({\n HTMLAttributes: {\n class: \"pixerate-mention-node\",\n ...HTMLAttributes,\n },\n ...rest,\n });\n}\n","import { Extension } from \"@tiptap/core\";\n\nexport const MarkdownTightLists = Extension.create({\n name: 'markdownTightLists',\n addOptions: () => ({\n tight: true,\n tightClass: 'tight',\n listTypes: [\n 'bulletList',\n 'orderedList',\n ],\n }),\n addGlobalAttributes() {\n return [\n {\n types: this.options.listTypes,\n attributes: {\n tight: {\n default: this.options.tight,\n parseHTML: element =>\n element.getAttribute('data-tight') === 'true' || !element.querySelector('p'),\n renderHTML: attributes => ({\n class: attributes.tight ? this.options.tightClass : null,\n 'data-tight': attributes.tight ? 'true' : null,\n }),\n },\n },\n },\n ]\n },\n addCommands() {\n return {\n toggleTight: (tight = null) => ({ editor, commands }) => {\n function toggleTight(name) {\n if(!editor.isActive(name)) {\n return false;\n }\n const attrs = editor.getAttributes(name);\n return commands.updateAttributes(name, {\n tight: tight ?? !attrs?.tight,\n });\n }\n return this.options.listTypes\n .some(name => toggleTight(name));\n }\n }\n },\n});\n","import markdownit from 'markdown-it';\n\nconst md = markdownit();\n\nfunction scanDelims(text, pos) {\n md.inline.State.prototype.scanDelims.call({ src: text, posMax: text.length })\n const state = new (md.inline.State)(text, null, null, []);\n return state.scanDelims(pos, true);\n}\n\nexport function shiftDelim(text, delim, start, offset) {\n let res = text.substring(0, start) + text.substring(start + delim.length);\n res = res.substring(0, start + offset) + delim + res.substring(start + offset);\n return res;\n}\n\nfunction trimStart(text, delim, from, to) {\n let pos = from, res = text;\n while(pos < to) {\n if(scanDelims(res, pos).can_open) {\n break;\n }\n res = shiftDelim(res, delim, pos, 1);\n pos++;\n }\n return { text: res, from: pos, to }\n}\n\nfunction trimEnd(text, delim, from, to) {\n let pos = to, res = text;\n while(pos > from) {\n if(scanDelims(res, pos).can_close) {\n break;\n }\n res = shiftDelim(res, delim, pos, -1);\n pos--;\n }\n return { text: res, from, to: pos }\n}\n\nexport function trimInline(text, delim, from, to) {\n let state = {\n text,\n from,\n to,\n }\n\n state = trimStart(state.text, delim, state.from, state.to);\n state = trimEnd(state.text, delim, state.from, state.to);\n\n if(state.to - state.from < delim.length + 1) {\n state.text = state.text.substring(0, state.from) + state.text.substring(state.to + delim.length);\n }\n\n return state.text;\n}\n","import { MarkdownSerializerState as BaseMarkdownSerializerState } from \"prosemirror-markdown\";\nimport { trimInline } from \"../util/markdown\";\n\n\n/**\n * Override default MarkdownSerializerState to:\n * - handle commonmark delimiters (https://spec.commonmark.org/0.29/#left-flanking-delimiter-run)\n */\nexport class MarkdownSerializerState extends BaseMarkdownSerializerState {\n\n inTable = false;\n\n constructor(nodes, marks, options) {\n super(nodes, marks, options ?? {});\n this.inlines = [];\n }\n\n render(node, parent, index) {\n super.render(node, parent, index);\n const top = this.inlines[this.inlines.length - 1];\n if(top?.start && top?.end) {\n const { delimiter, start, end } = this.normalizeInline(top);\n this.out = trimInline(this.out, delimiter, start, end);\n this.inlines.pop();\n }\n }\n\n markString(mark, open, parent, index) {\n const info = this.marks[mark.type.name]\n if(info.expelEnclosingWhitespace) {\n if(open) {\n this.inlines.push({\n start: this.out.length,\n delimiter: info.open,\n });\n } else {\n const top = this.inlines.pop();\n this.inlines.push({\n ...top,\n end: this.out.length,\n });\n }\n }\n return super.markString(mark, open, parent, index);\n }\n\n normalizeInline(inline) {\n let { start, end } = inline;\n while(this.out.charAt(start).match(/\\s/)) {\n start++;\n }\n return {\n ...inline,\n start,\n }\n }\n}\n","import { Fragment } from \"@tiptap/pm/model\";\nimport { getHTMLFromFragment, Mark } from \"@tiptap/core\";\n\n\nexport default Mark.create({\n name: 'markdownHTMLMark',\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: {\n open(state, mark) {\n if(!this.editor.storage.markdown.options.html) {\n console.warn(`Tiptap Markdown: \"${mark.type.name}\" mark is only available in html mode`);\n return '';\n }\n return getMarkTags(mark)?.[0] ?? '';\n },\n close(state, mark) {\n if(!this.editor.storage.markdown.options.html) {\n return '';\n }\n return getMarkTags(mark)?.[1] ?? '';\n },\n },\n parse: {\n // handled by markdown-it\n }\n }\n }\n }\n});\n\nfunction getMarkTags(mark) {\n const schema = mark.type.schema;\n const node = schema.text(' ', [mark]);\n const html = getHTMLFromFragment(Fragment.from(node), schema);\n const match = html.match(/^(<.*?>) (<\\/.*?>)$/);\n return match ? [match[1], match[2]] : null;\n}\n","\n\nexport function elementFromString(value) {\n // add a wrapper to preserve leading and trailing whitespace\n const wrappedValue = `<body>${value}</body>`\n\n return new window.DOMParser().parseFromString(wrappedValue, 'text/html').body\n}\n\nexport function escapeHTML(value) {\n return value\n ?.replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nexport function extractElement(node) {\n const parent = node.parentElement;\n const prepend = parent.cloneNode();\n\n while(parent.firstChild && parent.firstChild !== node) {\n prepend.appendChild(parent.firstChild);\n }\n\n if(prepend.childNodes.length > 0) {\n parent.parentElement.insertBefore(prepend, parent);\n }\n parent.parentElement.insertBefore(node, parent);\n if(parent.childNodes.length === 0) {\n parent.remove();\n }\n}\n\nexport function unwrapElement(node) {\n const parent = node.parentNode;\n\n while (node.firstChild) parent.insertBefore(node.firstChild, node);\n\n parent.removeChild(node);\n}\n","import { Fragment } from \"@tiptap/pm/model\";\nimport { getHTMLFromFragment, Node } from \"@tiptap/core\";\nimport { elementFromString } from \"../../util/dom\";\n\n\nexport default Node.create({\n name: 'markdownHTMLNode',\n addStorage() {\n return {\n markdown: {\n serialize(state, node, parent) {\n if(this.editor.storage.markdown.options.html) {\n state.write(serializeHTML(node, parent));\n } else {\n console.warn(`Tiptap Markdown: \"${node.type.name}\" node is only available in html mode`);\n state.write(`[${node.type.name}]`);\n }\n if(node.isBlock) {\n state.closeBlock(node);\n }\n },\n parse: {\n // handled by markdown-it\n },\n },\n }\n }\n});\n\nfunction serializeHTML(node, parent) {\n const schema = node.type.schema;\n const html = getHTMLFromFragment(Fragment.from(node), schema);\n\n if(node.isBlock && (parent instanceof Fragment || parent.type.name === schema.topNodeType.name)) {\n return formatBlock(html);\n }\n\n return html;\n}\n\n/**\n * format html block as per the commonmark spec\n */\nfunction formatBlock(html) {\n const dom = elementFromString(html);\n const element = dom.firstElementChild;\n\n element.innerHTML = element.innerHTML.trim()\n ? `\\n${element.innerHTML}\\n`\n : `\\n`;\n\n return element.outerHTML;\n}\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Blockquote = Node.create({\n name: 'blockquote',\n});\n\nexport default Blockquote.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.blockquote,\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\n\n\nconst BulletList = Node.create({\n name: 'bulletList',\n});\n\nexport default BulletList.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node) {\n return state.renderList(node, \" \", () => (this.editor.storage.markdown.options.bulletListMarker || \"-\") + \" \");\n },\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\n\n\nconst CodeBlock = Node.create({\n name: 'codeBlock',\n});\n\nexport default CodeBlock.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node) {\n state.write(\"```\" + (node.attrs.language || \"\") + \"\\n\");\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(\"```\");\n state.closeBlock(node);\n },\n parse: {\n setup(markdownit) {\n markdownit.set({\n langPrefix: this.options.languageClassPrefix ?? 'language-',\n });\n },\n updateDOM(element) {\n element.innerHTML = element.innerHTML.replace(/\\n<\\/code><\\/pre>/g, '</code></pre>')\n },\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport HTMLNode from './html';\n\nconst HardBreak = Node.create({\n name: 'hardBreak',\n});\n\nexport default HardBreak.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++)\n if (parent.child(i).type != node.type) {\n state.write(\n state.inTable\n ? HTMLNode.storage.markdown.serialize.call(this, state, node, parent)\n : \"\\\\\\n\"\n );\n return;\n }\n },\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Heading = Node.create({\n name: 'heading',\n});\n\nexport default Heading.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.heading,\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst HorizontalRule = Node.create({\n name: 'horizontalRule',\n});\n\nexport default HorizontalRule.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.horizontal_rule,\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Image = Node.create({\n name: 'image',\n});\n\nexport default Image.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.image,\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst ListItem = Node.create({\n name: 'listItem',\n});\n\nexport default ListItem.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.list_item,\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\n\n\nconst OrderedList = Node.create({\n name: 'orderedList',\n});\n\nfunction findIndexOfAdjacentNode(node, parent, index) {\n let i = 0;\n for (; index - i > 0; i++) {\n if (parent.child(index - i - 1).type.name !== node.type.name) {\n break;\n }\n }\n return i;\n}\n\nexport default OrderedList.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node, parent, index) {\n const start = node.attrs.start || 1\n const maxW = String(start + node.childCount - 1).length\n const space = state.repeat(\" \", maxW + 2)\n const adjacentIndex = findIndexOfAdjacentNode(node, parent, index);\n const separator = adjacentIndex % 2 ? ') ' : '. ';\n state.renderList(node, space, i => {\n const nStr = String(start + i)\n return state.repeat(\" \", maxW - nStr.length) + nStr + separator;\n })\n },\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Paragraph = Node.create({\n name: 'paragraph',\n});\n\nexport default Paragraph.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.nodes.paragraph,\n parse: {\n // handled by markdown-it\n },\n },\n }\n }\n});\n","\n\nexport function childNodes(node) {\n return node?.content?.content ?? [];\n}\n","import { Node } from \"@tiptap/core\";\nimport { childNodes } from \"../../util/prosemirror\";\nimport HTMLNode from './html';\n\nconst Table = Node.create({\n name: 'table',\n});\n\nexport default Table.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node, parent) {\n if(!isMarkdownSerializable(node)) {\n HTMLNode.storage.markdown.serialize.call(this, state, node, parent);\n return;\n }\n state.inTable = true;\n node.forEach((row, p, i) => {\n state.write('| ');\n row.forEach((col, p, j) => {\n if(j) {\n state.write(' | ');\n }\n const cellContent = col.firstChild;\n if(cellContent.textContent.trim()) {\n state.renderInline(cellContent);\n }\n });\n state.write(' |')\n state.ensureNewLine();\n if(!i) {\n const delimiterRow = Array.from({length: row.childCount}).map(() => '---').join(' | ');\n state.write(`| ${delimiterRow} |`);\n state.ensureNewLine();\n }\n });\n state.closeBlock(node);\n state.inTable = false;\n },\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n})\n\n\nfunction hasSpan(node) {\n return node.attrs.colspan > 1 || node.attrs.rowspan > 1;\n}\n\nfunction isMarkdownSerializable(node) {\n const rows = childNodes(node);\n const firstRow = rows[0];\n const bodyRows = rows.slice(1);\n\n if(childNodes(firstRow).some(cell => cell.type.name !== 'tableHeader' || hasSpan(cell) || cell.childCount > 1)) {\n return false;\n }\n\n if(bodyRows.some(row =>\n childNodes(row).some(cell => cell.type.name === 'tableHeader' || hasSpan(cell) || cell.childCount > 1)\n )) {\n return false;\n }\n\n return true;\n}\n","import { Node } from \"@tiptap/core\";\n\n\nconst TaskItem = Node.create({\n name: 'taskItem',\n});\n\nexport default TaskItem.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node) {\n const check = node.attrs.checked ? '[x]' : '[ ]';\n state.write(`${check} `);\n state.renderContent(node);\n },\n parse: {\n updateDOM(element) {\n [...element.querySelectorAll('.task-list-item')]\n .forEach(item => {\n const input = item.querySelector('input');\n item.setAttribute('data-type', 'taskItem');\n if(input) {\n item.setAttribute('data-checked', input.checked);\n input.remove();\n }\n });\n },\n }\n }\n }\n }\n});\n","import taskListPlugin from \"markdown-it-task-lists\";\nimport { Node } from \"@tiptap/core\";\nimport BulletList from \"./bullet-list\";\n\n\nconst TaskList = Node.create({\n name: 'taskList',\n});\n\nexport default TaskList.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: BulletList.storage.markdown.serialize,\n parse: {\n setup(markdownit) {\n markdownit.use(taskListPlugin);\n },\n updateDOM(element) {\n [...element.querySelectorAll('.contains-task-list')]\n .forEach(list => {\n list.setAttribute('data-type', 'taskList');\n });\n },\n }\n }\n }\n }\n});\n","import { Node } from \"@tiptap/core\";\nimport { escapeHTML } from \"../../util/dom\";\n\n\nconst Text = Node.create({\n name: 'text',\n});\n\nexport default Text.extend({\n /**\n * @return {{markdown: MarkdownNodeSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize(state, node) {\n state.text(escapeHTML(node.text));\n },\n parse: {\n // handled by markdown-it\n },\n }\n }\n }\n});\n","import { Mark } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Bold = Mark.create({\n name: 'bold',\n});\n\nexport default Bold.extend({\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.marks.strong,\n parse: {\n // handled by markdown-it\n }\n },\n }\n }\n});\n","import { Mark } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Code = Mark.create({\n name: 'code',\n});\n\nexport default Code.extend({\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.marks.code,\n parse: {\n // handled by markdown-it\n }\n }\n }\n }\n})\n","import { Mark } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Italic = Mark.create({\n name: 'italic',\n});\n\nexport default Italic.extend({\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.marks.em,\n parse: {\n // handled by markdown-it\n }\n }\n }\n }\n})\n","import { Mark } from \"@tiptap/core\";\nimport { defaultMarkdownSerializer } from \"prosemirror-markdown\";\n\n\nconst Link = Mark.create({\n name: 'link',\n});\n\nexport default Link.extend({\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: defaultMarkdownSerializer.marks.link,\n parse: {\n // handled by markdown-it\n }\n }\n }\n }\n})\n","import { Mark } from \"@tiptap/core\";\n\n\nconst Strike = Mark.create({\n name: 'strike',\n});\n\nexport default Strike.extend({\n /**\n * @return {{markdown: MarkdownMarkSpec}}\n */\n addStorage() {\n return {\n markdown: {\n serialize: {open: '~~', close: '~~', expelEnclosingWhitespace: true},\n parse: {\n // handled by markdown-it\n },\n },\n }\n }\n});\n","import Blockquote from \"./nodes/blockquote\";\nimport BulletList from \"./nodes/bullet-list\";\nimport CodeBlock from \"./nodes/code-block\";\nimport HardBreak from \"./nodes/hard-break\";\nimport Heading from \"./nodes/heading\";\nimport HorizontalRule from \"./nodes/horizontal-rule\";\nimport HTMLNode from \"./nodes/html\";\nimport Image from \"./nodes/image\";\nimport ListItem from \"./nodes/list-item\";\nimport OrderedList from \"./nodes/ordered-list\";\nimport Paragraph from \"./nodes/paragraph\";\nimport Table from \"./nodes/table\";\nimport TaskItem from \"./nodes/task-item\";\nimport TaskList from \"./nodes/task-list\";\nimport Text from \"./nodes/text\";\n\nimport Bold from \"./marks/bold\";\nimport Code from \"./marks/code\";\nimport HTMLMark from \"./marks/html\";\nimport Italic from \"./marks/italic\";\nimport Link from \"./marks/link\";\nimport Strike from \"./marks/strike\";\n\n\nexport default [\n Blockquote,\n BulletList,\n CodeBlock,\n HardBreak,\n Heading,\n HorizontalRule,\n HTMLNode,\n Image,\n ListItem,\n OrderedList,\n Paragraph,\n Table,\n TaskItem,\n TaskList,\n Text,\n\n Bold,\n Code,\n HTMLMark,\n Italic,\n Link,\n Strike,\n]\n","import markdownExtensions from \"../extensions\";\n\n\nexport function getMarkdownSpec(extension) {\n const markdownSpec = extension.storage?.markdown;\n const defaultMarkdownSpec = markdownExtensions.find(e => e.name === extension.name)?.storage.markdown;\n\n if(markdownSpec || defaultMarkdownSpec) {\n return {\n ...defaultMarkdownSpec,\n ...markdownSpec,\n };\n }\n\n return null;\n}\n","import { MarkdownSerializerState } from './state';\nimport HTMLMark from \"../extensions/marks/html\";\nimport HTMLNode from \"../extensions/nodes/html\";\nimport { getMarkdownSpec } from \"../util/extensions\";\nimport HardBreak from \"../extensions/nodes/hard-break\";\n\n\nexport class MarkdownSerializer {\n /**\n * @type {import('@tiptap/core').Editor}\n */\n editor = null;\n\n constructor(editor) {\n this.editor = editor;\n }\n\n serialize(content) {\n const state = new MarkdownSerializerState(this.nodes, this.marks, {\n hardBreakNodeName: HardBreak.name,\n });\n\n state.renderContent(content);\n\n return state.out;\n }\n\n get nodes() {\n return {\n ...Object.fromEntries(\n Object.keys(this.editor.schema.nodes)\n .map(name => [name, this.serializeNode(HTMLNode)])\n ),\n ...Object.fromEntries(\n this.editor.extensionManager.extensions\n .filter(extension => extension.type === 'node' && this.serializeNode(extension))\n .map(extension => [extension.name, this.serializeNode(extension)])\n ?? []\n ),\n };\n }\n\n get marks() {\n return {\n ...Object.fromEntries(\n Object.keys(this.editor.schema.marks)\n .map(name => [name, this.serializeMark(HTMLMark)])\n ),\n ...Object.fromEntries(\n this.editor.extensionManager.extensions\n .filter(extension => extension.type === 'mark' && this.serializeMark(extension))\n .map(extension => [extension.name, this.serializeMark(extension)])\n ?? []\n ),\n };\n }\n\n serializeNode(node) {\n return getMarkdownSpec(node)?.serialize?.bind({ editor: this.editor, options: node.options });\n }\n\n serializeMark(mark) {\n const serialize = getMarkdownSpec(mark)?.serialize;\n return serialize\n ? {\n ...serialize,\n open: typeof serialize.open === 'function' ? serialize.open.bind({ editor: this.editor, options: mark.options }) : serialize.open,\n close: typeof serialize.close === 'function' ? serialize.close.bind({ editor: this.editor, options: mark.options }) : serialize.close,\n }\n : null\n }\n}\n\n","import markdownit from \"markdown-it\";\nimport { elementFromString, extractElement, unwrapElement } from \"../util/dom\";\nimport { getMarkdownSpec } from \"../util/extensions\";\n\nexport class MarkdownParser {\n /**\n * @type {import('@tiptap/core').Editor}\n */\n editor = null;\n /**\n * @type {markdownit}\n */\n md = null;\n\n constructor(editor, { html, linkify, breaks }) {\n this.editor = editor;\n this.md = this.withPatchedRenderer(markdownit({\n html,\n linkify,\n breaks,\n }));\n }\n\n parse(content, { inline } = {}) {\n if(typeof content === 'string') {\n this.editor.extensionManager.extensions.forEach(extension =>\n getMarkdownSpec(extension)?.parse?.setup?.call({ editor:this.editor, options:extension.options }, this.md)\n );\n\n const renderedHTML = this.md.render(content);\n const element = elementFromString(renderedHTML);\n\n this.editor.extensionManager.extensions.forEach(extension =>\n getMarkdownSpec(extension)?.parse?.updateDOM?.call({ editor:this.editor, options:extension.options }, element)\n );\n\n this.normalizeDOM(element, { inline, content });\n\n return element.innerHTML;\n }\n\n return content;\n }\n\n normalizeDOM(node, { inline, content }) {\n this.normalizeBlocks(node);\n\n // remove all \\n appended by markdown-it\n node.querySelectorAll('*').forEach(el => {\n if(el.nextSibling?.nodeType === Node.TEXT_NODE && !el.closest('pre')) {\n el.nextSibling.textContent = el.nextSibling.textContent.replace(/^\\n/, '');\n }\n });\n\n if(inline) {\n this.normalizeInline(node, content);\n }\n\n return node;\n }\n\n normalizeBlocks(node) {\n const blocks = Object.values(this.editor.schema.nodes)\n .filter(node => node.isBlock);\n\n const selector = blocks\n .map(block => block.spec.parseDOM?.map(spec => spec.tag))\n .flat()\n .filter(Boolean)\n .join(',');\n\n if(!selector) {\n return;\n }\n\n [...node.querySelectorAll(selector)].forEach(el => {\n if(el.parentElement.matches('p')) {\n extractElement(el);\n }\n });\n }\n\n normalizeInline(node, content) {\n if(node.firstElementChild?.matches('p')) {\n const firstParagraph = node.firstElementChild;\n const { nextElementSibling } = firstParagraph;\n const startSpaces = content.match(/^\\s+/)?.[0] ?? '';\n const endSpaces = !nextElementSibling\n ? content.match(/\\s+$/)?.[0] ?? ''\n : '';\n\n if(content.match(/^\\n\\n/)) {\n firstParagraph.innerHTML = `${firstParagraph.innerHTML}${endSpaces}`;\n return;\n }\n\n unwrapElement(firstParagraph);\n\n node.innerHTML = `${startSpaces}${node.innerHTML}${endSpaces}`;\n }\n }\n\n /**\n * @param {markdownit} md\n */\n withPatchedRenderer(md) {\n const withoutNewLine = (renderer) => (...args) => {\n const rendered = renderer(...args);\n if(rendered === '\\n') {\n return rendered; // keep soft breaks\n }\n if(rendered[rendered.length - 1] === '\\n') {\n return rendered.slice(0, -1);\n }\n return rendered;\n }\n\n md.renderer.rules.hardbreak = withoutNewLine(md.renderer.rules.hardbreak);\n md.renderer.rules.softbreak = withoutNewLine(md.renderer.rules.softbreak);\n md.renderer.rules.fence = withoutNewLine(md.renderer.rules.fence);\n md.renderer.rules.code_block = withoutNewLine(md.renderer.rules.code_block);\n md.renderer.renderToken = withoutNewLine(md.renderer.renderToken.bind(md.renderer));\n\n return md;\n }\n}\n\n","import { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { DOMParser } from '@tiptap/pm/model';\nimport { elementFromString } from \"../../util/dom\";\n\nexport const MarkdownClipboard = Extension.create({\n name: 'markdownClipboard',\n addOptions() {\n return {\n transformPastedText: false,\n transformCopiedText: false,\n }\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('markdownClipboard'),\n props: {\n clipboardTextParser: (text, context, plainText) => {\n if(plainText || !this.options.transformPastedText) {\n return null; // pasting with shift key prevents formatting\n }\n const parsed = this.editor.storage.markdown.parser.parse(text, { inline: true });\n return DOMParser.fromSchema(this.editor.schema)\n .parseSlice(elementFromString(parsed), {\n preserveWhitespace: true,\n context,\n });\n },\n /**\n * @param {import('prosemirror-model').Slice} slice\n */\n clipboardTextSerializer: (slice) => {\n if(!this.options.transformCopiedText) {\n return null;\n }\n return this.editor.storage.markdown.serializer.serialize(slice.content);\n },\n },\n })\n ]\n }\n})\n","import { Extension, extensions } from '@tiptap/core';\nimport { MarkdownTightLists } from \"./extensions/tiptap/tight-lists\";\nimport { MarkdownSerializer } from \"./serialize/MarkdownSerializer\";\nimport { MarkdownParser } from \"./parse/MarkdownParser\";\nimport { MarkdownClipboard } from \"./extensions/tiptap/clipboard\";\n\nexport const Markdown = Extension.create({\n name: 'markdown',\n priority: 50,\n addOptions() {\n return {\n html: true,\n tightLists: true,\n tightListClass: 'tight',\n bulletListMarker: '-',\n linkify: false,\n breaks: false,\n transformPastedText: false,\n transformCopiedText: false,\n }\n },\n addCommands() {\n const commands = extensions.Commands.config.addCommands();\n return {\n setContent: (content, emitUpdate, parseOptions) => (props) => {\n return commands.setContent(\n props.editor.storage.markdown.parser.parse(content),\n emitUpdate,\n parseOptions\n )(props);\n },\n insertContentAt: (range, content, options) => (props) => {\n return commands.insertContentAt(\n range,\n props.editor.storage.markdown.parser.parse(content, { inline: true }),\n options\n )(props);\n },\n }\n },\n onBeforeCreate() {\n this.editor.storage.markdown = {\n options: { ...this.options },\n parser: new MarkdownParser(this.editor, this.options),\n serializer: new MarkdownSerializer(this.editor),\n getMarkdown: () => {\n return this.editor.storage.markdown.serializer.serialize(this.editor.state.doc);\n },\n }\n this.editor.options.initialContent = this.editor.options.content;\n this.editor.options.content = this.editor.storage.markdown.parser.parse(this.editor.options.content);\n },\n onCreate() {\n this.editor.options.content = this.editor.options.initialContent;\n delete this.editor.options.initialContent;\n },\n addStorage() {\n return {\n /// storage will be defined in onBeforeCreate() to prevent initial object overriding\n }\n },\n addExtensions() {\n return [\n MarkdownTightLists.configure({\n tight: this.options.tightLists,\n tightClass: this.options.tightListClass,\n }),\n MarkdownClipboard.configure({\n transformPastedText: this.options.transformPastedText,\n transformCopiedText: this.options.transformCopiedText,\n }),\n ]\n },\n});\n","import {\n Markdown as TipTapMarkdown,\n type MarkdownOptions as TipTapMarkdownOptions,\n} from \"tiptap-markdown\";\n\nconst resolveExt = (mod: any, name: string) =>\n mod?.[name] ||\n mod?.default?.[name] ||\n mod?.default?.default ||\n mod?.default ||\n mod;\n\n/**\n * Built-in native Markdown extension for @pixerate/editor based on tiptap-markdown.\n * Enables automatic markdown parsing, serialization, and clipboard handling.\n */\nexport const Markdown = resolveExt(TipTapMarkdown, \"Markdown\");\n\nexport type { TipTapMarkdownOptions as MarkdownOptions };\n","import * as _Image from \"@tiptap/extension-image\";\nimport type { ImageOptions as TipTapImageOptions } from \"@tiptap/extension-image\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\n\nconst resolveExt = (mod: any, name: string) =>\n mod?.[name] ||\n mod?.default?.[name] ||\n mod?.default?.default ||\n mod?.default ||\n mod;\n\nconst BaseImage = resolveExt(_Image, \"Image\");\n\nexport interface ImageOptions extends Partial<TipTapImageOptions> {\n /**\n * Custom upload handler called when an image is pasted or dropped.\n * Resolves to the uploaded image URL string.\n */\n upload?: (file: File) => Promise<string> | string;\n\n /**\n * Callback invoked if the upload handler throws or rejects, or if an image\n * exceeds maxBase64Size when no upload handler is configured.\n */\n onUploadError?: (error: Error, file: File) => void;\n\n /**\n * Maximum allowed file size (in bytes) when embedding images as base64 data URLs\n * without an upload handler. Defaults to 65536 (64 KB).\n * Files larger than this will be rejected to avoid memory bloat and prompt/stream saturation.\n */\n maxBase64Size?: number;\n\n /**\n * Whether to enable automatic image pasting from clipboard. Defaults to true.\n */\n enablePaste?: boolean;\n\n /**\n * Whether to enable automatic image drop. Defaults to true.\n */\n enableDrop?: boolean;\n}\n\nexport const imagePastePluginKey = new PluginKey(\"imagePasteHandler\");\n\n/**\n * Inserts an image node into the editor view at the current selection.\n */\nexport function insertImageNode(view: any, src: string, alt?: string) {\n const { schema } = view.state;\n const imageType = schema.nodes.image;\n if (!imageType) return;\n const node = imageType.create({ src, alt: alt || \"\" });\n const tr = view.state.tr.replaceSelectionWith(node);\n view.dispatch(tr);\n}\n\n/**\n * Updates an existing image node's src attribute across document positions.\n */\nexport function updateImageSrc(view: any, oldSrc: string, newSrc: string) {\n const { doc } = view.state;\n let foundPos: number | null = null;\n let foundAttrs: any = null;\n\n doc.descendants((node: any, pos: number) => {\n if (node.type.name === \"image\" && node.attrs.src === oldSrc) {\n foundPos = pos;\n foundAttrs = node.attrs;\n return false;\n }\n });\n\n if (foundPos !== null && foundAttrs) {\n const tr = view.state.tr.setNodeMarkup(foundPos, undefined, {\n ...foundAttrs,\n src: newSrc,\n });\n view.dispatch(tr);\n }\n}\n\n/**\n * Removes an existing image node matching src attribute across document positions.\n */\nexport function removeImageNode(view: any, src: string) {\n const { doc } = view.state;\n let foundPos: number | null = null;\n let nodeSize = 0;\n\n doc.descendants((node: any, pos: number) => {\n if (node.type.name === \"image\" && node.attrs.src === src) {\n foundPos = pos;\n nodeSize = node.nodeSize;\n return false;\n }\n });\n\n if (foundPos !== null) {\n const tr = view.state.tr.delete(foundPos, foundPos + nodeSize);\n view.dispatch(tr);\n }\n}\n\n/**\n * Handles inserting a pasted or dropped image file, supporting both async upload\n * handlers and direct base64/object-URL fallbacks.\n */\nexport function handleImageInsertion(\n view: any,\n file: File,\n options: ImageOptions,\n) {\n if (typeof options.upload === \"function\") {\n // Generate temporary preview URL if browser supports object URLs\n const hasObjectUrl =\n typeof URL !== \"undefined\" && typeof URL.createObjectURL === \"function\";\n const tempUrl = hasObjectUrl ? URL.createObjectURL(file) : null;\n\n if (tempUrl) {\n insertImageNode(view, tempUrl, file.name);\n }\n\n Promise.resolve(options.upload(file))\n .then((uploadedUrl) => {\n if (!uploadedUrl) {\n throw new Error(\"Upload handler returned empty URL\");\n }\n if (tempUrl) {\n updateImageSrc(view, tempUrl, uploadedUrl);\n if (typeof URL.revokeObjectURL === \"function\") {\n URL.revokeObjectURL(tempUrl);\n }\n } else {\n insertImageNode(view, uploadedUrl, file.name);\n }\n })\n .catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n console.error(\"Failed to upload pasted image:\", error);\n if (tempUrl) {\n removeImageNode(view, tempUrl);\n if (typeof URL.revokeObjectURL === \"function\") {\n URL.revokeObjectURL(tempUrl);\n }\n }\n if (typeof options.onUploadError === \"function\") {\n options.onUploadError(error, file);\n }\n });\n } else if (options.allowBase64 !== false) {\n const maxBase64Size = options.maxBase64Size ?? 65536; // 64KB default\n if (file.size > maxBase64Size) {\n const err = new Error(\n `Image size (${Math.round(file.size / 1024)}KB) exceeds maxBase64Size (${Math.round(\n maxBase64Size / 1024,\n )}KB). Provide an upload handler to support large images.`,\n );\n console.warn(`[Editor] ${err.message}`);\n if (typeof options.onUploadError === \"function\") {\n options.onUploadError(err, file);\n }\n return;\n }\n\n if (typeof FileReader !== \"undefined\") {\n const reader = new FileReader();\n reader.onload = () => {\n const src = reader.result as string;\n if (src) {\n insertImageNode(view, src, file.name);\n }\n };\n reader.readAsDataURL(file);\n }\n }\n}\n\nexport const Image = BaseImage.extend({\n addOptions() {\n return {\n ...this.parent?.(),\n allowBase64: true,\n maxBase64Size: 65536,\n enablePaste: true,\n enableDrop: true,\n upload: undefined,\n onUploadError: undefined,\n HTMLAttributes: {\n class: \"rounded-md max-w-full h-auto my-2\",\n },\n };\n },\n\n addProseMirrorPlugins() {\n const parentPlugins = this.parent?.() || [];\n const options = this.options as ImageOptions;\n\n if (!options.enablePaste && !options.enableDrop) {\n return parentPlugins;\n }\n\n const pastePlugin = new Plugin({\n key: imagePastePluginKey,\n props: {\n handlePaste(view, event) {\n if (!options.enablePaste) return false;\n const items = Array.from(event.clipboardData?.items || []);\n const imageItems = items.filter(\n (item) => item.kind === \"file\" && item.type.startsWith(\"image/\"),\n );\n if (imageItems.length === 0) return false;\n\n event.preventDefault();\n\n for (const item of imageItems) {\n const file = item.getAsFile();\n if (!file) continue;\n handleImageInsertion(view, file, options);\n }\n return true;\n },\n handleDrop(view, event) {\n if (!options.enableDrop) return false;\n const files = Array.from(event.dataTransfer?.files || []);\n const imageFiles = files.filter((f) => f.type.startsWith(\"image/\"));\n if (imageFiles.length === 0) return false;\n\n event.preventDefault();\n\n for (const file of imageFiles) {\n handleImageInsertion(view, file, options);\n }\n return true;\n },\n },\n });\n\n return [...parentPlugins, pastePlugin];\n },\n});\n"],"mappings":"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","names":["Plugin","Extension","Node","Extension","Extension","Plugin","Decoration","DecorationSet","Extension","MarkdownTightLists","Extension","create","name","addOptions","tight","tightClass","listTypes","addGlobalAttributes","types","options","attributes","default","parseHTML","element","getAttribute","querySelector","renderHTML","class","addCommands","_this","toggleTight","arguments","length","undefined","_ref","editor","commands","isActive","attrs","getAttributes","updateAttributes","some","md","markdownit","scanDelims","text","pos","inline","State","prototype","call","src","posMax","state","shiftDelim","delim","start","offset","res","substring","trimStart","from","to","can_open","trimEnd","can_close","trimInline","MarkdownSerializerState","BaseMarkdownSerializerState","constructor","nodes","marks","inTable","inlines","render","node","parent","index","top","end","delimiter","normalizeInline","out","pop","markString","mark","open","info","type","expelEnclosingWhitespace","push","charAt","match","Mark","addStorage","markdown","serialize","_getMarkTags$","_getMarkTags","storage","html","console","warn","getMarkTags","close","_getMarkTags$2","_getMarkTags2","parse","schema","getHTMLFromFragment","Fragment","elementFromString","value","wrappedValue","window","DOMParser","parseFromString","body","escapeHTML","replace","extractElement","parentElement","prepend","cloneNode","firstChild","appendChild","childNodes","insertBefore","remove","unwrapElement","parentNode","removeChild","Node","write","serializeHTML","isBlock","closeBlock","topNodeType","formatBlock","dom","firstElementChild","innerHTML","trim","outerHTML","Blockquote","extend","defaultMarkdownSerializer","blockquote","BulletList","renderList","bulletListMarker","CodeBlock","language","textContent","ensureNewLine","setup","_this$options$languag","set","langPrefix","languageClassPrefix","updateDOM","HardBreak","i","childCount","child","HTMLNode","Heading","heading","HorizontalRule","horizontal_rule","Image","image","ListItem","list_item","OrderedList","findIndexOfAdjacentNode","maxW","String","space","repeat","adjacentIndex","separator","nStr","Paragraph","paragraph","_node$content$content","_node$content","content","Table","isMarkdownSerializable","forEach","row","p","col","j","cellContent","renderInline","delimiterRow","Array","map","join","hasSpan","colspan","rowspan","rows","firstRow","bodyRows","slice","cell","TaskItem","check","checked","renderContent","querySelectorAll","item","input","setAttribute","TaskList","use","taskListPlugin","list","Text","Bold","strong","Code","code","Italic","em","Link","link","Strike","HTMLMark","getMarkdownSpec","extension","_extension$storage","_markdownExtensions$f","markdownSpec","defaultMarkdownSpec","markdownExtensions","find","e","MarkdownSerializer","hardBreakNodeName","_this$editor$extensio","Object","fromEntries","keys","serializeNode","extensionManager","extensions","filter","_this$editor$extensio2","serializeMark","_getMarkdownSpec","bind","_getMarkdownSpec2","MarkdownParser","linkify","breaks","withPatchedRenderer","renderedHTML","normalizeDOM","_ref2","normalizeBlocks","el","_el$nextSibling","nextSibling","nodeType","TEXT_NODE","closest","blocks","values","selector","block","_block$spec$parseDOM","spec","parseDOM","tag","flat","Boolean","matches","_node$firstElementChi","_content$match$","_content$match","_content$match$2","_content$match2","firstParagraph","nextElementSibling","startSpaces","endSpaces","withoutNewLine","renderer","rendered","rules","hardbreak","softbreak","fence","code_block","renderToken","MarkdownClipboard","transformPastedText","transformCopiedText","addProseMirrorPlugins","Plugin","key","PluginKey","props","clipboardTextParser","context","plainText","parsed","parser","fromSchema","parseSlice","preserveWhitespace","clipboardTextSerializer","serializer","Markdown","priority","tightLists","tightListClass","Commands","config","setContent","emitUpdate","parseOptions","insertContentAt","range","onBeforeCreate","getMarkdown","doc","initialContent","onCreate","addExtensions","configure","Markdown","Plugin","PluginKey","resolveExt","Image","resolveExt","Link","TaskList","TaskItem","extensions","Markdown","Image"]}