roosterjs-content-model-dom 9.40.0 → 9.41.0

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.
Files changed (37) hide show
  1. package/lib/constants/ChangeSource.d.ts +4 -0
  2. package/lib/constants/ChangeSource.js +4 -0
  3. package/lib/constants/ChangeSource.js.map +1 -1
  4. package/lib/domUtils/getRangesByText.d.ts +10 -0
  5. package/lib/domUtils/getRangesByText.js +95 -0
  6. package/lib/domUtils/getRangesByText.js.map +1 -0
  7. package/lib/domUtils/scrollRectIntoView.d.ts +11 -0
  8. package/lib/domUtils/scrollRectIntoView.js +73 -0
  9. package/lib/domUtils/scrollRectIntoView.js.map +1 -0
  10. package/lib/index.d.ts +2 -0
  11. package/lib/index.js +8 -4
  12. package/lib/index.js.map +1 -1
  13. package/lib-amd/constants/ChangeSource.d.ts +4 -0
  14. package/lib-amd/constants/ChangeSource.js +4 -0
  15. package/lib-amd/constants/ChangeSource.js.map +1 -1
  16. package/lib-amd/domUtils/getRangesByText.d.ts +10 -0
  17. package/lib-amd/domUtils/getRangesByText.js +94 -0
  18. package/lib-amd/domUtils/getRangesByText.js.map +1 -0
  19. package/lib-amd/domUtils/scrollRectIntoView.d.ts +11 -0
  20. package/lib-amd/domUtils/scrollRectIntoView.js +75 -0
  21. package/lib-amd/domUtils/scrollRectIntoView.js.map +1 -0
  22. package/lib-amd/index.d.ts +2 -0
  23. package/lib-amd/index.js +4 -2
  24. package/lib-amd/index.js.map +1 -1
  25. package/lib-mjs/constants/ChangeSource.d.ts +4 -0
  26. package/lib-mjs/constants/ChangeSource.js +4 -0
  27. package/lib-mjs/constants/ChangeSource.js.map +1 -1
  28. package/lib-mjs/domUtils/getRangesByText.d.ts +10 -0
  29. package/lib-mjs/domUtils/getRangesByText.js +91 -0
  30. package/lib-mjs/domUtils/getRangesByText.js.map +1 -0
  31. package/lib-mjs/domUtils/scrollRectIntoView.d.ts +11 -0
  32. package/lib-mjs/domUtils/scrollRectIntoView.js +69 -0
  33. package/lib-mjs/domUtils/scrollRectIntoView.js.map +1 -0
  34. package/lib-mjs/index.d.ts +2 -0
  35. package/lib-mjs/index.js +2 -0
  36. package/lib-mjs/index.js.map +1 -1
  37. package/package.json +2 -2
@@ -60,4 +60,8 @@ export declare const ChangeSource: {
60
60
  * Content changed by auto format
61
61
  */
62
62
  AutoFormat: string;
63
+ /**
64
+ * Content changed by replace
65
+ */
66
+ Replace: string;
63
67
  };
@@ -63,5 +63,9 @@ exports.ChangeSource = {
63
63
  * Content changed by auto format
64
64
  */
65
65
  AutoFormat: 'AutoFormat',
66
+ /**
67
+ * Content changed by replace
68
+ */
69
+ Replace: 'Replace',
66
70
  };
67
71
  //# sourceMappingURL=ChangeSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IACxB;;OAEG;IACH,QAAQ,EAAE,UAAU;IACpB;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAChB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,GAAG,EAAE,KAAK;IACV;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ;;OAEG;IACH,YAAY,EAAE,cAAc;IAC5B;;OAEG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,SAAS,EAAE,WAAW;IACtB;;;OAGG;IACH,QAAQ,EAAE,UAAU;IAEpB;;OAEG;IACH,UAAU,EAAE,YAAY;CAC3B,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n\n /**\n * Content changed by auto format\n */\n AutoFormat: 'AutoFormat',\n};\n"]}
1
+ {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IACxB;;OAEG;IACH,QAAQ,EAAE,UAAU;IACpB;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAChB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,GAAG,EAAE,KAAK;IACV;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ;;OAEG;IACH,YAAY,EAAE,cAAc;IAC5B;;OAEG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,SAAS,EAAE,WAAW;IACtB;;;OAGG;IACH,QAAQ,EAAE,UAAU;IAEpB;;OAEG;IACH,UAAU,EAAE,YAAY;IAExB;;OAEG;IACH,OAAO,EAAE,SAAS;CACrB,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n\n /**\n * Content changed by auto format\n */\n AutoFormat: 'AutoFormat',\n\n /**\n * Content changed by replace\n */\n Replace: 'Replace',\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Search text from the given root element and return all ranges that match the search criteria
3
+ * @param root Root element to search from
4
+ * @param text Text to search for
5
+ * @param matchCase Whether to match case
6
+ * @param wholeWord Whether to match whole words only
7
+ * @param editableOnly Whether to search only in editable elements
8
+ * @returns Array of matching ranges
9
+ */
10
+ export declare function getRangesByText(root: HTMLElement, text: string, matchCase: boolean, wholeWord: boolean, editableOnly?: boolean): Range[];
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRangesByText = void 0;
4
+ var isBlockElement_1 = require("../domToModel/utils/isBlockElement");
5
+ var isNodeOfType_1 = require("./isNodeOfType");
6
+ var stringUtil_1 = require("./stringUtil");
7
+ var SplittingTags = ['BR', 'HR', 'IMG'];
8
+ /**
9
+ * Search text from the given root element and return all ranges that match the search criteria
10
+ * @param root Root element to search from
11
+ * @param text Text to search for
12
+ * @param matchCase Whether to match case
13
+ * @param wholeWord Whether to match whole words only
14
+ * @param editableOnly Whether to search only in editable elements
15
+ * @returns Array of matching ranges
16
+ */
17
+ function getRangesByText(root, text, matchCase, wholeWord, editableOnly) {
18
+ var context = {
19
+ text: matchCase ? text : text.toLowerCase(),
20
+ matchCase: matchCase,
21
+ wholeWord: wholeWord,
22
+ result: [],
23
+ paragraphText: '',
24
+ indexes: [],
25
+ editableOnly: !!editableOnly,
26
+ };
27
+ if (context.text) {
28
+ iterateTextNodes(root, context);
29
+ }
30
+ return context.result;
31
+ }
32
+ exports.getRangesByText = getRangesByText;
33
+ function isSplittingElement(element) {
34
+ return (0, isBlockElement_1.isBlockElement)(element) || SplittingTags.indexOf(element.tagName) >= 0;
35
+ }
36
+ function iterateTextNodes(root, context) {
37
+ var canSearchText = !context.editableOnly || root.isContentEditable;
38
+ for (var node = root.firstChild; node; node = node.nextSibling) {
39
+ if ((0, isNodeOfType_1.isNodeOfType)(node, 'TEXT_NODE') && canSearchText) {
40
+ var nodeText = context.matchCase
41
+ ? node.nodeValue || ''
42
+ : (node.nodeValue || '').toLowerCase();
43
+ if (nodeText) {
44
+ context.paragraphText += nodeText;
45
+ context.indexes.push({ node: node, length: nodeText.length });
46
+ }
47
+ }
48
+ else if ((0, isNodeOfType_1.isNodeOfType)(node, 'ELEMENT_NODE')) {
49
+ if (context.paragraphText && isSplittingElement(node)) {
50
+ search(root.ownerDocument, context);
51
+ }
52
+ iterateTextNodes(node, context);
53
+ }
54
+ }
55
+ if (context.paragraphText && isSplittingElement(root)) {
56
+ search(root.ownerDocument, context);
57
+ }
58
+ }
59
+ function search(doc, context) {
60
+ var offset;
61
+ var startIndex = 0;
62
+ while ((offset = context.paragraphText.indexOf(context.text, startIndex)) > -1) {
63
+ if (!context.wholeWord ||
64
+ ((offset == 0 || isSpaceOrPunctuation(context.paragraphText[offset - 1])) &&
65
+ (offset + context.text.length == context.paragraphText.length ||
66
+ isSpaceOrPunctuation(context.paragraphText[offset + context.text.length])))) {
67
+ var start = findNodeAndOffset(context.indexes, offset, false /*isEnd*/);
68
+ var end = findNodeAndOffset(context.indexes, offset + context.text.length, true /*isEnd*/);
69
+ if (start && end) {
70
+ var range = doc.createRange();
71
+ range.setStart(start.node, start.offset);
72
+ range.setEnd(end.node, end.offset);
73
+ context.result.push(range);
74
+ }
75
+ }
76
+ startIndex = offset + context.text.length;
77
+ }
78
+ context.paragraphText = '';
79
+ context.indexes = [];
80
+ }
81
+ function isSpaceOrPunctuation(char) {
82
+ return (0, stringUtil_1.isSpace)(char) || (0, stringUtil_1.isPunctuation)(char);
83
+ }
84
+ function findNodeAndOffset(lengths, offset, isEnd) {
85
+ var currentIndex = 0;
86
+ for (var i = 0; i < lengths.length; i++) {
87
+ var segmentLength = lengths[i].length;
88
+ if (isEnd ? currentIndex + segmentLength >= offset : currentIndex + segmentLength > offset) {
89
+ return { node: lengths[i].node, offset: offset - currentIndex };
90
+ }
91
+ currentIndex += segmentLength;
92
+ }
93
+ return null;
94
+ }
95
+ //# sourceMappingURL=getRangesByText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRangesByText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/getRangesByText.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AACpE,+CAA8C;AAC9C,2CAAsD;AAEtD,IAAM,aAAa,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAepD;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC3B,IAAiB,EACjB,IAAY,EACZ,SAAkB,EAClB,SAAkB,EAClB,YAAsB;IAEtB,IAAM,OAAO,GAAkB;QAC3B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;QAC3C,SAAS,WAAA;QACT,SAAS,WAAA;QACT,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,CAAC,CAAC,YAAY;KAC/B,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE;QACd,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACnC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AAC1B,CAAC;AAtBD,0CAsBC;AAED,SAAS,kBAAkB,CAAC,OAAoB;IAC5C,OAAO,IAAA,+BAAc,EAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAiB,EAAE,OAAsB;IAC/D,IAAM,aAAa,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC;IAEtE,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC5D,IAAI,IAAA,2BAAY,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE;YAClD,IAAM,QAAQ,GAAG,OAAO,CAAC,SAAS;gBAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;gBACtB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAE3C,IAAI,QAAQ,EAAE;gBACV,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC;gBAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;aAC3D;SACJ;aAAM,IAAI,IAAA,2BAAY,EAAC,IAAI,EAAE,cAAc,CAAC,EAAE;YAC3C,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;gBACnD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;aACvC;YAED,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACnC;KACJ;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;QACnD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KACvC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,GAAa,EAAE,OAAsB;IACjD,IAAI,MAAc,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5E,IACI,CAAC,OAAO,CAAC,SAAS;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrE,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM;oBACzD,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACrF;YACE,IAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1E,IAAM,GAAG,GAAG,iBAAiB,CACzB,OAAO,CAAC,OAAO,EACf,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAC5B,IAAI,CAAC,SAAS,CACjB,CAAC;YAEF,IAAI,KAAK,IAAI,GAAG,EAAE;gBACd,IAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAEhC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;QAED,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KAC7C;IAED,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;IAC3B,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACtC,OAAO,IAAA,oBAAO,EAAC,IAAI,CAAC,IAAI,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CACtB,OAAyC,EACzC,MAAc,EACd,KAAc;IAEd,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAExC,IACI,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,aAAa,GAAG,MAAM,EACxF;YACE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;SACnE;QAED,YAAY,IAAI,aAAa,CAAC;KACjC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import { isBlockElement } from '../domToModel/utils/isBlockElement';\nimport { isNodeOfType } from './isNodeOfType';\nimport { isPunctuation, isSpace } from './stringUtil';\n\nconst SplittingTags: string[] = ['BR', 'HR', 'IMG'];\n\ninterface SearchContext {\n text: string;\n matchCase: boolean;\n wholeWord: boolean;\n result: Range[];\n paragraphText: string;\n editableOnly: boolean;\n indexes: {\n node: Text;\n length: number;\n }[];\n}\n\n/**\n * Search text from the given root element and return all ranges that match the search criteria\n * @param root Root element to search from\n * @param text Text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole words only\n * @param editableOnly Whether to search only in editable elements\n * @returns Array of matching ranges\n */\nexport function getRangesByText(\n root: HTMLElement,\n text: string,\n matchCase: boolean,\n wholeWord: boolean,\n editableOnly?: boolean\n): Range[] {\n const context: SearchContext = {\n text: matchCase ? text : text.toLowerCase(),\n matchCase,\n wholeWord,\n result: [],\n paragraphText: '',\n indexes: [],\n editableOnly: !!editableOnly,\n };\n\n if (context.text) {\n iterateTextNodes(root, context);\n }\n\n return context.result;\n}\n\nfunction isSplittingElement(element: HTMLElement) {\n return isBlockElement(element) || SplittingTags.indexOf(element.tagName) >= 0;\n}\n\nfunction iterateTextNodes(root: HTMLElement, context: SearchContext) {\n const canSearchText = !context.editableOnly || root.isContentEditable;\n\n for (let node = root.firstChild; node; node = node.nextSibling) {\n if (isNodeOfType(node, 'TEXT_NODE') && canSearchText) {\n const nodeText = context.matchCase\n ? node.nodeValue || ''\n : (node.nodeValue || '').toLowerCase();\n\n if (nodeText) {\n context.paragraphText += nodeText;\n context.indexes.push({ node, length: nodeText.length });\n }\n } else if (isNodeOfType(node, 'ELEMENT_NODE')) {\n if (context.paragraphText && isSplittingElement(node)) {\n search(root.ownerDocument, context);\n }\n\n iterateTextNodes(node, context);\n }\n }\n\n if (context.paragraphText && isSplittingElement(root)) {\n search(root.ownerDocument, context);\n }\n}\n\nfunction search(doc: Document, context: SearchContext) {\n let offset: number;\n let startIndex = 0;\n\n while ((offset = context.paragraphText.indexOf(context.text, startIndex)) > -1) {\n if (\n !context.wholeWord ||\n ((offset == 0 || isSpaceOrPunctuation(context.paragraphText[offset - 1])) &&\n (offset + context.text.length == context.paragraphText.length ||\n isSpaceOrPunctuation(context.paragraphText[offset + context.text.length])))\n ) {\n const start = findNodeAndOffset(context.indexes, offset, false /*isEnd*/);\n const end = findNodeAndOffset(\n context.indexes,\n offset + context.text.length,\n true /*isEnd*/\n );\n\n if (start && end) {\n const range = doc.createRange();\n\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n context.result.push(range);\n }\n }\n\n startIndex = offset + context.text.length;\n }\n\n context.paragraphText = '';\n context.indexes = [];\n}\n\nfunction isSpaceOrPunctuation(char: string) {\n return isSpace(char) || isPunctuation(char);\n}\n\nfunction findNodeAndOffset(\n lengths: { length: number; node: Text }[],\n offset: number,\n isEnd: boolean\n): { node: Text; offset: number } | null {\n let currentIndex = 0;\n\n for (let i = 0; i < lengths.length; i++) {\n const segmentLength = lengths[i].length;\n\n if (\n isEnd ? currentIndex + segmentLength >= offset : currentIndex + segmentLength > offset\n ) {\n return { node: lengths[i].node, offset: offset - currentIndex };\n }\n\n currentIndex += segmentLength;\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { DOMHelper, Rect } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Scroll a given rectangle into view within a scroll container
4
+ * @param scrollContainer The container to scroll
5
+ * @param visibleRect The currently visible rectangle within the scroll container
6
+ * @param domHelper The DOM helper of the editor
7
+ * @param targetRect The target rectangle to scroll into view
8
+ * @param scrollMargin Optional margin to apply when scrolling
9
+ * @param preferTop Optional flag to indicate whether to prefer aligning the top or bottom of the target rect when the target rect is higher than visible rect @default false
10
+ */
11
+ export declare function scrollRectIntoView(scrollContainer: HTMLElement, visibleRect: Rect, domHelper: DOMHelper, targetRect: Rect, scrollMargin?: number, preferTop?: boolean): void;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scrollRectIntoView = void 0;
4
+ /**
5
+ * Scroll a given rectangle into view within a scroll container
6
+ * @param scrollContainer The container to scroll
7
+ * @param visibleRect The currently visible rectangle within the scroll container
8
+ * @param domHelper The DOM helper of the editor
9
+ * @param targetRect The target rectangle to scroll into view
10
+ * @param scrollMargin Optional margin to apply when scrolling
11
+ * @param preferTop Optional flag to indicate whether to prefer aligning the top or bottom of the target rect when the target rect is higher than visible rect @default false
12
+ */
13
+ function scrollRectIntoView(scrollContainer, visibleRect, domHelper, targetRect, scrollMargin, preferTop) {
14
+ if (scrollMargin === void 0) { scrollMargin = 0; }
15
+ if (preferTop === void 0) { preferTop = false; }
16
+ var zoomScale;
17
+ var margin = 0;
18
+ if (scrollMargin != 0) {
19
+ zoomScale = getZoomScale(domHelper, zoomScale);
20
+ margin = Math.max(0, Math.min(scrollMargin * zoomScale, (visibleRect.bottom - visibleRect.top - targetRect.bottom + targetRect.top) / 2));
21
+ }
22
+ var top = targetRect.top - margin;
23
+ var bottom = targetRect.bottom + margin;
24
+ var height = bottom - top;
25
+ // Define scroll operations
26
+ var scrollUp = function () {
27
+ zoomScale = getZoomScale(domHelper, zoomScale);
28
+ scrollContainer.scrollTop -= (visibleRect.top - top) / zoomScale;
29
+ };
30
+ var scrollDown = function () {
31
+ zoomScale = getZoomScale(domHelper, zoomScale);
32
+ scrollContainer.scrollTop += (bottom - visibleRect.bottom) / zoomScale;
33
+ };
34
+ // Determine which operations to perform and in what order
35
+ var needsScrollUp = top < visibleRect.top;
36
+ var needsScrollDown = bottom > visibleRect.bottom;
37
+ if (height > visibleRect.bottom - visibleRect.top) {
38
+ // If the target rect is larger than visible rect, only perform one scroll operation
39
+ if (preferTop) {
40
+ scrollUp();
41
+ }
42
+ else {
43
+ scrollDown();
44
+ }
45
+ }
46
+ else if (preferTop) {
47
+ if (needsScrollUp) {
48
+ scrollUp();
49
+ }
50
+ else if (needsScrollDown) {
51
+ scrollDown();
52
+ }
53
+ }
54
+ else {
55
+ if (needsScrollDown) {
56
+ scrollDown();
57
+ }
58
+ else if (needsScrollUp) {
59
+ scrollUp();
60
+ }
61
+ }
62
+ }
63
+ exports.scrollRectIntoView = scrollRectIntoView;
64
+ // domHelper.calculateZoomScale() may be an expensive call, so we cache the value during a single operation
65
+ function getZoomScale(domHelper, knownZoomScale) {
66
+ if (knownZoomScale === undefined) {
67
+ return domHelper.calculateZoomScale();
68
+ }
69
+ else {
70
+ return knownZoomScale;
71
+ }
72
+ }
73
+ //# sourceMappingURL=scrollRectIntoView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollRectIntoView.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/scrollRectIntoView.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAC9B,eAA4B,EAC5B,WAAiB,EACjB,SAAoB,EACpB,UAAgB,EAChB,YAAwB,EACxB,SAA0B;IAD1B,6BAAA,EAAA,gBAAwB;IACxB,0BAAA,EAAA,iBAA0B;IAE1B,IAAI,SAA6B,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAI,YAAY,IAAI,CAAC,EAAE;QACnB,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,GAAG,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,CAAC,GAAG,CACJ,YAAY,GAAG,SAAS,EACxB,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAClF,CACJ,CAAC;KACL;IAED,IAAM,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC;IACpC,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1C,IAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAE5B,2BAA2B;IAC3B,IAAM,QAAQ,GAAG;QACb,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,eAAe,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;IACrE,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG;QACf,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,eAAe,CAAC,SAAS,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3E,CAAC,CAAC;IAEF,0DAA0D;IAC1D,IAAM,aAAa,GAAG,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;IAC5C,IAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAEpD,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/C,oFAAoF;QACpF,IAAI,SAAS,EAAE;YACX,QAAQ,EAAE,CAAC;SACd;aAAM;YACH,UAAU,EAAE,CAAC;SAChB;KACJ;SAAM,IAAI,SAAS,EAAE;QAClB,IAAI,aAAa,EAAE;YACf,QAAQ,EAAE,CAAC;SACd;aAAM,IAAI,eAAe,EAAE;YACxB,UAAU,EAAE,CAAC;SAChB;KACJ;SAAM;QACH,IAAI,eAAe,EAAE;YACjB,UAAU,EAAE,CAAC;SAChB;aAAM,IAAI,aAAa,EAAE;YACtB,QAAQ,EAAE,CAAC;SACd;KACJ;AACL,CAAC;AA9DD,gDA8DC;AAED,2GAA2G;AAC3G,SAAS,YAAY,CAAC,SAAoB,EAAE,cAAkC;IAC1E,IAAI,cAAc,KAAK,SAAS,EAAE;QAC9B,OAAO,SAAS,CAAC,kBAAkB,EAAE,CAAC;KACzC;SAAM;QACH,OAAO,cAAc,CAAC;KACzB;AACL,CAAC","sourcesContent":["import type { DOMHelper, Rect } from 'roosterjs-content-model-types';\n\n/**\n * Scroll a given rectangle into view within a scroll container\n * @param scrollContainer The container to scroll\n * @param visibleRect The currently visible rectangle within the scroll container\n * @param domHelper The DOM helper of the editor\n * @param targetRect The target rectangle to scroll into view\n * @param scrollMargin Optional margin to apply when scrolling\n * @param preferTop Optional flag to indicate whether to prefer aligning the top or bottom of the target rect when the target rect is higher than visible rect @default false\n */\nexport function scrollRectIntoView(\n scrollContainer: HTMLElement,\n visibleRect: Rect,\n domHelper: DOMHelper,\n targetRect: Rect,\n scrollMargin: number = 0,\n preferTop: boolean = false\n) {\n let zoomScale: number | undefined;\n let margin = 0;\n\n if (scrollMargin != 0) {\n zoomScale = getZoomScale(domHelper, zoomScale);\n\n margin = Math.max(\n 0,\n Math.min(\n scrollMargin * zoomScale,\n (visibleRect.bottom - visibleRect.top - targetRect.bottom + targetRect.top) / 2\n )\n );\n }\n\n const top = targetRect.top - margin;\n const bottom = targetRect.bottom + margin;\n const height = bottom - top;\n\n // Define scroll operations\n const scrollUp = () => {\n zoomScale = getZoomScale(domHelper, zoomScale);\n scrollContainer.scrollTop -= (visibleRect.top - top) / zoomScale;\n };\n\n const scrollDown = () => {\n zoomScale = getZoomScale(domHelper, zoomScale);\n scrollContainer.scrollTop += (bottom - visibleRect.bottom) / zoomScale;\n };\n\n // Determine which operations to perform and in what order\n const needsScrollUp = top < visibleRect.top;\n const needsScrollDown = bottom > visibleRect.bottom;\n\n if (height > visibleRect.bottom - visibleRect.top) {\n // If the target rect is larger than visible rect, only perform one scroll operation\n if (preferTop) {\n scrollUp();\n } else {\n scrollDown();\n }\n } else if (preferTop) {\n if (needsScrollUp) {\n scrollUp();\n } else if (needsScrollDown) {\n scrollDown();\n }\n } else {\n if (needsScrollDown) {\n scrollDown();\n } else if (needsScrollUp) {\n scrollUp();\n }\n }\n}\n\n// domHelper.calculateZoomScale() may be an expensive call, so we cache the value during a single operation\nfunction getZoomScale(domHelper: DOMHelper, knownZoomScale: number | undefined): number {\n if (knownZoomScale === undefined) {\n return domHelper.calculateZoomScale();\n } else {\n return knownZoomScale;\n }\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export { isEntityElement, findClosestEntityWrapper, getAllEntityWrappers, parseE
22
22
  export { reuseCachedElement } from './domUtils/reuseCachedElement';
23
23
  export { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';
24
24
  export { normalizeRect } from './domUtils/normalizeRect';
25
+ export { scrollRectIntoView } from './domUtils/scrollRectIntoView';
25
26
  export { setLinkUndeletable, isLinkUndeletable } from './domUtils/hiddenProperties/undeletableLink';
26
27
  export { createBr } from './modelApi/creators/createBr';
27
28
  export { createListItem } from './modelApi/creators/createListItem';
@@ -78,6 +79,7 @@ export { extractClipboardItems } from './domUtils/event/extractClipboardItems';
78
79
  export { cacheGetEventData } from './domUtils/event/cacheGetEventData';
79
80
  export { setParagraphMarker, getParagraphMarker, } from './domUtils/hiddenProperties/paragraphMarker';
80
81
  export { setImageState, getImageState } from './domUtils/hiddenProperties/imageState';
82
+ export { getRangesByText } from './domUtils/getRangesByText';
81
83
  export { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';
82
84
  export { iterateSelections } from './modelApi/selection/iterateSelections';
83
85
  export { getFirstSelectedListItem, getFirstSelectedTable, getOperationalBlocks, getSelectedParagraphs, getSelectedSegments, getSelectedSegmentsAndParagraphs, } from './modelApi/selection/collectSelections';
package/lib/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createParagraphDecorator = exports.createContentModelDocument = exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
4
- exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = void 0;
5
- exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = void 0;
6
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = void 0;
3
+ exports.createContentModelDocument = exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
4
+ exports.isModifierKey = exports.isCharacterValue = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = void 0;
5
+ exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.isCursorMovingKey = void 0;
6
+ exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = void 0;
7
7
  var domToContentModel_1 = require("./domToModel/domToContentModel");
8
8
  Object.defineProperty(exports, "domToContentModel", { enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } });
9
9
  var contentModelToDom_1 = require("./modelToDom/contentModelToDom");
@@ -65,6 +65,8 @@ var isWhiteSpacePreserved_1 = require("./domUtils/isWhiteSpacePreserved");
65
65
  Object.defineProperty(exports, "isWhiteSpacePreserved", { enumerable: true, get: function () { return isWhiteSpacePreserved_1.isWhiteSpacePreserved; } });
66
66
  var normalizeRect_1 = require("./domUtils/normalizeRect");
67
67
  Object.defineProperty(exports, "normalizeRect", { enumerable: true, get: function () { return normalizeRect_1.normalizeRect; } });
68
+ var scrollRectIntoView_1 = require("./domUtils/scrollRectIntoView");
69
+ Object.defineProperty(exports, "scrollRectIntoView", { enumerable: true, get: function () { return scrollRectIntoView_1.scrollRectIntoView; } });
68
70
  var undeletableLink_1 = require("./domUtils/hiddenProperties/undeletableLink");
69
71
  Object.defineProperty(exports, "setLinkUndeletable", { enumerable: true, get: function () { return undeletableLink_1.setLinkUndeletable; } });
70
72
  Object.defineProperty(exports, "isLinkUndeletable", { enumerable: true, get: function () { return undeletableLink_1.isLinkUndeletable; } });
@@ -199,6 +201,8 @@ Object.defineProperty(exports, "getParagraphMarker", { enumerable: true, get: fu
199
201
  var imageState_1 = require("./domUtils/hiddenProperties/imageState");
200
202
  Object.defineProperty(exports, "setImageState", { enumerable: true, get: function () { return imageState_1.setImageState; } });
201
203
  Object.defineProperty(exports, "getImageState", { enumerable: true, get: function () { return imageState_1.getImageState; } });
204
+ var getRangesByText_1 = require("./domUtils/getRangesByText");
205
+ Object.defineProperty(exports, "getRangesByText", { enumerable: true, get: function () { return getRangesByText_1.getRangesByText; } });
202
206
  var isBlockGroupOfType_1 = require("./modelApi/typeCheck/isBlockGroupOfType");
203
207
  Object.defineProperty(exports, "isBlockGroupOfType", { enumerable: true, get: function () { return isBlockGroupOfType_1.isBlockGroupOfType; } });
204
208
  var iterateSelections_1 = require("./modelApi/selection/iterateSelections");
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-dom/lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\nexport { contentModelToText } from './modelToText/contentModelToText';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\nexport { isBlockElement } from './domToModel/utils/isBlockElement';\nexport { buildSelectionMarker } from './domToModel/utils/buildSelectionMarker';\n\nexport { updateMetadata, getMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { getSafeIdSelector } from './domUtils/getSafeIdSelector';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport { unwrap } from './domUtils/unwrap';\nexport {\n isEntityElement,\n findClosestEntityWrapper,\n getAllEntityWrappers,\n parseEntityFormat,\n generateEntityClassNames,\n addDelimiters,\n isEntityDelimiter,\n isBlockEntityContainer,\n findClosestBlockEntityContainer,\n} from './domUtils/entityUtils';\nexport { reuseCachedElement } from './domUtils/reuseCachedElement';\nexport { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';\nexport { normalizeRect } from './domUtils/normalizeRect';\n\nexport { setLinkUndeletable, isLinkUndeletable } from './domUtils/hiddenProperties/undeletableLink';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\nexport { createListLevel } from './modelApi/creators/createListLevel';\nexport { createEmptyModel } from './modelApi/creators/createEmptyModel';\nexport { createTableRow } from './modelApi/creators/createTableRow';\n\nexport { mutateBlock, mutateSegments, mutateSegment } from './modelApi/common/mutate';\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { addTextSegment } from './modelApi/common/addTextSegment';\nexport { normalizeParagraph } from './modelApi/common/normalizeParagraph';\n\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/typeCheck/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isEmpty } from './modelApi/common/isEmpty';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\nexport { mergeTextSegments } from './modelApi/common/mergeTextSegments';\nexport { normalizeSegmentFormat } from './modelApi/common/normalizeSegmentFormat';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\nexport {\n copyFormat,\n ListFormats,\n ListFormatsToKeep,\n ListFormatsToMove,\n ParagraphFormats,\n} from './modelApi/block/copyFormat';\nexport { getOrderedListNumberStr } from './modelApi/list/getOrderedListNumberStr';\nexport { getAutoListStyleType } from './modelApi/list/getAutoListStyleType';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport {\n DeprecatedColors,\n getColor,\n setColor,\n parseColor,\n defaultGenerateColorKey,\n} from './formatHandlers/utils/color';\n\nexport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n createDomToModelConfig,\n} from './domToModel/context/createDomToModelContext';\nexport {\n createModelToDomContext,\n createModelToDomContextWithConfig,\n createModelToDomConfig,\n} from './modelToDom/context/createModelToDomContext';\n\nexport { isBold } from './domUtils/style/isBold';\nexport { getSelectionRootNode } from './domUtils/selection/getSelectionRootNode';\nexport { getDOMInsertPointRect } from './domUtils/selection/getDOMInsertPointRect';\nexport { isCharacterValue, isModifierKey, isCursorMovingKey } from './domUtils/event/eventUtils';\nexport { combineBorderValue, extractBorderValues } from './domUtils/style/borderValues';\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\nexport { parseTableCells } from './domUtils/table/parseTableCells';\nexport { readFile } from './domUtils/readFile';\nexport { transformColor } from './domUtils/style/transformColor';\nexport { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\nexport {\n setParagraphMarker,\n getParagraphMarker,\n} from './domUtils/hiddenProperties/paragraphMarker';\nexport { setImageState, getImageState } from './domUtils/hiddenProperties/imageState';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\n\nexport { iterateSelections } from './modelApi/selection/iterateSelections';\nexport {\n getFirstSelectedListItem,\n getFirstSelectedTable,\n getOperationalBlocks,\n getSelectedParagraphs,\n getSelectedSegments,\n getSelectedSegmentsAndParagraphs,\n} from './modelApi/selection/collectSelections';\nexport { getSelectedCells } from './modelApi/selection/getSelectedCells';\nexport { hasSelectionInBlock } from './modelApi/selection/hasSelectionInBlock';\nexport { hasSelectionInSegment } from './modelApi/selection/hasSelectionInSegment';\nexport { hasSelectionInBlockGroup } from './modelApi/selection/hasSelectionInBlockGroup';\nexport { setSelection } from './modelApi/selection/setSelection';\n\nexport { cloneModel } from './modelApi/editing/cloneModel';\nexport { mergeModel } from './modelApi/editing/mergeModel';\nexport { deleteSelection } from './modelApi/editing/deleteSelection';\nexport { deleteSegment } from './modelApi/editing/deleteSegment';\nexport { deleteBlock } from './modelApi/editing/deleteBlock';\nexport { applyTableFormat, setFirstColumnFormatBorders } from './modelApi/editing/applyTableFormat';\nexport {\n normalizeTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n MIN_ALLOWED_TABLE_CELL_HEIGHT,\n} from './modelApi/editing/normalizeTable';\nexport { setTableCellBackgroundColor } from './modelApi/editing/setTableCellBackgroundColor';\nexport { retrieveModelFormatState } from './modelApi/editing/retrieveModelFormatState';\nexport { getListStyleTypeFromString } from './modelApi/editing/getListStyleTypeFromString';\nexport { getSegmentTextFormat } from './modelApi/editing/getSegmentTextFormat';\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\nexport { runEditSteps } from './modelApi/editing/runEditSteps';\n\nexport { updateImageMetadata, getImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport {\n updateTableCellMetadata,\n getTableCellMetadata,\n} from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata, getTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport {\n updateListMetadata,\n getListMetadata,\n ListMetadataDefinition,\n} from './modelApi/metadata/updateListMetadata';\n\nexport { ChangeSource } from './constants/ChangeSource';\nexport { BulletListType } from './constants/BulletListType';\nexport { NumberingListType } from './constants/NumberingListType';\nexport { TableBorderFormat } from './constants/TableBorderFormat';\nexport { OrderedListStyleMap } from './constants/OrderedListStyleMap';\nexport { UnorderedListStyleMap } from './constants/UnorderedListStyleMap';\nexport { EmptySegmentFormat } from './constants/EmptySegmentFormat';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-dom/lib/index.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,uEAAsE;AAA7D,wHAAA,kBAAkB,OAAA;AAE3B,yEAIgD;AAH5C,gHAAA,cAAc,OAAA;AACd,wHAAA,sBAAsB,OAAA;AACtB,kHAAA,gBAAgB,OAAA;AAEpB,2EAA0E;AAAjE,kHAAA,eAAe,OAAA;AACxB,yEAAwE;AAA/D,gHAAA,cAAc,OAAA;AACvB,4FAA2F;AAAlF,wIAAA,0BAA0B,OAAA;AACnC,8DAA6D;AAApD,0GAAA,WAAW,OAAA;AACpB,oEAAmE;AAA1D,gHAAA,cAAc,OAAA;AACvB,oEAAmE;AAA1D,gHAAA,cAAc,OAAA;AACvB,gFAA+E;AAAtE,4HAAA,oBAAoB,OAAA;AAE7B,qEAA8F;AAArF,gHAAA,cAAc,OAAA;AAAE,6GAAA,WAAW,OAAA;AAAE,6GAAA,WAAW,OAAA;AACjD,wDAAuD;AAA9C,4GAAA,YAAY,OAAA;AACrB,8DAA6D;AAApD,kHAAA,eAAe,OAAA;AACxB,0DAAyD;AAAhD,8GAAA,aAAa,OAAA;AACtB,kEAAiE;AAAxD,sHAAA,iBAAiB,OAAA;AAC1B,8CAA6C;AAApC,kGAAA,OAAO,OAAA;AAChB,4DAA8E;AAArE,gHAAA,cAAc,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC1C,wCAAuC;AAA9B,4FAAA,IAAI,OAAA;AACb,4CAA2C;AAAlC,gGAAA,MAAM,OAAA;AACf,sDAUgC;AAT5B,8GAAA,eAAe,OAAA;AACf,uHAAA,wBAAwB,OAAA;AACxB,mHAAA,oBAAoB,OAAA;AACpB,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,qHAAA,sBAAsB,OAAA;AACtB,8HAAA,+BAA+B,OAAA;AAEnC,oEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAC3B,0EAAyE;AAAhE,8HAAA,qBAAqB,OAAA;AAC9B,0DAAyD;AAAhD,8GAAA,aAAa,OAAA;AACtB,oEAAmE;AAA1D,wHAAA,kBAAkB,OAAA;AAE3B,+EAAoG;AAA3F,qHAAA,kBAAkB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAE9C,yDAAwD;AAA/C,oGAAA,QAAQ,OAAA;AACjB,qEAAoE;AAA3D,gHAAA,cAAc,OAAA;AACvB,mFAAkF;AAAzE,8HAAA,qBAAqB,OAAA;AAC9B,uEAAsE;AAA7D,kHAAA,eAAe,OAAA;AACxB,mFAAkF;AAAzE,8HAAA,qBAAqB,OAAA;AAC9B,+DAA8D;AAArD,0GAAA,WAAW,OAAA;AACpB,uEAAsE;AAA7D,kHAAA,eAAe,OAAA;AACxB,6DAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,+DAA8D;AAArD,0GAAA,WAAW,OAAA;AACpB,6FAA4F;AAAnF,wIAAA,0BAA0B,OAAA;AACnC,yFAAwF;AAA/E,oIAAA,wBAAwB,OAAA;AACjC,iFAAgF;AAAvE,4HAAA,oBAAoB,OAAA;AAC7B,6EAA4E;AAAnE,wHAAA,kBAAkB,OAAA;AAC3B,iEAAgE;AAAvD,4GAAA,YAAY,OAAA;AACrB,mEAAkE;AAAzD,8GAAA,aAAa,OAAA;AACtB,uEAAsE;AAA7D,kHAAA,eAAe,OAAA;AACxB,yEAAwE;AAA/D,oHAAA,gBAAgB,OAAA;AACzB,qEAAoE;AAA3D,gHAAA,cAAc,OAAA;AAEvB,mDAAsF;AAA7E,qGAAA,WAAW,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AACnD,uDAAsD;AAA7C,oGAAA,QAAQ,OAAA;AACjB,iEAA0D;AAAjD,wGAAA,OAAO,OAAA;AAChB,iEAA0D;AAAjD,wGAAA,OAAO,OAAA;AAChB,mEAAkE;AAAzD,gHAAA,cAAc,OAAA;AACvB,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAE3B,iFAAgF;AAAvE,8HAAA,qBAAqB,OAAA;AAC9B,0EAAyE;AAAhE,oHAAA,gBAAgB,OAAA;AACzB,6DAA4D;AAAnD,0GAAA,WAAW,OAAA;AACpB,2DAA0D;AAAjD,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,kGAAA,OAAO,OAAA;AAChB,uEAA4E;AAAnE,0HAAA,sBAAsB,OAAA;AAC/B,yEAAwE;AAA/D,sHAAA,iBAAiB,OAAA;AAC1B,mFAAkF;AAAzE,gIAAA,sBAAsB,OAAA;AAE/B,oFAAmF;AAA1E,kIAAA,uBAAuB,OAAA;AAChC,0DAMqC;AALjC,wGAAA,UAAU,OAAA;AACV,yGAAA,WAAW,OAAA;AACX,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA;AACjB,8GAAA,gBAAgB,OAAA;AAEpB,mFAAkF;AAAzE,kIAAA,uBAAuB,OAAA;AAChC,6EAA4E;AAAnE,4HAAA,oBAAoB,OAAA;AAE7B,gFAA+E;AAAtE,wHAAA,kBAAkB,OAAA;AAC3B,mFAAyE;AAAhE,iHAAA,UAAU,OAAA;AACnB,sDAMsC;AALlC,yGAAA,gBAAgB,OAAA;AAChB,iGAAA,QAAQ,OAAA;AACR,iGAAA,QAAQ,OAAA;AACR,mGAAA,UAAU,OAAA;AACV,gHAAA,uBAAuB,OAAA;AAG3B,wFAIsD;AAHlD,kIAAA,uBAAuB,OAAA;AACvB,4IAAA,iCAAiC,OAAA;AACjC,iIAAA,sBAAsB,OAAA;AAE1B,wFAIsD;AAHlD,kIAAA,uBAAuB,OAAA;AACvB,4IAAA,iCAAiC,OAAA;AACjC,iIAAA,sBAAsB,OAAA;AAG1B,kDAAiD;AAAxC,gGAAA,MAAM,OAAA;AACf,kFAAiF;AAAxE,4HAAA,oBAAoB,OAAA;AAC7B,oFAAmF;AAA1E,8HAAA,qBAAqB,OAAA;AAC9B,0DAAiG;AAAxF,8GAAA,gBAAgB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAC3D,8DAAwF;AAA/E,kHAAA,kBAAkB,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAChD,oDAA8E;AAArE,2GAAA,aAAa,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,2GAAA,aAAa,OAAA;AAC9C,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AACxB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,kEAAiE;AAAxD,gHAAA,cAAc,OAAA;AACvB,4EAA2E;AAAlE,0HAAA,mBAAmB,OAAA;AAC5B,gFAA+E;AAAtE,8HAAA,qBAAqB,OAAA;AAC9B,wEAAuE;AAA9D,sHAAA,iBAAiB,OAAA;AAC1B,+EAGqD;AAFjD,qHAAA,kBAAkB,OAAA;AAClB,qHAAA,kBAAkB,OAAA;AAEtB,qEAAsF;AAA7E,2GAAA,aAAa,OAAA;AAAE,2GAAA,aAAa,OAAA;AACrC,8DAA6D;AAApD,kHAAA,eAAe,OAAA;AAExB,8EAA6E;AAApE,wHAAA,kBAAkB,OAAA;AAE3B,4EAA2E;AAAlE,sHAAA,iBAAiB,OAAA;AAC1B,4EAOgD;AAN5C,6HAAA,wBAAwB,OAAA;AACxB,0HAAA,qBAAqB,OAAA;AACrB,yHAAA,oBAAoB,OAAA;AACpB,0HAAA,qBAAqB,OAAA;AACrB,wHAAA,mBAAmB,OAAA;AACnB,qIAAA,gCAAgC,OAAA;AAEpC,0EAAyE;AAAhE,oHAAA,gBAAgB,OAAA;AACzB,gFAA+E;AAAtE,0HAAA,mBAAmB,OAAA;AAC5B,oFAAmF;AAA1E,8HAAA,qBAAqB,OAAA;AAC9B,0FAAyF;AAAhF,oIAAA,wBAAwB,OAAA;AACjC,kEAAiE;AAAxD,4GAAA,YAAY,OAAA;AAErB,4DAA2D;AAAlD,wGAAA,UAAU,OAAA;AACnB,4DAA2D;AAAlD,wGAAA,UAAU,OAAA;AACnB,sEAAqE;AAA5D,kHAAA,eAAe,OAAA;AACxB,kEAAiE;AAAxD,8GAAA,aAAa,OAAA;AACtB,8DAA6D;AAApD,0GAAA,WAAW,OAAA;AACpB,wEAAoG;AAA3F,oHAAA,gBAAgB,OAAA;AAAE,+HAAA,2BAA2B,OAAA;AACtD,oEAI2C;AAHvC,gHAAA,cAAc,OAAA;AACd,8HAAA,4BAA4B,OAAA;AAC5B,+HAAA,6BAA6B,OAAA;AAEjC,8FAA6F;AAApF,0IAAA,2BAA2B,OAAA;AACpC,wFAAuF;AAA9E,oIAAA,wBAAwB,OAAA;AACjC,4FAA2F;AAAlF,wIAAA,0BAA0B,OAAA;AACnC,gFAA+E;AAAtE,4HAAA,oBAAoB,OAAA;AAC7B,0GAAyG;AAAhG,sJAAA,iCAAiC,OAAA;AAC1C,gEAA+D;AAAtD,4GAAA,YAAY,OAAA;AAErB,+EAAgG;AAAvF,0HAAA,mBAAmB,OAAA;AAAE,uHAAA,gBAAgB,OAAA;AAC9C,uFAGqD;AAFjD,kIAAA,uBAAuB,OAAA;AACvB,+HAAA,oBAAoB,OAAA;AAExB,+EAAgG;AAAvF,0HAAA,mBAAmB,OAAA;AAAE,uHAAA,gBAAgB,OAAA;AAC9C,6EAIgD;AAH5C,wHAAA,kBAAkB,OAAA;AAClB,qHAAA,eAAe,OAAA;AACf,4HAAA,sBAAsB,OAAA;AAG1B,yDAAwD;AAA/C,4GAAA,YAAY,OAAA;AACrB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AACvB,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,uEAAsE;AAA7D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA0E;AAAjE,8HAAA,qBAAqB,OAAA;AAC9B,qEAAoE;AAA3D,wHAAA,kBAAkB,OAAA","sourcesContent":["export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\nexport { contentModelToText } from './modelToText/contentModelToText';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\nexport { isBlockElement } from './domToModel/utils/isBlockElement';\nexport { buildSelectionMarker } from './domToModel/utils/buildSelectionMarker';\n\nexport { updateMetadata, getMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { getSafeIdSelector } from './domUtils/getSafeIdSelector';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport { unwrap } from './domUtils/unwrap';\nexport {\n isEntityElement,\n findClosestEntityWrapper,\n getAllEntityWrappers,\n parseEntityFormat,\n generateEntityClassNames,\n addDelimiters,\n isEntityDelimiter,\n isBlockEntityContainer,\n findClosestBlockEntityContainer,\n} from './domUtils/entityUtils';\nexport { reuseCachedElement } from './domUtils/reuseCachedElement';\nexport { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';\nexport { normalizeRect } from './domUtils/normalizeRect';\nexport { scrollRectIntoView } from './domUtils/scrollRectIntoView';\n\nexport { setLinkUndeletable, isLinkUndeletable } from './domUtils/hiddenProperties/undeletableLink';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\nexport { createListLevel } from './modelApi/creators/createListLevel';\nexport { createEmptyModel } from './modelApi/creators/createEmptyModel';\nexport { createTableRow } from './modelApi/creators/createTableRow';\n\nexport { mutateBlock, mutateSegments, mutateSegment } from './modelApi/common/mutate';\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { addTextSegment } from './modelApi/common/addTextSegment';\nexport { normalizeParagraph } from './modelApi/common/normalizeParagraph';\n\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/typeCheck/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isEmpty } from './modelApi/common/isEmpty';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\nexport { mergeTextSegments } from './modelApi/common/mergeTextSegments';\nexport { normalizeSegmentFormat } from './modelApi/common/normalizeSegmentFormat';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\nexport {\n copyFormat,\n ListFormats,\n ListFormatsToKeep,\n ListFormatsToMove,\n ParagraphFormats,\n} from './modelApi/block/copyFormat';\nexport { getOrderedListNumberStr } from './modelApi/list/getOrderedListNumberStr';\nexport { getAutoListStyleType } from './modelApi/list/getAutoListStyleType';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport {\n DeprecatedColors,\n getColor,\n setColor,\n parseColor,\n defaultGenerateColorKey,\n} from './formatHandlers/utils/color';\n\nexport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n createDomToModelConfig,\n} from './domToModel/context/createDomToModelContext';\nexport {\n createModelToDomContext,\n createModelToDomContextWithConfig,\n createModelToDomConfig,\n} from './modelToDom/context/createModelToDomContext';\n\nexport { isBold } from './domUtils/style/isBold';\nexport { getSelectionRootNode } from './domUtils/selection/getSelectionRootNode';\nexport { getDOMInsertPointRect } from './domUtils/selection/getDOMInsertPointRect';\nexport { isCharacterValue, isModifierKey, isCursorMovingKey } from './domUtils/event/eventUtils';\nexport { combineBorderValue, extractBorderValues } from './domUtils/style/borderValues';\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\nexport { parseTableCells } from './domUtils/table/parseTableCells';\nexport { readFile } from './domUtils/readFile';\nexport { transformColor } from './domUtils/style/transformColor';\nexport { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\nexport {\n setParagraphMarker,\n getParagraphMarker,\n} from './domUtils/hiddenProperties/paragraphMarker';\nexport { setImageState, getImageState } from './domUtils/hiddenProperties/imageState';\nexport { getRangesByText } from './domUtils/getRangesByText';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\n\nexport { iterateSelections } from './modelApi/selection/iterateSelections';\nexport {\n getFirstSelectedListItem,\n getFirstSelectedTable,\n getOperationalBlocks,\n getSelectedParagraphs,\n getSelectedSegments,\n getSelectedSegmentsAndParagraphs,\n} from './modelApi/selection/collectSelections';\nexport { getSelectedCells } from './modelApi/selection/getSelectedCells';\nexport { hasSelectionInBlock } from './modelApi/selection/hasSelectionInBlock';\nexport { hasSelectionInSegment } from './modelApi/selection/hasSelectionInSegment';\nexport { hasSelectionInBlockGroup } from './modelApi/selection/hasSelectionInBlockGroup';\nexport { setSelection } from './modelApi/selection/setSelection';\n\nexport { cloneModel } from './modelApi/editing/cloneModel';\nexport { mergeModel } from './modelApi/editing/mergeModel';\nexport { deleteSelection } from './modelApi/editing/deleteSelection';\nexport { deleteSegment } from './modelApi/editing/deleteSegment';\nexport { deleteBlock } from './modelApi/editing/deleteBlock';\nexport { applyTableFormat, setFirstColumnFormatBorders } from './modelApi/editing/applyTableFormat';\nexport {\n normalizeTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n MIN_ALLOWED_TABLE_CELL_HEIGHT,\n} from './modelApi/editing/normalizeTable';\nexport { setTableCellBackgroundColor } from './modelApi/editing/setTableCellBackgroundColor';\nexport { retrieveModelFormatState } from './modelApi/editing/retrieveModelFormatState';\nexport { getListStyleTypeFromString } from './modelApi/editing/getListStyleTypeFromString';\nexport { getSegmentTextFormat } from './modelApi/editing/getSegmentTextFormat';\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\nexport { runEditSteps } from './modelApi/editing/runEditSteps';\n\nexport { updateImageMetadata, getImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport {\n updateTableCellMetadata,\n getTableCellMetadata,\n} from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata, getTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport {\n updateListMetadata,\n getListMetadata,\n ListMetadataDefinition,\n} from './modelApi/metadata/updateListMetadata';\n\nexport { ChangeSource } from './constants/ChangeSource';\nexport { BulletListType } from './constants/BulletListType';\nexport { NumberingListType } from './constants/NumberingListType';\nexport { TableBorderFormat } from './constants/TableBorderFormat';\nexport { OrderedListStyleMap } from './constants/OrderedListStyleMap';\nexport { UnorderedListStyleMap } from './constants/UnorderedListStyleMap';\nexport { EmptySegmentFormat } from './constants/EmptySegmentFormat';\n"]}
@@ -60,4 +60,8 @@ export declare const ChangeSource: {
60
60
  * Content changed by auto format
61
61
  */
62
62
  AutoFormat: string;
63
+ /**
64
+ * Content changed by replace
65
+ */
66
+ Replace: string;
63
67
  };
@@ -64,6 +64,10 @@ define(["require", "exports"], function (require, exports) {
64
64
  * Content changed by auto format
65
65
  */
66
66
  AutoFormat: 'AutoFormat',
67
+ /**
68
+ * Content changed by replace
69
+ */
70
+ Replace: 'Replace',
67
71
  };
68
72
  });
69
73
  //# sourceMappingURL=ChangeSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;;IAAA;;;OAGG;IACU,QAAA,YAAY,GAAG;QACxB;;WAEG;QACH,QAAQ,EAAE,UAAU;QACpB;;WAEG;QACH,UAAU,EAAE,YAAY;QACxB;;WAEG;QACH,MAAM,EAAE,QAAQ;QAChB;;WAEG;QACH,WAAW,EAAE,aAAa;QAC1B;;WAEG;QACH,KAAK,EAAE,OAAO;QACd;;WAEG;QACH,UAAU,EAAE,YAAY;QACxB;;WAEG;QACH,GAAG,EAAE,KAAK;QACV;;WAEG;QACH,IAAI,EAAE,MAAM;QACZ;;WAEG;QACH,YAAY,EAAE,cAAc;QAC5B;;WAEG;QACH,gBAAgB,EAAE,kBAAkB;QACpC;;WAEG;QACH,iBAAiB,EAAE,mBAAmB;QACtC;;WAEG;QACH,SAAS,EAAE,WAAW;QACtB;;;WAGG;QACH,QAAQ,EAAE,UAAU;QAEpB;;WAEG;QACH,UAAU,EAAE,YAAY;KAC3B,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n\n /**\n * Content changed by auto format\n */\n AutoFormat: 'AutoFormat',\n};\n"]}
1
+ {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;;IAAA;;;OAGG;IACU,QAAA,YAAY,GAAG;QACxB;;WAEG;QACH,QAAQ,EAAE,UAAU;QACpB;;WAEG;QACH,UAAU,EAAE,YAAY;QACxB;;WAEG;QACH,MAAM,EAAE,QAAQ;QAChB;;WAEG;QACH,WAAW,EAAE,aAAa;QAC1B;;WAEG;QACH,KAAK,EAAE,OAAO;QACd;;WAEG;QACH,UAAU,EAAE,YAAY;QACxB;;WAEG;QACH,GAAG,EAAE,KAAK;QACV;;WAEG;QACH,IAAI,EAAE,MAAM;QACZ;;WAEG;QACH,YAAY,EAAE,cAAc;QAC5B;;WAEG;QACH,gBAAgB,EAAE,kBAAkB;QACpC;;WAEG;QACH,iBAAiB,EAAE,mBAAmB;QACtC;;WAEG;QACH,SAAS,EAAE,WAAW;QACtB;;;WAGG;QACH,QAAQ,EAAE,UAAU;QAEpB;;WAEG;QACH,UAAU,EAAE,YAAY;QAExB;;WAEG;QACH,OAAO,EAAE,SAAS;KACrB,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n\n /**\n * Content changed by auto format\n */\n AutoFormat: 'AutoFormat',\n\n /**\n * Content changed by replace\n */\n Replace: 'Replace',\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Search text from the given root element and return all ranges that match the search criteria
3
+ * @param root Root element to search from
4
+ * @param text Text to search for
5
+ * @param matchCase Whether to match case
6
+ * @param wholeWord Whether to match whole words only
7
+ * @param editableOnly Whether to search only in editable elements
8
+ * @returns Array of matching ranges
9
+ */
10
+ export declare function getRangesByText(root: HTMLElement, text: string, matchCase: boolean, wholeWord: boolean, editableOnly?: boolean): Range[];
@@ -0,0 +1,94 @@
1
+ define(["require", "exports", "../domToModel/utils/isBlockElement", "./isNodeOfType", "./stringUtil"], function (require, exports, isBlockElement_1, isNodeOfType_1, stringUtil_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getRangesByText = void 0;
5
+ var SplittingTags = ['BR', 'HR', 'IMG'];
6
+ /**
7
+ * Search text from the given root element and return all ranges that match the search criteria
8
+ * @param root Root element to search from
9
+ * @param text Text to search for
10
+ * @param matchCase Whether to match case
11
+ * @param wholeWord Whether to match whole words only
12
+ * @param editableOnly Whether to search only in editable elements
13
+ * @returns Array of matching ranges
14
+ */
15
+ function getRangesByText(root, text, matchCase, wholeWord, editableOnly) {
16
+ var context = {
17
+ text: matchCase ? text : text.toLowerCase(),
18
+ matchCase: matchCase,
19
+ wholeWord: wholeWord,
20
+ result: [],
21
+ paragraphText: '',
22
+ indexes: [],
23
+ editableOnly: !!editableOnly,
24
+ };
25
+ if (context.text) {
26
+ iterateTextNodes(root, context);
27
+ }
28
+ return context.result;
29
+ }
30
+ exports.getRangesByText = getRangesByText;
31
+ function isSplittingElement(element) {
32
+ return (0, isBlockElement_1.isBlockElement)(element) || SplittingTags.indexOf(element.tagName) >= 0;
33
+ }
34
+ function iterateTextNodes(root, context) {
35
+ var canSearchText = !context.editableOnly || root.isContentEditable;
36
+ for (var node = root.firstChild; node; node = node.nextSibling) {
37
+ if ((0, isNodeOfType_1.isNodeOfType)(node, 'TEXT_NODE') && canSearchText) {
38
+ var nodeText = context.matchCase
39
+ ? node.nodeValue || ''
40
+ : (node.nodeValue || '').toLowerCase();
41
+ if (nodeText) {
42
+ context.paragraphText += nodeText;
43
+ context.indexes.push({ node: node, length: nodeText.length });
44
+ }
45
+ }
46
+ else if ((0, isNodeOfType_1.isNodeOfType)(node, 'ELEMENT_NODE')) {
47
+ if (context.paragraphText && isSplittingElement(node)) {
48
+ search(root.ownerDocument, context);
49
+ }
50
+ iterateTextNodes(node, context);
51
+ }
52
+ }
53
+ if (context.paragraphText && isSplittingElement(root)) {
54
+ search(root.ownerDocument, context);
55
+ }
56
+ }
57
+ function search(doc, context) {
58
+ var offset;
59
+ var startIndex = 0;
60
+ while ((offset = context.paragraphText.indexOf(context.text, startIndex)) > -1) {
61
+ if (!context.wholeWord ||
62
+ ((offset == 0 || isSpaceOrPunctuation(context.paragraphText[offset - 1])) &&
63
+ (offset + context.text.length == context.paragraphText.length ||
64
+ isSpaceOrPunctuation(context.paragraphText[offset + context.text.length])))) {
65
+ var start = findNodeAndOffset(context.indexes, offset, false /*isEnd*/);
66
+ var end = findNodeAndOffset(context.indexes, offset + context.text.length, true /*isEnd*/);
67
+ if (start && end) {
68
+ var range = doc.createRange();
69
+ range.setStart(start.node, start.offset);
70
+ range.setEnd(end.node, end.offset);
71
+ context.result.push(range);
72
+ }
73
+ }
74
+ startIndex = offset + context.text.length;
75
+ }
76
+ context.paragraphText = '';
77
+ context.indexes = [];
78
+ }
79
+ function isSpaceOrPunctuation(char) {
80
+ return (0, stringUtil_1.isSpace)(char) || (0, stringUtil_1.isPunctuation)(char);
81
+ }
82
+ function findNodeAndOffset(lengths, offset, isEnd) {
83
+ var currentIndex = 0;
84
+ for (var i = 0; i < lengths.length; i++) {
85
+ var segmentLength = lengths[i].length;
86
+ if (isEnd ? currentIndex + segmentLength >= offset : currentIndex + segmentLength > offset) {
87
+ return { node: lengths[i].node, offset: offset - currentIndex };
88
+ }
89
+ currentIndex += segmentLength;
90
+ }
91
+ return null;
92
+ }
93
+ });
94
+ //# sourceMappingURL=getRangesByText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRangesByText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/getRangesByText.ts"],"names":[],"mappings":";;;;IAIA,IAAM,aAAa,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAepD;;;;;;;;OAQG;IACH,SAAgB,eAAe,CAC3B,IAAiB,EACjB,IAAY,EACZ,SAAkB,EAClB,SAAkB,EAClB,YAAsB;QAEtB,IAAM,OAAO,GAAkB;YAC3B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YAC3C,SAAS,WAAA;YACT,SAAS,WAAA;YACT,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,YAAY;SAC/B,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE;YACd,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACnC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC;IAC1B,CAAC;IAtBD,0CAsBC;IAED,SAAS,kBAAkB,CAAC,OAAoB;QAC5C,OAAO,IAAA,+BAAc,EAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,gBAAgB,CAAC,IAAiB,EAAE,OAAsB;QAC/D,IAAM,aAAa,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAEtE,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC5D,IAAI,IAAA,2BAAY,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE;gBAClD,IAAM,QAAQ,GAAG,OAAO,CAAC,SAAS;oBAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;oBACtB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAE3C,IAAI,QAAQ,EAAE;oBACV,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC;oBAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC3D;aACJ;iBAAM,IAAI,IAAA,2BAAY,EAAC,IAAI,EAAE,cAAc,CAAC,EAAE;gBAC3C,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;oBACnD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;iBACvC;gBAED,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aACnC;SACJ;QAED,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACnD,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;SACvC;IACL,CAAC;IAED,SAAS,MAAM,CAAC,GAAa,EAAE,OAAsB;QACjD,IAAI,MAAc,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YAC5E,IACI,CAAC,OAAO,CAAC,SAAS;gBAClB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACrE,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM;wBACzD,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACrF;gBACE,IAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC1E,IAAM,GAAG,GAAG,iBAAiB,CACzB,OAAO,CAAC,OAAO,EACf,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAC5B,IAAI,CAAC,SAAS,CACjB,CAAC;gBAEF,IAAI,KAAK,IAAI,GAAG,EAAE;oBACd,IAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;oBAEhC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACzC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACnC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC9B;aACJ;YAED,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7C;QAED,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,oBAAoB,CAAC,IAAY;QACtC,OAAO,IAAA,oBAAO,EAAC,IAAI,CAAC,IAAI,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,iBAAiB,CACtB,OAAyC,EACzC,MAAc,EACd,KAAc;QAEd,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAExC,IACI,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,aAAa,GAAG,MAAM,EACxF;gBACE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;aACnE;YAED,YAAY,IAAI,aAAa,CAAC;SACjC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC","sourcesContent":["import { isBlockElement } from '../domToModel/utils/isBlockElement';\nimport { isNodeOfType } from './isNodeOfType';\nimport { isPunctuation, isSpace } from './stringUtil';\n\nconst SplittingTags: string[] = ['BR', 'HR', 'IMG'];\n\ninterface SearchContext {\n text: string;\n matchCase: boolean;\n wholeWord: boolean;\n result: Range[];\n paragraphText: string;\n editableOnly: boolean;\n indexes: {\n node: Text;\n length: number;\n }[];\n}\n\n/**\n * Search text from the given root element and return all ranges that match the search criteria\n * @param root Root element to search from\n * @param text Text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole words only\n * @param editableOnly Whether to search only in editable elements\n * @returns Array of matching ranges\n */\nexport function getRangesByText(\n root: HTMLElement,\n text: string,\n matchCase: boolean,\n wholeWord: boolean,\n editableOnly?: boolean\n): Range[] {\n const context: SearchContext = {\n text: matchCase ? text : text.toLowerCase(),\n matchCase,\n wholeWord,\n result: [],\n paragraphText: '',\n indexes: [],\n editableOnly: !!editableOnly,\n };\n\n if (context.text) {\n iterateTextNodes(root, context);\n }\n\n return context.result;\n}\n\nfunction isSplittingElement(element: HTMLElement) {\n return isBlockElement(element) || SplittingTags.indexOf(element.tagName) >= 0;\n}\n\nfunction iterateTextNodes(root: HTMLElement, context: SearchContext) {\n const canSearchText = !context.editableOnly || root.isContentEditable;\n\n for (let node = root.firstChild; node; node = node.nextSibling) {\n if (isNodeOfType(node, 'TEXT_NODE') && canSearchText) {\n const nodeText = context.matchCase\n ? node.nodeValue || ''\n : (node.nodeValue || '').toLowerCase();\n\n if (nodeText) {\n context.paragraphText += nodeText;\n context.indexes.push({ node, length: nodeText.length });\n }\n } else if (isNodeOfType(node, 'ELEMENT_NODE')) {\n if (context.paragraphText && isSplittingElement(node)) {\n search(root.ownerDocument, context);\n }\n\n iterateTextNodes(node, context);\n }\n }\n\n if (context.paragraphText && isSplittingElement(root)) {\n search(root.ownerDocument, context);\n }\n}\n\nfunction search(doc: Document, context: SearchContext) {\n let offset: number;\n let startIndex = 0;\n\n while ((offset = context.paragraphText.indexOf(context.text, startIndex)) > -1) {\n if (\n !context.wholeWord ||\n ((offset == 0 || isSpaceOrPunctuation(context.paragraphText[offset - 1])) &&\n (offset + context.text.length == context.paragraphText.length ||\n isSpaceOrPunctuation(context.paragraphText[offset + context.text.length])))\n ) {\n const start = findNodeAndOffset(context.indexes, offset, false /*isEnd*/);\n const end = findNodeAndOffset(\n context.indexes,\n offset + context.text.length,\n true /*isEnd*/\n );\n\n if (start && end) {\n const range = doc.createRange();\n\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n context.result.push(range);\n }\n }\n\n startIndex = offset + context.text.length;\n }\n\n context.paragraphText = '';\n context.indexes = [];\n}\n\nfunction isSpaceOrPunctuation(char: string) {\n return isSpace(char) || isPunctuation(char);\n}\n\nfunction findNodeAndOffset(\n lengths: { length: number; node: Text }[],\n offset: number,\n isEnd: boolean\n): { node: Text; offset: number } | null {\n let currentIndex = 0;\n\n for (let i = 0; i < lengths.length; i++) {\n const segmentLength = lengths[i].length;\n\n if (\n isEnd ? currentIndex + segmentLength >= offset : currentIndex + segmentLength > offset\n ) {\n return { node: lengths[i].node, offset: offset - currentIndex };\n }\n\n currentIndex += segmentLength;\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { DOMHelper, Rect } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Scroll a given rectangle into view within a scroll container
4
+ * @param scrollContainer The container to scroll
5
+ * @param visibleRect The currently visible rectangle within the scroll container
6
+ * @param domHelper The DOM helper of the editor
7
+ * @param targetRect The target rectangle to scroll into view
8
+ * @param scrollMargin Optional margin to apply when scrolling
9
+ * @param preferTop Optional flag to indicate whether to prefer aligning the top or bottom of the target rect when the target rect is higher than visible rect @default false
10
+ */
11
+ export declare function scrollRectIntoView(scrollContainer: HTMLElement, visibleRect: Rect, domHelper: DOMHelper, targetRect: Rect, scrollMargin?: number, preferTop?: boolean): void;