{"version":3,"file":"checklist.js","names":["define","_exports","_ajax","_ajaxError","_iconLibrary","_pluginApi","_richEditorExtension","isWhitespaceNode","node","nodeType","nodeValue","match","addUlClasses","boxes","forEach","val","parent","parentElement","nodeName","firstElementChild","sibling","previousSibling","hasPrecedingContent","classList","add","nextSibling","insertAdjacentHTML","checklistSyntax","elem","postDecorator","getElementsByClassName","postModel","getModel","can_edit","idx","onclick","async","box","event","currentTarget","contains","newValue","template","document","createElement","innerHTML","iconHTML","class","insertAdjacentElement","content","firstChild","e","post","ajax","id","blocks","regex","exec","raw","push","index","length","nth","found","newRaw","replace","ignored","off","every","b","save","popupAjaxError","remove","querySelector","Object","defineProperty","value","default","name","initialize","withPluginApi","api","container","lookup","checklist_enabled","decorateCookedElement","registerRichEditorExtension","addComposerToolbarPopupMenuOption","menu","icon","label","showActiveIcon","active","state","inCheckList","action","toolbarEvent","commands","toggleChecklist","applyList","initializePlugin","setup","helper","registerOptions","opts","siteSettings","features","allowList","registerPlugin","md","core","ruler","before","processChecklist","REGEX","addCheckbox","result","classes","str","getClasses","checkOpenToken","Token","attrs","checkCloseToken","applyCheckboxes","pos","token","slice","i","j","l","tokens","blockTokens","nesting","type","children","processed","utils","arrayReplaceAt","extension","nodeSpec","check","checked","inline","group","draggable","selectable","toDOM","parseDOM","tag","getAttrs","dom","hasCheckedClass","className","inputRules","handler","start","end","checkNode","schema","nodes","create","spaceNode","text","tr","replaceWith","parse","check_open","attrGet","check_close","noCloseToken","ignore","serializeNode","write","plugins","pmState","Plugin","pmView","Decoration","DecorationSet","changedDescendants","checkType","listItemType","list_item","bulletListType","bullet_list","startsWithCheck","isTextblock","findBulletListContext","$from","depth","bulletListDepth","listItemDepth","inBulletListItem","doc","resolve","handleChecklistContinuation","transactions","some","t","docChanged","selection","empty","size","ctx","bulletList","listItemIndex","prevParagraph","child","insert","setSelection","constructor","near","prevListItem","bulletListStart","delete","after","prevOffset","nodeSize","prevItemStart","mapping","map","mappedListStart","listAfter","nodeAt","childCount","listEnd","paragraph","exitChecklist","props","handleClickOn","view","nodePos","dispatch","setNodeMarkup","handleKeyDown","key","parentOffset","checkStart","listItemPos","$listItem","nodeBefore","join","beforeTextblock","appendTransaction","oldState","newState","steps","from","to","positionsToInsert","secondChild","isText","ensureSpaceAfterChecks","checkSize","minPos","adjustCursorPosition","decorations","descendants","pmSchemaList","orderedListType","ordered_list","listItemHasCheck","listItem","p","findListContext","$to","list","listDepth","listType","listStart","forEachSelectedItem","callback","collapsed","item","offset","itemStart","itemEnd","hasCheckInSelection","removeChecksFromSelection","toDelete","textblock","second","hasSpace","addChecksToSelection","toInsert","space","toggleBulletList","toggleOrderedList","liftListItem","wrapInList","newCtx","undefined","inNode","viewState","inBulletList","CHECKED_REGEX","test"],"sources":["discourse/plugins/checklist/discourse/initializers/checklist.js","discourse/plugins/checklist/lib/discourse-markdown/checklist.js","discourse/plugins/checklist/lib/rich-editor-extension.js"],"sourcesContent":["define(\"discourse/plugins/checklist/discourse/initializers/checklist\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/icon-library\", \"discourse/lib/plugin-api\", \"discourse/plugins/checklist/lib/rich-editor-extension\"], function (_exports, _ajax, _ajaxError, _iconLibrary, _pluginApi, _richEditorExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.checklistSyntax = checklistSyntax;\n  _exports.default = void 0;\n  function initializePlugin(api) {\n    const siteSettings = api.container.lookup(\"service:site-settings\");\n    if (siteSettings.checklist_enabled) {\n      api.decorateCookedElement(checklistSyntax);\n      api.registerRichEditorExtension(_richEditorExtension.default);\n      api.addComposerToolbarPopupMenuOption({\n        menu: \"list\",\n        name: \"list-checklist\",\n        icon: \"list-check\",\n        label: \"checklist.composer.checklist\",\n        showActiveIcon: true,\n        active: ({\n          state\n        }) => state?.inCheckList,\n        action: toolbarEvent => {\n          if (toolbarEvent.commands?.toggleChecklist) {\n            toolbarEvent.commands.toggleChecklist();\n          } else {\n            toolbarEvent.applyList(\"- [ ] \", \"list_item\");\n          }\n        }\n      });\n    }\n  }\n  function isWhitespaceNode(node) {\n    return node.nodeType === 3 && node.nodeValue.match(/^\\s*$/);\n  }\n  function hasPrecedingContent(node) {\n    let sibling = node.previousSibling;\n    while (sibling) {\n      if (!isWhitespaceNode(sibling)) {\n        return true;\n      }\n      sibling = sibling.previousSibling;\n    }\n    return false;\n  }\n  function addUlClasses(boxes) {\n    boxes.forEach(val => {\n      let parent = val.parentElement;\n      if (parent.nodeName === \"P\" && parent.parentElement.firstElementChild === parent) {\n        parent = parent.parentElement;\n      }\n      if (parent.nodeName === \"LI\" && parent.parentElement.nodeName === \"UL\" && !hasPrecedingContent(val)) {\n        parent.classList.add(\"has-checkbox\");\n        val.classList.add(\"list-item-checkbox\");\n        if (!val.nextSibling) {\n          val.insertAdjacentHTML(\"afterend\", \"&#8203;\"); // Ensure otherwise empty <li> does not collapse height\n        }\n      }\n    });\n  }\n  function checklistSyntax(elem, postDecorator) {\n    const boxes = [...elem.getElementsByClassName(\"chcklst-box\")];\n    addUlClasses(boxes);\n    const postModel = postDecorator?.getModel();\n    if (!postModel?.can_edit) {\n      return;\n    }\n    boxes.forEach((val, idx) => {\n      val.onclick = async event => {\n        const box = event.currentTarget;\n        const classList = box.classList;\n        if (classList.contains(\"permanent\") || classList.contains(\"readonly\")) {\n          return;\n        }\n        const newValue = classList.contains(\"checked\") ? \"[ ]\" : \"[x]\";\n        const template = document.createElement(\"template\");\n        template.innerHTML = (0, _iconLibrary.iconHTML)(\"spinner\", {\n          class: \"fa-spin list-item-checkbox\"\n        });\n        box.insertAdjacentElement(\"afterend\", template.content.firstChild);\n        box.classList.add(\"hidden\");\n        boxes.forEach(e => e.classList.add(\"readonly\"));\n        try {\n          const post = await (0, _ajax.ajax)(`/posts/${postModel.id}`);\n          const blocks = [];\n\n          // Computing offsets where checkbox are not evaluated (i.e. inside\n          // code blocks).\n          [\n          // inline code\n          /`[^`\\n]*\\n?[^`\\n]*`/gm,\n          // multi-line code\n          /^```[^]*?^```/gm,\n          // bbcode\n          /\\[code\\][^]*?\\[\\/code\\]/gm,\n          // italic/bold\n          /_(?=\\S).*?\\S_/gm,\n          // strikethrough\n          /~~(?=\\S).*?\\S~~/gm].forEach(regex => {\n            let match;\n            while ((match = regex.exec(post.raw)) != null) {\n              blocks.push([match.index, match.index + match[0].length]);\n            }\n          });\n          [\n          // italic/bold\n          /([^\\[\\n]|^)\\*\\S.+?\\S\\*(?=[^\\]\\n]|$)/gm].forEach(regex => {\n            let match;\n            while ((match = regex.exec(post.raw)) != null) {\n              // Simulate lookbehind - skip the first character\n              blocks.push([match.index + 1, match.index + match[0].length]);\n            }\n          });\n\n          // make the first run go to index = 0\n          let nth = -1;\n          let found = false;\n          const newRaw = post.raw.replace(/\\[( |x)?\\]/gi, (match, ignored, off) => {\n            if (found) {\n              return match;\n            }\n\n            // skip empty image URLs - \"![](https://example.com/image.jpg)\"\n            if (off > 0 && post.raw[off - 1] === \"!\") {\n              return match;\n            }\n\n            // skip escaped opening bracket - \"\\[x]\"\n            if (off > 0 && post.raw[off - 1] === \"\\\\\") {\n              return match;\n            }\n            nth += blocks.every(b => b[0] >= off + match.length || off > b[1]);\n            if (nth === idx) {\n              found = true; // Do not replace any further matches\n              return newValue;\n            }\n            return match;\n          });\n          await postModel.save({\n            raw: newRaw\n          });\n        } catch (e) {\n          (0, _ajaxError.popupAjaxError)(e);\n        } finally {\n          boxes.forEach(e => e.classList.remove(\"readonly\"));\n          box.classList.remove(\"hidden\");\n          box.parentElement.querySelector(\".fa-spin\").remove();\n        }\n      };\n    });\n  }\n  var _default = _exports.default = {\n    name: \"checklist\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(api => initializePlugin(api));\n    }\n  };\n});","define(\"discourse/plugins/checklist/lib/discourse-markdown/checklist\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  const REGEX = /\\[( |x)?\\]/gi;\n  function getClasses(str) {\n    switch (str) {\n      case \"x\":\n        return \"checked fa fa-square-check-o\";\n      case \"X\":\n        return \"checked permanent fa fa-square-check\";\n      default:\n        return \"fa fa-square-o\";\n    }\n  }\n  function addCheckbox(result, content, match, state) {\n    const classes = getClasses(match[1]);\n    const checkOpenToken = new state.Token(\"check_open\", \"span\", 1);\n    checkOpenToken.attrs = [[\"class\", `chcklst-box ${classes}`]];\n    result.push(checkOpenToken);\n    const checkCloseToken = new state.Token(\"check_close\", \"span\", -1);\n    result.push(checkCloseToken);\n  }\n  function applyCheckboxes(content, state) {\n    let match;\n    let result = null;\n    let pos = 0;\n    while (match = REGEX.exec(content)) {\n      if (match.index > pos) {\n        result = result || [];\n        const token = new state.Token(\"text\", \"\", 0);\n        token.content = content.slice(pos, match.index);\n        result.push(token);\n      }\n      pos = match.index + match[0].length;\n      result = result || [];\n      addCheckbox(result, content, match, state);\n    }\n    if (result && pos < content.length) {\n      const token = new state.Token(\"text\", \"\", 0);\n      token.content = content.slice(pos);\n      result.push(token);\n    }\n    return result;\n  }\n  function processChecklist(state) {\n    let i,\n      j,\n      l,\n      tokens,\n      token,\n      blockTokens = state.tokens,\n      nesting = 0;\n    for (j = 0, l = blockTokens.length; j < l; j++) {\n      if (blockTokens[j].type !== \"inline\") {\n        continue;\n      }\n      tokens = blockTokens[j].children;\n\n      // We scan from the end, to keep position when new tags are added.\n      // Use reversed logic in links start/end match\n      for (i = tokens.length - 1; i >= 0; i--) {\n        token = tokens[i];\n        nesting += token.nesting;\n        if (token.type === \"text\" && nesting === 0) {\n          const processed = applyCheckboxes(token.content, state);\n          if (processed) {\n            blockTokens[j].children = tokens = state.md.utils.arrayReplaceAt(tokens, i, processed);\n          }\n        }\n      }\n    }\n  }\n  function setup(helper) {\n    helper.registerOptions((opts, siteSettings) => {\n      opts.features[\"checklist\"] = !!siteSettings.checklist_enabled;\n    });\n    helper.allowList([\"span.chcklst-stroked\", \"span.chcklst-box fa fa-square-o\", \"span.chcklst-box checked fa fa-square-check-o\", \"span.chcklst-box checked permanent fa fa-square-check\"]);\n    helper.registerPlugin(md => md.core.ruler.before(\"text_join\", \"checklist\", processChecklist));\n  }\n});","define(\"discourse/plugins/checklist/lib/rich-editor-extension\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /** @type {RichEditorExtension} */\n  const extension = {\n    nodeSpec: {\n      check: {\n        attrs: {\n          checked: {\n            default: false\n          }\n        },\n        inline: true,\n        group: \"inline\",\n        draggable: true,\n        selectable: false,\n        toDOM(node) {\n          return [\"span\", {\n            class: node.attrs.checked ? \"chcklst-box checked fa fa-square-check-o\" : \"chcklst-box fa fa-square-o\"\n          }];\n        },\n        parseDOM: [{\n          tag: \"span.chcklst-box\",\n          getAttrs: dom => ({\n            checked: hasCheckedClass(dom.className)\n          })\n        }]\n      }\n    },\n    inputRules: [{\n      match: /(^|\\s)\\[(x? ?)]$/,\n      handler: (state, match, start, end) => {\n        const checkNode = state.schema.nodes.check.create({\n          checked: match[2] === \"x\"\n        });\n        const spaceNode = state.schema.text(\" \");\n        return state.tr.replaceWith(start + match[1].length, end, [checkNode, spaceNode]);\n      }\n    }],\n    parse: {\n      check_open: {\n        node: \"check\",\n        getAttrs: token => ({\n          checked: hasCheckedClass(token.attrGet(\"class\"))\n        })\n      },\n      check_close: {\n        noCloseToken: true,\n        ignore: true\n      }\n    },\n    serializeNode: {\n      check: (state, node) => {\n        state.write(node.attrs.checked ? \"[x]\" : \"[ ]\");\n      }\n    },\n    plugins({\n      pmState: {\n        Plugin\n      },\n      pmView: {\n        Decoration,\n        DecorationSet\n      },\n      schema,\n      utils: {\n        changedDescendants\n      }\n    }) {\n      const checkType = schema.nodes.check;\n      const listItemType = schema.nodes.list_item;\n      const bulletListType = schema.nodes.bullet_list;\n      const startsWithCheck = node => node?.isTextblock && node.firstChild?.type === checkType;\n      const findBulletListContext = $from => {\n        for (let depth = $from.depth; depth > 0; depth--) {\n          if ($from.node(depth).type === listItemType) {\n            if ($from.node(depth - 1)?.type === bulletListType) {\n              return {\n                bulletListDepth: depth - 1,\n                listItemDepth: depth\n              };\n            }\n            return null;\n          }\n        }\n        return null;\n      };\n      const inBulletListItem = (doc, pos) => findBulletListContext(doc.resolve(pos)) !== null;\n      const ensureSpaceAfterChecks = (tr, oldState, newState) => {\n        const positionsToInsert = [];\n        changedDescendants(oldState.doc, newState.doc, (node, pos) => {\n          if (!startsWithCheck(node) || !inBulletListItem(newState.doc, pos)) {\n            return;\n          }\n          const secondChild = node.childCount > 1 ? node.child(1) : null;\n          const hasSpaceAfter = secondChild?.isText && secondChild.text?.[0] === \" \";\n          if (!hasSpaceAfter) {\n            positionsToInsert.push(pos + 1 + node.firstChild.nodeSize);\n          }\n        });\n        for (let i = positionsToInsert.length - 1; i >= 0; i--) {\n          tr.insert(positionsToInsert[i], schema.text(\" \"));\n        }\n      };\n      const exitChecklist = (tr, ctx) => {\n        const {\n          bulletListDepth,\n          listItemDepth\n        } = ctx;\n        const {\n          selection\n        } = tr;\n        const {\n          $from\n        } = selection;\n        const bulletList = $from.node(bulletListDepth);\n        const listItemIndex = $from.index(bulletListDepth);\n        const prevListItem = bulletList.child(listItemIndex - 1);\n        const bulletListStart = $from.before(bulletListDepth);\n        tr.delete($from.before(listItemDepth), $from.after(listItemDepth));\n        let prevOffset = 1;\n        for (let i = 0; i < listItemIndex - 1; i++) {\n          prevOffset += bulletList.child(i).nodeSize;\n        }\n        const prevItemStart = tr.mapping.map(bulletListStart + prevOffset);\n        tr.delete(prevItemStart, prevItemStart + prevListItem.nodeSize);\n        const mappedListStart = tr.mapping.map(bulletListStart);\n        const listAfter = tr.doc.nodeAt(mappedListStart);\n        if (listAfter && listAfter.childCount > 0) {\n          const listEnd = mappedListStart + listAfter.nodeSize;\n          tr.insert(listEnd, schema.nodes.paragraph.create());\n          tr.setSelection(selection.constructor.near(tr.doc.resolve(listEnd + 1)));\n        } else {\n          tr.replaceWith(mappedListStart, mappedListStart + (listAfter?.nodeSize || 0), schema.nodes.paragraph.create());\n          tr.setSelection(selection.constructor.near(tr.doc.resolve(mappedListStart + 1)));\n        }\n        return tr;\n      };\n      const handleChecklistContinuation = (tr, transactions) => {\n        if (!transactions.some(t => t.docChanged)) {\n          return null;\n        }\n        const {\n          selection\n        } = tr;\n        const {\n          $from\n        } = selection;\n        if (!selection.empty) {\n          return null;\n        }\n        const parent = $from.parent;\n        if (!parent.isTextblock || parent.content.size !== 0) {\n          return null;\n        }\n        const ctx = findBulletListContext($from);\n        if (!ctx) {\n          return null;\n        }\n        const bulletList = $from.node(ctx.bulletListDepth);\n        const listItemIndex = $from.index(ctx.bulletListDepth);\n        if (listItemIndex === 0) {\n          return null;\n        }\n        const prevParagraph = bulletList.child(listItemIndex - 1).firstChild;\n        if (!startsWithCheck(prevParagraph)) {\n          return null;\n        }\n        if (prevParagraph.content.size > 2) {\n          const checkNode = checkType.create({\n            checked: false\n          });\n          tr.insert($from.pos, [checkNode, schema.text(\" \")]);\n          tr.setSelection(selection.constructor.near(tr.doc.resolve($from.pos + 2)));\n          return tr;\n        }\n        return exitChecklist(tr, ctx);\n      };\n      const adjustCursorPosition = tr => {\n        const {\n          doc,\n          selection\n        } = tr;\n        const {\n          $from\n        } = selection;\n        if (!selection.empty) {\n          return null;\n        }\n        const parent = $from.parent;\n        if (!startsWithCheck(parent) || !inBulletListItem(doc, $from.pos)) {\n          return null;\n        }\n        const checkSize = parent.firstChild.nodeSize;\n        const secondChild = parent.childCount > 1 ? parent.child(1) : null;\n        const hasSpaceAfter = secondChild?.isText && secondChild.text?.[0] === \" \";\n        const minPos = hasSpaceAfter ? checkSize + 1 : checkSize;\n        if ($from.parentOffset < minPos) {\n          tr.setSelection(selection.constructor.near(doc.resolve($from.start() + minPos)));\n          return tr;\n        }\n        return null;\n      };\n      return [new Plugin({\n        props: {\n          handleClickOn(view, pos, node, nodePos) {\n            if (node.type.name === \"check\") {\n              view.dispatch(view.state.tr.setNodeMarkup(nodePos, null, {\n                checked: !node.attrs.checked\n              }));\n              return true;\n            }\n            return false;\n          },\n          handleKeyDown(view, event) {\n            if (event.key !== \"Backspace\" && event.key !== \"ArrowLeft\") {\n              return false;\n            }\n            const {\n              state,\n              dispatch\n            } = view;\n            const {\n              selection\n            } = state;\n            const {\n              $from\n            } = selection;\n\n            // Only handle at position 2 (right after check+space) in a checklist\n            if (!selection.empty || $from.parentOffset !== 2 || !startsWithCheck($from.parent) || !inBulletListItem(state.doc, $from.pos)) {\n              return false;\n            }\n            if (event.key === \"Backspace\") {\n              const ctx = findBulletListContext($from);\n              const checkStart = $from.start();\n              let tr = state.tr.delete(checkStart, checkStart + 2);\n              if (ctx) {\n                const listItemPos = tr.mapping.map($from.before(ctx.listItemDepth));\n                const $listItem = tr.doc.resolve(listItemPos);\n                if ($listItem.nodeBefore?.type === listItemType) {\n                  tr = tr.join(listItemPos, 2);\n                }\n              }\n              dispatch(tr);\n              return true;\n            }\n            const beforeTextblock = $from.before();\n            if (beforeTextblock > 0) {\n              dispatch(state.tr.setSelection(selection.constructor.near(state.doc.resolve(beforeTextblock), -1)));\n              return true;\n            }\n            return false;\n          }\n        },\n        appendTransaction(transactions, oldState, newState) {\n          const isFullReplace = transactions.some(t => t.steps.length === 1 && t.steps[0].from === 0 && t.steps[0].to === oldState.doc.content.size);\n          if (isFullReplace) {\n            return null;\n          }\n          const tr = newState.tr;\n          ensureSpaceAfterChecks(tr, oldState, newState);\n          return handleChecklistContinuation(tr, transactions) ?? adjustCursorPosition(tr) ?? (tr.docChanged ? tr : null);\n        }\n      }),\n      // Decoration plugin to add has-checkbox class to checklist items\n      new Plugin({\n        props: {\n          decorations(state) {\n            const decorations = [];\n            state.doc.descendants((node, pos, parent) => {\n              if (node.type === listItemType && parent?.type === bulletListType && startsWithCheck(node.firstChild)) {\n                decorations.push(Decoration.node(pos, pos + node.nodeSize, {\n                  class: \"has-checkbox\"\n                }));\n              }\n            });\n            return DecorationSet.create(state.doc, decorations);\n          }\n        }\n      })];\n    },\n    commands: ({\n      schema,\n      pmSchemaList\n    }) => {\n      const checkType = schema.nodes.check;\n      const bulletListType = schema.nodes.bullet_list;\n      const orderedListType = schema.nodes.ordered_list;\n      const listItemType = schema.nodes.list_item;\n      const listItemHasCheck = listItem => {\n        const p = listItem.firstChild;\n        return p?.isTextblock && p.firstChild?.type === checkType;\n      };\n      const findListContext = state => {\n        const {\n          $from,\n          $to\n        } = state.selection;\n        for (let depth = $from.depth; depth > 0; depth--) {\n          if ($from.node(depth).type === listItemType) {\n            const list = $from.node(depth - 1);\n            if (list?.type === bulletListType || list?.type === orderedListType) {\n              return {\n                listDepth: depth - 1,\n                listItemDepth: depth,\n                listType: list.type,\n                list,\n                listStart: $from.before(depth - 1),\n                $from,\n                $to\n              };\n            }\n          }\n        }\n        return null;\n      };\n      const forEachSelectedItem = (ctx, callback) => {\n        const {\n          list,\n          listStart,\n          $from,\n          $to\n        } = ctx;\n        const collapsed = $from.pos === $to.pos;\n        list.forEach((item, offset) => {\n          const itemStart = listStart + 1 + offset;\n          const itemEnd = itemStart + item.nodeSize;\n          const inSelection = collapsed ? $from.pos >= itemStart && $from.pos <= itemEnd : !(itemEnd <= $from.pos || itemStart >= $to.pos);\n          if (inSelection) {\n            callback(item, itemStart);\n          }\n        });\n      };\n      const hasCheckInSelection = ctx => {\n        if (!ctx || ctx.listType !== bulletListType) {\n          return false;\n        }\n        let found = false;\n        forEachSelectedItem(ctx, item => {\n          if (listItemHasCheck(item)) {\n            found = true;\n          }\n        });\n        return found;\n      };\n      const removeChecksFromSelection = (state, ctx) => {\n        const toDelete = [];\n        forEachSelectedItem(ctx, (item, itemStart) => {\n          if (listItemHasCheck(item)) {\n            const textblock = item.firstChild;\n            const checkSize = textblock.firstChild.nodeSize;\n            const second = textblock.childCount > 1 ? textblock.child(1) : null;\n            const hasSpace = second?.isText && second.text?.[0] === \" \";\n            toDelete.push({\n              from: itemStart + 2,\n              to: itemStart + 2 + checkSize + (hasSpace ? 1 : 0)\n            });\n          }\n        });\n        let tr = state.tr;\n        for (let i = toDelete.length - 1; i >= 0; i--) {\n          tr = tr.delete(toDelete[i].from, toDelete[i].to);\n        }\n        return tr;\n      };\n      const addChecksToSelection = (state, ctx) => {\n        const toInsert = [];\n        forEachSelectedItem(ctx, (item, itemStart) => {\n          if (!listItemHasCheck(item) && item.firstChild?.isTextblock) {\n            toInsert.push(itemStart + 2);\n          }\n        });\n        let tr = state.tr;\n        let offset = 0;\n        for (const pos of toInsert) {\n          const check = checkType.create({\n            checked: false\n          });\n          const space = schema.text(\" \");\n          tr = tr.insert(pos + offset, [check, space]);\n          offset += check.nodeSize + space.nodeSize;\n        }\n        return tr;\n      };\n      return {\n        toggleBulletList() {\n          return (state, dispatch) => {\n            const ctx = findListContext(state);\n            if (hasCheckInSelection(ctx)) {\n              if (dispatch) {\n                dispatch(removeChecksFromSelection(state, ctx));\n              }\n              return true;\n            }\n            return false;\n          };\n        },\n        toggleOrderedList() {\n          return (state, dispatch, view) => {\n            const ctx = findListContext(state);\n            if (!hasCheckInSelection(ctx)) {\n              return false;\n            }\n            if (!dispatch) {\n              return true;\n            }\n            const liftListItem = pmSchemaList?.liftListItem;\n            const wrapInList = pmSchemaList?.wrapInList;\n            if (!liftListItem || !wrapInList) {\n              return false;\n            }\n            dispatch(removeChecksFromSelection(state, ctx));\n            if (view) {\n              liftListItem(listItemType)(view.state, dispatch);\n              wrapInList(orderedListType)(view.state, dispatch);\n            }\n            return true;\n          };\n        },\n        toggleChecklist() {\n          return (state, dispatch, view) => {\n            const ctx = findListContext(state);\n            const wrapInList = pmSchemaList?.wrapInList;\n            const liftListItem = pmSchemaList?.liftListItem;\n            if (hasCheckInSelection(ctx)) {\n              if (!dispatch || !liftListItem) {\n                return !!liftListItem;\n              }\n              dispatch(removeChecksFromSelection(state, ctx));\n              if (view) {\n                liftListItem(listItemType)(view.state, dispatch);\n              }\n              return true;\n            }\n            if (ctx?.listType === bulletListType) {\n              if (dispatch) {\n                dispatch(addChecksToSelection(state, ctx));\n              }\n              return true;\n            }\n            if (ctx?.listType === orderedListType) {\n              if (!dispatch || !liftListItem || !wrapInList) {\n                return !!(liftListItem && wrapInList);\n              }\n              liftListItem(listItemType)(state, dispatch);\n              if (view) {\n                wrapInList(bulletListType)(view.state, dispatch);\n                const newCtx = findListContext(view.state);\n                if (newCtx) {\n                  dispatch(addChecksToSelection(view.state, newCtx));\n                }\n              }\n              return true;\n            }\n            if (!wrapInList) {\n              return false;\n            }\n            if (!dispatch) {\n              return wrapInList(bulletListType)(state, undefined);\n            }\n            wrapInList(bulletListType)(state, dispatch);\n            if (view) {\n              const newCtx = findListContext(view.state);\n              if (newCtx) {\n                dispatch(addChecksToSelection(view.state, newCtx));\n              }\n            }\n            return true;\n          };\n        }\n      };\n    },\n    state: ({\n      schema,\n      utils: {\n        inNode\n      }\n    }, viewState) => {\n      const {\n        $from\n      } = viewState.selection;\n      let inCheckList = false;\n      for (let depth = $from.depth; depth > 0; depth--) {\n        const node = $from.node(depth);\n        if (node.type === schema.nodes.list_item) {\n          if ($from.node(depth - 1)?.type === schema.nodes.bullet_list) {\n            const p = node.firstChild;\n            inCheckList = p?.isTextblock && p.firstChild?.type === schema.nodes.check;\n          }\n          break;\n        }\n      }\n      return {\n        inCheckList,\n        inBulletList: !inCheckList && inNode(viewState, schema.nodes.bullet_list)\n      };\n    }\n  };\n  const CHECKED_REGEX = /\\bchecked\\b/;\n  function hasCheckedClass(className) {\n    return CHECKED_REGEX.test(className);\n  }\n  var _default = _exports.default = extension;\n});"],"mappings":"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","ignoreList":[]}