@expensify/react-native-live-markdown 0.1.116 → 0.1.118
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.js +2 -4
- package/lib/commonjs/MarkdownTextInput.js.map +1 -1
- package/lib/commonjs/MarkdownTextInput.web.js +105 -149
- package/lib/commonjs/MarkdownTextInput.web.js.map +1 -1
- package/lib/commonjs/styleUtils.js.map +1 -1
- package/lib/commonjs/web/utils/blockUtils.js +77 -0
- package/lib/commonjs/web/utils/blockUtils.js.map +1 -0
- package/lib/commonjs/web/utils/browserUtils.js +18 -0
- package/lib/commonjs/web/utils/browserUtils.js.map +1 -0
- package/lib/commonjs/web/utils/cursorUtils.js +111 -0
- package/lib/commonjs/web/utils/cursorUtils.js.map +1 -0
- package/lib/commonjs/web/utils/inputUtils.js +108 -0
- package/lib/commonjs/web/utils/inputUtils.js.map +1 -0
- package/lib/commonjs/web/utils/parserUtils.js +266 -0
- package/lib/commonjs/web/utils/parserUtils.js.map +1 -0
- package/lib/commonjs/web/utils/treeUtils.js +85 -0
- package/lib/commonjs/web/utils/treeUtils.js.map +1 -0
- package/lib/commonjs/web/utils/webStyleUtils.js +51 -0
- package/lib/commonjs/web/utils/webStyleUtils.js.map +1 -0
- package/lib/module/MarkdownTextInput.js +2 -2
- package/lib/module/MarkdownTextInput.js.map +1 -1
- package/lib/module/MarkdownTextInput.web.js +101 -145
- package/lib/module/MarkdownTextInput.web.js.map +1 -1
- package/lib/module/styleUtils.js.map +1 -1
- package/lib/module/web/utils/blockUtils.js +72 -0
- package/lib/module/web/utils/blockUtils.js.map +1 -0
- package/lib/module/web/utils/browserUtils.js +12 -0
- package/lib/module/web/utils/browserUtils.js.map +1 -0
- package/lib/module/web/utils/cursorUtils.js +102 -0
- package/lib/module/web/utils/cursorUtils.js.map +1 -0
- package/lib/module/web/utils/inputUtils.js +99 -0
- package/lib/module/web/utils/inputUtils.js.map +1 -0
- package/lib/module/web/utils/parserUtils.js +260 -0
- package/lib/module/web/utils/parserUtils.js.map +1 -0
- package/lib/module/web/utils/treeUtils.js +78 -0
- package/lib/module/web/utils/treeUtils.js.map +1 -0
- package/lib/module/web/utils/webStyleUtils.js +45 -0
- package/lib/module/web/utils/webStyleUtils.js.map +1 -0
- package/lib/typescript/src/MarkdownTextInput.d.ts +1 -2
- package/lib/typescript/src/MarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/MarkdownTextInput.web.d.ts +9 -3
- package/lib/typescript/src/MarkdownTextInput.web.d.ts.map +1 -1
- package/lib/typescript/src/styleUtils.d.ts +1 -2
- package/lib/typescript/src/styleUtils.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/blockUtils.d.ts +5 -0
- package/lib/typescript/src/web/utils/blockUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/browserUtils.d.ts +12 -0
- package/lib/typescript/src/web/utils/browserUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/cursorUtils.d.ts +12 -0
- package/lib/typescript/src/web/utils/cursorUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/inputUtils.d.ts +9 -0
- package/lib/typescript/src/web/utils/inputUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/parserUtils.d.ts +22 -0
- package/lib/typescript/src/web/utils/parserUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/treeUtils.d.ts +17 -0
- package/lib/typescript/src/web/utils/treeUtils.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/webStyleUtils.d.ts +6 -0
- package/lib/typescript/src/web/utils/webStyleUtils.d.ts.map +1 -0
- package/package.json +5 -2
- package/src/MarkdownTextInput.tsx +4 -7
- package/src/MarkdownTextInput.web.tsx +142 -171
- package/src/styleUtils.ts +1 -3
- package/src/web/utils/blockUtils.ts +72 -0
- package/src/web/utils/browserUtils.ts +13 -0
- package/src/web/utils/cursorUtils.ts +116 -0
- package/src/web/utils/inputUtils.ts +106 -0
- package/src/web/utils/parserUtils.ts +302 -0
- package/src/web/utils/treeUtils.ts +103 -0
- package/src/web/utils/webStyleUtils.ts +54 -0
- package/lib/commonjs/web/browserUtils.js +0 -16
- package/lib/commonjs/web/browserUtils.js.map +0 -1
- package/lib/commonjs/web/cursorUtils.js +0 -167
- package/lib/commonjs/web/cursorUtils.js.map +0 -1
- package/lib/commonjs/web/parserUtils.js +0 -214
- package/lib/commonjs/web/parserUtils.js.map +0 -1
- package/lib/module/web/browserUtils.js +0 -11
- package/lib/module/web/browserUtils.js.map +0 -1
- package/lib/module/web/cursorUtils.js +0 -154
- package/lib/module/web/cursorUtils.js.map +0 -1
- package/lib/module/web/parserUtils.js +0 -206
- package/lib/module/web/parserUtils.js.map +0 -1
- package/lib/typescript/src/web/browserUtils.d.ts +0 -10
- package/lib/typescript/src/web/browserUtils.d.ts.map +0 -1
- package/lib/typescript/src/web/cursorUtils.d.ts +0 -12
- package/lib/typescript/src/web/cursorUtils.d.ts.map +0 -1
- package/lib/typescript/src/web/parserUtils.d.ts +0 -17
- package/lib/typescript/src/web/parserUtils.d.ts.map +0 -1
- package/src/web/browserUtils.ts +0 -11
- package/src/web/cursorUtils.ts +0 -177
- package/src/web/parserUtils.ts +0 -228
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
|
+
import { mergeMarkdownStyleWithDefault } from '../../styleUtils';
|
|
4
|
+
let createReactDOMStyle;
|
|
5
|
+
try {
|
|
6
|
+
createReactDOMStyle =
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
8
|
+
require('react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle').default;
|
|
9
|
+
} catch (e) {
|
|
10
|
+
throw new Error('[react-native-live-markdown] Function `createReactDOMStyle` from react-native-web not found. Please make sure that you are using React Native Web 0.18 or newer.');
|
|
11
|
+
}
|
|
12
|
+
let preprocessStyle;
|
|
13
|
+
try {
|
|
14
|
+
preprocessStyle =
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
|
+
require('react-native-web/dist/exports/StyleSheet/preprocess').default;
|
|
17
|
+
} catch (e) {
|
|
18
|
+
throw new Error('[react-native-live-markdown] Function `preprocessStyle` from react-native-web not found.');
|
|
19
|
+
}
|
|
20
|
+
let dangerousStyleValue;
|
|
21
|
+
try {
|
|
22
|
+
dangerousStyleValue =
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
24
|
+
require('react-native-web/dist/modules/setValueForStyles/dangerousStyleValue').default;
|
|
25
|
+
} catch (e) {
|
|
26
|
+
throw new Error('[react-native-live-markdown] Function `dangerousStyleValue` from react-native-web not found.');
|
|
27
|
+
}
|
|
28
|
+
function processUnitsInMarkdownStyle(input) {
|
|
29
|
+
const output = JSON.parse(JSON.stringify(input));
|
|
30
|
+
Object.keys(output).forEach(key => {
|
|
31
|
+
const obj = output[key];
|
|
32
|
+
Object.keys(obj).forEach(prop => {
|
|
33
|
+
obj[prop] = dangerousStyleValue(prop, obj[prop], false);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
return output;
|
|
37
|
+
}
|
|
38
|
+
function processMarkdownStyle(input) {
|
|
39
|
+
return processUnitsInMarkdownStyle(mergeMarkdownStyleWithDefault(input));
|
|
40
|
+
}
|
|
41
|
+
function parseToReactDOMStyle(style) {
|
|
42
|
+
return createReactDOMStyle(preprocessStyle(style));
|
|
43
|
+
}
|
|
44
|
+
export { parseToReactDOMStyle, processMarkdownStyle };
|
|
45
|
+
//# sourceMappingURL=webStyleUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mergeMarkdownStyleWithDefault","createReactDOMStyle","require","default","e","Error","preprocessStyle","dangerousStyleValue","processUnitsInMarkdownStyle","input","output","JSON","parse","stringify","Object","keys","forEach","key","obj","prop","processMarkdownStyle","parseToReactDOMStyle","style"],"sourceRoot":"../../../../src","sources":["web/utils/webStyleUtils.ts"],"mappings":"AAAA;;AAGA,SAAQA,6BAA6B,QAAO,kBAAkB;AAE9D,IAAIC,mBAAwC;AAC5C,IAAI;EACFA,mBAAmB;EACjB;EACAC,OAAO,CAAC,uEAAuE,CAAC,CAACC,OAAO;AAC5F,CAAC,CAAC,OAAOC,CAAC,EAAE;EACV,MAAM,IAAIC,KAAK,CAAC,kKAAkK,CAAC;AACrL;AAEA,IAAIC,eAAoC;AACxC,IAAI;EACFA,eAAe;EACb;EACAJ,OAAO,CAAC,qDAAqD,CAAC,CAACC,OAAO;AAC1E,CAAC,CAAC,OAAOC,CAAC,EAAE;EACV,MAAM,IAAIC,KAAK,CAAC,0FAA0F,CAAC;AAC7G;AAEA,IAAIE,mBAAiF;AACrF,IAAI;EACFA,mBAAmB;EACjB;EACAL,OAAO,CAAC,qEAAqE,CAAC,CAACC,OAAO;AAC1F,CAAC,CAAC,OAAOC,CAAC,EAAE;EACV,MAAM,IAAIC,KAAK,CAAC,8FAA8F,CAAC;AACjH;AAEA,SAASG,2BAA2BA,CAACC,KAAoB,EAAiB;EACxE,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACJ,KAAK,CAAC,CAAC;EAEhDK,MAAM,CAACC,IAAI,CAACL,MAAM,CAAC,CAACM,OAAO,CAAEC,GAAG,IAAK;IACnC,MAAMC,GAAG,GAAGR,MAAM,CAACO,GAAG,CAAC;IACvBH,MAAM,CAACC,IAAI,CAACG,GAAG,CAAC,CAACF,OAAO,CAAEG,IAAI,IAAK;MACjCD,GAAG,CAACC,IAAI,CAAC,GAAGZ,mBAAmB,CAACY,IAAI,EAAED,GAAG,CAACC,IAAI,CAAC,EAAE,KAAK,CAAC;IACzD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAOT,MAAM;AACf;AAEA,SAASU,oBAAoBA,CAACX,KAAgC,EAAiB;EAC7E,OAAOD,2BAA2B,CAACR,6BAA6B,CAACS,KAAK,CAAC,CAAC;AAC1E;AAEA,SAASY,oBAAoBA,CAACC,KAAgB,EAAO;EACnD,OAAOrB,mBAAmB,CAACK,eAAe,CAACgB,KAAK,CAAC,CAAC;AACpD;AAEA,SAAQD,oBAAoB,EAAED,oBAAoB"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { TextInput } from 'react-native';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { TextInputProps } from 'react-native';
|
|
4
|
-
import type
|
|
5
|
-
type PartialMarkdownStyle = StyleUtilsTypes.PartialMarkdownStyle;
|
|
4
|
+
import type { PartialMarkdownStyle } from './styleUtils';
|
|
6
5
|
interface MarkdownTextInputProps extends TextInputProps {
|
|
7
6
|
markdownStyle?: PartialMarkdownStyle;
|
|
8
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownTextInput.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAe,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAKjD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"MarkdownTextInput.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAe,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAKjD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAMvD,UAAU,sBAAuB,SAAQ,cAAc;IACrD,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAuBD,QAAA,MAAM,iBAAiB,0FAiBrB,CAAC;AAaH,YAAY,EAAC,oBAAoB,IAAI,aAAa,EAAE,sBAAsB,EAAC,CAAC;AAE5E,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import type { TextInput, TextInputProps } from 'react-native';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { MouseEvent } from 'react';
|
|
4
|
-
import type
|
|
4
|
+
import type { TreeNode } from './web/utils/treeUtils';
|
|
5
5
|
import './web/MarkdownTextInput.css';
|
|
6
|
-
type MarkdownStyle
|
|
6
|
+
import type { MarkdownStyle } from './MarkdownTextInputDecoratorViewNativeComponent';
|
|
7
7
|
interface MarkdownTextInputProps extends TextInputProps {
|
|
8
8
|
markdownStyle?: MarkdownStyle;
|
|
9
9
|
onClick?: (e: MouseEvent<HTMLDivElement>) => void;
|
|
10
10
|
dir?: string;
|
|
11
11
|
disabled?: boolean;
|
|
12
12
|
}
|
|
13
|
+
type MarkdownTextInputElement = HTMLDivElement & HTMLInputElement & {
|
|
14
|
+
tree: TreeNode;
|
|
15
|
+
};
|
|
16
|
+
type HTMLMarkdownElement = HTMLElement & {
|
|
17
|
+
value: string;
|
|
18
|
+
};
|
|
13
19
|
declare const MarkdownTextInput: React.ForwardRefExoticComponent<MarkdownTextInputProps & React.RefAttributes<TextInput>>;
|
|
14
20
|
export default MarkdownTextInput;
|
|
15
|
-
export type { MarkdownTextInputProps };
|
|
21
|
+
export type { MarkdownTextInputProps, MarkdownTextInputElement, HTMLMarkdownElement };
|
|
16
22
|
//# sourceMappingURL=MarkdownTextInput.web.d.ts.map
|
|
@@ -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,EAIf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAiE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAwE,UAAU,
|
|
1
|
+
{"version":3,"file":"MarkdownTextInput.web.d.ts","sourceRoot":"","sources":["../../../src/MarkdownTextInput.web.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EAKT,cAAc,EAIf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAiE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAwE,UAAU,EAAuD,MAAM,OAAO,CAAC;AAInK,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iDAAiD,CAAC;AAQnF,UAAU,sBAAuB,SAAQ,cAAc;IACrD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,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;AAuBD,KAAK,wBAAwB,GAAG,cAAc,GAC5C,gBAAgB,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEJ,KAAK,mBAAmB,GAAG,WAAW,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,iBAAiB,0FAomBtB,CAAC;AAqBF,eAAe,iBAAiB,CAAC;AAEjC,YAAY,EAAC,sBAAsB,EAAE,wBAAwB,EAAE,mBAAmB,EAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
type MarkdownStyle = MarkdownTextInputDecoractorView.MarkdownStyle;
|
|
1
|
+
import type { MarkdownStyle } from './MarkdownTextInputDecoratorViewNativeComponent';
|
|
3
2
|
type PartialMarkdownStyle = Partial<{
|
|
4
3
|
[K in keyof MarkdownStyle]: Partial<MarkdownStyle[K]>;
|
|
5
4
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleUtils.d.ts","sourceRoot":"","sources":["../../../src/styleUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
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;AAsDH,iBAAS,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,aAAa,CAa7F;AAED,YAAY,EAAC,oBAAoB,EAAC,CAAC;AAEnC,OAAO,EAAC,6BAA6B,EAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PartialMarkdownStyle } from '../../styleUtils';
|
|
2
|
+
import type { NodeType } from './treeUtils';
|
|
3
|
+
declare function addStyleToBlock(targetElement: HTMLElement, type: NodeType, markdownStyle: PartialMarkdownStyle): void;
|
|
4
|
+
export { addStyleToBlock };
|
|
5
|
+
//# sourceMappingURL=blockUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/blockUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAE1C,iBAAS,eAAe,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,oBAAoB,QAiEvG;AAGD,OAAO,EAAC,eAAe,EAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const BrowserUtils: {
|
|
2
|
+
isFirefox: boolean;
|
|
3
|
+
isChromium: boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Whether the platform is a mobile browser.
|
|
6
|
+
* Copied from Expensify App https://github.com/Expensify/App/blob/90dee7accae79c49debf30354c160cab6c52c423/src/libs/Browser/index.website.ts#L41
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
isMobile: boolean;
|
|
10
|
+
};
|
|
11
|
+
export default BrowserUtils;
|
|
12
|
+
//# sourceMappingURL=browserUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/browserUtils.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY;;;IAIhB;;;;OAIG;;CAEJ,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MarkdownTextInputElement } from '../../MarkdownTextInput.web';
|
|
2
|
+
import type { TreeNode } from './treeUtils';
|
|
3
|
+
declare function setCursorPosition(target: MarkdownTextInputElement, startIndex: number, endIndex?: number | null): void;
|
|
4
|
+
declare function scrollIntoView(node: TreeNode): void;
|
|
5
|
+
declare function moveCursorToEnd(target: HTMLElement): void;
|
|
6
|
+
declare function getCurrentCursorPosition(target: MarkdownTextInputElement): {
|
|
7
|
+
start: number;
|
|
8
|
+
end: number;
|
|
9
|
+
} | null;
|
|
10
|
+
declare function removeSelection(): void;
|
|
11
|
+
export { getCurrentCursorPosition, moveCursorToEnd, setCursorPosition, removeSelection, scrollIntoView };
|
|
12
|
+
//# sourceMappingURL=cursorUtils.d.ts.map
|
|
@@ -0,0 +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;AAE1E,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,QA4C9G;AAED,iBAAS,cAAc,CAAC,IAAI,EAAE,QAAQ,QAWrC;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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
import type { MarkdownTextInputElement } from '../../MarkdownTextInput.web';
|
|
3
|
+
declare function isEventComposing(nativeEvent: globalThis.KeyboardEvent): boolean;
|
|
4
|
+
declare function getPlaceholderValue(placeholder: string | undefined): string;
|
|
5
|
+
declare function getElementHeight(node: HTMLDivElement, styles: CSSProperties, numberOfLines: number | undefined): string;
|
|
6
|
+
declare function normalizeValue(value: string): string;
|
|
7
|
+
declare function parseInnerHTMLToText(target: MarkdownTextInputElement): string;
|
|
8
|
+
export { isEventComposing, getPlaceholderValue, getElementHeight, parseInnerHTMLToText, normalizeValue };
|
|
9
|
+
//# sourceMappingURL=inputUtils.d.ts.map
|
|
@@ -0,0 +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,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;AAM1E,iBAAS,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,aAAa,WAE9D;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;AAGD,iBAAS,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAgEtE;AAED,OAAO,EAAC,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HTMLMarkdownElement, MarkdownTextInputElement } from '../../MarkdownTextInput.web';
|
|
2
|
+
import type { TreeNode } from './treeUtils';
|
|
3
|
+
import type { PartialMarkdownStyle } from '../../styleUtils';
|
|
4
|
+
type MarkdownType = 'bold' | 'italic' | 'strikethrough' | 'emoji' | 'link' | 'code' | 'pre' | 'blockquote' | 'h1' | 'syntax' | 'mention-here' | 'mention-user' | 'mention-report';
|
|
5
|
+
type MarkdownRange = {
|
|
6
|
+
type: MarkdownType;
|
|
7
|
+
start: number;
|
|
8
|
+
length: number;
|
|
9
|
+
depth?: number;
|
|
10
|
+
};
|
|
11
|
+
/** Builds HTML DOM structure based on passed text and markdown ranges */
|
|
12
|
+
declare function parseRangesToHTMLNodes(text: string, ranges: MarkdownRange[], markdownStyle?: PartialMarkdownStyle, disableInlineStyles?: boolean): {
|
|
13
|
+
dom: HTMLMarkdownElement;
|
|
14
|
+
tree: TreeNode;
|
|
15
|
+
};
|
|
16
|
+
declare function updateInputStructure(target: MarkdownTextInputElement, text: string, cursorPositionIndex: number | null, markdownStyle?: PartialMarkdownStyle, alwaysMoveCursorToTheEnd?: boolean, shouldForceDOMUpdate?: boolean): {
|
|
17
|
+
text: string;
|
|
18
|
+
cursorPosition: number;
|
|
19
|
+
};
|
|
20
|
+
export { updateInputStructure, parseRangesToHTMLNodes };
|
|
21
|
+
export type { MarkdownRange, MarkdownType };
|
|
22
|
+
//# sourceMappingURL=parserUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/parserUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,6BAA6B,CAAC;AAE/F,OAAO,KAAK,EAAW,QAAQ,EAAC,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAI3D,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,IAAI,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAElL,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmIF,yEAAyE;AACzE,iBAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,aAAa,GAAE,oBAAyB,EAAE,mBAAmB,UAAQ;;;EAiG3I;AAaD,iBAAS,oBAAoB,CAC3B,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,MAAM,GAAG,IAAI,EAClC,aAAa,GAAE,oBAAyB,EACxC,wBAAwB,UAAQ,EAChC,oBAAoB,UAAQ;;;EAmC7B;AAED,OAAO,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,CAAC;AAEtD,YAAY,EAAC,aAAa,EAAE,YAAY,EAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { HTMLMarkdownElement } from '../../MarkdownTextInput.web';
|
|
2
|
+
import type { MarkdownRange, MarkdownType } from './parserUtils';
|
|
3
|
+
type NodeType = MarkdownType | 'line' | 'text' | 'br' | 'root';
|
|
4
|
+
type TreeNode = Omit<MarkdownRange, 'type'> & {
|
|
5
|
+
element: HTMLMarkdownElement;
|
|
6
|
+
parentNode: TreeNode | null;
|
|
7
|
+
childNodes: TreeNode[];
|
|
8
|
+
type: NodeType;
|
|
9
|
+
orderIndex: string;
|
|
10
|
+
isGeneratingNewline: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare function addNodeToTree(element: HTMLMarkdownElement, parentTreeNode: TreeNode, type: NodeType, length?: number | null): TreeNode;
|
|
13
|
+
declare function findHTMLElementInTree(treeRoot: TreeNode, element: HTMLElement): TreeNode | null;
|
|
14
|
+
declare function getTreeNodeByIndex(treeRoot: TreeNode, index: number): TreeNode | null;
|
|
15
|
+
export { addNodeToTree, findHTMLElementInTree, getTreeNodeByIndex };
|
|
16
|
+
export type { TreeNode, NodeType };
|
|
17
|
+
//# sourceMappingURL=treeUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/treeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAE/D,KAAK,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAE/D,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG;IAC5C,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,iBAAS,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,YA2B1H;AAED,iBAAS,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CAuBxF;AAED,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA8B9E;AAED,OAAO,EAAC,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAC,CAAC;AAElE,YAAY,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TextStyle } from 'react-native';
|
|
2
|
+
import type { MarkdownStyle } from '../../MarkdownTextInputDecoratorViewNativeComponent';
|
|
3
|
+
declare function processMarkdownStyle(input: MarkdownStyle | undefined): MarkdownStyle;
|
|
4
|
+
declare function parseToReactDOMStyle(style: TextStyle): any;
|
|
5
|
+
export { parseToReactDOMStyle, processMarkdownStyle };
|
|
6
|
+
//# sourceMappingURL=webStyleUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webStyleUtils.d.ts","sourceRoot":"","sources":["../../../../../src/web/utils/webStyleUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qDAAqD,CAAC;AA2CvF,iBAAS,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAE7E;AAED,iBAAS,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAEnD;AAED,OAAO,EAAC,oBAAoB,EAAE,oBAAoB,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.118",
|
|
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",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"lint:WebExample": "eslint WebExample --ext .js,.ts,.tsx",
|
|
39
39
|
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
40
40
|
"prepare": "bob build && mkdir -p lib/parser && cp parser/react-native-live-markdown-parser.js lib/parser/react-native-live-markdown-parser.js",
|
|
41
|
+
"build:watch": "nodemon --watch src --ext .ts,.tsx,.css --exec \"rm -f .build_complete && yarn prepare && yarn pack && touch .build_complete\"",
|
|
41
42
|
"release": "release-it"
|
|
42
43
|
},
|
|
43
44
|
"keywords": [
|
|
@@ -87,6 +88,7 @@
|
|
|
87
88
|
"eslint-plugin-tsdoc": "^0.2.17",
|
|
88
89
|
"jest": "^29.6.3",
|
|
89
90
|
"jest-environment-jsdom": "^29.7.0",
|
|
91
|
+
"nodemon": "^3.1.3",
|
|
90
92
|
"prettier": "2.8.8",
|
|
91
93
|
"react": "18.2.0",
|
|
92
94
|
"react-native": "0.73.4",
|
|
@@ -97,7 +99,8 @@
|
|
|
97
99
|
"typescript": "^5.3.3"
|
|
98
100
|
},
|
|
99
101
|
"resolutions": {
|
|
100
|
-
"@types/react": "17.0.21"
|
|
102
|
+
"@types/react": "17.0.21",
|
|
103
|
+
"link@^2.1.1": "patch:link@npm%3A2.1.1#./.yarn/patches/link-npm-2.1.1-1c9fea076e.patch"
|
|
101
104
|
},
|
|
102
105
|
"peerDependencies": {
|
|
103
106
|
"react": "*",
|
|
@@ -2,18 +2,15 @@ import {StyleSheet, TextInput, processColor} from 'react-native';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type {TextInputProps} from 'react-native';
|
|
4
4
|
import MarkdownTextInputDecoratorViewNativeComponent from './MarkdownTextInputDecoratorViewNativeComponent';
|
|
5
|
+
import type {MarkdownStyle} from './MarkdownTextInputDecoratorViewNativeComponent';
|
|
5
6
|
import NativeLiveMarkdownModule from './NativeLiveMarkdownModule';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import type * as StyleUtilsTypes from './styleUtils';
|
|
7
|
+
import {mergeMarkdownStyleWithDefault} from './styleUtils';
|
|
8
|
+
import type {PartialMarkdownStyle} from './styleUtils';
|
|
9
9
|
|
|
10
10
|
if (NativeLiveMarkdownModule) {
|
|
11
11
|
NativeLiveMarkdownModule.install();
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
type PartialMarkdownStyle = StyleUtilsTypes.PartialMarkdownStyle;
|
|
15
|
-
type MarkdownStyle = MarkdownTextInputDecoratorViewNativeComponentTypes.MarkdownStyle;
|
|
16
|
-
|
|
17
14
|
interface MarkdownTextInputProps extends TextInputProps {
|
|
18
15
|
markdownStyle?: PartialMarkdownStyle;
|
|
19
16
|
}
|
|
@@ -36,7 +33,7 @@ function processColorsInMarkdownStyle(input: MarkdownStyle): MarkdownStyle {
|
|
|
36
33
|
}
|
|
37
34
|
|
|
38
35
|
function processMarkdownStyle(input: PartialMarkdownStyle | undefined): MarkdownStyle {
|
|
39
|
-
return processColorsInMarkdownStyle(
|
|
36
|
+
return processColorsInMarkdownStyle(mergeMarkdownStyleWithDefault(input));
|
|
40
37
|
}
|
|
41
38
|
|
|
42
39
|
const MarkdownTextInput = React.forwardRef<TextInput, MarkdownTextInputProps>((props, ref) => {
|