@lexical/markdown 0.2.6 → 0.2.9

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.
@@ -10,6 +10,7 @@ import type {
10
10
  LexicalEditor,
11
11
  ElementNode,
12
12
  LexicalNode,
13
+ TextNode,
13
14
  TextFormatType,
14
15
  } from 'lexical';
15
16
 
@@ -33,13 +34,13 @@ export type ElementTransformer = {
33
34
  type: 'element';
34
35
  };
35
36
 
36
- export type TextFormatTransformer = $ReadOnly<{
37
- format: $ReadOnlyArray<TextFormatType>;
37
+ export type TextFormatTransformer = {
38
+ format: Array<TextFormatType>;
38
39
  tag: string;
39
40
  type: 'text-format';
40
- }>;
41
+ };
41
42
 
42
- export type TextMatchTransformer = $ReadOnly<{
43
+ export type TextMatchTransformer = {
43
44
  export: (
44
45
  node: LexicalNode,
45
46
  exportChildren: (node: ElementNode) => string,
@@ -47,10 +48,10 @@ export type TextMatchTransformer = $ReadOnly<{
47
48
  ) => string | null;
48
49
  importRegExp: RegExp;
49
50
  regExp: RegExp;
50
- replace: (node: TextNode, match: RegExp$matchResult) => void;
51
+ replace: (node: TextNode, match: RegExpMatchArray) => void;
51
52
  trigger: string;
52
53
  type: 'text-match';
53
- }>;
54
+ };
54
55
 
55
56
  // TODO:
56
57
  // transformers should be required argument, breaking change
@@ -177,6 +177,10 @@ function getTextSibling(node, backward) {
177
177
  if (lexical.$isTextNode(sibling)) {
178
178
  return sibling;
179
179
  }
180
+
181
+ if (!lexical.$isElementNode(sibling)) {
182
+ return null;
183
+ }
180
184
  }
181
185
 
182
186
  return null;
@@ -414,6 +418,7 @@ function createTextFormatTransformersIndex(textTransformers) {
414
418
  *
415
419
  *
416
420
  */
421
+ const PUNCTUATION_OR_SPACE = /[!-/:-@[-`{-~\s]/;
417
422
 
418
423
  function runElementTransformers(parentNode, anchorNode, anchorOffset, elementTransformers) {
419
424
  const grandParentNode = parentNode.getParent();
@@ -519,6 +524,13 @@ function runTextFormatTransformers(editor, anchorNode, anchorOffset, textFormatT
519
524
 
520
525
  if (textContent[closeTagStartIndex - 1] === ' ') {
521
526
  continue;
527
+ } // Some tags can not be used within words, hence should have newline/space/punctuation after it
528
+
529
+
530
+ const afterCloseTagChar = textContent[closeTagEndIndex + 1];
531
+
532
+ if (matcher.intraword === false && afterCloseTagChar && !PUNCTUATION_OR_SPACE.test(afterCloseTagChar)) {
533
+ continue;
522
534
  }
523
535
 
524
536
  const closeNode = anchorNode;
@@ -555,6 +567,13 @@ function runTextFormatTransformers(editor, anchorNode, anchorOffset, textFormatT
555
567
 
556
568
  if (openTagStartIndex > 0 && prevOpenNodeText[openTagStartIndex - 1] === closeChar) {
557
569
  continue;
570
+ } // Some tags can not be used within words, hence should have newline/space/punctuation before it
571
+
572
+
573
+ const beforeOpenTagChar = prevOpenNodeText[openTagStartIndex - 1];
574
+
575
+ if (matcher.intraword === false && beforeOpenTagChar && !PUNCTUATION_OR_SPACE.test(beforeOpenTagChar)) {
576
+ continue;
558
577
  } // Clean text from opening and closing tags (starting from closing tag
559
578
  // to prevent any offset shifts if we start from opening one)
560
579
 
@@ -617,7 +636,7 @@ function isEqualSubString(stringA, aStart, stringB, bStart, length) {
617
636
  return true;
618
637
  }
619
638
 
620
- function registerMarkdownShortcuts(editor, transformers) {
639
+ function registerMarkdownShortcuts(editor, transformers = TRANSFORMERS) {
621
640
  const byType = transformersByType(transformers);
622
641
  const textFormatTransformersIndex = indexBy(byType.textFormat, ({
623
642
  tag
@@ -831,6 +850,7 @@ const BOLD_ITALIC_STAR = {
831
850
  };
832
851
  const BOLD_ITALIC_UNDERSCORE = {
833
852
  format: ['bold', 'italic'],
853
+ intraword: false,
834
854
  tag: '___',
835
855
  type: 'text-format'
836
856
  };
@@ -841,6 +861,7 @@ const BOLD_STAR = {
841
861
  };
842
862
  const BOLD_UNDERSCORE = {
843
863
  format: ['bold'],
864
+ intraword: false,
844
865
  tag: '__',
845
866
  type: 'text-format'
846
867
  };
@@ -856,6 +877,7 @@ const ITALIC_STAR = {
856
877
  };
857
878
  const ITALIC_UNDERSCORE = {
858
879
  format: ['italic'],
880
+ intraword: false,
859
881
  tag: '_',
860
882
  type: 'text-format'
861
883
  }; // Order of text transformers matters:
@@ -38,6 +38,7 @@ export type ElementTransformer = {
38
38
  export type TextFormatTransformer = $ReadOnly<{
39
39
  format: $ReadOnlyArray<TextFormatType>,
40
40
  tag: string,
41
+ intraword?: boolean,
41
42
  type: 'text-format',
42
43
  }>;
43
44
 
@@ -4,23 +4,24 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- var n=require("lexical"),y=require("@lexical/code"),D=require("@lexical/link"),E=require("@lexical/list"),F=require("@lexical/rich-text");function G(a,b){const c={};for(const d of a)a=b(d),c[a]?c[a].push(d):c[a]=[d];return c}function I(a){a=G(a,b=>b.type);return{element:a.element,textFormat:a["text-format"],textMatch:a["text-match"]}}
8
- function aa(a){const b=I(a),c=b.textFormat.filter(d=>1===d.format.length);return()=>{const d=[];var e=n.$getRoot().getChildren();for(const f of e)e=ba(f,b.element,c,b.textMatch),null!=e&&d.push(e);return d.join("\n")}}function ba(a,b,c,d){for(const e of b)if(b=e.export(a,f=>J(f,c,d)),null!=b)return b;return n.$isElementNode(a)?J(a,c,d):null}
9
- function J(a,b,c){const d=[];a=a.getChildren();a:for(const e of a)if(n.$isLineBreakNode(e))d.push("\n");else if(n.$isTextNode(e))d.push(K(e,e.getTextContent(),b));else{for(const f of c)if(a=f.export(e,k=>J(k,b,c),(k,h)=>K(k,h,b)),null!=a){d.push(a);continue a}n.$isElementNode(e)&&d.push(J(e,b,c))}return d.join("")}function K(a,b,c){const d=new Set;for(const f of c){c=f.format[0];const k=f.tag;if(L(a,c)&&!d.has(c)){d.add(c);var e=M(a,!0);L(e,c)||(b=k+b);e=M(a,!1);L(e,c)||(b+=k)}}return b}
10
- function M(a,b){let c=b?a.getPreviousSibling():a.getNextSibling();c||(a=a.getParentOrThrow(),a.isInline()&&(c=b?a.getPreviousSibling():a.getNextSibling()));for(;c;){if(n.$isElementNode(c)){if(!c.isInline())break;a=b?c.getLastDescendant():c.getFirstDescendant();if(n.$isTextNode(a))return a;c=b?c.getPreviousSibling():c.getNextSibling()}if(n.$isTextNode(c))return c}return null}function L(a,b){return n.$isTextNode(a)&&a.hasFormat(b)}const N=/^```(\w{1,10})?\s?$/;
11
- function ca(a){const b=I(a),c=da(b.textFormat);return d=>{d=d.split("\n");const e=d.length,f=n.$getRoot();f.clear();for(let q=0;q<e;q++){var k=d[q];a:{var h=d,r=q;var u=f;var p=h[r].match(N);if(p)for(var t=r,m=h.length;++t<m;)if(h[t].match(N)){p=y.$createCodeNode(p[1]);h=n.$createTextNode(h.slice(r+1,t).join("\n"));p.append(h);u.append(p);u=[p,t];break a}u=[null,r]}const [l,g]=u;if(null!=l)q=g;else{p=f;m=b.element;u=c;t=b.textMatch;h=n.$createTextNode(k);r=n.$createParagraphNode();r.append(h);p.append(r);
12
- for(const {regExp:w,replace:v}of m)if(p=k.match(w)){h.setTextContent(k.slice(p[0].length));v(r,[h],p,!0);break}O(h,u,t)}}f.selectEnd()}}
13
- function O(a,b,c){const d=a.getTextContent();a:{var e=d.match(b.openTagsRegExp);if(null!=e)for(f of e)if(e=b.fullMatchRegExpByTag[f.replace(/^\s/,"")],null!=e&&(e=d.match(e),null!=e)){var f=e;break a}f=null}if(f){if(f[0]===d)var k=a;else{var h=f.index,r=h+f[0].length;0===h?[k,p]=a.splitText(r):[,k,p]=a.splitText(h,r)}k.setTextContent(f[2]);if(h=b.transformersByTag[f[1]])for(var u of h.format)k.hasFormat(u)||k.toggleFormat(u);k.hasFormat("code")||O(k,b,c);p&&O(p,b,c)}else a:for(b=a;b;){for(h of c)if(k=
14
- b.getTextContent().match(h.importRegExp)){var p=k.index;u=p+k[0].length;0===p?[r,b]=b.splitText(u):[,r,b]=b.splitText(p,u);h.replace(r,k);continue a}break}}function da(a){const b={},c={},d=[];for(const e of a){({tag:a}=e);b[a]=e;const f=a.replace(/(\*|\^)/g,"\\$1");d.push(f);c[a]=new RegExp(`(${f})(?![${f}\\s])(.*?[^${f}\\s])${f}(?!${f})`)}return{fullMatchRegExpByTag:c,openTagsRegExp:new RegExp("("+d.join("|")+")","g"),transformersByTag:b}}
15
- function P(a,b,c){const d=c.length;for(;b>=d;b--){const e=b-d;if(Q(a,e,c,0,d)&&" "!==a[e+d])return e}return-1}function Q(a,b,c,d,e){for(let f=0;f<e;f++)if(a[b+f]!==c[d+f])return!1;return!0}
16
- const R=a=>(b,c,d)=>{d=a(d);d.append(...c);b.replace(d);d.select(0,0)},S=a=>(b,c,d)=>{var e=b.getPreviousSibling();const f=E.$createListItemNode("check"===a?"x"===d[3]:void 0);E.$isListNode(e)&&e.getListType()===a?(e.append(f),b.remove()):(e=E.$createListNode(a,"number"===a?Number(d[2]):void 0),e.append(f),b.replace(e));f.append(...c);f.select(0,0);(b=Math.floor(d[1].length/4))&&f.setIndent(b)},T=(a,b,c)=>{const d=[];var e=a.getChildren();let f=0;for(const h of e)if(E.$isListItemNode(h)){if(1===h.getChildrenSize()&&
17
- (e=h.getFirstChild(),E.$isListNode(e))){d.push(T(e,b,c+1));continue}e=" ".repeat(4*c);var k=a.getListType();k="number"===k?`${a.getStart()+f}. `:"check"===k?`- [${h.getChecked()?"x":" "}] `:"- ";d.push(e+k+b(h));f++}return d.join("\n")},U={export:(a,b)=>{if(!F.$isHeadingNode(a))return null;const c=Number(a.getTag().slice(1));return"#".repeat(c)+" "+b(a)},regExp:/^(#{1,6})\s/,replace:R(a=>F.$createHeadingNode("h"+a[1].length)),type:"element"},V={export:(a,b)=>F.$isQuoteNode(a)?"> "+b(a):null,regExp:/^>\s/,
18
- replace:R(()=>F.$createQuoteNode()),type:"element"},W={export:a=>{if(!y.$isCodeNode(a))return null;const b=a.getTextContent();return"```"+(a.getLanguage()||"")+(b?"\n"+b:"")+"\n```"},regExp:/^```(\w{1,10})?\s/,replace:R(a=>y.$createCodeNode(a?a[1]:void 0)),type:"element"},X={export:(a,b)=>E.$isListNode(a)?T(a,b,0):null,regExp:/^(\s*)[-*+]\s/,replace:S("bullet"),type:"element"},ea={export:(a,b)=>E.$isListNode(a)?T(a,b,0):null,regExp:/^(\s*)(?:-\s)?\s?(\[(\s|x)?\])\s/i,replace:S("check"),type:"element"},
19
- Y={export:(a,b)=>E.$isListNode(a)?T(a,b,0):null,regExp:/^(\s*)(\d{1,})\.\s/,replace:S("number"),type:"element"},fa={format:["code"],tag:"`",type:"text-format"},ha={format:["bold","italic"],tag:"***",type:"text-format"},ia={format:["bold","italic"],tag:"___",type:"text-format"},ja={format:["bold"],tag:"**",type:"text-format"},ka={format:["bold"],tag:"__",type:"text-format"},la={format:["strikethrough"],tag:"~~",type:"text-format"},ma={format:["italic"],tag:"*",type:"text-format"},na={format:["italic"],
20
- tag:"_",type:"text-format"},oa={export:(a,b,c)=>{if(!D.$isLinkNode(a))return null;b=`[${a.getTextContent()}](${a.getURL()})`;const d=a.getFirstChild();return 1===a.getChildrenSize()&&n.$isTextNode(d)?c(d,b):b},importRegExp:/(?:\[([^[]+)\])(?:\(([^(]+)\))/,regExp:/(?:\[([^[]+)\])(?:\(([^(]+)\))$/,replace:(a,b)=>{const [,c,d]=b;b=D.$createLinkNode(d);const e=n.$createTextNode(c);e.setFormat(a.getFormat());b.append(e);a.replace(b)},trigger:")",type:"text-match"},pa=[U,V,W,X,Y],qa=[fa,ha,ia,ja,ka,ma,
21
- na,la],ra=[oa],Z=[...pa,...qa,...ra];exports.$convertFromMarkdownString=function(a,b=Z){return ca(b)(a)};exports.$convertToMarkdownString=function(a=Z){return aa(a)()};exports.BOLD_ITALIC_STAR=ha;exports.BOLD_ITALIC_UNDERSCORE=ia;exports.BOLD_STAR=ja;exports.BOLD_UNDERSCORE=ka;exports.CHECK_LIST=ea;exports.CODE=W;exports.ELEMENT_TRANSFORMERS=pa;exports.HEADING=U;exports.INLINE_CODE=fa;exports.ITALIC_STAR=ma;exports.ITALIC_UNDERSCORE=na;exports.LINK=oa;exports.ORDERED_LIST=Y;exports.QUOTE=V;
22
- exports.STRIKETHROUGH=la;exports.TEXT_FORMAT_TRANSFORMERS=qa;exports.TEXT_MATCH_TRANSFORMERS=ra;exports.TRANSFORMERS=Z;exports.UNORDERED_LIST=X;
23
- exports.registerMarkdownShortcuts=function(a,b){const c=I(b),d=G(c.textFormat,({tag:f})=>f[f.length-1]),e=G(c.textMatch,({trigger:f})=>f);return a.registerUpdateListener(({tags:f,dirtyLeaves:k,editorState:h,prevEditorState:r})=>{if(!f.has("historic")){var u=h.read(n.$getSelection);f=r.read(n.$getSelection);if(n.$isRangeSelection(f)&&n.$isRangeSelection(u)&&u.isCollapsed()){r=u.anchor.key;var p=u.anchor.offset,t=h._nodeMap.get(r);n.$isTextNode(t)&&k.has(r)&&(1===p||p===f.anchor.offset+1)&&a.update(()=>
24
- {if(!t.hasFormat("code")){var m=t.getParent();if(null!==m&&!y.$isCodeNode(m)){var q=u.anchor.offset;b:{var l=c.element,g=m.getParent();if(n.$isRootNode(g)&&m.getFirstChild()===t&&(g=t.getTextContent()," "===g[q-1]))for(const {regExp:H,replace:B}of l)if((l=g.match(H))&&l[0].length===q){g=t.getNextSiblings();const [z,x]=t.splitText(q);z.remove();g=x?[x,...g]:g;B(m,g,l,!1);m=!0;break b}m=!1}if(!m){b:{l=t.getTextContent();m=e[l[q-1]];if(null!=m){q<l.length&&(l=l.slice(0,q));for(v of m)if(m=l.match(v.regExp),
25
- null!==m){l=m.index;g=l+m[0].length;var w=void 0;0===l?[w]=t.splitText(g):[,w]=t.splitText(l,g);w.selectNext();v.replace(w,m);var v=!0;break b}}v=!1}if(!v)b:{g=t.getTextContent();--q;const H=g[q];if(v=d[H])for(const B of v){var {tag:A}=B;m=A.length;const z=q-m+1;if(1<m&&!Q(g,z,A,0,m))continue;if(" "===g[z-1])continue;w=v=t;l=P(g,z,A);let x=w;for(;0>l&&(x=x.getPreviousSibling())&&!n.$isLineBreakNode(x);)n.$isTextNode(x)&&(l=x.getTextContent(),w=x,l=P(l,l.length,A));if(!(0>l||w===v&&l+m===z||(A=w.getTextContent(),
26
- 0<l&&A[l-1]===H))){g=v.getTextContent();g=g.slice(0,z)+g.slice(q+1);v.setTextContent(g);g=w===v?g:A;w.setTextContent(g.slice(0,l)+g.slice(l+m));g=n.$createRangeSelection();n.$setSelection(g);q=q-m*(w===v?2:1)+1;g.anchor.set(w.__key,l,"text");g.focus.set(v.__key,q,"text");for(const C of B.format)g.hasFormat(C)||g.formatText(C);g.anchor.set(g.focus.key,g.focus.offset,g.focus.type);for(const C of B.format)g.hasFormat(C)&&g.toggleFormat(C);break b}}}}}}})}}})};
7
+ var n=require("lexical"),y=require("@lexical/code"),D=require("@lexical/link"),E=require("@lexical/list"),F=require("@lexical/rich-text");function G(a,b){const c={};for(const d of a)a=b(d),c[a]?c[a].push(d):c[a]=[d];return c}function H(a){a=G(a,b=>b.type);return{element:a.element,textFormat:a["text-format"],textMatch:a["text-match"]}}
8
+ function aa(a){const b=H(a),c=b.textFormat.filter(d=>1===d.format.length);return()=>{const d=[];var e=n.$getRoot().getChildren();for(const f of e)e=ba(f,b.element,c,b.textMatch),null!=e&&d.push(e);return d.join("\n")}}function ba(a,b,c,d){for(const e of b)if(b=e.export(a,f=>J(f,c,d)),null!=b)return b;return n.$isElementNode(a)?J(a,c,d):null}
9
+ function J(a,b,c){const d=[];a=a.getChildren();a:for(const e of a)if(n.$isLineBreakNode(e))d.push("\n");else if(n.$isTextNode(e))d.push(K(e,e.getTextContent(),b));else{for(const f of c)if(a=f.export(e,l=>J(l,b,c),(l,h)=>K(l,h,b)),null!=a){d.push(a);continue a}n.$isElementNode(e)&&d.push(J(e,b,c))}return d.join("")}function K(a,b,c){const d=new Set;for(const f of c){c=f.format[0];const l=f.tag;if(L(a,c)&&!d.has(c)){d.add(c);var e=M(a,!0);L(e,c)||(b=l+b);e=M(a,!1);L(e,c)||(b+=l)}}return b}
10
+ function M(a,b){let c=b?a.getPreviousSibling():a.getNextSibling();c||(a=a.getParentOrThrow(),a.isInline()&&(c=b?a.getPreviousSibling():a.getNextSibling()));for(;c;){if(n.$isElementNode(c)){if(!c.isInline())break;a=b?c.getLastDescendant():c.getFirstDescendant();if(n.$isTextNode(a))return a;c=b?c.getPreviousSibling():c.getNextSibling()}if(n.$isTextNode(c))return c;if(!n.$isElementNode(c))break}return null}function L(a,b){return n.$isTextNode(a)&&a.hasFormat(b)}const N=/^```(\w{1,10})?\s?$/;
11
+ function ca(a){const b=H(a),c=da(b.textFormat);return d=>{d=d.split("\n");const e=d.length,f=n.$getRoot();f.clear();for(let q=0;q<e;q++){var l=d[q];a:{var h=d,r=q;var u=f;var p=h[r].match(N);if(p)for(var t=r,m=h.length;++t<m;)if(h[t].match(N)){p=y.$createCodeNode(p[1]);h=n.$createTextNode(h.slice(r+1,t).join("\n"));p.append(h);u.append(p);u=[p,t];break a}u=[null,r]}const [k,g]=u;if(null!=k)q=g;else{p=f;m=b.element;u=c;t=b.textMatch;h=n.$createTextNode(l);r=n.$createParagraphNode();r.append(h);p.append(r);
12
+ for(const {regExp:v,replace:w}of m)if(p=l.match(v)){h.setTextContent(l.slice(p[0].length));w(r,[h],p,!0);break}O(h,u,t)}}f.selectEnd()}}
13
+ function O(a,b,c){const d=a.getTextContent();a:{var e=d.match(b.openTagsRegExp);if(null!=e)for(f of e)if(e=b.fullMatchRegExpByTag[f.replace(/^\s/,"")],null!=e&&(e=d.match(e),null!=e)){var f=e;break a}f=null}if(f){if(f[0]===d)var l=a;else{var h=f.index,r=h+f[0].length;0===h?[l,p]=a.splitText(r):[,l,p]=a.splitText(h,r)}l.setTextContent(f[2]);if(h=b.transformersByTag[f[1]])for(var u of h.format)l.hasFormat(u)||l.toggleFormat(u);l.hasFormat("code")||O(l,b,c);p&&O(p,b,c)}else a:for(b=a;b;){for(h of c)if(l=
14
+ b.getTextContent().match(h.importRegExp)){var p=l.index;u=p+l[0].length;0===p?[r,b]=b.splitText(u):[,r,b]=b.splitText(p,u);h.replace(r,l);continue a}break}}function da(a){const b={},c={},d=[];for(const e of a){({tag:a}=e);b[a]=e;const f=a.replace(/(\*|\^)/g,"\\$1");d.push(f);c[a]=new RegExp(`(${f})(?![${f}\\s])(.*?[^${f}\\s])${f}(?!${f})`)}return{fullMatchRegExpByTag:c,openTagsRegExp:new RegExp("("+d.join("|")+")","g"),transformersByTag:b}}const P=/[!-/:-@[-`{-~\s]/;
15
+ function Q(a,b,c){const d=c.length;for(;b>=d;b--){const e=b-d;if(R(a,e,c,0,d)&&" "!==a[e+d])return e}return-1}function R(a,b,c,d,e){for(let f=0;f<e;f++)if(a[b+f]!==c[d+f])return!1;return!0}
16
+ const S=a=>(b,c,d)=>{d=a(d);d.append(...c);b.replace(d);d.select(0,0)},T=a=>(b,c,d)=>{var e=b.getPreviousSibling();const f=E.$createListItemNode("check"===a?"x"===d[3]:void 0);E.$isListNode(e)&&e.getListType()===a?(e.append(f),b.remove()):(e=E.$createListNode(a,"number"===a?Number(d[2]):void 0),e.append(f),b.replace(e));f.append(...c);f.select(0,0);(b=Math.floor(d[1].length/4))&&f.setIndent(b)},U=(a,b,c)=>{const d=[];var e=a.getChildren();let f=0;for(const h of e)if(E.$isListItemNode(h)){if(1===h.getChildrenSize()&&
17
+ (e=h.getFirstChild(),E.$isListNode(e))){d.push(U(e,b,c+1));continue}e=" ".repeat(4*c);var l=a.getListType();l="number"===l?`${a.getStart()+f}. `:"check"===l?`- [${h.getChecked()?"x":" "}] `:"- ";d.push(e+l+b(h));f++}return d.join("\n")},V={export:(a,b)=>{if(!F.$isHeadingNode(a))return null;const c=Number(a.getTag().slice(1));return"#".repeat(c)+" "+b(a)},regExp:/^(#{1,6})\s/,replace:S(a=>F.$createHeadingNode("h"+a[1].length)),type:"element"},W={export:(a,b)=>F.$isQuoteNode(a)?"> "+b(a):null,regExp:/^>\s/,
18
+ replace:S(()=>F.$createQuoteNode()),type:"element"},X={export:a=>{if(!y.$isCodeNode(a))return null;const b=a.getTextContent();return"```"+(a.getLanguage()||"")+(b?"\n"+b:"")+"\n```"},regExp:/^```(\w{1,10})?\s/,replace:S(a=>y.$createCodeNode(a?a[1]:void 0)),type:"element"},Y={export:(a,b)=>E.$isListNode(a)?U(a,b,0):null,regExp:/^(\s*)[-*+]\s/,replace:T("bullet"),type:"element"},ea={export:(a,b)=>E.$isListNode(a)?U(a,b,0):null,regExp:/^(\s*)(?:-\s)?\s?(\[(\s|x)?\])\s/i,replace:T("check"),type:"element"},
19
+ fa={export:(a,b)=>E.$isListNode(a)?U(a,b,0):null,regExp:/^(\s*)(\d{1,})\.\s/,replace:T("number"),type:"element"},ha={format:["code"],tag:"`",type:"text-format"},ia={format:["bold","italic"],tag:"***",type:"text-format"},ja={format:["bold","italic"],intraword:!1,tag:"___",type:"text-format"},ka={format:["bold"],tag:"**",type:"text-format"},la={format:["bold"],intraword:!1,tag:"__",type:"text-format"},ma={format:["strikethrough"],tag:"~~",type:"text-format"},na={format:["italic"],tag:"*",type:"text-format"},
20
+ oa={format:["italic"],intraword:!1,tag:"_",type:"text-format"},pa={export:(a,b,c)=>{if(!D.$isLinkNode(a))return null;b=`[${a.getTextContent()}](${a.getURL()})`;const d=a.getFirstChild();return 1===a.getChildrenSize()&&n.$isTextNode(d)?c(d,b):b},importRegExp:/(?:\[([^[]+)\])(?:\(([^(]+)\))/,regExp:/(?:\[([^[]+)\])(?:\(([^(]+)\))$/,replace:(a,b)=>{const [,c,d]=b;b=D.$createLinkNode(d);const e=n.$createTextNode(c);e.setFormat(a.getFormat());b.append(e);a.replace(b)},trigger:")",type:"text-match"},qa=
21
+ [V,W,X,Y,fa],ra=[ha,ia,ja,ka,la,na,oa,ma],sa=[pa],Z=[...qa,...ra,...sa];exports.$convertFromMarkdownString=function(a,b=Z){return ca(b)(a)};exports.$convertToMarkdownString=function(a=Z){return aa(a)()};exports.BOLD_ITALIC_STAR=ia;exports.BOLD_ITALIC_UNDERSCORE=ja;exports.BOLD_STAR=ka;exports.BOLD_UNDERSCORE=la;exports.CHECK_LIST=ea;exports.CODE=X;exports.ELEMENT_TRANSFORMERS=qa;exports.HEADING=V;exports.INLINE_CODE=ha;exports.ITALIC_STAR=na;exports.ITALIC_UNDERSCORE=oa;exports.LINK=pa;
22
+ exports.ORDERED_LIST=fa;exports.QUOTE=W;exports.STRIKETHROUGH=ma;exports.TEXT_FORMAT_TRANSFORMERS=ra;exports.TEXT_MATCH_TRANSFORMERS=sa;exports.TRANSFORMERS=Z;exports.UNORDERED_LIST=Y;
23
+ exports.registerMarkdownShortcuts=function(a,b=Z){const c=H(b),d=G(c.textFormat,({tag:f})=>f[f.length-1]),e=G(c.textMatch,({trigger:f})=>f);return a.registerUpdateListener(({tags:f,dirtyLeaves:l,editorState:h,prevEditorState:r})=>{if(!f.has("historic")){var u=h.read(n.$getSelection);f=r.read(n.$getSelection);if(n.$isRangeSelection(f)&&n.$isRangeSelection(u)&&u.isCollapsed()){r=u.anchor.key;var p=u.anchor.offset,t=h._nodeMap.get(r);n.$isTextNode(t)&&l.has(r)&&(1===p||p===f.anchor.offset+1)&&a.update(()=>
24
+ {if(!t.hasFormat("code")){var m=t.getParent();if(null!==m&&!y.$isCodeNode(m)){var q=u.anchor.offset;b:{var k=c.element,g=m.getParent();if(n.$isRootNode(g)&&m.getFirstChild()===t&&(g=t.getTextContent()," "===g[q-1]))for(const {regExp:I,replace:B}of k)if((k=g.match(I))&&k[0].length===q){g=t.getNextSiblings();const [C,z]=t.splitText(q);C.remove();g=z?[z,...g]:g;B(m,g,k,!1);m=!0;break b}m=!1}if(!m){b:{k=t.getTextContent();m=e[k[q-1]];if(null!=m){q<k.length&&(k=k.slice(0,q));for(w of m)if(m=k.match(w.regExp),
25
+ null!==m){k=m.index;g=k+m[0].length;var v=void 0;0===k?[v]=t.splitText(g):[,v]=t.splitText(k,g);v.selectNext();w.replace(v,m);var w=!0;break b}}w=!1}if(!w)b:{g=t.getTextContent();--q;const I=g[q];if(w=d[I])for(const B of w){var {tag:A}=B;w=A.length;const C=q-w+1;if(!(1<w&&!R(g,C,A,0,w)||" "===g[C-1])&&(v=g[q+1],!1!==B.intraword||!v||P.test(v))){m=v=t;k=Q(g,C,A);for(var x=m;0>k&&(x=x.getPreviousSibling())&&!n.$isLineBreakNode(x);)n.$isTextNode(x)&&(k=x.getTextContent(),m=x,k=Q(k,k.length,A));if(!(0>
26
+ k||m===v&&k+w===C||(A=m.getTextContent(),0<k&&A[k-1]===I||(x=A[k-1],!1===B.intraword&&x&&!P.test(x))))){g=v.getTextContent();g=g.slice(0,C)+g.slice(q+1);v.setTextContent(g);g=m===v?g:A;m.setTextContent(g.slice(0,k)+g.slice(k+w));g=n.$createRangeSelection();n.$setSelection(g);q=q-w*(m===v?2:1)+1;g.anchor.set(m.__key,k,"text");g.focus.set(v.__key,q,"text");for(const z of B.format)g.hasFormat(z)||g.formatText(z);g.anchor.set(g.focus.key,g.focus.offset,g.focus.type);for(const z of B.format)g.hasFormat(z)&&
27
+ g.toggleFormat(z);break b}}}}}}}})}}})};
package/package.json CHANGED
@@ -8,18 +8,18 @@
8
8
  "markdown"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.2.6",
11
+ "version": "0.2.9",
12
12
  "main": "LexicalMarkdown.js",
13
13
  "peerDependencies": {
14
- "lexical": "0.2.6"
14
+ "lexical": "0.2.9"
15
15
  },
16
16
  "dependencies": {
17
- "@lexical/utils": "0.2.6",
18
- "@lexical/code": "0.2.6",
19
- "@lexical/text": "0.2.6",
20
- "@lexical/rich-text": "0.2.6",
21
- "@lexical/list": "0.2.6",
22
- "@lexical/link": "0.2.6"
17
+ "@lexical/utils": "0.2.9",
18
+ "@lexical/code": "0.2.9",
19
+ "@lexical/text": "0.2.9",
20
+ "@lexical/rich-text": "0.2.9",
21
+ "@lexical/list": "0.2.9",
22
+ "@lexical/link": "0.2.9"
23
23
  },
24
24
  "repository": {
25
25
  "type": "git",