"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/ordered-list/index.ts var index_exports = {}; __export(index_exports, { OrderedList: () => OrderedList, orderedListInputRegex: () => orderedListInputRegex }); module.exports = __toCommonJS(index_exports); // src/ordered-list/ordered-list.ts var import_core = require("@tiptap/core"); // src/ordered-list/utils.ts var ORDERED_LIST_ITEM_REGEX = /^(\s*)(\d+)\.\s+(.*)$/; var INDENTED_LINE_REGEX = /^\s/; function collectOrderedListItems(lines) { const listItems = []; let currentLineIndex = 0; let consumed = 0; while (currentLineIndex < lines.length) { const line = lines[currentLineIndex]; const match = line.match(ORDERED_LIST_ITEM_REGEX); if (!match) { break; } const [, indent, number, content] = match; const indentLevel = indent.length; let itemContent = content; let nextLineIndex = currentLineIndex + 1; const itemLines = [line]; while (nextLineIndex < lines.length) { const nextLine = lines[nextLineIndex]; const nextMatch = nextLine.match(ORDERED_LIST_ITEM_REGEX); if (nextMatch) { break; } if (nextLine.trim() === "") { itemLines.push(nextLine); itemContent += "\n"; nextLineIndex += 1; } else if (nextLine.match(INDENTED_LINE_REGEX)) { itemLines.push(nextLine); itemContent += ` ${nextLine.slice(indentLevel + 2)}`; nextLineIndex += 1; } else { break; } } listItems.push({ indent: indentLevel, number: parseInt(number, 10), content: itemContent.trim(), raw: itemLines.join("\n") }); consumed = nextLineIndex; currentLineIndex = nextLineIndex; } return [listItems, consumed]; } function buildNestedStructure(items, baseIndent, lexer) { var _a; const result = []; let currentIndex = 0; while (currentIndex < items.length) { const item = items[currentIndex]; if (item.indent === baseIndent) { const contentLines = item.content.split("\n"); const mainText = ((_a = contentLines[0]) == null ? void 0 : _a.trim()) || ""; const tokens = []; if (mainText) { tokens.push({ type: "paragraph", raw: mainText, tokens: lexer.inlineTokens(mainText) }); } const additionalContent = contentLines.slice(1).join("\n").trim(); if (additionalContent) { const blockTokens = lexer.blockTokens(additionalContent); tokens.push(...blockTokens); } let lookAheadIndex = currentIndex + 1; const nestedItems = []; while (lookAheadIndex < items.length && items[lookAheadIndex].indent > baseIndent) { nestedItems.push(items[lookAheadIndex]); lookAheadIndex += 1; } if (nestedItems.length > 0) { const nextIndent = Math.min(...nestedItems.map((nestedItem) => nestedItem.indent)); const nestedListItems = buildNestedStructure(nestedItems, nextIndent, lexer); tokens.push({ type: "list", ordered: true, start: nestedItems[0].number, items: nestedListItems, raw: nestedItems.map((nestedItem) => nestedItem.raw).join("\n") }); } result.push({ type: "list_item", raw: item.raw, tokens }); currentIndex = lookAheadIndex; } else { currentIndex += 1; } } return result; } function parseListItems(items, helpers) { return items.map((item) => { if (item.type !== "list_item") { return helpers.parseChildren([item])[0]; } const content = []; if (item.tokens && item.tokens.length > 0) { item.tokens.forEach((itemToken) => { if (itemToken.type === "paragraph" || itemToken.type === "list" || itemToken.type === "blockquote" || itemToken.type === "code") { content.push(...helpers.parseChildren([itemToken])); } else if (itemToken.type === "text" && itemToken.tokens) { const inlineContent = helpers.parseChildren([itemToken]); content.push({ type: "paragraph", content: inlineContent }); } else { const parsed = helpers.parseChildren([itemToken]); if (parsed.length > 0) { content.push(...parsed); } } }); } return { type: "listItem", content }; }); } // src/ordered-list/ordered-list.ts var ListItemName = "listItem"; var TextStyleName = "textStyle"; var orderedListInputRegex = /^(\d+)\.\s$/; var OrderedList = import_core.Node.create({ name: "orderedList", addOptions() { return { itemTypeName: "listItem", HTMLAttributes: {}, keepMarks: false, keepAttributes: false }; }, group: "block list", content() { return `${this.options.itemTypeName}+`; }, addAttributes() { return { start: { default: 1, parseHTML: (element) => { return element.hasAttribute("start") ? parseInt(element.getAttribute("start") || "", 10) : 1; } }, type: { default: null, parseHTML: (element) => element.getAttribute("type") } }; }, parseHTML() { return [ { tag: "ol" } ]; }, renderHTML({ HTMLAttributes }) { const { start, ...attributesWithoutStart } = HTMLAttributes; return start === 1 ? ["ol", (0, import_core.mergeAttributes)(this.options.HTMLAttributes, attributesWithoutStart), 0] : ["ol", (0, import_core.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes), 0]; }, markdownTokenName: "list", parseMarkdown: (token, helpers) => { if (token.type !== "list" || !token.ordered) { return []; } const startValue = token.start || 1; const content = token.items ? parseListItems(token.items, helpers) : []; if (startValue !== 1) { return { type: "orderedList", attrs: { start: startValue }, content }; } return { type: "orderedList", content }; }, renderMarkdown: (node, h) => { if (!node.content) { return ""; } return h.renderChildren(node.content, "\n"); }, markdownTokenizer: { name: "orderedList", level: "block", start: (src) => { const match = src.match(/^(\s*)(\d+)\.\s+/); const index = match == null ? void 0 : match.index; return index !== void 0 ? index : -1; }, tokenize: (src, _tokens, lexer) => { var _a; const lines = src.split("\n"); const [listItems, consumed] = collectOrderedListItems(lines); if (listItems.length === 0) { return void 0; } const items = buildNestedStructure(listItems, 0, lexer); if (items.length === 0) { return void 0; } const startValue = ((_a = listItems[0]) == null ? void 0 : _a.number) || 1; return { type: "list", ordered: true, start: startValue, items, raw: lines.slice(0, consumed).join("\n") }; } }, markdownOptions: { indentsContent: true }, addCommands() { return { toggleOrderedList: () => ({ commands, chain }) => { if (this.options.keepAttributes) { return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run(); } return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks); } }; }, addKeyboardShortcuts() { return { "Mod-Shift-7": () => this.editor.commands.toggleOrderedList() }; }, addInputRules() { let inputRule = (0, import_core.wrappingInputRule)({ find: orderedListInputRegex, type: this.type, getAttributes: (match) => ({ start: +match[1] }), joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1] }); if (this.options.keepMarks || this.options.keepAttributes) { inputRule = (0, import_core.wrappingInputRule)({ find: orderedListInputRegex, type: this.type, keepMarks: this.options.keepMarks, keepAttributes: this.options.keepAttributes, getAttributes: (match) => ({ start: +match[1], ...this.editor.getAttributes(TextStyleName) }), joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1], editor: this.editor }); } return [inputRule]; } }); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { OrderedList, orderedListInputRegex }); //# sourceMappingURL=index.cjs.map