{"version":3,"sources":["../src/index.ts","../src/code.ts"],"sourcesContent":["import { Code } from './code.js'\n\nexport * from './code.js'\n\nexport default Code\n","import type { InputRuleMatch, PasteRuleMatch } from '@tiptap/core'\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from '@tiptap/core'\n\nexport interface CodeOptions {\n /**\n * The HTML attributes applied to the code element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record\n}\n\ndeclare module '@tiptap/core' {\n interface Commands {\n code: {\n /**\n * Set a code mark\n */\n setCode: () => ReturnType\n /**\n * Toggle inline code\n */\n toggleCode: () => ReturnType\n /**\n * Unset a code mark\n */\n unsetCode: () => ReturnType\n }\n }\n}\n\n/**\n * The regular expression used for the inline code input rule.\n * @deprecated The extension now uses a function-based finder internally.\n * This regex is kept for backward compatibility.\n */\nexport const inputRegex = /(^|[^`])`([^`]+)`(?!`)$/\n\n/**\n * The regular expression used for the inline code paste rule.\n * @deprecated The extension now uses a function-based finder internally.\n * This regex is kept for backward compatibility.\n */\nexport const pasteRegex = /(^|[^`])`([^`]+)`(?!`)/g\n\n/**\n * A function-based finder for the inline code input rule.\n * Used internally by the extension to ensure the preceding character\n * is not consumed as part of the match, preventing it from being deleted.\n */\nexport const inputRegexMatch = (text: string): InputRuleMatch | null => {\n const match = /`([^`]+)`(?!`)$/.exec(text)\n\n if (!match) {\n return null\n }\n\n // Ensure the opening backtick isn't preceded by another backtick\n if (match.index > 0 && text[match.index - 1] === '`') {\n return null\n }\n\n return {\n index: match.index,\n text: match[0],\n replaceWith: match[1],\n }\n}\n\n/**\n * A function-based finder for the inline code paste rule.\n * Used internally by the extension to avoid consuming the preceding\n * character as part of the match.\n */\nexport const pasteRegexMatch = (text: string): PasteRuleMatch[] => {\n const regex = /`([^`]+)`(?!`)/g\n const matches: PasteRuleMatch[] = []\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(text)) !== null) {\n // Ensure the opening backtick isn't preceded by another backtick\n if (match.index > 0 && text[match.index - 1] === '`') {\n continue\n }\n\n matches.push({\n index: match.index,\n text: match[0],\n replaceWith: match[1],\n })\n }\n\n return matches\n}\n\n/**\n * This extension allows you to mark text as inline code.\n * @see https://tiptap.dev/api/marks/code\n */\nexport const Code = Mark.create({\n name: 'code',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n excludes: '_',\n\n code: true,\n\n exitable: true,\n\n parseHTML() {\n return [{ tag: 'code' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['code', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n markdownTokenName: 'codespan',\n\n parseMarkdown: (token, helpers) => {\n // Convert 'codespan' token to code mark\n // For codespan tokens, we use the raw text content, not tokens\n return helpers.applyMark('code', [{ type: 'text', text: token.text || '' }])\n },\n\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return ''\n }\n\n return `\\`${h.renderChildren(node.content)}\\``\n },\n\n addCommands() {\n return {\n setCode:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name)\n },\n toggleCode:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name)\n },\n unsetCode:\n () =>\n ({ commands }) => {\n return commands.unsetMark(this.name)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-e': () => this.editor.commands.toggleCode(),\n }\n },\n\n addInputRules() {\n return [\n markInputRule({\n find: inputRegexMatch,\n type: this.type,\n }),\n ]\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegexMatch,\n type: this.type,\n }),\n ]\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,kBAAoE;AAmC7D,IAAM,aAAa;AAOnB,IAAM,aAAa;AAOnB,IAAM,kBAAkB,CAAC,SAAwC;AACtE,QAAM,QAAQ,kBAAkB,KAAK,IAAI;AAEzC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAGA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,CAAC,MAAM,KAAK;AACpD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,MAAM,MAAM,CAAC;AAAA,IACb,aAAa,MAAM,CAAC;AAAA,EACtB;AACF;AAOO,IAAM,kBAAkB,CAAC,SAAmC;AACjE,QAAM,QAAQ;AACd,QAAM,UAA4B,CAAC;AACnC,MAAI;AAEJ,UAAQ,QAAQ,MAAM,KAAK,IAAI,OAAO,MAAM;AAE1C,QAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,CAAC,MAAM,KAAK;AACpD;AAAA,IACF;AAEA,YAAQ,KAAK;AAAA,MACX,OAAO,MAAM;AAAA,MACb,MAAM,MAAM,CAAC;AAAA,MACb,aAAa,MAAM,CAAC;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAMO,IAAM,OAAO,iBAAK,OAAoB;AAAA,EAC3C,MAAM;AAAA,EAEN,aAAa;AACX,WAAO;AAAA,MACL,gBAAgB,CAAC;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,EAEV,MAAM;AAAA,EAEN,UAAU;AAAA,EAEV,YAAY;AACV,WAAO,CAAC,EAAE,KAAK,OAAO,CAAC;AAAA,EACzB;AAAA,EAEA,WAAW,EAAE,eAAe,GAAG;AAC7B,WAAO,CAAC,YAAQ,6BAAgB,KAAK,QAAQ,gBAAgB,cAAc,GAAG,CAAC;AAAA,EACjF;AAAA,EAEA,mBAAmB;AAAA,EAEnB,eAAe,CAAC,OAAO,YAAY;AAGjC,WAAO,QAAQ,UAAU,QAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC;AAAA,EAC7E;AAAA,EAEA,gBAAgB,CAAC,MAAM,MAAM;AAC3B,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC;AAAA,EAC5C;AAAA,EAEA,cAAc;AACZ,WAAO;AAAA,MACL,SACE,MACA,CAAC,EAAE,SAAS,MAAM;AAChB,eAAO,SAAS,QAAQ,KAAK,IAAI;AAAA,MACnC;AAAA,MACF,YACE,MACA,CAAC,EAAE,SAAS,MAAM;AAChB,eAAO,SAAS,WAAW,KAAK,IAAI;AAAA,MACtC;AAAA,MACF,WACE,MACA,CAAC,EAAE,SAAS,MAAM;AAChB,eAAO,SAAS,UAAU,KAAK,IAAI;AAAA,MACrC;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,uBAAuB;AACrB,WAAO;AAAA,MACL,SAAS,MAAM,KAAK,OAAO,SAAS,WAAW;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,gBAAgB;AACd,WAAO;AAAA,UACL,2BAAc;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,gBAAgB;AACd,WAAO;AAAA,UACL,2BAAc;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;ADjLD,IAAO,gBAAQ;","names":[]}