@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.
- package/dist/agent/index.cjs +28 -220
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +5 -154
- package/dist/agent/index.js.map +1 -1
- package/dist/canvas/index.cjs +113 -377
- package/dist/canvas/index.cjs.map +1 -1
- package/dist/canvas/index.d.cts +2 -2
- package/dist/canvas/index.d.ts +2 -2
- package/dist/canvas/index.js +18 -208
- package/dist/canvas/index.js.map +1 -1
- package/dist/chunk-33UVEDOS.cjs +233 -0
- package/dist/chunk-33UVEDOS.cjs.map +1 -0
- package/dist/chunk-7FWEWE6T.js +1888 -0
- package/dist/chunk-7FWEWE6T.js.map +1 -0
- package/dist/chunk-BYCOFZAA.js +514 -0
- package/dist/chunk-BYCOFZAA.js.map +1 -0
- package/dist/chunk-CYKQLDYH.cjs +1290 -0
- package/dist/chunk-CYKQLDYH.cjs.map +1 -0
- package/dist/chunk-GLSIZKOX.js +17 -0
- package/dist/chunk-GLSIZKOX.js.map +1 -0
- package/dist/chunk-GWHJVZPI.js +233 -0
- package/dist/chunk-GWHJVZPI.js.map +1 -0
- package/dist/chunk-LDES3EOS.cjs +1888 -0
- package/dist/chunk-LDES3EOS.cjs.map +1 -0
- package/dist/chunk-MPPXH7U5.cjs +336 -0
- package/dist/chunk-MPPXH7U5.cjs.map +1 -0
- package/dist/chunk-NNJRJJSC.js +1290 -0
- package/dist/chunk-NNJRJJSC.js.map +1 -0
- package/dist/chunk-O7LOPQMH.js +336 -0
- package/dist/chunk-O7LOPQMH.js.map +1 -0
- package/dist/chunk-SEDR75VH.cjs +17 -0
- package/dist/chunk-SEDR75VH.cjs.map +1 -0
- package/dist/chunk-SHWP2A43.cjs +514 -0
- package/dist/chunk-SHWP2A43.cjs.map +1 -0
- package/dist/chunk-VHZCXHS4.js +222 -0
- package/dist/chunk-VHZCXHS4.js.map +1 -0
- package/dist/chunk-WADCJ7A7.cjs +222 -0
- package/dist/chunk-WADCJ7A7.cjs.map +1 -0
- package/dist/extensions/index.cjs +25 -1920
- package/dist/extensions/index.cjs.map +1 -1
- package/dist/extensions/index.js +22 -1868
- package/dist/extensions/index.js.map +1 -1
- package/dist/grammar/index.cjs +44 -387
- package/dist/grammar/index.cjs.map +1 -1
- package/dist/grammar/index.js +23 -321
- package/dist/grammar/index.js.map +1 -1
- package/dist/history/index.cjs +6 -257
- package/dist/history/index.cjs.map +1 -1
- package/dist/history/index.js +4 -227
- package/dist/history/index.js.map +1 -1
- package/dist/image-editor/index.cjs +63 -106
- package/dist/image-editor/index.cjs.map +1 -1
- package/dist/index.cjs +324 -7232
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -4
- package/dist/index.d.ts +0 -4
- package/dist/index.js +258 -7007
- package/dist/index.js.map +1 -1
- package/dist/serializers/index.cjs +28 -558
- package/dist/serializers/index.cjs.map +1 -1
- package/dist/serializers/index.js +16 -496
- package/dist/serializers/index.js.map +1 -1
- package/dist/spreadsheet/index.cjs +21 -1319
- package/dist/spreadsheet/index.cjs.map +1 -1
- package/dist/spreadsheet/index.js +14 -1274
- package/dist/spreadsheet/index.js.map +1 -1
- package/dist/{types-lGtRobRV.d.cts → types-DC8b2TsA.d.cts} +1 -1
- package/dist/{types-lGtRobRV.d.ts → types-DC8b2TsA.d.ts} +1 -1
- 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, '<')\n .replace(/>/g, '>');\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"]}
|