@wangeditor-next/list-module 3.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -155,6 +155,8 @@ interface ICodeBlockConfig {
155
155
  export interface IMenuConfig {
156
156
  bold: ISingleMenuConfig;
157
157
  underline: ISingleMenuConfig;
158
+ wavyUnderline: ISingleMenuConfig;
159
+ emphasisDot: ISingleMenuConfig;
158
160
  italic: ISingleMenuConfig;
159
161
  through: ISingleMenuConfig;
160
162
  code: ISingleMenuConfig;
@@ -10,7 +10,7 @@ import DOMText = globalThis.Text;
10
10
  import DOMRange = globalThis.Range;
11
11
  import DOMSelection = globalThis.Selection;
12
12
  import DOMStaticRange = globalThis.StaticRange;
13
- export { Dom7Array } from 'dom7';
13
+ export type { Dom7Array } from 'dom7';
14
14
  export default $;
15
15
  export declare enum NodeType {
16
16
  ELEMENT_NODE = 1,
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("@wangeditor-next/core"),require("slate"),require("dom7"),require("snabbdom")):"function"==typeof define&&define.amd?define(["@wangeditor-next/core","slate","dom7","snabbdom"],r):(e="undefined"!=typeof globalThis?globalThis:e||self).WangEditorListModule=r(e.core,e.slate,e.$,e.snabbdom)}(this,function(e,r,t,n){"use strict";e.i18nAddResources("en",{listModule:{unOrderedList:"Unordered list",orderedList:"Ordered list",lowerAlphaList:"Ordered list (a,b,c)",numberingActions:"Heading numbering actions",continueNumbering:"Continue heading numbering",restartNumbering:"Restart numbering"}}),e.i18nAddResources("zh-CN",{listModule:{unOrderedList:"无序列表",orderedList:"有序列表",lowerAlphaList:"有序列表(a,b,c)",numberingActions:"标题编号操作",continueNumbering:"继续标题编号",restartNumbering:"重新开始编号"}});var o=new WeakMap;function i(e){var t,n=e.children||[],o=n.length;if(0===o)return"";for(var i=0;i<o&&!t;i+=1){var a=n[i];r.Text.isText(a)&&(t=a)}return null==t?"":t.color||""}var a=function(e,r){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])},a(e,r)};function l(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function t(){this.constructor=e}a(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}var u=function(){return u=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},u.apply(this,arguments)};function c(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,i=t.call(e),a=[];try{for(;(void 0===r||r-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}function d(e,r,t){if(t||2===arguments.length)for(var n,o=0,i=r.length;o<i;o++)!n&&o in r||(n||(n=Array.prototype.slice.call(r,0,o)),n[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}function f(r){return e.DomEditor.checkNodeType(r,"list-item")}function v(e){return"string"==typeof e&&/^header[1-6]$/.test(e)}function p(e){return f(e)&&v(e.headingType)?e.headingType:null}function g(e){return f(e)&&e.level>0?Math.floor(e.level):0}function h(e){return f(e)&&!0===e.ordered&&"outline"===e.listMode&&v(e.headingType)}function m(e){var r=p(e),t=null==r?null:/^header([1-6])$/.exec(r);return null!=t?Number.parseInt(t[1],10):g(e)+1}function b(e){var r=e.ordered,t=void 0!==r&&r,n=e.start;return!t||"number"!=typeof n||Number.isNaN(n)?1:n}function y(e){var r=e.orderType;return"a"===r||"A"===r||"i"===r||"I"===r?r:"1"}function w(e,r){return e.ordered===r.ordered&&(!e.ordered||y(e)===y(r)&&b(e)===b(r))}function E(e,r){var t,n,o=Array.from({length:6},function(){return 0});try{for(var i=c(e.children),a=i.next();!a.done;a=i.next()){var l=a.value;if(h(l)){for(var u=m(l),s=u-1,d=0;d<s;d+=1)0===o[d]&&(o[d]=1);"number"==typeof l.listRestart&&l.listRestart>0?o[s]=Math.floor(l.listRestart):0===o[s]?o[s]=1:o[s]+=1;for(var f=s+1;f<o.length;f+=1)o[f]=0;if(l===r){var v=o.slice(0,u).join(".");return 1===u?"".concat(v,"."):v}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return""}"function"==typeof SuppressedError&&SuppressedError;var x=new Set;function T(e){return(e||"").trim().replace(/\s+/g,"").toLowerCase()}var N=new Set(["rgb(0, 0, 0)","rgb(38, 38, 38)","rgb(89, 89, 89)","rgb(140, 140, 140)","rgb(191, 191, 191)","rgb(217, 217, 217)","rgb(233, 233, 233)","rgb(245, 245, 245)","rgb(250, 250, 250)","rgb(255, 255, 255)","rgb(225, 60, 57)","rgb(231, 95, 51)","rgb(235, 144, 58)","rgb(245, 219, 77)","rgb(114, 192, 64)","rgb(89, 191, 192)","rgb(66, 144, 247)","rgb(54, 88, 226)","rgb(106, 57, 201)","rgb(216, 68, 147)","rgb(251, 233, 230)","rgb(252, 237, 225)","rgb(252, 239, 212)","rgb(252, 251, 207)","rgb(231, 246, 213)","rgb(218, 244, 240)","rgb(217, 237, 250)","rgb(224, 232, 250)","rgb(237, 225, 248)","rgb(246, 226, 234)","rgb(255, 163, 158)","rgb(255, 187, 150)","rgb(255, 213, 145)","rgb(255, 251, 143)","rgb(183, 235, 143)","rgb(135, 232, 222)","rgb(145, 213, 255)","rgb(173, 198, 255)","rgb(211, 173, 247)","rgb(255, 173, 210)","rgb(255, 77, 79)","rgb(255, 122, 69)","rgb(255, 169, 64)","rgb(255, 236, 61)","rgb(115, 209, 61)","rgb(54, 207, 201)","rgb(64, 169, 255)","rgb(89, 126, 247)","rgb(146, 84, 222)","rgb(247, 89, 171)","rgb(207, 19, 34)","rgb(212, 56, 13)","rgb(212, 107, 8)","rgb(212, 177, 6)","rgb(56, 158, 13)","rgb(8, 151, 156)","rgb(9, 109, 217)","rgb(29, 57, 196)","rgb(83, 29, 171)","rgb(196, 29, 127)","rgb(130, 0, 20)","rgb(135, 20, 0)","rgb(135, 56, 0)","rgb(97, 71, 0)","rgb(19, 82, 0)","rgb(0, 71, 79)","rgb(0, 58, 140)","rgb(6, 17, 120)","rgb(34, 7, 94)","rgb(120, 6, 80)"].map(function(e){return T(e)}));function M(e){var r=T(e);return"w-e-list-color-".concat(function(e){var r,t,n=7;try{for(var o=c(e),i=o.next();!i.done;i=o.next())n=(31*n+(i.value.codePointAt(0)||0))%2147483647}catch(e){r={error:e}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(r)throw r.error}}return n.toString(36)}("color:".concat(r)))}function A(e,r){var t=T(r);return!!t&&(!!N.has(t)||!!function(e,r){for(var t,n=(null===(t=null==e?void 0:e.getConfig().styleClassTokens)||void 0===t?void 0:t.color)||[],o=T(r),i=0;i<n.length;i+=1)if(T(n[i])===o)return!0;return!1}(e,r))}function L(r,t){if(A(r,t))return"class";var n=e.getClassStylePolicy(r),o="preserve-data";"fallback-inline"===n&&(o="inline"),"strict"===n&&(o="throw");var i="[wangeditor] Unsupported list color class token color=".concat(t,". policy=").concat(n),a="".concat(t,"|").concat(o);if(x.has(a)||(x.add(a),e.reportUnsupportedClassStyle(r,{type:"color",value:t,scene:"toHtml",fallback:o,message:i})),"throw"===o)throw new Error(i);return"inline"===o?"inline":"preserve-data"}var k=[],S=null;function C(e){return e.ordered?"ol":"ul"}function H(r,t,n){if("prev"===n&&0===t)return null;if("next"===n&&t===r.children.length-1)return null;var o="prev"===n?t-1:t+1,i=r.children[o];return!e.DomEditor.checkNodeType(i,"list-item")||h(i)?null:i}var D={type:"list-item",elemToHtml:function(r,t,n){var a="",l="",u=r,c=p(u),s=null==c?null:c.replace("header","h");if(h(u)&&null!=s)return{html:"<".concat(s,">").concat(t,"</").concat(s,">"),prefix:"",suffix:""};null!=s&&(t="<".concat(s,">").concat(t,"</").concat(s,">"));var d=u.level,f=void 0===d?0:d,v=function(e){return e.ordered?"ol":"ul"}(u),g=function(e){var r=e.ordered;if(void 0===r||!r)return"<ul>";var t=[],n=y(e),o=b(e);return"1"!==n&&t.push('type="'.concat(n,'"')),1!==o&&t.push('start="'.concat(o,'"')),null!=p(e)&&t.push('data-w-e-list-mode="standard"'),0===t.length?"<ol>":"<ol ".concat(t.join(" "),">")}(u),m=o.get(r),E=m&&Array.isArray(m.children)?m:null,x=n&&Array.isArray(n.children)?n:null,T=function(e){return!!e&&e.children.indexOf(r)>=0},N=x||E;T(x)?N=x:T(E)&&(N=E);var A=n||m;if(null==N)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};S!==N&&(k.length=0,S=N);var D=N.children.indexOf(r);if(D<0)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};var R=H(N,D,"prev"),O=H(N,D,"next"),j=!!O&&(O.level||0)>f;if(R){var I=R.level||0;if(f>I)for(V=0;V<f-I;V+=1)a+=g,k.push(v);else if(f===I){if(!w(R,u)){var z=k.pop()||C(R);a+="</".concat(z,">").concat(g),k.push(v)}}else{for(var B=I-f;B>0;){z=k.pop()||C(R);a+="</".concat(z,"></li>"),B-=1}var P=function(r,t,n){for(var o=t-1;o>=0;o-=1){var i=r.children[o];if(e.DomEditor.checkNodeType(i,"list-item")&&!h(i)&&(i.level||0)===n)return i}return null}(N,D,f);if(P&&!w(P,u)){z=k.pop()||C(P);a+="</".concat(z,">").concat(g),k.push(v)}}}else{k.length=0;for(var V=0;V<f+1;V+=1)a+=g,k.push(v)}var _=i(r),$=e.getTextStyleMode(A),q="",W="",X="";if(_)if("class"===$){X=' data-w-e-color="'.concat(_,'"');var U=L(A,_);"class"===U?W=' class="'.concat(M(_),'"'):"inline"===U&&(q=' style="color:'.concat(_,'"'))}else q=' style="color:'.concat(_,'"');var G="<li".concat(W).concat(X).concat(q,">").concat(t).concat(j?"":"</li>");if(!O){for(;k.length>0;){var Y=k.pop();if(!Y)break;l+="</".concat(Y,">"),k.length>0&&(l+="</li>")}S=null}return{html:G,prefix:a,suffix:l}}};function R(e,r){var t=function(e,r){var t=E(e,r).split(".").filter(Boolean).pop(),n=Number.parseInt(t||"",10);return Number.isFinite(n)&&n>0?n:1}(r,e.node),n=1===t?"":' start="'.concat(t,'"');return"<ol".concat(n,' data-w-e-list-mode="outline">')}function O(r,t){var n=function(r,t){var n=i(r);if(!n)return[];if("class"!==e.getTextStyleMode(t))return['style="color:'.concat(n,'"')];var o=['data-w-e-color="'.concat(n,'"')],a=L(t,n);return"class"===a?o.unshift('class="'.concat(M(n),'"')):"inline"===a&&o.push('style="color:'.concat(n,'"')),o}(r,t);return n.push('data-w-e-list-indent="'.concat(m(r)-1,'"')),"number"==typeof r.listRestart&&n.push('data-w-e-list-restart="'.concat(r.listRestart,'"')),n.push('data-w-e-outline-number="'.concat(E(t,r),'"')),"<li ".concat(n.join(" "),">")}function j(e,r){var t=e.items.map(function(e){var t=e.children.map(function(e){return j(e,r)}).join("");return"".concat(O(e.node,r)).concat(e.html).concat(t,"</li>")}).join("");return"".concat(R(e,r)).concat(t,"</ol>")}var I='<svg viewBox="0 0 1024 1024"><path d="M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z"></path></svg>';function z(e){return null==e.selection?[]:Array.from(r.Editor.nodes(e,{at:e.selection,match:function(t){return r.Element.isElement(t)&&r.Editor.isBlock(e,t)},mode:"highest"})).filter(function(e){return 1===s(e,2)[1].length})}function B(e){return Number.parseInt(e.slice(6),10)-1}var P=function(){function e(){this.type="list-item",this.tag="button"}return e.prototype.isTargetListNode=function(e){return!(!f(e)||Boolean(e.ordered)!==this.ordered)&&(!this.ordered||y(e)===(this.orderType||"1"))},e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){var r=this,t=z(e);return t.length>0&&t.every(function(e){var t=s(e,1)[0];return r.isTargetListNode(t)})},e.prototype.isDisabled=function(e){var t=z(e);return 0===t.length||t.some(function(t){var n=s(t,1)[0];return!function(e,t){return!r.Editor.isVoid(e,t)&&!["pre","code","table","table-row","table-cell"].includes(t.type)}(e,n)})},e.prototype.exec=function(e,t){var n=this,o=this.isActive(e),i=z(e);0!==i.length&&r.Editor.withoutNormalizing(e,function(){i.forEach(function(t){var i=s(t,2),a=i[0],l=i[1];if(o){var u=p(a);r.Transforms.setNodes(e,{type:u||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:l})}else{var c=function(e){return f(e)?p(e):v(e.type)?e.type:null}(a),d=n.ordered&&null==n.orderType&&null!=c;r.Transforms.setNodes(e,{type:"list-item",ordered:n.ordered,level:d?B(c):g(a),start:void 0,orderType:n.ordered?n.orderType:void 0,headingType:d?c:void 0,listMode:d?"outline":void 0,listRestart:void 0},{at:l})}})})},e}(),V=function(r){function t(){var t=r.apply(this,d([],s(arguments),!1))||this;return t.ordered=!1,t.title=e.t("listModule.unOrderedList"),t.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z"></path></svg>',t}return l(t,r),t}(P),_=function(r){function t(){var t=r.apply(this,d([],s(arguments),!1))||this;return t.ordered=!0,t.orderType="a",t.title=e.t("listModule.lowerAlphaList"),t.iconSvg=I,t}return l(t,r),t}(P),$=function(r){function t(){var t=r.apply(this,d([],s(arguments),!1))||this;return t.ordered=!0,t.title=e.t("listModule.orderedList"),t.iconSvg=I,t}return l(t,r),t}(P),q={key:"bulletedList",factory:function(){return new V}},W={key:"numberedList",factory:function(){return new $}},X={key:"numberedListLowerAlpha",factory:function(){return new _}};function U(e){return e.length?e[0].tagName.toLowerCase():""}function G(e){return"ol"===U(e.parent())}function Y(e){var r=e.parent();if("ol"===U(r)){var t=(r.attr("start")||"").trim(),n=Number.parseInt(t,10);return Number.isNaN(n)?void 0:n}}function F(e){var r=function(e){var r=(e.attr("data-w-e-list-restart")||"").trim();if(/^\d+$/.test(r)){var t=Number.parseInt(r,10);return t>0?t:void 0}}(e);return void 0!==r?r:null==e.attr("data-w-e-outline-number")&&function(e){for(var r,t=null===(r=e[0])||void 0===r?void 0:r.previousElementSibling;null!=t;){if("li"===t.tagName.toLowerCase())return!1;t=t.previousElementSibling}return!0}(e)?Y(e):void 0}function J(e){return r.Text.isText(e)&&""===e.text.trim()}function K(e,t,n){t.forEach(function(t){J(t)||(r.Text.isText(t)||n.isInline(t)?e.push(t):r.Element.isElement(t)&&K(e,t.children,n))})}t.append&&(t.fn.append=t.append),t.attr&&(t.fn.attr=t.attr),t.parent&&(t.fn.parent=t.parent);var Q={selector:"li:not([data-w-e-type])",parseElemHtml:function(e,n,o){var i=t(e),a=function(e){var r=(e.attr("data-w-e-list-indent")||"").trim();if(/^\d+$/.test(r))return Number.parseInt(r,10);for(var t=0,n=e.parent();n.length>0;){var o=U(n);"ul"!==o&&"ol"!==o||(t+=1),n=n.parent()}return Math.max(0,t-1)}(i),l=[],p=[];n.forEach(function(e){J(e)||(f(e)&&e.level>a?p.push(e):l.push(e))});var g=function(e){var t,n;try{for(var o=c(e),i=o.next();!i.done;i=o.next()){var a=i.value;if(r.Element.isElement(a)&&v(a.type))return a}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return null}(l),h=null!=g&&v(g.type)?g.type:void 0,m=function(e,t){var n=e.parent().attr("data-w-e-list-mode");return"outline"===n||"standard"===n?n:G(e)&&t.some(function(e){return r.Element.isElement(e)&&v(e.type)})?"outline":"standard"}(i,l),b=[];K(b,l,o),0===b.length&&b.push(p.length>0?{text:""}:{text:i.text().replace(/\s+/gm," ")});var y=G(i),w=Y(i),E=function(e){var r=e.parent();if("ol"===U(r)){var t=(r.attr("type")||"").trim();return"1"===t||"a"===t||"A"===t||"i"===t||"I"===t?t:void 0}}(i),x=y&&"outline"===m&&void 0!==h,T=x?F(i):void 0,N=u(u(u(u(u(u({type:"list-item",ordered:y,level:x?Number.parseInt(h.slice(6),10)-1:a},void 0===w||x?{}:{start:w}),void 0!==E?{orderType:E}:{}),void 0!==h?{headingType:h}:{}),x?{listMode:"outline"}:{}),void 0!==T?{listRestart:T}:{}),{children:b});return 0===p.length?N:d([N],s(p),!1)}};var Z={selector:"ul:not([data-w-e-type]),ol:not([data-w-e-type])",parseElemHtml:function(e,r,t){return r.flat(1/0)}};function ee(e){var t=s(r.Editor.nodes(e,{at:e.selection||void 0,match:f,universal:!0}),1)[0];return null==t?null:t}function re(e,t,n,o){r.Transforms.setNodes(e,{type:o||p(n)||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:t})}var te=new WeakMap;function ne(e,t,n){var o=e.children.indexOf(t);o<0||r.Transforms.setNodes(e,{listRestart:n},{at:[o]})}function oe(e){var r=te.get(e);null!=r&&(r.dispose(),te.delete(e))}function ie(e,r,t){var n=e.createElement("button");return n.type="button",n.className="w-e-list-outline-action",n.textContent=r,n.addEventListener("mousedown",function(e){return e.preventDefault()}),n.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t()}),n}function ae(r,t,n){if(!r.isDisabled()){oe(r);var o=n.ownerDocument,i=o.createElement("div");i.className="w-e-list-outline-actions",i.setAttribute("role","menu"),i.addEventListener("mousedown",function(e){return e.preventDefault()}),i.append(ie(o,e.t("listModule.continueNumbering"),function(){!function(e,r){ne(e,r)}(r,t),oe(r)}),ie(o,e.t("listModule.restartNumbering"),function(){!function(e,r){ne(e,r,1)}(r,t),oe(r)}));var a=e.DomEditor.getTextarea(r),l=a.$textAreaContainer[0],u=a.$scroll[0],c=n.getBoundingClientRect(),s=l.getBoundingClientRect();i.style.top="".concat(c.bottom-s.top+u.scrollTop+4,"px"),i.style.left="".concat(c.left-s.left+u.scrollLeft,"px"),l.append(i);var d=function(e){var t=e.target;t instanceof Node&&(i.contains(t)||n.contains(t)||oe(r))},f=function(){return oe(r)},v=function(){return oe(r)};o.addEventListener("mousedown",d,!0),r.on(e.EditorEvents.CHANGE,f),r.on(e.EditorEvents.DESTROYED,v),te.set(r,{elem:i,dispose:function(){o.removeEventListener("mousedown",d,!0),r.off(e.EditorEvents.CHANGE,f),r.off(e.EditorEvents.DESTROYED,v),i.remove()}})}}function le(e,r){if(void 0===r&&(r=!1),e<=0)return String(e);for(var t=e,n="";t>0;){var o=(r?65:97)+(t-1)%26;n=String.fromCharCode(o)+n,t=Math.floor((t-1)/26)}return n}function ue(e,r){var t,n;if(void 0===r&&(r=!1),e<=0||e>=4e3)return String(e);var o=e,i="";try{for(var a=c([[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]]),l=a.next();!l.done;l=a.next())for(var u=s(l.value,2),d=u[0],f=u[1];o>=d;)i+=f,o-=d}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return r?i:i.toLowerCase()}return{renderElems:[{type:"list-item",renderElem:function(r,t,a){o.set(r,a);var l=r,u=h(l),c=g(l),s={margin:"5px 0 5px ".concat(20*c,"px"),display:"flex",alignItems:"baseline"},d=i(l),v="";v=u?E(a,l):l.ordered?function(e,r){switch(r){case"a":return"".concat(le(e),".");case"A":return"".concat(le(e,!0),".");case"i":return"".concat(ue(e),".");case"I":return"".concat(ue(e,!0),".");default:return"".concat(e,".")}}(function(r,t){if(!t.ordered)return 1;var n=g(t),o=b(t),i=e.DomEditor.findPath(r,t)[0];if(i<=0)return o;for(var a=i-1;a>=0;a-=1){var l=r.children[a];if(!f(l))break;var u=g(l);if(u<n)break;if(u===n){if(!w(l,t)||h(l))break;o+=1}}return o}(a,l),y(l)):function(e){switch(void 0===e&&(e=0),e){case 0:return"•";case 1:return"◦";default:return"▪"}}(c);var m={marginRight:"0.5em",color:d},x=u?n.jsx("button",{type:"button",className:"w-e-list-marker",contentEditable:!1,"data-w-e-reserve":!0,"aria-label":e.t("listModule.numberingActions"),title:e.t("listModule.numberingActions"),style:m,on:{mousedown:function(e){return e.preventDefault()},click:function(e){e.preventDefault(),e.stopPropagation(),e.currentTarget instanceof HTMLElement&&ae(a,l,e.currentTarget)}}},v):n.jsx("span",{className:"w-e-list-marker",contentEditable:!1,style:m,"data-w-e-reserve":!0},v),T=p(l),N=null==T?"span":T.replace("header","h");return n.jsx("div",{className:"w-e-list-item",style:s},x,n.jsx(N,{style:{flex:"1",minWidth:"0",wordBreak:"break-word"}},t))}}],editorPlugin:function(t){var n=t.deleteBackward,o=t.handleTab,i=t.normalizeNode,a=t.insertBreak,l=t;return l.insertBreak=function(){var e=ee(l);if(null==e)return a();var t=s(e,2),n=t[0],o=t[1];if(""!==r.Node.string(n))return a();re(l,o,n,"paragraph")},l.deleteBackward=function(o){var i=l.selection;if(null==i||r.Range.isExpanded(i))n(o);else{var a=ee(l);if(null!=a&&0===i.focus.offset){var u=s(a,2),c=u[0],d=u[1];if(h(c))re(l,d,c);else{var v=g(c);if(v<=0)re(l,d,c);else{var p=function(t,n,o){for(var i=void 0!==o?o:n.level||0,a=e.DomEditor.findPath(t,n);;){if(0===a.length||0===a[a.length-1])return null;a=r.Path.previous(a);var l=r.Editor.node(t,a);if(null==l||!f(l[0]))return null;if(g(l[0])===i)return l[0]}}(t,c,v-1);null!=p?r.Transforms.setNodes(l,{level:v-1,ordered:p.ordered,start:p.ordered?p.start:void 0,orderType:p.ordered?p.orderType:void 0},{at:d}):r.Transforms.setNodes(l,{level:v-1},{at:d})}}}else n(o)}},l.handleTab=function(){var e=l.selection;if(null!=e)if(r.Range.isCollapsed(e)){var t=ee(l);if(null==t||h(t[0])||0!==e.focus.offset)return void o();var n=s(t,2),i=n[0],a=n[1];r.Transforms.setNodes(l,{level:g(i)+1},{at:a})}else{var u=function(e){return Array.from(r.Editor.nodes(e,{at:e.selection||void 0,match:function(t){return r.Element.isElement(t)&&r.Editor.isBlock(e,t)},mode:"highest"})).filter(function(e){return 1===s(e,2)[1].length})}(l),c=u.filter(function(e){var r=s(e,1)[0];return f(r)&&!h(r)});c.length!==u.length||c.length<=1?o():c.forEach(function(e){var t=s(e,2),n=t[0],o=t[1];r.Transforms.setNodes(l,{level:g(n)+1},{at:o})})}else o()},l.normalizeNode=function(t){var n=s(t,2),o=n[0],a=n[1],u=e.DomEditor.getNodeType(o);return"bulleted-list"!==u&&"numbered-list"!==u||r.Transforms.unwrapNodes(l,{at:a}),i([o,a])},l},menus:[q,W,X],htmlTransform:function(e,r,t){var n=[],o=null,i=function(){null!=o&&0!==o.roots.length&&(n.push(o.roots.map(function(e){return j(e,t)}).join("")),o=null)};return r.forEach(function(r,t){var a=e[t]||"";if(h(r))return null==o&&(o={roots:[],levels:[]}),void function(e,r,t,n){var o,i=Math.max(0,m(t)-1);i>r.length&&(i=r.length),r.length=i+1;var a,l=i>0?null===(o=r[i-1])||void 0===o?void 0:o.lastItem:null,u=r[i],c="number"==typeof t.listRestart;null==u||!w(u.container.node,t)||c?(a={node:t,items:[]},null!=l?l.children.push(a):e.push(a)):a=u.container;var s={node:t,html:n,children:[]};a.items.push(s),r[i]={container:a,lastItem:s}}(o.roots,o.levels,r,a);i(),n.push(a)}),i(),n},elemsToHtml:[D],parseElemsHtml:[Z,Q]}});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("@wangeditor-next/core"),require("slate"),require("dom7"),require("snabbdom")):"function"==typeof define&&define.amd?define(["@wangeditor-next/core","slate","dom7","snabbdom"],r):(e="undefined"!=typeof globalThis?globalThis:e||self).WangEditorListModule=r(e.WangEditorCore,e.slate,e.$,e.snabbdom)}(this,function(e,r,t,n){"use strict";e.i18nAddResources("en",{listModule:{unOrderedList:"Unordered list",orderedList:"Ordered list",lowerAlphaList:"Ordered list (a,b,c)",numberingActions:"Heading numbering actions",continueNumbering:"Continue heading numbering",restartNumbering:"Restart numbering"}}),e.i18nAddResources("zh-CN",{listModule:{unOrderedList:"无序列表",orderedList:"有序列表",lowerAlphaList:"有序列表(a,b,c)",numberingActions:"标题编号操作",continueNumbering:"继续标题编号",restartNumbering:"重新开始编号"}});var o=new WeakMap;function i(e){var t,n=e.children||[],o=n.length;if(0===o)return"";for(var i=0;i<o&&!t;i+=1){var a=n[i];r.Text.isText(a)&&(t=a)}return null==t?"":t.color||""}var a=function(e,r){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])},a(e,r)};function l(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function t(){this.constructor=e}a(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}var u=function(){return u=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},u.apply(this,arguments)};function s(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function c(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,i=t.call(e),a=[];try{for(;(void 0===r||r-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}function d(e,r,t){if(t||2===arguments.length)for(var n,o=0,i=r.length;o<i;o++)!n&&o in r||(n||(n=Array.prototype.slice.call(r,0,o)),n[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}function f(r){return e.DomEditor.checkNodeType(r,"list-item")}function v(e){return"string"==typeof e&&/^header[1-6]$/.test(e)}function p(e){return f(e)&&v(e.headingType)?e.headingType:null}function g(e){return f(e)&&e.level>0?Math.floor(e.level):0}function h(e){return f(e)&&!0===e.ordered&&"outline"===e.listMode&&v(e.headingType)}function m(e){var r=p(e),t=null==r?null:/^header([1-6])$/.exec(r);return null!=t?Number.parseInt(t[1],10):g(e)+1}function b(e){var r=e.ordered,t=void 0!==r&&r,n=e.start;return!t||"number"!=typeof n||Number.isNaN(n)?1:n}function y(e){var r=e.orderType;return"a"===r||"A"===r||"i"===r||"I"===r?r:"1"}function w(e,r){return e.ordered===r.ordered&&(!e.ordered||y(e)===y(r)&&b(e)===b(r))}function E(e,r){var t,n,o=Array.from({length:6},function(){return 0});try{for(var i=s(e.children),a=i.next();!a.done;a=i.next()){var l=a.value;if(h(l)){for(var u=m(l),c=u-1,d=0;d<c;d+=1)0===o[d]&&(o[d]=1);"number"==typeof l.listRestart&&l.listRestart>0?o[c]=Math.floor(l.listRestart):0===o[c]?o[c]=1:o[c]+=1;for(var f=c+1;f<o.length;f+=1)o[f]=0;if(l===r){var v=o.slice(0,u).join(".");return 1===u?"".concat(v,"."):v}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return""}"function"==typeof SuppressedError&&SuppressedError;var x=new Set;function T(e){return(e||"").trim().replace(/\s+/g,"").toLowerCase()}var N=new Set(["rgb(0, 0, 0)","rgb(38, 38, 38)","rgb(89, 89, 89)","rgb(140, 140, 140)","rgb(191, 191, 191)","rgb(217, 217, 217)","rgb(233, 233, 233)","rgb(245, 245, 245)","rgb(250, 250, 250)","rgb(255, 255, 255)","rgb(225, 60, 57)","rgb(231, 95, 51)","rgb(235, 144, 58)","rgb(245, 219, 77)","rgb(114, 192, 64)","rgb(89, 191, 192)","rgb(66, 144, 247)","rgb(54, 88, 226)","rgb(106, 57, 201)","rgb(216, 68, 147)","rgb(251, 233, 230)","rgb(252, 237, 225)","rgb(252, 239, 212)","rgb(252, 251, 207)","rgb(231, 246, 213)","rgb(218, 244, 240)","rgb(217, 237, 250)","rgb(224, 232, 250)","rgb(237, 225, 248)","rgb(246, 226, 234)","rgb(255, 163, 158)","rgb(255, 187, 150)","rgb(255, 213, 145)","rgb(255, 251, 143)","rgb(183, 235, 143)","rgb(135, 232, 222)","rgb(145, 213, 255)","rgb(173, 198, 255)","rgb(211, 173, 247)","rgb(255, 173, 210)","rgb(255, 77, 79)","rgb(255, 122, 69)","rgb(255, 169, 64)","rgb(255, 236, 61)","rgb(115, 209, 61)","rgb(54, 207, 201)","rgb(64, 169, 255)","rgb(89, 126, 247)","rgb(146, 84, 222)","rgb(247, 89, 171)","rgb(207, 19, 34)","rgb(212, 56, 13)","rgb(212, 107, 8)","rgb(212, 177, 6)","rgb(56, 158, 13)","rgb(8, 151, 156)","rgb(9, 109, 217)","rgb(29, 57, 196)","rgb(83, 29, 171)","rgb(196, 29, 127)","rgb(130, 0, 20)","rgb(135, 20, 0)","rgb(135, 56, 0)","rgb(97, 71, 0)","rgb(19, 82, 0)","rgb(0, 71, 79)","rgb(0, 58, 140)","rgb(6, 17, 120)","rgb(34, 7, 94)","rgb(120, 6, 80)"].map(function(e){return T(e)}));function M(e){var r=T(e);return"w-e-list-color-".concat(function(e){var r,t,n=7;try{for(var o=s(e),i=o.next();!i.done;i=o.next())n=(31*n+(i.value.codePointAt(0)||0))%2147483647}catch(e){r={error:e}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(r)throw r.error}}return n.toString(36)}("color:".concat(r)))}function A(e,r){var t=T(r);return!!t&&(!!N.has(t)||!!function(e,r){for(var t,n=(null===(t=null==e?void 0:e.getConfig().styleClassTokens)||void 0===t?void 0:t.color)||[],o=T(r),i=0;i<n.length;i+=1)if(T(n[i])===o)return!0;return!1}(e,r))}function L(r,t){if(A(r,t))return"class";var n=e.getClassStylePolicy(r),o="preserve-data";"fallback-inline"===n&&(o="inline"),"strict"===n&&(o="throw");var i="[wangeditor] Unsupported list color class token color=".concat(t,". policy=").concat(n),a="".concat(t,"|").concat(o);if(x.has(a)||(x.add(a),e.reportUnsupportedClassStyle(r,{type:"color",value:t,scene:"toHtml",fallback:o,message:i})),"throw"===o)throw new Error(i);return"inline"===o?"inline":"preserve-data"}var k=[],C=null;function S(e){return e.ordered?"ol":"ul"}function H(r,t,n){if("prev"===n&&0===t)return null;if("next"===n&&t===r.children.length-1)return null;var o="prev"===n?t-1:t+1,i=r.children[o];return!e.DomEditor.checkNodeType(i,"list-item")||h(i)?null:i}var D={type:"list-item",elemToHtml:function(r,t,n){var a="",l="",u=r,s=p(u),c=null==s?null:s.replace("header","h");if(h(u)&&null!=c)return{html:"<".concat(c,">").concat(t,"</").concat(c,">"),prefix:"",suffix:""};null!=c&&(t="<".concat(c,">").concat(t,"</").concat(c,">"));var d=u.level,f=void 0===d?0:d,v=function(e){return e.ordered?"ol":"ul"}(u),g=function(e){var r=e.ordered;if(void 0===r||!r)return"<ul>";var t=[],n=y(e),o=b(e);return"1"!==n&&t.push('type="'.concat(n,'"')),1!==o&&t.push('start="'.concat(o,'"')),null!=p(e)&&t.push('data-w-e-list-mode="standard"'),0===t.length?"<ol>":"<ol ".concat(t.join(" "),">")}(u),m=o.get(r),E=m&&Array.isArray(m.children)?m:null,x=n&&Array.isArray(n.children)?n:null,T=function(e){return!!e&&e.children.indexOf(r)>=0},N=x||E;T(x)?N=x:T(E)&&(N=E);var A=n||m;if(null==N)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};C!==N&&(k.length=0,C=N);var D=N.children.indexOf(r);if(D<0)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};var R=H(N,D,"prev"),O=H(N,D,"next"),j=!!O&&(O.level||0)>f;if(R){var I=R.level||0;if(f>I)for(_=0;_<f-I;_+=1)a+=g,k.push(v);else if(f===I){if(!w(R,u)){var z=k.pop()||S(R);a+="</".concat(z,">").concat(g),k.push(v)}}else{for(var B=I-f;B>0;){z=k.pop()||S(R);a+="</".concat(z,"></li>"),B-=1}var P=function(r,t,n){for(var o=t-1;o>=0;o-=1){var i=r.children[o];if(e.DomEditor.checkNodeType(i,"list-item")&&!h(i)&&(i.level||0)===n)return i}return null}(N,D,f);if(P&&!w(P,u)){z=k.pop()||S(P);a+="</".concat(z,">").concat(g),k.push(v)}}}else{k.length=0;for(var _=0;_<f+1;_+=1)a+=g,k.push(v)}var V=i(r),$=e.getTextStyleMode(A),W="",q="",X="";if(V)if("class"===$){X=' data-w-e-color="'.concat(V,'"');var U=L(A,V);"class"===U?q=' class="'.concat(M(V),'"'):"inline"===U&&(W=' style="color:'.concat(V,'"'))}else W=' style="color:'.concat(V,'"');var G="<li".concat(q).concat(X).concat(W,">").concat(t).concat(j?"":"</li>");if(!O){for(;k.length>0;){var Y=k.pop();if(!Y)break;l+="</".concat(Y,">"),k.length>0&&(l+="</li>")}C=null}return{html:G,prefix:a,suffix:l}}};function R(e,r){var t=function(e,r){var t=E(e,r).split(".").filter(Boolean).pop(),n=Number.parseInt(t||"",10);return Number.isFinite(n)&&n>0?n:1}(r,e.node),n=1===t?"":' start="'.concat(t,'"');return"<ol".concat(n,' data-w-e-list-mode="outline">')}function O(r,t){var n=function(r,t){var n=i(r);if(!n)return[];if("class"!==e.getTextStyleMode(t))return['style="color:'.concat(n,'"')];var o=['data-w-e-color="'.concat(n,'"')],a=L(t,n);return"class"===a?o.unshift('class="'.concat(M(n),'"')):"inline"===a&&o.push('style="color:'.concat(n,'"')),o}(r,t);return n.push('data-w-e-list-indent="'.concat(m(r)-1,'"')),"number"==typeof r.listRestart&&n.push('data-w-e-list-restart="'.concat(r.listRestart,'"')),n.push('data-w-e-outline-number="'.concat(E(t,r),'"')),"<li ".concat(n.join(" "),">")}function j(e,r){var t=e.items.map(function(e){var t=e.children.map(function(e){return j(e,r)}).join("");return"".concat(O(e.node,r)).concat(e.html).concat(t,"</li>")}).join("");return"".concat(R(e,r)).concat(t,"</ol>")}var I='<svg viewBox="0 0 1024 1024"><path d="M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z"></path></svg>';function z(e){return null==e.selection?[]:Array.from(r.Editor.nodes(e,{at:e.selection,match:function(t){return r.Element.isElement(t)&&r.Editor.isBlock(e,t)},mode:"highest"})).filter(function(e){return 1===c(e,2)[1].length})}function B(e){return Number.parseInt(e.slice(6),10)-1}var P=function(){function e(){this.type="list-item",this.tag="button"}return e.prototype.isTargetListNode=function(e){return!(!f(e)||Boolean(e.ordered)!==this.ordered)&&(!this.ordered||y(e)===(this.orderType||"1"))},e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){var r=this,t=z(e);return t.length>0&&t.every(function(e){var t=c(e,1)[0];return r.isTargetListNode(t)})},e.prototype.isDisabled=function(e){var t=z(e);return 0===t.length||t.some(function(t){var n=c(t,1)[0];return!function(e,t){return!r.Editor.isVoid(e,t)&&!["pre","code","table","table-row","table-cell"].includes(t.type)}(e,n)})},e.prototype.exec=function(e,t){var n=this,o=this.isActive(e),i=z(e);0!==i.length&&r.Editor.withoutNormalizing(e,function(){i.forEach(function(t){var i=c(t,2),a=i[0],l=i[1];if(o){var u=p(a);r.Transforms.setNodes(e,{type:u||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:l})}else{var s=function(e){return f(e)?p(e):v(e.type)?e.type:null}(a),d=n.ordered&&null==n.orderType&&null!=s;r.Transforms.setNodes(e,{type:"list-item",ordered:n.ordered,level:d?B(s):g(a),start:void 0,orderType:n.ordered?n.orderType:void 0,headingType:d?s:void 0,listMode:d?"outline":void 0,listRestart:void 0},{at:l})}})})},e}(),_=function(r){function t(){var t=r.apply(this,d([],c(arguments),!1))||this;return t.ordered=!1,t.title=e.t("listModule.unOrderedList"),t.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z"></path></svg>',t}return l(t,r),t}(P),V=function(r){function t(){var t=r.apply(this,d([],c(arguments),!1))||this;return t.ordered=!0,t.orderType="a",t.title=e.t("listModule.lowerAlphaList"),t.iconSvg=I,t}return l(t,r),t}(P),$=function(r){function t(){var t=r.apply(this,d([],c(arguments),!1))||this;return t.ordered=!0,t.title=e.t("listModule.orderedList"),t.iconSvg=I,t}return l(t,r),t}(P),W={key:"bulletedList",factory:function(){return new _}},q={key:"numberedList",factory:function(){return new $}},X={key:"numberedListLowerAlpha",factory:function(){return new V}},U=globalThis.Node;function G(e){if(0===e.length)return"";var r=e[0];return r.nodeType!==U.ELEMENT_NODE?"":r.tagName.toLowerCase()}function Y(e){return"ol"===G(e.parent())}function F(e){var r=e.parent();if("ol"===G(r)){var t=(r.attr("start")||"").trim(),n=Number.parseInt(t,10);return Number.isNaN(n)?void 0:n}}function J(e){var r=function(e){var r=(e.attr("data-w-e-list-restart")||"").trim();if(/^\d+$/.test(r)){var t=Number.parseInt(r,10);return t>0?t:void 0}}(e);return void 0!==r?r:null==e.attr("data-w-e-outline-number")&&function(e){for(var r,t=null===(r=e[0])||void 0===r?void 0:r.previousElementSibling;null!=t;){if("li"===t.tagName.toLowerCase())return!1;t=t.previousElementSibling}return!0}(e)?F(e):void 0}function K(e){return r.Text.isText(e)&&""===e.text.trim()}function Q(e,t,n){t.forEach(function(t){K(t)||(r.Text.isText(t)||n.isInline(t)?e.push(t):r.Element.isElement(t)&&Q(e,t.children,n))})}t.append&&(t.fn.append=t.append),t.attr&&(t.fn.attr=t.attr),t.parent&&(t.fn.parent=t.parent);var Z={selector:"li:not([data-w-e-type])",parseElemHtml:function(e,n,o){var i=t(e),a=function(e){var r=(e.attr("data-w-e-list-indent")||"").trim();if(/^\d+$/.test(r))return Number.parseInt(r,10);for(var t=0,n=e.parent();n.length>0;){var o=G(n);"ul"!==o&&"ol"!==o||(t+=1),n=n.parent()}return Math.max(0,t-1)}(i),l=[],p=[];n.forEach(function(e){K(e)||(f(e)&&e.level>a?p.push(e):l.push(e))});var g=function(e){var t,n;try{for(var o=s(e),i=o.next();!i.done;i=o.next()){var a=i.value;if(r.Element.isElement(a)&&v(a.type))return a}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return null}(l),h=null!=g&&v(g.type)?g.type:void 0,m=function(e,t){var n=e.parent().attr("data-w-e-list-mode");return"outline"===n||"standard"===n?n:Y(e)&&t.some(function(e){return r.Element.isElement(e)&&v(e.type)})?"outline":"standard"}(i,l),b=[];Q(b,l,o),0===b.length&&b.push(p.length>0?{text:""}:{text:i.text().replace(/\s+/gm," ")});var y=Y(i),w=F(i),E=function(e){var r=e.parent();if("ol"===G(r)){var t=(r.attr("type")||"").trim();return"1"===t||"a"===t||"A"===t||"i"===t||"I"===t?t:void 0}}(i),x=y&&"outline"===m&&void 0!==h,T=x?J(i):void 0,N=u(u(u(u(u(u({type:"list-item",ordered:y,level:x?Number.parseInt(h.slice(6),10)-1:a},void 0===w||x?{}:{start:w}),void 0!==E?{orderType:E}:{}),void 0!==h?{headingType:h}:{}),x?{listMode:"outline"}:{}),void 0!==T?{listRestart:T}:{}),{children:b});return 0===p.length?N:d([N],c(p),!1)}};var ee={selector:"ul:not([data-w-e-type]),ol:not([data-w-e-type])",parseElemHtml:function(e,r,t){return r.flat(1/0)}};function re(e){var t=c(r.Editor.nodes(e,{at:e.selection||void 0,match:f,universal:!0}),1)[0];return null==t?null:t}function te(e,t,n,o){r.Transforms.setNodes(e,{type:o||p(n)||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:t})}var ne=new WeakMap;function oe(e,t,n){var o=e.children.indexOf(t);o<0||r.Transforms.setNodes(e,{listRestart:n},{at:[o]})}function ie(e){var r=ne.get(e);null!=r&&(r.dispose(),ne.delete(e))}function ae(e,r,t){var n=e.createElement("button");return n.type="button",n.className="w-e-list-outline-action",n.textContent=r,n.addEventListener("mousedown",function(e){return e.preventDefault()}),n.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t()}),n}function le(r,t,n){if(!r.isDisabled()){ie(r);var o=n.ownerDocument,i=o.createElement("div");i.className="w-e-list-outline-actions",i.setAttribute("role","menu"),i.addEventListener("mousedown",function(e){return e.preventDefault()}),i.append(ae(o,e.t("listModule.continueNumbering"),function(){!function(e,r){oe(e,r)}(r,t),ie(r)}),ae(o,e.t("listModule.restartNumbering"),function(){!function(e,r){oe(e,r,1)}(r,t),ie(r)}));var a=e.DomEditor.getTextarea(r),l=a.$textAreaContainer[0],u=a.$scroll[0],s=n.getBoundingClientRect(),c=l.getBoundingClientRect();i.style.top="".concat(s.bottom-c.top+u.scrollTop+4,"px"),i.style.left="".concat(s.left-c.left+u.scrollLeft,"px"),l.append(i);var d=function(e){var t=e.target;t instanceof Node&&(i.contains(t)||n.contains(t)||ie(r))},f=function(){return ie(r)},v=function(){return ie(r)};o.addEventListener("mousedown",d,!0),r.on(e.EditorEvents.CHANGE,f),r.on(e.EditorEvents.DESTROYED,v),ne.set(r,{elem:i,dispose:function(){o.removeEventListener("mousedown",d,!0),r.off(e.EditorEvents.CHANGE,f),r.off(e.EditorEvents.DESTROYED,v),i.remove()}})}}function ue(e,r){if(void 0===r&&(r=!1),e<=0)return String(e);for(var t=e,n="";t>0;){var o=(r?65:97)+(t-1)%26;n=String.fromCharCode(o)+n,t=Math.floor((t-1)/26)}return n}function se(e,r){var t,n;if(void 0===r&&(r=!1),e<=0||e>=4e3)return String(e);var o=e,i="";try{for(var a=s([[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]]),l=a.next();!l.done;l=a.next())for(var u=c(l.value,2),d=u[0],f=u[1];o>=d;)i+=f,o-=d}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return r?i:i.toLowerCase()}return{renderElems:[{type:"list-item",renderElem:function(r,t,a){o.set(r,a);var l=r,u=h(l),s=g(l),c={margin:"5px 0 5px ".concat(20*s,"px"),display:"flex",alignItems:"baseline"},d=i(l),v="";v=u?E(a,l):l.ordered?function(e,r){switch(r){case"a":return"".concat(ue(e),".");case"A":return"".concat(ue(e,!0),".");case"i":return"".concat(se(e),".");case"I":return"".concat(se(e,!0),".");default:return"".concat(e,".")}}(function(r,t){if(!t.ordered)return 1;var n=g(t),o=b(t),i=e.DomEditor.findPath(r,t)[0];if(i<=0)return o;for(var a=i-1;a>=0;a-=1){var l=r.children[a];if(!f(l))break;var u=g(l);if(u<n)break;if(u===n){if(!w(l,t)||h(l))break;o+=1}}return o}(a,l),y(l)):function(e){switch(void 0===e&&(e=0),e){case 0:return"•";case 1:return"◦";default:return"▪"}}(s);var m={marginRight:"0.5em",color:d},x=u?n.jsx("button",{type:"button",className:"w-e-list-marker",contentEditable:!1,"data-w-e-reserve":!0,"aria-label":e.t("listModule.numberingActions"),title:e.t("listModule.numberingActions"),style:m,on:{mousedown:function(e){return e.preventDefault()},click:function(e){e.preventDefault(),e.stopPropagation(),e.currentTarget instanceof HTMLElement&&le(a,l,e.currentTarget)}}},v):n.jsx("span",{className:"w-e-list-marker",contentEditable:!1,style:m,"data-w-e-reserve":!0},v),T=p(l),N=null==T?"span":T.replace("header","h");return n.jsx("div",{className:"w-e-list-item",style:c},x,n.jsx(N,{style:{flex:"1",minWidth:"0",wordBreak:"break-word"}},t))}}],editorPlugin:function(t){var n=t.deleteBackward,o=t.handleTab,i=t.normalizeNode,a=t.insertBreak,l=t;return l.insertBreak=function(){var e=re(l);if(null==e)return a();var t=c(e,2),n=t[0],o=t[1];if(""!==r.Node.string(n))return a();te(l,o,n,"paragraph")},l.deleteBackward=function(o){var i=l.selection;if(null==i||r.Range.isExpanded(i))n(o);else{var a=re(l);if(null!=a&&0===i.focus.offset){var u=c(a,2),s=u[0],d=u[1];if(h(s))te(l,d,s);else{var v=g(s);if(v<=0)te(l,d,s);else{var p=function(t,n,o){for(var i=void 0!==o?o:n.level||0,a=e.DomEditor.findPath(t,n);;){if(0===a.length||0===a[a.length-1])return null;a=r.Path.previous(a);var l=r.Editor.node(t,a);if(null==l||!f(l[0]))return null;if(g(l[0])===i)return l[0]}}(t,s,v-1);null!=p?r.Transforms.setNodes(l,{level:v-1,ordered:p.ordered,start:p.ordered?p.start:void 0,orderType:p.ordered?p.orderType:void 0},{at:d}):r.Transforms.setNodes(l,{level:v-1},{at:d})}}}else n(o)}},l.handleTab=function(){var e=l.selection;if(null!=e)if(r.Range.isCollapsed(e)){var t=re(l);if(null==t||h(t[0])||0!==e.focus.offset)return void o();var n=c(t,2),i=n[0],a=n[1];r.Transforms.setNodes(l,{level:g(i)+1},{at:a})}else{var u=function(e){return Array.from(r.Editor.nodes(e,{at:e.selection||void 0,match:function(t){return r.Element.isElement(t)&&r.Editor.isBlock(e,t)},mode:"highest"})).filter(function(e){return 1===c(e,2)[1].length})}(l),s=u.filter(function(e){var r=c(e,1)[0];return f(r)&&!h(r)});s.length!==u.length||s.length<=1?o():s.forEach(function(e){var t=c(e,2),n=t[0],o=t[1];r.Transforms.setNodes(l,{level:g(n)+1},{at:o})})}else o()},l.normalizeNode=function(t){var n=c(t,2),o=n[0],a=n[1],u=e.DomEditor.getNodeType(o);return"bulleted-list"!==u&&"numbered-list"!==u||r.Transforms.unwrapNodes(l,{at:a}),i([o,a])},l},menus:[W,q,X],htmlTransform:function(e,r,t){var n=[],o=null,i=function(){null!=o&&0!==o.roots.length&&(n.push(o.roots.map(function(e){return j(e,t)}).join("")),o=null)};return r.forEach(function(r,t){var a=e[t]||"";if(h(r))return null==o&&(o={roots:[],levels:[]}),void function(e,r,t,n){var o,i=Math.max(0,m(t)-1);i>r.length&&(i=r.length),r.length=i+1;var a,l=i>0?null===(o=r[i-1])||void 0===o?void 0:o.lastItem:null,u=r[i],s="number"==typeof t.listRestart;null==u||!w(u.container.node,t)||s?(a={node:t,items:[]},null!=l?l.children.push(a):e.push(a)):a=u.container;var c={node:t,html:n,children:[]};a.items.push(c),r[i]={container:a,lastItem:c}}(o.roots,o.levels,r,a);i(),n.push(a)}),i(),n},elemsToHtml:[D],parseElemsHtml:[ee,Z]}});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/utils/maps.ts","../src/utils/util.ts","../src/module/helpers.ts","../src/module/style-class.ts","../src/module/elem-to-html.ts","../src/module/html-transform.ts","../src/constants/svg.ts","../src/module/menu/BaseMenu.ts","../src/module/menu/BulletedListMenu.ts","../src/module/menu/LowerAlphaListMenu.ts","../src/module/menu/NumberedListMenu.ts","../src/module/menu/index.ts","../src/utils/dom.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/outline-actions.ts","../src/module/render-elem.tsx","../src/module/index.ts"],"sourcesContent":["/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: 'Unordered list',\n orderedList: 'Ordered list',\n lowerAlphaList: 'Ordered list (a,b,c)',\n numberingActions: 'Heading numbering actions',\n continueNumbering: 'Continue heading numbering',\n restartNumbering: 'Restart numbering',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: '无序列表',\n orderedList: '有序列表',\n lowerAlphaList: '有序列表(a,b,c)',\n numberingActions: '标题编号操作',\n continueNumbering: '继续标题编号',\n restartNumbering: '重新开始编号',\n },\n}\n","/**\n * @description maps\n * @author wangfupeng\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { BaseElement } from 'slate'\n\nexport const ELEM_TO_EDITOR = new WeakMap<BaseElement, IDomEditor>()\n","import { Element as SlateElement, Text } from 'slate'\n\n/**\n * 获取第一个 text-node 的颜色\n * @param elem elem\n */\nexport function getListItemColor(elem: SlateElement): string {\n const children = elem.children || []\n const length = children.length\n\n if (length === 0) { return '' }\n\n let firstTextNode\n\n for (let i = 0; i < length; i += 1) {\n if (firstTextNode) { break } // 已找到第一个 text-node ,则退出\n const child = children[i]\n\n if (Text.isText(child)) { firstTextNode = child }\n }\n\n if (firstTextNode == null) { return '' }\n return firstTextNode.color || ''\n}\n","/**\n * @description list helpers\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Node, Path } from 'slate'\n\nimport {\n HeadingType,\n ListItemElement,\n OrderedListType,\n OutlineListItemElement,\n} from './custom-types'\n\nexport function isListNode(node: Node): node is ListItemElement {\n return DomEditor.checkNodeType(node, 'list-item')\n}\n\n// Keep the legacy name for callers that distinguish the persisted list shape.\nexport const isLegacyListItem = isListNode\n\nexport function isHeadingType(value: unknown): value is HeadingType {\n return typeof value === 'string' && /^header[1-6]$/.test(value)\n}\n\nexport function getHeadingType(node: Node): HeadingType | null {\n if (!isListNode(node) || !isHeadingType(node.headingType)) {\n return null\n }\n\n return node.headingType\n}\n\nexport function getListIndent(node: Node): number {\n if (!isListNode(node)) {\n return 0\n }\n\n return node.level > 0 ? Math.floor(node.level) : 0\n}\n\nexport function getListMode(node: Node): 'standard' | 'outline' {\n return isListNode(node) && node.listMode === 'outline' ? 'outline' : 'standard'\n}\n\nexport function isOutlineListNode(node: Node): node is OutlineListItemElement {\n return (\n isListNode(node) &&\n node.ordered === true &&\n node.listMode === 'outline' &&\n isHeadingType(node.headingType)\n )\n}\n\nexport function getOutlineLevel(node: Node): number {\n const headingType = getHeadingType(node)\n const match = headingType == null ? null : /^header([1-6])$/.exec(headingType)\n\n if (match != null) {\n return Number.parseInt(match[1], 10)\n }\n\n return getListIndent(node) + 1\n}\n\nexport function getNormalizedOrderedListStart(elem: ListItemElement): number {\n const { ordered = false, start } = elem\n\n if (!ordered || typeof start !== 'number' || Number.isNaN(start)) {\n return 1\n }\n\n return start\n}\n\nexport function getNormalizedOrderedListType(elem: ListItemElement): OrderedListType {\n const { orderType } = elem\n\n if (orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return '1'\n}\n\nexport function hasSameListConfig(a: ListItemElement, b: ListItemElement): boolean {\n if (a.ordered !== b.ordered) {\n return false\n }\n if (!a.ordered) {\n return true\n }\n\n return (\n getNormalizedOrderedListType(a) === getNormalizedOrderedListType(b) &&\n getNormalizedOrderedListStart(a) === getNormalizedOrderedListStart(b)\n )\n}\n\nexport function getOrderedItemNumber(editor: IDomEditor, elem: ListItemElement): number {\n if (!elem.ordered) {\n return 1\n }\n\n const level = getListIndent(elem)\n let number = getNormalizedOrderedListStart(elem)\n const index = DomEditor.findPath(editor, elem)[0]\n\n if (index <= 0) {\n return number\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex -= 1) {\n const previous = editor.children[previousIndex]\n\n if (!isListNode(previous)) {\n break\n }\n\n const previousLevel = getListIndent(previous)\n\n if (previousLevel < level) {\n break\n }\n if (previousLevel === level) {\n if (!hasSameListConfig(previous, elem) || isOutlineListNode(previous)) {\n break\n }\n number += 1\n }\n }\n\n return number\n}\n\nexport function getOutlineNumber(editor: IDomEditor, elem: ListItemElement): string {\n const counters = Array.from({ length: 6 }, () => 0)\n\n for (const current of editor.children) {\n if (!isOutlineListNode(current)) {\n continue\n }\n\n const level = getOutlineLevel(current)\n const index = level - 1\n\n for (let parentIndex = 0; parentIndex < index; parentIndex += 1) {\n if (counters[parentIndex] === 0) {\n counters[parentIndex] = 1\n }\n }\n\n if (typeof current.listRestart === 'number' && current.listRestart > 0) {\n counters[index] = Math.floor(current.listRestart)\n } else if (counters[index] === 0) {\n counters[index] = 1\n } else {\n counters[index] += 1\n }\n\n for (let childIndex = index + 1; childIndex < counters.length; childIndex += 1) {\n counters[childIndex] = 0\n }\n\n if (current === elem) {\n const label = counters.slice(0, level).join('.')\n\n return level === 1 ? `${label}.` : label\n }\n }\n\n return ''\n}\n\n/**\n * 获取上一个同一 level 的 list item\n * @param editor editor\n * @param elem elem\n */\nexport function getBrotherListNodeByLevel(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): ListItemElement | null {\n const elemLevel = level !== undefined ? level : elem.level || 0\n let brotherPath = DomEditor.findPath(editor, elem)\n\n while (true) {\n if (brotherPath.length === 0 || brotherPath[brotherPath.length - 1] === 0) {\n return null\n }\n brotherPath = Path.previous(brotherPath)\n const brotherEntry = Editor.node(editor, brotherPath)\n\n if (brotherEntry == null || !isListNode(brotherEntry[0])) {\n return null\n }\n if (getListIndent(brotherEntry[0]) === elemLevel) {\n return brotherEntry[0]\n }\n }\n}\n\nexport function hasSameOrderWithBrother(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): boolean {\n const brotherElem = getBrotherListNodeByLevel(editor, elem, level)\n\n return brotherElem != null && hasSameListConfig(brotherElem, elem)\n}\n","/**\n * @description list style class utils\n */\n\nimport { getClassStylePolicy, IDomEditor, reportUnsupportedClassStyle } from '@wangeditor-next/core'\n\nconst DEFAULT_COLORS = [\n 'rgb(0, 0, 0)',\n 'rgb(38, 38, 38)',\n 'rgb(89, 89, 89)',\n 'rgb(140, 140, 140)',\n 'rgb(191, 191, 191)',\n 'rgb(217, 217, 217)',\n 'rgb(233, 233, 233)',\n 'rgb(245, 245, 245)',\n 'rgb(250, 250, 250)',\n 'rgb(255, 255, 255)',\n 'rgb(225, 60, 57)',\n 'rgb(231, 95, 51)',\n 'rgb(235, 144, 58)',\n 'rgb(245, 219, 77)',\n 'rgb(114, 192, 64)',\n 'rgb(89, 191, 192)',\n 'rgb(66, 144, 247)',\n 'rgb(54, 88, 226)',\n 'rgb(106, 57, 201)',\n 'rgb(216, 68, 147)',\n 'rgb(251, 233, 230)',\n 'rgb(252, 237, 225)',\n 'rgb(252, 239, 212)',\n 'rgb(252, 251, 207)',\n 'rgb(231, 246, 213)',\n 'rgb(218, 244, 240)',\n 'rgb(217, 237, 250)',\n 'rgb(224, 232, 250)',\n 'rgb(237, 225, 248)',\n 'rgb(246, 226, 234)',\n 'rgb(255, 163, 158)',\n 'rgb(255, 187, 150)',\n 'rgb(255, 213, 145)',\n 'rgb(255, 251, 143)',\n 'rgb(183, 235, 143)',\n 'rgb(135, 232, 222)',\n 'rgb(145, 213, 255)',\n 'rgb(173, 198, 255)',\n 'rgb(211, 173, 247)',\n 'rgb(255, 173, 210)',\n 'rgb(255, 77, 79)',\n 'rgb(255, 122, 69)',\n 'rgb(255, 169, 64)',\n 'rgb(255, 236, 61)',\n 'rgb(115, 209, 61)',\n 'rgb(54, 207, 201)',\n 'rgb(64, 169, 255)',\n 'rgb(89, 126, 247)',\n 'rgb(146, 84, 222)',\n 'rgb(247, 89, 171)',\n 'rgb(207, 19, 34)',\n 'rgb(212, 56, 13)',\n 'rgb(212, 107, 8)',\n 'rgb(212, 177, 6)',\n 'rgb(56, 158, 13)',\n 'rgb(8, 151, 156)',\n 'rgb(9, 109, 217)',\n 'rgb(29, 57, 196)',\n 'rgb(83, 29, 171)',\n 'rgb(196, 29, 127)',\n 'rgb(130, 0, 20)',\n 'rgb(135, 20, 0)',\n 'rgb(135, 56, 0)',\n 'rgb(97, 71, 0)',\n 'rgb(19, 82, 0)',\n 'rgb(0, 71, 79)',\n 'rgb(0, 58, 140)',\n 'rgb(6, 17, 120)',\n 'rgb(34, 7, 94)',\n 'rgb(120, 6, 80)',\n]\n\nconst REPORTED_UNSUPPORTED_LIST_COLOR = new Set<string>()\n\nfunction normalizeColorValue(value: string): string {\n return (value || '').trim().replace(/\\s+/g, '').toLowerCase()\n}\n\nconst DEFAULT_COLOR_SET = new Set(DEFAULT_COLORS.map(color => normalizeColorValue(color)))\n\nfunction hashStyleValue(input: string): string {\n const MOD = 2147483647 // 2^31 - 1\n let hash = 7\n\n for (const char of input) {\n hash = (hash * 31 + (char.codePointAt(0) || 0)) % MOD\n }\n\n return hash.toString(36)\n}\n\nexport function genListColorClassName(color: string): string {\n const normalized = normalizeColorValue(color)\n\n return `w-e-list-color-${hashStyleValue(`color:${normalized}`)}`\n}\n\nfunction hasExtraRegisteredColor(editor: IDomEditor | undefined, color: string): boolean {\n const extraTokens = editor?.getConfig().styleClassTokens?.color || []\n const normalizedColor = normalizeColorValue(color)\n\n for (let i = 0; i < extraTokens.length; i += 1) {\n if (normalizeColorValue(extraTokens[i]) === normalizedColor) {\n return true\n }\n }\n\n return false\n}\n\nfunction hasRegisteredListColor(editor: IDomEditor | undefined, color: string): boolean {\n const normalized = normalizeColorValue(color)\n\n if (!normalized) { return false }\n if (DEFAULT_COLOR_SET.has(normalized)) { return true }\n if (hasExtraRegisteredColor(editor, color)) { return true }\n\n return false\n}\n\nexport function resolveListColorAction(\n editor: IDomEditor | undefined,\n color: string,\n): 'class' | 'preserve-data' | 'inline' {\n if (hasRegisteredListColor(editor, color)) {\n return 'class'\n }\n\n const policy = getClassStylePolicy(editor)\n let fallback: 'preserve-data' | 'inline' | 'throw' = 'preserve-data'\n\n if (policy === 'fallback-inline') {\n fallback = 'inline'\n }\n if (policy === 'strict') {\n fallback = 'throw'\n }\n\n const message = `[wangeditor] Unsupported list color class token color=${color}. policy=${policy}`\n const reportKey = `${color}|${fallback}`\n\n if (!REPORTED_UNSUPPORTED_LIST_COLOR.has(reportKey)) {\n REPORTED_UNSUPPORTED_LIST_COLOR.add(reportKey)\n reportUnsupportedClassStyle(editor, {\n type: 'color',\n value: color,\n scene: 'toHtml',\n fallback,\n message,\n })\n }\n\n if (fallback === 'throw') {\n throw new Error(message)\n }\n\n if (fallback === 'inline') {\n return 'inline'\n }\n\n return 'preserve-data'\n}\n","/**\n * @description to html\n * @author wangfupeng\n */\n\nimport { DomEditor, getTextStyleMode, IDomEditor } from '@wangeditor-next/core'\nimport { Element } from 'slate'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getNormalizedOrderedListStart,\n getNormalizedOrderedListType,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\n// ol ul stack for streaming list-item serialization\nconst CONTAINER_TAG_STACK: Array<string> = []\nlet STACK_EDITOR: IDomEditor | null = null\n\nfunction getContainerTag(elem: ListItemElement): 'ol' | 'ul' {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction getFallbackContainerTag(elem: ListItemElement): string {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction genContainerStartTag(elem: ListItemElement): string {\n const { ordered = false } = elem\n\n if (!ordered) { return '<ul>' }\n\n const attrs: string[] = []\n const orderType = getNormalizedOrderedListType(elem)\n const orderStart = getNormalizedOrderedListStart(elem)\n\n if (orderType !== '1') {\n attrs.push(`type=\"${orderType}\"`)\n }\n if (orderStart !== 1) {\n attrs.push(`start=\"${orderStart}\"`)\n }\n if (getHeadingType(elem) != null) {\n attrs.push('data-w-e-list-mode=\"standard\"')\n }\n\n if (attrs.length === 0) { return '<ol>' }\n return `<ol ${attrs.join(' ')}>`\n}\n\nfunction getAdjacentListItem(\n editor: IDomEditor,\n index: number,\n direction: 'prev' | 'next',\n): ListItemElement | null {\n if (direction === 'prev' && index === 0) { return null }\n if (direction === 'next' && index === editor.children.length - 1) { return null }\n\n const targetIndex = direction === 'prev' ? index - 1 : index + 1\n const targetNode = editor.children[targetIndex] as any\n\n if (!DomEditor.checkNodeType(targetNode, 'list-item') || isOutlineListNode(targetNode)) {\n return null\n }\n return targetNode as ListItemElement\n}\n\nfunction getPrevSameLevelListItem(\n editor: IDomEditor,\n index: number,\n level: number,\n): ListItemElement | null {\n for (let i = index - 1; i >= 0; i -= 1) {\n const node = editor.children[i] as any\n\n if (!DomEditor.checkNodeType(node, 'list-item') || isOutlineListNode(node)) { continue }\n if ((node.level || 0) === level) {\n return node as ListItemElement\n }\n }\n return null\n}\n\nfunction elemToHtml(\n elem: Element,\n childrenHtml: string,\n editor?: IDomEditor,\n): {\n html: string\n prefix?: string\n suffix?: string\n} {\n let startContainerStr = ''\n let endContainerStr = ''\n\n const listItemElem = elem as ListItemElement\n const headingType = getHeadingType(listItemElem)\n const headingTag = headingType == null ? null : headingType.replace('header', 'h')\n\n if (isOutlineListNode(listItemElem) && headingTag != null) {\n return {\n html: `<${headingTag}>${childrenHtml}</${headingTag}>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (headingTag != null) {\n childrenHtml = `<${headingTag}>${childrenHtml}</${headingTag}>`\n }\n\n const { level = 0 } = listItemElem\n const containerTag = getContainerTag(listItemElem)\n const containerStartTag = genContainerStartTag(listItemElem)\n const bindEditor = ELEM_TO_EDITOR.get(elem)\n const bindEditorWithChildren = bindEditor && Array.isArray((bindEditor as any).children)\n ? bindEditor\n : null\n const passedEditorWithChildren = editor && Array.isArray((editor as any).children)\n ? editor\n : null\n const editorContainsElem = (candidate: IDomEditor | null | undefined) => (\n !!candidate && candidate.children.indexOf(elem as any) >= 0\n )\n let finalEditor = passedEditorWithChildren || bindEditorWithChildren\n\n if (editorContainsElem(passedEditorWithChildren)) {\n finalEditor = passedEditorWithChildren\n } else if (editorContainsElem(bindEditorWithChildren)) {\n finalEditor = bindEditorWithChildren\n }\n const styleEditor = editor || bindEditor\n\n if (finalEditor == null) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (STACK_EDITOR !== finalEditor) {\n CONTAINER_TAG_STACK.length = 0\n STACK_EDITOR = finalEditor\n }\n\n const index = finalEditor.children.indexOf(elem as any)\n\n if (index < 0) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n const prevItem = getAdjacentListItem(finalEditor, index, 'prev')\n const nextItem = getAdjacentListItem(finalEditor, index, 'next')\n const hasNestedNext = !!nextItem && (nextItem.level || 0) > level\n\n if (!prevItem) {\n // list block start\n CONTAINER_TAG_STACK.length = 0\n for (let i = 0; i < level + 1; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n const prevLevel = prevItem.level || 0\n\n if (level > prevLevel) {\n // Enter nested lists inside previous <li>.\n for (let i = 0; i < level - prevLevel; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else if (level === prevLevel) {\n // Split same-level lists when ordered/type/start differ.\n if (!hasSameListConfig(prevItem, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n // Climb up: close nested list containers and parent <li>.\n let diff = prevLevel - level\n\n while (diff > 0) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}></li>`\n diff -= 1\n }\n\n // Split target-level list container when config changed.\n const brother = getPrevSameLevelListItem(finalEditor, index, level)\n\n if (brother && !hasSameListConfig(brother, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(brother)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n }\n }\n\n // 获取前缀颜色\n const prefixColor = getListItemColor(elem)\n const textStyleMode = getTextStyleMode(styleEditor)\n let colorStyle = ''\n let colorClass = ''\n let colorData = ''\n\n if (prefixColor) {\n if (textStyleMode === 'class') {\n colorData = ` data-w-e-color=\"${prefixColor}\"`\n const action = resolveListColorAction(styleEditor, prefixColor)\n\n if (action === 'class') {\n colorClass = ` class=\"${genListColorClassName(prefixColor)}\"`\n } else if (action === 'inline') {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n } else {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n }\n\n const html = `<li${colorClass}${colorData}${colorStyle}>${childrenHtml}${hasNestedNext ? '' : '</li>'}`\n\n if (!nextItem) {\n // list block end\n while (CONTAINER_TAG_STACK.length > 0) {\n const tag = CONTAINER_TAG_STACK.pop()\n\n if (!tag) { break }\n endContainerStr += `</${tag}>`\n if (CONTAINER_TAG_STACK.length > 0) {\n endContainerStr += '</li>'\n }\n }\n STACK_EDITOR = null\n }\n\n return {\n html,\n prefix: startContainerStr,\n suffix: endContainerStr,\n }\n}\n\nconst listItemToHtmlConf = {\n type: 'list-item',\n elemToHtml,\n}\n\nexport default listItemToHtmlConf\n","/**\n * @description compose semantic outline HTML from additive list-item metadata\n */\n\nimport { getTextStyleMode, HtmlTransformFnType, IDomEditor } from '@wangeditor-next/core'\n\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getOutlineLevel,\n getOutlineNumber,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\ntype OutlineItem = {\n node: ListItemElement\n html: string\n children: OutlineContainer[]\n}\n\ntype OutlineContainer = {\n node: ListItemElement\n items: OutlineItem[]\n}\n\ntype OutlineLevel = {\n container: OutlineContainer\n lastItem: OutlineItem\n}\n\ntype OutlineContext = {\n roots: OutlineContainer[]\n levels: OutlineLevel[]\n}\n\nfunction getOutlineContainerStart(editor: IDomEditor, node: ListItemElement): number {\n const lastSegment = getOutlineNumber(editor, node).split('.').filter(Boolean).pop()\n const start = Number.parseInt(lastSegment || '', 10)\n\n return Number.isFinite(start) && start > 0 ? start : 1\n}\n\nfunction getContainerStartTag(container: OutlineContainer, editor: IDomEditor): string {\n const start = getOutlineContainerStart(editor, container.node)\n const startAttr = start === 1 ? '' : ` start=\"${start}\"`\n\n return `<ol${startAttr} data-w-e-list-mode=\"outline\">`\n}\n\nfunction getColorAttrs(node: ListItemElement, editor: IDomEditor): string[] {\n const color = getListItemColor(node)\n\n if (!color) {\n return []\n }\n\n if (getTextStyleMode(editor) !== 'class') {\n return [`style=\"color:${color}\"`]\n }\n\n const attrs = [`data-w-e-color=\"${color}\"`]\n const action = resolveListColorAction(editor, color)\n\n if (action === 'class') {\n attrs.unshift(`class=\"${genListColorClassName(color)}\"`)\n } else if (action === 'inline') {\n attrs.push(`style=\"color:${color}\"`)\n }\n\n return attrs\n}\n\nfunction getListItemStartTag(node: ListItemElement, editor: IDomEditor): string {\n const attrs = getColorAttrs(node, editor)\n\n attrs.push(`data-w-e-list-indent=\"${getOutlineLevel(node) - 1}\"`)\n\n if (typeof node.listRestart === 'number') {\n attrs.push(`data-w-e-list-restart=\"${node.listRestart}\"`)\n }\n attrs.push(`data-w-e-outline-number=\"${getOutlineNumber(editor, node)}\"`)\n\n return `<li ${attrs.join(' ')}>`\n}\n\nfunction renderContainer(container: OutlineContainer, editor: IDomEditor): string {\n const itemsHtml = container.items\n .map(item => {\n const childrenHtml = item.children.map(child => renderContainer(child, editor)).join('')\n\n return `${getListItemStartTag(item.node, editor)}${item.html}${childrenHtml}</li>`\n })\n .join('')\n\n return `${getContainerStartTag(container, editor)}${itemsHtml}</ol>`\n}\n\nfunction addOutlineItem(\n roots: OutlineContainer[],\n levels: OutlineLevel[],\n node: ListItemElement,\n html: string\n): OutlineItem {\n let level = Math.max(0, getOutlineLevel(node) - 1)\n\n // A standalone h3 cannot have a semantic parent. Preserve the source depth\n // in data-w-e-list-indent while emitting valid nested HTML.\n if (level > levels.length) {\n level = levels.length\n }\n\n levels.length = level + 1\n const parent = level > 0 ? levels[level - 1]?.lastItem : null\n const current = levels[level]\n const restart = typeof node.listRestart === 'number'\n const needsNewContainer =\n current == null || !hasSameListConfig(current.container.node, node) || restart\n\n let container: OutlineContainer\n\n if (needsNewContainer) {\n container = { node, items: [] }\n if (parent != null) {\n parent.children.push(container)\n } else {\n roots.push(container)\n }\n } else {\n container = current.container\n }\n\n const item: OutlineItem = { node, html, children: [] }\n\n container.items.push(item)\n levels[level] = { container, lastItem: item }\n\n return item\n}\n\n/**\n * List-item serialization remains backward compatible for ordinary lists.\n * Only outline list items need document-level composition to create valid\n * `ol > li > hN` structure.\n */\nexport const transformListHtml: HtmlTransformFnType = (htmlList, nodes, editor) => {\n const result: string[] = []\n let outlineContext: OutlineContext | null = null\n\n const flushOutline = () => {\n if (outlineContext == null || outlineContext.roots.length === 0) {\n return\n }\n\n result.push(outlineContext.roots.map(container => renderContainer(container, editor)).join(''))\n outlineContext = null\n }\n\n nodes.forEach((node, index) => {\n const html = htmlList[index] || ''\n\n if (isOutlineListNode(node)) {\n if (outlineContext == null) {\n outlineContext = { roots: [], levels: [] }\n }\n\n addOutlineItem(outlineContext.roots, outlineContext.levels, node, html)\n return\n }\n\n flushOutline()\n result.push(html)\n })\n\n flushOutline()\n\n return result\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 无序列表\nexport const BULLETED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z\"></path></svg>'\n\n// 有序列表\nexport const NUMBERED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z\"></path></svg>'\n","/**\n * @description list menu base class\n * @author wangfupeng\n */\n\nimport { IButtonMenu, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\n\nimport { HeadingType, ListItemElement, OrderedListType } from '../custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n isHeadingType,\n isListNode,\n} from '../helpers'\n\nfunction getSelectedTopLevelBlocks(editor: IDomEditor): Array<[Element, Path]> {\n if (editor.selection == null) {\n return []\n }\n\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction isListableBlock(editor: IDomEditor, elem: Element): boolean {\n if (Editor.isVoid(editor, elem)) {\n return false\n }\n\n return !['pre', 'code', 'table', 'table-row', 'table-cell'].includes(elem.type)\n}\n\nfunction getHeadingLevel(headingType: HeadingType): number {\n return Number.parseInt(headingType.slice('header'.length), 10) - 1\n}\n\nfunction getOriginalHeadingType(node: Element): HeadingType | null {\n if (isListNode(node)) {\n return getHeadingType(node)\n }\n\n return isHeadingType(node.type) ? node.type : null\n}\n\nabstract class BaseMenu implements IButtonMenu {\n readonly type = 'list-item'\n\n abstract readonly ordered: boolean\n\n readonly orderType?: OrderedListType\n\n abstract readonly title: string\n\n abstract readonly iconSvg: string\n\n readonly tag = 'button'\n\n private isTargetListNode(node: Node): boolean {\n if (!isListNode(node) || Boolean(node.ordered) !== this.ordered) {\n return false\n }\n if (!this.ordered) {\n return true\n }\n\n return getNormalizedOrderedListType(node) === (this.orderType || '1')\n }\n\n getValue(_editor: IDomEditor): string | boolean {\n return ''\n }\n\n isActive(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length > 0 && selectedBlocks.every(([node]) => this.isTargetListNode(node))\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length === 0 || selectedBlocks.some(([node]) => !isListableBlock(editor, node))\n }\n\n exec(editor: IDomEditor, _value: string | boolean): void {\n const active = this.isActive(editor)\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n if (selectedBlocks.length === 0) {\n return\n }\n\n Editor.withoutNormalizing(editor, () => {\n selectedBlocks.forEach(([node, path]) => {\n if (active) {\n const listNode = node as ListItemElement\n const headingType = getHeadingType(listNode)\n\n Transforms.setNodes(\n editor,\n {\n type: headingType || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n return\n }\n\n const headingType = getOriginalHeadingType(node)\n const outline = this.ordered && this.orderType == null && headingType != null\n\n Transforms.setNodes(\n editor,\n {\n type: 'list-item',\n ordered: this.ordered,\n level: outline ? getHeadingLevel(headingType as HeadingType) : getListIndent(node),\n start: undefined,\n orderType: this.ordered ? this.orderType : undefined,\n headingType: outline ? headingType : undefined,\n listMode: outline ? 'outline' : undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n })\n })\n }\n}\n\nexport default BaseMenu\n","/**\n * @description bulleted list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { BULLETED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass BulletedListMenu extends BaseMenu {\n readonly ordered = false\n\n readonly title = t('listModule.unOrderedList')\n\n readonly iconSvg = BULLETED_LIST_SVG\n}\n\nexport default BulletedListMenu\n","/**\n * @description lower-alpha ordered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport { OrderedListType } from '../custom-types'\nimport BaseMenu from './BaseMenu'\n\nclass LowerAlphaListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly orderType: OrderedListType = 'a'\n\n readonly title = t('listModule.lowerAlphaList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default LowerAlphaListMenu\n","/**\n * @description numbered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass NumberedListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly title = t('listModule.orderedList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default NumberedListMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport BulletedListMenu from './BulletedListMenu'\nimport LowerAlphaListMenu from './LowerAlphaListMenu'\nimport NumberedListMenu from './NumberedListMenu'\n\nexport const bulletedListMenuConf = {\n key: 'bulletedList',\n factory() {\n return new BulletedListMenu()\n },\n}\n\nexport const numberedListMenuConf = {\n key: 'numberedList',\n factory() {\n return new NumberedListMenu()\n },\n}\n\nexport const numberedListLowerAlphaMenuConf = {\n key: 'numberedListLowerAlpha',\n factory() {\n return new LowerAlphaListMenu()\n },\n}\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, attr, Dom7Array, parent,\n} from 'dom7'\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nif (append) { $.fn.append = append }\n// if (on) $.fn.on = on\n// if (focus) $.fn.focus = focus\nif (attr) { $.fn.attr = attr }\n// if (val) $.fn.val = val\n// if (html) $.fn.html = html\nif (parent) { $.fn.parent = parent }\n// if (hasClass) $.fn.hasClass = hasClass\n// if (empty) $.fn.empty = empty\n\nexport default $\nexport {\n DOMComment, DOMElement, DOMNode, DOMRange, DOMSelection, DOMStaticRange, DOMText,\n}\n\n/**\n * 获取 tagName lower-case\n * @param $elem $elem\n */\nexport function getTagName($elem: Dom7Array): string {\n if ($elem.length) { return $elem[0].tagName.toLowerCase() }\n return ''\n}\n","/**\n * @description parse list HTML\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { Dom7Array } from 'dom7'\nimport { Descendant, Element as SlateElement, Text } from 'slate'\n\nimport $, { DOMElement, getTagName } from '../utils/dom'\nimport { HeadingType, ListItemElement, OrderedListType } from './custom-types'\nimport { isHeadingType, isListNode } from './helpers'\n\nfunction getOrdered($elem: Dom7Array): boolean {\n return getTagName($elem.parent()) === 'ol'\n}\n\nfunction getOrderedStart($elem: Dom7Array): number | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const value = ($list.attr('start') || '').trim()\n const start = Number.parseInt(value, 10)\n\n return Number.isNaN(start) ? undefined : start\n}\n\nfunction getOrderedType($elem: Dom7Array): OrderedListType | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const orderType = ($list.attr('type') || '').trim()\n\n if (orderType === '1' || orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return undefined\n}\n\nfunction getLevel($elem: Dom7Array): number {\n const indent = ($elem.attr('data-w-e-list-indent') || '').trim()\n\n if (/^\\d+$/.test(indent)) {\n return Number.parseInt(indent, 10)\n }\n\n let listAncestorCount = 0\n let $current: Dom7Array = $elem.parent()\n\n while ($current.length > 0) {\n const tagName = getTagName($current)\n\n if (tagName === 'ul' || tagName === 'ol') {\n listAncestorCount += 1\n }\n $current = $current.parent()\n }\n\n return Math.max(0, listAncestorCount - 1)\n}\n\nfunction getListMode($elem: Dom7Array, children: Descendant[]): 'standard' | 'outline' {\n const declaredMode = $elem.parent().attr('data-w-e-list-mode')\n\n if (declaredMode === 'outline' || declaredMode === 'standard') {\n return declaredMode\n }\n\n return getOrdered($elem) && children.some(child => {\n return SlateElement.isElement(child) && isHeadingType(child.type)\n })\n ? 'outline'\n : 'standard'\n}\n\nfunction getRestart($elem: Dom7Array): number | undefined {\n const value = ($elem.attr('data-w-e-list-restart') || '').trim()\n\n if (!/^\\d+$/.test(value)) {\n return undefined\n }\n\n const restart = Number.parseInt(value, 10)\n\n return restart > 0 ? restart : undefined\n}\n\nfunction isFirstListItem($elem: Dom7Array): boolean {\n let previous = $elem[0]?.previousElementSibling\n\n while (previous != null) {\n if (previous.tagName.toLowerCase() === 'li') {\n return false\n }\n previous = previous.previousElementSibling\n }\n\n return true\n}\n\nfunction getOutlineRestart($elem: Dom7Array): number | undefined {\n const restart = getRestart($elem)\n\n if (restart !== undefined) {\n return restart\n }\n if ($elem.attr('data-w-e-outline-number') != null || !isFirstListItem($elem)) {\n return undefined\n }\n\n return getOrderedStart($elem)\n}\n\nfunction isStructuralWhitespaceText(child: Descendant): boolean {\n return Text.isText(child) && child.text.trim() === ''\n}\n\nfunction appendTextLikeChildren(target: Descendant[], children: Descendant[], editor: IDomEditor) {\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (Text.isText(child) || editor.isInline(child)) {\n target.push(child)\n return\n }\n if (SlateElement.isElement(child)) {\n appendTextLikeChildren(target, child.children, editor)\n }\n })\n}\n\nfunction getHeadingNode(children: Descendant[]): SlateElement | null {\n for (const child of children) {\n if (SlateElement.isElement(child) && isHeadingType(child.type)) {\n return child\n }\n }\n\n return null\n}\n\nfunction parseItemHtml(\n elem: DOMElement,\n children: Descendant[],\n editor: IDomEditor\n): ListItemElement | ListItemElement[] {\n const $elem = $(elem)\n const level = getLevel($elem)\n const directChildren: Descendant[] = []\n const nestedListChildren: ListItemElement[] = []\n\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (isListNode(child) && child.level > level) {\n nestedListChildren.push(child)\n return\n }\n directChildren.push(child)\n })\n\n const headingNode = getHeadingNode(directChildren)\n const headingType = headingNode != null && isHeadingType(headingNode.type)\n ? (headingNode.type as HeadingType)\n : undefined\n const listMode = getListMode($elem, directChildren)\n const normalizedChildren: Descendant[] = []\n\n appendTextLikeChildren(normalizedChildren, directChildren, editor)\n\n if (normalizedChildren.length === 0) {\n normalizedChildren.push(\n nestedListChildren.length > 0 ? { text: '' } : { text: $elem.text().replace(/\\s+/gm, ' ') }\n )\n }\n\n const ordered = getOrdered($elem)\n const start = getOrderedStart($elem)\n const orderType = getOrderedType($elem)\n const outline = ordered && listMode === 'outline' && headingType !== undefined\n const listRestart = outline ? getOutlineRestart($elem) : undefined\n const item: ListItemElement = {\n type: 'list-item',\n ordered,\n level: outline ? Number.parseInt(headingType.slice('header'.length), 10) - 1 : level,\n ...(start !== undefined && !outline ? { start } : {}),\n ...(orderType !== undefined ? { orderType } : {}),\n ...(headingType !== undefined ? { headingType } : {}),\n ...(outline ? { listMode: 'outline' as const } : {}),\n ...(listRestart !== undefined ? { listRestart } : {}),\n // @ts-ignore List items retain the established text/inline children shape.\n children: normalizedChildren,\n }\n\n return nestedListChildren.length === 0 ? item : [item, ...nestedListChildren]\n}\n\nexport const parseItemHtmlConf = {\n selector: 'li:not([data-w-e-type])',\n parseElemHtml: parseItemHtml,\n}\n\nfunction parseListHtml(\n _elem: DOMElement,\n children: Descendant[],\n _editor: IDomEditor\n): ListItemElement[] {\n // @ts-ignore Nested lists return arrays which must be flattened.\n return children.flat(Infinity)\n}\n\nexport const parseListHtmlConf = {\n selector: 'ul:not([data-w-e-type]),ol:not([data-w-e-type])',\n parseElemHtml: parseListHtml,\n}\n","/**\n * @description list editor plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Range, Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\nimport {\n getBrotherListNodeByLevel,\n getHeadingType,\n getListIndent,\n isListNode,\n isOutlineListNode,\n} from './helpers'\n\nfunction getTopSelectedElemsBySelection(editor: IDomEditor): Array<[Element, Path]> {\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction getSelectedListEntry(editor: IDomEditor): [ListItemElement, Path] | null {\n const [entry] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: isListNode,\n universal: true,\n })\n\n return entry == null ? null : (entry as [ListItemElement, Path])\n}\n\nfunction clearListItem(editor: IDomEditor, path: Path, node: ListItemElement, type?: string) {\n Transforms.setNodes(\n editor,\n {\n type: type || getHeadingType(node) || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n}\n\nfunction withList<T extends IDomEditor>(editor: T): T {\n const { deleteBackward, handleTab, normalizeNode, insertBreak } = editor\n const newEditor = editor\n\n newEditor.insertBreak = () => {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null) {\n return insertBreak()\n }\n\n const [listItem, path] = entry\n\n if (Node.string(listItem) === '') {\n clearListItem(newEditor, path, listItem, 'paragraph')\n return\n }\n\n return insertBreak()\n }\n\n newEditor.deleteBackward = unit => {\n const { selection } = newEditor\n\n if (selection == null || Range.isExpanded(selection)) {\n deleteBackward(unit)\n return\n }\n\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || selection.focus.offset !== 0) {\n deleteBackward(unit)\n return\n }\n\n const [listItem, path] = entry\n\n if (isOutlineListNode(listItem)) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const level = getListIndent(listItem)\n\n if (level <= 0) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const brother = getBrotherListNodeByLevel(editor, listItem, level - 1)\n\n if (brother != null) {\n Transforms.setNodes(\n newEditor,\n {\n level: level - 1,\n ordered: brother.ordered,\n start: brother.ordered ? brother.start : undefined,\n orderType: brother.ordered ? brother.orderType : undefined,\n },\n { at: path }\n )\n } else {\n Transforms.setNodes(newEditor, { level: level - 1 }, { at: path })\n }\n }\n\n newEditor.handleTab = () => {\n const { selection } = newEditor\n\n if (selection == null) {\n handleTab()\n return\n }\n\n if (Range.isCollapsed(selection)) {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || isOutlineListNode(entry[0]) || selection.focus.offset !== 0) {\n handleTab()\n return\n }\n\n const [listItem, path] = entry\n\n Transforms.setNodes(newEditor, { level: getListIndent(listItem) + 1 }, { at: path })\n return\n }\n\n const selectedEntries = getTopSelectedElemsBySelection(newEditor)\n const listEntries = selectedEntries.filter(([node]) => {\n return isListNode(node) && !isOutlineListNode(node)\n })\n\n if (listEntries.length !== selectedEntries.length || listEntries.length <= 1) {\n handleTab()\n return\n }\n\n listEntries.forEach(([node, path]) => {\n Transforms.setNodes(newEditor, { level: getListIndent(node) + 1 }, { at: path })\n })\n }\n\n newEditor.normalizeNode = ([node, path]) => {\n const type = DomEditor.getNodeType(node)\n\n if (type === 'bulleted-list' || type === 'numbered-list') {\n Transforms.unwrapNodes(newEditor, { at: path })\n }\n\n return normalizeNode([node, path])\n }\n\n return newEditor\n}\n\nexport default withList\n","/**\n * @description outline numbering marker actions\n */\n\nimport { DomEditor, EditorEvents, IDomEditor, t } from '@wangeditor-next/core'\nimport { Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\n\ntype OutlineActionPanel = {\n elem: HTMLElement\n dispose: () => void\n}\n\nconst PANEL_BY_EDITOR = new WeakMap<IDomEditor, OutlineActionPanel>()\n\nfunction updateRestart(editor: IDomEditor, node: ListItemElement, restart?: number) {\n const index = editor.children.indexOf(node)\n\n if (index < 0) {\n return\n }\n\n Transforms.setNodes(editor, { listRestart: restart }, { at: [index] })\n}\n\nexport function continueOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node)\n}\n\nexport function restartOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node, 1)\n}\n\nexport function hideOutlineActionPanel(editor: IDomEditor) {\n const panel = PANEL_BY_EDITOR.get(editor)\n\n if (panel == null) {\n return\n }\n panel.dispose()\n PANEL_BY_EDITOR.delete(editor)\n}\n\nfunction createActionButton(\n document: Document,\n label: string,\n onClick: () => void\n): HTMLButtonElement {\n const button = document.createElement('button')\n\n button.type = 'button'\n button.className = 'w-e-list-outline-action'\n button.textContent = label\n button.addEventListener('mousedown', event => event.preventDefault())\n button.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n onClick()\n })\n\n return button\n}\n\nexport function showOutlineActionPanel(editor: IDomEditor, node: ListItemElement, marker: HTMLElement) {\n if (editor.isDisabled()) {\n return\n }\n\n hideOutlineActionPanel(editor)\n\n const document = marker.ownerDocument\n const panel = document.createElement('div')\n\n panel.className = 'w-e-list-outline-actions'\n panel.setAttribute('role', 'menu')\n panel.addEventListener('mousedown', event => event.preventDefault())\n panel.append(\n createActionButton(document, t('listModule.continueNumbering'), () => {\n continueOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n }),\n createActionButton(document, t('listModule.restartNumbering'), () => {\n restartOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n })\n )\n\n const textarea = DomEditor.getTextarea(editor)\n const container = textarea.$textAreaContainer[0] as HTMLElement\n const scroll = textarea.$scroll[0] as HTMLElement\n const markerRect = marker.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n\n panel.style.top = `${markerRect.bottom - containerRect.top + scroll.scrollTop + 4}px`\n panel.style.left = `${markerRect.left - containerRect.left + scroll.scrollLeft}px`\n container.append(panel)\n\n const onDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n if (panel.contains(target) || marker.contains(target)) {\n return\n }\n\n hideOutlineActionPanel(editor)\n }\n const onEditorChange = () => hideOutlineActionPanel(editor)\n const onEditorDestroyed = () => hideOutlineActionPanel(editor)\n\n document.addEventListener('mousedown', onDocumentMouseDown, true)\n editor.on(EditorEvents.CHANGE, onEditorChange)\n editor.on(EditorEvents.DESTROYED, onEditorDestroyed)\n\n PANEL_BY_EDITOR.set(editor, {\n elem: panel,\n dispose: () => {\n document.removeEventListener('mousedown', onDocumentMouseDown, true)\n editor.off(EditorEvents.CHANGE, onEditorChange)\n editor.off(EditorEvents.DESTROYED, onEditorDestroyed)\n panel.remove()\n },\n })\n}\n","/**\n * @description render list elem\n * @author wangfupeng\n */\n\nimport { IDomEditor, t } from '@wangeditor-next/core'\nimport { Element as SlateElement } from 'slate'\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { jsx, VNode } from 'snabbdom'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n getOrderedItemNumber,\n getOutlineNumber,\n isOutlineListNode,\n} from './helpers'\nimport { showOutlineActionPanel } from './outline-actions'\n\nfunction genPreSymbol(level = 0): string {\n switch (level) {\n case 0:\n return '•'\n case 1:\n return '◦'\n default:\n return '▪'\n }\n}\n\nfunction genAlphabetIndex(number: number, upper = false): string {\n if (number <= 0) {\n return String(number)\n }\n\n let current = number\n let result = ''\n\n while (current > 0) {\n const remainder = (current - 1) % 26\n const charCode = (upper ? 65 : 97) + remainder\n\n result = String.fromCharCode(charCode) + result\n current = Math.floor((current - 1) / 26)\n }\n\n return result\n}\n\nfunction genRomanIndex(number: number, upper = false): string {\n if (number <= 0 || number >= 4000) {\n return String(number)\n }\n\n const romanMap: Array<[number, string]> = [\n [1000, 'M'],\n [900, 'CM'],\n [500, 'D'],\n [400, 'CD'],\n [100, 'C'],\n [90, 'XC'],\n [50, 'L'],\n [40, 'XL'],\n [10, 'X'],\n [9, 'IX'],\n [5, 'V'],\n [4, 'IV'],\n [1, 'I'],\n ]\n let current = number\n let result = ''\n\n for (const [value, roman] of romanMap) {\n while (current >= value) {\n result += roman\n current -= value\n }\n }\n\n return upper ? result : result.toLowerCase()\n}\n\nfunction genOrderedPrefix(number: number, orderType: string): string {\n switch (orderType) {\n case 'a':\n return `${genAlphabetIndex(number)}.`\n case 'A':\n return `${genAlphabetIndex(number, true)}.`\n case 'i':\n return `${genRomanIndex(number)}.`\n case 'I':\n return `${genRomanIndex(number, true)}.`\n default:\n return `${number}.`\n }\n}\n\nfunction renderListElem(\n elemNode: SlateElement,\n children: VNode[] | null,\n editor: IDomEditor\n): VNode {\n ELEM_TO_EDITOR.set(elemNode, editor)\n\n const listItem = elemNode as ListItemElement\n const outline = isOutlineListNode(listItem)\n const level = getListIndent(listItem)\n const listStyle = {\n margin: `5px 0 5px ${level * 20}px`,\n display: 'flex',\n alignItems: 'baseline',\n }\n const prefixColor = getListItemColor(listItem)\n let prefix = ''\n\n if (outline) {\n prefix = getOutlineNumber(editor, listItem)\n } else if (listItem.ordered) {\n prefix = genOrderedPrefix(getOrderedItemNumber(editor, listItem), getNormalizedOrderedListType(listItem))\n } else {\n prefix = genPreSymbol(level)\n }\n\n const markerStyle = { marginRight: '0.5em', color: prefixColor }\n const marker = outline ? (\n <button\n type=\"button\"\n className=\"w-e-list-marker\"\n contentEditable={false}\n data-w-e-reserve\n aria-label={t('listModule.numberingActions')}\n title={t('listModule.numberingActions')}\n style={markerStyle}\n on={{\n mousedown: event => event.preventDefault(),\n click: event => {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.currentTarget instanceof HTMLElement) {\n showOutlineActionPanel(editor, listItem, event.currentTarget)\n }\n },\n }}\n >\n {prefix}\n </button>\n ) : (\n <span className=\"w-e-list-marker\" contentEditable={false} style={markerStyle} data-w-e-reserve>\n {prefix}\n </span>\n )\n\n const headingType = getHeadingType(listItem)\n const ContentTag = headingType == null ? 'span' : headingType.replace('header', 'h')\n\n return (\n <div className=\"w-e-list-item\" style={listStyle}>\n {marker}\n <ContentTag style={{ flex: '1', minWidth: '0', wordBreak: 'break-word' }}>{children}</ContentTag>\n </div>\n )\n}\n\nconst renderListItemConf = {\n type: 'list-item',\n renderElem: renderListElem,\n}\n\nexport default renderListItemConf\n","/**\n * @description list module entry\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport listItemToHtmlConf from './elem-to-html'\nimport { transformListHtml } from './html-transform'\nimport {\n bulletedListMenuConf,\n numberedListLowerAlphaMenuConf,\n numberedListMenuConf,\n} from './menu/index'\nimport { parseItemHtmlConf, parseListHtmlConf } from './parse-elem-html'\nimport withList from './plugin'\nimport renderListItemConf from './render-elem'\n\nconst list: Partial<IModuleConf> = {\n renderElems: [renderListItemConf],\n editorPlugin: withList,\n menus: [bulletedListMenuConf, numberedListMenuConf, numberedListLowerAlphaMenuConf],\n htmlTransform: transformListHtml,\n elemsToHtml: [listItemToHtmlConf],\n parseElemsHtml: [parseListHtmlConf, parseItemHtmlConf],\n}\n\nexport default list\n"],"names":["i18nAddResources","listModule","unOrderedList","orderedList","lowerAlphaList","numberingActions","continueNumbering","restartNumbering","ELEM_TO_EDITOR","WeakMap","getListItemColor","elem","firstTextNode","children","length","i","child","Text","isText","color","isListNode","node","DomEditor","checkNodeType","isHeadingType","value","test","getHeadingType","headingType","getListIndent","level","Math","floor","isOutlineListNode","ordered","listMode","getOutlineLevel","match","exec","Number","parseInt","getNormalizedOrderedListStart","_a","start","isNaN","getNormalizedOrderedListType","orderType","hasSameListConfig","a","b","getOutlineNumber","editor","counters","Array","from","_b","__values","_c","next","done","current","index","parentIndex","listRestart","childIndex","label","slice","join","concat","REPORTED_UNSUPPORTED_LIST_COLOR","Set","normalizeColorValue","trim","replace","toLowerCase","DEFAULT_COLOR_SET","map","genListColorClassName","normalized","input","hash","input_1","input_1_1","codePointAt","toString","hashStyleValue","hasRegisteredListColor","has","extraTokens","getConfig","styleClassTokens","normalizedColor","hasExtraRegisteredColor","resolveListColorAction","policy","getClassStylePolicy","fallback","message","reportKey","add","reportUnsupportedClassStyle","type","scene","Error","CONTAINER_TAG_STACK","STACK_EDITOR","getFallbackContainerTag","getAdjacentListItem","direction","targetIndex","targetNode","listItemToHtmlConf","elemToHtml","childrenHtml","startContainerStr","endContainerStr","listItemElem","headingTag","html","prefix","suffix","containerTag","getContainerTag","containerStartTag","attrs","orderStart","push","genContainerStartTag","bindEditor","get","bindEditorWithChildren","isArray","passedEditorWithChildren","editorContainsElem","candidate","indexOf","finalEditor","styleEditor","prevItem","nextItem","hasNestedNext","prevLevel","closeTag","pop","diff","brother","getPrevSameLevelListItem","prefixColor","textStyleMode","getTextStyleMode","colorStyle","colorClass","colorData","action","tag","getContainerStartTag","container","lastSegment","split","filter","Boolean","isFinite","getOutlineContainerStart","startAttr","getListItemStartTag","unshift","getColorAttrs","renderContainer","itemsHtml","items","item","NUMBERED_LIST_SVG","getSelectedTopLevelBlocks","selection","Editor","nodes","at","Element","isElement","isBlock","mode","__read","getHeadingLevel","BaseMenu","this","prototype","isTargetListNode","getValue","_editor","isActive","_this","selectedBlocks","every","isDisabled","some","isVoid","includes","isListableBlock","_value","active","withoutNormalizing","forEach","path","headingType_1","Transforms","setNodes","undefined","getOriginalHeadingType","outline","BulletedListMenu","_super","title","t","iconSvg","__extends","LowerAlphaListMenu","NumberedListMenu","bulletedListMenuConf","key","factory","numberedListMenuConf","numberedListLowerAlphaMenuConf","getTagName","$elem","tagName","getOrdered","parent","getOrderedStart","$list","attr","getOutlineRestart","restart","getRestart","previous","previousElementSibling","isFirstListItem","isStructuralWhitespaceText","text","appendTextLikeChildren","target","isInline","SlateElement","append","$","fn","parseItemHtmlConf","selector","parseElemHtml","indent","listAncestorCount","$current","max","getLevel","directChildren","nestedListChildren","headingNode","children_1","children_1_1","getHeadingNode","declaredMode","getListMode","normalizedChildren","getOrderedType","__assign","__spreadArray","parseListHtmlConf","_elem","flat","Infinity","getSelectedListEntry","entry","universal","clearListItem","PANEL_BY_EDITOR","updateRestart","hideOutlineActionPanel","panel","dispose","delete","createActionButton","document","onClick","button","createElement","className","textContent","addEventListener","event","preventDefault","stopPropagation","showOutlineActionPanel","marker","ownerDocument","setAttribute","continueOutlineNumbering","restartOutlineNumbering","textarea","getTextarea","$textAreaContainer","scroll","$scroll","markerRect","getBoundingClientRect","containerRect","style","top","bottom","scrollTop","left","scrollLeft","onDocumentMouseDown","Node","contains","onEditorChange","onEditorDestroyed","on","EditorEvents","CHANGE","DESTROYED","set","removeEventListener","off","remove","genAlphabetIndex","number","upper","String","result","charCode","fromCharCode","genRomanIndex","romanMap_1","romanMap_1_1","roman","renderElems","renderElem","elemNode","listItem","listStyle","margin","display","alignItems","genOrderedPrefix","findPath","previousIndex","previousLevel","getOrderedItemNumber","genPreSymbol","markerStyle","marginRight","jsx","contentEditable","mousedown","click","currentTarget","HTMLElement","ContentTag","flex","minWidth","wordBreak","editorPlugin","deleteBackward","handleTab","normalizeNode","insertBreak","newEditor","string","unit","Range","isExpanded","focus","offset","elemLevel","brotherPath","Path","brotherEntry","getBrotherListNodeByLevel","isCollapsed","selectedEntries","getTopSelectedElemsBySelection","listEntries","getNodeType","unwrapNodes","menus","htmlTransform","htmlList","outlineContext","flushOutline","roots","levels","lastItem","addOutlineItem","elemsToHtml","parseElemsHtml"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/utils/maps.ts","../src/utils/util.ts","../src/module/helpers.ts","../src/module/style-class.ts","../src/module/elem-to-html.ts","../src/module/html-transform.ts","../src/constants/svg.ts","../src/module/menu/BaseMenu.ts","../src/module/menu/BulletedListMenu.ts","../src/module/menu/LowerAlphaListMenu.ts","../src/module/menu/NumberedListMenu.ts","../src/module/menu/index.ts","../src/utils/dom.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/outline-actions.ts","../src/module/render-elem.tsx","../src/module/index.ts"],"sourcesContent":["/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: 'Unordered list',\n orderedList: 'Ordered list',\n lowerAlphaList: 'Ordered list (a,b,c)',\n numberingActions: 'Heading numbering actions',\n continueNumbering: 'Continue heading numbering',\n restartNumbering: 'Restart numbering',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: '无序列表',\n orderedList: '有序列表',\n lowerAlphaList: '有序列表(a,b,c)',\n numberingActions: '标题编号操作',\n continueNumbering: '继续标题编号',\n restartNumbering: '重新开始编号',\n },\n}\n","/**\n * @description maps\n * @author wangfupeng\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { BaseElement } from 'slate'\n\nexport const ELEM_TO_EDITOR = new WeakMap<BaseElement, IDomEditor>()\n","import { Element as SlateElement, Text } from 'slate'\n\n/**\n * 获取第一个 text-node 的颜色\n * @param elem elem\n */\nexport function getListItemColor(elem: SlateElement): string {\n const children = elem.children || []\n const length = children.length\n\n if (length === 0) { return '' }\n\n let firstTextNode\n\n for (let i = 0; i < length; i += 1) {\n if (firstTextNode) { break } // 已找到第一个 text-node ,则退出\n const child = children[i]\n\n if (Text.isText(child)) { firstTextNode = child }\n }\n\n if (firstTextNode == null) { return '' }\n return firstTextNode.color || ''\n}\n","/**\n * @description list helpers\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Node, Path } from 'slate'\n\nimport {\n HeadingType,\n ListItemElement,\n OrderedListType,\n OutlineListItemElement,\n} from './custom-types'\n\nexport function isListNode(node: Node): node is ListItemElement {\n return DomEditor.checkNodeType(node, 'list-item')\n}\n\n// Keep the legacy name for callers that distinguish the persisted list shape.\nexport const isLegacyListItem = isListNode\n\nexport function isHeadingType(value: unknown): value is HeadingType {\n return typeof value === 'string' && /^header[1-6]$/.test(value)\n}\n\nexport function getHeadingType(node: Node): HeadingType | null {\n if (!isListNode(node) || !isHeadingType(node.headingType)) {\n return null\n }\n\n return node.headingType\n}\n\nexport function getListIndent(node: Node): number {\n if (!isListNode(node)) {\n return 0\n }\n\n return node.level > 0 ? Math.floor(node.level) : 0\n}\n\nexport function getListMode(node: Node): 'standard' | 'outline' {\n return isListNode(node) && node.listMode === 'outline' ? 'outline' : 'standard'\n}\n\nexport function isOutlineListNode(node: Node): node is OutlineListItemElement {\n return (\n isListNode(node) &&\n node.ordered === true &&\n node.listMode === 'outline' &&\n isHeadingType(node.headingType)\n )\n}\n\nexport function getOutlineLevel(node: Node): number {\n const headingType = getHeadingType(node)\n const match = headingType == null ? null : /^header([1-6])$/.exec(headingType)\n\n if (match != null) {\n return Number.parseInt(match[1], 10)\n }\n\n return getListIndent(node) + 1\n}\n\nexport function getNormalizedOrderedListStart(elem: ListItemElement): number {\n const { ordered = false, start } = elem\n\n if (!ordered || typeof start !== 'number' || Number.isNaN(start)) {\n return 1\n }\n\n return start\n}\n\nexport function getNormalizedOrderedListType(elem: ListItemElement): OrderedListType {\n const { orderType } = elem\n\n if (orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return '1'\n}\n\nexport function hasSameListConfig(a: ListItemElement, b: ListItemElement): boolean {\n if (a.ordered !== b.ordered) {\n return false\n }\n if (!a.ordered) {\n return true\n }\n\n return (\n getNormalizedOrderedListType(a) === getNormalizedOrderedListType(b) &&\n getNormalizedOrderedListStart(a) === getNormalizedOrderedListStart(b)\n )\n}\n\nexport function getOrderedItemNumber(editor: IDomEditor, elem: ListItemElement): number {\n if (!elem.ordered) {\n return 1\n }\n\n const level = getListIndent(elem)\n let number = getNormalizedOrderedListStart(elem)\n const index = DomEditor.findPath(editor, elem)[0]\n\n if (index <= 0) {\n return number\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex -= 1) {\n const previous = editor.children[previousIndex]\n\n if (!isListNode(previous)) {\n break\n }\n\n const previousLevel = getListIndent(previous)\n\n if (previousLevel < level) {\n break\n }\n if (previousLevel === level) {\n if (!hasSameListConfig(previous, elem) || isOutlineListNode(previous)) {\n break\n }\n number += 1\n }\n }\n\n return number\n}\n\nexport function getOutlineNumber(editor: IDomEditor, elem: ListItemElement): string {\n const counters = Array.from({ length: 6 }, () => 0)\n\n for (const current of editor.children) {\n if (!isOutlineListNode(current)) {\n continue\n }\n\n const level = getOutlineLevel(current)\n const index = level - 1\n\n for (let parentIndex = 0; parentIndex < index; parentIndex += 1) {\n if (counters[parentIndex] === 0) {\n counters[parentIndex] = 1\n }\n }\n\n if (typeof current.listRestart === 'number' && current.listRestart > 0) {\n counters[index] = Math.floor(current.listRestart)\n } else if (counters[index] === 0) {\n counters[index] = 1\n } else {\n counters[index] += 1\n }\n\n for (let childIndex = index + 1; childIndex < counters.length; childIndex += 1) {\n counters[childIndex] = 0\n }\n\n if (current === elem) {\n const label = counters.slice(0, level).join('.')\n\n return level === 1 ? `${label}.` : label\n }\n }\n\n return ''\n}\n\n/**\n * 获取上一个同一 level 的 list item\n * @param editor editor\n * @param elem elem\n */\nexport function getBrotherListNodeByLevel(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): ListItemElement | null {\n const elemLevel = level !== undefined ? level : elem.level || 0\n let brotherPath = DomEditor.findPath(editor, elem)\n\n while (true) {\n if (brotherPath.length === 0 || brotherPath[brotherPath.length - 1] === 0) {\n return null\n }\n brotherPath = Path.previous(brotherPath)\n const brotherEntry = Editor.node(editor, brotherPath)\n\n if (brotherEntry == null || !isListNode(brotherEntry[0])) {\n return null\n }\n if (getListIndent(brotherEntry[0]) === elemLevel) {\n return brotherEntry[0]\n }\n }\n}\n\nexport function hasSameOrderWithBrother(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): boolean {\n const brotherElem = getBrotherListNodeByLevel(editor, elem, level)\n\n return brotherElem != null && hasSameListConfig(brotherElem, elem)\n}\n","/**\n * @description list style class utils\n */\n\nimport { getClassStylePolicy, IDomEditor, reportUnsupportedClassStyle } from '@wangeditor-next/core'\n\nconst DEFAULT_COLORS = [\n 'rgb(0, 0, 0)',\n 'rgb(38, 38, 38)',\n 'rgb(89, 89, 89)',\n 'rgb(140, 140, 140)',\n 'rgb(191, 191, 191)',\n 'rgb(217, 217, 217)',\n 'rgb(233, 233, 233)',\n 'rgb(245, 245, 245)',\n 'rgb(250, 250, 250)',\n 'rgb(255, 255, 255)',\n 'rgb(225, 60, 57)',\n 'rgb(231, 95, 51)',\n 'rgb(235, 144, 58)',\n 'rgb(245, 219, 77)',\n 'rgb(114, 192, 64)',\n 'rgb(89, 191, 192)',\n 'rgb(66, 144, 247)',\n 'rgb(54, 88, 226)',\n 'rgb(106, 57, 201)',\n 'rgb(216, 68, 147)',\n 'rgb(251, 233, 230)',\n 'rgb(252, 237, 225)',\n 'rgb(252, 239, 212)',\n 'rgb(252, 251, 207)',\n 'rgb(231, 246, 213)',\n 'rgb(218, 244, 240)',\n 'rgb(217, 237, 250)',\n 'rgb(224, 232, 250)',\n 'rgb(237, 225, 248)',\n 'rgb(246, 226, 234)',\n 'rgb(255, 163, 158)',\n 'rgb(255, 187, 150)',\n 'rgb(255, 213, 145)',\n 'rgb(255, 251, 143)',\n 'rgb(183, 235, 143)',\n 'rgb(135, 232, 222)',\n 'rgb(145, 213, 255)',\n 'rgb(173, 198, 255)',\n 'rgb(211, 173, 247)',\n 'rgb(255, 173, 210)',\n 'rgb(255, 77, 79)',\n 'rgb(255, 122, 69)',\n 'rgb(255, 169, 64)',\n 'rgb(255, 236, 61)',\n 'rgb(115, 209, 61)',\n 'rgb(54, 207, 201)',\n 'rgb(64, 169, 255)',\n 'rgb(89, 126, 247)',\n 'rgb(146, 84, 222)',\n 'rgb(247, 89, 171)',\n 'rgb(207, 19, 34)',\n 'rgb(212, 56, 13)',\n 'rgb(212, 107, 8)',\n 'rgb(212, 177, 6)',\n 'rgb(56, 158, 13)',\n 'rgb(8, 151, 156)',\n 'rgb(9, 109, 217)',\n 'rgb(29, 57, 196)',\n 'rgb(83, 29, 171)',\n 'rgb(196, 29, 127)',\n 'rgb(130, 0, 20)',\n 'rgb(135, 20, 0)',\n 'rgb(135, 56, 0)',\n 'rgb(97, 71, 0)',\n 'rgb(19, 82, 0)',\n 'rgb(0, 71, 79)',\n 'rgb(0, 58, 140)',\n 'rgb(6, 17, 120)',\n 'rgb(34, 7, 94)',\n 'rgb(120, 6, 80)',\n]\n\nconst REPORTED_UNSUPPORTED_LIST_COLOR = new Set<string>()\n\nfunction normalizeColorValue(value: string): string {\n return (value || '').trim().replace(/\\s+/g, '').toLowerCase()\n}\n\nconst DEFAULT_COLOR_SET = new Set(DEFAULT_COLORS.map(color => normalizeColorValue(color)))\n\nfunction hashStyleValue(input: string): string {\n const MOD = 2147483647 // 2^31 - 1\n let hash = 7\n\n for (const char of input) {\n hash = (hash * 31 + (char.codePointAt(0) || 0)) % MOD\n }\n\n return hash.toString(36)\n}\n\nexport function genListColorClassName(color: string): string {\n const normalized = normalizeColorValue(color)\n\n return `w-e-list-color-${hashStyleValue(`color:${normalized}`)}`\n}\n\nfunction hasExtraRegisteredColor(editor: IDomEditor | undefined, color: string): boolean {\n const extraTokens = editor?.getConfig().styleClassTokens?.color || []\n const normalizedColor = normalizeColorValue(color)\n\n for (let i = 0; i < extraTokens.length; i += 1) {\n if (normalizeColorValue(extraTokens[i]) === normalizedColor) {\n return true\n }\n }\n\n return false\n}\n\nfunction hasRegisteredListColor(editor: IDomEditor | undefined, color: string): boolean {\n const normalized = normalizeColorValue(color)\n\n if (!normalized) { return false }\n if (DEFAULT_COLOR_SET.has(normalized)) { return true }\n if (hasExtraRegisteredColor(editor, color)) { return true }\n\n return false\n}\n\nexport function resolveListColorAction(\n editor: IDomEditor | undefined,\n color: string,\n): 'class' | 'preserve-data' | 'inline' {\n if (hasRegisteredListColor(editor, color)) {\n return 'class'\n }\n\n const policy = getClassStylePolicy(editor)\n let fallback: 'preserve-data' | 'inline' | 'throw' = 'preserve-data'\n\n if (policy === 'fallback-inline') {\n fallback = 'inline'\n }\n if (policy === 'strict') {\n fallback = 'throw'\n }\n\n const message = `[wangeditor] Unsupported list color class token color=${color}. policy=${policy}`\n const reportKey = `${color}|${fallback}`\n\n if (!REPORTED_UNSUPPORTED_LIST_COLOR.has(reportKey)) {\n REPORTED_UNSUPPORTED_LIST_COLOR.add(reportKey)\n reportUnsupportedClassStyle(editor, {\n type: 'color',\n value: color,\n scene: 'toHtml',\n fallback,\n message,\n })\n }\n\n if (fallback === 'throw') {\n throw new Error(message)\n }\n\n if (fallback === 'inline') {\n return 'inline'\n }\n\n return 'preserve-data'\n}\n","/**\n * @description to html\n * @author wangfupeng\n */\n\nimport { DomEditor, getTextStyleMode, IDomEditor } from '@wangeditor-next/core'\nimport { Element } from 'slate'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getNormalizedOrderedListStart,\n getNormalizedOrderedListType,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\n// ol ul stack for streaming list-item serialization\nconst CONTAINER_TAG_STACK: Array<string> = []\nlet STACK_EDITOR: IDomEditor | null = null\n\nfunction getContainerTag(elem: ListItemElement): 'ol' | 'ul' {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction getFallbackContainerTag(elem: ListItemElement): string {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction genContainerStartTag(elem: ListItemElement): string {\n const { ordered = false } = elem\n\n if (!ordered) { return '<ul>' }\n\n const attrs: string[] = []\n const orderType = getNormalizedOrderedListType(elem)\n const orderStart = getNormalizedOrderedListStart(elem)\n\n if (orderType !== '1') {\n attrs.push(`type=\"${orderType}\"`)\n }\n if (orderStart !== 1) {\n attrs.push(`start=\"${orderStart}\"`)\n }\n if (getHeadingType(elem) != null) {\n attrs.push('data-w-e-list-mode=\"standard\"')\n }\n\n if (attrs.length === 0) { return '<ol>' }\n return `<ol ${attrs.join(' ')}>`\n}\n\nfunction getAdjacentListItem(\n editor: IDomEditor,\n index: number,\n direction: 'prev' | 'next',\n): ListItemElement | null {\n if (direction === 'prev' && index === 0) { return null }\n if (direction === 'next' && index === editor.children.length - 1) { return null }\n\n const targetIndex = direction === 'prev' ? index - 1 : index + 1\n const targetNode = editor.children[targetIndex] as any\n\n if (!DomEditor.checkNodeType(targetNode, 'list-item') || isOutlineListNode(targetNode)) {\n return null\n }\n return targetNode as ListItemElement\n}\n\nfunction getPrevSameLevelListItem(\n editor: IDomEditor,\n index: number,\n level: number,\n): ListItemElement | null {\n for (let i = index - 1; i >= 0; i -= 1) {\n const node = editor.children[i] as any\n\n if (!DomEditor.checkNodeType(node, 'list-item') || isOutlineListNode(node)) { continue }\n if ((node.level || 0) === level) {\n return node as ListItemElement\n }\n }\n return null\n}\n\nfunction elemToHtml(\n elem: Element,\n childrenHtml: string,\n editor?: IDomEditor,\n): {\n html: string\n prefix?: string\n suffix?: string\n} {\n let startContainerStr = ''\n let endContainerStr = ''\n\n const listItemElem = elem as ListItemElement\n const headingType = getHeadingType(listItemElem)\n const headingTag = headingType == null ? null : headingType.replace('header', 'h')\n\n if (isOutlineListNode(listItemElem) && headingTag != null) {\n return {\n html: `<${headingTag}>${childrenHtml}</${headingTag}>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (headingTag != null) {\n childrenHtml = `<${headingTag}>${childrenHtml}</${headingTag}>`\n }\n\n const { level = 0 } = listItemElem\n const containerTag = getContainerTag(listItemElem)\n const containerStartTag = genContainerStartTag(listItemElem)\n const bindEditor = ELEM_TO_EDITOR.get(elem)\n const bindEditorWithChildren = bindEditor && Array.isArray((bindEditor as any).children)\n ? bindEditor\n : null\n const passedEditorWithChildren = editor && Array.isArray((editor as any).children)\n ? editor\n : null\n const editorContainsElem = (candidate: IDomEditor | null | undefined) => (\n !!candidate && candidate.children.indexOf(elem as any) >= 0\n )\n let finalEditor = passedEditorWithChildren || bindEditorWithChildren\n\n if (editorContainsElem(passedEditorWithChildren)) {\n finalEditor = passedEditorWithChildren\n } else if (editorContainsElem(bindEditorWithChildren)) {\n finalEditor = bindEditorWithChildren\n }\n const styleEditor = editor || bindEditor\n\n if (finalEditor == null) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (STACK_EDITOR !== finalEditor) {\n CONTAINER_TAG_STACK.length = 0\n STACK_EDITOR = finalEditor\n }\n\n const index = finalEditor.children.indexOf(elem as any)\n\n if (index < 0) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n const prevItem = getAdjacentListItem(finalEditor, index, 'prev')\n const nextItem = getAdjacentListItem(finalEditor, index, 'next')\n const hasNestedNext = !!nextItem && (nextItem.level || 0) > level\n\n if (!prevItem) {\n // list block start\n CONTAINER_TAG_STACK.length = 0\n for (let i = 0; i < level + 1; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n const prevLevel = prevItem.level || 0\n\n if (level > prevLevel) {\n // Enter nested lists inside previous <li>.\n for (let i = 0; i < level - prevLevel; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else if (level === prevLevel) {\n // Split same-level lists when ordered/type/start differ.\n if (!hasSameListConfig(prevItem, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n // Climb up: close nested list containers and parent <li>.\n let diff = prevLevel - level\n\n while (diff > 0) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}></li>`\n diff -= 1\n }\n\n // Split target-level list container when config changed.\n const brother = getPrevSameLevelListItem(finalEditor, index, level)\n\n if (brother && !hasSameListConfig(brother, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(brother)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n }\n }\n\n // 获取前缀颜色\n const prefixColor = getListItemColor(elem)\n const textStyleMode = getTextStyleMode(styleEditor)\n let colorStyle = ''\n let colorClass = ''\n let colorData = ''\n\n if (prefixColor) {\n if (textStyleMode === 'class') {\n colorData = ` data-w-e-color=\"${prefixColor}\"`\n const action = resolveListColorAction(styleEditor, prefixColor)\n\n if (action === 'class') {\n colorClass = ` class=\"${genListColorClassName(prefixColor)}\"`\n } else if (action === 'inline') {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n } else {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n }\n\n const html = `<li${colorClass}${colorData}${colorStyle}>${childrenHtml}${hasNestedNext ? '' : '</li>'}`\n\n if (!nextItem) {\n // list block end\n while (CONTAINER_TAG_STACK.length > 0) {\n const tag = CONTAINER_TAG_STACK.pop()\n\n if (!tag) { break }\n endContainerStr += `</${tag}>`\n if (CONTAINER_TAG_STACK.length > 0) {\n endContainerStr += '</li>'\n }\n }\n STACK_EDITOR = null\n }\n\n return {\n html,\n prefix: startContainerStr,\n suffix: endContainerStr,\n }\n}\n\nconst listItemToHtmlConf = {\n type: 'list-item',\n elemToHtml,\n}\n\nexport default listItemToHtmlConf\n","/**\n * @description compose semantic outline HTML from additive list-item metadata\n */\n\nimport { getTextStyleMode, HtmlTransformFnType, IDomEditor } from '@wangeditor-next/core'\n\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getOutlineLevel,\n getOutlineNumber,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\ntype OutlineItem = {\n node: ListItemElement\n html: string\n children: OutlineContainer[]\n}\n\ntype OutlineContainer = {\n node: ListItemElement\n items: OutlineItem[]\n}\n\ntype OutlineLevel = {\n container: OutlineContainer\n lastItem: OutlineItem\n}\n\ntype OutlineContext = {\n roots: OutlineContainer[]\n levels: OutlineLevel[]\n}\n\nfunction getOutlineContainerStart(editor: IDomEditor, node: ListItemElement): number {\n const lastSegment = getOutlineNumber(editor, node).split('.').filter(Boolean).pop()\n const start = Number.parseInt(lastSegment || '', 10)\n\n return Number.isFinite(start) && start > 0 ? start : 1\n}\n\nfunction getContainerStartTag(container: OutlineContainer, editor: IDomEditor): string {\n const start = getOutlineContainerStart(editor, container.node)\n const startAttr = start === 1 ? '' : ` start=\"${start}\"`\n\n return `<ol${startAttr} data-w-e-list-mode=\"outline\">`\n}\n\nfunction getColorAttrs(node: ListItemElement, editor: IDomEditor): string[] {\n const color = getListItemColor(node)\n\n if (!color) {\n return []\n }\n\n if (getTextStyleMode(editor) !== 'class') {\n return [`style=\"color:${color}\"`]\n }\n\n const attrs = [`data-w-e-color=\"${color}\"`]\n const action = resolveListColorAction(editor, color)\n\n if (action === 'class') {\n attrs.unshift(`class=\"${genListColorClassName(color)}\"`)\n } else if (action === 'inline') {\n attrs.push(`style=\"color:${color}\"`)\n }\n\n return attrs\n}\n\nfunction getListItemStartTag(node: ListItemElement, editor: IDomEditor): string {\n const attrs = getColorAttrs(node, editor)\n\n attrs.push(`data-w-e-list-indent=\"${getOutlineLevel(node) - 1}\"`)\n\n if (typeof node.listRestart === 'number') {\n attrs.push(`data-w-e-list-restart=\"${node.listRestart}\"`)\n }\n attrs.push(`data-w-e-outline-number=\"${getOutlineNumber(editor, node)}\"`)\n\n return `<li ${attrs.join(' ')}>`\n}\n\nfunction renderContainer(container: OutlineContainer, editor: IDomEditor): string {\n const itemsHtml = container.items\n .map(item => {\n const childrenHtml = item.children.map(child => renderContainer(child, editor)).join('')\n\n return `${getListItemStartTag(item.node, editor)}${item.html}${childrenHtml}</li>`\n })\n .join('')\n\n return `${getContainerStartTag(container, editor)}${itemsHtml}</ol>`\n}\n\nfunction addOutlineItem(\n roots: OutlineContainer[],\n levels: OutlineLevel[],\n node: ListItemElement,\n html: string\n): OutlineItem {\n let level = Math.max(0, getOutlineLevel(node) - 1)\n\n // A standalone h3 cannot have a semantic parent. Preserve the source depth\n // in data-w-e-list-indent while emitting valid nested HTML.\n if (level > levels.length) {\n level = levels.length\n }\n\n levels.length = level + 1\n const parent = level > 0 ? levels[level - 1]?.lastItem : null\n const current = levels[level]\n const restart = typeof node.listRestart === 'number'\n const needsNewContainer =\n current == null || !hasSameListConfig(current.container.node, node) || restart\n\n let container: OutlineContainer\n\n if (needsNewContainer) {\n container = { node, items: [] }\n if (parent != null) {\n parent.children.push(container)\n } else {\n roots.push(container)\n }\n } else {\n container = current.container\n }\n\n const item: OutlineItem = { node, html, children: [] }\n\n container.items.push(item)\n levels[level] = { container, lastItem: item }\n\n return item\n}\n\n/**\n * List-item serialization remains backward compatible for ordinary lists.\n * Only outline list items need document-level composition to create valid\n * `ol > li > hN` structure.\n */\nexport const transformListHtml: HtmlTransformFnType = (htmlList, nodes, editor) => {\n const result: string[] = []\n let outlineContext: OutlineContext | null = null\n\n const flushOutline = () => {\n if (outlineContext == null || outlineContext.roots.length === 0) {\n return\n }\n\n result.push(outlineContext.roots.map(container => renderContainer(container, editor)).join(''))\n outlineContext = null\n }\n\n nodes.forEach((node, index) => {\n const html = htmlList[index] || ''\n\n if (isOutlineListNode(node)) {\n if (outlineContext == null) {\n outlineContext = { roots: [], levels: [] }\n }\n\n addOutlineItem(outlineContext.roots, outlineContext.levels, node, html)\n return\n }\n\n flushOutline()\n result.push(html)\n })\n\n flushOutline()\n\n return result\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 无序列表\nexport const BULLETED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z\"></path></svg>'\n\n// 有序列表\nexport const NUMBERED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z\"></path></svg>'\n","/**\n * @description list menu base class\n * @author wangfupeng\n */\n\nimport { IButtonMenu, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\n\nimport { HeadingType, ListItemElement, OrderedListType } from '../custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n isHeadingType,\n isListNode,\n} from '../helpers'\n\nfunction getSelectedTopLevelBlocks(editor: IDomEditor): Array<[Element, Path]> {\n if (editor.selection == null) {\n return []\n }\n\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction isListableBlock(editor: IDomEditor, elem: Element): boolean {\n if (Editor.isVoid(editor, elem)) {\n return false\n }\n\n return !['pre', 'code', 'table', 'table-row', 'table-cell'].includes(elem.type)\n}\n\nfunction getHeadingLevel(headingType: HeadingType): number {\n return Number.parseInt(headingType.slice('header'.length), 10) - 1\n}\n\nfunction getOriginalHeadingType(node: Element): HeadingType | null {\n if (isListNode(node)) {\n return getHeadingType(node)\n }\n\n return isHeadingType(node.type) ? node.type : null\n}\n\nabstract class BaseMenu implements IButtonMenu {\n readonly type = 'list-item'\n\n abstract readonly ordered: boolean\n\n readonly orderType?: OrderedListType\n\n abstract readonly title: string\n\n abstract readonly iconSvg: string\n\n readonly tag = 'button'\n\n private isTargetListNode(node: Node): boolean {\n if (!isListNode(node) || Boolean(node.ordered) !== this.ordered) {\n return false\n }\n if (!this.ordered) {\n return true\n }\n\n return getNormalizedOrderedListType(node) === (this.orderType || '1')\n }\n\n getValue(_editor: IDomEditor): string | boolean {\n return ''\n }\n\n isActive(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length > 0 && selectedBlocks.every(([node]) => this.isTargetListNode(node))\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length === 0 || selectedBlocks.some(([node]) => !isListableBlock(editor, node))\n }\n\n exec(editor: IDomEditor, _value: string | boolean): void {\n const active = this.isActive(editor)\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n if (selectedBlocks.length === 0) {\n return\n }\n\n Editor.withoutNormalizing(editor, () => {\n selectedBlocks.forEach(([node, path]) => {\n if (active) {\n const listNode = node as ListItemElement\n const headingType = getHeadingType(listNode)\n\n Transforms.setNodes(\n editor,\n {\n type: headingType || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n return\n }\n\n const headingType = getOriginalHeadingType(node)\n const outline = this.ordered && this.orderType == null && headingType != null\n\n Transforms.setNodes(\n editor,\n {\n type: 'list-item',\n ordered: this.ordered,\n level: outline ? getHeadingLevel(headingType as HeadingType) : getListIndent(node),\n start: undefined,\n orderType: this.ordered ? this.orderType : undefined,\n headingType: outline ? headingType : undefined,\n listMode: outline ? 'outline' : undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n })\n })\n }\n}\n\nexport default BaseMenu\n","/**\n * @description bulleted list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { BULLETED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass BulletedListMenu extends BaseMenu {\n readonly ordered = false\n\n readonly title = t('listModule.unOrderedList')\n\n readonly iconSvg = BULLETED_LIST_SVG\n}\n\nexport default BulletedListMenu\n","/**\n * @description lower-alpha ordered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport { OrderedListType } from '../custom-types'\nimport BaseMenu from './BaseMenu'\n\nclass LowerAlphaListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly orderType: OrderedListType = 'a'\n\n readonly title = t('listModule.lowerAlphaList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default LowerAlphaListMenu\n","/**\n * @description numbered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass NumberedListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly title = t('listModule.orderedList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default NumberedListMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport BulletedListMenu from './BulletedListMenu'\nimport LowerAlphaListMenu from './LowerAlphaListMenu'\nimport NumberedListMenu from './NumberedListMenu'\n\nexport const bulletedListMenuConf = {\n key: 'bulletedList',\n factory() {\n return new BulletedListMenu()\n },\n}\n\nexport const numberedListMenuConf = {\n key: 'numberedList',\n factory() {\n return new NumberedListMenu()\n },\n}\n\nexport const numberedListLowerAlphaMenuConf = {\n key: 'numberedListLowerAlpha',\n factory() {\n return new LowerAlphaListMenu()\n },\n}\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, attr, Dom7Array, parent,\n} from 'dom7'\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nif (append) { $.fn.append = append }\n// if (on) $.fn.on = on\n// if (focus) $.fn.focus = focus\nif (attr) { $.fn.attr = attr }\n// if (val) $.fn.val = val\n// if (html) $.fn.html = html\nif (parent) { $.fn.parent = parent }\n// if (hasClass) $.fn.hasClass = hasClass\n// if (empty) $.fn.empty = empty\n\nexport default $\nexport {\n DOMComment, DOMElement, DOMNode, DOMRange, DOMSelection, DOMStaticRange, DOMText,\n}\n\n/**\n * 获取 tagName lower-case\n * @param $elem $elem\n */\nexport function getTagName($elem: Dom7Array): string {\n if ($elem.length === 0) { return '' }\n const elem = $elem[0]\n\n if (elem.nodeType !== DOMNode.ELEMENT_NODE) { return '' }\n return elem.tagName.toLowerCase()\n}\n","/**\n * @description parse list HTML\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { Dom7Array } from 'dom7'\nimport { Descendant, Element as SlateElement, Text } from 'slate'\n\nimport $, { DOMElement, getTagName } from '../utils/dom'\nimport { HeadingType, ListItemElement, OrderedListType } from './custom-types'\nimport { isHeadingType, isListNode } from './helpers'\n\nfunction getOrdered($elem: Dom7Array): boolean {\n return getTagName($elem.parent()) === 'ol'\n}\n\nfunction getOrderedStart($elem: Dom7Array): number | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const value = ($list.attr('start') || '').trim()\n const start = Number.parseInt(value, 10)\n\n return Number.isNaN(start) ? undefined : start\n}\n\nfunction getOrderedType($elem: Dom7Array): OrderedListType | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const orderType = ($list.attr('type') || '').trim()\n\n if (orderType === '1' || orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return undefined\n}\n\nfunction getLevel($elem: Dom7Array): number {\n const indent = ($elem.attr('data-w-e-list-indent') || '').trim()\n\n if (/^\\d+$/.test(indent)) {\n return Number.parseInt(indent, 10)\n }\n\n let listAncestorCount = 0\n let $current: Dom7Array = $elem.parent()\n\n while ($current.length > 0) {\n const tagName = getTagName($current)\n\n if (tagName === 'ul' || tagName === 'ol') {\n listAncestorCount += 1\n }\n $current = $current.parent()\n }\n\n return Math.max(0, listAncestorCount - 1)\n}\n\nfunction getListMode($elem: Dom7Array, children: Descendant[]): 'standard' | 'outline' {\n const declaredMode = $elem.parent().attr('data-w-e-list-mode')\n\n if (declaredMode === 'outline' || declaredMode === 'standard') {\n return declaredMode\n }\n\n return getOrdered($elem) && children.some(child => {\n return SlateElement.isElement(child) && isHeadingType(child.type)\n })\n ? 'outline'\n : 'standard'\n}\n\nfunction getRestart($elem: Dom7Array): number | undefined {\n const value = ($elem.attr('data-w-e-list-restart') || '').trim()\n\n if (!/^\\d+$/.test(value)) {\n return undefined\n }\n\n const restart = Number.parseInt(value, 10)\n\n return restart > 0 ? restart : undefined\n}\n\nfunction isFirstListItem($elem: Dom7Array): boolean {\n let previous = $elem[0]?.previousElementSibling\n\n while (previous != null) {\n if (previous.tagName.toLowerCase() === 'li') {\n return false\n }\n previous = previous.previousElementSibling\n }\n\n return true\n}\n\nfunction getOutlineRestart($elem: Dom7Array): number | undefined {\n const restart = getRestart($elem)\n\n if (restart !== undefined) {\n return restart\n }\n if ($elem.attr('data-w-e-outline-number') != null || !isFirstListItem($elem)) {\n return undefined\n }\n\n return getOrderedStart($elem)\n}\n\nfunction isStructuralWhitespaceText(child: Descendant): boolean {\n return Text.isText(child) && child.text.trim() === ''\n}\n\nfunction appendTextLikeChildren(target: Descendant[], children: Descendant[], editor: IDomEditor) {\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (Text.isText(child) || editor.isInline(child)) {\n target.push(child)\n return\n }\n if (SlateElement.isElement(child)) {\n appendTextLikeChildren(target, child.children, editor)\n }\n })\n}\n\nfunction getHeadingNode(children: Descendant[]): SlateElement | null {\n for (const child of children) {\n if (SlateElement.isElement(child) && isHeadingType(child.type)) {\n return child\n }\n }\n\n return null\n}\n\nfunction parseItemHtml(\n elem: DOMElement,\n children: Descendant[],\n editor: IDomEditor\n): ListItemElement | ListItemElement[] {\n const $elem = $(elem)\n const level = getLevel($elem)\n const directChildren: Descendant[] = []\n const nestedListChildren: ListItemElement[] = []\n\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (isListNode(child) && child.level > level) {\n nestedListChildren.push(child)\n return\n }\n directChildren.push(child)\n })\n\n const headingNode = getHeadingNode(directChildren)\n const headingType = headingNode != null && isHeadingType(headingNode.type)\n ? (headingNode.type as HeadingType)\n : undefined\n const listMode = getListMode($elem, directChildren)\n const normalizedChildren: Descendant[] = []\n\n appendTextLikeChildren(normalizedChildren, directChildren, editor)\n\n if (normalizedChildren.length === 0) {\n normalizedChildren.push(\n nestedListChildren.length > 0 ? { text: '' } : { text: $elem.text().replace(/\\s+/gm, ' ') }\n )\n }\n\n const ordered = getOrdered($elem)\n const start = getOrderedStart($elem)\n const orderType = getOrderedType($elem)\n const outline = ordered && listMode === 'outline' && headingType !== undefined\n const listRestart = outline ? getOutlineRestart($elem) : undefined\n const item: ListItemElement = {\n type: 'list-item',\n ordered,\n level: outline ? Number.parseInt(headingType.slice('header'.length), 10) - 1 : level,\n ...(start !== undefined && !outline ? { start } : {}),\n ...(orderType !== undefined ? { orderType } : {}),\n ...(headingType !== undefined ? { headingType } : {}),\n ...(outline ? { listMode: 'outline' as const } : {}),\n ...(listRestart !== undefined ? { listRestart } : {}),\n // @ts-ignore List items retain the established text/inline children shape.\n children: normalizedChildren,\n }\n\n return nestedListChildren.length === 0 ? item : [item, ...nestedListChildren]\n}\n\nexport const parseItemHtmlConf = {\n selector: 'li:not([data-w-e-type])',\n parseElemHtml: parseItemHtml,\n}\n\nfunction parseListHtml(\n _elem: DOMElement,\n children: Descendant[],\n _editor: IDomEditor\n): ListItemElement[] {\n // @ts-ignore Nested lists return arrays which must be flattened.\n return children.flat(Infinity)\n}\n\nexport const parseListHtmlConf = {\n selector: 'ul:not([data-w-e-type]),ol:not([data-w-e-type])',\n parseElemHtml: parseListHtml,\n}\n","/**\n * @description list editor plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Range, Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\nimport {\n getBrotherListNodeByLevel,\n getHeadingType,\n getListIndent,\n isListNode,\n isOutlineListNode,\n} from './helpers'\n\nfunction getTopSelectedElemsBySelection(editor: IDomEditor): Array<[Element, Path]> {\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction getSelectedListEntry(editor: IDomEditor): [ListItemElement, Path] | null {\n const [entry] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: isListNode,\n universal: true,\n })\n\n return entry == null ? null : (entry as [ListItemElement, Path])\n}\n\nfunction clearListItem(editor: IDomEditor, path: Path, node: ListItemElement, type?: string) {\n Transforms.setNodes(\n editor,\n {\n type: type || getHeadingType(node) || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n}\n\nfunction withList<T extends IDomEditor>(editor: T): T {\n const { deleteBackward, handleTab, normalizeNode, insertBreak } = editor\n const newEditor = editor\n\n newEditor.insertBreak = () => {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null) {\n return insertBreak()\n }\n\n const [listItem, path] = entry\n\n if (Node.string(listItem) === '') {\n clearListItem(newEditor, path, listItem, 'paragraph')\n return\n }\n\n return insertBreak()\n }\n\n newEditor.deleteBackward = unit => {\n const { selection } = newEditor\n\n if (selection == null || Range.isExpanded(selection)) {\n deleteBackward(unit)\n return\n }\n\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || selection.focus.offset !== 0) {\n deleteBackward(unit)\n return\n }\n\n const [listItem, path] = entry\n\n if (isOutlineListNode(listItem)) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const level = getListIndent(listItem)\n\n if (level <= 0) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const brother = getBrotherListNodeByLevel(editor, listItem, level - 1)\n\n if (brother != null) {\n Transforms.setNodes(\n newEditor,\n {\n level: level - 1,\n ordered: brother.ordered,\n start: brother.ordered ? brother.start : undefined,\n orderType: brother.ordered ? brother.orderType : undefined,\n },\n { at: path }\n )\n } else {\n Transforms.setNodes(newEditor, { level: level - 1 }, { at: path })\n }\n }\n\n newEditor.handleTab = () => {\n const { selection } = newEditor\n\n if (selection == null) {\n handleTab()\n return\n }\n\n if (Range.isCollapsed(selection)) {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || isOutlineListNode(entry[0]) || selection.focus.offset !== 0) {\n handleTab()\n return\n }\n\n const [listItem, path] = entry\n\n Transforms.setNodes(newEditor, { level: getListIndent(listItem) + 1 }, { at: path })\n return\n }\n\n const selectedEntries = getTopSelectedElemsBySelection(newEditor)\n const listEntries = selectedEntries.filter(([node]) => {\n return isListNode(node) && !isOutlineListNode(node)\n })\n\n if (listEntries.length !== selectedEntries.length || listEntries.length <= 1) {\n handleTab()\n return\n }\n\n listEntries.forEach(([node, path]) => {\n Transforms.setNodes(newEditor, { level: getListIndent(node) + 1 }, { at: path })\n })\n }\n\n newEditor.normalizeNode = ([node, path]) => {\n const type = DomEditor.getNodeType(node)\n\n if (type === 'bulleted-list' || type === 'numbered-list') {\n Transforms.unwrapNodes(newEditor, { at: path })\n }\n\n return normalizeNode([node, path])\n }\n\n return newEditor\n}\n\nexport default withList\n","/**\n * @description outline numbering marker actions\n */\n\nimport { DomEditor, EditorEvents, IDomEditor, t } from '@wangeditor-next/core'\nimport { Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\n\ntype OutlineActionPanel = {\n elem: HTMLElement\n dispose: () => void\n}\n\nconst PANEL_BY_EDITOR = new WeakMap<IDomEditor, OutlineActionPanel>()\n\nfunction updateRestart(editor: IDomEditor, node: ListItemElement, restart?: number) {\n const index = editor.children.indexOf(node)\n\n if (index < 0) {\n return\n }\n\n Transforms.setNodes(editor, { listRestart: restart }, { at: [index] })\n}\n\nexport function continueOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node)\n}\n\nexport function restartOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node, 1)\n}\n\nexport function hideOutlineActionPanel(editor: IDomEditor) {\n const panel = PANEL_BY_EDITOR.get(editor)\n\n if (panel == null) {\n return\n }\n panel.dispose()\n PANEL_BY_EDITOR.delete(editor)\n}\n\nfunction createActionButton(\n document: Document,\n label: string,\n onClick: () => void\n): HTMLButtonElement {\n const button = document.createElement('button')\n\n button.type = 'button'\n button.className = 'w-e-list-outline-action'\n button.textContent = label\n button.addEventListener('mousedown', event => event.preventDefault())\n button.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n onClick()\n })\n\n return button\n}\n\nexport function showOutlineActionPanel(editor: IDomEditor, node: ListItemElement, marker: HTMLElement) {\n if (editor.isDisabled()) {\n return\n }\n\n hideOutlineActionPanel(editor)\n\n const document = marker.ownerDocument\n const panel = document.createElement('div')\n\n panel.className = 'w-e-list-outline-actions'\n panel.setAttribute('role', 'menu')\n panel.addEventListener('mousedown', event => event.preventDefault())\n panel.append(\n createActionButton(document, t('listModule.continueNumbering'), () => {\n continueOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n }),\n createActionButton(document, t('listModule.restartNumbering'), () => {\n restartOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n })\n )\n\n const textarea = DomEditor.getTextarea(editor)\n const container = textarea.$textAreaContainer[0] as HTMLElement\n const scroll = textarea.$scroll[0] as HTMLElement\n const markerRect = marker.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n\n panel.style.top = `${markerRect.bottom - containerRect.top + scroll.scrollTop + 4}px`\n panel.style.left = `${markerRect.left - containerRect.left + scroll.scrollLeft}px`\n container.append(panel)\n\n const onDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n if (panel.contains(target) || marker.contains(target)) {\n return\n }\n\n hideOutlineActionPanel(editor)\n }\n const onEditorChange = () => hideOutlineActionPanel(editor)\n const onEditorDestroyed = () => hideOutlineActionPanel(editor)\n\n document.addEventListener('mousedown', onDocumentMouseDown, true)\n editor.on(EditorEvents.CHANGE, onEditorChange)\n editor.on(EditorEvents.DESTROYED, onEditorDestroyed)\n\n PANEL_BY_EDITOR.set(editor, {\n elem: panel,\n dispose: () => {\n document.removeEventListener('mousedown', onDocumentMouseDown, true)\n editor.off(EditorEvents.CHANGE, onEditorChange)\n editor.off(EditorEvents.DESTROYED, onEditorDestroyed)\n panel.remove()\n },\n })\n}\n","/**\n * @description render list elem\n * @author wangfupeng\n */\n\nimport { IDomEditor, t } from '@wangeditor-next/core'\nimport { Element as SlateElement } from 'slate'\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { jsx, VNode } from 'snabbdom'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n getOrderedItemNumber,\n getOutlineNumber,\n isOutlineListNode,\n} from './helpers'\nimport { showOutlineActionPanel } from './outline-actions'\n\nfunction genPreSymbol(level = 0): string {\n switch (level) {\n case 0:\n return '•'\n case 1:\n return '◦'\n default:\n return '▪'\n }\n}\n\nfunction genAlphabetIndex(number: number, upper = false): string {\n if (number <= 0) {\n return String(number)\n }\n\n let current = number\n let result = ''\n\n while (current > 0) {\n const remainder = (current - 1) % 26\n const charCode = (upper ? 65 : 97) + remainder\n\n result = String.fromCharCode(charCode) + result\n current = Math.floor((current - 1) / 26)\n }\n\n return result\n}\n\nfunction genRomanIndex(number: number, upper = false): string {\n if (number <= 0 || number >= 4000) {\n return String(number)\n }\n\n const romanMap: Array<[number, string]> = [\n [1000, 'M'],\n [900, 'CM'],\n [500, 'D'],\n [400, 'CD'],\n [100, 'C'],\n [90, 'XC'],\n [50, 'L'],\n [40, 'XL'],\n [10, 'X'],\n [9, 'IX'],\n [5, 'V'],\n [4, 'IV'],\n [1, 'I'],\n ]\n let current = number\n let result = ''\n\n for (const [value, roman] of romanMap) {\n while (current >= value) {\n result += roman\n current -= value\n }\n }\n\n return upper ? result : result.toLowerCase()\n}\n\nfunction genOrderedPrefix(number: number, orderType: string): string {\n switch (orderType) {\n case 'a':\n return `${genAlphabetIndex(number)}.`\n case 'A':\n return `${genAlphabetIndex(number, true)}.`\n case 'i':\n return `${genRomanIndex(number)}.`\n case 'I':\n return `${genRomanIndex(number, true)}.`\n default:\n return `${number}.`\n }\n}\n\nfunction renderListElem(\n elemNode: SlateElement,\n children: VNode[] | null,\n editor: IDomEditor\n): VNode {\n ELEM_TO_EDITOR.set(elemNode, editor)\n\n const listItem = elemNode as ListItemElement\n const outline = isOutlineListNode(listItem)\n const level = getListIndent(listItem)\n const listStyle = {\n margin: `5px 0 5px ${level * 20}px`,\n display: 'flex',\n alignItems: 'baseline',\n }\n const prefixColor = getListItemColor(listItem)\n let prefix = ''\n\n if (outline) {\n prefix = getOutlineNumber(editor, listItem)\n } else if (listItem.ordered) {\n prefix = genOrderedPrefix(getOrderedItemNumber(editor, listItem), getNormalizedOrderedListType(listItem))\n } else {\n prefix = genPreSymbol(level)\n }\n\n const markerStyle = { marginRight: '0.5em', color: prefixColor }\n const marker = outline ? (\n <button\n type=\"button\"\n className=\"w-e-list-marker\"\n contentEditable={false}\n data-w-e-reserve\n aria-label={t('listModule.numberingActions')}\n title={t('listModule.numberingActions')}\n style={markerStyle}\n on={{\n mousedown: event => event.preventDefault(),\n click: event => {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.currentTarget instanceof HTMLElement) {\n showOutlineActionPanel(editor, listItem, event.currentTarget)\n }\n },\n }}\n >\n {prefix}\n </button>\n ) : (\n <span className=\"w-e-list-marker\" contentEditable={false} style={markerStyle} data-w-e-reserve>\n {prefix}\n </span>\n )\n\n const headingType = getHeadingType(listItem)\n const ContentTag = headingType == null ? 'span' : headingType.replace('header', 'h')\n\n return (\n <div className=\"w-e-list-item\" style={listStyle}>\n {marker}\n <ContentTag style={{ flex: '1', minWidth: '0', wordBreak: 'break-word' }}>{children}</ContentTag>\n </div>\n )\n}\n\nconst renderListItemConf = {\n type: 'list-item',\n renderElem: renderListElem,\n}\n\nexport default renderListItemConf\n","/**\n * @description list module entry\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport listItemToHtmlConf from './elem-to-html'\nimport { transformListHtml } from './html-transform'\nimport {\n bulletedListMenuConf,\n numberedListLowerAlphaMenuConf,\n numberedListMenuConf,\n} from './menu/index'\nimport { parseItemHtmlConf, parseListHtmlConf } from './parse-elem-html'\nimport withList from './plugin'\nimport renderListItemConf from './render-elem'\n\nconst list: Partial<IModuleConf> = {\n renderElems: [renderListItemConf],\n editorPlugin: withList,\n menus: [bulletedListMenuConf, numberedListMenuConf, numberedListLowerAlphaMenuConf],\n htmlTransform: transformListHtml,\n elemsToHtml: [listItemToHtmlConf],\n parseElemsHtml: [parseListHtmlConf, parseItemHtmlConf],\n}\n\nexport default list\n"],"names":["i18nAddResources","listModule","unOrderedList","orderedList","lowerAlphaList","numberingActions","continueNumbering","restartNumbering","ELEM_TO_EDITOR","WeakMap","getListItemColor","elem","firstTextNode","children","length","i","child","Text","isText","color","isListNode","node","DomEditor","checkNodeType","isHeadingType","value","test","getHeadingType","headingType","getListIndent","level","Math","floor","isOutlineListNode","ordered","listMode","getOutlineLevel","match","exec","Number","parseInt","getNormalizedOrderedListStart","_a","start","isNaN","getNormalizedOrderedListType","orderType","hasSameListConfig","a","b","getOutlineNumber","editor","counters","Array","from","_b","__values","_c","next","done","current","index","parentIndex","listRestart","childIndex","label","slice","join","concat","REPORTED_UNSUPPORTED_LIST_COLOR","Set","normalizeColorValue","trim","replace","toLowerCase","DEFAULT_COLOR_SET","map","genListColorClassName","normalized","input","hash","input_1","input_1_1","codePointAt","toString","hashStyleValue","hasRegisteredListColor","has","extraTokens","getConfig","styleClassTokens","normalizedColor","hasExtraRegisteredColor","resolveListColorAction","policy","getClassStylePolicy","fallback","message","reportKey","add","reportUnsupportedClassStyle","type","scene","Error","CONTAINER_TAG_STACK","STACK_EDITOR","getFallbackContainerTag","getAdjacentListItem","direction","targetIndex","targetNode","listItemToHtmlConf","elemToHtml","childrenHtml","startContainerStr","endContainerStr","listItemElem","headingTag","html","prefix","suffix","containerTag","getContainerTag","containerStartTag","attrs","orderStart","push","genContainerStartTag","bindEditor","get","bindEditorWithChildren","isArray","passedEditorWithChildren","editorContainsElem","candidate","indexOf","finalEditor","styleEditor","prevItem","nextItem","hasNestedNext","prevLevel","closeTag","pop","diff","brother","getPrevSameLevelListItem","prefixColor","textStyleMode","getTextStyleMode","colorStyle","colorClass","colorData","action","tag","getContainerStartTag","container","lastSegment","split","filter","Boolean","isFinite","getOutlineContainerStart","startAttr","getListItemStartTag","unshift","getColorAttrs","renderContainer","itemsHtml","items","item","NUMBERED_LIST_SVG","getSelectedTopLevelBlocks","selection","Editor","nodes","at","Element","isElement","isBlock","mode","__read","getHeadingLevel","BaseMenu","this","prototype","isTargetListNode","getValue","_editor","isActive","_this","selectedBlocks","every","isDisabled","some","isVoid","includes","isListableBlock","_value","active","withoutNormalizing","forEach","path","headingType_1","Transforms","setNodes","undefined","getOriginalHeadingType","outline","BulletedListMenu","_super","title","t","iconSvg","__extends","LowerAlphaListMenu","NumberedListMenu","bulletedListMenuConf","key","factory","numberedListMenuConf","numberedListLowerAlphaMenuConf","DOMNode","globalThis","Node","getTagName","$elem","nodeType","ELEMENT_NODE","tagName","getOrdered","parent","getOrderedStart","$list","attr","getOutlineRestart","restart","getRestart","previous","previousElementSibling","isFirstListItem","isStructuralWhitespaceText","text","appendTextLikeChildren","target","isInline","SlateElement","append","$","fn","parseItemHtmlConf","selector","parseElemHtml","indent","listAncestorCount","$current","max","getLevel","directChildren","nestedListChildren","headingNode","children_1","children_1_1","getHeadingNode","declaredMode","getListMode","normalizedChildren","getOrderedType","__assign","__spreadArray","parseListHtmlConf","_elem","flat","Infinity","getSelectedListEntry","entry","universal","clearListItem","PANEL_BY_EDITOR","updateRestart","hideOutlineActionPanel","panel","dispose","delete","createActionButton","document","onClick","button","createElement","className","textContent","addEventListener","event","preventDefault","stopPropagation","showOutlineActionPanel","marker","ownerDocument","setAttribute","continueOutlineNumbering","restartOutlineNumbering","textarea","getTextarea","$textAreaContainer","scroll","$scroll","markerRect","getBoundingClientRect","containerRect","style","top","bottom","scrollTop","left","scrollLeft","onDocumentMouseDown","contains","onEditorChange","onEditorDestroyed","on","EditorEvents","CHANGE","DESTROYED","set","removeEventListener","off","remove","genAlphabetIndex","number","upper","String","result","charCode","fromCharCode","genRomanIndex","romanMap_1","romanMap_1_1","roman","renderElems","renderElem","elemNode","listItem","listStyle","margin","display","alignItems","genOrderedPrefix","findPath","previousIndex","previousLevel","getOrderedItemNumber","genPreSymbol","markerStyle","marginRight","jsx","contentEditable","mousedown","click","currentTarget","HTMLElement","ContentTag","flex","minWidth","wordBreak","editorPlugin","deleteBackward","handleTab","normalizeNode","insertBreak","newEditor","string","unit","Range","isExpanded","focus","offset","elemLevel","brotherPath","Path","brotherEntry","getBrotherListNodeByLevel","isCollapsed","selectedEntries","getTopSelectedElemsBySelection","listEntries","getNodeType","unwrapNodes","menus","htmlTransform","htmlList","outlineContext","flushOutline","roots","levels","lastItem","addOutlineItem","elemsToHtml","parseElemsHtml"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{i18nAddResources as e,DomEditor as r,getClassStylePolicy as t,reportUnsupportedClassStyle as n,getTextStyleMode as o,t as i,EditorEvents as a}from"@wangeditor-next/core";import{Text as l,Path as u,Editor as c,Transforms as s,Element as d,Node as f,Range as v}from"slate";import p,{append as g,attr as h,parent as m}from"dom7";import{jsx as b}from"snabbdom";e("en",{listModule:{unOrderedList:"Unordered list",orderedList:"Ordered list",lowerAlphaList:"Ordered list (a,b,c)",numberingActions:"Heading numbering actions",continueNumbering:"Continue heading numbering",restartNumbering:"Restart numbering"}}),e("zh-CN",{listModule:{unOrderedList:"无序列表",orderedList:"有序列表",lowerAlphaList:"有序列表(a,b,c)",numberingActions:"标题编号操作",continueNumbering:"继续标题编号",restartNumbering:"重新开始编号"}});var y=new WeakMap;function w(e){var r,t=e.children||[],n=t.length;if(0===n)return"";for(var o=0;o<n&&!r;o+=1){var i=t[o];l.isText(i)&&(r=i)}return null==r?"":r.color||""}var x=function(e,r){return x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])},x(e,r)};function N(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function t(){this.constructor=e}x(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}var T=function(){return T=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},T.apply(this,arguments)};function E(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function M(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,i=t.call(e),a=[];try{for(;(void 0===r||r-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}function k(e,r,t){if(t||2===arguments.length)for(var n,o=0,i=r.length;o<i;o++)!n&&o in r||(n||(n=Array.prototype.slice.call(r,0,o)),n[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}function A(e){return r.checkNodeType(e,"list-item")}function L(e){return"string"==typeof e&&/^header[1-6]$/.test(e)}function H(e){return A(e)&&L(e.headingType)?e.headingType:null}function C(e){return A(e)&&e.level>0?Math.floor(e.level):0}function S(e){return A(e)&&!0===e.ordered&&"outline"===e.listMode&&L(e.headingType)}function O(e){var r=H(e),t=null==r?null:/^header([1-6])$/.exec(r);return null!=t?Number.parseInt(t[1],10):C(e)+1}function I(e){var r=e.ordered,t=void 0!==r&&r,n=e.start;return!t||"number"!=typeof n||Number.isNaN(n)?1:n}function R(e){var r=e.orderType;return"a"===r||"A"===r||"i"===r||"I"===r?r:"1"}function z(e,r){return e.ordered===r.ordered&&(!e.ordered||R(e)===R(r)&&I(e)===I(r))}function D(e,r){var t,n,o=Array.from({length:6},function(){return 0});try{for(var i=E(e.children),a=i.next();!a.done;a=i.next()){var l=a.value;if(S(l)){for(var u=O(l),c=u-1,s=0;s<c;s+=1)0===o[s]&&(o[s]=1);"number"==typeof l.listRestart&&l.listRestart>0?o[c]=Math.floor(l.listRestart):0===o[c]?o[c]=1:o[c]+=1;for(var d=c+1;d<o.length;d+=1)o[d]=0;if(l===r){var f=o.slice(0,u).join(".");return 1===u?"".concat(f,"."):f}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return""}"function"==typeof SuppressedError&&SuppressedError;var B=new Set;function j(e){return(e||"").trim().replace(/\s+/g,"").toLowerCase()}var P=new Set(["rgb(0, 0, 0)","rgb(38, 38, 38)","rgb(89, 89, 89)","rgb(140, 140, 140)","rgb(191, 191, 191)","rgb(217, 217, 217)","rgb(233, 233, 233)","rgb(245, 245, 245)","rgb(250, 250, 250)","rgb(255, 255, 255)","rgb(225, 60, 57)","rgb(231, 95, 51)","rgb(235, 144, 58)","rgb(245, 219, 77)","rgb(114, 192, 64)","rgb(89, 191, 192)","rgb(66, 144, 247)","rgb(54, 88, 226)","rgb(106, 57, 201)","rgb(216, 68, 147)","rgb(251, 233, 230)","rgb(252, 237, 225)","rgb(252, 239, 212)","rgb(252, 251, 207)","rgb(231, 246, 213)","rgb(218, 244, 240)","rgb(217, 237, 250)","rgb(224, 232, 250)","rgb(237, 225, 248)","rgb(246, 226, 234)","rgb(255, 163, 158)","rgb(255, 187, 150)","rgb(255, 213, 145)","rgb(255, 251, 143)","rgb(183, 235, 143)","rgb(135, 232, 222)","rgb(145, 213, 255)","rgb(173, 198, 255)","rgb(211, 173, 247)","rgb(255, 173, 210)","rgb(255, 77, 79)","rgb(255, 122, 69)","rgb(255, 169, 64)","rgb(255, 236, 61)","rgb(115, 209, 61)","rgb(54, 207, 201)","rgb(64, 169, 255)","rgb(89, 126, 247)","rgb(146, 84, 222)","rgb(247, 89, 171)","rgb(207, 19, 34)","rgb(212, 56, 13)","rgb(212, 107, 8)","rgb(212, 177, 6)","rgb(56, 158, 13)","rgb(8, 151, 156)","rgb(9, 109, 217)","rgb(29, 57, 196)","rgb(83, 29, 171)","rgb(196, 29, 127)","rgb(130, 0, 20)","rgb(135, 20, 0)","rgb(135, 56, 0)","rgb(97, 71, 0)","rgb(19, 82, 0)","rgb(0, 71, 79)","rgb(0, 58, 140)","rgb(6, 17, 120)","rgb(34, 7, 94)","rgb(120, 6, 80)"].map(function(e){return j(e)}));function V(e){var r=j(e);return"w-e-list-color-".concat(function(e){var r,t,n=7;try{for(var o=E(e),i=o.next();!i.done;i=o.next())n=(31*n+(i.value.codePointAt(0)||0))%2147483647}catch(e){r={error:e}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(r)throw r.error}}return n.toString(36)}("color:".concat(r)))}function _(e,r){var t=j(r);return!!t&&(!!P.has(t)||!!function(e,r){for(var t,n=(null===(t=null==e?void 0:e.getConfig().styleClassTokens)||void 0===t?void 0:t.color)||[],o=j(r),i=0;i<n.length;i+=1)if(j(n[i])===o)return!0;return!1}(e,r))}function $(e,r){if(_(e,r))return"class";var o=t(e),i="preserve-data";"fallback-inline"===o&&(i="inline"),"strict"===o&&(i="throw");var a="[wangeditor] Unsupported list color class token color=".concat(r,". policy=").concat(o),l="".concat(r,"|").concat(i);if(B.has(l)||(B.add(l),n(e,{type:"color",value:r,scene:"toHtml",fallback:i,message:a})),"throw"===i)throw new Error(a);return"inline"===i?"inline":"preserve-data"}var X=[],W=null;function G(e){return e.ordered?"ol":"ul"}function U(e,t,n){if("prev"===n&&0===t)return null;if("next"===n&&t===e.children.length-1)return null;var o="prev"===n?t-1:t+1,i=e.children[o];return!r.checkNodeType(i,"list-item")||S(i)?null:i}var Y={type:"list-item",elemToHtml:function(e,t,n){var i="",a="",l=e,u=H(l),c=null==u?null:u.replace("header","h");if(S(l)&&null!=c)return{html:"<".concat(c,">").concat(t,"</").concat(c,">"),prefix:"",suffix:""};null!=c&&(t="<".concat(c,">").concat(t,"</").concat(c,">"));var s=l.level,d=void 0===s?0:s,f=function(e){return e.ordered?"ol":"ul"}(l),v=function(e){var r=e.ordered;if(void 0===r||!r)return"<ul>";var t=[],n=R(e),o=I(e);return"1"!==n&&t.push('type="'.concat(n,'"')),1!==o&&t.push('start="'.concat(o,'"')),null!=H(e)&&t.push('data-w-e-list-mode="standard"'),0===t.length?"<ol>":"<ol ".concat(t.join(" "),">")}(l),p=y.get(e),g=p&&Array.isArray(p.children)?p:null,h=n&&Array.isArray(n.children)?n:null,m=function(r){return!!r&&r.children.indexOf(e)>=0},b=h||g;m(h)?b=h:m(g)&&(b=g);var x=n||p;if(null==b)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};W!==b&&(X.length=0,W=b);var N=b.children.indexOf(e);if(N<0)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};var T=U(b,N,"prev"),E=U(b,N,"next"),M=!!E&&(E.level||0)>d;if(T){var k=T.level||0;if(d>k)for(O=0;O<d-k;O+=1)i+=v,X.push(f);else if(d===k){if(!z(T,l)){var A=X.pop()||G(T);i+="</".concat(A,">").concat(v),X.push(f)}}else{for(var L=k-d;L>0;){A=X.pop()||G(T);i+="</".concat(A,"></li>"),L-=1}var C=function(e,t,n){for(var o=t-1;o>=0;o-=1){var i=e.children[o];if(r.checkNodeType(i,"list-item")&&!S(i)&&(i.level||0)===n)return i}return null}(b,N,d);if(C&&!z(C,l)){A=X.pop()||G(C);i+="</".concat(A,">").concat(v),X.push(f)}}}else{X.length=0;for(var O=0;O<d+1;O+=1)i+=v,X.push(f)}var D=w(e),B=o(x),j="",P="",_="";if(D)if("class"===B){_=' data-w-e-color="'.concat(D,'"');var Y=$(x,D);"class"===Y?P=' class="'.concat(V(D),'"'):"inline"===Y&&(j=' style="color:'.concat(D,'"'))}else j=' style="color:'.concat(D,'"');var F="<li".concat(P).concat(_).concat(j,">").concat(t).concat(M?"":"</li>");if(!E){for(;X.length>0;){var q=X.pop();if(!q)break;a+="</".concat(q,">"),X.length>0&&(a+="</li>")}W=null}return{html:F,prefix:i,suffix:a}}};function F(e,r){var t=function(e,r){var t=D(e,r).split(".").filter(Boolean).pop(),n=Number.parseInt(t||"",10);return Number.isFinite(n)&&n>0?n:1}(r,e.node),n=1===t?"":' start="'.concat(t,'"');return"<ol".concat(n,' data-w-e-list-mode="outline">')}function q(e,r){var t=function(e,r){var t=w(e);if(!t)return[];if("class"!==o(r))return['style="color:'.concat(t,'"')];var n=['data-w-e-color="'.concat(t,'"')],i=$(r,t);return"class"===i?n.unshift('class="'.concat(V(t),'"')):"inline"===i&&n.push('style="color:'.concat(t,'"')),n}(e,r);return t.push('data-w-e-list-indent="'.concat(O(e)-1,'"')),"number"==typeof e.listRestart&&t.push('data-w-e-list-restart="'.concat(e.listRestart,'"')),t.push('data-w-e-outline-number="'.concat(D(r,e),'"')),"<li ".concat(t.join(" "),">")}function J(e,r){var t=e.items.map(function(e){var t=e.children.map(function(e){return J(e,r)}).join("");return"".concat(q(e.node,r)).concat(e.html).concat(t,"</li>")}).join("");return"".concat(F(e,r)).concat(t,"</ol>")}var K='<svg viewBox="0 0 1024 1024"><path d="M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z"></path></svg>';function Q(e){return null==e.selection?[]:Array.from(c.nodes(e,{at:e.selection,match:function(r){return d.isElement(r)&&c.isBlock(e,r)},mode:"highest"})).filter(function(e){return 1===M(e,2)[1].length})}function Z(e){return Number.parseInt(e.slice(6),10)-1}var ee=function(){function e(){this.type="list-item",this.tag="button"}return e.prototype.isTargetListNode=function(e){return!(!A(e)||Boolean(e.ordered)!==this.ordered)&&(!this.ordered||R(e)===(this.orderType||"1"))},e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){var r=this,t=Q(e);return t.length>0&&t.every(function(e){var t=M(e,1)[0];return r.isTargetListNode(t)})},e.prototype.isDisabled=function(e){var r=Q(e);return 0===r.length||r.some(function(r){var t=M(r,1)[0];return!function(e,r){return!c.isVoid(e,r)&&!["pre","code","table","table-row","table-cell"].includes(r.type)}(e,t)})},e.prototype.exec=function(e,r){var t=this,n=this.isActive(e),o=Q(e);0!==o.length&&c.withoutNormalizing(e,function(){o.forEach(function(r){var o=M(r,2),i=o[0],a=o[1];if(n){var l=H(i);s.setNodes(e,{type:l||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:a})}else{var u=function(e){return A(e)?H(e):L(e.type)?e.type:null}(i),c=t.ordered&&null==t.orderType&&null!=u;s.setNodes(e,{type:"list-item",ordered:t.ordered,level:c?Z(u):C(i),start:void 0,orderType:t.ordered?t.orderType:void 0,headingType:c?u:void 0,listMode:c?"outline":void 0,listRestart:void 0},{at:a})}})})},e}(),re=function(e){function r(){var r=e.apply(this,k([],M(arguments),!1))||this;return r.ordered=!1,r.title=i("listModule.unOrderedList"),r.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z"></path></svg>',r}return N(r,e),r}(ee),te=function(e){function r(){var r=e.apply(this,k([],M(arguments),!1))||this;return r.ordered=!0,r.orderType="a",r.title=i("listModule.lowerAlphaList"),r.iconSvg=K,r}return N(r,e),r}(ee),ne=function(e){function r(){var r=e.apply(this,k([],M(arguments),!1))||this;return r.ordered=!0,r.title=i("listModule.orderedList"),r.iconSvg=K,r}return N(r,e),r}(ee),oe={key:"bulletedList",factory:function(){return new re}},ie={key:"numberedList",factory:function(){return new ne}},ae={key:"numberedListLowerAlpha",factory:function(){return new te}};function le(e){return e.length?e[0].tagName.toLowerCase():""}function ue(e){return"ol"===le(e.parent())}function ce(e){var r=e.parent();if("ol"===le(r)){var t=(r.attr("start")||"").trim(),n=Number.parseInt(t,10);return Number.isNaN(n)?void 0:n}}function se(e){var r=function(e){var r=(e.attr("data-w-e-list-restart")||"").trim();if(/^\d+$/.test(r)){var t=Number.parseInt(r,10);return t>0?t:void 0}}(e);return void 0!==r?r:null==e.attr("data-w-e-outline-number")&&function(e){for(var r,t=null===(r=e[0])||void 0===r?void 0:r.previousElementSibling;null!=t;){if("li"===t.tagName.toLowerCase())return!1;t=t.previousElementSibling}return!0}(e)?ce(e):void 0}function de(e){return l.isText(e)&&""===e.text.trim()}function fe(e,r,t){r.forEach(function(r){de(r)||(l.isText(r)||t.isInline(r)?e.push(r):d.isElement(r)&&fe(e,r.children,t))})}g&&(p.fn.append=g),h&&(p.fn.attr=h),m&&(p.fn.parent=m);var ve={selector:"li:not([data-w-e-type])",parseElemHtml:function(e,r,t){var n=p(e),o=function(e){var r=(e.attr("data-w-e-list-indent")||"").trim();if(/^\d+$/.test(r))return Number.parseInt(r,10);for(var t=0,n=e.parent();n.length>0;){var o=le(n);"ul"!==o&&"ol"!==o||(t+=1),n=n.parent()}return Math.max(0,t-1)}(n),i=[],a=[];r.forEach(function(e){de(e)||(A(e)&&e.level>o?a.push(e):i.push(e))});var l=function(e){var r,t;try{for(var n=E(e),o=n.next();!o.done;o=n.next()){var i=o.value;if(d.isElement(i)&&L(i.type))return i}}catch(e){r={error:e}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(r)throw r.error}}return null}(i),u=null!=l&&L(l.type)?l.type:void 0,c=function(e,r){var t=e.parent().attr("data-w-e-list-mode");return"outline"===t||"standard"===t?t:ue(e)&&r.some(function(e){return d.isElement(e)&&L(e.type)})?"outline":"standard"}(n,i),s=[];fe(s,i,t),0===s.length&&s.push(a.length>0?{text:""}:{text:n.text().replace(/\s+/gm," ")});var f=ue(n),v=ce(n),g=function(e){var r=e.parent();if("ol"===le(r)){var t=(r.attr("type")||"").trim();return"1"===t||"a"===t||"A"===t||"i"===t||"I"===t?t:void 0}}(n),h=f&&"outline"===c&&void 0!==u,m=h?se(n):void 0,b=T(T(T(T(T(T({type:"list-item",ordered:f,level:h?Number.parseInt(u.slice(6),10)-1:o},void 0===v||h?{}:{start:v}),void 0!==g?{orderType:g}:{}),void 0!==u?{headingType:u}:{}),h?{listMode:"outline"}:{}),void 0!==m?{listRestart:m}:{}),{children:s});return 0===a.length?b:k([b],M(a),!1)}};var pe={selector:"ul:not([data-w-e-type]),ol:not([data-w-e-type])",parseElemHtml:function(e,r,t){return r.flat(1/0)}};function ge(e){var r=M(c.nodes(e,{at:e.selection||void 0,match:A,universal:!0}),1)[0];return null==r?null:r}function he(e,r,t,n){s.setNodes(e,{type:n||H(t)||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:r})}var me=new WeakMap;function be(e,r,t){var n=e.children.indexOf(r);n<0||s.setNodes(e,{listRestart:t},{at:[n]})}function ye(e){var r=me.get(e);null!=r&&(r.dispose(),me.delete(e))}function we(e,r,t){var n=e.createElement("button");return n.type="button",n.className="w-e-list-outline-action",n.textContent=r,n.addEventListener("mousedown",function(e){return e.preventDefault()}),n.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t()}),n}function xe(e,t,n){if(!e.isDisabled()){ye(e);var o=n.ownerDocument,l=o.createElement("div");l.className="w-e-list-outline-actions",l.setAttribute("role","menu"),l.addEventListener("mousedown",function(e){return e.preventDefault()}),l.append(we(o,i("listModule.continueNumbering"),function(){!function(e,r){be(e,r)}(e,t),ye(e)}),we(o,i("listModule.restartNumbering"),function(){!function(e,r){be(e,r,1)}(e,t),ye(e)}));var u=r.getTextarea(e),c=u.$textAreaContainer[0],s=u.$scroll[0],d=n.getBoundingClientRect(),f=c.getBoundingClientRect();l.style.top="".concat(d.bottom-f.top+s.scrollTop+4,"px"),l.style.left="".concat(d.left-f.left+s.scrollLeft,"px"),c.append(l);var v=function(r){var t=r.target;t instanceof Node&&(l.contains(t)||n.contains(t)||ye(e))},p=function(){return ye(e)},g=function(){return ye(e)};o.addEventListener("mousedown",v,!0),e.on(a.CHANGE,p),e.on(a.DESTROYED,g),me.set(e,{elem:l,dispose:function(){o.removeEventListener("mousedown",v,!0),e.off(a.CHANGE,p),e.off(a.DESTROYED,g),l.remove()}})}}function Ne(e,r){if(void 0===r&&(r=!1),e<=0)return String(e);for(var t=e,n="";t>0;){var o=(r?65:97)+(t-1)%26;n=String.fromCharCode(o)+n,t=Math.floor((t-1)/26)}return n}function Te(e,r){var t,n;if(void 0===r&&(r=!1),e<=0||e>=4e3)return String(e);var o=e,i="";try{for(var a=E([[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]]),l=a.next();!l.done;l=a.next())for(var u=M(l.value,2),c=u[0],s=u[1];o>=c;)i+=s,o-=c}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return r?i:i.toLowerCase()}var Ee={renderElems:[{type:"list-item",renderElem:function(e,t,n){y.set(e,n);var o=e,a=S(o),l=C(o),u={margin:"5px 0 5px ".concat(20*l,"px"),display:"flex",alignItems:"baseline"},c=w(o),s="";s=a?D(n,o):o.ordered?function(e,r){switch(r){case"a":return"".concat(Ne(e),".");case"A":return"".concat(Ne(e,!0),".");case"i":return"".concat(Te(e),".");case"I":return"".concat(Te(e,!0),".");default:return"".concat(e,".")}}(function(e,t){if(!t.ordered)return 1;var n=C(t),o=I(t),i=r.findPath(e,t)[0];if(i<=0)return o;for(var a=i-1;a>=0;a-=1){var l=e.children[a];if(!A(l))break;var u=C(l);if(u<n)break;if(u===n){if(!z(l,t)||S(l))break;o+=1}}return o}(n,o),R(o)):function(e){switch(void 0===e&&(e=0),e){case 0:return"•";case 1:return"◦";default:return"▪"}}(l);var d={marginRight:"0.5em",color:c},f=a?b("button",{type:"button",className:"w-e-list-marker",contentEditable:!1,"data-w-e-reserve":!0,"aria-label":i("listModule.numberingActions"),title:i("listModule.numberingActions"),style:d,on:{mousedown:function(e){return e.preventDefault()},click:function(e){e.preventDefault(),e.stopPropagation(),e.currentTarget instanceof HTMLElement&&xe(n,o,e.currentTarget)}}},s):b("span",{className:"w-e-list-marker",contentEditable:!1,style:d,"data-w-e-reserve":!0},s),v=H(o),p=null==v?"span":v.replace("header","h");return b("div",{className:"w-e-list-item",style:u},f,b(p,{style:{flex:"1",minWidth:"0",wordBreak:"break-word"}},t))}}],editorPlugin:function(e){var t=e.deleteBackward,n=e.handleTab,o=e.normalizeNode,i=e.insertBreak,a=e;return a.insertBreak=function(){var e=ge(a);if(null==e)return i();var r=M(e,2),t=r[0],n=r[1];if(""!==f.string(t))return i();he(a,n,t,"paragraph")},a.deleteBackward=function(n){var o=a.selection;if(null==o||v.isExpanded(o))t(n);else{var i=ge(a);if(null!=i&&0===o.focus.offset){var l=M(i,2),d=l[0],f=l[1];if(S(d))he(a,f,d);else{var p=C(d);if(p<=0)he(a,f,d);else{var g=function(e,t,n){for(var o=void 0!==n?n:t.level||0,i=r.findPath(e,t);;){if(0===i.length||0===i[i.length-1])return null;i=u.previous(i);var a=c.node(e,i);if(null==a||!A(a[0]))return null;if(C(a[0])===o)return a[0]}}(e,d,p-1);null!=g?s.setNodes(a,{level:p-1,ordered:g.ordered,start:g.ordered?g.start:void 0,orderType:g.ordered?g.orderType:void 0},{at:f}):s.setNodes(a,{level:p-1},{at:f})}}}else t(n)}},a.handleTab=function(){var e=a.selection;if(null!=e)if(v.isCollapsed(e)){var r=ge(a);if(null==r||S(r[0])||0!==e.focus.offset)return void n();var t=M(r,2),o=t[0],i=t[1];s.setNodes(a,{level:C(o)+1},{at:i})}else{var l=function(e){return Array.from(c.nodes(e,{at:e.selection||void 0,match:function(r){return d.isElement(r)&&c.isBlock(e,r)},mode:"highest"})).filter(function(e){return 1===M(e,2)[1].length})}(a),u=l.filter(function(e){var r=M(e,1)[0];return A(r)&&!S(r)});u.length!==l.length||u.length<=1?n():u.forEach(function(e){var r=M(e,2),t=r[0],n=r[1];s.setNodes(a,{level:C(t)+1},{at:n})})}else n()},a.normalizeNode=function(e){var t=M(e,2),n=t[0],i=t[1],l=r.getNodeType(n);return"bulleted-list"!==l&&"numbered-list"!==l||s.unwrapNodes(a,{at:i}),o([n,i])},a},menus:[oe,ie,ae],htmlTransform:function(e,r,t){var n=[],o=null,i=function(){null!=o&&0!==o.roots.length&&(n.push(o.roots.map(function(e){return J(e,t)}).join("")),o=null)};return r.forEach(function(r,t){var a=e[t]||"";if(S(r))return null==o&&(o={roots:[],levels:[]}),void function(e,r,t,n){var o,i=Math.max(0,O(t)-1);i>r.length&&(i=r.length),r.length=i+1;var a,l=i>0?null===(o=r[i-1])||void 0===o?void 0:o.lastItem:null,u=r[i],c="number"==typeof t.listRestart;null==u||!z(u.container.node,t)||c?(a={node:t,items:[]},null!=l?l.children.push(a):e.push(a)):a=u.container;var s={node:t,html:n,children:[]};a.items.push(s),r[i]={container:a,lastItem:s}}(o.roots,o.levels,r,a);i(),n.push(a)}),i(),n},elemsToHtml:[Y],parseElemsHtml:[pe,ve]};export{Ee as default};
1
+ import{i18nAddResources as e,DomEditor as r,getClassStylePolicy as t,reportUnsupportedClassStyle as n,getTextStyleMode as o,t as i,EditorEvents as a}from"@wangeditor-next/core";import{Text as l,Path as u,Editor as c,Transforms as s,Element as d,Node as f,Range as v}from"slate";import p,{append as g,attr as h,parent as m}from"dom7";import{jsx as b}from"snabbdom";e("en",{listModule:{unOrderedList:"Unordered list",orderedList:"Ordered list",lowerAlphaList:"Ordered list (a,b,c)",numberingActions:"Heading numbering actions",continueNumbering:"Continue heading numbering",restartNumbering:"Restart numbering"}}),e("zh-CN",{listModule:{unOrderedList:"无序列表",orderedList:"有序列表",lowerAlphaList:"有序列表(a,b,c)",numberingActions:"标题编号操作",continueNumbering:"继续标题编号",restartNumbering:"重新开始编号"}});var y=new WeakMap;function w(e){var r,t=e.children||[],n=t.length;if(0===n)return"";for(var o=0;o<n&&!r;o+=1){var i=t[o];l.isText(i)&&(r=i)}return null==r?"":r.color||""}var N=function(e,r){return N=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])},N(e,r)};function x(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function t(){this.constructor=e}N(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}var T=function(){return T=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},T.apply(this,arguments)};function E(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function M(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,i=t.call(e),a=[];try{for(;(void 0===r||r-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}function L(e,r,t){if(t||2===arguments.length)for(var n,o=0,i=r.length;o<i;o++)!n&&o in r||(n||(n=Array.prototype.slice.call(r,0,o)),n[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}function k(e){return r.checkNodeType(e,"list-item")}function A(e){return"string"==typeof e&&/^header[1-6]$/.test(e)}function H(e){return k(e)&&A(e.headingType)?e.headingType:null}function C(e){return k(e)&&e.level>0?Math.floor(e.level):0}function S(e){return k(e)&&!0===e.ordered&&"outline"===e.listMode&&A(e.headingType)}function O(e){var r=H(e),t=null==r?null:/^header([1-6])$/.exec(r);return null!=t?Number.parseInt(t[1],10):C(e)+1}function I(e){var r=e.ordered,t=void 0!==r&&r,n=e.start;return!t||"number"!=typeof n||Number.isNaN(n)?1:n}function R(e){var r=e.orderType;return"a"===r||"A"===r||"i"===r||"I"===r?r:"1"}function z(e,r){return e.ordered===r.ordered&&(!e.ordered||R(e)===R(r)&&I(e)===I(r))}function D(e,r){var t,n,o=Array.from({length:6},function(){return 0});try{for(var i=E(e.children),a=i.next();!a.done;a=i.next()){var l=a.value;if(S(l)){for(var u=O(l),c=u-1,s=0;s<c;s+=1)0===o[s]&&(o[s]=1);"number"==typeof l.listRestart&&l.listRestart>0?o[c]=Math.floor(l.listRestart):0===o[c]?o[c]=1:o[c]+=1;for(var d=c+1;d<o.length;d+=1)o[d]=0;if(l===r){var f=o.slice(0,u).join(".");return 1===u?"".concat(f,"."):f}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return""}"function"==typeof SuppressedError&&SuppressedError;var B=new Set;function j(e){return(e||"").trim().replace(/\s+/g,"").toLowerCase()}var P=new Set(["rgb(0, 0, 0)","rgb(38, 38, 38)","rgb(89, 89, 89)","rgb(140, 140, 140)","rgb(191, 191, 191)","rgb(217, 217, 217)","rgb(233, 233, 233)","rgb(245, 245, 245)","rgb(250, 250, 250)","rgb(255, 255, 255)","rgb(225, 60, 57)","rgb(231, 95, 51)","rgb(235, 144, 58)","rgb(245, 219, 77)","rgb(114, 192, 64)","rgb(89, 191, 192)","rgb(66, 144, 247)","rgb(54, 88, 226)","rgb(106, 57, 201)","rgb(216, 68, 147)","rgb(251, 233, 230)","rgb(252, 237, 225)","rgb(252, 239, 212)","rgb(252, 251, 207)","rgb(231, 246, 213)","rgb(218, 244, 240)","rgb(217, 237, 250)","rgb(224, 232, 250)","rgb(237, 225, 248)","rgb(246, 226, 234)","rgb(255, 163, 158)","rgb(255, 187, 150)","rgb(255, 213, 145)","rgb(255, 251, 143)","rgb(183, 235, 143)","rgb(135, 232, 222)","rgb(145, 213, 255)","rgb(173, 198, 255)","rgb(211, 173, 247)","rgb(255, 173, 210)","rgb(255, 77, 79)","rgb(255, 122, 69)","rgb(255, 169, 64)","rgb(255, 236, 61)","rgb(115, 209, 61)","rgb(54, 207, 201)","rgb(64, 169, 255)","rgb(89, 126, 247)","rgb(146, 84, 222)","rgb(247, 89, 171)","rgb(207, 19, 34)","rgb(212, 56, 13)","rgb(212, 107, 8)","rgb(212, 177, 6)","rgb(56, 158, 13)","rgb(8, 151, 156)","rgb(9, 109, 217)","rgb(29, 57, 196)","rgb(83, 29, 171)","rgb(196, 29, 127)","rgb(130, 0, 20)","rgb(135, 20, 0)","rgb(135, 56, 0)","rgb(97, 71, 0)","rgb(19, 82, 0)","rgb(0, 71, 79)","rgb(0, 58, 140)","rgb(6, 17, 120)","rgb(34, 7, 94)","rgb(120, 6, 80)"].map(function(e){return j(e)}));function _(e){var r=j(e);return"w-e-list-color-".concat(function(e){var r,t,n=7;try{for(var o=E(e),i=o.next();!i.done;i=o.next())n=(31*n+(i.value.codePointAt(0)||0))%2147483647}catch(e){r={error:e}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(r)throw r.error}}return n.toString(36)}("color:".concat(r)))}function V(e,r){var t=j(r);return!!t&&(!!P.has(t)||!!function(e,r){for(var t,n=(null===(t=null==e?void 0:e.getConfig().styleClassTokens)||void 0===t?void 0:t.color)||[],o=j(r),i=0;i<n.length;i+=1)if(j(n[i])===o)return!0;return!1}(e,r))}function $(e,r){if(V(e,r))return"class";var o=t(e),i="preserve-data";"fallback-inline"===o&&(i="inline"),"strict"===o&&(i="throw");var a="[wangeditor] Unsupported list color class token color=".concat(r,". policy=").concat(o),l="".concat(r,"|").concat(i);if(B.has(l)||(B.add(l),n(e,{type:"color",value:r,scene:"toHtml",fallback:i,message:a})),"throw"===i)throw new Error(a);return"inline"===i?"inline":"preserve-data"}var X=[],W=null;function G(e){return e.ordered?"ol":"ul"}function U(e,t,n){if("prev"===n&&0===t)return null;if("next"===n&&t===e.children.length-1)return null;var o="prev"===n?t-1:t+1,i=e.children[o];return!r.checkNodeType(i,"list-item")||S(i)?null:i}var Y={type:"list-item",elemToHtml:function(e,t,n){var i="",a="",l=e,u=H(l),c=null==u?null:u.replace("header","h");if(S(l)&&null!=c)return{html:"<".concat(c,">").concat(t,"</").concat(c,">"),prefix:"",suffix:""};null!=c&&(t="<".concat(c,">").concat(t,"</").concat(c,">"));var s=l.level,d=void 0===s?0:s,f=function(e){return e.ordered?"ol":"ul"}(l),v=function(e){var r=e.ordered;if(void 0===r||!r)return"<ul>";var t=[],n=R(e),o=I(e);return"1"!==n&&t.push('type="'.concat(n,'"')),1!==o&&t.push('start="'.concat(o,'"')),null!=H(e)&&t.push('data-w-e-list-mode="standard"'),0===t.length?"<ol>":"<ol ".concat(t.join(" "),">")}(l),p=y.get(e),g=p&&Array.isArray(p.children)?p:null,h=n&&Array.isArray(n.children)?n:null,m=function(r){return!!r&&r.children.indexOf(e)>=0},b=h||g;m(h)?b=h:m(g)&&(b=g);var N=n||p;if(null==b)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};W!==b&&(X.length=0,W=b);var x=b.children.indexOf(e);if(x<0)return{html:"<li>".concat(t,"</li>"),prefix:"",suffix:""};var T=U(b,x,"prev"),E=U(b,x,"next"),M=!!E&&(E.level||0)>d;if(T){var L=T.level||0;if(d>L)for(O=0;O<d-L;O+=1)i+=v,X.push(f);else if(d===L){if(!z(T,l)){var k=X.pop()||G(T);i+="</".concat(k,">").concat(v),X.push(f)}}else{for(var A=L-d;A>0;){k=X.pop()||G(T);i+="</".concat(k,"></li>"),A-=1}var C=function(e,t,n){for(var o=t-1;o>=0;o-=1){var i=e.children[o];if(r.checkNodeType(i,"list-item")&&!S(i)&&(i.level||0)===n)return i}return null}(b,x,d);if(C&&!z(C,l)){k=X.pop()||G(C);i+="</".concat(k,">").concat(v),X.push(f)}}}else{X.length=0;for(var O=0;O<d+1;O+=1)i+=v,X.push(f)}var D=w(e),B=o(N),j="",P="",V="";if(D)if("class"===B){V=' data-w-e-color="'.concat(D,'"');var Y=$(N,D);"class"===Y?P=' class="'.concat(_(D),'"'):"inline"===Y&&(j=' style="color:'.concat(D,'"'))}else j=' style="color:'.concat(D,'"');var F="<li".concat(P).concat(V).concat(j,">").concat(t).concat(M?"":"</li>");if(!E){for(;X.length>0;){var q=X.pop();if(!q)break;a+="</".concat(q,">"),X.length>0&&(a+="</li>")}W=null}return{html:F,prefix:i,suffix:a}}};function F(e,r){var t=function(e,r){var t=D(e,r).split(".").filter(Boolean).pop(),n=Number.parseInt(t||"",10);return Number.isFinite(n)&&n>0?n:1}(r,e.node),n=1===t?"":' start="'.concat(t,'"');return"<ol".concat(n,' data-w-e-list-mode="outline">')}function q(e,r){var t=function(e,r){var t=w(e);if(!t)return[];if("class"!==o(r))return['style="color:'.concat(t,'"')];var n=['data-w-e-color="'.concat(t,'"')],i=$(r,t);return"class"===i?n.unshift('class="'.concat(_(t),'"')):"inline"===i&&n.push('style="color:'.concat(t,'"')),n}(e,r);return t.push('data-w-e-list-indent="'.concat(O(e)-1,'"')),"number"==typeof e.listRestart&&t.push('data-w-e-list-restart="'.concat(e.listRestart,'"')),t.push('data-w-e-outline-number="'.concat(D(r,e),'"')),"<li ".concat(t.join(" "),">")}function J(e,r){var t=e.items.map(function(e){var t=e.children.map(function(e){return J(e,r)}).join("");return"".concat(q(e.node,r)).concat(e.html).concat(t,"</li>")}).join("");return"".concat(F(e,r)).concat(t,"</ol>")}var K='<svg viewBox="0 0 1024 1024"><path d="M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z"></path></svg>';function Q(e){return null==e.selection?[]:Array.from(c.nodes(e,{at:e.selection,match:function(r){return d.isElement(r)&&c.isBlock(e,r)},mode:"highest"})).filter(function(e){return 1===M(e,2)[1].length})}function Z(e){return Number.parseInt(e.slice(6),10)-1}var ee=function(){function e(){this.type="list-item",this.tag="button"}return e.prototype.isTargetListNode=function(e){return!(!k(e)||Boolean(e.ordered)!==this.ordered)&&(!this.ordered||R(e)===(this.orderType||"1"))},e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){var r=this,t=Q(e);return t.length>0&&t.every(function(e){var t=M(e,1)[0];return r.isTargetListNode(t)})},e.prototype.isDisabled=function(e){var r=Q(e);return 0===r.length||r.some(function(r){var t=M(r,1)[0];return!function(e,r){return!c.isVoid(e,r)&&!["pre","code","table","table-row","table-cell"].includes(r.type)}(e,t)})},e.prototype.exec=function(e,r){var t=this,n=this.isActive(e),o=Q(e);0!==o.length&&c.withoutNormalizing(e,function(){o.forEach(function(r){var o=M(r,2),i=o[0],a=o[1];if(n){var l=H(i);s.setNodes(e,{type:l||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:a})}else{var u=function(e){return k(e)?H(e):A(e.type)?e.type:null}(i),c=t.ordered&&null==t.orderType&&null!=u;s.setNodes(e,{type:"list-item",ordered:t.ordered,level:c?Z(u):C(i),start:void 0,orderType:t.ordered?t.orderType:void 0,headingType:c?u:void 0,listMode:c?"outline":void 0,listRestart:void 0},{at:a})}})})},e}(),re=function(e){function r(){var r=e.apply(this,L([],M(arguments),!1))||this;return r.ordered=!1,r.title=i("listModule.unOrderedList"),r.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z"></path></svg>',r}return x(r,e),r}(ee),te=function(e){function r(){var r=e.apply(this,L([],M(arguments),!1))||this;return r.ordered=!0,r.orderType="a",r.title=i("listModule.lowerAlphaList"),r.iconSvg=K,r}return x(r,e),r}(ee),ne=function(e){function r(){var r=e.apply(this,L([],M(arguments),!1))||this;return r.ordered=!0,r.title=i("listModule.orderedList"),r.iconSvg=K,r}return x(r,e),r}(ee),oe={key:"bulletedList",factory:function(){return new re}},ie={key:"numberedList",factory:function(){return new ne}},ae={key:"numberedListLowerAlpha",factory:function(){return new te}},le=globalThis.Node;function ue(e){if(0===e.length)return"";var r=e[0];return r.nodeType!==le.ELEMENT_NODE?"":r.tagName.toLowerCase()}function ce(e){return"ol"===ue(e.parent())}function se(e){var r=e.parent();if("ol"===ue(r)){var t=(r.attr("start")||"").trim(),n=Number.parseInt(t,10);return Number.isNaN(n)?void 0:n}}function de(e){var r=function(e){var r=(e.attr("data-w-e-list-restart")||"").trim();if(/^\d+$/.test(r)){var t=Number.parseInt(r,10);return t>0?t:void 0}}(e);return void 0!==r?r:null==e.attr("data-w-e-outline-number")&&function(e){for(var r,t=null===(r=e[0])||void 0===r?void 0:r.previousElementSibling;null!=t;){if("li"===t.tagName.toLowerCase())return!1;t=t.previousElementSibling}return!0}(e)?se(e):void 0}function fe(e){return l.isText(e)&&""===e.text.trim()}function ve(e,r,t){r.forEach(function(r){fe(r)||(l.isText(r)||t.isInline(r)?e.push(r):d.isElement(r)&&ve(e,r.children,t))})}g&&(p.fn.append=g),h&&(p.fn.attr=h),m&&(p.fn.parent=m);var pe={selector:"li:not([data-w-e-type])",parseElemHtml:function(e,r,t){var n=p(e),o=function(e){var r=(e.attr("data-w-e-list-indent")||"").trim();if(/^\d+$/.test(r))return Number.parseInt(r,10);for(var t=0,n=e.parent();n.length>0;){var o=ue(n);"ul"!==o&&"ol"!==o||(t+=1),n=n.parent()}return Math.max(0,t-1)}(n),i=[],a=[];r.forEach(function(e){fe(e)||(k(e)&&e.level>o?a.push(e):i.push(e))});var l=function(e){var r,t;try{for(var n=E(e),o=n.next();!o.done;o=n.next()){var i=o.value;if(d.isElement(i)&&A(i.type))return i}}catch(e){r={error:e}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(r)throw r.error}}return null}(i),u=null!=l&&A(l.type)?l.type:void 0,c=function(e,r){var t=e.parent().attr("data-w-e-list-mode");return"outline"===t||"standard"===t?t:ce(e)&&r.some(function(e){return d.isElement(e)&&A(e.type)})?"outline":"standard"}(n,i),s=[];ve(s,i,t),0===s.length&&s.push(a.length>0?{text:""}:{text:n.text().replace(/\s+/gm," ")});var f=ce(n),v=se(n),g=function(e){var r=e.parent();if("ol"===ue(r)){var t=(r.attr("type")||"").trim();return"1"===t||"a"===t||"A"===t||"i"===t||"I"===t?t:void 0}}(n),h=f&&"outline"===c&&void 0!==u,m=h?de(n):void 0,b=T(T(T(T(T(T({type:"list-item",ordered:f,level:h?Number.parseInt(u.slice(6),10)-1:o},void 0===v||h?{}:{start:v}),void 0!==g?{orderType:g}:{}),void 0!==u?{headingType:u}:{}),h?{listMode:"outline"}:{}),void 0!==m?{listRestart:m}:{}),{children:s});return 0===a.length?b:L([b],M(a),!1)}};var ge={selector:"ul:not([data-w-e-type]),ol:not([data-w-e-type])",parseElemHtml:function(e,r,t){return r.flat(1/0)}};function he(e){var r=M(c.nodes(e,{at:e.selection||void 0,match:k,universal:!0}),1)[0];return null==r?null:r}function me(e,r,t,n){s.setNodes(e,{type:n||H(t)||"paragraph",ordered:void 0,level:void 0,start:void 0,orderType:void 0,headingType:void 0,listMode:void 0,listRestart:void 0},{at:r})}var be=new WeakMap;function ye(e,r,t){var n=e.children.indexOf(r);n<0||s.setNodes(e,{listRestart:t},{at:[n]})}function we(e){var r=be.get(e);null!=r&&(r.dispose(),be.delete(e))}function Ne(e,r,t){var n=e.createElement("button");return n.type="button",n.className="w-e-list-outline-action",n.textContent=r,n.addEventListener("mousedown",function(e){return e.preventDefault()}),n.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t()}),n}function xe(e,t,n){if(!e.isDisabled()){we(e);var o=n.ownerDocument,l=o.createElement("div");l.className="w-e-list-outline-actions",l.setAttribute("role","menu"),l.addEventListener("mousedown",function(e){return e.preventDefault()}),l.append(Ne(o,i("listModule.continueNumbering"),function(){!function(e,r){ye(e,r)}(e,t),we(e)}),Ne(o,i("listModule.restartNumbering"),function(){!function(e,r){ye(e,r,1)}(e,t),we(e)}));var u=r.getTextarea(e),c=u.$textAreaContainer[0],s=u.$scroll[0],d=n.getBoundingClientRect(),f=c.getBoundingClientRect();l.style.top="".concat(d.bottom-f.top+s.scrollTop+4,"px"),l.style.left="".concat(d.left-f.left+s.scrollLeft,"px"),c.append(l);var v=function(r){var t=r.target;t instanceof Node&&(l.contains(t)||n.contains(t)||we(e))},p=function(){return we(e)},g=function(){return we(e)};o.addEventListener("mousedown",v,!0),e.on(a.CHANGE,p),e.on(a.DESTROYED,g),be.set(e,{elem:l,dispose:function(){o.removeEventListener("mousedown",v,!0),e.off(a.CHANGE,p),e.off(a.DESTROYED,g),l.remove()}})}}function Te(e,r){if(void 0===r&&(r=!1),e<=0)return String(e);for(var t=e,n="";t>0;){var o=(r?65:97)+(t-1)%26;n=String.fromCharCode(o)+n,t=Math.floor((t-1)/26)}return n}function Ee(e,r){var t,n;if(void 0===r&&(r=!1),e<=0||e>=4e3)return String(e);var o=e,i="";try{for(var a=E([[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]]),l=a.next();!l.done;l=a.next())for(var u=M(l.value,2),c=u[0],s=u[1];o>=c;)i+=s,o-=c}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return r?i:i.toLowerCase()}var Me={renderElems:[{type:"list-item",renderElem:function(e,t,n){y.set(e,n);var o=e,a=S(o),l=C(o),u={margin:"5px 0 5px ".concat(20*l,"px"),display:"flex",alignItems:"baseline"},c=w(o),s="";s=a?D(n,o):o.ordered?function(e,r){switch(r){case"a":return"".concat(Te(e),".");case"A":return"".concat(Te(e,!0),".");case"i":return"".concat(Ee(e),".");case"I":return"".concat(Ee(e,!0),".");default:return"".concat(e,".")}}(function(e,t){if(!t.ordered)return 1;var n=C(t),o=I(t),i=r.findPath(e,t)[0];if(i<=0)return o;for(var a=i-1;a>=0;a-=1){var l=e.children[a];if(!k(l))break;var u=C(l);if(u<n)break;if(u===n){if(!z(l,t)||S(l))break;o+=1}}return o}(n,o),R(o)):function(e){switch(void 0===e&&(e=0),e){case 0:return"•";case 1:return"◦";default:return"▪"}}(l);var d={marginRight:"0.5em",color:c},f=a?b("button",{type:"button",className:"w-e-list-marker",contentEditable:!1,"data-w-e-reserve":!0,"aria-label":i("listModule.numberingActions"),title:i("listModule.numberingActions"),style:d,on:{mousedown:function(e){return e.preventDefault()},click:function(e){e.preventDefault(),e.stopPropagation(),e.currentTarget instanceof HTMLElement&&xe(n,o,e.currentTarget)}}},s):b("span",{className:"w-e-list-marker",contentEditable:!1,style:d,"data-w-e-reserve":!0},s),v=H(o),p=null==v?"span":v.replace("header","h");return b("div",{className:"w-e-list-item",style:u},f,b(p,{style:{flex:"1",minWidth:"0",wordBreak:"break-word"}},t))}}],editorPlugin:function(e){var t=e.deleteBackward,n=e.handleTab,o=e.normalizeNode,i=e.insertBreak,a=e;return a.insertBreak=function(){var e=he(a);if(null==e)return i();var r=M(e,2),t=r[0],n=r[1];if(""!==f.string(t))return i();me(a,n,t,"paragraph")},a.deleteBackward=function(n){var o=a.selection;if(null==o||v.isExpanded(o))t(n);else{var i=he(a);if(null!=i&&0===o.focus.offset){var l=M(i,2),d=l[0],f=l[1];if(S(d))me(a,f,d);else{var p=C(d);if(p<=0)me(a,f,d);else{var g=function(e,t,n){for(var o=void 0!==n?n:t.level||0,i=r.findPath(e,t);;){if(0===i.length||0===i[i.length-1])return null;i=u.previous(i);var a=c.node(e,i);if(null==a||!k(a[0]))return null;if(C(a[0])===o)return a[0]}}(e,d,p-1);null!=g?s.setNodes(a,{level:p-1,ordered:g.ordered,start:g.ordered?g.start:void 0,orderType:g.ordered?g.orderType:void 0},{at:f}):s.setNodes(a,{level:p-1},{at:f})}}}else t(n)}},a.handleTab=function(){var e=a.selection;if(null!=e)if(v.isCollapsed(e)){var r=he(a);if(null==r||S(r[0])||0!==e.focus.offset)return void n();var t=M(r,2),o=t[0],i=t[1];s.setNodes(a,{level:C(o)+1},{at:i})}else{var l=function(e){return Array.from(c.nodes(e,{at:e.selection||void 0,match:function(r){return d.isElement(r)&&c.isBlock(e,r)},mode:"highest"})).filter(function(e){return 1===M(e,2)[1].length})}(a),u=l.filter(function(e){var r=M(e,1)[0];return k(r)&&!S(r)});u.length!==l.length||u.length<=1?n():u.forEach(function(e){var r=M(e,2),t=r[0],n=r[1];s.setNodes(a,{level:C(t)+1},{at:n})})}else n()},a.normalizeNode=function(e){var t=M(e,2),n=t[0],i=t[1],l=r.getNodeType(n);return"bulleted-list"!==l&&"numbered-list"!==l||s.unwrapNodes(a,{at:i}),o([n,i])},a},menus:[oe,ie,ae],htmlTransform:function(e,r,t){var n=[],o=null,i=function(){null!=o&&0!==o.roots.length&&(n.push(o.roots.map(function(e){return J(e,t)}).join("")),o=null)};return r.forEach(function(r,t){var a=e[t]||"";if(S(r))return null==o&&(o={roots:[],levels:[]}),void function(e,r,t,n){var o,i=Math.max(0,O(t)-1);i>r.length&&(i=r.length),r.length=i+1;var a,l=i>0?null===(o=r[i-1])||void 0===o?void 0:o.lastItem:null,u=r[i],c="number"==typeof t.listRestart;null==u||!z(u.container.node,t)||c?(a={node:t,items:[]},null!=l?l.children.push(a):e.push(a)):a=u.container;var s={node:t,html:n,children:[]};a.items.push(s),r[i]={container:a,lastItem:s}}(o.roots,o.levels,r,a);i(),n.push(a)}),i(),n},elemsToHtml:[Y],parseElemsHtml:[ge,pe]};export{Me as default};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/utils/maps.ts","../src/utils/util.ts","../src/module/helpers.ts","../src/module/style-class.ts","../src/module/elem-to-html.ts","../src/module/html-transform.ts","../src/constants/svg.ts","../src/module/menu/BaseMenu.ts","../src/module/menu/BulletedListMenu.ts","../src/module/menu/LowerAlphaListMenu.ts","../src/module/menu/NumberedListMenu.ts","../src/module/menu/index.ts","../src/utils/dom.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/outline-actions.ts","../src/module/render-elem.tsx","../src/module/index.ts"],"sourcesContent":["/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: 'Unordered list',\n orderedList: 'Ordered list',\n lowerAlphaList: 'Ordered list (a,b,c)',\n numberingActions: 'Heading numbering actions',\n continueNumbering: 'Continue heading numbering',\n restartNumbering: 'Restart numbering',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: '无序列表',\n orderedList: '有序列表',\n lowerAlphaList: '有序列表(a,b,c)',\n numberingActions: '标题编号操作',\n continueNumbering: '继续标题编号',\n restartNumbering: '重新开始编号',\n },\n}\n","/**\n * @description maps\n * @author wangfupeng\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { BaseElement } from 'slate'\n\nexport const ELEM_TO_EDITOR = new WeakMap<BaseElement, IDomEditor>()\n","import { Element as SlateElement, Text } from 'slate'\n\n/**\n * 获取第一个 text-node 的颜色\n * @param elem elem\n */\nexport function getListItemColor(elem: SlateElement): string {\n const children = elem.children || []\n const length = children.length\n\n if (length === 0) { return '' }\n\n let firstTextNode\n\n for (let i = 0; i < length; i += 1) {\n if (firstTextNode) { break } // 已找到第一个 text-node ,则退出\n const child = children[i]\n\n if (Text.isText(child)) { firstTextNode = child }\n }\n\n if (firstTextNode == null) { return '' }\n return firstTextNode.color || ''\n}\n","/**\n * @description list helpers\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Node, Path } from 'slate'\n\nimport {\n HeadingType,\n ListItemElement,\n OrderedListType,\n OutlineListItemElement,\n} from './custom-types'\n\nexport function isListNode(node: Node): node is ListItemElement {\n return DomEditor.checkNodeType(node, 'list-item')\n}\n\n// Keep the legacy name for callers that distinguish the persisted list shape.\nexport const isLegacyListItem = isListNode\n\nexport function isHeadingType(value: unknown): value is HeadingType {\n return typeof value === 'string' && /^header[1-6]$/.test(value)\n}\n\nexport function getHeadingType(node: Node): HeadingType | null {\n if (!isListNode(node) || !isHeadingType(node.headingType)) {\n return null\n }\n\n return node.headingType\n}\n\nexport function getListIndent(node: Node): number {\n if (!isListNode(node)) {\n return 0\n }\n\n return node.level > 0 ? Math.floor(node.level) : 0\n}\n\nexport function getListMode(node: Node): 'standard' | 'outline' {\n return isListNode(node) && node.listMode === 'outline' ? 'outline' : 'standard'\n}\n\nexport function isOutlineListNode(node: Node): node is OutlineListItemElement {\n return (\n isListNode(node) &&\n node.ordered === true &&\n node.listMode === 'outline' &&\n isHeadingType(node.headingType)\n )\n}\n\nexport function getOutlineLevel(node: Node): number {\n const headingType = getHeadingType(node)\n const match = headingType == null ? null : /^header([1-6])$/.exec(headingType)\n\n if (match != null) {\n return Number.parseInt(match[1], 10)\n }\n\n return getListIndent(node) + 1\n}\n\nexport function getNormalizedOrderedListStart(elem: ListItemElement): number {\n const { ordered = false, start } = elem\n\n if (!ordered || typeof start !== 'number' || Number.isNaN(start)) {\n return 1\n }\n\n return start\n}\n\nexport function getNormalizedOrderedListType(elem: ListItemElement): OrderedListType {\n const { orderType } = elem\n\n if (orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return '1'\n}\n\nexport function hasSameListConfig(a: ListItemElement, b: ListItemElement): boolean {\n if (a.ordered !== b.ordered) {\n return false\n }\n if (!a.ordered) {\n return true\n }\n\n return (\n getNormalizedOrderedListType(a) === getNormalizedOrderedListType(b) &&\n getNormalizedOrderedListStart(a) === getNormalizedOrderedListStart(b)\n )\n}\n\nexport function getOrderedItemNumber(editor: IDomEditor, elem: ListItemElement): number {\n if (!elem.ordered) {\n return 1\n }\n\n const level = getListIndent(elem)\n let number = getNormalizedOrderedListStart(elem)\n const index = DomEditor.findPath(editor, elem)[0]\n\n if (index <= 0) {\n return number\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex -= 1) {\n const previous = editor.children[previousIndex]\n\n if (!isListNode(previous)) {\n break\n }\n\n const previousLevel = getListIndent(previous)\n\n if (previousLevel < level) {\n break\n }\n if (previousLevel === level) {\n if (!hasSameListConfig(previous, elem) || isOutlineListNode(previous)) {\n break\n }\n number += 1\n }\n }\n\n return number\n}\n\nexport function getOutlineNumber(editor: IDomEditor, elem: ListItemElement): string {\n const counters = Array.from({ length: 6 }, () => 0)\n\n for (const current of editor.children) {\n if (!isOutlineListNode(current)) {\n continue\n }\n\n const level = getOutlineLevel(current)\n const index = level - 1\n\n for (let parentIndex = 0; parentIndex < index; parentIndex += 1) {\n if (counters[parentIndex] === 0) {\n counters[parentIndex] = 1\n }\n }\n\n if (typeof current.listRestart === 'number' && current.listRestart > 0) {\n counters[index] = Math.floor(current.listRestart)\n } else if (counters[index] === 0) {\n counters[index] = 1\n } else {\n counters[index] += 1\n }\n\n for (let childIndex = index + 1; childIndex < counters.length; childIndex += 1) {\n counters[childIndex] = 0\n }\n\n if (current === elem) {\n const label = counters.slice(0, level).join('.')\n\n return level === 1 ? `${label}.` : label\n }\n }\n\n return ''\n}\n\n/**\n * 获取上一个同一 level 的 list item\n * @param editor editor\n * @param elem elem\n */\nexport function getBrotherListNodeByLevel(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): ListItemElement | null {\n const elemLevel = level !== undefined ? level : elem.level || 0\n let brotherPath = DomEditor.findPath(editor, elem)\n\n while (true) {\n if (brotherPath.length === 0 || brotherPath[brotherPath.length - 1] === 0) {\n return null\n }\n brotherPath = Path.previous(brotherPath)\n const brotherEntry = Editor.node(editor, brotherPath)\n\n if (brotherEntry == null || !isListNode(brotherEntry[0])) {\n return null\n }\n if (getListIndent(brotherEntry[0]) === elemLevel) {\n return brotherEntry[0]\n }\n }\n}\n\nexport function hasSameOrderWithBrother(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): boolean {\n const brotherElem = getBrotherListNodeByLevel(editor, elem, level)\n\n return brotherElem != null && hasSameListConfig(brotherElem, elem)\n}\n","/**\n * @description list style class utils\n */\n\nimport { getClassStylePolicy, IDomEditor, reportUnsupportedClassStyle } from '@wangeditor-next/core'\n\nconst DEFAULT_COLORS = [\n 'rgb(0, 0, 0)',\n 'rgb(38, 38, 38)',\n 'rgb(89, 89, 89)',\n 'rgb(140, 140, 140)',\n 'rgb(191, 191, 191)',\n 'rgb(217, 217, 217)',\n 'rgb(233, 233, 233)',\n 'rgb(245, 245, 245)',\n 'rgb(250, 250, 250)',\n 'rgb(255, 255, 255)',\n 'rgb(225, 60, 57)',\n 'rgb(231, 95, 51)',\n 'rgb(235, 144, 58)',\n 'rgb(245, 219, 77)',\n 'rgb(114, 192, 64)',\n 'rgb(89, 191, 192)',\n 'rgb(66, 144, 247)',\n 'rgb(54, 88, 226)',\n 'rgb(106, 57, 201)',\n 'rgb(216, 68, 147)',\n 'rgb(251, 233, 230)',\n 'rgb(252, 237, 225)',\n 'rgb(252, 239, 212)',\n 'rgb(252, 251, 207)',\n 'rgb(231, 246, 213)',\n 'rgb(218, 244, 240)',\n 'rgb(217, 237, 250)',\n 'rgb(224, 232, 250)',\n 'rgb(237, 225, 248)',\n 'rgb(246, 226, 234)',\n 'rgb(255, 163, 158)',\n 'rgb(255, 187, 150)',\n 'rgb(255, 213, 145)',\n 'rgb(255, 251, 143)',\n 'rgb(183, 235, 143)',\n 'rgb(135, 232, 222)',\n 'rgb(145, 213, 255)',\n 'rgb(173, 198, 255)',\n 'rgb(211, 173, 247)',\n 'rgb(255, 173, 210)',\n 'rgb(255, 77, 79)',\n 'rgb(255, 122, 69)',\n 'rgb(255, 169, 64)',\n 'rgb(255, 236, 61)',\n 'rgb(115, 209, 61)',\n 'rgb(54, 207, 201)',\n 'rgb(64, 169, 255)',\n 'rgb(89, 126, 247)',\n 'rgb(146, 84, 222)',\n 'rgb(247, 89, 171)',\n 'rgb(207, 19, 34)',\n 'rgb(212, 56, 13)',\n 'rgb(212, 107, 8)',\n 'rgb(212, 177, 6)',\n 'rgb(56, 158, 13)',\n 'rgb(8, 151, 156)',\n 'rgb(9, 109, 217)',\n 'rgb(29, 57, 196)',\n 'rgb(83, 29, 171)',\n 'rgb(196, 29, 127)',\n 'rgb(130, 0, 20)',\n 'rgb(135, 20, 0)',\n 'rgb(135, 56, 0)',\n 'rgb(97, 71, 0)',\n 'rgb(19, 82, 0)',\n 'rgb(0, 71, 79)',\n 'rgb(0, 58, 140)',\n 'rgb(6, 17, 120)',\n 'rgb(34, 7, 94)',\n 'rgb(120, 6, 80)',\n]\n\nconst REPORTED_UNSUPPORTED_LIST_COLOR = new Set<string>()\n\nfunction normalizeColorValue(value: string): string {\n return (value || '').trim().replace(/\\s+/g, '').toLowerCase()\n}\n\nconst DEFAULT_COLOR_SET = new Set(DEFAULT_COLORS.map(color => normalizeColorValue(color)))\n\nfunction hashStyleValue(input: string): string {\n const MOD = 2147483647 // 2^31 - 1\n let hash = 7\n\n for (const char of input) {\n hash = (hash * 31 + (char.codePointAt(0) || 0)) % MOD\n }\n\n return hash.toString(36)\n}\n\nexport function genListColorClassName(color: string): string {\n const normalized = normalizeColorValue(color)\n\n return `w-e-list-color-${hashStyleValue(`color:${normalized}`)}`\n}\n\nfunction hasExtraRegisteredColor(editor: IDomEditor | undefined, color: string): boolean {\n const extraTokens = editor?.getConfig().styleClassTokens?.color || []\n const normalizedColor = normalizeColorValue(color)\n\n for (let i = 0; i < extraTokens.length; i += 1) {\n if (normalizeColorValue(extraTokens[i]) === normalizedColor) {\n return true\n }\n }\n\n return false\n}\n\nfunction hasRegisteredListColor(editor: IDomEditor | undefined, color: string): boolean {\n const normalized = normalizeColorValue(color)\n\n if (!normalized) { return false }\n if (DEFAULT_COLOR_SET.has(normalized)) { return true }\n if (hasExtraRegisteredColor(editor, color)) { return true }\n\n return false\n}\n\nexport function resolveListColorAction(\n editor: IDomEditor | undefined,\n color: string,\n): 'class' | 'preserve-data' | 'inline' {\n if (hasRegisteredListColor(editor, color)) {\n return 'class'\n }\n\n const policy = getClassStylePolicy(editor)\n let fallback: 'preserve-data' | 'inline' | 'throw' = 'preserve-data'\n\n if (policy === 'fallback-inline') {\n fallback = 'inline'\n }\n if (policy === 'strict') {\n fallback = 'throw'\n }\n\n const message = `[wangeditor] Unsupported list color class token color=${color}. policy=${policy}`\n const reportKey = `${color}|${fallback}`\n\n if (!REPORTED_UNSUPPORTED_LIST_COLOR.has(reportKey)) {\n REPORTED_UNSUPPORTED_LIST_COLOR.add(reportKey)\n reportUnsupportedClassStyle(editor, {\n type: 'color',\n value: color,\n scene: 'toHtml',\n fallback,\n message,\n })\n }\n\n if (fallback === 'throw') {\n throw new Error(message)\n }\n\n if (fallback === 'inline') {\n return 'inline'\n }\n\n return 'preserve-data'\n}\n","/**\n * @description to html\n * @author wangfupeng\n */\n\nimport { DomEditor, getTextStyleMode, IDomEditor } from '@wangeditor-next/core'\nimport { Element } from 'slate'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getNormalizedOrderedListStart,\n getNormalizedOrderedListType,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\n// ol ul stack for streaming list-item serialization\nconst CONTAINER_TAG_STACK: Array<string> = []\nlet STACK_EDITOR: IDomEditor | null = null\n\nfunction getContainerTag(elem: ListItemElement): 'ol' | 'ul' {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction getFallbackContainerTag(elem: ListItemElement): string {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction genContainerStartTag(elem: ListItemElement): string {\n const { ordered = false } = elem\n\n if (!ordered) { return '<ul>' }\n\n const attrs: string[] = []\n const orderType = getNormalizedOrderedListType(elem)\n const orderStart = getNormalizedOrderedListStart(elem)\n\n if (orderType !== '1') {\n attrs.push(`type=\"${orderType}\"`)\n }\n if (orderStart !== 1) {\n attrs.push(`start=\"${orderStart}\"`)\n }\n if (getHeadingType(elem) != null) {\n attrs.push('data-w-e-list-mode=\"standard\"')\n }\n\n if (attrs.length === 0) { return '<ol>' }\n return `<ol ${attrs.join(' ')}>`\n}\n\nfunction getAdjacentListItem(\n editor: IDomEditor,\n index: number,\n direction: 'prev' | 'next',\n): ListItemElement | null {\n if (direction === 'prev' && index === 0) { return null }\n if (direction === 'next' && index === editor.children.length - 1) { return null }\n\n const targetIndex = direction === 'prev' ? index - 1 : index + 1\n const targetNode = editor.children[targetIndex] as any\n\n if (!DomEditor.checkNodeType(targetNode, 'list-item') || isOutlineListNode(targetNode)) {\n return null\n }\n return targetNode as ListItemElement\n}\n\nfunction getPrevSameLevelListItem(\n editor: IDomEditor,\n index: number,\n level: number,\n): ListItemElement | null {\n for (let i = index - 1; i >= 0; i -= 1) {\n const node = editor.children[i] as any\n\n if (!DomEditor.checkNodeType(node, 'list-item') || isOutlineListNode(node)) { continue }\n if ((node.level || 0) === level) {\n return node as ListItemElement\n }\n }\n return null\n}\n\nfunction elemToHtml(\n elem: Element,\n childrenHtml: string,\n editor?: IDomEditor,\n): {\n html: string\n prefix?: string\n suffix?: string\n} {\n let startContainerStr = ''\n let endContainerStr = ''\n\n const listItemElem = elem as ListItemElement\n const headingType = getHeadingType(listItemElem)\n const headingTag = headingType == null ? null : headingType.replace('header', 'h')\n\n if (isOutlineListNode(listItemElem) && headingTag != null) {\n return {\n html: `<${headingTag}>${childrenHtml}</${headingTag}>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (headingTag != null) {\n childrenHtml = `<${headingTag}>${childrenHtml}</${headingTag}>`\n }\n\n const { level = 0 } = listItemElem\n const containerTag = getContainerTag(listItemElem)\n const containerStartTag = genContainerStartTag(listItemElem)\n const bindEditor = ELEM_TO_EDITOR.get(elem)\n const bindEditorWithChildren = bindEditor && Array.isArray((bindEditor as any).children)\n ? bindEditor\n : null\n const passedEditorWithChildren = editor && Array.isArray((editor as any).children)\n ? editor\n : null\n const editorContainsElem = (candidate: IDomEditor | null | undefined) => (\n !!candidate && candidate.children.indexOf(elem as any) >= 0\n )\n let finalEditor = passedEditorWithChildren || bindEditorWithChildren\n\n if (editorContainsElem(passedEditorWithChildren)) {\n finalEditor = passedEditorWithChildren\n } else if (editorContainsElem(bindEditorWithChildren)) {\n finalEditor = bindEditorWithChildren\n }\n const styleEditor = editor || bindEditor\n\n if (finalEditor == null) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (STACK_EDITOR !== finalEditor) {\n CONTAINER_TAG_STACK.length = 0\n STACK_EDITOR = finalEditor\n }\n\n const index = finalEditor.children.indexOf(elem as any)\n\n if (index < 0) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n const prevItem = getAdjacentListItem(finalEditor, index, 'prev')\n const nextItem = getAdjacentListItem(finalEditor, index, 'next')\n const hasNestedNext = !!nextItem && (nextItem.level || 0) > level\n\n if (!prevItem) {\n // list block start\n CONTAINER_TAG_STACK.length = 0\n for (let i = 0; i < level + 1; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n const prevLevel = prevItem.level || 0\n\n if (level > prevLevel) {\n // Enter nested lists inside previous <li>.\n for (let i = 0; i < level - prevLevel; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else if (level === prevLevel) {\n // Split same-level lists when ordered/type/start differ.\n if (!hasSameListConfig(prevItem, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n // Climb up: close nested list containers and parent <li>.\n let diff = prevLevel - level\n\n while (diff > 0) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}></li>`\n diff -= 1\n }\n\n // Split target-level list container when config changed.\n const brother = getPrevSameLevelListItem(finalEditor, index, level)\n\n if (brother && !hasSameListConfig(brother, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(brother)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n }\n }\n\n // 获取前缀颜色\n const prefixColor = getListItemColor(elem)\n const textStyleMode = getTextStyleMode(styleEditor)\n let colorStyle = ''\n let colorClass = ''\n let colorData = ''\n\n if (prefixColor) {\n if (textStyleMode === 'class') {\n colorData = ` data-w-e-color=\"${prefixColor}\"`\n const action = resolveListColorAction(styleEditor, prefixColor)\n\n if (action === 'class') {\n colorClass = ` class=\"${genListColorClassName(prefixColor)}\"`\n } else if (action === 'inline') {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n } else {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n }\n\n const html = `<li${colorClass}${colorData}${colorStyle}>${childrenHtml}${hasNestedNext ? '' : '</li>'}`\n\n if (!nextItem) {\n // list block end\n while (CONTAINER_TAG_STACK.length > 0) {\n const tag = CONTAINER_TAG_STACK.pop()\n\n if (!tag) { break }\n endContainerStr += `</${tag}>`\n if (CONTAINER_TAG_STACK.length > 0) {\n endContainerStr += '</li>'\n }\n }\n STACK_EDITOR = null\n }\n\n return {\n html,\n prefix: startContainerStr,\n suffix: endContainerStr,\n }\n}\n\nconst listItemToHtmlConf = {\n type: 'list-item',\n elemToHtml,\n}\n\nexport default listItemToHtmlConf\n","/**\n * @description compose semantic outline HTML from additive list-item metadata\n */\n\nimport { getTextStyleMode, HtmlTransformFnType, IDomEditor } from '@wangeditor-next/core'\n\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getOutlineLevel,\n getOutlineNumber,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\ntype OutlineItem = {\n node: ListItemElement\n html: string\n children: OutlineContainer[]\n}\n\ntype OutlineContainer = {\n node: ListItemElement\n items: OutlineItem[]\n}\n\ntype OutlineLevel = {\n container: OutlineContainer\n lastItem: OutlineItem\n}\n\ntype OutlineContext = {\n roots: OutlineContainer[]\n levels: OutlineLevel[]\n}\n\nfunction getOutlineContainerStart(editor: IDomEditor, node: ListItemElement): number {\n const lastSegment = getOutlineNumber(editor, node).split('.').filter(Boolean).pop()\n const start = Number.parseInt(lastSegment || '', 10)\n\n return Number.isFinite(start) && start > 0 ? start : 1\n}\n\nfunction getContainerStartTag(container: OutlineContainer, editor: IDomEditor): string {\n const start = getOutlineContainerStart(editor, container.node)\n const startAttr = start === 1 ? '' : ` start=\"${start}\"`\n\n return `<ol${startAttr} data-w-e-list-mode=\"outline\">`\n}\n\nfunction getColorAttrs(node: ListItemElement, editor: IDomEditor): string[] {\n const color = getListItemColor(node)\n\n if (!color) {\n return []\n }\n\n if (getTextStyleMode(editor) !== 'class') {\n return [`style=\"color:${color}\"`]\n }\n\n const attrs = [`data-w-e-color=\"${color}\"`]\n const action = resolveListColorAction(editor, color)\n\n if (action === 'class') {\n attrs.unshift(`class=\"${genListColorClassName(color)}\"`)\n } else if (action === 'inline') {\n attrs.push(`style=\"color:${color}\"`)\n }\n\n return attrs\n}\n\nfunction getListItemStartTag(node: ListItemElement, editor: IDomEditor): string {\n const attrs = getColorAttrs(node, editor)\n\n attrs.push(`data-w-e-list-indent=\"${getOutlineLevel(node) - 1}\"`)\n\n if (typeof node.listRestart === 'number') {\n attrs.push(`data-w-e-list-restart=\"${node.listRestart}\"`)\n }\n attrs.push(`data-w-e-outline-number=\"${getOutlineNumber(editor, node)}\"`)\n\n return `<li ${attrs.join(' ')}>`\n}\n\nfunction renderContainer(container: OutlineContainer, editor: IDomEditor): string {\n const itemsHtml = container.items\n .map(item => {\n const childrenHtml = item.children.map(child => renderContainer(child, editor)).join('')\n\n return `${getListItemStartTag(item.node, editor)}${item.html}${childrenHtml}</li>`\n })\n .join('')\n\n return `${getContainerStartTag(container, editor)}${itemsHtml}</ol>`\n}\n\nfunction addOutlineItem(\n roots: OutlineContainer[],\n levels: OutlineLevel[],\n node: ListItemElement,\n html: string\n): OutlineItem {\n let level = Math.max(0, getOutlineLevel(node) - 1)\n\n // A standalone h3 cannot have a semantic parent. Preserve the source depth\n // in data-w-e-list-indent while emitting valid nested HTML.\n if (level > levels.length) {\n level = levels.length\n }\n\n levels.length = level + 1\n const parent = level > 0 ? levels[level - 1]?.lastItem : null\n const current = levels[level]\n const restart = typeof node.listRestart === 'number'\n const needsNewContainer =\n current == null || !hasSameListConfig(current.container.node, node) || restart\n\n let container: OutlineContainer\n\n if (needsNewContainer) {\n container = { node, items: [] }\n if (parent != null) {\n parent.children.push(container)\n } else {\n roots.push(container)\n }\n } else {\n container = current.container\n }\n\n const item: OutlineItem = { node, html, children: [] }\n\n container.items.push(item)\n levels[level] = { container, lastItem: item }\n\n return item\n}\n\n/**\n * List-item serialization remains backward compatible for ordinary lists.\n * Only outline list items need document-level composition to create valid\n * `ol > li > hN` structure.\n */\nexport const transformListHtml: HtmlTransformFnType = (htmlList, nodes, editor) => {\n const result: string[] = []\n let outlineContext: OutlineContext | null = null\n\n const flushOutline = () => {\n if (outlineContext == null || outlineContext.roots.length === 0) {\n return\n }\n\n result.push(outlineContext.roots.map(container => renderContainer(container, editor)).join(''))\n outlineContext = null\n }\n\n nodes.forEach((node, index) => {\n const html = htmlList[index] || ''\n\n if (isOutlineListNode(node)) {\n if (outlineContext == null) {\n outlineContext = { roots: [], levels: [] }\n }\n\n addOutlineItem(outlineContext.roots, outlineContext.levels, node, html)\n return\n }\n\n flushOutline()\n result.push(html)\n })\n\n flushOutline()\n\n return result\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 无序列表\nexport const BULLETED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z\"></path></svg>'\n\n// 有序列表\nexport const NUMBERED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z\"></path></svg>'\n","/**\n * @description list menu base class\n * @author wangfupeng\n */\n\nimport { IButtonMenu, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\n\nimport { HeadingType, ListItemElement, OrderedListType } from '../custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n isHeadingType,\n isListNode,\n} from '../helpers'\n\nfunction getSelectedTopLevelBlocks(editor: IDomEditor): Array<[Element, Path]> {\n if (editor.selection == null) {\n return []\n }\n\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction isListableBlock(editor: IDomEditor, elem: Element): boolean {\n if (Editor.isVoid(editor, elem)) {\n return false\n }\n\n return !['pre', 'code', 'table', 'table-row', 'table-cell'].includes(elem.type)\n}\n\nfunction getHeadingLevel(headingType: HeadingType): number {\n return Number.parseInt(headingType.slice('header'.length), 10) - 1\n}\n\nfunction getOriginalHeadingType(node: Element): HeadingType | null {\n if (isListNode(node)) {\n return getHeadingType(node)\n }\n\n return isHeadingType(node.type) ? node.type : null\n}\n\nabstract class BaseMenu implements IButtonMenu {\n readonly type = 'list-item'\n\n abstract readonly ordered: boolean\n\n readonly orderType?: OrderedListType\n\n abstract readonly title: string\n\n abstract readonly iconSvg: string\n\n readonly tag = 'button'\n\n private isTargetListNode(node: Node): boolean {\n if (!isListNode(node) || Boolean(node.ordered) !== this.ordered) {\n return false\n }\n if (!this.ordered) {\n return true\n }\n\n return getNormalizedOrderedListType(node) === (this.orderType || '1')\n }\n\n getValue(_editor: IDomEditor): string | boolean {\n return ''\n }\n\n isActive(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length > 0 && selectedBlocks.every(([node]) => this.isTargetListNode(node))\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length === 0 || selectedBlocks.some(([node]) => !isListableBlock(editor, node))\n }\n\n exec(editor: IDomEditor, _value: string | boolean): void {\n const active = this.isActive(editor)\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n if (selectedBlocks.length === 0) {\n return\n }\n\n Editor.withoutNormalizing(editor, () => {\n selectedBlocks.forEach(([node, path]) => {\n if (active) {\n const listNode = node as ListItemElement\n const headingType = getHeadingType(listNode)\n\n Transforms.setNodes(\n editor,\n {\n type: headingType || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n return\n }\n\n const headingType = getOriginalHeadingType(node)\n const outline = this.ordered && this.orderType == null && headingType != null\n\n Transforms.setNodes(\n editor,\n {\n type: 'list-item',\n ordered: this.ordered,\n level: outline ? getHeadingLevel(headingType as HeadingType) : getListIndent(node),\n start: undefined,\n orderType: this.ordered ? this.orderType : undefined,\n headingType: outline ? headingType : undefined,\n listMode: outline ? 'outline' : undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n })\n })\n }\n}\n\nexport default BaseMenu\n","/**\n * @description bulleted list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { BULLETED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass BulletedListMenu extends BaseMenu {\n readonly ordered = false\n\n readonly title = t('listModule.unOrderedList')\n\n readonly iconSvg = BULLETED_LIST_SVG\n}\n\nexport default BulletedListMenu\n","/**\n * @description lower-alpha ordered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport { OrderedListType } from '../custom-types'\nimport BaseMenu from './BaseMenu'\n\nclass LowerAlphaListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly orderType: OrderedListType = 'a'\n\n readonly title = t('listModule.lowerAlphaList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default LowerAlphaListMenu\n","/**\n * @description numbered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass NumberedListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly title = t('listModule.orderedList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default NumberedListMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport BulletedListMenu from './BulletedListMenu'\nimport LowerAlphaListMenu from './LowerAlphaListMenu'\nimport NumberedListMenu from './NumberedListMenu'\n\nexport const bulletedListMenuConf = {\n key: 'bulletedList',\n factory() {\n return new BulletedListMenu()\n },\n}\n\nexport const numberedListMenuConf = {\n key: 'numberedList',\n factory() {\n return new NumberedListMenu()\n },\n}\n\nexport const numberedListLowerAlphaMenuConf = {\n key: 'numberedListLowerAlpha',\n factory() {\n return new LowerAlphaListMenu()\n },\n}\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, attr, Dom7Array, parent,\n} from 'dom7'\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nif (append) { $.fn.append = append }\n// if (on) $.fn.on = on\n// if (focus) $.fn.focus = focus\nif (attr) { $.fn.attr = attr }\n// if (val) $.fn.val = val\n// if (html) $.fn.html = html\nif (parent) { $.fn.parent = parent }\n// if (hasClass) $.fn.hasClass = hasClass\n// if (empty) $.fn.empty = empty\n\nexport default $\nexport {\n DOMComment, DOMElement, DOMNode, DOMRange, DOMSelection, DOMStaticRange, DOMText,\n}\n\n/**\n * 获取 tagName lower-case\n * @param $elem $elem\n */\nexport function getTagName($elem: Dom7Array): string {\n if ($elem.length) { return $elem[0].tagName.toLowerCase() }\n return ''\n}\n","/**\n * @description parse list HTML\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { Dom7Array } from 'dom7'\nimport { Descendant, Element as SlateElement, Text } from 'slate'\n\nimport $, { DOMElement, getTagName } from '../utils/dom'\nimport { HeadingType, ListItemElement, OrderedListType } from './custom-types'\nimport { isHeadingType, isListNode } from './helpers'\n\nfunction getOrdered($elem: Dom7Array): boolean {\n return getTagName($elem.parent()) === 'ol'\n}\n\nfunction getOrderedStart($elem: Dom7Array): number | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const value = ($list.attr('start') || '').trim()\n const start = Number.parseInt(value, 10)\n\n return Number.isNaN(start) ? undefined : start\n}\n\nfunction getOrderedType($elem: Dom7Array): OrderedListType | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const orderType = ($list.attr('type') || '').trim()\n\n if (orderType === '1' || orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return undefined\n}\n\nfunction getLevel($elem: Dom7Array): number {\n const indent = ($elem.attr('data-w-e-list-indent') || '').trim()\n\n if (/^\\d+$/.test(indent)) {\n return Number.parseInt(indent, 10)\n }\n\n let listAncestorCount = 0\n let $current: Dom7Array = $elem.parent()\n\n while ($current.length > 0) {\n const tagName = getTagName($current)\n\n if (tagName === 'ul' || tagName === 'ol') {\n listAncestorCount += 1\n }\n $current = $current.parent()\n }\n\n return Math.max(0, listAncestorCount - 1)\n}\n\nfunction getListMode($elem: Dom7Array, children: Descendant[]): 'standard' | 'outline' {\n const declaredMode = $elem.parent().attr('data-w-e-list-mode')\n\n if (declaredMode === 'outline' || declaredMode === 'standard') {\n return declaredMode\n }\n\n return getOrdered($elem) && children.some(child => {\n return SlateElement.isElement(child) && isHeadingType(child.type)\n })\n ? 'outline'\n : 'standard'\n}\n\nfunction getRestart($elem: Dom7Array): number | undefined {\n const value = ($elem.attr('data-w-e-list-restart') || '').trim()\n\n if (!/^\\d+$/.test(value)) {\n return undefined\n }\n\n const restart = Number.parseInt(value, 10)\n\n return restart > 0 ? restart : undefined\n}\n\nfunction isFirstListItem($elem: Dom7Array): boolean {\n let previous = $elem[0]?.previousElementSibling\n\n while (previous != null) {\n if (previous.tagName.toLowerCase() === 'li') {\n return false\n }\n previous = previous.previousElementSibling\n }\n\n return true\n}\n\nfunction getOutlineRestart($elem: Dom7Array): number | undefined {\n const restart = getRestart($elem)\n\n if (restart !== undefined) {\n return restart\n }\n if ($elem.attr('data-w-e-outline-number') != null || !isFirstListItem($elem)) {\n return undefined\n }\n\n return getOrderedStart($elem)\n}\n\nfunction isStructuralWhitespaceText(child: Descendant): boolean {\n return Text.isText(child) && child.text.trim() === ''\n}\n\nfunction appendTextLikeChildren(target: Descendant[], children: Descendant[], editor: IDomEditor) {\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (Text.isText(child) || editor.isInline(child)) {\n target.push(child)\n return\n }\n if (SlateElement.isElement(child)) {\n appendTextLikeChildren(target, child.children, editor)\n }\n })\n}\n\nfunction getHeadingNode(children: Descendant[]): SlateElement | null {\n for (const child of children) {\n if (SlateElement.isElement(child) && isHeadingType(child.type)) {\n return child\n }\n }\n\n return null\n}\n\nfunction parseItemHtml(\n elem: DOMElement,\n children: Descendant[],\n editor: IDomEditor\n): ListItemElement | ListItemElement[] {\n const $elem = $(elem)\n const level = getLevel($elem)\n const directChildren: Descendant[] = []\n const nestedListChildren: ListItemElement[] = []\n\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (isListNode(child) && child.level > level) {\n nestedListChildren.push(child)\n return\n }\n directChildren.push(child)\n })\n\n const headingNode = getHeadingNode(directChildren)\n const headingType = headingNode != null && isHeadingType(headingNode.type)\n ? (headingNode.type as HeadingType)\n : undefined\n const listMode = getListMode($elem, directChildren)\n const normalizedChildren: Descendant[] = []\n\n appendTextLikeChildren(normalizedChildren, directChildren, editor)\n\n if (normalizedChildren.length === 0) {\n normalizedChildren.push(\n nestedListChildren.length > 0 ? { text: '' } : { text: $elem.text().replace(/\\s+/gm, ' ') }\n )\n }\n\n const ordered = getOrdered($elem)\n const start = getOrderedStart($elem)\n const orderType = getOrderedType($elem)\n const outline = ordered && listMode === 'outline' && headingType !== undefined\n const listRestart = outline ? getOutlineRestart($elem) : undefined\n const item: ListItemElement = {\n type: 'list-item',\n ordered,\n level: outline ? Number.parseInt(headingType.slice('header'.length), 10) - 1 : level,\n ...(start !== undefined && !outline ? { start } : {}),\n ...(orderType !== undefined ? { orderType } : {}),\n ...(headingType !== undefined ? { headingType } : {}),\n ...(outline ? { listMode: 'outline' as const } : {}),\n ...(listRestart !== undefined ? { listRestart } : {}),\n // @ts-ignore List items retain the established text/inline children shape.\n children: normalizedChildren,\n }\n\n return nestedListChildren.length === 0 ? item : [item, ...nestedListChildren]\n}\n\nexport const parseItemHtmlConf = {\n selector: 'li:not([data-w-e-type])',\n parseElemHtml: parseItemHtml,\n}\n\nfunction parseListHtml(\n _elem: DOMElement,\n children: Descendant[],\n _editor: IDomEditor\n): ListItemElement[] {\n // @ts-ignore Nested lists return arrays which must be flattened.\n return children.flat(Infinity)\n}\n\nexport const parseListHtmlConf = {\n selector: 'ul:not([data-w-e-type]),ol:not([data-w-e-type])',\n parseElemHtml: parseListHtml,\n}\n","/**\n * @description list editor plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Range, Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\nimport {\n getBrotherListNodeByLevel,\n getHeadingType,\n getListIndent,\n isListNode,\n isOutlineListNode,\n} from './helpers'\n\nfunction getTopSelectedElemsBySelection(editor: IDomEditor): Array<[Element, Path]> {\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction getSelectedListEntry(editor: IDomEditor): [ListItemElement, Path] | null {\n const [entry] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: isListNode,\n universal: true,\n })\n\n return entry == null ? null : (entry as [ListItemElement, Path])\n}\n\nfunction clearListItem(editor: IDomEditor, path: Path, node: ListItemElement, type?: string) {\n Transforms.setNodes(\n editor,\n {\n type: type || getHeadingType(node) || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n}\n\nfunction withList<T extends IDomEditor>(editor: T): T {\n const { deleteBackward, handleTab, normalizeNode, insertBreak } = editor\n const newEditor = editor\n\n newEditor.insertBreak = () => {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null) {\n return insertBreak()\n }\n\n const [listItem, path] = entry\n\n if (Node.string(listItem) === '') {\n clearListItem(newEditor, path, listItem, 'paragraph')\n return\n }\n\n return insertBreak()\n }\n\n newEditor.deleteBackward = unit => {\n const { selection } = newEditor\n\n if (selection == null || Range.isExpanded(selection)) {\n deleteBackward(unit)\n return\n }\n\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || selection.focus.offset !== 0) {\n deleteBackward(unit)\n return\n }\n\n const [listItem, path] = entry\n\n if (isOutlineListNode(listItem)) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const level = getListIndent(listItem)\n\n if (level <= 0) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const brother = getBrotherListNodeByLevel(editor, listItem, level - 1)\n\n if (brother != null) {\n Transforms.setNodes(\n newEditor,\n {\n level: level - 1,\n ordered: brother.ordered,\n start: brother.ordered ? brother.start : undefined,\n orderType: brother.ordered ? brother.orderType : undefined,\n },\n { at: path }\n )\n } else {\n Transforms.setNodes(newEditor, { level: level - 1 }, { at: path })\n }\n }\n\n newEditor.handleTab = () => {\n const { selection } = newEditor\n\n if (selection == null) {\n handleTab()\n return\n }\n\n if (Range.isCollapsed(selection)) {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || isOutlineListNode(entry[0]) || selection.focus.offset !== 0) {\n handleTab()\n return\n }\n\n const [listItem, path] = entry\n\n Transforms.setNodes(newEditor, { level: getListIndent(listItem) + 1 }, { at: path })\n return\n }\n\n const selectedEntries = getTopSelectedElemsBySelection(newEditor)\n const listEntries = selectedEntries.filter(([node]) => {\n return isListNode(node) && !isOutlineListNode(node)\n })\n\n if (listEntries.length !== selectedEntries.length || listEntries.length <= 1) {\n handleTab()\n return\n }\n\n listEntries.forEach(([node, path]) => {\n Transforms.setNodes(newEditor, { level: getListIndent(node) + 1 }, { at: path })\n })\n }\n\n newEditor.normalizeNode = ([node, path]) => {\n const type = DomEditor.getNodeType(node)\n\n if (type === 'bulleted-list' || type === 'numbered-list') {\n Transforms.unwrapNodes(newEditor, { at: path })\n }\n\n return normalizeNode([node, path])\n }\n\n return newEditor\n}\n\nexport default withList\n","/**\n * @description outline numbering marker actions\n */\n\nimport { DomEditor, EditorEvents, IDomEditor, t } from '@wangeditor-next/core'\nimport { Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\n\ntype OutlineActionPanel = {\n elem: HTMLElement\n dispose: () => void\n}\n\nconst PANEL_BY_EDITOR = new WeakMap<IDomEditor, OutlineActionPanel>()\n\nfunction updateRestart(editor: IDomEditor, node: ListItemElement, restart?: number) {\n const index = editor.children.indexOf(node)\n\n if (index < 0) {\n return\n }\n\n Transforms.setNodes(editor, { listRestart: restart }, { at: [index] })\n}\n\nexport function continueOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node)\n}\n\nexport function restartOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node, 1)\n}\n\nexport function hideOutlineActionPanel(editor: IDomEditor) {\n const panel = PANEL_BY_EDITOR.get(editor)\n\n if (panel == null) {\n return\n }\n panel.dispose()\n PANEL_BY_EDITOR.delete(editor)\n}\n\nfunction createActionButton(\n document: Document,\n label: string,\n onClick: () => void\n): HTMLButtonElement {\n const button = document.createElement('button')\n\n button.type = 'button'\n button.className = 'w-e-list-outline-action'\n button.textContent = label\n button.addEventListener('mousedown', event => event.preventDefault())\n button.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n onClick()\n })\n\n return button\n}\n\nexport function showOutlineActionPanel(editor: IDomEditor, node: ListItemElement, marker: HTMLElement) {\n if (editor.isDisabled()) {\n return\n }\n\n hideOutlineActionPanel(editor)\n\n const document = marker.ownerDocument\n const panel = document.createElement('div')\n\n panel.className = 'w-e-list-outline-actions'\n panel.setAttribute('role', 'menu')\n panel.addEventListener('mousedown', event => event.preventDefault())\n panel.append(\n createActionButton(document, t('listModule.continueNumbering'), () => {\n continueOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n }),\n createActionButton(document, t('listModule.restartNumbering'), () => {\n restartOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n })\n )\n\n const textarea = DomEditor.getTextarea(editor)\n const container = textarea.$textAreaContainer[0] as HTMLElement\n const scroll = textarea.$scroll[0] as HTMLElement\n const markerRect = marker.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n\n panel.style.top = `${markerRect.bottom - containerRect.top + scroll.scrollTop + 4}px`\n panel.style.left = `${markerRect.left - containerRect.left + scroll.scrollLeft}px`\n container.append(panel)\n\n const onDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n if (panel.contains(target) || marker.contains(target)) {\n return\n }\n\n hideOutlineActionPanel(editor)\n }\n const onEditorChange = () => hideOutlineActionPanel(editor)\n const onEditorDestroyed = () => hideOutlineActionPanel(editor)\n\n document.addEventListener('mousedown', onDocumentMouseDown, true)\n editor.on(EditorEvents.CHANGE, onEditorChange)\n editor.on(EditorEvents.DESTROYED, onEditorDestroyed)\n\n PANEL_BY_EDITOR.set(editor, {\n elem: panel,\n dispose: () => {\n document.removeEventListener('mousedown', onDocumentMouseDown, true)\n editor.off(EditorEvents.CHANGE, onEditorChange)\n editor.off(EditorEvents.DESTROYED, onEditorDestroyed)\n panel.remove()\n },\n })\n}\n","/**\n * @description render list elem\n * @author wangfupeng\n */\n\nimport { IDomEditor, t } from '@wangeditor-next/core'\nimport { Element as SlateElement } from 'slate'\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { jsx, VNode } from 'snabbdom'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n getOrderedItemNumber,\n getOutlineNumber,\n isOutlineListNode,\n} from './helpers'\nimport { showOutlineActionPanel } from './outline-actions'\n\nfunction genPreSymbol(level = 0): string {\n switch (level) {\n case 0:\n return '•'\n case 1:\n return '◦'\n default:\n return '▪'\n }\n}\n\nfunction genAlphabetIndex(number: number, upper = false): string {\n if (number <= 0) {\n return String(number)\n }\n\n let current = number\n let result = ''\n\n while (current > 0) {\n const remainder = (current - 1) % 26\n const charCode = (upper ? 65 : 97) + remainder\n\n result = String.fromCharCode(charCode) + result\n current = Math.floor((current - 1) / 26)\n }\n\n return result\n}\n\nfunction genRomanIndex(number: number, upper = false): string {\n if (number <= 0 || number >= 4000) {\n return String(number)\n }\n\n const romanMap: Array<[number, string]> = [\n [1000, 'M'],\n [900, 'CM'],\n [500, 'D'],\n [400, 'CD'],\n [100, 'C'],\n [90, 'XC'],\n [50, 'L'],\n [40, 'XL'],\n [10, 'X'],\n [9, 'IX'],\n [5, 'V'],\n [4, 'IV'],\n [1, 'I'],\n ]\n let current = number\n let result = ''\n\n for (const [value, roman] of romanMap) {\n while (current >= value) {\n result += roman\n current -= value\n }\n }\n\n return upper ? result : result.toLowerCase()\n}\n\nfunction genOrderedPrefix(number: number, orderType: string): string {\n switch (orderType) {\n case 'a':\n return `${genAlphabetIndex(number)}.`\n case 'A':\n return `${genAlphabetIndex(number, true)}.`\n case 'i':\n return `${genRomanIndex(number)}.`\n case 'I':\n return `${genRomanIndex(number, true)}.`\n default:\n return `${number}.`\n }\n}\n\nfunction renderListElem(\n elemNode: SlateElement,\n children: VNode[] | null,\n editor: IDomEditor\n): VNode {\n ELEM_TO_EDITOR.set(elemNode, editor)\n\n const listItem = elemNode as ListItemElement\n const outline = isOutlineListNode(listItem)\n const level = getListIndent(listItem)\n const listStyle = {\n margin: `5px 0 5px ${level * 20}px`,\n display: 'flex',\n alignItems: 'baseline',\n }\n const prefixColor = getListItemColor(listItem)\n let prefix = ''\n\n if (outline) {\n prefix = getOutlineNumber(editor, listItem)\n } else if (listItem.ordered) {\n prefix = genOrderedPrefix(getOrderedItemNumber(editor, listItem), getNormalizedOrderedListType(listItem))\n } else {\n prefix = genPreSymbol(level)\n }\n\n const markerStyle = { marginRight: '0.5em', color: prefixColor }\n const marker = outline ? (\n <button\n type=\"button\"\n className=\"w-e-list-marker\"\n contentEditable={false}\n data-w-e-reserve\n aria-label={t('listModule.numberingActions')}\n title={t('listModule.numberingActions')}\n style={markerStyle}\n on={{\n mousedown: event => event.preventDefault(),\n click: event => {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.currentTarget instanceof HTMLElement) {\n showOutlineActionPanel(editor, listItem, event.currentTarget)\n }\n },\n }}\n >\n {prefix}\n </button>\n ) : (\n <span className=\"w-e-list-marker\" contentEditable={false} style={markerStyle} data-w-e-reserve>\n {prefix}\n </span>\n )\n\n const headingType = getHeadingType(listItem)\n const ContentTag = headingType == null ? 'span' : headingType.replace('header', 'h')\n\n return (\n <div className=\"w-e-list-item\" style={listStyle}>\n {marker}\n <ContentTag style={{ flex: '1', minWidth: '0', wordBreak: 'break-word' }}>{children}</ContentTag>\n </div>\n )\n}\n\nconst renderListItemConf = {\n type: 'list-item',\n renderElem: renderListElem,\n}\n\nexport default renderListItemConf\n","/**\n * @description list module entry\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport listItemToHtmlConf from './elem-to-html'\nimport { transformListHtml } from './html-transform'\nimport {\n bulletedListMenuConf,\n numberedListLowerAlphaMenuConf,\n numberedListMenuConf,\n} from './menu/index'\nimport { parseItemHtmlConf, parseListHtmlConf } from './parse-elem-html'\nimport withList from './plugin'\nimport renderListItemConf from './render-elem'\n\nconst list: Partial<IModuleConf> = {\n renderElems: [renderListItemConf],\n editorPlugin: withList,\n menus: [bulletedListMenuConf, numberedListMenuConf, numberedListLowerAlphaMenuConf],\n htmlTransform: transformListHtml,\n elemsToHtml: [listItemToHtmlConf],\n parseElemsHtml: [parseListHtmlConf, parseItemHtmlConf],\n}\n\nexport default list\n"],"names":["i18nAddResources","listModule","unOrderedList","orderedList","lowerAlphaList","numberingActions","continueNumbering","restartNumbering","ELEM_TO_EDITOR","WeakMap","getListItemColor","elem","firstTextNode","children","length","i","child","Text","isText","color","isListNode","node","DomEditor","checkNodeType","isHeadingType","value","test","getHeadingType","headingType","getListIndent","level","Math","floor","isOutlineListNode","ordered","listMode","getOutlineLevel","match","exec","Number","parseInt","getNormalizedOrderedListStart","_a","start","isNaN","getNormalizedOrderedListType","orderType","hasSameListConfig","a","b","getOutlineNumber","editor","counters","Array","from","_b","__values","_c","next","done","current","index","parentIndex","listRestart","childIndex","label","slice","join","concat","REPORTED_UNSUPPORTED_LIST_COLOR","Set","normalizeColorValue","trim","replace","toLowerCase","DEFAULT_COLOR_SET","map","genListColorClassName","normalized","input","hash","input_1","input_1_1","codePointAt","toString","hashStyleValue","hasRegisteredListColor","has","extraTokens","getConfig","styleClassTokens","normalizedColor","hasExtraRegisteredColor","resolveListColorAction","policy","getClassStylePolicy","fallback","message","reportKey","add","reportUnsupportedClassStyle","type","scene","Error","CONTAINER_TAG_STACK","STACK_EDITOR","getFallbackContainerTag","getAdjacentListItem","direction","targetIndex","targetNode","listItemToHtmlConf","elemToHtml","childrenHtml","startContainerStr","endContainerStr","listItemElem","headingTag","html","prefix","suffix","containerTag","getContainerTag","containerStartTag","attrs","orderStart","push","genContainerStartTag","bindEditor","get","bindEditorWithChildren","isArray","passedEditorWithChildren","editorContainsElem","candidate","indexOf","finalEditor","styleEditor","prevItem","nextItem","hasNestedNext","prevLevel","closeTag","pop","diff","brother","getPrevSameLevelListItem","prefixColor","textStyleMode","getTextStyleMode","colorStyle","colorClass","colorData","action","tag","getContainerStartTag","container","lastSegment","split","filter","Boolean","isFinite","getOutlineContainerStart","startAttr","getListItemStartTag","unshift","getColorAttrs","renderContainer","itemsHtml","items","item","NUMBERED_LIST_SVG","getSelectedTopLevelBlocks","selection","Editor","nodes","at","Element","isElement","isBlock","mode","__read","getHeadingLevel","BaseMenu","this","prototype","isTargetListNode","getValue","_editor","isActive","_this","selectedBlocks","every","isDisabled","some","isVoid","includes","isListableBlock","_value","active","withoutNormalizing","forEach","path","headingType_1","Transforms","setNodes","undefined","getOriginalHeadingType","outline","BulletedListMenu","_super","title","t","iconSvg","__extends","LowerAlphaListMenu","NumberedListMenu","bulletedListMenuConf","key","factory","numberedListMenuConf","numberedListLowerAlphaMenuConf","getTagName","$elem","tagName","getOrdered","parent","getOrderedStart","$list","attr","getOutlineRestart","restart","getRestart","previous","previousElementSibling","isFirstListItem","isStructuralWhitespaceText","text","appendTextLikeChildren","target","isInline","SlateElement","append","$","fn","parseItemHtmlConf","selector","parseElemHtml","indent","listAncestorCount","$current","max","getLevel","directChildren","nestedListChildren","headingNode","children_1","children_1_1","getHeadingNode","declaredMode","getListMode","normalizedChildren","getOrderedType","__assign","__spreadArray","parseListHtmlConf","_elem","flat","Infinity","getSelectedListEntry","entry","universal","clearListItem","PANEL_BY_EDITOR","updateRestart","hideOutlineActionPanel","panel","dispose","delete","createActionButton","document","onClick","button","createElement","className","textContent","addEventListener","event","preventDefault","stopPropagation","showOutlineActionPanel","marker","ownerDocument","setAttribute","continueOutlineNumbering","restartOutlineNumbering","textarea","getTextarea","$textAreaContainer","scroll","$scroll","markerRect","getBoundingClientRect","containerRect","style","top","bottom","scrollTop","left","scrollLeft","onDocumentMouseDown","Node","contains","onEditorChange","onEditorDestroyed","on","EditorEvents","CHANGE","DESTROYED","set","removeEventListener","off","remove","genAlphabetIndex","number","upper","String","result","charCode","fromCharCode","genRomanIndex","romanMap_1","romanMap_1_1","roman","list","renderElems","renderElem","elemNode","listItem","listStyle","margin","display","alignItems","genOrderedPrefix","findPath","previousIndex","previousLevel","getOrderedItemNumber","genPreSymbol","markerStyle","marginRight","jsx","contentEditable","mousedown","click","currentTarget","HTMLElement","ContentTag","flex","minWidth","wordBreak","editorPlugin","deleteBackward","handleTab","normalizeNode","insertBreak","newEditor","string","unit","Range","isExpanded","focus","offset","elemLevel","brotherPath","Path","brotherEntry","getBrotherListNodeByLevel","isCollapsed","selectedEntries","getTopSelectedElemsBySelection","listEntries","getNodeType","unwrapNodes","menus","htmlTransform","htmlList","outlineContext","flushOutline","roots","levels","lastItem","addOutlineItem","elemsToHtml","parseElemsHtml"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/utils/maps.ts","../src/utils/util.ts","../src/module/helpers.ts","../src/module/style-class.ts","../src/module/elem-to-html.ts","../src/module/html-transform.ts","../src/constants/svg.ts","../src/module/menu/BaseMenu.ts","../src/module/menu/BulletedListMenu.ts","../src/module/menu/LowerAlphaListMenu.ts","../src/module/menu/NumberedListMenu.ts","../src/module/menu/index.ts","../src/utils/dom.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/outline-actions.ts","../src/module/render-elem.tsx","../src/module/index.ts"],"sourcesContent":["/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: 'Unordered list',\n orderedList: 'Ordered list',\n lowerAlphaList: 'Ordered list (a,b,c)',\n numberingActions: 'Heading numbering actions',\n continueNumbering: 'Continue heading numbering',\n restartNumbering: 'Restart numbering',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n listModule: {\n unOrderedList: '无序列表',\n orderedList: '有序列表',\n lowerAlphaList: '有序列表(a,b,c)',\n numberingActions: '标题编号操作',\n continueNumbering: '继续标题编号',\n restartNumbering: '重新开始编号',\n },\n}\n","/**\n * @description maps\n * @author wangfupeng\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { BaseElement } from 'slate'\n\nexport const ELEM_TO_EDITOR = new WeakMap<BaseElement, IDomEditor>()\n","import { Element as SlateElement, Text } from 'slate'\n\n/**\n * 获取第一个 text-node 的颜色\n * @param elem elem\n */\nexport function getListItemColor(elem: SlateElement): string {\n const children = elem.children || []\n const length = children.length\n\n if (length === 0) { return '' }\n\n let firstTextNode\n\n for (let i = 0; i < length; i += 1) {\n if (firstTextNode) { break } // 已找到第一个 text-node ,则退出\n const child = children[i]\n\n if (Text.isText(child)) { firstTextNode = child }\n }\n\n if (firstTextNode == null) { return '' }\n return firstTextNode.color || ''\n}\n","/**\n * @description list helpers\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Node, Path } from 'slate'\n\nimport {\n HeadingType,\n ListItemElement,\n OrderedListType,\n OutlineListItemElement,\n} from './custom-types'\n\nexport function isListNode(node: Node): node is ListItemElement {\n return DomEditor.checkNodeType(node, 'list-item')\n}\n\n// Keep the legacy name for callers that distinguish the persisted list shape.\nexport const isLegacyListItem = isListNode\n\nexport function isHeadingType(value: unknown): value is HeadingType {\n return typeof value === 'string' && /^header[1-6]$/.test(value)\n}\n\nexport function getHeadingType(node: Node): HeadingType | null {\n if (!isListNode(node) || !isHeadingType(node.headingType)) {\n return null\n }\n\n return node.headingType\n}\n\nexport function getListIndent(node: Node): number {\n if (!isListNode(node)) {\n return 0\n }\n\n return node.level > 0 ? Math.floor(node.level) : 0\n}\n\nexport function getListMode(node: Node): 'standard' | 'outline' {\n return isListNode(node) && node.listMode === 'outline' ? 'outline' : 'standard'\n}\n\nexport function isOutlineListNode(node: Node): node is OutlineListItemElement {\n return (\n isListNode(node) &&\n node.ordered === true &&\n node.listMode === 'outline' &&\n isHeadingType(node.headingType)\n )\n}\n\nexport function getOutlineLevel(node: Node): number {\n const headingType = getHeadingType(node)\n const match = headingType == null ? null : /^header([1-6])$/.exec(headingType)\n\n if (match != null) {\n return Number.parseInt(match[1], 10)\n }\n\n return getListIndent(node) + 1\n}\n\nexport function getNormalizedOrderedListStart(elem: ListItemElement): number {\n const { ordered = false, start } = elem\n\n if (!ordered || typeof start !== 'number' || Number.isNaN(start)) {\n return 1\n }\n\n return start\n}\n\nexport function getNormalizedOrderedListType(elem: ListItemElement): OrderedListType {\n const { orderType } = elem\n\n if (orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return '1'\n}\n\nexport function hasSameListConfig(a: ListItemElement, b: ListItemElement): boolean {\n if (a.ordered !== b.ordered) {\n return false\n }\n if (!a.ordered) {\n return true\n }\n\n return (\n getNormalizedOrderedListType(a) === getNormalizedOrderedListType(b) &&\n getNormalizedOrderedListStart(a) === getNormalizedOrderedListStart(b)\n )\n}\n\nexport function getOrderedItemNumber(editor: IDomEditor, elem: ListItemElement): number {\n if (!elem.ordered) {\n return 1\n }\n\n const level = getListIndent(elem)\n let number = getNormalizedOrderedListStart(elem)\n const index = DomEditor.findPath(editor, elem)[0]\n\n if (index <= 0) {\n return number\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex -= 1) {\n const previous = editor.children[previousIndex]\n\n if (!isListNode(previous)) {\n break\n }\n\n const previousLevel = getListIndent(previous)\n\n if (previousLevel < level) {\n break\n }\n if (previousLevel === level) {\n if (!hasSameListConfig(previous, elem) || isOutlineListNode(previous)) {\n break\n }\n number += 1\n }\n }\n\n return number\n}\n\nexport function getOutlineNumber(editor: IDomEditor, elem: ListItemElement): string {\n const counters = Array.from({ length: 6 }, () => 0)\n\n for (const current of editor.children) {\n if (!isOutlineListNode(current)) {\n continue\n }\n\n const level = getOutlineLevel(current)\n const index = level - 1\n\n for (let parentIndex = 0; parentIndex < index; parentIndex += 1) {\n if (counters[parentIndex] === 0) {\n counters[parentIndex] = 1\n }\n }\n\n if (typeof current.listRestart === 'number' && current.listRestart > 0) {\n counters[index] = Math.floor(current.listRestart)\n } else if (counters[index] === 0) {\n counters[index] = 1\n } else {\n counters[index] += 1\n }\n\n for (let childIndex = index + 1; childIndex < counters.length; childIndex += 1) {\n counters[childIndex] = 0\n }\n\n if (current === elem) {\n const label = counters.slice(0, level).join('.')\n\n return level === 1 ? `${label}.` : label\n }\n }\n\n return ''\n}\n\n/**\n * 获取上一个同一 level 的 list item\n * @param editor editor\n * @param elem elem\n */\nexport function getBrotherListNodeByLevel(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): ListItemElement | null {\n const elemLevel = level !== undefined ? level : elem.level || 0\n let brotherPath = DomEditor.findPath(editor, elem)\n\n while (true) {\n if (brotherPath.length === 0 || brotherPath[brotherPath.length - 1] === 0) {\n return null\n }\n brotherPath = Path.previous(brotherPath)\n const brotherEntry = Editor.node(editor, brotherPath)\n\n if (brotherEntry == null || !isListNode(brotherEntry[0])) {\n return null\n }\n if (getListIndent(brotherEntry[0]) === elemLevel) {\n return brotherEntry[0]\n }\n }\n}\n\nexport function hasSameOrderWithBrother(\n editor: IDomEditor,\n elem: ListItemElement,\n level?: number\n): boolean {\n const brotherElem = getBrotherListNodeByLevel(editor, elem, level)\n\n return brotherElem != null && hasSameListConfig(brotherElem, elem)\n}\n","/**\n * @description list style class utils\n */\n\nimport { getClassStylePolicy, IDomEditor, reportUnsupportedClassStyle } from '@wangeditor-next/core'\n\nconst DEFAULT_COLORS = [\n 'rgb(0, 0, 0)',\n 'rgb(38, 38, 38)',\n 'rgb(89, 89, 89)',\n 'rgb(140, 140, 140)',\n 'rgb(191, 191, 191)',\n 'rgb(217, 217, 217)',\n 'rgb(233, 233, 233)',\n 'rgb(245, 245, 245)',\n 'rgb(250, 250, 250)',\n 'rgb(255, 255, 255)',\n 'rgb(225, 60, 57)',\n 'rgb(231, 95, 51)',\n 'rgb(235, 144, 58)',\n 'rgb(245, 219, 77)',\n 'rgb(114, 192, 64)',\n 'rgb(89, 191, 192)',\n 'rgb(66, 144, 247)',\n 'rgb(54, 88, 226)',\n 'rgb(106, 57, 201)',\n 'rgb(216, 68, 147)',\n 'rgb(251, 233, 230)',\n 'rgb(252, 237, 225)',\n 'rgb(252, 239, 212)',\n 'rgb(252, 251, 207)',\n 'rgb(231, 246, 213)',\n 'rgb(218, 244, 240)',\n 'rgb(217, 237, 250)',\n 'rgb(224, 232, 250)',\n 'rgb(237, 225, 248)',\n 'rgb(246, 226, 234)',\n 'rgb(255, 163, 158)',\n 'rgb(255, 187, 150)',\n 'rgb(255, 213, 145)',\n 'rgb(255, 251, 143)',\n 'rgb(183, 235, 143)',\n 'rgb(135, 232, 222)',\n 'rgb(145, 213, 255)',\n 'rgb(173, 198, 255)',\n 'rgb(211, 173, 247)',\n 'rgb(255, 173, 210)',\n 'rgb(255, 77, 79)',\n 'rgb(255, 122, 69)',\n 'rgb(255, 169, 64)',\n 'rgb(255, 236, 61)',\n 'rgb(115, 209, 61)',\n 'rgb(54, 207, 201)',\n 'rgb(64, 169, 255)',\n 'rgb(89, 126, 247)',\n 'rgb(146, 84, 222)',\n 'rgb(247, 89, 171)',\n 'rgb(207, 19, 34)',\n 'rgb(212, 56, 13)',\n 'rgb(212, 107, 8)',\n 'rgb(212, 177, 6)',\n 'rgb(56, 158, 13)',\n 'rgb(8, 151, 156)',\n 'rgb(9, 109, 217)',\n 'rgb(29, 57, 196)',\n 'rgb(83, 29, 171)',\n 'rgb(196, 29, 127)',\n 'rgb(130, 0, 20)',\n 'rgb(135, 20, 0)',\n 'rgb(135, 56, 0)',\n 'rgb(97, 71, 0)',\n 'rgb(19, 82, 0)',\n 'rgb(0, 71, 79)',\n 'rgb(0, 58, 140)',\n 'rgb(6, 17, 120)',\n 'rgb(34, 7, 94)',\n 'rgb(120, 6, 80)',\n]\n\nconst REPORTED_UNSUPPORTED_LIST_COLOR = new Set<string>()\n\nfunction normalizeColorValue(value: string): string {\n return (value || '').trim().replace(/\\s+/g, '').toLowerCase()\n}\n\nconst DEFAULT_COLOR_SET = new Set(DEFAULT_COLORS.map(color => normalizeColorValue(color)))\n\nfunction hashStyleValue(input: string): string {\n const MOD = 2147483647 // 2^31 - 1\n let hash = 7\n\n for (const char of input) {\n hash = (hash * 31 + (char.codePointAt(0) || 0)) % MOD\n }\n\n return hash.toString(36)\n}\n\nexport function genListColorClassName(color: string): string {\n const normalized = normalizeColorValue(color)\n\n return `w-e-list-color-${hashStyleValue(`color:${normalized}`)}`\n}\n\nfunction hasExtraRegisteredColor(editor: IDomEditor | undefined, color: string): boolean {\n const extraTokens = editor?.getConfig().styleClassTokens?.color || []\n const normalizedColor = normalizeColorValue(color)\n\n for (let i = 0; i < extraTokens.length; i += 1) {\n if (normalizeColorValue(extraTokens[i]) === normalizedColor) {\n return true\n }\n }\n\n return false\n}\n\nfunction hasRegisteredListColor(editor: IDomEditor | undefined, color: string): boolean {\n const normalized = normalizeColorValue(color)\n\n if (!normalized) { return false }\n if (DEFAULT_COLOR_SET.has(normalized)) { return true }\n if (hasExtraRegisteredColor(editor, color)) { return true }\n\n return false\n}\n\nexport function resolveListColorAction(\n editor: IDomEditor | undefined,\n color: string,\n): 'class' | 'preserve-data' | 'inline' {\n if (hasRegisteredListColor(editor, color)) {\n return 'class'\n }\n\n const policy = getClassStylePolicy(editor)\n let fallback: 'preserve-data' | 'inline' | 'throw' = 'preserve-data'\n\n if (policy === 'fallback-inline') {\n fallback = 'inline'\n }\n if (policy === 'strict') {\n fallback = 'throw'\n }\n\n const message = `[wangeditor] Unsupported list color class token color=${color}. policy=${policy}`\n const reportKey = `${color}|${fallback}`\n\n if (!REPORTED_UNSUPPORTED_LIST_COLOR.has(reportKey)) {\n REPORTED_UNSUPPORTED_LIST_COLOR.add(reportKey)\n reportUnsupportedClassStyle(editor, {\n type: 'color',\n value: color,\n scene: 'toHtml',\n fallback,\n message,\n })\n }\n\n if (fallback === 'throw') {\n throw new Error(message)\n }\n\n if (fallback === 'inline') {\n return 'inline'\n }\n\n return 'preserve-data'\n}\n","/**\n * @description to html\n * @author wangfupeng\n */\n\nimport { DomEditor, getTextStyleMode, IDomEditor } from '@wangeditor-next/core'\nimport { Element } from 'slate'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getNormalizedOrderedListStart,\n getNormalizedOrderedListType,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\n// ol ul stack for streaming list-item serialization\nconst CONTAINER_TAG_STACK: Array<string> = []\nlet STACK_EDITOR: IDomEditor | null = null\n\nfunction getContainerTag(elem: ListItemElement): 'ol' | 'ul' {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction getFallbackContainerTag(elem: ListItemElement): string {\n return elem.ordered ? 'ol' : 'ul'\n}\n\nfunction genContainerStartTag(elem: ListItemElement): string {\n const { ordered = false } = elem\n\n if (!ordered) { return '<ul>' }\n\n const attrs: string[] = []\n const orderType = getNormalizedOrderedListType(elem)\n const orderStart = getNormalizedOrderedListStart(elem)\n\n if (orderType !== '1') {\n attrs.push(`type=\"${orderType}\"`)\n }\n if (orderStart !== 1) {\n attrs.push(`start=\"${orderStart}\"`)\n }\n if (getHeadingType(elem) != null) {\n attrs.push('data-w-e-list-mode=\"standard\"')\n }\n\n if (attrs.length === 0) { return '<ol>' }\n return `<ol ${attrs.join(' ')}>`\n}\n\nfunction getAdjacentListItem(\n editor: IDomEditor,\n index: number,\n direction: 'prev' | 'next',\n): ListItemElement | null {\n if (direction === 'prev' && index === 0) { return null }\n if (direction === 'next' && index === editor.children.length - 1) { return null }\n\n const targetIndex = direction === 'prev' ? index - 1 : index + 1\n const targetNode = editor.children[targetIndex] as any\n\n if (!DomEditor.checkNodeType(targetNode, 'list-item') || isOutlineListNode(targetNode)) {\n return null\n }\n return targetNode as ListItemElement\n}\n\nfunction getPrevSameLevelListItem(\n editor: IDomEditor,\n index: number,\n level: number,\n): ListItemElement | null {\n for (let i = index - 1; i >= 0; i -= 1) {\n const node = editor.children[i] as any\n\n if (!DomEditor.checkNodeType(node, 'list-item') || isOutlineListNode(node)) { continue }\n if ((node.level || 0) === level) {\n return node as ListItemElement\n }\n }\n return null\n}\n\nfunction elemToHtml(\n elem: Element,\n childrenHtml: string,\n editor?: IDomEditor,\n): {\n html: string\n prefix?: string\n suffix?: string\n} {\n let startContainerStr = ''\n let endContainerStr = ''\n\n const listItemElem = elem as ListItemElement\n const headingType = getHeadingType(listItemElem)\n const headingTag = headingType == null ? null : headingType.replace('header', 'h')\n\n if (isOutlineListNode(listItemElem) && headingTag != null) {\n return {\n html: `<${headingTag}>${childrenHtml}</${headingTag}>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (headingTag != null) {\n childrenHtml = `<${headingTag}>${childrenHtml}</${headingTag}>`\n }\n\n const { level = 0 } = listItemElem\n const containerTag = getContainerTag(listItemElem)\n const containerStartTag = genContainerStartTag(listItemElem)\n const bindEditor = ELEM_TO_EDITOR.get(elem)\n const bindEditorWithChildren = bindEditor && Array.isArray((bindEditor as any).children)\n ? bindEditor\n : null\n const passedEditorWithChildren = editor && Array.isArray((editor as any).children)\n ? editor\n : null\n const editorContainsElem = (candidate: IDomEditor | null | undefined) => (\n !!candidate && candidate.children.indexOf(elem as any) >= 0\n )\n let finalEditor = passedEditorWithChildren || bindEditorWithChildren\n\n if (editorContainsElem(passedEditorWithChildren)) {\n finalEditor = passedEditorWithChildren\n } else if (editorContainsElem(bindEditorWithChildren)) {\n finalEditor = bindEditorWithChildren\n }\n const styleEditor = editor || bindEditor\n\n if (finalEditor == null) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n if (STACK_EDITOR !== finalEditor) {\n CONTAINER_TAG_STACK.length = 0\n STACK_EDITOR = finalEditor\n }\n\n const index = finalEditor.children.indexOf(elem as any)\n\n if (index < 0) {\n return {\n html: `<li>${childrenHtml}</li>`,\n prefix: '',\n suffix: '',\n }\n }\n\n const prevItem = getAdjacentListItem(finalEditor, index, 'prev')\n const nextItem = getAdjacentListItem(finalEditor, index, 'next')\n const hasNestedNext = !!nextItem && (nextItem.level || 0) > level\n\n if (!prevItem) {\n // list block start\n CONTAINER_TAG_STACK.length = 0\n for (let i = 0; i < level + 1; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n const prevLevel = prevItem.level || 0\n\n if (level > prevLevel) {\n // Enter nested lists inside previous <li>.\n for (let i = 0; i < level - prevLevel; i += 1) {\n startContainerStr += containerStartTag\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else if (level === prevLevel) {\n // Split same-level lists when ordered/type/start differ.\n if (!hasSameListConfig(prevItem, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n } else {\n // Climb up: close nested list containers and parent <li>.\n let diff = prevLevel - level\n\n while (diff > 0) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(prevItem)\n\n startContainerStr += `</${closeTag}></li>`\n diff -= 1\n }\n\n // Split target-level list container when config changed.\n const brother = getPrevSameLevelListItem(finalEditor, index, level)\n\n if (brother && !hasSameListConfig(brother, listItemElem)) {\n const closeTag = CONTAINER_TAG_STACK.pop() || getFallbackContainerTag(brother)\n\n startContainerStr += `</${closeTag}>${containerStartTag}`\n CONTAINER_TAG_STACK.push(containerTag)\n }\n }\n }\n\n // 获取前缀颜色\n const prefixColor = getListItemColor(elem)\n const textStyleMode = getTextStyleMode(styleEditor)\n let colorStyle = ''\n let colorClass = ''\n let colorData = ''\n\n if (prefixColor) {\n if (textStyleMode === 'class') {\n colorData = ` data-w-e-color=\"${prefixColor}\"`\n const action = resolveListColorAction(styleEditor, prefixColor)\n\n if (action === 'class') {\n colorClass = ` class=\"${genListColorClassName(prefixColor)}\"`\n } else if (action === 'inline') {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n } else {\n colorStyle = ` style=\"color:${prefixColor}\"`\n }\n }\n\n const html = `<li${colorClass}${colorData}${colorStyle}>${childrenHtml}${hasNestedNext ? '' : '</li>'}`\n\n if (!nextItem) {\n // list block end\n while (CONTAINER_TAG_STACK.length > 0) {\n const tag = CONTAINER_TAG_STACK.pop()\n\n if (!tag) { break }\n endContainerStr += `</${tag}>`\n if (CONTAINER_TAG_STACK.length > 0) {\n endContainerStr += '</li>'\n }\n }\n STACK_EDITOR = null\n }\n\n return {\n html,\n prefix: startContainerStr,\n suffix: endContainerStr,\n }\n}\n\nconst listItemToHtmlConf = {\n type: 'list-item',\n elemToHtml,\n}\n\nexport default listItemToHtmlConf\n","/**\n * @description compose semantic outline HTML from additive list-item metadata\n */\n\nimport { getTextStyleMode, HtmlTransformFnType, IDomEditor } from '@wangeditor-next/core'\n\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getOutlineLevel,\n getOutlineNumber,\n hasSameListConfig,\n isOutlineListNode,\n} from './helpers'\nimport { genListColorClassName, resolveListColorAction } from './style-class'\n\ntype OutlineItem = {\n node: ListItemElement\n html: string\n children: OutlineContainer[]\n}\n\ntype OutlineContainer = {\n node: ListItemElement\n items: OutlineItem[]\n}\n\ntype OutlineLevel = {\n container: OutlineContainer\n lastItem: OutlineItem\n}\n\ntype OutlineContext = {\n roots: OutlineContainer[]\n levels: OutlineLevel[]\n}\n\nfunction getOutlineContainerStart(editor: IDomEditor, node: ListItemElement): number {\n const lastSegment = getOutlineNumber(editor, node).split('.').filter(Boolean).pop()\n const start = Number.parseInt(lastSegment || '', 10)\n\n return Number.isFinite(start) && start > 0 ? start : 1\n}\n\nfunction getContainerStartTag(container: OutlineContainer, editor: IDomEditor): string {\n const start = getOutlineContainerStart(editor, container.node)\n const startAttr = start === 1 ? '' : ` start=\"${start}\"`\n\n return `<ol${startAttr} data-w-e-list-mode=\"outline\">`\n}\n\nfunction getColorAttrs(node: ListItemElement, editor: IDomEditor): string[] {\n const color = getListItemColor(node)\n\n if (!color) {\n return []\n }\n\n if (getTextStyleMode(editor) !== 'class') {\n return [`style=\"color:${color}\"`]\n }\n\n const attrs = [`data-w-e-color=\"${color}\"`]\n const action = resolveListColorAction(editor, color)\n\n if (action === 'class') {\n attrs.unshift(`class=\"${genListColorClassName(color)}\"`)\n } else if (action === 'inline') {\n attrs.push(`style=\"color:${color}\"`)\n }\n\n return attrs\n}\n\nfunction getListItemStartTag(node: ListItemElement, editor: IDomEditor): string {\n const attrs = getColorAttrs(node, editor)\n\n attrs.push(`data-w-e-list-indent=\"${getOutlineLevel(node) - 1}\"`)\n\n if (typeof node.listRestart === 'number') {\n attrs.push(`data-w-e-list-restart=\"${node.listRestart}\"`)\n }\n attrs.push(`data-w-e-outline-number=\"${getOutlineNumber(editor, node)}\"`)\n\n return `<li ${attrs.join(' ')}>`\n}\n\nfunction renderContainer(container: OutlineContainer, editor: IDomEditor): string {\n const itemsHtml = container.items\n .map(item => {\n const childrenHtml = item.children.map(child => renderContainer(child, editor)).join('')\n\n return `${getListItemStartTag(item.node, editor)}${item.html}${childrenHtml}</li>`\n })\n .join('')\n\n return `${getContainerStartTag(container, editor)}${itemsHtml}</ol>`\n}\n\nfunction addOutlineItem(\n roots: OutlineContainer[],\n levels: OutlineLevel[],\n node: ListItemElement,\n html: string\n): OutlineItem {\n let level = Math.max(0, getOutlineLevel(node) - 1)\n\n // A standalone h3 cannot have a semantic parent. Preserve the source depth\n // in data-w-e-list-indent while emitting valid nested HTML.\n if (level > levels.length) {\n level = levels.length\n }\n\n levels.length = level + 1\n const parent = level > 0 ? levels[level - 1]?.lastItem : null\n const current = levels[level]\n const restart = typeof node.listRestart === 'number'\n const needsNewContainer =\n current == null || !hasSameListConfig(current.container.node, node) || restart\n\n let container: OutlineContainer\n\n if (needsNewContainer) {\n container = { node, items: [] }\n if (parent != null) {\n parent.children.push(container)\n } else {\n roots.push(container)\n }\n } else {\n container = current.container\n }\n\n const item: OutlineItem = { node, html, children: [] }\n\n container.items.push(item)\n levels[level] = { container, lastItem: item }\n\n return item\n}\n\n/**\n * List-item serialization remains backward compatible for ordinary lists.\n * Only outline list items need document-level composition to create valid\n * `ol > li > hN` structure.\n */\nexport const transformListHtml: HtmlTransformFnType = (htmlList, nodes, editor) => {\n const result: string[] = []\n let outlineContext: OutlineContext | null = null\n\n const flushOutline = () => {\n if (outlineContext == null || outlineContext.roots.length === 0) {\n return\n }\n\n result.push(outlineContext.roots.map(container => renderContainer(container, editor)).join(''))\n outlineContext = null\n }\n\n nodes.forEach((node, index) => {\n const html = htmlList[index] || ''\n\n if (isOutlineListNode(node)) {\n if (outlineContext == null) {\n outlineContext = { roots: [], levels: [] }\n }\n\n addOutlineItem(outlineContext.roots, outlineContext.levels, node, html)\n return\n }\n\n flushOutline()\n result.push(html)\n })\n\n flushOutline()\n\n return result\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 无序列表\nexport const BULLETED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z\"></path></svg>'\n\n// 有序列表\nexport const NUMBERED_LIST_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z\"></path></svg>'\n","/**\n * @description list menu base class\n * @author wangfupeng\n */\n\nimport { IButtonMenu, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\n\nimport { HeadingType, ListItemElement, OrderedListType } from '../custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n isHeadingType,\n isListNode,\n} from '../helpers'\n\nfunction getSelectedTopLevelBlocks(editor: IDomEditor): Array<[Element, Path]> {\n if (editor.selection == null) {\n return []\n }\n\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction isListableBlock(editor: IDomEditor, elem: Element): boolean {\n if (Editor.isVoid(editor, elem)) {\n return false\n }\n\n return !['pre', 'code', 'table', 'table-row', 'table-cell'].includes(elem.type)\n}\n\nfunction getHeadingLevel(headingType: HeadingType): number {\n return Number.parseInt(headingType.slice('header'.length), 10) - 1\n}\n\nfunction getOriginalHeadingType(node: Element): HeadingType | null {\n if (isListNode(node)) {\n return getHeadingType(node)\n }\n\n return isHeadingType(node.type) ? node.type : null\n}\n\nabstract class BaseMenu implements IButtonMenu {\n readonly type = 'list-item'\n\n abstract readonly ordered: boolean\n\n readonly orderType?: OrderedListType\n\n abstract readonly title: string\n\n abstract readonly iconSvg: string\n\n readonly tag = 'button'\n\n private isTargetListNode(node: Node): boolean {\n if (!isListNode(node) || Boolean(node.ordered) !== this.ordered) {\n return false\n }\n if (!this.ordered) {\n return true\n }\n\n return getNormalizedOrderedListType(node) === (this.orderType || '1')\n }\n\n getValue(_editor: IDomEditor): string | boolean {\n return ''\n }\n\n isActive(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length > 0 && selectedBlocks.every(([node]) => this.isTargetListNode(node))\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n return selectedBlocks.length === 0 || selectedBlocks.some(([node]) => !isListableBlock(editor, node))\n }\n\n exec(editor: IDomEditor, _value: string | boolean): void {\n const active = this.isActive(editor)\n const selectedBlocks = getSelectedTopLevelBlocks(editor)\n\n if (selectedBlocks.length === 0) {\n return\n }\n\n Editor.withoutNormalizing(editor, () => {\n selectedBlocks.forEach(([node, path]) => {\n if (active) {\n const listNode = node as ListItemElement\n const headingType = getHeadingType(listNode)\n\n Transforms.setNodes(\n editor,\n {\n type: headingType || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n return\n }\n\n const headingType = getOriginalHeadingType(node)\n const outline = this.ordered && this.orderType == null && headingType != null\n\n Transforms.setNodes(\n editor,\n {\n type: 'list-item',\n ordered: this.ordered,\n level: outline ? getHeadingLevel(headingType as HeadingType) : getListIndent(node),\n start: undefined,\n orderType: this.ordered ? this.orderType : undefined,\n headingType: outline ? headingType : undefined,\n listMode: outline ? 'outline' : undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n })\n })\n }\n}\n\nexport default BaseMenu\n","/**\n * @description bulleted list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { BULLETED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass BulletedListMenu extends BaseMenu {\n readonly ordered = false\n\n readonly title = t('listModule.unOrderedList')\n\n readonly iconSvg = BULLETED_LIST_SVG\n}\n\nexport default BulletedListMenu\n","/**\n * @description lower-alpha ordered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport { OrderedListType } from '../custom-types'\nimport BaseMenu from './BaseMenu'\n\nclass LowerAlphaListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly orderType: OrderedListType = 'a'\n\n readonly title = t('listModule.lowerAlphaList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default LowerAlphaListMenu\n","/**\n * @description numbered list menu\n * @author wangfupeng\n */\n\nimport { t } from '@wangeditor-next/core'\n\nimport { NUMBERED_LIST_SVG } from '../../constants/svg'\nimport BaseMenu from './BaseMenu'\n\nclass NumberedListMenu extends BaseMenu {\n readonly ordered = true\n\n readonly title = t('listModule.orderedList')\n\n readonly iconSvg = NUMBERED_LIST_SVG\n}\n\nexport default NumberedListMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport BulletedListMenu from './BulletedListMenu'\nimport LowerAlphaListMenu from './LowerAlphaListMenu'\nimport NumberedListMenu from './NumberedListMenu'\n\nexport const bulletedListMenuConf = {\n key: 'bulletedList',\n factory() {\n return new BulletedListMenu()\n },\n}\n\nexport const numberedListMenuConf = {\n key: 'numberedList',\n factory() {\n return new NumberedListMenu()\n },\n}\n\nexport const numberedListLowerAlphaMenuConf = {\n key: 'numberedListLowerAlpha',\n factory() {\n return new LowerAlphaListMenu()\n },\n}\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, attr, Dom7Array, parent,\n} from 'dom7'\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nif (append) { $.fn.append = append }\n// if (on) $.fn.on = on\n// if (focus) $.fn.focus = focus\nif (attr) { $.fn.attr = attr }\n// if (val) $.fn.val = val\n// if (html) $.fn.html = html\nif (parent) { $.fn.parent = parent }\n// if (hasClass) $.fn.hasClass = hasClass\n// if (empty) $.fn.empty = empty\n\nexport default $\nexport {\n DOMComment, DOMElement, DOMNode, DOMRange, DOMSelection, DOMStaticRange, DOMText,\n}\n\n/**\n * 获取 tagName lower-case\n * @param $elem $elem\n */\nexport function getTagName($elem: Dom7Array): string {\n if ($elem.length === 0) { return '' }\n const elem = $elem[0]\n\n if (elem.nodeType !== DOMNode.ELEMENT_NODE) { return '' }\n return elem.tagName.toLowerCase()\n}\n","/**\n * @description parse list HTML\n */\n\nimport { IDomEditor } from '@wangeditor-next/core'\nimport { Dom7Array } from 'dom7'\nimport { Descendant, Element as SlateElement, Text } from 'slate'\n\nimport $, { DOMElement, getTagName } from '../utils/dom'\nimport { HeadingType, ListItemElement, OrderedListType } from './custom-types'\nimport { isHeadingType, isListNode } from './helpers'\n\nfunction getOrdered($elem: Dom7Array): boolean {\n return getTagName($elem.parent()) === 'ol'\n}\n\nfunction getOrderedStart($elem: Dom7Array): number | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const value = ($list.attr('start') || '').trim()\n const start = Number.parseInt(value, 10)\n\n return Number.isNaN(start) ? undefined : start\n}\n\nfunction getOrderedType($elem: Dom7Array): OrderedListType | undefined {\n const $list = $elem.parent()\n\n if (getTagName($list) !== 'ol') {\n return undefined\n }\n\n const orderType = ($list.attr('type') || '').trim()\n\n if (orderType === '1' || orderType === 'a' || orderType === 'A' || orderType === 'i' || orderType === 'I') {\n return orderType\n }\n\n return undefined\n}\n\nfunction getLevel($elem: Dom7Array): number {\n const indent = ($elem.attr('data-w-e-list-indent') || '').trim()\n\n if (/^\\d+$/.test(indent)) {\n return Number.parseInt(indent, 10)\n }\n\n let listAncestorCount = 0\n let $current: Dom7Array = $elem.parent()\n\n while ($current.length > 0) {\n const tagName = getTagName($current)\n\n if (tagName === 'ul' || tagName === 'ol') {\n listAncestorCount += 1\n }\n $current = $current.parent()\n }\n\n return Math.max(0, listAncestorCount - 1)\n}\n\nfunction getListMode($elem: Dom7Array, children: Descendant[]): 'standard' | 'outline' {\n const declaredMode = $elem.parent().attr('data-w-e-list-mode')\n\n if (declaredMode === 'outline' || declaredMode === 'standard') {\n return declaredMode\n }\n\n return getOrdered($elem) && children.some(child => {\n return SlateElement.isElement(child) && isHeadingType(child.type)\n })\n ? 'outline'\n : 'standard'\n}\n\nfunction getRestart($elem: Dom7Array): number | undefined {\n const value = ($elem.attr('data-w-e-list-restart') || '').trim()\n\n if (!/^\\d+$/.test(value)) {\n return undefined\n }\n\n const restart = Number.parseInt(value, 10)\n\n return restart > 0 ? restart : undefined\n}\n\nfunction isFirstListItem($elem: Dom7Array): boolean {\n let previous = $elem[0]?.previousElementSibling\n\n while (previous != null) {\n if (previous.tagName.toLowerCase() === 'li') {\n return false\n }\n previous = previous.previousElementSibling\n }\n\n return true\n}\n\nfunction getOutlineRestart($elem: Dom7Array): number | undefined {\n const restart = getRestart($elem)\n\n if (restart !== undefined) {\n return restart\n }\n if ($elem.attr('data-w-e-outline-number') != null || !isFirstListItem($elem)) {\n return undefined\n }\n\n return getOrderedStart($elem)\n}\n\nfunction isStructuralWhitespaceText(child: Descendant): boolean {\n return Text.isText(child) && child.text.trim() === ''\n}\n\nfunction appendTextLikeChildren(target: Descendant[], children: Descendant[], editor: IDomEditor) {\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (Text.isText(child) || editor.isInline(child)) {\n target.push(child)\n return\n }\n if (SlateElement.isElement(child)) {\n appendTextLikeChildren(target, child.children, editor)\n }\n })\n}\n\nfunction getHeadingNode(children: Descendant[]): SlateElement | null {\n for (const child of children) {\n if (SlateElement.isElement(child) && isHeadingType(child.type)) {\n return child\n }\n }\n\n return null\n}\n\nfunction parseItemHtml(\n elem: DOMElement,\n children: Descendant[],\n editor: IDomEditor\n): ListItemElement | ListItemElement[] {\n const $elem = $(elem)\n const level = getLevel($elem)\n const directChildren: Descendant[] = []\n const nestedListChildren: ListItemElement[] = []\n\n children.forEach(child => {\n if (isStructuralWhitespaceText(child)) {\n return\n }\n if (isListNode(child) && child.level > level) {\n nestedListChildren.push(child)\n return\n }\n directChildren.push(child)\n })\n\n const headingNode = getHeadingNode(directChildren)\n const headingType = headingNode != null && isHeadingType(headingNode.type)\n ? (headingNode.type as HeadingType)\n : undefined\n const listMode = getListMode($elem, directChildren)\n const normalizedChildren: Descendant[] = []\n\n appendTextLikeChildren(normalizedChildren, directChildren, editor)\n\n if (normalizedChildren.length === 0) {\n normalizedChildren.push(\n nestedListChildren.length > 0 ? { text: '' } : { text: $elem.text().replace(/\\s+/gm, ' ') }\n )\n }\n\n const ordered = getOrdered($elem)\n const start = getOrderedStart($elem)\n const orderType = getOrderedType($elem)\n const outline = ordered && listMode === 'outline' && headingType !== undefined\n const listRestart = outline ? getOutlineRestart($elem) : undefined\n const item: ListItemElement = {\n type: 'list-item',\n ordered,\n level: outline ? Number.parseInt(headingType.slice('header'.length), 10) - 1 : level,\n ...(start !== undefined && !outline ? { start } : {}),\n ...(orderType !== undefined ? { orderType } : {}),\n ...(headingType !== undefined ? { headingType } : {}),\n ...(outline ? { listMode: 'outline' as const } : {}),\n ...(listRestart !== undefined ? { listRestart } : {}),\n // @ts-ignore List items retain the established text/inline children shape.\n children: normalizedChildren,\n }\n\n return nestedListChildren.length === 0 ? item : [item, ...nestedListChildren]\n}\n\nexport const parseItemHtmlConf = {\n selector: 'li:not([data-w-e-type])',\n parseElemHtml: parseItemHtml,\n}\n\nfunction parseListHtml(\n _elem: DOMElement,\n children: Descendant[],\n _editor: IDomEditor\n): ListItemElement[] {\n // @ts-ignore Nested lists return arrays which must be flattened.\n return children.flat(Infinity)\n}\n\nexport const parseListHtmlConf = {\n selector: 'ul:not([data-w-e-type]),ol:not([data-w-e-type])',\n parseElemHtml: parseListHtml,\n}\n","/**\n * @description list editor plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/core'\nimport { Editor, Element, Node, Path, Range, Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\nimport {\n getBrotherListNodeByLevel,\n getHeadingType,\n getListIndent,\n isListNode,\n isOutlineListNode,\n} from './helpers'\n\nfunction getTopSelectedElemsBySelection(editor: IDomEditor): Array<[Element, Path]> {\n const entries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: node => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: 'highest',\n })\n ) as Array<[Element, Path]>\n\n return entries.filter(([, path]) => path.length === 1)\n}\n\nfunction getSelectedListEntry(editor: IDomEditor): [ListItemElement, Path] | null {\n const [entry] = Editor.nodes(editor, {\n at: editor.selection || undefined,\n match: isListNode,\n universal: true,\n })\n\n return entry == null ? null : (entry as [ListItemElement, Path])\n}\n\nfunction clearListItem(editor: IDomEditor, path: Path, node: ListItemElement, type?: string) {\n Transforms.setNodes(\n editor,\n {\n type: type || getHeadingType(node) || 'paragraph',\n ordered: undefined,\n level: undefined,\n start: undefined,\n orderType: undefined,\n headingType: undefined,\n listMode: undefined,\n listRestart: undefined,\n } as any,\n { at: path }\n )\n}\n\nfunction withList<T extends IDomEditor>(editor: T): T {\n const { deleteBackward, handleTab, normalizeNode, insertBreak } = editor\n const newEditor = editor\n\n newEditor.insertBreak = () => {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null) {\n return insertBreak()\n }\n\n const [listItem, path] = entry\n\n if (Node.string(listItem) === '') {\n clearListItem(newEditor, path, listItem, 'paragraph')\n return\n }\n\n return insertBreak()\n }\n\n newEditor.deleteBackward = unit => {\n const { selection } = newEditor\n\n if (selection == null || Range.isExpanded(selection)) {\n deleteBackward(unit)\n return\n }\n\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || selection.focus.offset !== 0) {\n deleteBackward(unit)\n return\n }\n\n const [listItem, path] = entry\n\n if (isOutlineListNode(listItem)) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const level = getListIndent(listItem)\n\n if (level <= 0) {\n clearListItem(newEditor, path, listItem)\n return\n }\n\n const brother = getBrotherListNodeByLevel(editor, listItem, level - 1)\n\n if (brother != null) {\n Transforms.setNodes(\n newEditor,\n {\n level: level - 1,\n ordered: brother.ordered,\n start: brother.ordered ? brother.start : undefined,\n orderType: brother.ordered ? brother.orderType : undefined,\n },\n { at: path }\n )\n } else {\n Transforms.setNodes(newEditor, { level: level - 1 }, { at: path })\n }\n }\n\n newEditor.handleTab = () => {\n const { selection } = newEditor\n\n if (selection == null) {\n handleTab()\n return\n }\n\n if (Range.isCollapsed(selection)) {\n const entry = getSelectedListEntry(newEditor)\n\n if (entry == null || isOutlineListNode(entry[0]) || selection.focus.offset !== 0) {\n handleTab()\n return\n }\n\n const [listItem, path] = entry\n\n Transforms.setNodes(newEditor, { level: getListIndent(listItem) + 1 }, { at: path })\n return\n }\n\n const selectedEntries = getTopSelectedElemsBySelection(newEditor)\n const listEntries = selectedEntries.filter(([node]) => {\n return isListNode(node) && !isOutlineListNode(node)\n })\n\n if (listEntries.length !== selectedEntries.length || listEntries.length <= 1) {\n handleTab()\n return\n }\n\n listEntries.forEach(([node, path]) => {\n Transforms.setNodes(newEditor, { level: getListIndent(node) + 1 }, { at: path })\n })\n }\n\n newEditor.normalizeNode = ([node, path]) => {\n const type = DomEditor.getNodeType(node)\n\n if (type === 'bulleted-list' || type === 'numbered-list') {\n Transforms.unwrapNodes(newEditor, { at: path })\n }\n\n return normalizeNode([node, path])\n }\n\n return newEditor\n}\n\nexport default withList\n","/**\n * @description outline numbering marker actions\n */\n\nimport { DomEditor, EditorEvents, IDomEditor, t } from '@wangeditor-next/core'\nimport { Transforms } from 'slate'\n\nimport { ListItemElement } from './custom-types'\n\ntype OutlineActionPanel = {\n elem: HTMLElement\n dispose: () => void\n}\n\nconst PANEL_BY_EDITOR = new WeakMap<IDomEditor, OutlineActionPanel>()\n\nfunction updateRestart(editor: IDomEditor, node: ListItemElement, restart?: number) {\n const index = editor.children.indexOf(node)\n\n if (index < 0) {\n return\n }\n\n Transforms.setNodes(editor, { listRestart: restart }, { at: [index] })\n}\n\nexport function continueOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node)\n}\n\nexport function restartOutlineNumbering(editor: IDomEditor, node: ListItemElement) {\n updateRestart(editor, node, 1)\n}\n\nexport function hideOutlineActionPanel(editor: IDomEditor) {\n const panel = PANEL_BY_EDITOR.get(editor)\n\n if (panel == null) {\n return\n }\n panel.dispose()\n PANEL_BY_EDITOR.delete(editor)\n}\n\nfunction createActionButton(\n document: Document,\n label: string,\n onClick: () => void\n): HTMLButtonElement {\n const button = document.createElement('button')\n\n button.type = 'button'\n button.className = 'w-e-list-outline-action'\n button.textContent = label\n button.addEventListener('mousedown', event => event.preventDefault())\n button.addEventListener('click', event => {\n event.preventDefault()\n event.stopPropagation()\n onClick()\n })\n\n return button\n}\n\nexport function showOutlineActionPanel(editor: IDomEditor, node: ListItemElement, marker: HTMLElement) {\n if (editor.isDisabled()) {\n return\n }\n\n hideOutlineActionPanel(editor)\n\n const document = marker.ownerDocument\n const panel = document.createElement('div')\n\n panel.className = 'w-e-list-outline-actions'\n panel.setAttribute('role', 'menu')\n panel.addEventListener('mousedown', event => event.preventDefault())\n panel.append(\n createActionButton(document, t('listModule.continueNumbering'), () => {\n continueOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n }),\n createActionButton(document, t('listModule.restartNumbering'), () => {\n restartOutlineNumbering(editor, node)\n hideOutlineActionPanel(editor)\n })\n )\n\n const textarea = DomEditor.getTextarea(editor)\n const container = textarea.$textAreaContainer[0] as HTMLElement\n const scroll = textarea.$scroll[0] as HTMLElement\n const markerRect = marker.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n\n panel.style.top = `${markerRect.bottom - containerRect.top + scroll.scrollTop + 4}px`\n panel.style.left = `${markerRect.left - containerRect.left + scroll.scrollLeft}px`\n container.append(panel)\n\n const onDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n if (panel.contains(target) || marker.contains(target)) {\n return\n }\n\n hideOutlineActionPanel(editor)\n }\n const onEditorChange = () => hideOutlineActionPanel(editor)\n const onEditorDestroyed = () => hideOutlineActionPanel(editor)\n\n document.addEventListener('mousedown', onDocumentMouseDown, true)\n editor.on(EditorEvents.CHANGE, onEditorChange)\n editor.on(EditorEvents.DESTROYED, onEditorDestroyed)\n\n PANEL_BY_EDITOR.set(editor, {\n elem: panel,\n dispose: () => {\n document.removeEventListener('mousedown', onDocumentMouseDown, true)\n editor.off(EditorEvents.CHANGE, onEditorChange)\n editor.off(EditorEvents.DESTROYED, onEditorDestroyed)\n panel.remove()\n },\n })\n}\n","/**\n * @description render list elem\n * @author wangfupeng\n */\n\nimport { IDomEditor, t } from '@wangeditor-next/core'\nimport { Element as SlateElement } from 'slate'\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { jsx, VNode } from 'snabbdom'\n\nimport { ELEM_TO_EDITOR } from '../utils/maps'\nimport { getListItemColor } from '../utils/util'\nimport { ListItemElement } from './custom-types'\nimport {\n getHeadingType,\n getListIndent,\n getNormalizedOrderedListType,\n getOrderedItemNumber,\n getOutlineNumber,\n isOutlineListNode,\n} from './helpers'\nimport { showOutlineActionPanel } from './outline-actions'\n\nfunction genPreSymbol(level = 0): string {\n switch (level) {\n case 0:\n return '•'\n case 1:\n return '◦'\n default:\n return '▪'\n }\n}\n\nfunction genAlphabetIndex(number: number, upper = false): string {\n if (number <= 0) {\n return String(number)\n }\n\n let current = number\n let result = ''\n\n while (current > 0) {\n const remainder = (current - 1) % 26\n const charCode = (upper ? 65 : 97) + remainder\n\n result = String.fromCharCode(charCode) + result\n current = Math.floor((current - 1) / 26)\n }\n\n return result\n}\n\nfunction genRomanIndex(number: number, upper = false): string {\n if (number <= 0 || number >= 4000) {\n return String(number)\n }\n\n const romanMap: Array<[number, string]> = [\n [1000, 'M'],\n [900, 'CM'],\n [500, 'D'],\n [400, 'CD'],\n [100, 'C'],\n [90, 'XC'],\n [50, 'L'],\n [40, 'XL'],\n [10, 'X'],\n [9, 'IX'],\n [5, 'V'],\n [4, 'IV'],\n [1, 'I'],\n ]\n let current = number\n let result = ''\n\n for (const [value, roman] of romanMap) {\n while (current >= value) {\n result += roman\n current -= value\n }\n }\n\n return upper ? result : result.toLowerCase()\n}\n\nfunction genOrderedPrefix(number: number, orderType: string): string {\n switch (orderType) {\n case 'a':\n return `${genAlphabetIndex(number)}.`\n case 'A':\n return `${genAlphabetIndex(number, true)}.`\n case 'i':\n return `${genRomanIndex(number)}.`\n case 'I':\n return `${genRomanIndex(number, true)}.`\n default:\n return `${number}.`\n }\n}\n\nfunction renderListElem(\n elemNode: SlateElement,\n children: VNode[] | null,\n editor: IDomEditor\n): VNode {\n ELEM_TO_EDITOR.set(elemNode, editor)\n\n const listItem = elemNode as ListItemElement\n const outline = isOutlineListNode(listItem)\n const level = getListIndent(listItem)\n const listStyle = {\n margin: `5px 0 5px ${level * 20}px`,\n display: 'flex',\n alignItems: 'baseline',\n }\n const prefixColor = getListItemColor(listItem)\n let prefix = ''\n\n if (outline) {\n prefix = getOutlineNumber(editor, listItem)\n } else if (listItem.ordered) {\n prefix = genOrderedPrefix(getOrderedItemNumber(editor, listItem), getNormalizedOrderedListType(listItem))\n } else {\n prefix = genPreSymbol(level)\n }\n\n const markerStyle = { marginRight: '0.5em', color: prefixColor }\n const marker = outline ? (\n <button\n type=\"button\"\n className=\"w-e-list-marker\"\n contentEditable={false}\n data-w-e-reserve\n aria-label={t('listModule.numberingActions')}\n title={t('listModule.numberingActions')}\n style={markerStyle}\n on={{\n mousedown: event => event.preventDefault(),\n click: event => {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.currentTarget instanceof HTMLElement) {\n showOutlineActionPanel(editor, listItem, event.currentTarget)\n }\n },\n }}\n >\n {prefix}\n </button>\n ) : (\n <span className=\"w-e-list-marker\" contentEditable={false} style={markerStyle} data-w-e-reserve>\n {prefix}\n </span>\n )\n\n const headingType = getHeadingType(listItem)\n const ContentTag = headingType == null ? 'span' : headingType.replace('header', 'h')\n\n return (\n <div className=\"w-e-list-item\" style={listStyle}>\n {marker}\n <ContentTag style={{ flex: '1', minWidth: '0', wordBreak: 'break-word' }}>{children}</ContentTag>\n </div>\n )\n}\n\nconst renderListItemConf = {\n type: 'list-item',\n renderElem: renderListElem,\n}\n\nexport default renderListItemConf\n","/**\n * @description list module entry\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport listItemToHtmlConf from './elem-to-html'\nimport { transformListHtml } from './html-transform'\nimport {\n bulletedListMenuConf,\n numberedListLowerAlphaMenuConf,\n numberedListMenuConf,\n} from './menu/index'\nimport { parseItemHtmlConf, parseListHtmlConf } from './parse-elem-html'\nimport withList from './plugin'\nimport renderListItemConf from './render-elem'\n\nconst list: Partial<IModuleConf> = {\n renderElems: [renderListItemConf],\n editorPlugin: withList,\n menus: [bulletedListMenuConf, numberedListMenuConf, numberedListLowerAlphaMenuConf],\n htmlTransform: transformListHtml,\n elemsToHtml: [listItemToHtmlConf],\n parseElemsHtml: [parseListHtmlConf, parseItemHtmlConf],\n}\n\nexport default list\n"],"names":["i18nAddResources","listModule","unOrderedList","orderedList","lowerAlphaList","numberingActions","continueNumbering","restartNumbering","ELEM_TO_EDITOR","WeakMap","getListItemColor","elem","firstTextNode","children","length","i","child","Text","isText","color","isListNode","node","DomEditor","checkNodeType","isHeadingType","value","test","getHeadingType","headingType","getListIndent","level","Math","floor","isOutlineListNode","ordered","listMode","getOutlineLevel","match","exec","Number","parseInt","getNormalizedOrderedListStart","_a","start","isNaN","getNormalizedOrderedListType","orderType","hasSameListConfig","a","b","getOutlineNumber","editor","counters","Array","from","_b","__values","_c","next","done","current","index","parentIndex","listRestart","childIndex","label","slice","join","concat","REPORTED_UNSUPPORTED_LIST_COLOR","Set","normalizeColorValue","trim","replace","toLowerCase","DEFAULT_COLOR_SET","map","genListColorClassName","normalized","input","hash","input_1","input_1_1","codePointAt","toString","hashStyleValue","hasRegisteredListColor","has","extraTokens","getConfig","styleClassTokens","normalizedColor","hasExtraRegisteredColor","resolveListColorAction","policy","getClassStylePolicy","fallback","message","reportKey","add","reportUnsupportedClassStyle","type","scene","Error","CONTAINER_TAG_STACK","STACK_EDITOR","getFallbackContainerTag","getAdjacentListItem","direction","targetIndex","targetNode","listItemToHtmlConf","elemToHtml","childrenHtml","startContainerStr","endContainerStr","listItemElem","headingTag","html","prefix","suffix","containerTag","getContainerTag","containerStartTag","attrs","orderStart","push","genContainerStartTag","bindEditor","get","bindEditorWithChildren","isArray","passedEditorWithChildren","editorContainsElem","candidate","indexOf","finalEditor","styleEditor","prevItem","nextItem","hasNestedNext","prevLevel","closeTag","pop","diff","brother","getPrevSameLevelListItem","prefixColor","textStyleMode","getTextStyleMode","colorStyle","colorClass","colorData","action","tag","getContainerStartTag","container","lastSegment","split","filter","Boolean","isFinite","getOutlineContainerStart","startAttr","getListItemStartTag","unshift","getColorAttrs","renderContainer","itemsHtml","items","item","NUMBERED_LIST_SVG","getSelectedTopLevelBlocks","selection","Editor","nodes","at","Element","isElement","isBlock","mode","__read","getHeadingLevel","BaseMenu","this","prototype","isTargetListNode","getValue","_editor","isActive","_this","selectedBlocks","every","isDisabled","some","isVoid","includes","isListableBlock","_value","active","withoutNormalizing","forEach","path","headingType_1","Transforms","setNodes","undefined","getOriginalHeadingType","outline","BulletedListMenu","_super","title","t","iconSvg","__extends","LowerAlphaListMenu","NumberedListMenu","bulletedListMenuConf","key","factory","numberedListMenuConf","numberedListLowerAlphaMenuConf","DOMNode","globalThis","Node","getTagName","$elem","nodeType","ELEMENT_NODE","tagName","getOrdered","parent","getOrderedStart","$list","attr","getOutlineRestart","restart","getRestart","previous","previousElementSibling","isFirstListItem","isStructuralWhitespaceText","text","appendTextLikeChildren","target","isInline","SlateElement","append","$","fn","parseItemHtmlConf","selector","parseElemHtml","indent","listAncestorCount","$current","max","getLevel","directChildren","nestedListChildren","headingNode","children_1","children_1_1","getHeadingNode","declaredMode","getListMode","normalizedChildren","getOrderedType","__assign","__spreadArray","parseListHtmlConf","_elem","flat","Infinity","getSelectedListEntry","entry","universal","clearListItem","PANEL_BY_EDITOR","updateRestart","hideOutlineActionPanel","panel","dispose","delete","createActionButton","document","onClick","button","createElement","className","textContent","addEventListener","event","preventDefault","stopPropagation","showOutlineActionPanel","marker","ownerDocument","setAttribute","continueOutlineNumbering","restartOutlineNumbering","textarea","getTextarea","$textAreaContainer","scroll","$scroll","markerRect","getBoundingClientRect","containerRect","style","top","bottom","scrollTop","left","scrollLeft","onDocumentMouseDown","contains","onEditorChange","onEditorDestroyed","on","EditorEvents","CHANGE","DESTROYED","set","removeEventListener","off","remove","genAlphabetIndex","number","upper","String","result","charCode","fromCharCode","genRomanIndex","romanMap_1","romanMap_1_1","roman","list","renderElems","renderElem","elemNode","listItem","listStyle","margin","display","alignItems","genOrderedPrefix","findPath","previousIndex","previousLevel","getOrderedItemNumber","genPreSymbol","markerStyle","marginRight","jsx","contentEditable","mousedown","click","currentTarget","HTMLElement","ContentTag","flex","minWidth","wordBreak","editorPlugin","deleteBackward","handleTab","normalizeNode","insertBreak","newEditor","string","unit","Range","isExpanded","focus","offset","elemLevel","brotherPath","Path","brotherEntry","getBrotherListNodeByLevel","isCollapsed","selectedEntries","getTopSelectedElemsBySelection","listEntries","getNodeType","unwrapNodes","menus","htmlTransform","htmlList","outlineContext","flushOutline","roots","levels","lastItem","addOutlineItem","elemsToHtml","parseElemsHtml"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wangeditor-next/list-module",
3
- "version": "3.1.0",
3
+ "version": "6.2.0",
4
4
  "description": "wangEditor list module",
5
5
  "author": "cycleccc <2991205548@qq.com>",
6
6
  "type": "module",
@@ -35,10 +35,10 @@
35
35
  "url": "https://github.com/wangeditor-next/wangEditor-next/issues"
36
36
  },
37
37
  "peerDependencies": {
38
- "@wangeditor-next/core": ">=1.9.7",
39
38
  "dom7": "^3.0.0 || ^4.0.0",
40
39
  "slate": "^0.124.0",
41
- "snabbdom": "^3.6.0"
40
+ "snabbdom": "^3.6.0",
41
+ "@wangeditor-next/core": "^6.2.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@wangeditor-next-shared/rollup-config": "^0.0.2"