@lexical/list
Version:
This package provides the list feature for Lexical.
10 lines (8 loc) • 19.9 kB
JavaScript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
"use strict";var e=require("@lexical/utils"),t=require("lexical"),r=require("@lexical/selection");function n(e,...t){const r=new URL("https://lexical.dev/docs/error"),n=new URLSearchParams;n.append("code",e);for(const e of t)n.append("v",e);throw r.search=n.toString(),Error(`Minified Lexical error #${e}; visit ${r.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function s(e){let t=1,r=e.getParent();for(;null!=r;){if(L(r)){const e=r.getParent();if(R(e)){t++,r=e.getParent();continue}n(40)}return t}return t}function i(e){let t=e.getParent();R(t)||n(40);let r=t;for(;null!==r;)r=r.getParent(),R(r)&&(t=r);return t}function o(e){let t=[];const r=e.getChildren().filter(L);for(let e=0;e<r.length;e++){const n=r[e],s=n.getFirstChild();R(s)?t=t.concat(o(s)):t.push(n)}return t}function l(e){return L(e)&&R(e.getFirstChild())}function c(e){return O().append(e)}function a(e,t){return L(e)&&(0===t.length||1===t.length&&e.is(t[0])&&0===e.getChildrenSize())}function g(e){const r=t.$getSelection();if(null!==r){let s=r.getNodes();if(t.$isRangeSelection(r)){const i=r.getStartEndPoints();null===i&&n(143);const[o]=i,l=o.getNode(),c=l.getParent();if(t.$isRootOrShadowRoot(l)){const e=l.getFirstChild();if(e)s=e.selectStart().getNodes();else{const e=t.$createParagraphNode();l.append(e),s=e.select().getNodes()}}else if(a(l,s)){const r=A(e);if(t.$isRootOrShadowRoot(c)){l.replace(r);const e=O();t.$isElementNode(l)&&(e.setFormat(l.getFormatType()),e.setIndent(l.getIndent())),r.append(e)}else if(L(l)){const e=l.getParentOrThrow();d(r,e.getChildren()),e.replace(r)}return}}const i=new Set;for(let r=0;r<s.length;r++){const n=s[r];if(t.$isElementNode(n)&&n.isEmpty()&&!L(n)&&!i.has(n.getKey())){u(n,e);continue}let o=t.$isLeafNode(n)?n.getParent():L(n)&&n.isEmpty()?n:null;for(;null!=o;){const r=o.getKey();if(R(o)){if(!i.has(r)){const t=A(e);d(t,o.getChildren()),o.replace(t),i.add(r)}break}{const n=o.getParent();if(t.$isRootOrShadowRoot(n)&&!i.has(r)){i.add(r),u(o,e);break}o=n}}}}}function d(e,t){e.splice(e.getChildrenSize(),0,t)}function u(e,t){if(R(e))return e;const r=e.getPreviousSibling(),n=e.getNextSibling(),s=O();let i;if(d(s,e.getChildren()),R(r)&&t===r.getListType())r.append(s),R(n)&&t===n.getListType()&&(d(r,n.getChildren()),n.remove()),i=r;else if(R(n)&&t===n.getListType())n.getFirstChildOrThrow().insertBefore(s),i=n;else{const r=A(t);r.append(s),e.replace(r),i=r}return s.setFormat(e.getFormatType()),s.setIndent(e.getIndent()),e.remove(),i}function h(e,t){const r=e.getLastChild(),n=t.getFirstChild();r&&n&&l(r)&&l(n)&&(h(r.getFirstChild(),n.getFirstChild()),n.remove());const s=t.getChildren();s.length>0&&e.append(...s),t.remove()}function f(){const r=t.$getSelection();if(t.$isRangeSelection(r)){const n=new Set,s=r.getNodes(),l=r.anchor.getNode();if(a(l,s))n.add(i(l));else for(let r=0;r<s.length;r++){const o=s[r];if(t.$isLeafNode(o)){const t=e.$getNearestNodeOfType(o,T);null!=t&&n.add(i(t))}}for(const e of n){let n=e;const s=o(e);for(const e of s){const s=t.$createParagraphNode().setTextStyle(r.style).setTextFormat(r.format);d(s,e.getChildren()),n.insertAfter(s),n=s,e.__key===r.anchor.key&&t.$setPointFromCaret(r.anchor,t.$normalizeCaret(t.$getChildCaret(s,"next"))),e.__key===r.focus.key&&t.$setPointFromCaret(r.focus,t.$normalizeCaret(t.$getChildCaret(s,"next"))),e.remove()}e.remove()}}}function p(e){const t="check"!==e.getListType();let r=e.getStart();for(const n of e.getChildren())L(n)&&(n.getValue()!==r&&n.setValue(r),t&&null!=n.getLatest().__checked&&n.setChecked(void 0),R(n.getFirstChild())||r++)}function m(e){const t=new Set;if(l(e)||t.has(e.getKey()))return;const r=e.getParent(),n=e.getNextSibling(),s=e.getPreviousSibling();if(l(n)&&l(s)){const r=s.getFirstChild();if(R(r)){r.append(e);const s=n.getFirstChild();if(R(s)){d(r,s.getChildren()),n.remove(),t.add(n.getKey())}}}else if(l(n)){const t=n.getFirstChild();if(R(t)){const r=t.getFirstChild();null!==r&&r.insertBefore(e)}}else if(l(s)){const t=s.getFirstChild();R(t)&&t.append(e)}else if(R(r)){const t=O().setTextFormat(e.getTextFormat()).setTextStyle(e.getTextStyle()),i=A(r.getListType()).setTextFormat(r.getTextFormat()).setTextStyle(r.getTextStyle());t.append(i),i.append(e),s?s.insertAfter(t):n?n.insertBefore(t):r.append(t)}}function _(e){if(l(e))return;const t=e.getParent(),r=t?t.getParent():void 0;if(R(r?r.getParent():void 0)&&L(r)&&R(t)){const n=t?t.getFirstChild():void 0,s=t?t.getLastChild():void 0;if(e.is(n))r.insertBefore(e),t.isEmpty()&&r.remove();else if(e.is(s))r.insertAfter(e),t.isEmpty()&&r.remove();else{const n=t.getListType(),s=O(),i=A(n);s.append(i),e.getPreviousSiblings().forEach((e=>i.append(e)));const o=O(),l=A(n);o.append(l),d(l,e.getNextSiblings()),r.insertBefore(s),r.insertAfter(o),r.replace(e)}}}function C(){const e=t.$getSelection();if(!t.$isRangeSelection(e)||!e.isCollapsed())return!1;const r=e.anchor.getNode();if(!L(r)||0!==r.getChildrenSize())return!1;const s=i(r),o=r.getParent();R(o)||n(40);const l=o.getParent();let c;if(t.$isRootOrShadowRoot(l))c=t.$createParagraphNode(),s.insertAfter(c);else{if(!L(l))return!1;c=O(),l.insertAfter(c)}c.setTextStyle(e.style).setTextFormat(e.format).select();const a=r.getNextSiblings();if(a.length>0){const e=A(o.getListType());if(L(c)){const t=O();t.append(e),c.insertAfter(t)}else c.insertAfter(e);e.append(...a)}return function(e){let t=e;for(;null==t.getNextSibling()&&null==t.getPreviousSibling();){const e=t.getParent();if(null==e||!L(e)&&!R(e))break;t=e}t.remove()}(r),!0}function N(...e){const t=[];for(const r of e)if(r&&"string"==typeof r)for(const[e]of r.matchAll(/\S+/g))t.push(e);return t}class T extends t.ElementNode{$config(){return this.config("listitem",{$transform:e=>{if(null==e.__checked)return;const t=e.getParent();R(t)&&"check"!==t.getListType()&&null!=e.getChecked()&&e.setChecked(void 0)},extends:t.ElementNode,importDOM:t.buildImportMap({li:()=>({conversion:S,priority:0})})})}constructor(e=1,t=void 0,r){super(r),this.__value=void 0===e?1:e,this.__checked=t}afterCloneFrom(e){super.afterCloneFrom(e),this.__value=e.__value,this.__checked=e.__checked}createDOM(e){const t=document.createElement("li");return this.updateListItemDOM(null,t,e),t}updateListItemDOM(t,n,s){const i=this.getParent();R(i)&&"check"===i.getListType()&&function(e,t,r,n){R(t.getFirstChild())?(e.removeAttribute("role"),e.removeAttribute("tabIndex"),e.removeAttribute("aria-checked")):(e.setAttribute("role","checkbox"),e.setAttribute("tabIndex","-1"),r&&t.__checked===r.__checked||e.setAttribute("aria-checked",t.getChecked()?"true":"false"))}(n,this,t),n.value=this.__value,function(t,r,n){const s=[],i=[],o=r.list,l=o?o.listitem:void 0;let c;o&&o.nested&&(c=o.nested.listitem);void 0!==l&&s.push(...N(l));if(o){const e=n.getParent(),t=R(e)&&"check"===e.getListType(),r=n.getChecked();t&&!r||i.push(o.listitemUnchecked),t&&r||i.push(o.listitemChecked),t&&s.push(r?o.listitemChecked:o.listitemUnchecked)}if(void 0!==c){const e=N(c);n.getChildren().some((e=>R(e)))?s.push(...e):i.push(...e)}i.length>0&&e.removeClassNamesFromElement(t,...i);s.length>0&&e.addClassNamesToElement(t,...s)}(n,s.theme,this);const o=t?t.__style:"",l=this.__style;o!==l&&(""===l?n.removeAttribute("style"):n.style.cssText=l),function(e,t,n){const s=r.getStyleObjectFromCSS(t.__textStyle);for(const t in s)e.style.setProperty(`--listitem-marker-${t}`,s[t]);if(n)for(const t in r.getStyleObjectFromCSS(n.__textStyle))t in s||e.style.removeProperty(`--listitem-marker-${t}`)}(n,this,t)}updateDOM(e,t,r){const n=t;return this.updateListItemDOM(e,n,r),!1}updateFromJSON(e){return super.updateFromJSON(e).setValue(e.value).setChecked(e.checked)}exportDOM(e){const t=this.createDOM(e._config),r=this.getFormatType();r&&(t.style.textAlign=r);const n=this.getDirection();return n&&(t.dir=n),{element:t}}exportJSON(){return{...super.exportJSON(),checked:this.getChecked(),value:this.getValue()}}append(...e){for(let r=0;r<e.length;r++){const n=e[r];if(t.$isElementNode(n)&&this.canMergeWith(n)){const e=n.getChildren();this.append(...e),n.remove()}else super.append(n)}return this}replace(e,r){if(L(e))return super.replace(e);this.setIndent(0);const s=this.getParentOrThrow();if(!R(s))return e;if(s.__first===this.getKey())s.insertBefore(e);else if(s.__last===this.getKey())s.insertAfter(e);else{const t=A(s.getListType());let r=this.getNextSibling();for(;r;){const e=r;r=r.getNextSibling(),t.append(e)}s.insertAfter(e),e.insertAfter(t)}return r&&(t.$isElementNode(e)||n(139),this.getChildren().forEach((t=>{e.append(t)}))),this.remove(),0===s.getChildrenSize()&&s.remove(),e}insertAfter(e,t=!0){const r=this.getParentOrThrow();if(R(r)||n(39),L(e))return super.insertAfter(e,t);const s=this.getNextSiblings();if(r.insertAfter(e,t),0!==s.length){const n=A(r.getListType());s.forEach((e=>n.append(e))),e.insertAfter(n,t)}return e}remove(e){const t=this.getPreviousSibling(),r=this.getNextSibling();super.remove(e),t&&r&&l(t)&&l(r)&&(h(t.getFirstChild(),r.getFirstChild()),r.remove())}insertNewAfter(e,t=!0){const r=O().updateFromJSON(this.exportJSON()).setChecked(!this.getChecked()&&void 0);return this.insertAfter(r,t),r}collapseAtStart(e){const r=t.$createParagraphNode();this.getChildren().forEach((e=>r.append(e)));const n=this.getParentOrThrow(),s=n.getParentOrThrow(),i=L(s);if(1===n.getChildrenSize())if(i)n.remove(),s.select();else{n.insertBefore(r),n.remove();const t=e.anchor,s=e.focus,i=r.getKey();"element"===t.type&&t.getNode().is(this)&&t.set(i,t.offset,"element"),"element"===s.type&&s.getNode().is(this)&&s.set(i,s.offset,"element")}else n.insertBefore(r),this.remove();return!0}getValue(){return this.getLatest().__value}setValue(e){const t=this.getWritable();return t.__value=e,t}getChecked(){const e=this.getLatest();let t;const r=this.getParent();return R(r)&&(t=r.getListType()),"check"===t?Boolean(e.__checked):void 0}setChecked(e){const t=this.getWritable();return t.__checked=e,t}toggleChecked(){const e=this.getWritable();return e.setChecked(!e.__checked)}getIndent(){const e=this.getParent();if(null===e||!this.isAttached())return this.getLatest().__indent;let t=e.getParentOrThrow(),r=0;for(;L(t);)t=t.getParentOrThrow().getParentOrThrow(),r++;return r}setIndent(e){"number"!=typeof e&&n(117),(e=Math.floor(e))>=0||n(199);let t=this.getIndent();for(;t!==e;)t<e?(m(this),t++):(_(this),t--);return this}canInsertAfter(e){return L(e)}canReplaceWith(e){return L(e)}canMergeWith(e){return L(e)||t.$isParagraphNode(e)}extractWithChild(e,r){if(!t.$isRangeSelection(r))return!1;const n=r.anchor.getNode(),s=r.focus.getNode();return this.isParentOf(n)&&this.isParentOf(s)&&this.getTextContent().length===r.getTextContent().length}isParentRequired(){return!0}createParentElementNode(){return A("bullet")}canMergeWhenEmpty(){return!0}}function S(e){if(e.classList.contains("task-list-item"))for(const t of e.children)if("INPUT"===t.tagName)return y(t);const t=e.getAttribute("aria-checked");return{node:O("true"===t||"false"!==t&&void 0)}}function y(e){if(!("checkbox"===e.getAttribute("type")))return{node:null};return{node:O(e.hasAttribute("checked"))}}function O(e){return t.$applyNodeReplacement(new T(void 0,e))}function L(e){return e instanceof T}class x extends t.ElementNode{$config(){return this.config("list",{$transform:e=>{!function(e){const t=e.getNextSibling();R(t)&&e.getListType()===t.getListType()&&h(e,t)}(e),p(e)},extends:t.ElementNode,importDOM:t.buildImportMap({ol:()=>({conversion:E,priority:0}),ul:()=>({conversion:E,priority:0})})})}constructor(e="number",t=1,r){super(r);const n=P[e]||e;this.__listType=n,this.__tag="number"===n?"ol":"ul",this.__start=t}afterCloneFrom(e){super.afterCloneFrom(e),this.__listType=e.__listType,this.__tag=e.__tag,this.__start=e.__start}getTag(){return this.getLatest().__tag}setListType(e){const t=this.getWritable();return t.__listType=e,t.__tag="number"===e?"ol":"ul",t}getListType(){return this.getLatest().__listType}getStart(){return this.getLatest().__start}setStart(e){const t=this.getWritable();return t.__start=e,t}createDOM(e,t){const r=this.__tag,n=document.createElement(r);return 1!==this.__start&&n.setAttribute("start",String(this.__start)),n.__lexicalListType=this.__listType,v(n,e.theme,this),n}updateDOM(e,t,r){return e.__tag!==this.__tag||(v(t,r.theme,this),!1)}updateFromJSON(e){return super.updateFromJSON(e).setListType(e.listType).setStart(e.start)}exportDOM(t){const r=this.createDOM(t._config,t);return e.isHTMLElement(r)&&(1!==this.__start&&r.setAttribute("start",String(this.__start)),"check"===this.__listType&&r.setAttribute("__lexicalListType","check")),{element:r}}exportJSON(){return{...super.exportJSON(),listType:this.getListType(),start:this.getStart(),tag:this.getTag()}}canBeEmpty(){return!1}canIndent(){return!1}splice(e,r,n){let s=n;for(let e=0;e<n.length;e++){const r=n[e];L(r)||(s===n&&(s=[...n]),s[e]=O().append(!t.$isElementNode(r)||R(r)||r.isInline()?r:t.$createTextNode(r.getTextContent())))}return super.splice(e,r,s)}extractWithChild(e){return L(e)}}function v(t,r,n){const i=[],o=[],l=r.list;if(void 0!==l){const e=l[`${n.__tag}Depth`]||[],t=s(n)-1,r=t%e.length,c=e[r],a=l[n.__tag];let g;const d=l.nested,u=l.checklist;if(void 0!==d&&d.list&&(g=d.list),void 0!==a&&i.push(a),void 0!==u&&"check"===n.__listType&&i.push(u),void 0!==c){i.push(...N(c));for(let t=0;t<e.length;t++)t!==r&&o.push(n.__tag+t)}if(void 0!==g){const e=N(g);t>1?i.push(...e):o.push(...e)}}o.length>0&&e.removeClassNamesFromElement(t,...o),i.length>0&&e.addClassNamesToElement(t,...i)}function M(e){const t=[];for(let r=0;r<e.length;r++){const n=e[r];if(L(n)){t.push(n);const e=n.getChildren();e.length>1&&e.forEach((e=>{R(e)&&t.push(c(e))}))}else t.push(c(n))}return t}function E(t){const r=t.nodeName.toLowerCase();let n=null;if("ol"===r){n=A("number",t.start)}else"ul"===r&&(n=function(t){if("check"===t.getAttribute("__lexicallisttype")||t.classList.contains("contains-task-list"))return!0;for(const r of t.childNodes)if(e.isHTMLElement(r)&&r.hasAttribute("aria-checked"))return!0;return!1}(t)?A("check"):A("bullet"));return{after:M,node:n}}const P={ol:"number",ul:"bullet"};function A(e="number",r=1){return t.$applyNodeReplacement(new x(e,r))}function R(e){return e instanceof x}const k=t.createCommand("INSERT_CHECK_LIST_COMMAND");function b(t,r){const n=t.target;if(!e.isHTMLElement(n))return;const s=n.firstChild;if(e.isHTMLElement(s)&&("UL"===s.tagName||"OL"===s.tagName))return;const i=n.parentNode;if(!i||"check"!==i.__lexicalListType)return;const o=n.getBoundingClientRect(),l=e.calculateZoomLevel(n),c=t.clientX/l,a=window.getComputedStyle?window.getComputedStyle(n,"::before"):{width:"0px"},g=parseFloat(a.width),d="touch"===t.pointerType?32:0;("rtl"===n.dir?c<o.right+d&&c>o.right-g-d:c>o.left-d&&c<o.left+g+d)&&r()}function I(r){b(r,(()=>{if(e.isHTMLElement(r.target)){const e=r.target,n=t.getNearestEditorFromDOMNode(e);null!=n&&n.isEditable()&&n.update((()=>{const r=t.$getNearestNodeFromDOMNode(e);L(r)&&(e.focus(),r.toggleChecked())}))}}))}function F(e){b(e,(()=>{e.preventDefault()}))}function D(){const t=document.activeElement;return e.isHTMLElement(t)&&"LI"===t.tagName&&null!=t.parentNode&&"check"===t.parentNode.__lexicalListType?t:null}function $(e,r,n){const s=D();return null!=s&&r.update((()=>{const i=t.$getNearestNodeFromDOMNode(s);if(!L(i))return;const o=function(e,t){let r=t?e.getPreviousSibling():e.getNextSibling(),n=e;for(;null==r&&L(n);)n=n.getParentOrThrow().getParent(),null!=n&&(r=t?n.getPreviousSibling():n.getNextSibling());for(;L(r);){const e=t?r.getLastChild():r.getFirstChild();if(!R(e))return r;r=t?e.getLastChild():e.getFirstChild()}return null}(i,n);if(null!=o){o.selectStart();const t=r.getElementByKey(o.__key);null!=t&&(e.preventDefault(),setTimeout((()=>{t.focus()}),0))}})),!1}const w=t.createCommand("UPDATE_LIST_START_COMMAND"),W=t.createCommand("INSERT_UNORDERED_LIST_COMMAND"),K=t.createCommand("INSERT_ORDERED_LIST_COMMAND"),Y=t.createCommand("REMOVE_LIST_COMMAND");exports.$createListItemNode=O,exports.$createListNode=A,exports.$getListDepth=s,exports.$handleListInsertParagraph=C,exports.$insertList=g,exports.$isListItemNode=L,exports.$isListNode=R,exports.$removeList=f,exports.INSERT_CHECK_LIST_COMMAND=k,exports.INSERT_ORDERED_LIST_COMMAND=K,exports.INSERT_UNORDERED_LIST_COMMAND=W,exports.ListItemNode=T,exports.ListNode=x,exports.REMOVE_LIST_COMMAND=Y,exports.UPDATE_LIST_START_COMMAND=w,exports.insertList=function(e,t){e.update((()=>g(t)))},exports.registerCheckList=function(r){return e.mergeRegister(r.registerCommand(k,(()=>(g("check"),!0)),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.KEY_ARROW_DOWN_COMMAND,(e=>$(e,r,!1)),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.KEY_ARROW_UP_COMMAND,(e=>$(e,r,!0)),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.KEY_ESCAPE_COMMAND,(()=>{if(null!=D()){const e=r.getRootElement();return null!=e&&e.focus(),!0}return!1}),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.KEY_SPACE_COMMAND,(e=>{const n=D();return!(null==n||!r.isEditable())&&(r.update((()=>{const r=t.$getNearestNodeFromDOMNode(n);L(r)&&(e.preventDefault(),r.toggleChecked())})),!0)}),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.KEY_ARROW_LEFT_COMMAND,(n=>r.getEditorState().read((()=>{const s=t.$getSelection();if(t.$isRangeSelection(s)&&s.isCollapsed()){const{anchor:i}=s,o="element"===i.type;if(o||0===i.offset){const s=i.getNode(),l=e.$findMatchingParent(s,(e=>t.$isElementNode(e)&&!e.isInline()));if(L(l)){const e=l.getParent();if(R(e)&&"check"===e.getListType()&&(o||l.getFirstDescendant()===s)){const e=r.getElementByKey(l.__key);if(null!=e&&document.activeElement!==e)return e.focus(),n.preventDefault(),!0}}}}return!1}))),t.COMMAND_PRIORITY_LOW),r.registerRootListener(((e,t)=>{null!==e&&(e.addEventListener("click",I),e.addEventListener("pointerdown",F)),null!==t&&(t.removeEventListener("click",I),t.removeEventListener("pointerdown",F))})))},exports.registerList=function(r){const n=e.mergeRegister(r.registerCommand(K,(()=>(g("number"),!0)),t.COMMAND_PRIORITY_LOW),r.registerCommand(w,(e=>{const{listNodeKey:r,newStart:n}=e,s=t.$getNodeByKey(r);return!!R(s)&&("number"===s.getListType()&&(s.setStart(n),p(s)),!0)}),t.COMMAND_PRIORITY_LOW),r.registerCommand(W,(()=>(g("bullet"),!0)),t.COMMAND_PRIORITY_LOW),r.registerCommand(Y,(()=>(f(),!0)),t.COMMAND_PRIORITY_LOW),r.registerCommand(t.INSERT_PARAGRAPH_COMMAND,(()=>C()),t.COMMAND_PRIORITY_LOW),r.registerNodeTransform(T,(e=>{const r=e.getFirstChild();if(r){if(t.$isTextNode(r)){const t=r.getStyle(),n=r.getFormat();e.getTextStyle()!==t&&e.setTextStyle(t),e.getTextFormat()!==n&&e.setTextFormat(n)}}else{const r=t.$getSelection();t.$isRangeSelection(r)&&(r.style!==e.getTextStyle()||r.format!==e.getTextFormat())&&r.isCollapsed()&&e.is(r.anchor.getNode())&&e.setTextStyle(r.style).setTextFormat(r.format)}})),r.registerNodeTransform(t.TextNode,(e=>{const t=e.getParent();if(L(t)&&e.is(t.getFirstChild())){const r=e.getStyle(),n=e.getFormat();r===t.getTextStyle()&&n===t.getTextFormat()||t.setTextStyle(r).setTextFormat(n)}})));return n},exports.registerListStrictIndentTransform=function(t){const r=t=>{const r=t.getParent();if(R(t.getFirstChild())||!R(r))return;const n=e.$findMatchingParent(t,(e=>L(e)&&R(e.getParent())&&L(e.getPreviousSibling())));if(null===n&&t.getIndent()>0)t.setIndent(0);else if(L(n)){const e=n.getPreviousSibling();if(L(e)){const n=function(e){let t=e,r=t.getFirstChild();for(;R(r);){const e=r.getLastChild();if(!L(e))break;t=e,r=t.getFirstChild()}return t}(e),i=n.getParent();if(R(i)){const e=s(i);e+1<s(r)&&t.setIndent(e)}}}};return t.registerNodeTransform(x,(e=>{const t=[e];for(;t.length>0;){const e=t.shift();if(R(e))for(const n of e.getChildren())if(L(n)){r(n);const e=n.getFirstChild();R(e)&&t.push(e)}}}))},exports.removeList=function(e){e.update((()=>f()))};