@expensify/react-native-live-markdown 0.1.299 → 0.1.300
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.
- package/lib/commonjs/MarkdownTextInput.web.js +1 -1
- package/lib/commonjs/MarkdownTextInput.web.js.map +1 -1
- package/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map +1 -1
- package/lib/commonjs/parseExpensiMark.js +9 -3
- package/lib/commonjs/parseExpensiMark.js.map +1 -1
- package/lib/commonjs/styleUtils.js +15 -2
- package/lib/commonjs/styleUtils.js.map +1 -1
- package/lib/commonjs/web/MarkdownTextInput.css +28 -5
- package/lib/commonjs/web/utils/blockUtils.js +60 -5
- package/lib/commonjs/web/utils/blockUtils.js.map +1 -1
- package/lib/commonjs/web/utils/cursorUtils.js +28 -3
- package/lib/commonjs/web/utils/cursorUtils.js.map +1 -1
- package/lib/commonjs/web/utils/inputUtils.js +49 -11
- package/lib/commonjs/web/utils/inputUtils.js.map +1 -1
- package/lib/module/MarkdownTextInput.web.js +1 -1
- package/lib/module/MarkdownTextInput.web.js.map +1 -1
- package/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map +1 -1
- package/lib/module/parseExpensiMark.js +9 -3
- package/lib/module/parseExpensiMark.js.map +1 -1
- package/lib/module/styleUtils.js +15 -2
- package/lib/module/styleUtils.js.map +1 -1
- package/lib/module/web/MarkdownTextInput.css +28 -5
- package/lib/module/web/utils/blockUtils.js +58 -6
- package/lib/module/web/utils/blockUtils.js.map +1 -1
- package/lib/module/web/utils/cursorUtils.js +28 -3
- package/lib/module/web/utils/cursorUtils.js.map +1 -1
- package/lib/module/web/utils/inputUtils.js +48 -11
- package/lib/module/web/utils/inputUtils.js.map +1 -1
- package/lib/typescript/src/MarkdownTextInput.web.d.ts.map +1 -1
- package/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts +16 -11
- package/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/commonTypes.d.ts +1 -1
- package/lib/typescript/src/commonTypes.d.ts.map +1 -1
- package/lib/typescript/src/parseExpensiMark.d.ts.map +1 -1
- package/lib/typescript/src/styleUtils.d.ts +1 -1
- package/lib/typescript/src/styleUtils.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/blockUtils.d.ts +5 -2
- package/lib/typescript/src/web/utils/blockUtils.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/cursorUtils.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/inputUtils.d.ts +3 -0
- package/lib/typescript/src/web/utils/inputUtils.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/MarkdownTextInput.web.tsx +3 -2
- package/src/MarkdownTextInputDecoratorViewNativeComponent.ts +17 -11
- package/src/commonTypes.ts +2 -1
- package/src/parseExpensiMark.ts +5 -3
- package/src/styleUtils.ts +14 -1
- package/src/web/MarkdownTextInput.css +28 -5
- package/src/web/utils/blockUtils.ts +74 -8
- package/src/web/utils/cursorUtils.ts +29 -3
- package/src/web/utils/inputUtils.ts +61 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["findHTMLElementInTree","getTreeNodeByIndex","setCursorPosition","target","startIndex","endIndex","shouldScrollIntoView","tree","document","activeElement","start","Math","max","min","length","end","range","createRange","selectNodeContents","startTreeNode","endTreeNode","console","error","type","setStartBefore","element","startElement","setStart","childNodes","setEndBefore","endElement","setEnd","collapse","selection","window","getSelection","setBaseAndExtent","startContainer","startOffset","endContainer","endOffset","scrollIntoView","node","targetElement","orderIndex","Number","split","currentLine","
|
|
1
|
+
{"version":3,"names":["isChildOfMultilineMarkdownElement","findHTMLElementInTree","getTreeNodeByIndex","setCursorPosition","target","startIndex","endIndex","shouldScrollIntoView","tree","document","activeElement","start","Math","max","min","length","end","range","createRange","selectNodeContents","startTreeNode","endTreeNode","console","error","type","setStartBefore","element","startElement","setStart","childNodes","setEndBefore","endElement","setEnd","collapse","selection","window","getSelection","setBaseAndExtent","startContainer","startOffset","endContainer","endOffset","scrollIntoView","node","scrollTargetElement","targetElement","orderIndex","Number","split","currentLine","nodeName","addRange","span","createElement","textContent","insertNode","block","remove","caretRect","getBoundingClientRect","targetRect","top","height","scrollTop","moveCursorToEnd","getCurrentCursorPosition","getHTMLElement","Text","parentElement","rangeCount","getRangeAt","parentNode","value","removeSelection","removeAllRanges"],"sourceRoot":"../../../../src","sources":["web/utils/cursorUtils.ts"],"mappings":";;AACA,SAAQA,iCAAiC,QAAO,iBAAc;AAC9D,SAAQC,qBAAqB,EAAEC,kBAAkB,QAAO,gBAAa;AAGrE,SAASC,iBAAiBA,CAACC,MAAgC,EAAEC,UAAkB,EAAEC,QAAuB,GAAG,IAAI,EAAEC,oBAAoB,GAAG,KAAK,EAAE;EAC7I;EACA,IAAI,CAACH,MAAM,CAACI,IAAI,IAAIJ,MAAM,KAAKK,QAAQ,CAACC,aAAa,EAAE;IACrD;EACF;EAEA,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACT,UAAU,EAAED,MAAM,CAACI,IAAI,CAACO,MAAM,CAAC,CAAC;EACnE,MAAMC,GAAG,GAAGV,QAAQ,GAAGM,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACR,QAAQ,EAAEF,MAAM,CAACI,IAAI,CAACO,MAAM,CAAC,CAAC,GAAG,IAAI;EACjF,IAAIC,GAAG,IAAIA,GAAG,GAAGL,KAAK,EAAE;IACtB;EACF;EAEA,MAAMM,KAAK,GAAGR,QAAQ,CAACS,WAAW,CAAC,CAAC;EACpCD,KAAK,CAACE,kBAAkB,CAACf,MAAM,CAAC;EAEhC,MAAMgB,aAAa,GAAGlB,kBAAkB,CAACE,MAAM,CAACI,IAAI,EAAEG,KAAK,CAAC;EAC5D,MAAMU,WAAW,GAAGL,GAAG,IAAII,aAAa,KAAKJ,GAAG,GAAGI,aAAa,CAACT,KAAK,IAAIK,GAAG,IAAII,aAAa,CAACT,KAAK,GAAGS,aAAa,CAACL,MAAM,CAAC,GAAGb,kBAAkB,CAACE,MAAM,CAACI,IAAI,EAAEQ,GAAG,CAAC,GAAGI,aAAa;EACnL,IAAI,CAACA,aAAa,IAAI,CAACC,WAAW,EAAE;IAClCC,OAAO,CAACC,KAAK,CAAC,gCAAgC,CAAC;IAC/C;EACF;EAEA,IAAIH,aAAa,CAACI,IAAI,KAAK,IAAI,EAAE;IAC/BP,KAAK,CAACQ,cAAc,CAACL,aAAa,CAACM,OAAO,CAAC;EAC7C,CAAC,MAAM;IACL,MAAMC,YAAY,GAAGP,aAAa,CAACM,OAAO;IAC1CT,KAAK,CAACW,QAAQ,CAAED,YAAY,CAACE,UAAU,CAAC,CAAC,CAAC,IAAIF,YAAY,EAAgBhB,KAAK,GAAGS,aAAa,CAACT,KAAK,CAAC;EACxG;EAEA,IAAIU,WAAW,CAACG,IAAI,KAAK,IAAI,EAAE;IAC7BP,KAAK,CAACa,YAAY,CAACT,WAAW,CAACK,OAAO,CAAC;EACzC,CAAC,MAAM;IACL,MAAMK,UAAU,GAAGV,WAAW,CAACK,OAAO;IACtCT,KAAK,CAACe,MAAM,CAAED,UAAU,CAACF,UAAU,CAAC,CAAC,CAAC,IAAIE,UAAU,EAAgB,CAACf,GAAG,IAAIL,KAAK,IAAIU,WAAW,CAACV,KAAK,CAAC;EACzG;EAEA,IAAI,CAACK,GAAG,EAAE;IACRC,KAAK,CAACgB,QAAQ,CAAC,IAAI,CAAC;EACtB;EAEA,MAAMC,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;EACvC,IAAIF,SAAS,EAAE;IACbA,SAAS,CAACG,gBAAgB,CAACpB,KAAK,CAACqB,cAAc,EAAErB,KAAK,CAACsB,WAAW,EAAEtB,KAAK,CAACuB,YAAY,EAAEvB,KAAK,CAACwB,SAAS,CAAC;EAC1G;EAEA,IAAIlC,oBAAoB,EAAE;IACxBmC,cAAc,CAACtC,MAAM,EAAEiB,WAAW,CAAC;EACrC;AACF;AAEA,SAASqB,cAAcA,CAACtC,MAAgC,EAAEuC,IAAc,EAAE;EACxE,IAAIC,mBAAmB,GAAGD,IAAI,CAACjB,OAAO;EACtC,MAAMmB,aAAa,GAAGzC,MAAM;EAE5B,IAAI,CAACJ,iCAAiC,CAAC2C,IAAI,CAACjB,OAAO,CAAC,EAAE;IACpD,MAAMoB,UAAU,GAAGC,MAAM,CAACJ,IAAI,CAACG,UAAU,CAACE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAMC,WAAW,GAAG7C,MAAM,CAACI,IAAI,CAACqB,UAAU,CAACiB,UAAU,CAAC,EAAEpB,OAAO;IAC/D,IAAIuB,WAAW,EAAE;MACfL,mBAAmB,GAAGK,WAAW;IACnC;EACF,CAAC,MAAM,IAAIN,IAAI,CAACjB,OAAO,CAACwB,QAAQ,KAAK,IAAI,EAAE;IACzC;IACA,MAAMhB,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;IACvC,IAAIF,SAAS,EAAE;MACb,MAAMjB,KAAK,GAAGR,QAAQ,CAACS,WAAW,CAAC,CAAC;MAEpCD,KAAK,CAACQ,cAAc,CAACkB,IAAI,CAACjB,OAAO,CAAC;MAClCT,KAAK,CAACgB,QAAQ,CAAC,IAAI,CAAC;MAEpBC,SAAS,CAACiB,QAAQ,CAAClC,KAAK,CAAC;;MAEzB;MACA,MAAMmC,IAAI,GAAG3C,QAAQ,CAAC4C,aAAa,CAAC,MAAM,CAAC;MAC3CD,IAAI,CAACE,WAAW,GAAG,QAAQ,CAAC,CAAC;MAC7BrC,KAAK,CAACsC,UAAU,CAACH,IAAI,CAAC;MACtBA,IAAI,CAACV,cAAc,CAAC;QAACc,KAAK,EAAE;MAAQ,CAAC,CAAC;MACtCJ,IAAI,CAACK,MAAM,CAAC,CAAC,CAAC,CAAC;MACf;IACF;EACF;EAEA,MAAMC,SAAS,GAAGd,mBAAmB,CAACe,qBAAqB,CAAC,CAAC;EAC7D,MAAMC,UAAU,GAAGxD,MAAM,CAACuD,qBAAqB,CAAC,CAAC;EACjD;EACA,IAAID,SAAS,CAACG,GAAG,GAAGH,SAAS,CAACI,MAAM,GAAGF,UAAU,CAACC,GAAG,GAAGD,UAAU,CAACE,MAAM,EAAE;IACzEjB,aAAa,CAACkB,SAAS,GAAGL,SAAS,CAACG,GAAG,GAAGD,UAAU,CAACC,GAAG,GAAGzD,MAAM,CAAC2D,SAAS,GAAGH,UAAU,CAACE,MAAM,GAAGJ,SAAS,CAACI,MAAM,GAAG,CAAC;IACtH;EACF;EAEAlB,mBAAmB,CAACF,cAAc,CAAC;IACjCc,KAAK,EAAE;EACT,CAAC,CAAC;AACJ;AAEA,SAASQ,eAAeA,CAAC5D,MAAmB,EAAE;EAC5C,MAAMa,KAAK,GAAGR,QAAQ,CAACS,WAAW,CAAC,CAAC;EACpC,MAAMgB,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;EACvC,IAAIF,SAAS,EAAE;IACbjB,KAAK,CAACW,QAAQ,CAACxB,MAAM,EAAEA,MAAM,CAACyB,UAAU,CAACd,MAAM,CAAC;IAChDE,KAAK,CAACgB,QAAQ,CAAC,IAAI,CAAC;IACpBC,SAAS,CAACG,gBAAgB,CAACpB,KAAK,CAACqB,cAAc,EAAErB,KAAK,CAACsB,WAAW,EAAEtB,KAAK,CAACuB,YAAY,EAAEvB,KAAK,CAACwB,SAAS,CAAC;EAC1G;AACF;AAEA,SAASwB,wBAAwBA,CAAC7D,MAAgC,EAAE;EAClE,SAAS8D,cAAcA,CAACvB,IAAU,EAAE;IAClC,IAAIjB,OAAO,GAAGiB,IAA0B;IACxC,IAAIjB,OAAO,YAAYyC,IAAI,EAAE;MAC3BzC,OAAO,GAAGiB,IAAI,CAACyB,aAA4B;IAC7C;IACA,OAAO1C,OAAO;EAChB;EAEA,MAAMQ,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;EACvC,IAAI,CAACF,SAAS,IAAKA,SAAS,IAAIA,SAAS,CAACmC,UAAU,KAAK,CAAE,EAAE;IAC3D,OAAO,IAAI;EACb;EACA,MAAMpD,KAAK,GAAGiB,SAAS,CAACoC,UAAU,CAAC,CAAC,CAAC;EACrC,MAAM3C,YAAY,GAAGuC,cAAc,CAACjD,KAAK,CAACqB,cAAc,CAAC;EACzD,MAAMP,UAAU,GAAGd,KAAK,CAACqB,cAAc,KAAKrB,KAAK,CAACuB,YAAY,GAAGb,YAAY,GAAGuC,cAAc,CAACjD,KAAK,CAACuB,YAAY,CAAC;EAElH,MAAMpB,aAAa,GAAGnB,qBAAqB,CAACG,MAAM,CAACI,IAAI,EAAEmB,YAAY,CAAC;EACtE,MAAMN,WAAW,GAAGpB,qBAAqB,CAACG,MAAM,CAACI,IAAI,EAAEuB,UAAU,CAAC;EAElE,IAAIpB,KAAK,GAAG,CAAC,CAAC;EACd,IAAIK,GAAG,GAAG,CAAC,CAAC;EACZ,IAAII,aAAa,IAAIC,WAAW,EAAE;IAChCV,KAAK,GAAGS,aAAa,CAACT,KAAK,GAAGM,KAAK,CAACsB,WAAW;;IAE/C;IACA,IAAIlB,WAAW,EAAEkD,UAAU,KAAK,IAAI,EAAE;MACpCvD,GAAG,GAAGZ,MAAM,CAACoE,KAAK,CAACzD,MAAM;IAC3B,CAAC,MAAM;MACLC,GAAG,GAAGK,WAAW,CAACV,KAAK,GAAGM,KAAK,CAACwB,SAAS;IAC3C;EACF;EACA,OAAO;IAAC9B,KAAK;IAAEK;EAAG,CAAC;AACrB;AAEA,SAASyD,eAAeA,CAAA,EAAG;EACzB,MAAMvC,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;EACvC,IAAIF,SAAS,EAAE;IACbA,SAAS,CAACwC,eAAe,CAAC,CAAC;EAC7B;AACF;AAEA,SAAQT,wBAAwB,EAAED,eAAe,EAAE7D,iBAAiB,EAAEsE,eAAe,EAAE/B,cAAc","ignoreList":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { isChildOfMarkdownElement, isChildOfMultilineMarkdownElement } from "./blockUtils.js";
|
|
4
|
+
import BrowserUtils from "./browserUtils.js";
|
|
3
5
|
const ZERO_WIDTH_SPACE = '\u200B';
|
|
4
6
|
|
|
5
7
|
// If an Input Method Editor is processing key input, the 'keyCode' is 229.
|
|
@@ -32,16 +34,33 @@ function normalizeValue(value) {
|
|
|
32
34
|
return value.replaceAll('\r\n', '\n');
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Returns the parent of a given node that is higher in the hierarchy and is of a different type than 'text', 'br' or 'line'
|
|
39
|
+
*/
|
|
40
|
+
function getTopParentNode(node) {
|
|
41
|
+
let currentParentNode = node.parentNode;
|
|
42
|
+
while (currentParentNode && ['text', 'br', 'line'].includes(currentParentNode.parentElement?.getAttribute('data-type') || '')) {
|
|
43
|
+
currentParentNode = currentParentNode?.parentNode || null;
|
|
44
|
+
}
|
|
45
|
+
return currentParentNode;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* On Firefox, when breaking one codeblock, its syntax and the <br> after it can be merged into the closing syntax of the previous codeblock.
|
|
50
|
+
*/
|
|
51
|
+
function didTwoCodeblocksMerge(node) {
|
|
52
|
+
if (!node || !BrowserUtils.isFirefox) {
|
|
53
|
+
return;
|
|
44
54
|
}
|
|
55
|
+
// To identify that two codeblock has merged, we check if current line ends with <br> tag, that previously was second codeblock's opening syntax line break
|
|
56
|
+
const hasPartOfBrokenCodeblock = node.lastChild?.lastChild?.lastChild?.lastChild?.nodeName === 'BR';
|
|
57
|
+
return BrowserUtils.isFirefox && node.lastChild?.getAttribute('data-type') === 'codeblock' && hasPartOfBrokenCodeblock;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Parses the HTML structure of a MarkdownTextInputElement to a plain text string. Used for getting the correct value of the input element.
|
|
62
|
+
*/
|
|
63
|
+
function parseInnerHTMLToText(target, cursorPosition, inputType, isMultiline = true) {
|
|
45
64
|
const stack = [target];
|
|
46
65
|
let text = '';
|
|
47
66
|
let shouldAddNewline = false;
|
|
@@ -66,7 +85,7 @@ function parseInnerHTMLToText(target, cursorPosition, inputType, isMultiline = t
|
|
|
66
85
|
} else {
|
|
67
86
|
const firstChild = node.firstChild;
|
|
68
87
|
const containsEmptyBlockElement = firstChild?.getAttribute?.('data-type') === 'block' && firstChild.textContent === '';
|
|
69
|
-
if (shouldAddNewline && !containsEmptyBlockElement) {
|
|
88
|
+
if (firstChild && shouldAddNewline && !containsEmptyBlockElement && !didTwoCodeblocksMerge(node.previousSibling)) {
|
|
70
89
|
text += '\n';
|
|
71
90
|
shouldAddNewline = false;
|
|
72
91
|
}
|
|
@@ -74,11 +93,29 @@ function parseInnerHTMLToText(target, cursorPosition, inputType, isMultiline = t
|
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
95
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
96
|
+
let hasAddedNewline = false;
|
|
97
|
+
// Fix for codeblocks: Removing last codeblock newline, moves codeblock syntax too far into the codeblock content
|
|
98
|
+
// skipping one <br> after the codeblock syntax. We need to force parsing it before the text node is added.
|
|
99
|
+
if (node.parentElement && !node.parentElement.getAttribute?.('data-type') && isChildOfMarkdownElement(node, 'pre')) {
|
|
100
|
+
text += '\n';
|
|
101
|
+
const nextBR = node.parentElement?.nextElementSibling?.firstElementChild ?? node.parentElement?.nextElementSibling;
|
|
102
|
+
if (nextBR && nextBR.tagName === 'BR') {
|
|
103
|
+
nextBR.remove();
|
|
104
|
+
}
|
|
105
|
+
hasAddedNewline = true;
|
|
106
|
+
}
|
|
107
|
+
|
|
77
108
|
// Parse text nodes into text
|
|
78
109
|
text += node.textContent;
|
|
110
|
+
|
|
111
|
+
// Fix for codeblocks: If we are adding text at the end of a multiline markdown type element, we need to add a newline
|
|
112
|
+
// because the new text can replace the last <br> element and it will not be added to the text.
|
|
113
|
+
if (node.parentElement && node.parentNode?.parentElement?.nextSibling && !node.parentNode?.nextSibling && isChildOfMultilineMarkdownElement(node) && (!hasAddedNewline && isChildOfMarkdownElement(node, 'br') || !node.parentElement.getAttribute?.('data-type') && isChildOfMarkdownElement(node, 'syntax'))) {
|
|
114
|
+
text += '\n';
|
|
115
|
+
}
|
|
79
116
|
} else if (node.nodeName === 'BR') {
|
|
80
117
|
const parentNode = getTopParentNode(node);
|
|
81
|
-
if (isMultiline && parentNode && parentNode.parentElement?.contentEditable !== 'true' && !!node.getAttribute('data-id')) {
|
|
118
|
+
if (isMultiline && parentNode && parentNode.parentElement?.contentEditable !== 'true' && !!(node.getAttribute('data-id') || node.parentElement.getAttribute('data-type') === 'br') || node.parentElement?.getAttribute('data-type') === 'text' && isChildOfMultilineMarkdownElement(node)) {
|
|
82
119
|
// Parse br elements into newlines only if their parent is not a child of the MarkdownTextInputElement (a paragraph when writing or a div when pasting).
|
|
83
120
|
// It prevents adding extra newlines when entering text - and now only for multiline inputs
|
|
84
121
|
text += '\n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ZERO_WIDTH_SPACE","isEventComposing","nativeEvent","isComposing","keyCode","getPlaceholderValue","placeholder","length","getElementHeight","node","styles","numberOfLines","tempElement","document","createElement","setAttribute","Object","assign","style","textContent","Array","fill","join","parentElement","appendChild","height","clientHeight","removeChild","normalizeValue","value","replaceAll","
|
|
1
|
+
{"version":3,"names":["isChildOfMarkdownElement","isChildOfMultilineMarkdownElement","BrowserUtils","ZERO_WIDTH_SPACE","isEventComposing","nativeEvent","isComposing","keyCode","getPlaceholderValue","placeholder","length","getElementHeight","node","styles","numberOfLines","tempElement","document","createElement","setAttribute","Object","assign","style","textContent","Array","fill","join","parentElement","appendChild","height","clientHeight","removeChild","normalizeValue","value","replaceAll","getTopParentNode","currentParentNode","parentNode","includes","getAttribute","didTwoCodeblocksMerge","isFirefox","hasPartOfBrokenCodeblock","lastChild","nodeName","parseInnerHTMLToText","target","cursorPosition","inputType","isMultiline","stack","text","shouldAddNewline","lastNode","childNodes","innerHTML","pop","isTopComponent","contentEditable","nodeType","Node","TEXT_NODE","firstChild","containsEmptyBlockElement","previousSibling","hasAddedNewline","nextBR","nextElementSibling","firstElementChild","tagName","remove","nextSibling","i","child","push","slice"],"sourceRoot":"../../../../src","sources":["web/utils/inputUtils.ts"],"mappings":";;AAEA,SAAQA,wBAAwB,EAAEC,iCAAiC,QAAO,iBAAc;AACxF,OAAOC,YAAY,MAAM,mBAAgB;AAEzC,MAAMC,gBAAgB,GAAG,QAAQ;;AAEjC;AACA;AACA,SAASC,gBAAgBA,CAACC,WAA2D,EAAE;EACrF,OAAOA,WAAW,CAACC,WAAW,IAAID,WAAW,CAACE,OAAO,KAAK,GAAG;AAC/D;AAEA,SAASC,mBAAmBA,CAACC,WAA+B,EAAE;EAC5D,IAAI,CAACA,WAAW,EAAE;IAChB,OAAON,gBAAgB;EACzB;EACA,OAAOM,WAAW,CAACC,MAAM,GAAGD,WAAW,GAAGN,gBAAgB;AAC5D;AAEA,SAASQ,gBAAgBA,CAACC,IAAoB,EAAEC,MAAqB,EAAEC,aAAiC,EAAE;EACxG,IAAIA,aAAa,EAAE;IACjB,MAAMC,WAAW,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IACjDF,WAAW,CAACG,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnDC,MAAM,CAACC,MAAM,CAACL,WAAW,CAACM,KAAK,EAAER,MAAM,CAAC;IACxCE,WAAW,CAACO,WAAW,GAAGC,KAAK,CAACT,aAAa,CAAC,CAACU,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACnE,IAAIb,IAAI,CAACc,aAAa,EAAE;MACtBd,IAAI,CAACc,aAAa,CAACC,WAAW,CAACZ,WAAW,CAAC;MAC3C,MAAMa,MAAM,GAAGb,WAAW,CAACc,YAAY;MACvCjB,IAAI,CAACc,aAAa,CAACI,WAAW,CAACf,WAAW,CAAC;MAC3C,OAAOa,MAAM,GAAG,GAAGA,MAAM,IAAI,GAAG,MAAM;IACxC;EACF;EACA,OAAOf,MAAM,CAACe,MAAM,GAAG,GAAGf,MAAM,CAACe,MAAM,IAAI,GAAG,MAAM;AACtD;AAEA,SAASG,cAAcA,CAACC,KAAa,EAAE;EACrC,OAAOA,KAAK,CAACC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;AACvC;;AAEA;AACA;AACA;AACA,SAASC,gBAAgBA,CAACtB,IAAe,EAAE;EACzC,IAAIuB,iBAAiB,GAAGvB,IAAI,CAACwB,UAAU;EACvC,OAAOD,iBAAiB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAACE,QAAQ,CAACF,iBAAiB,CAACT,aAAa,EAAEY,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;IAC7HH,iBAAiB,GAAGA,iBAAiB,EAAEC,UAAU,IAAI,IAAI;EAC3D;EACA,OAAOD,iBAAiB;AAC1B;;AAEA;AACA;AACA;AACA,SAASI,qBAAqBA,CAAC3B,IAAsB,EAAE;EACrD,IAAI,CAACA,IAAI,IAAI,CAACV,YAAY,CAACsC,SAAS,EAAE;IACpC;EACF;EACA;EACA,MAAMC,wBAAwB,GAAG7B,IAAI,CAAC8B,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAEC,QAAQ,KAAK,IAAI;EACnG,OAAOzC,YAAY,CAACsC,SAAS,IAAK5B,IAAI,CAAC8B,SAAS,EAAkBJ,YAAY,CAAC,WAAW,CAAC,KAAK,WAAW,IAAIG,wBAAwB;AACzI;;AAEA;AACA;AACA;AACA,SAASG,oBAAoBA,CAACC,MAAgC,EAAEC,cAAsB,EAAEC,SAAkB,EAAEC,WAAW,GAAG,IAAI,EAAU;EACtI,MAAMC,KAAkB,GAAG,CAACJ,MAAM,CAAC;EACnC,IAAIK,IAAI,GAAG,EAAE;EACb,IAAIC,gBAAgB,GAAG,KAAK;EAC5B,MAAMC,QAAQ,GAAGP,MAAM,CAACQ,UAAU,CAACR,MAAM,CAACQ,UAAU,CAAC3C,MAAM,GAAG,CAAC,CAAC;EAChE;EACA,IAAI0C,QAAQ,EAAET,QAAQ,KAAK,KAAK,IAAKS,QAAQ,EAAkBE,SAAS,KAAK,MAAM,EAAE;IACnFT,MAAM,CAACf,WAAW,CAACsB,QAAQ,CAAC;EAC9B;EAEA,OAAOH,KAAK,CAACvC,MAAM,GAAG,CAAC,EAAE;IACvB,MAAME,IAAI,GAAGqC,KAAK,CAACM,GAAG,CAAC,CAAgB;IACvC,IAAI,CAAC3C,IAAI,EAAE;MACT;IACF;;IAEA;IACA,MAAM4C,cAAc,GAAG5C,IAAI,CAACc,aAAa,EAAE+B,eAAe,KAAK,MAAM;IACrE,IAAID,cAAc,EAAE;MAClB;MACA;MACA,IAAI,CAACR,WAAW,IAAK,CAACD,SAAS,IAAInC,IAAI,CAAC8C,QAAQ,KAAKC,IAAI,CAACC,SAAU,EAAE;QACpET,gBAAgB,GAAG,KAAK;MAC1B,CAAC,MAAM;QACL,MAAMU,UAAU,GAAGjD,IAAI,CAACiD,UAAyB;QACjD,MAAMC,yBAAyB,GAAGD,UAAU,EAAEvB,YAAY,GAAG,WAAW,CAAC,KAAK,OAAO,IAAIuB,UAAU,CAACvC,WAAW,KAAK,EAAE;QACtH,IAAIuC,UAAU,IAAIV,gBAAgB,IAAI,CAACW,yBAAyB,IAAI,CAACvB,qBAAqB,CAAC3B,IAAI,CAACmD,eAAe,CAAC,EAAE;UAChHb,IAAI,IAAI,IAAI;UACZC,gBAAgB,GAAG,KAAK;QAC1B;QACAA,gBAAgB,GAAG,IAAI;MACzB;IACF;IAEA,IAAIvC,IAAI,CAAC8C,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;MACpC,IAAII,eAAe,GAAG,KAAK;MAC3B;MACA;MACA,IAAIpD,IAAI,CAACc,aAAa,IAAI,CAACd,IAAI,CAACc,aAAa,CAACY,YAAY,GAAG,WAAW,CAAC,IAAItC,wBAAwB,CAACY,IAAI,EAAE,KAAK,CAAC,EAAE;QAClHsC,IAAI,IAAI,IAAI;QACZ,MAAMe,MAAM,GAAGrD,IAAI,CAACc,aAAa,EAAEwC,kBAAkB,EAAEC,iBAAiB,IAAIvD,IAAI,CAACc,aAAa,EAAEwC,kBAAkB;QAClH,IAAID,MAAM,IAAIA,MAAM,CAACG,OAAO,KAAK,IAAI,EAAE;UACrCH,MAAM,CAACI,MAAM,CAAC,CAAC;QACjB;QACAL,eAAe,GAAG,IAAI;MACxB;;MAEA;MACAd,IAAI,IAAItC,IAAI,CAACU,WAAW;;MAExB;MACA;MACA,IACEV,IAAI,CAACc,aAAa,IAClBd,IAAI,CAACwB,UAAU,EAAEV,aAAa,EAAE4C,WAAW,IAC3C,CAAC1D,IAAI,CAACwB,UAAU,EAAEkC,WAAW,IAC7BrE,iCAAiC,CAACW,IAAI,CAAC,KACrC,CAACoD,eAAe,IAAIhE,wBAAwB,CAACY,IAAI,EAAE,IAAI,CAAC,IAAM,CAACA,IAAI,CAACc,aAAa,CAACY,YAAY,GAAG,WAAW,CAAC,IAAItC,wBAAwB,CAACY,IAAI,EAAE,QAAQ,CAAE,CAAC,EAC7J;QACAsC,IAAI,IAAI,IAAI;MACd;IACF,CAAC,MAAM,IAAItC,IAAI,CAAC+B,QAAQ,KAAK,IAAI,EAAE;MACjC,MAAMP,UAAU,GAAGF,gBAAgB,CAACtB,IAAI,CAAC;MAEzC,IACGoC,WAAW,IACVZ,UAAU,IACVA,UAAU,CAACV,aAAa,EAAE+B,eAAe,KAAK,MAAM,IACpD,CAAC,EAAG7C,IAAI,CAAiB0B,YAAY,CAAC,SAAS,CAAC,IAAK1B,IAAI,CAACc,aAAa,CAAiBY,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,IAC5H1B,IAAI,CAACc,aAAa,EAAEY,YAAY,CAAC,WAAW,CAAC,KAAK,MAAM,IAAIrC,iCAAiC,CAACW,IAAI,CAAE,EACrG;QACA;QACA;QACAsC,IAAI,IAAI,IAAI;MACd;IACF,CAAC,MAAM;MACL,IAAIqB,CAAC,GAAG3D,IAAI,CAACyC,UAAU,CAAC3C,MAAM,GAAG,CAAC;MAClC,OAAO6D,CAAC,GAAG,CAAC,CAAC,EAAE;QACb,MAAMC,KAAK,GAAG5D,IAAI,CAACyC,UAAU,CAACkB,CAAC,CAAC;QAChC,IAAI,CAACC,KAAK,EAAE;UACV;QACF;QACAvB,KAAK,CAACwB,IAAI,CAACD,KAAK,CAAC;QACjBD,CAAC,EAAE;MACL;IACF;EACF;EACArB,IAAI,GAAGA,IAAI,CAACjB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;;EAEpC;EACA,IAAIiB,IAAI,KAAKL,MAAM,CAACb,KAAK,IAAIe,SAAS,EAAEV,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAC1Da,IAAI,GAAGA,IAAI,CAACwB,KAAK,CAAC,CAAC,EAAE5B,cAAc,GAAG,CAAC,CAAC,GAAGI,IAAI,CAACwB,KAAK,CAAC5B,cAAc,CAAC;EACvE;EACA,OAAOI,IAAI;AACb;AAEA,SAAQ9C,gBAAgB,EAAEI,mBAAmB,EAAEG,gBAAgB,EAAEiC,oBAAoB,EAAEb,cAAc","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownTextInput.web.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInput.web.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EAKT,cAAc,EAKf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAiE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAwE,UAAU,EAAmE,MAAM,OAAO,CAAC;AAI/K,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iDAAiD,CAAC;AAInF,OAAO,KAAK,EAAC,aAAa,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAIzE,UAAU,sBAAuB,SAAQ,cAAc,EAAE,sBAAsB;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,qBAAqB,CAAC;IAC/H,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAoB,SAAQ,KAAK;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,iBAAiB,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAE7E,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAOF,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,KAAK,wBAAwB,GAAG,cAAc,GAC5C,gBAAgB,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,gBAAgB,EAAE,CAAC;CACnC,CAAC;AAEJ,KAAK,mBAAmB,GAAG,WAAW,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"MarkdownTextInput.web.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInput.web.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EAKT,cAAc,EAKf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAiE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAwE,UAAU,EAAmE,MAAM,OAAO,CAAC;AAI/K,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iDAAiD,CAAC;AAInF,OAAO,KAAK,EAAC,aAAa,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAIzE,UAAU,sBAAuB,SAAQ,cAAc,EAAE,sBAAsB;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,qBAAqB,CAAC;IAC/H,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAoB,SAAQ,KAAK;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,iBAAiB,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAE7E,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAOF,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,KAAK,wBAAwB,GAAG,cAAc,GAC5C,gBAAgB,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,gBAAgB,EAAE,CAAC;CACnC,CAAC;AAEJ,KAAK,mBAAmB,GAAG,WAAW,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,iBAAiB,kGAytBtB,CAAC;AAwBF,eAAe,iBAAiB,CAAC;AAEjC,YAAY,EAAC,mBAAmB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,mBAAmB,EAAC,CAAC;AAEzG,iBAAS,iBAAiB,SAEzB;AAED,OAAO,EAAC,iBAAiB,EAAC,CAAC"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
/// <reference types="react-native/types/modules/Codegen" />
|
|
2
2
|
import type { ColorValue, ViewProps } from 'react-native';
|
|
3
3
|
import type { Float, Int32 } from 'react-native/Libraries/Types/CodegenTypes';
|
|
4
|
+
interface CodeBlockStyle {
|
|
5
|
+
fontFamily: string;
|
|
6
|
+
fontSize: Float;
|
|
7
|
+
color: ColorValue;
|
|
8
|
+
backgroundColor: ColorValue;
|
|
9
|
+
borderColor?: ColorValue;
|
|
10
|
+
borderWidth?: Float;
|
|
11
|
+
borderRadius?: Float;
|
|
12
|
+
borderStyle?: string;
|
|
13
|
+
padding?: Float;
|
|
14
|
+
paddingVertical?: Float;
|
|
15
|
+
paddingHorizontal?: Float;
|
|
16
|
+
}
|
|
4
17
|
interface MarkdownStyle {
|
|
5
18
|
syntax: {
|
|
6
19
|
color: ColorValue;
|
|
@@ -21,18 +34,10 @@ interface MarkdownStyle {
|
|
|
21
34
|
marginLeft: Float;
|
|
22
35
|
paddingLeft: Float;
|
|
23
36
|
};
|
|
24
|
-
code: {
|
|
25
|
-
|
|
26
|
-
fontSize: Float;
|
|
27
|
-
color: ColorValue;
|
|
28
|
-
backgroundColor: ColorValue;
|
|
29
|
-
};
|
|
30
|
-
pre: {
|
|
31
|
-
fontFamily: string;
|
|
32
|
-
fontSize: Float;
|
|
33
|
-
color: ColorValue;
|
|
34
|
-
backgroundColor: ColorValue;
|
|
37
|
+
code: CodeBlockStyle & {
|
|
38
|
+
h1NestedFontSize?: Float;
|
|
35
39
|
};
|
|
40
|
+
pre: CodeBlockStyle;
|
|
36
41
|
mentionHere: {
|
|
37
42
|
color: ColorValue;
|
|
38
43
|
backgroundColor: ColorValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownTextInputDecoratorViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInputDecoratorViewNativeComponent.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAC,KAAK,EAAE,KAAK,EAAC,MAAM,2CAA2C,CAAC;AAG5E,UAAU,
|
|
1
|
+
{"version":3,"file":"MarkdownTextInputDecoratorViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInputDecoratorViewNativeComponent.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAC,KAAK,EAAE,KAAK,EAAC,MAAM,2CAA2C,CAAC;AAG5E,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,UAAU,CAAC;IAC5B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,iBAAiB,CAAC,EAAE,KAAK,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,UAAU,CAAC;KACnB,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,KAAK,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE;QACJ,KAAK,EAAE,UAAU,CAAC;KACnB,CAAC;IACF,EAAE,EAAE;QACF,QAAQ,EAAE,KAAK,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,WAAW,EAAE,UAAU,CAAC;QACxB,WAAW,EAAE,KAAK,CAAC;QACnB,UAAU,EAAE,KAAK,CAAC;QAClB,WAAW,EAAE,KAAK,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,cAAc,GAAG;QACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC;KAC1B,CAAC;IACF,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE;QACX,KAAK,EAAE,UAAU,CAAC;QAClB,eAAe,EAAE,UAAU,CAAC;QAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,UAAU,CAAC;QAClB,eAAe,EAAE,UAAU,CAAC;QAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;KACtB,CAAC;IACF,aAAa,EAAE;QACb,KAAK,EAAE,UAAU,CAAC;QAClB,eAAe,EAAE,UAAU,CAAC;QAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACX,QAAQ,EAAE,KAAK,CAAC;QAChB,SAAS,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC;QAChB,SAAS,EAAE,KAAK,CAAC;QACjB,SAAS,EAAE,KAAK,CAAC;QACjB,YAAY,EAAE,KAAK,CAAC;QACpB,YAAY,EAAE,KAAK,CAAC;KACrB,CAAC;IACF,yBAAyB,CAAC,EAAE;QAC1B,eAAe,CAAC,EAAE,UAAU,CAAC;QAC7B,WAAW,CAAC,EAAE,KAAK,CAAC;QACpB,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,YAAY,CAAC,EAAE,KAAK,CAAC;QACrB,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,CAAC,EAAE,KAAK,CAAC;KAChB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,YAAY,CAAC,EAAE,UAAU,CAAC;QAC1B,cAAc,CAAC,EAAE,UAAU,CAAC;QAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,CAAC,EAAE,KAAK,CAAC;QACf,WAAW,CAAC,EAAE,KAAK,CAAC;KACrB,CAAC;CACH;AAED,UAAU,WAAY,SAAQ,SAAS;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC;CACjB;;AAED,wBAEG;AAEH,YAAY,EAAC,aAAa,EAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type MarkdownType = 'bold' | 'italic' | 'strikethrough' | 'emoji' | 'mention-here' | 'mention-user' | 'mention-short' | 'mention-report' | 'link' | 'code' | 'pre' | 'blockquote' | 'h1' | 'syntax' | 'inline-image';
|
|
1
|
+
type MarkdownType = 'bold' | 'italic' | 'strikethrough' | 'emoji' | 'mention-here' | 'mention-user' | 'mention-short' | 'mention-report' | 'link' | 'code' | 'pre' | 'blockquote' | 'h1' | 'syntax' | 'inline-image' | 'codeblock';
|
|
2
2
|
interface MarkdownRange {
|
|
3
3
|
type: MarkdownType;
|
|
4
4
|
start: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonTypes.d.ts","sourceRoot":"","sources":["../../../src/commonTypes.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GACb,MAAM,GACN,QAAQ,GACR,eAAe,GACf,OAAO,GACP,cAAc,GACd,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,MAAM,GACN,MAAM,GACN,KAAK,GACL,YAAY,GACZ,IAAI,GACJ,QAAQ,GACR,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"commonTypes.d.ts","sourceRoot":"","sources":["../../../src/commonTypes.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GACb,MAAM,GACN,QAAQ,GACR,eAAe,GACf,OAAO,GACP,cAAc,GACd,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,MAAM,GACN,MAAM,GACN,KAAK,GACL,YAAY,GACZ,IAAI,GACJ,QAAQ,GACR,cAAc,GACd,WAAW,CAAC;AAEhB,UAAU,aAAa;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,sBAAsB,GAAG;IAC5B,8BAA8B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,YAAY,EAAC,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseExpensiMark.d.ts","sourceRoot":"","sources":["../../../src/parseExpensiMark.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAe,aAAa,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parseExpensiMark.d.ts","sourceRoot":"","sources":["../../../src/parseExpensiMark.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAe,aAAa,EAAC,MAAM,eAAe,CAAC;AA2O/D,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CA0B3D;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,7 @@ type PartialMarkdownStyle = Partial<{
|
|
|
3
3
|
[K in keyof MarkdownStyle]: Partial<MarkdownStyle[K]>;
|
|
4
4
|
}>;
|
|
5
5
|
declare function mergeMarkdownStyleWithDefault(input: PartialMarkdownStyle | undefined): MarkdownStyle;
|
|
6
|
-
declare function parseStringWithUnitToNumber(value: string | null): number;
|
|
6
|
+
declare function parseStringWithUnitToNumber(value: string | number | null): number;
|
|
7
7
|
export type { PartialMarkdownStyle };
|
|
8
8
|
export { mergeMarkdownStyleWithDefault, parseStringWithUnitToNumber };
|
|
9
9
|
//# sourceMappingURL=styleUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleUtils.d.ts","sourceRoot":"","sources":["../../../src/styleUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iDAAiD,CAAC;AAEnF,KAAK,oBAAoB,GAAG,OAAO,CAAC;KACjC,CAAC,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"styleUtils.d.ts","sourceRoot":"","sources":["../../../src/styleUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iDAAiD,CAAC;AAEnF,KAAK,oBAAoB,GAAG,OAAO,CAAC;KACjC,CAAC,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC,CAAC;AAoFH,iBAAS,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,aAAa,CAiB7F;AAED,iBAAS,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAK1E;AAED,YAAY,EAAC,oBAAoB,EAAC,CAAC;AAEnC,OAAO,EAAC,6BAA6B,EAAE,2BAA2B,EAAC,CAAC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import type { MarkdownTextInputElement } from '../../MarkdownTextInput.web';
|
|
2
1
|
import type { InlineImagesInputProps, MarkdownRange } from '../../commonTypes';
|
|
2
|
+
import type { MarkdownTextInputElement } from '../../MarkdownTextInput.web';
|
|
3
3
|
import type { PartialMarkdownStyle } from '../../styleUtils';
|
|
4
4
|
import type { NodeType, TreeNode } from './treeUtils';
|
|
5
5
|
declare function addStyleToBlock(targetElement: HTMLElement, type: NodeType, markdownStyle: PartialMarkdownStyle, isMultiline?: boolean): void;
|
|
6
|
+
declare const MULTILINE_MARKDOWN_TYPES: string[];
|
|
6
7
|
declare function isBlockMarkdownType(type: NodeType): boolean;
|
|
7
8
|
declare function isMultilineMarkdownType(type: NodeType): boolean;
|
|
8
9
|
declare function getFirstBlockMarkdownRange(ranges: MarkdownRange[]): MarkdownRange | undefined;
|
|
9
10
|
declare function extendBlockStructure(currentInput: MarkdownTextInputElement, targetNode: TreeNode, currentRange: MarkdownRange, ranges: MarkdownRange[], text: string, markdownStyle: PartialMarkdownStyle, inlineImagesProps: InlineImagesInputProps): TreeNode;
|
|
10
|
-
|
|
11
|
+
declare function isChildOfMarkdownElement(node: HTMLElement, elementType: NodeType): boolean;
|
|
12
|
+
declare function isChildOfMultilineMarkdownElement(node: HTMLElement): boolean;
|
|
13
|
+
export { addStyleToBlock, extendBlockStructure, isBlockMarkdownType, isMultilineMarkdownType, getFirstBlockMarkdownRange, isChildOfMarkdownElement, isChildOfMultilineMarkdownElement, MULTILINE_MARKDOWN_TYPES, };
|
|
11
14
|
//# sourceMappingURL=blockUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/blockUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"blockUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/blockUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;AAE1E,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAEpD,iBAAS,eAAe,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,UAAO,QAqF3H;AA4CD,QAAA,MAAM,wBAAwB,UAAgB,CAAC;AAE/C,iBAAS,mBAAmB,CAAC,IAAI,EAAE,QAAQ,WAE1C;AAED,iBAAS,uBAAuB,CAAC,IAAI,EAAE,QAAQ,WAE9C;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,6BAG1D;AAED,iBAAS,oBAAoB,CAC3B,YAAY,EAAE,wBAAwB,EACtC,UAAU,EAAE,QAAQ,EACpB,YAAY,EAAE,aAAa,EAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,oBAAoB,EACnC,iBAAiB,EAAE,sBAAsB,YAU1C;AAcD,iBAAS,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAEnF;AACD,iBAAS,iCAAiC,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAErE;AAED,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,GACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursorUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/cursorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"cursorUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/cursorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;AAG1E,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAE1C,iBAAS,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,oBAAoB,UAAQ,QAgD5I;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,QA0CvE;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,WAAW,QAQ3C;AAED,iBAAS,wBAAwB,CAAC,MAAM,EAAE,wBAAwB;;;SAiCjE;AAED,iBAAS,eAAe,SAKvB;AAED,OAAO,EAAC,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAC,CAAC"}
|
|
@@ -4,6 +4,9 @@ declare function isEventComposing(nativeEvent: globalThis.KeyboardEvent | Markdo
|
|
|
4
4
|
declare function getPlaceholderValue(placeholder: string | undefined): string;
|
|
5
5
|
declare function getElementHeight(node: HTMLDivElement, styles: CSSProperties, numberOfLines: number | undefined): string;
|
|
6
6
|
declare function normalizeValue(value: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Parses the HTML structure of a MarkdownTextInputElement to a plain text string. Used for getting the correct value of the input element.
|
|
9
|
+
*/
|
|
7
10
|
declare function parseInnerHTMLToText(target: MarkdownTextInputElement, cursorPosition: number, inputType?: string, isMultiline?: boolean): string;
|
|
8
11
|
export { isEventComposing, getPlaceholderValue, getElementHeight, parseInnerHTMLToText, normalizeValue };
|
|
9
12
|
//# sourceMappingURL=inputUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/inputUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"inputUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/inputUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;AAQ/F,iBAAS,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,aAAa,GAAG,mBAAmB,WAEpF;AAED,iBAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,UAK3D;AAED,iBAAS,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,UAcvG;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,UAEpC;AAyBD;;GAEG;AACH,iBAAS,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,UAAO,GAAG,MAAM,CA8FtI;AAED,OAAO,EAAC,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expensify/react-native-live-markdown",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.300",
|
|
4
4
|
"description": "Drop-in replacement for React Native's TextInput component with Markdown formatting.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"eslint-plugin-prettier": "^4.0.0",
|
|
88
88
|
"eslint-plugin-promise": "^6.1.1",
|
|
89
89
|
"eslint-plugin-tsdoc": "^0.2.17",
|
|
90
|
-
"expensify-common": "2.0.
|
|
90
|
+
"expensify-common": "2.0.148",
|
|
91
91
|
"jest": "^29.6.3",
|
|
92
92
|
"jest-environment-jsdom": "^29.7.0",
|
|
93
93
|
"nodemon": "^3.1.3",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"typescript": "~5.3.3"
|
|
105
105
|
},
|
|
106
106
|
"peerDependencies": {
|
|
107
|
-
"expensify-common": ">=2.0.
|
|
107
|
+
"expensify-common": ">=2.0.148",
|
|
108
108
|
"react": "*",
|
|
109
109
|
"react-native": "*",
|
|
110
110
|
"react-native-reanimated": ">=3.17.0"
|
|
@@ -451,8 +451,9 @@ const MarkdownTextInput = React.forwardRef<MarkdownTextInput, MarkdownTextInputP
|
|
|
451
451
|
handleContentSizeChange();
|
|
452
452
|
},
|
|
453
453
|
[
|
|
454
|
-
parser,
|
|
455
454
|
updateTextColor,
|
|
455
|
+
multiline,
|
|
456
|
+
maxLength,
|
|
456
457
|
updateSelection,
|
|
457
458
|
onChange,
|
|
458
459
|
onChangeText,
|
|
@@ -461,9 +462,9 @@ const MarkdownTextInput = React.forwardRef<MarkdownTextInput, MarkdownTextInputP
|
|
|
461
462
|
redo,
|
|
462
463
|
handleFormatSelection,
|
|
463
464
|
parseText,
|
|
465
|
+
parser,
|
|
464
466
|
processedMarkdownStyle,
|
|
465
467
|
setEventProps,
|
|
466
|
-
maxLength,
|
|
467
468
|
],
|
|
468
469
|
);
|
|
469
470
|
|
|
@@ -3,6 +3,20 @@ import type {ColorValue, ViewProps} from 'react-native';
|
|
|
3
3
|
import type {Float, Int32} from 'react-native/Libraries/Types/CodegenTypes';
|
|
4
4
|
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
5
5
|
|
|
6
|
+
interface CodeBlockStyle {
|
|
7
|
+
fontFamily: string;
|
|
8
|
+
fontSize: Float;
|
|
9
|
+
color: ColorValue;
|
|
10
|
+
backgroundColor: ColorValue;
|
|
11
|
+
borderColor?: ColorValue;
|
|
12
|
+
borderWidth?: Float;
|
|
13
|
+
borderRadius?: Float;
|
|
14
|
+
borderStyle?: string;
|
|
15
|
+
padding?: Float;
|
|
16
|
+
paddingVertical?: Float;
|
|
17
|
+
paddingHorizontal?: Float;
|
|
18
|
+
}
|
|
19
|
+
|
|
6
20
|
interface MarkdownStyle {
|
|
7
21
|
syntax: {
|
|
8
22
|
color: ColorValue;
|
|
@@ -23,18 +37,10 @@ interface MarkdownStyle {
|
|
|
23
37
|
marginLeft: Float;
|
|
24
38
|
paddingLeft: Float;
|
|
25
39
|
};
|
|
26
|
-
code: {
|
|
27
|
-
|
|
28
|
-
fontSize: Float;
|
|
29
|
-
color: ColorValue;
|
|
30
|
-
backgroundColor: ColorValue;
|
|
31
|
-
};
|
|
32
|
-
pre: {
|
|
33
|
-
fontFamily: string;
|
|
34
|
-
fontSize: Float;
|
|
35
|
-
color: ColorValue;
|
|
36
|
-
backgroundColor: ColorValue;
|
|
40
|
+
code: CodeBlockStyle & {
|
|
41
|
+
h1NestedFontSize?: Float;
|
|
37
42
|
};
|
|
43
|
+
pre: CodeBlockStyle;
|
|
38
44
|
mentionHere: {
|
|
39
45
|
color: ColorValue;
|
|
40
46
|
backgroundColor: ColorValue;
|
package/src/commonTypes.ts
CHANGED
package/src/parseExpensiMark.ts
CHANGED
|
@@ -174,9 +174,11 @@ function parseTreeToTextAndRanges(tree: StackItem): [string, MarkdownRange[]] {
|
|
|
174
174
|
} else if (node.tag === '<br />') {
|
|
175
175
|
text += '\n';
|
|
176
176
|
} else if (node.tag.startsWith('<pre')) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
const [_, lb, content] = node.children.join('').match(/^(\r?\n)([\s\S]*)$/) ?? [];
|
|
178
|
+
// Adding opening ("```${lb}") and closing ("```") codeblock syntax length, equal to 7, to the content length
|
|
179
|
+
ranges.push({type: 'codeblock', start: text.length, length: (content?.length ?? 0) + 7});
|
|
180
|
+
appendSyntax(`\`\`\`${lb}`);
|
|
181
|
+
addChildrenWithStyle(`${content}`, 'pre');
|
|
180
182
|
appendSyntax('```');
|
|
181
183
|
} else if (node.tag.startsWith('<a href="')) {
|
|
182
184
|
const rawHref = node.tag.match(/href="([^"]*)"/)![1]!; // always present
|
package/src/styleUtils.ts
CHANGED
|
@@ -42,12 +42,22 @@ function makeDefaultMarkdownStyle(): MarkdownStyle {
|
|
|
42
42
|
fontSize: 20,
|
|
43
43
|
color: 'black',
|
|
44
44
|
backgroundColor: 'lightgray',
|
|
45
|
+
borderColor: 'gray',
|
|
46
|
+
borderWidth: 1,
|
|
47
|
+
borderRadius: 4,
|
|
48
|
+
borderStyle: 'solid',
|
|
49
|
+
padding: 0,
|
|
45
50
|
},
|
|
46
51
|
pre: {
|
|
47
52
|
fontFamily: FONT_FAMILY_MONOSPACE,
|
|
48
53
|
fontSize: 20,
|
|
49
54
|
color: 'black',
|
|
50
55
|
backgroundColor: 'lightgray',
|
|
56
|
+
borderColor: 'gray',
|
|
57
|
+
borderWidth: 1,
|
|
58
|
+
borderRadius: 4,
|
|
59
|
+
borderStyle: 'solid',
|
|
60
|
+
padding: 2,
|
|
51
61
|
},
|
|
52
62
|
mentionHere: {
|
|
53
63
|
color: 'green',
|
|
@@ -96,7 +106,10 @@ function mergeMarkdownStyleWithDefault(input: PartialMarkdownStyle | undefined):
|
|
|
96
106
|
return output;
|
|
97
107
|
}
|
|
98
108
|
|
|
99
|
-
function parseStringWithUnitToNumber(value: string | null): number {
|
|
109
|
+
function parseStringWithUnitToNumber(value: string | number | null): number {
|
|
110
|
+
if (typeof value === 'number') {
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
100
113
|
return value ? parseInt(value.replace('px', ''), 10) : 0;
|
|
101
114
|
}
|
|
102
115
|
|
|
@@ -30,11 +30,34 @@
|
|
|
30
30
|
padding-right: 1px !important;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.react-native-live-markdown-input-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
.react-native-live-markdown-input-multiline *[data-type='pre'] {
|
|
34
|
+
line-height: 1.3;
|
|
35
|
+
display: block;
|
|
36
|
+
width: fit-content;
|
|
37
|
+
max-width: 100%;
|
|
38
|
+
box-sizing: border-box;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.react-native-live-markdown-input-multiline *[data-type='codeblock'] {
|
|
42
|
+
position: relative;
|
|
43
|
+
width: fit-content;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
z-index: 2;
|
|
47
|
+
display: block;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.react-native-live-markdown-input-singleline *[data-type='code'] > *[data-type='emoji'],
|
|
51
|
+
.react-native-live-markdown-input-multiline *[data-type='code'] > *[data-type='emoji'] {
|
|
52
|
+
font-size: inherit !important;
|
|
53
|
+
line-height: inherit !important;
|
|
54
|
+
vertical-align: unset !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.react-native-live-markdown-input-multiline *[data-type='line'] *[data-type='syntax']:has(+ *[data-type='pre']),
|
|
58
|
+
.react-native-live-markdown-input-multiline *[data-type='line'] *[data-type='pre'] + *[data-type='syntax'] {
|
|
59
|
+
display: block;
|
|
60
|
+
line-height: 1.3;
|
|
38
61
|
}
|
|
39
62
|
|
|
40
63
|
@keyframes react-native-live-markdown-spin {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {MarkdownTextInputElement} from '../../MarkdownTextInput.web';
|
|
2
1
|
import type {InlineImagesInputProps, MarkdownRange} from '../../commonTypes';
|
|
2
|
+
import type {MarkdownTextInputElement} from '../../MarkdownTextInput.web';
|
|
3
|
+
import {parseStringWithUnitToNumber} from '../../styleUtils';
|
|
3
4
|
import type {PartialMarkdownStyle} from '../../styleUtils';
|
|
4
5
|
import {addInlineImagePreview} from '../inputElements/inlineImage';
|
|
5
6
|
import type {NodeType, TreeNode} from './treeUtils';
|
|
@@ -51,12 +52,9 @@ function addStyleToBlock(targetElement: HTMLElement, type: NodeType, markdownSty
|
|
|
51
52
|
});
|
|
52
53
|
break;
|
|
53
54
|
case 'code':
|
|
54
|
-
Object.assign(node.style, markdownStyle.code);
|
|
55
|
-
break;
|
|
56
55
|
case 'pre':
|
|
57
|
-
|
|
56
|
+
addCodeBlockStyles(targetElement, type, markdownStyle, isMultiline);
|
|
58
57
|
break;
|
|
59
|
-
|
|
60
58
|
case 'blockquote':
|
|
61
59
|
Object.assign(node.style, {
|
|
62
60
|
...markdownStyle.blockquote,
|
|
@@ -94,9 +92,49 @@ function addStyleToBlock(targetElement: HTMLElement, type: NodeType, markdownSty
|
|
|
94
92
|
}
|
|
95
93
|
}
|
|
96
94
|
|
|
95
|
+
function addCodeBlockStyles(targetElement: HTMLElement, type: NodeType, markdownStyle: PartialMarkdownStyle, isMultiline = true) {
|
|
96
|
+
const node = targetElement;
|
|
97
|
+
|
|
98
|
+
const defaultPrePadding = markdownStyle.pre?.padding ?? 2;
|
|
99
|
+
const preHorizontalPadding = parseStringWithUnitToNumber(markdownStyle.pre?.paddingHorizontal ?? defaultPrePadding).toString();
|
|
100
|
+
const preVerticalPadding = parseStringWithUnitToNumber(markdownStyle.pre?.paddingVertical ?? defaultPrePadding).toString();
|
|
101
|
+
|
|
102
|
+
const defaultCodePadding = markdownStyle.code?.padding ?? 0;
|
|
103
|
+
const codeHorizontalPadding = parseStringWithUnitToNumber(markdownStyle.code?.paddingHorizontal ?? defaultCodePadding).toString();
|
|
104
|
+
const codeVerticalPadding = parseStringWithUnitToNumber(markdownStyle.code?.paddingVertical ?? defaultCodePadding).toString();
|
|
105
|
+
|
|
106
|
+
switch (type) {
|
|
107
|
+
case 'code':
|
|
108
|
+
Object.assign(node.style, {
|
|
109
|
+
...markdownStyle.code,
|
|
110
|
+
fontSize: markdownStyle.code?.h1NestedFontSize && isChildOfMarkdownElement(node, 'h1') ? markdownStyle.code.h1NestedFontSize : markdownStyle.code?.fontSize,
|
|
111
|
+
padding: `${codeVerticalPadding}px ${codeHorizontalPadding}px`,
|
|
112
|
+
lineHeight: 1.5,
|
|
113
|
+
});
|
|
114
|
+
break;
|
|
115
|
+
case 'pre':
|
|
116
|
+
// In multiline style the pre block using pseudoelements, otherwise default to inline
|
|
117
|
+
if (isMultiline) {
|
|
118
|
+
Object.assign(node.style, {
|
|
119
|
+
...markdownStyle.pre,
|
|
120
|
+
padding: `${preVerticalPadding}px ${preHorizontalPadding}px`,
|
|
121
|
+
});
|
|
122
|
+
} else {
|
|
123
|
+
Object.assign(node.style, {
|
|
124
|
+
...markdownStyle.code,
|
|
125
|
+
padding: `${codeVerticalPadding}px ${codeHorizontalPadding}px`,
|
|
126
|
+
lineHeight: 1.5,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
97
135
|
const BLOCK_MARKDOWN_TYPES = ['inline-image'];
|
|
98
136
|
const FULL_LINE_MARKDOWN_TYPES = ['blockquote'];
|
|
99
|
-
const MULTILINE_MARKDOWN_TYPES = ['
|
|
137
|
+
const MULTILINE_MARKDOWN_TYPES = ['codeblock'];
|
|
100
138
|
|
|
101
139
|
function isBlockMarkdownType(type: NodeType) {
|
|
102
140
|
return BLOCK_MARKDOWN_TYPES.includes(type);
|
|
@@ -108,7 +146,7 @@ function isMultilineMarkdownType(type: NodeType) {
|
|
|
108
146
|
|
|
109
147
|
function getFirstBlockMarkdownRange(ranges: MarkdownRange[]) {
|
|
110
148
|
const blockMarkdownRange = ranges.find((r) => isBlockMarkdownType(r.type) || FULL_LINE_MARKDOWN_TYPES.includes(r.type));
|
|
111
|
-
return FULL_LINE_MARKDOWN_TYPES.includes(blockMarkdownRange
|
|
149
|
+
return blockMarkdownRange && FULL_LINE_MARKDOWN_TYPES.includes(blockMarkdownRange.type) ? undefined : blockMarkdownRange;
|
|
112
150
|
}
|
|
113
151
|
|
|
114
152
|
function extendBlockStructure(
|
|
@@ -130,4 +168,32 @@ function extendBlockStructure(
|
|
|
130
168
|
return targetNode;
|
|
131
169
|
}
|
|
132
170
|
|
|
133
|
-
|
|
171
|
+
function isDescendantOfMarkdownElement(node: HTMLElement, predicate: (type: string | null) => boolean): boolean {
|
|
172
|
+
let currentNode = node.parentNode;
|
|
173
|
+
while (currentNode && (currentNode as HTMLElement)?.contentEditable !== 'true') {
|
|
174
|
+
const elementType = (currentNode as HTMLElement).getAttribute?.('data-type');
|
|
175
|
+
if (predicate(elementType)) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
currentNode = currentNode.parentNode;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function isChildOfMarkdownElement(node: HTMLElement, elementType: NodeType): boolean {
|
|
184
|
+
return isDescendantOfMarkdownElement(node, (type) => type === elementType);
|
|
185
|
+
}
|
|
186
|
+
function isChildOfMultilineMarkdownElement(node: HTMLElement): boolean {
|
|
187
|
+
return isDescendantOfMarkdownElement(node, (type) => MULTILINE_MARKDOWN_TYPES.includes(type as NodeType));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export {
|
|
191
|
+
addStyleToBlock,
|
|
192
|
+
extendBlockStructure,
|
|
193
|
+
isBlockMarkdownType,
|
|
194
|
+
isMultilineMarkdownType,
|
|
195
|
+
getFirstBlockMarkdownRange,
|
|
196
|
+
isChildOfMarkdownElement,
|
|
197
|
+
isChildOfMultilineMarkdownElement,
|
|
198
|
+
MULTILINE_MARKDOWN_TYPES,
|
|
199
|
+
};
|