@expensify/react-native-live-markdown 0.1.299 → 0.1.301
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 +32 -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 +32 -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 +32 -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,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { isChildOfMultilineMarkdownElement } from "./blockUtils.js";
|
|
3
4
|
import { findHTMLElementInTree, getTreeNodeByIndex } from "./treeUtils.js";
|
|
4
5
|
function setCursorPosition(target, startIndex, endIndex = null, shouldScrollIntoView = false) {
|
|
5
6
|
// We don't want to move the cursor if the target is not focused
|
|
@@ -43,10 +44,34 @@ function setCursorPosition(target, startIndex, endIndex = null, shouldScrollInto
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
function scrollIntoView(target, node) {
|
|
47
|
+
let scrollTargetElement = node.element;
|
|
46
48
|
const targetElement = target;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
if (!isChildOfMultilineMarkdownElement(node.element)) {
|
|
50
|
+
const orderIndex = Number(node.orderIndex.split(',')[0]);
|
|
51
|
+
const currentLine = target.tree.childNodes[orderIndex]?.element;
|
|
52
|
+
if (currentLine) {
|
|
53
|
+
scrollTargetElement = currentLine;
|
|
54
|
+
}
|
|
55
|
+
} else if (node.element.nodeName === 'BR') {
|
|
56
|
+
// Force scrolling BR into view
|
|
57
|
+
const selection = window.getSelection();
|
|
58
|
+
if (selection) {
|
|
59
|
+
const range = document.createRange();
|
|
60
|
+
range.setStartBefore(node.element);
|
|
61
|
+
range.collapse(true);
|
|
62
|
+
selection.addRange(range);
|
|
63
|
+
|
|
64
|
+
// Scroll to caret
|
|
65
|
+
const span = document.createElement('span');
|
|
66
|
+
span.textContent = '\u200B'; // zero-width space
|
|
67
|
+
range.insertNode(span);
|
|
68
|
+
span.scrollIntoView({
|
|
69
|
+
block: 'center'
|
|
70
|
+
});
|
|
71
|
+
span.remove(); // cleanup
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
50
75
|
const caretRect = scrollTargetElement.getBoundingClientRect();
|
|
51
76
|
const targetRect = target.getBoundingClientRect();
|
|
52
77
|
// In case the caret is below the visible input area, scroll to the end of the node
|
|
@@ -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":"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","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":"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","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.301",
|
|
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 {
|
|
@@ -53,3 +76,7 @@
|
|
|
53
76
|
-ms-user-select: none;
|
|
54
77
|
user-select: none;
|
|
55
78
|
}
|
|
79
|
+
|
|
80
|
+
[class^='react-native-live-markdown-input'] [data-type='strikethrough'] * {
|
|
81
|
+
text-decoration: inherit;
|
|
82
|
+
}
|