{"version":3,"file":"index.js","names":[],"sources":["../src/underline.ts","../src/index.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/core'\n\nexport interface UnderlineOptions {\n /**\n * HTML attributes to add to the underline element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record\n}\n\ndeclare module '@tiptap/core' {\n interface Commands {\n underline: {\n /**\n * Set an underline mark\n * @example editor.commands.setUnderline()\n */\n setUnderline: () => ReturnType\n /**\n * Toggle an underline mark\n * @example editor.commands.toggleUnderline()\n */\n toggleUnderline: () => ReturnType\n /**\n * Unset an underline mark\n * @example editor.commands.unsetUnderline()\n */\n unsetUnderline: () => ReturnType\n }\n }\n}\n\n/**\n * This extension allows you to create underline text.\n * @see https://www.tiptap.dev/api/marks/underline\n */\nexport const Underline = Mark.create({\n name: 'underline',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'u',\n },\n {\n style: 'text-decoration',\n consuming: false,\n getAttrs: style => ((style as string).includes('underline') ? {} : false),\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['u', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n parseMarkdown(token, helpers) {\n return helpers.applyMark(this.name || 'underline', helpers.parseInline(token.tokens || []))\n },\n\n renderMarkdown(node, helpers) {\n return `++${helpers.renderChildren(node)}++`\n },\n\n markdownTokenizer: {\n name: 'underline',\n level: 'inline',\n start(src) {\n return src.indexOf('++')\n },\n tokenize(src, _tokens, lexer) {\n const rule = /^(\\+\\+)([\\s\\S]+?)(\\+\\+)/\n const match = rule.exec(src)\n\n if (!match) {\n return undefined\n }\n\n const innerContent = match[2].trim()\n\n return {\n type: 'underline',\n raw: match[0],\n text: innerContent,\n tokens: lexer.inlineTokens(innerContent),\n }\n },\n },\n\n addCommands() {\n return {\n setUnderline:\n () =>\n ({ commands }) => {\n return commands.setMark(this.name)\n },\n toggleUnderline:\n () =>\n ({ commands }) => {\n return commands.toggleMark(this.name)\n },\n unsetUnderline:\n () =>\n ({ commands }) => {\n return commands.unsetMark(this.name)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-u': () => this.editor.commands.toggleUnderline(),\n 'Mod-U': () => this.editor.commands.toggleUnderline(),\n }\n },\n})\n","import { Underline } from './underline.js'\n\nexport * from './underline.js'\n\nexport default Underline\n"],"mappings":";;;;;;AAqCA,MAAa,YAAY,KAAK,OAAyB;CACrD,MAAM;CAEN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CAEA,YAAY;EACV,OAAO,CACL,EACE,KAAK,IACP,GACA;GACE,OAAO;GACP,WAAW;GACX,WAAU,UAAW,MAAiB,SAAS,WAAW,IAAI,CAAC,IAAI;EACrE,CACF;CACF;CAEA,WAAW,EAAE,kBAAkB;EAC7B,OAAO;GAAC;GAAK,gBAAgB,KAAK,QAAQ,gBAAgB,cAAc;GAAG;EAAC;CAC9E;CAEA,cAAc,OAAO,SAAS;EAC5B,OAAO,QAAQ,UAAU,KAAK,QAAQ,aAAa,QAAQ,YAAY,MAAM,UAAU,CAAC,CAAC,CAAC;CAC5F;CAEA,eAAe,MAAM,SAAS;EAC5B,OAAO,KAAK,QAAQ,eAAe,IAAI,EAAE;CAC3C;CAEA,mBAAmB;EACjB,MAAM;EACN,OAAO;EACP,MAAM,KAAK;GACT,OAAO,IAAI,QAAQ,IAAI;EACzB;EACA,SAAS,KAAK,SAAS,OAAO;GAE5B,MAAM,QAAQ,0BAAK,KAAK,GAAG;GAE3B,IAAI,CAAC,OACH;GAGF,MAAM,eAAe,MAAM,EAAE,CAAC,KAAK;GAEnC,OAAO;IACL,MAAM;IACN,KAAK,MAAM;IACX,MAAM;IACN,QAAQ,MAAM,aAAa,YAAY;GACzC;EACF;CACF;CAEA,cAAc;EACZ,OAAO;GACL,qBAEG,EAAE,eAAe;IAChB,OAAO,SAAS,QAAQ,KAAK,IAAI;GACnC;GACF,wBAEG,EAAE,eAAe;IAChB,OAAO,SAAS,WAAW,KAAK,IAAI;GACtC;GACF,uBAEG,EAAE,eAAe;IAChB,OAAO,SAAS,UAAU,KAAK,IAAI;GACrC;EACJ;CACF;CAEA,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,gBAAgB;GACpD,eAAe,KAAK,OAAO,SAAS,gBAAgB;EACtD;CACF;AACF,CAAC;;;ACtHD,IAAA,cAAe"}