@expensify/react-native-live-markdown 0.1.333 → 0.1.335

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.
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "MarkdownTextInput", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _index.MarkdownTextInput;
10
+ }
11
+ });
12
+ exports.parseExpensiMark = exports.getWorkletRuntime = void 0;
13
+ var _index = require("../index.js");
14
+ global.jsi_setMarkdownRuntime = jest.fn();
15
+ global.jsi_registerMarkdownWorklet = jest.fn();
16
+ global.jsi_unregisterMarkdownWorklet = jest.fn();
17
+ const parseExpensiMarkMock = () => {
18
+ 'worklet';
19
+
20
+ return [];
21
+ };
22
+ exports.parseExpensiMark = parseExpensiMarkMock;
23
+ const getWorkletRuntimeMock = () => ({});
24
+ exports.getWorkletRuntime = getWorkletRuntimeMock;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_index","require","global","jsi_setMarkdownRuntime","jest","fn","jsi_registerMarkdownWorklet","jsi_unregisterMarkdownWorklet","parseExpensiMarkMock","exports","parseExpensiMark","getWorkletRuntimeMock","getWorkletRuntime"],"sourceRoot":"../../../src","sources":["mock/index.ts"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGAC,MAAM,CAACC,sBAAsB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;AACzCH,MAAM,CAACI,2BAA2B,GAAGF,IAAI,CAACC,EAAE,CAAC,CAAC;AAC9CH,MAAM,CAACK,6BAA6B,GAAGH,IAAI,CAACC,EAAE,CAAC,CAAC;AAEhD,MAAMG,oBAA6C,GAAGA,CAAA,KAAM;EAC1D,SAAS;;EAET,OAAO,EAAE;AACX,CAAC;AAACC,OAAA,CAAAC,gBAAA,GAAAF,oBAAA;AAEF,MAAMG,qBAAqB,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAACF,OAAA,CAAAG,iBAAA,GAAAD,qBAAA","ignoreList":[]}
@@ -10,6 +10,18 @@ exports.scrollIntoView = scrollIntoView;
10
10
  exports.setCursorPosition = setCursorPosition;
11
11
  var _blockUtils = require("./blockUtils.js");
12
12
  var _treeUtils = require("./treeUtils.js");
13
+ function getMaxRangeOffset(node) {
14
+ return node.nodeType === Node.TEXT_NODE ? (node.textContent ?? '').length : node.childNodes.length;
15
+ }
16
+
17
+ /**
18
+ * Range offsets are applied to the real DOM node, not the parsed markdown tree.
19
+ * When the tree is temporarily stale, clamp to the DOM node's bounds so cursor
20
+ * restoration lands at the nearest valid position instead of throwing.
21
+ */
22
+ function getClampedRangeOffset(node, offset) {
23
+ return Math.max(0, Math.min(offset, getMaxRangeOffset(node)));
24
+ }
13
25
  function setCursorPosition(target, startIndex, endIndex = null, shouldScrollIntoView = false) {
14
26
  // We don't want to move the cursor if the target is not focused
15
27
  if (!target.tree || target !== document.activeElement) {
@@ -32,13 +44,15 @@ function setCursorPosition(target, startIndex, endIndex = null, shouldScrollInto
32
44
  range.setStartBefore(startTreeNode.element);
33
45
  } else {
34
46
  const startElement = startTreeNode.element;
35
- range.setStart(startElement.childNodes[0] || startElement, start - startTreeNode.start);
47
+ const startNode = startElement.childNodes[0] || startElement;
48
+ range.setStart(startNode, getClampedRangeOffset(startNode, start - startTreeNode.start));
36
49
  }
37
50
  if (endTreeNode.type === 'br') {
38
51
  range.setEndBefore(endTreeNode.element);
39
52
  } else {
40
53
  const endElement = endTreeNode.element;
41
- range.setEnd(endElement.childNodes[0] || endElement, (end || start) - endTreeNode.start);
54
+ const endNode = endElement.childNodes[0] || endElement;
55
+ range.setEnd(endNode, getClampedRangeOffset(endNode, (end || start) - endTreeNode.start));
42
56
  }
43
57
  if (!end) {
44
58
  range.collapse(true);
@@ -1 +1 @@
1
- {"version":3,"names":["_blockUtils","require","_treeUtils","setCursorPosition","target","startIndex","endIndex","shouldScrollIntoView","tree","document","activeElement","start","Math","max","min","length","end","range","createRange","selectNodeContents","startTreeNode","getTreeNodeByIndex","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","isChildOfMultilineMarkdownElement","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","findHTMLElementInTree","parentNode","value","removeSelection","removeAllRanges"],"sourceRoot":"../../../../src","sources":["web/utils/cursorUtils.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_blockUtils","require","_treeUtils","getMaxRangeOffset","node","nodeType","Node","TEXT_NODE","textContent","length","childNodes","getClampedRangeOffset","offset","Math","max","min","setCursorPosition","target","startIndex","endIndex","shouldScrollIntoView","tree","document","activeElement","start","end","range","createRange","selectNodeContents","startTreeNode","getTreeNodeByIndex","endTreeNode","console","error","type","setStartBefore","element","startElement","startNode","setStart","setEndBefore","endElement","endNode","setEnd","collapse","selection","window","getSelection","setBaseAndExtent","startContainer","startOffset","endContainer","endOffset","scrollIntoView","scrollTargetElement","targetElement","isChildOfMultilineMarkdownElement","orderIndex","Number","split","currentLine","nodeName","addRange","span","createElement","insertNode","block","remove","caretRect","getBoundingClientRect","targetRect","top","height","scrollTop","moveCursorToEnd","getCurrentCursorPosition","getHTMLElement","Text","parentElement","rangeCount","getRangeAt","findHTMLElementInTree","parentNode","value","removeSelection","removeAllRanges"],"sourceRoot":"../../../../src","sources":["web/utils/cursorUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ import { MarkdownTextInput } from "../index.js";
4
+ global.jsi_setMarkdownRuntime = jest.fn();
5
+ global.jsi_registerMarkdownWorklet = jest.fn();
6
+ global.jsi_unregisterMarkdownWorklet = jest.fn();
7
+ const parseExpensiMarkMock = () => {
8
+ 'worklet';
9
+
10
+ return [];
11
+ };
12
+ const getWorkletRuntimeMock = () => ({});
13
+ export { MarkdownTextInput, parseExpensiMarkMock as parseExpensiMark, getWorkletRuntimeMock as getWorkletRuntime };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MarkdownTextInput","global","jsi_setMarkdownRuntime","jest","fn","jsi_registerMarkdownWorklet","jsi_unregisterMarkdownWorklet","parseExpensiMarkMock","getWorkletRuntimeMock","parseExpensiMark","getWorkletRuntime"],"sourceRoot":"../../../src","sources":["mock/index.ts"],"mappings":";;AAAA,SAAQA,iBAAiB,QAAO,aAAI;AAGpCC,MAAM,CAACC,sBAAsB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;AACzCH,MAAM,CAACI,2BAA2B,GAAGF,IAAI,CAACC,EAAE,CAAC,CAAC;AAC9CH,MAAM,CAACK,6BAA6B,GAAGH,IAAI,CAACC,EAAE,CAAC,CAAC;AAEhD,MAAMG,oBAA6C,GAAGA,CAAA,KAAM;EAC1D,SAAS;;EAET,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,qBAAqB,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAExC,SAAQR,iBAAiB,EAAEO,oBAAoB,IAAIE,gBAAgB,EAAED,qBAAqB,IAAIE,iBAAiB","ignoreList":[]}
@@ -2,6 +2,18 @@
2
2
 
3
3
  import { isChildOfMultilineMarkdownElement } from "./blockUtils.js";
4
4
  import { findHTMLElementInTree, getTreeNodeByIndex } from "./treeUtils.js";
5
+ function getMaxRangeOffset(node) {
6
+ return node.nodeType === Node.TEXT_NODE ? (node.textContent ?? '').length : node.childNodes.length;
7
+ }
8
+
9
+ /**
10
+ * Range offsets are applied to the real DOM node, not the parsed markdown tree.
11
+ * When the tree is temporarily stale, clamp to the DOM node's bounds so cursor
12
+ * restoration lands at the nearest valid position instead of throwing.
13
+ */
14
+ function getClampedRangeOffset(node, offset) {
15
+ return Math.max(0, Math.min(offset, getMaxRangeOffset(node)));
16
+ }
5
17
  function setCursorPosition(target, startIndex, endIndex = null, shouldScrollIntoView = false) {
6
18
  // We don't want to move the cursor if the target is not focused
7
19
  if (!target.tree || target !== document.activeElement) {
@@ -24,13 +36,15 @@ function setCursorPosition(target, startIndex, endIndex = null, shouldScrollInto
24
36
  range.setStartBefore(startTreeNode.element);
25
37
  } else {
26
38
  const startElement = startTreeNode.element;
27
- range.setStart(startElement.childNodes[0] || startElement, start - startTreeNode.start);
39
+ const startNode = startElement.childNodes[0] || startElement;
40
+ range.setStart(startNode, getClampedRangeOffset(startNode, start - startTreeNode.start));
28
41
  }
29
42
  if (endTreeNode.type === 'br') {
30
43
  range.setEndBefore(endTreeNode.element);
31
44
  } else {
32
45
  const endElement = endTreeNode.element;
33
- range.setEnd(endElement.childNodes[0] || endElement, (end || start) - endTreeNode.start);
46
+ const endNode = endElement.childNodes[0] || endElement;
47
+ range.setEnd(endNode, getClampedRangeOffset(endNode, (end || start) - endTreeNode.start));
34
48
  }
35
49
  if (!end) {
36
50
  range.collapse(true);
@@ -1 +1 @@
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
+ {"version":3,"names":["isChildOfMultilineMarkdownElement","findHTMLElementInTree","getTreeNodeByIndex","getMaxRangeOffset","node","nodeType","Node","TEXT_NODE","textContent","length","childNodes","getClampedRangeOffset","offset","Math","max","min","setCursorPosition","target","startIndex","endIndex","shouldScrollIntoView","tree","document","activeElement","start","end","range","createRange","selectNodeContents","startTreeNode","endTreeNode","console","error","type","setStartBefore","element","startElement","startNode","setStart","setEndBefore","endElement","endNode","setEnd","collapse","selection","window","getSelection","setBaseAndExtent","startContainer","startOffset","endContainer","endOffset","scrollIntoView","scrollTargetElement","targetElement","orderIndex","Number","split","currentLine","nodeName","addRange","span","createElement","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,5 @@
1
- import { MarkdownTextInput } from '../src';
2
- import type { parseExpensiMark } from '../src';
1
+ import { MarkdownTextInput } from '..';
2
+ import type { parseExpensiMark } from '..';
3
3
  declare const parseExpensiMarkMock: typeof parseExpensiMark;
4
4
  declare const getWorkletRuntimeMock: () => {};
5
5
  export { MarkdownTextInput, parseExpensiMarkMock as parseExpensiMark, getWorkletRuntimeMock as getWorkletRuntime };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mock/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,IAAI,CAAC;AACrC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,IAAI,CAAC;AAMzC,QAAA,MAAM,oBAAoB,EAAE,OAAO,gBAIlC,CAAC;AAEF,QAAA,MAAM,qBAAqB,UAAa,CAAC;AAEzC,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,IAAI,gBAAgB,EAAE,qBAAqB,IAAI,iBAAiB,EAAC,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;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"}
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,QAkD5I;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"}
@@ -0,0 +1 @@
1
+ export * from '../lib/typescript/src/mock/index';
package/mock/index.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('../lib/commonjs/mock/index.js');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expensify/react-native-live-markdown",
3
- "version": "0.1.333",
3
+ "version": "0.1.335",
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",
@@ -1,5 +1,5 @@
1
- import {MarkdownTextInput} from '../src';
2
- import type {parseExpensiMark} from '../src';
1
+ import {MarkdownTextInput} from '..';
2
+ import type {parseExpensiMark} from '..';
3
3
 
4
4
  global.jsi_setMarkdownRuntime = jest.fn();
5
5
  global.jsi_registerMarkdownWorklet = jest.fn();
@@ -3,6 +3,19 @@ import {isChildOfMultilineMarkdownElement} from './blockUtils';
3
3
  import {findHTMLElementInTree, getTreeNodeByIndex} from './treeUtils';
4
4
  import type {TreeNode} from './treeUtils';
5
5
 
6
+ function getMaxRangeOffset(node: ChildNode): number {
7
+ return node.nodeType === Node.TEXT_NODE ? (node.textContent ?? '').length : node.childNodes.length;
8
+ }
9
+
10
+ /**
11
+ * Range offsets are applied to the real DOM node, not the parsed markdown tree.
12
+ * When the tree is temporarily stale, clamp to the DOM node's bounds so cursor
13
+ * restoration lands at the nearest valid position instead of throwing.
14
+ */
15
+ function getClampedRangeOffset(node: ChildNode, offset: number): number {
16
+ return Math.max(0, Math.min(offset, getMaxRangeOffset(node)));
17
+ }
18
+
6
19
  function setCursorPosition(target: MarkdownTextInputElement, startIndex: number, endIndex: number | null = null, shouldScrollIntoView = false) {
7
20
  // We don't want to move the cursor if the target is not focused
8
21
  if (!target.tree || target !== document.activeElement) {
@@ -29,14 +42,16 @@ function setCursorPosition(target: MarkdownTextInputElement, startIndex: number,
29
42
  range.setStartBefore(startTreeNode.element);
30
43
  } else {
31
44
  const startElement = startTreeNode.element;
32
- range.setStart((startElement.childNodes[0] || startElement) as ChildNode, start - startTreeNode.start);
45
+ const startNode = (startElement.childNodes[0] || startElement) as ChildNode;
46
+ range.setStart(startNode, getClampedRangeOffset(startNode, start - startTreeNode.start));
33
47
  }
34
48
 
35
49
  if (endTreeNode.type === 'br') {
36
50
  range.setEndBefore(endTreeNode.element);
37
51
  } else {
38
52
  const endElement = endTreeNode.element;
39
- range.setEnd((endElement.childNodes[0] || endElement) as ChildNode, (end || start) - endTreeNode.start);
53
+ const endNode = (endElement.childNodes[0] || endElement) as ChildNode;
54
+ range.setEnd(endNode, getClampedRangeOffset(endNode, (end || start) - endTreeNode.start));
40
55
  }
41
56
 
42
57
  if (!end) {
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../mock/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,QAAQ,CAAC;AAM7C,QAAA,MAAM,oBAAoB,EAAE,OAAO,gBAIlC,CAAC;AAEF,QAAA,MAAM,qBAAqB,UAAa,CAAC;AAEzC,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,IAAI,gBAAgB,EAAE,qBAAqB,IAAI,iBAAiB,EAAC,CAAC"}