roosterjs-content-model-core 9.51.0 → 9.53.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 (127) hide show
  1. package/lib/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
  2. package/lib/command/createModelFromHtml/convertInlineCss.js.map +1 -1
  3. package/lib/command/cutCopy/getContentForCopy.js +4 -1
  4. package/lib/command/cutCopy/getContentForCopy.js.map +1 -1
  5. package/lib/command/paste/generatePasteOptionFromPlugins.js +1 -0
  6. package/lib/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
  7. package/lib/command/paste/retrieveHtmlInfo.d.ts +1 -2
  8. package/lib/command/paste/retrieveHtmlInfo.js.map +1 -1
  9. package/lib/coreApi/announce/announce.js +1 -0
  10. package/lib/coreApi/announce/announce.js.map +1 -1
  11. package/lib/coreApi/getDOMSelection/getDOMSelection.js +12 -9
  12. package/lib/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
  13. package/lib/coreApi/setDOMSelection/setDOMSelection.js +7 -8
  14. package/lib/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
  15. package/lib/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
  16. package/lib/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
  17. package/lib/coreApi/setEditorStyle/setEditorStyle.js +1 -1
  18. package/lib/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
  19. package/lib/corePlugin/cache/areSameSelections.d.ts +0 -4
  20. package/lib/corePlugin/cache/areSameSelections.js +3 -10
  21. package/lib/corePlugin/cache/areSameSelections.js.map +1 -1
  22. package/lib/corePlugin/cache/domIndexerImpl.js +14 -6
  23. package/lib/corePlugin/cache/domIndexerImpl.js.map +1 -1
  24. package/lib/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
  25. package/lib/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
  26. package/lib/corePlugin/selection/SelectionPlugin.js +10 -7
  27. package/lib/corePlugin/selection/SelectionPlugin.js.map +1 -1
  28. package/lib/editor/core/DOMHelperImpl.d.ts +4 -0
  29. package/lib/editor/core/DOMHelperImpl.js +61 -1
  30. package/lib/editor/core/DOMHelperImpl.js.map +1 -1
  31. package/lib/editor/core/createEditorCore.js +4 -1
  32. package/lib/editor/core/createEditorCore.js.map +1 -1
  33. package/lib/override/containerSizeFormatParser.js +2 -0
  34. package/lib/override/containerSizeFormatParser.js.map +1 -1
  35. package/lib/utils/areSameRanges.d.ts +5 -0
  36. package/lib/utils/areSameRanges.js +13 -0
  37. package/lib/utils/areSameRanges.js.map +1 -0
  38. package/lib/utils/createAriaLiveElement.js +0 -1
  39. package/lib/utils/createAriaLiveElement.js.map +1 -1
  40. package/lib-amd/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
  41. package/lib-amd/command/createModelFromHtml/convertInlineCss.js.map +1 -1
  42. package/lib-amd/command/cutCopy/getContentForCopy.js +4 -1
  43. package/lib-amd/command/cutCopy/getContentForCopy.js.map +1 -1
  44. package/lib-amd/command/paste/generatePasteOptionFromPlugins.js +1 -0
  45. package/lib-amd/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
  46. package/lib-amd/command/paste/retrieveHtmlInfo.d.ts +1 -2
  47. package/lib-amd/command/paste/retrieveHtmlInfo.js.map +1 -1
  48. package/lib-amd/coreApi/announce/announce.js +1 -0
  49. package/lib-amd/coreApi/announce/announce.js.map +1 -1
  50. package/lib-amd/coreApi/getDOMSelection/getDOMSelection.js +12 -9
  51. package/lib-amd/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
  52. package/lib-amd/coreApi/setDOMSelection/setDOMSelection.js +8 -8
  53. package/lib-amd/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
  54. package/lib-amd/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
  55. package/lib-amd/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
  56. package/lib-amd/coreApi/setEditorStyle/setEditorStyle.js +1 -1
  57. package/lib-amd/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
  58. package/lib-amd/corePlugin/cache/areSameSelections.d.ts +0 -4
  59. package/lib-amd/corePlugin/cache/areSameSelections.js +3 -11
  60. package/lib-amd/corePlugin/cache/areSameSelections.js.map +1 -1
  61. package/lib-amd/corePlugin/cache/domIndexerImpl.js +14 -6
  62. package/lib-amd/corePlugin/cache/domIndexerImpl.js.map +1 -1
  63. package/lib-amd/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
  64. package/lib-amd/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
  65. package/lib-amd/corePlugin/selection/SelectionPlugin.js +10 -7
  66. package/lib-amd/corePlugin/selection/SelectionPlugin.js.map +1 -1
  67. package/lib-amd/editor/core/DOMHelperImpl.d.ts +4 -0
  68. package/lib-amd/editor/core/DOMHelperImpl.js +61 -2
  69. package/lib-amd/editor/core/DOMHelperImpl.js.map +1 -1
  70. package/lib-amd/editor/core/createEditorCore.js +4 -1
  71. package/lib-amd/editor/core/createEditorCore.js.map +1 -1
  72. package/lib-amd/override/containerSizeFormatParser.js +2 -0
  73. package/lib-amd/override/containerSizeFormatParser.js.map +1 -1
  74. package/lib-amd/utils/areSameRanges.d.ts +5 -0
  75. package/lib-amd/utils/areSameRanges.js +15 -0
  76. package/lib-amd/utils/areSameRanges.js.map +1 -0
  77. package/lib-amd/utils/createAriaLiveElement.js +0 -1
  78. package/lib-amd/utils/createAriaLiveElement.js.map +1 -1
  79. package/lib-mjs/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
  80. package/lib-mjs/command/createModelFromHtml/convertInlineCss.js.map +1 -1
  81. package/lib-mjs/command/cutCopy/getContentForCopy.js +5 -2
  82. package/lib-mjs/command/cutCopy/getContentForCopy.js.map +1 -1
  83. package/lib-mjs/command/paste/generatePasteOptionFromPlugins.js +1 -0
  84. package/lib-mjs/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
  85. package/lib-mjs/command/paste/retrieveHtmlInfo.d.ts +1 -2
  86. package/lib-mjs/command/paste/retrieveHtmlInfo.js.map +1 -1
  87. package/lib-mjs/coreApi/announce/announce.js +1 -0
  88. package/lib-mjs/coreApi/announce/announce.js.map +1 -1
  89. package/lib-mjs/coreApi/getDOMSelection/getDOMSelection.js +12 -9
  90. package/lib-mjs/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
  91. package/lib-mjs/coreApi/setDOMSelection/setDOMSelection.js +7 -8
  92. package/lib-mjs/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
  93. package/lib-mjs/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
  94. package/lib-mjs/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
  95. package/lib-mjs/coreApi/setEditorStyle/setEditorStyle.js +1 -1
  96. package/lib-mjs/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
  97. package/lib-mjs/corePlugin/cache/areSameSelections.d.ts +0 -4
  98. package/lib-mjs/corePlugin/cache/areSameSelections.js +1 -7
  99. package/lib-mjs/corePlugin/cache/areSameSelections.js.map +1 -1
  100. package/lib-mjs/corePlugin/cache/domIndexerImpl.js +14 -6
  101. package/lib-mjs/corePlugin/cache/domIndexerImpl.js.map +1 -1
  102. package/lib-mjs/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
  103. package/lib-mjs/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
  104. package/lib-mjs/corePlugin/selection/SelectionPlugin.js +10 -7
  105. package/lib-mjs/corePlugin/selection/SelectionPlugin.js.map +1 -1
  106. package/lib-mjs/editor/core/DOMHelperImpl.d.ts +4 -0
  107. package/lib-mjs/editor/core/DOMHelperImpl.js +61 -1
  108. package/lib-mjs/editor/core/DOMHelperImpl.js.map +1 -1
  109. package/lib-mjs/editor/core/createEditorCore.js +4 -1
  110. package/lib-mjs/editor/core/createEditorCore.js.map +1 -1
  111. package/lib-mjs/override/containerSizeFormatParser.js +2 -0
  112. package/lib-mjs/override/containerSizeFormatParser.js.map +1 -1
  113. package/lib-mjs/utils/areSameRanges.d.ts +5 -0
  114. package/lib-mjs/utils/areSameRanges.js +9 -0
  115. package/lib-mjs/utils/areSameRanges.js.map +1 -0
  116. package/lib-mjs/utils/createAriaLiveElement.js +0 -1
  117. package/lib-mjs/utils/createAriaLiveElement.js.map +1 -1
  118. package/package.json +3 -3
  119. package/lib/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
  120. package/lib/coreApi/setDOMSelection/addRangeToSelection.js +0 -27
  121. package/lib/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
  122. package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
  123. package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.js +0 -28
  124. package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
  125. package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
  126. package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.js +0 -23
  127. package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
@@ -1,7 +1,20 @@
1
+ import { areSameRanges } from '../../utils/areSameRanges';
1
2
  import { getColor, getRangesByText, isBlockElement, isNodeOfType, parseValueWithUnit, toArray, } from 'roosterjs-content-model-dom';
3
+ function isSelectionWithComposedRanges(sel) {
4
+ return 'getComposedRanges' in sel;
5
+ }
6
+ function isShadowRoot(node) {
7
+ return 'host' in node;
8
+ }
2
9
  var DOMHelperImpl = /** @class */ (function () {
3
10
  function DOMHelperImpl(contentDiv, options) {
11
+ var _a;
4
12
  this.contentDiv = contentDiv;
13
+ var rootNode = contentDiv.getRootNode();
14
+ this.shadowRoot = (options === null || options === void 0 ? void 0 : options.useShadowDom) && isShadowRoot(rootNode) ? rootNode : null;
15
+ this.doc = contentDiv.ownerDocument;
16
+ var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
17
+ this.useComposedRanges = !!(this.shadowRoot && sel && 'getComposedRanges' in sel);
5
18
  }
6
19
  DOMHelperImpl.prototype.queryElements = function (selector) {
7
20
  return toArray(this.contentDiv.querySelectorAll(selector));
@@ -63,7 +76,9 @@ var DOMHelperImpl = /** @class */ (function () {
63
76
  return this.contentDiv;
64
77
  };
65
78
  DOMHelperImpl.prototype.hasFocus = function () {
66
- var activeElement = this.contentDiv.ownerDocument.activeElement;
79
+ var activeElement = this.shadowRoot
80
+ ? this.shadowRoot.activeElement
81
+ : this.doc.activeElement;
67
82
  return !!(activeElement && this.contentDiv.contains(activeElement));
68
83
  };
69
84
  /**
@@ -130,6 +145,51 @@ var DOMHelperImpl = /** @class */ (function () {
130
145
  DOMHelperImpl.prototype.getRangesByText = function (text, matchCase, wholeWord) {
131
146
  return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);
132
147
  };
148
+ DOMHelperImpl.prototype.getSelectionRange = function () {
149
+ var _a;
150
+ var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
151
+ if (!sel) {
152
+ return null;
153
+ }
154
+ if (this.useComposedRanges && this.shadowRoot && isSelectionWithComposedRanges(sel)) {
155
+ var staticRanges = sel.getComposedRanges({
156
+ shadowRoots: [this.shadowRoot],
157
+ });
158
+ if ((staticRanges === null || staticRanges === void 0 ? void 0 : staticRanges.length) > 0) {
159
+ var sr = staticRanges[0];
160
+ var range = this.doc.createRange();
161
+ range.setStart(sr.startContainer, sr.startOffset);
162
+ range.setEnd(sr.endContainer, sr.endOffset);
163
+ return range;
164
+ }
165
+ return null;
166
+ }
167
+ return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
168
+ };
169
+ DOMHelperImpl.prototype.setSelectionRange = function (range, isReverted) {
170
+ var _a;
171
+ if (isReverted === void 0) { isReverted = false; }
172
+ var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
173
+ var currentRange = this.getSelectionRange();
174
+ if (!sel || (currentRange && areSameRanges(range, currentRange))) {
175
+ return;
176
+ }
177
+ var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;
178
+ if (!isReverted) {
179
+ sel.setBaseAndExtent(startContainer, startOffset, endContainer, endOffset);
180
+ }
181
+ else {
182
+ sel.setBaseAndExtent(endContainer, endOffset, startContainer, startOffset);
183
+ }
184
+ };
185
+ DOMHelperImpl.prototype.appendToRoot = function (element) {
186
+ if (this.shadowRoot) {
187
+ this.shadowRoot.appendChild(element);
188
+ }
189
+ else {
190
+ this.doc.body.appendChild(element);
191
+ }
192
+ };
133
193
  return DOMHelperImpl;
134
194
  }());
135
195
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DOMHelperImpl.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/DOMHelperImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,OAAO,GACV,MAAM,6BAA6B,CAAC;AAiBrC;IACI,uBAAoB,UAAuB,EAAE,OAA6B;QAAtD,eAAU,GAAV,UAAU,CAAa;IAAkC,CAAC;IAE9E,qCAAa,GAAb,UAAc,QAAgB;QAC1B,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAkB,CAAC;IAChF,CAAC;IAED,sCAAc,GAAd;QACI,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,sCAAc,GAAd,UAAe,IAAU,EAAE,WAAqB;QAC5C,OAAO,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED,0CAAkB,GAAlB;;QACI,IAAM,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,0CAAE,KAAK,KAAI,CAAC,CAAC;QAC1E,IAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAEhD,OAAO,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YACvD,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,uCAAe,GAAf,UAAgB,IAAY,EAAE,KAAoB;QAC9C,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACzC;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7C;IACL,CAAC;IAED,uCAAe,GAAf,UAAgB,IAAY;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,mCAAW,GAAX,UAAiD,KAAQ;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kDAA0B,GAA1B,UAA2B,SAAe,EAAE,QAAiB;QACzD,IAAM,YAAY,GAAG,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;QAC9B,IAAM,cAAc,GAAG,QAAQ;YAC3B,CAAC,CAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC,QAAQ,CAAwB;YACzD,CAAC,CAAC,YAAY,CAAC;QAEnB,OAAO,cAAc;YACjB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YACnC,cAAc,IAAI,IAAI,CAAC,UAAU;YACjC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,+CAAuB,GAAvB,UAAwB,SAAe;QACnC,IAAI,IAAI,GAAgB,SAAS,CAAC;QAElC,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACtC,IAAI,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC5D,OAAO,IAAI,CAAC;aACf;YAED,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,gCAAQ,GAAR;QACI,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;QAClE,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,qCAAa,GAAb;;QACI,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAM,KAAK,GAAG,MAAA,UAAU,CAAC,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEjF,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,sCAAc,GAAd;;QACI,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAM,KAAK,GAAG,MAAA,UAAU,CAAC,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjF,IAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAC,CAAC;QAC3D,IAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,qCAAa,GAAb;QACI,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAC9E,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,0CAAkB,GAAlB,UACI,YAAsB,EACtB,gBAAmC;;QAEnC,IAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;QAEzD,IAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAExD,OAAO,KAAK;YACR,CAAC,CAAC;gBACI,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,QAAQ,CACf,IAAI,CAAC,UAAU,EACf,KAAK,CAAC,qBAAqB,EAC3B,CAAC,CAAC,YAAY,EACd,gBAAgB,EAChB,KAAK,CAAC,KAAK,CACd;gBACD,eAAe,EAAE,QAAQ,CACrB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,qBAAqB,EAC1B,CAAC,CAAC,YAAY,EACd,gBAAgB,EAChB,KAAK,CAAC,eAAe,CACxB;gBACD,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,QAAQ;gBACnC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,aAAa,EAAE,MAAA,KAAK,CAAC,cAAc,0CAAE,QAAQ,CAAC,cAAc,CAAC;gBAC7D,wBAAwB,EAAE,KAAK,CAAC,aAAa;gBAC7C,SAAS,EAAE,MAAA,KAAK,CAAC,cAAc,0CAAE,QAAQ,CAAC,WAAW,CAAC;aACzD;YACH,CAAC,CAAC,EAAE,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACH,uCAAe,GAAf,UAAgB,IAAY,EAAE,SAAkB,EAAE,SAAkB;QAChE,OAAO,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IACL,oBAAC;AAAD,CAAC,AAnKD,IAmKC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC3B,UAAuB,EACvB,OAAiC;IAAjC,wBAAA,EAAA,YAAiC;IAEjC,OAAO,IAAI,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import {\n getColor,\n getRangesByText,\n isBlockElement,\n isNodeOfType,\n parseValueWithUnit,\n toArray,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelSegmentFormat,\n DarkColorHandler,\n DOMHelper,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface DOMHelperImplOption {\n /**\n * @deprecated This is always treated as true now\n */\n cloneIndependentRoot?: boolean;\n}\n\nclass DOMHelperImpl implements DOMHelper {\n constructor(private contentDiv: HTMLElement, options?: DOMHelperImplOption) {}\n\n queryElements(selector: string): HTMLElement[] {\n return toArray(this.contentDiv.querySelectorAll(selector)) as HTMLElement[];\n }\n\n getTextContent(): string {\n return this.contentDiv.textContent || '';\n }\n\n isNodeInEditor(node: Node, excludeRoot?: boolean): boolean {\n return excludeRoot && node == this.contentDiv ? false : this.contentDiv.contains(node);\n }\n\n calculateZoomScale(): number {\n const originalWidth = this.contentDiv.getBoundingClientRect()?.width || 0;\n const visualWidth = this.contentDiv.offsetWidth;\n\n return visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n }\n\n setDomAttribute(name: string, value: string | null) {\n if (value === null) {\n this.contentDiv.removeAttribute(name);\n } else {\n this.contentDiv.setAttribute(name, value);\n }\n }\n\n getDomAttribute(name: string): string | null {\n return this.contentDiv.getAttribute(name);\n }\n\n getDomStyle<T extends keyof CSSStyleDeclaration>(style: T): CSSStyleDeclaration[T] {\n return this.contentDiv.style[style];\n }\n\n findClosestElementAncestor(startFrom: Node, selector?: string): HTMLElement | null {\n const startElement = isNodeOfType(startFrom, 'ELEMENT_NODE')\n ? startFrom\n : startFrom.parentElement;\n const closestElement = selector\n ? (startElement?.closest(selector) as HTMLElement | null)\n : startElement;\n\n return closestElement &&\n this.isNodeInEditor(closestElement) &&\n closestElement != this.contentDiv\n ? closestElement\n : null;\n }\n\n /**\n * Find the closest block element ancestor from the given node within current editing scope\n * @param startFrom The node to start the search from\n * @returns The closest block element ancestor\n */\n findClosestBlockElement(startFrom: Node): HTMLElement {\n let node: Node | null = startFrom;\n\n while (node && this.isNodeInEditor(node)) {\n if (isNodeOfType(node, 'ELEMENT_NODE') && isBlockElement(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return this.contentDiv;\n }\n\n hasFocus(): boolean {\n const activeElement = this.contentDiv.ownerDocument.activeElement;\n return !!(activeElement && this.contentDiv.contains(activeElement));\n }\n\n /**\n * Check if the root element is in RTL mode\n */\n isRightToLeft(): boolean {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n\n return style?.direction == 'rtl';\n }\n\n /**\n * Get the width of the editable area of the editor content div\n */\n getClientWidth(): number {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n const paddingLeft = parseValueWithUnit(style?.paddingLeft);\n const paddingRight = parseValueWithUnit(style?.paddingRight);\n return this.contentDiv.clientWidth - (paddingLeft + paddingRight);\n }\n\n /**\n * Get a deep cloned root element\n */\n getClonedRoot(): HTMLElement {\n const doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();\n const clone = doc.importNode(this.contentDiv, true /*deep*/);\n\n return clone;\n }\n\n /**\n * Get format of the container element\n * @param isInDarkMode Optional flag to indicate if the environment is in dark mode\n * @param darkColorHandler Optional DarkColorHandler to retrieve dark mode colors\n */\n getContainerFormat(\n isInDarkMode?: boolean,\n darkColorHandler?: DarkColorHandler\n ): ContentModelSegmentFormat {\n const window = this.contentDiv.ownerDocument.defaultView;\n\n const style = window?.getComputedStyle(this.contentDiv);\n\n return style\n ? {\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n textColor: getColor(\n this.contentDiv,\n false /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.color\n ),\n backgroundColor: getColor(\n this.contentDiv,\n true /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.backgroundColor\n ),\n italic: style.fontStyle == 'italic',\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n strikethrough: style.textDecoration?.includes('line-through'),\n superOrSubScriptSequence: style.verticalAlign,\n underline: style.textDecoration?.includes('underline'),\n }\n : {};\n }\n\n /**\n * Get text ranges by searching for a specific text, with options to match case and whole word.\n * This will only search within editable elements.\n * @param text The text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole word\n * @returns An array of Ranges that match the search criteria\n */\n getRangesByText(text: string, matchCase: boolean, wholeWord: boolean): Range[] {\n return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);\n }\n}\n\n/**\n * @internal Create new instance of DOMHelper\n */\nexport function createDOMHelper(\n contentDiv: HTMLElement,\n options: DOMHelperImplOption = {}\n): DOMHelper {\n return new DOMHelperImpl(contentDiv, options);\n}\n"]}
1
+ {"version":3,"file":"DOMHelperImpl.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/DOMHelperImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACH,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,OAAO,GACV,MAAM,6BAA6B,CAAC;AAWrC,SAAS,6BAA6B,CAAC,GAAc;IACjD,OAAO,mBAAmB,IAAI,GAAG,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,IAAU;IAC5B,OAAO,MAAM,IAAI,IAAI,CAAC;AAC1B,CAAC;AAiBD;IAKI,uBAAoB,UAAuB,EAAE,OAA6B;;QAAtD,eAAU,GAAV,UAAU,CAAa;QACvC,IAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,KAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC;QAEpC,IAAM,GAAG,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,mBAAmB,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,qCAAa,GAAb,UAAc,QAAgB;QAC1B,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAkB,CAAC;IAChF,CAAC;IAED,sCAAc,GAAd;QACI,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,sCAAc,GAAd,UAAe,IAAU,EAAE,WAAqB;QAC5C,OAAO,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED,0CAAkB,GAAlB;;QACI,IAAM,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,0CAAE,KAAK,KAAI,CAAC,CAAC;QAC1E,IAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAEhD,OAAO,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YACvD,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,uCAAe,GAAf,UAAgB,IAAY,EAAE,KAAoB;QAC9C,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACzC;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7C;IACL,CAAC;IAED,uCAAe,GAAf,UAAgB,IAAY;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,mCAAW,GAAX,UAAiD,KAAQ;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kDAA0B,GAA1B,UAA2B,SAAe,EAAE,QAAiB;QACzD,IAAM,YAAY,GAAG,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;QAC9B,IAAM,cAAc,GAAG,QAAQ;YAC3B,CAAC,CAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC,QAAQ,CAAwB;YACzD,CAAC,CAAC,YAAY,CAAC;QAEnB,OAAO,cAAc;YACjB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YACnC,cAAc,IAAI,IAAI,CAAC,UAAU;YACjC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,+CAAuB,GAAvB,UAAwB,SAAe;QACnC,IAAI,IAAI,GAAgB,SAAS,CAAC;QAElC,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACtC,IAAI,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC5D,OAAO,IAAI,CAAC;aACf;YAED,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,gCAAQ,GAAR;QACI,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU;YACjC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa;YAC/B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,qCAAa,GAAb;;QACI,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAM,KAAK,GAAG,MAAA,UAAU,CAAC,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEjF,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,sCAAc,GAAd;;QACI,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAM,KAAK,GAAG,MAAA,UAAU,CAAC,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjF,IAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAC,CAAC;QAC3D,IAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,qCAAa,GAAb;QACI,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAC9E,IAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,0CAAkB,GAAlB,UACI,YAAsB,EACtB,gBAAmC;;QAEnC,IAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;QAEzD,IAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAExD,OAAO,KAAK;YACR,CAAC,CAAC;gBACI,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,QAAQ,CACf,IAAI,CAAC,UAAU,EACf,KAAK,CAAC,qBAAqB,EAC3B,CAAC,CAAC,YAAY,EACd,gBAAgB,EAChB,KAAK,CAAC,KAAK,CACd;gBACD,eAAe,EAAE,QAAQ,CACrB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,qBAAqB,EAC1B,CAAC,CAAC,YAAY,EACd,gBAAgB,EAChB,KAAK,CAAC,eAAe,CACxB;gBACD,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,QAAQ;gBACnC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,aAAa,EAAE,MAAA,KAAK,CAAC,cAAc,0CAAE,QAAQ,CAAC,cAAc,CAAC;gBAC7D,wBAAwB,EAAE,KAAK,CAAC,aAAa;gBAC7C,SAAS,EAAE,MAAA,KAAK,CAAC,cAAc,0CAAE,QAAQ,CAAC,WAAW,CAAC;aACzD;YACH,CAAC,CAAC,EAAE,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACH,uCAAe,GAAf,UAAgB,IAAY,EAAE,SAAkB,EAAE,SAAkB;QAChE,OAAO,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED,yCAAiB,GAAjB;;QACI,IAAM,GAAG,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,IAAI,6BAA6B,CAAC,GAAG,CAAC,EAAE;YACjF,IAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,CAAC;gBACvC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;aACjC,CAAC,CAAC;YAEH,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,IAAG,CAAC,EAAE;gBAC1B,IAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;gBAClD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC5C,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,yCAAiB,GAAjB,UAAkB,KAAY,EAAE,UAA2B;;QAA3B,2BAAA,EAAA,kBAA2B;QACvD,IAAM,GAAG,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;QACjD,IAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE;YAC9D,OAAO;SACV;QAEO,IAAA,cAAc,GAA2C,KAAK,eAAhD,EAAE,WAAW,GAA8B,KAAK,YAAnC,EAAE,YAAY,GAAgB,KAAK,aAArB,EAAE,SAAS,GAAK,KAAK,UAAV,CAAW;QACvE,IAAI,CAAC,UAAU,EAAE;YACb,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;SAC9E;aAAM;YACH,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;SAC9E;IACL,CAAC;IAED,oCAAY,GAAZ,UAAa,OAAoB;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACxC;aAAM;YACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACtC;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AA/ND,IA+NC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC3B,UAAuB,EACvB,OAAiC;IAAjC,wBAAA,EAAA,YAAiC;IAEjC,OAAO,IAAI,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { areSameRanges } from '../../utils/areSameRanges';\nimport {\n getColor,\n getRangesByText,\n isBlockElement,\n isNodeOfType,\n parseValueWithUnit,\n toArray,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelSegmentFormat,\n DarkColorHandler,\n DOMHelper,\n} from 'roosterjs-content-model-types';\n\ninterface SelectionWithComposedRanges extends Selection {\n getComposedRanges(options: { shadowRoots: ShadowRoot[] }): StaticRange[];\n}\n\nfunction isSelectionWithComposedRanges(sel: Selection): sel is SelectionWithComposedRanges {\n return 'getComposedRanges' in sel;\n}\n\nfunction isShadowRoot(node: Node): node is ShadowRoot {\n return 'host' in node;\n}\n\n/**\n * @internal\n */\nexport interface DOMHelperImplOption {\n /**\n * @deprecated This is always treated as true now\n */\n cloneIndependentRoot?: boolean;\n\n /**\n * When true, enable shadow root detection so the editor works inside a Shadow DOM.\n */\n useShadowDom?: boolean;\n}\n\nclass DOMHelperImpl implements DOMHelper {\n private shadowRoot: ShadowRoot | null;\n private doc: Document;\n private useComposedRanges: boolean;\n\n constructor(private contentDiv: HTMLElement, options?: DOMHelperImplOption) {\n const rootNode = contentDiv.getRootNode();\n this.shadowRoot = options?.useShadowDom && isShadowRoot(rootNode) ? rootNode : null;\n this.doc = contentDiv.ownerDocument;\n\n const sel = this.doc.defaultView?.getSelection();\n this.useComposedRanges = !!(this.shadowRoot && sel && 'getComposedRanges' in sel);\n }\n\n queryElements(selector: string): HTMLElement[] {\n return toArray(this.contentDiv.querySelectorAll(selector)) as HTMLElement[];\n }\n\n getTextContent(): string {\n return this.contentDiv.textContent || '';\n }\n\n isNodeInEditor(node: Node, excludeRoot?: boolean): boolean {\n return excludeRoot && node == this.contentDiv ? false : this.contentDiv.contains(node);\n }\n\n calculateZoomScale(): number {\n const originalWidth = this.contentDiv.getBoundingClientRect()?.width || 0;\n const visualWidth = this.contentDiv.offsetWidth;\n\n return visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n }\n\n setDomAttribute(name: string, value: string | null) {\n if (value === null) {\n this.contentDiv.removeAttribute(name);\n } else {\n this.contentDiv.setAttribute(name, value);\n }\n }\n\n getDomAttribute(name: string): string | null {\n return this.contentDiv.getAttribute(name);\n }\n\n getDomStyle<T extends keyof CSSStyleDeclaration>(style: T): CSSStyleDeclaration[T] {\n return this.contentDiv.style[style];\n }\n\n findClosestElementAncestor(startFrom: Node, selector?: string): HTMLElement | null {\n const startElement = isNodeOfType(startFrom, 'ELEMENT_NODE')\n ? startFrom\n : startFrom.parentElement;\n const closestElement = selector\n ? (startElement?.closest(selector) as HTMLElement | null)\n : startElement;\n\n return closestElement &&\n this.isNodeInEditor(closestElement) &&\n closestElement != this.contentDiv\n ? closestElement\n : null;\n }\n\n /**\n * Find the closest block element ancestor from the given node within current editing scope\n * @param startFrom The node to start the search from\n * @returns The closest block element ancestor\n */\n findClosestBlockElement(startFrom: Node): HTMLElement {\n let node: Node | null = startFrom;\n\n while (node && this.isNodeInEditor(node)) {\n if (isNodeOfType(node, 'ELEMENT_NODE') && isBlockElement(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return this.contentDiv;\n }\n\n hasFocus(): boolean {\n const activeElement = this.shadowRoot\n ? this.shadowRoot.activeElement\n : this.doc.activeElement;\n return !!(activeElement && this.contentDiv.contains(activeElement));\n }\n\n /**\n * Check if the root element is in RTL mode\n */\n isRightToLeft(): boolean {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n\n return style?.direction == 'rtl';\n }\n\n /**\n * Get the width of the editable area of the editor content div\n */\n getClientWidth(): number {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n const paddingLeft = parseValueWithUnit(style?.paddingLeft);\n const paddingRight = parseValueWithUnit(style?.paddingRight);\n return this.contentDiv.clientWidth - (paddingLeft + paddingRight);\n }\n\n /**\n * Get a deep cloned root element\n */\n getClonedRoot(): HTMLElement {\n const doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();\n const clone = doc.importNode(this.contentDiv, true /*deep*/);\n\n return clone;\n }\n\n /**\n * Get format of the container element\n * @param isInDarkMode Optional flag to indicate if the environment is in dark mode\n * @param darkColorHandler Optional DarkColorHandler to retrieve dark mode colors\n */\n getContainerFormat(\n isInDarkMode?: boolean,\n darkColorHandler?: DarkColorHandler\n ): ContentModelSegmentFormat {\n const window = this.contentDiv.ownerDocument.defaultView;\n\n const style = window?.getComputedStyle(this.contentDiv);\n\n return style\n ? {\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n textColor: getColor(\n this.contentDiv,\n false /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.color\n ),\n backgroundColor: getColor(\n this.contentDiv,\n true /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.backgroundColor\n ),\n italic: style.fontStyle == 'italic',\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n strikethrough: style.textDecoration?.includes('line-through'),\n superOrSubScriptSequence: style.verticalAlign,\n underline: style.textDecoration?.includes('underline'),\n }\n : {};\n }\n\n /**\n * Get text ranges by searching for a specific text, with options to match case and whole word.\n * This will only search within editable elements.\n * @param text The text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole word\n * @returns An array of Ranges that match the search criteria\n */\n getRangesByText(text: string, matchCase: boolean, wholeWord: boolean): Range[] {\n return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);\n }\n\n getSelectionRange(): Range | null {\n const sel = this.doc.defaultView?.getSelection();\n if (!sel) {\n return null;\n }\n\n if (this.useComposedRanges && this.shadowRoot && isSelectionWithComposedRanges(sel)) {\n const staticRanges = sel.getComposedRanges({\n shadowRoots: [this.shadowRoot],\n });\n\n if (staticRanges?.length > 0) {\n const sr = staticRanges[0];\n const range = this.doc.createRange();\n range.setStart(sr.startContainer, sr.startOffset);\n range.setEnd(sr.endContainer, sr.endOffset);\n return range;\n }\n return null;\n }\n\n return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n\n setSelectionRange(range: Range, isReverted: boolean = false): void {\n const sel = this.doc.defaultView?.getSelection();\n const currentRange = this.getSelectionRange();\n if (!sel || (currentRange && areSameRanges(range, currentRange))) {\n return;\n }\n\n const { startContainer, startOffset, endContainer, endOffset } = range;\n if (!isReverted) {\n sel.setBaseAndExtent(startContainer, startOffset, endContainer, endOffset);\n } else {\n sel.setBaseAndExtent(endContainer, endOffset, startContainer, startOffset);\n }\n }\n\n appendToRoot(element: HTMLElement): void {\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(element);\n } else {\n this.doc.body.appendChild(element);\n }\n }\n}\n\n/**\n * @internal Create new instance of DOMHelper\n */\nexport function createDOMHelper(\n contentDiv: HTMLElement,\n options: DOMHelperImplOption = {}\n): DOMHelper {\n return new DOMHelperImpl(contentDiv, options);\n}\n"]}
@@ -27,7 +27,10 @@ export function createEditorCore(contentDiv, options) {
27
27
  corePlugins.lifecycle,
28
28
  ], false), environment: createEditorEnvironment(contentDiv, options), darkColorHandler: createDarkColorHandler(contentDiv, (_b = options.getDarkColor) !== null && _b !== void 0 ? _b : getDarkColorFallback, options.knownColors, options.generateColorKey), trustedHTMLHandler: options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)
29
29
  ? options.trustedHTMLHandler
30
- : createTrustedHTMLHandler(domCreator), domCreator: domCreator, domHelper: createDOMHelper(contentDiv) }, getPluginState(corePlugins)), { disposeErrorHandler: options.disposeErrorHandler, onFixUpModel: options.onFixUpModel, experimentalFeatures: options.experimentalFeatures ? __spreadArray([], __read(options.experimentalFeatures), false) : [] });
30
+ : createTrustedHTMLHandler(domCreator), domCreator: domCreator, domHelper: createDOMHelper(contentDiv, {
31
+ useShadowDom: !!options.experimentalFeatures &&
32
+ options.experimentalFeatures.indexOf('ShadowDom') >= 0,
33
+ }) }, getPluginState(corePlugins)), { disposeErrorHandler: options.disposeErrorHandler, onFixUpModel: options.onFixUpModel, experimentalFeatures: options.experimentalFeatures ? __spreadArray([], __read(options.experimentalFeatures), false) : [] });
31
34
  }
32
35
  function createEditorEnvironment(contentDiv, options) {
33
36
  var _a, _b, _c;
@@ -1 +1 @@
1
- {"version":3,"file":"createEditorCore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/createEditorCore.ts"],"names":[],"mappings":"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","sourcesContent":["import { coreApiMap } from '../../coreApi/coreApiMap';\nimport { createDarkColorHandler } from './DarkColorHandlerImpl';\nimport { createDOMCreator, createTrustedHTMLHandler, isDOMCreator } from '../../utils/domCreator';\nimport { createDOMHelper } from './DOMHelperImpl';\nimport { createDomToModelSettings, createModelToDomSettings } from './createEditorDefaultSettings';\nimport { createEditorCorePlugins } from '../../corePlugin/createEditorCorePlugins';\nimport type {\n EditorEnvironment,\n PluginState,\n EditorCore,\n EditorCorePlugins,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal Create core object for editor\n * @param contentDiv Editor content DIV\n * @param options Editor options\n */\nexport function createEditorCore(contentDiv: HTMLDivElement, options: EditorOptions): EditorCore {\n const corePlugins = createEditorCorePlugins(options, contentDiv);\n const domCreator = createDOMCreator(options.trustedHTMLHandler);\n\n return {\n physicalRoot: contentDiv,\n logicalRoot: contentDiv,\n api: { ...coreApiMap, ...options.coreApiOverride },\n originalApi: { ...coreApiMap },\n plugins: [\n corePlugins.cache,\n corePlugins.format,\n corePlugins.copyPaste,\n corePlugins.domEvent,\n corePlugins.selection,\n corePlugins.entity,\n ...(options.plugins ?? []).filter(x => !!x),\n corePlugins.undo,\n corePlugins.contextMenu,\n corePlugins.lifecycle,\n ],\n environment: createEditorEnvironment(contentDiv, options),\n darkColorHandler: createDarkColorHandler(\n contentDiv,\n options.getDarkColor ?? getDarkColorFallback,\n options.knownColors,\n options.generateColorKey\n ),\n trustedHTMLHandler:\n options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)\n ? options.trustedHTMLHandler\n : createTrustedHTMLHandler(domCreator),\n domCreator: domCreator,\n domHelper: createDOMHelper(contentDiv),\n ...getPluginState(corePlugins),\n disposeErrorHandler: options.disposeErrorHandler,\n onFixUpModel: options.onFixUpModel,\n experimentalFeatures: options.experimentalFeatures ? [...options.experimentalFeatures] : [],\n };\n}\n\nfunction createEditorEnvironment(\n contentDiv: HTMLElement,\n options: EditorOptions\n): EditorEnvironment {\n const navigator = contentDiv.ownerDocument.defaultView?.navigator;\n const userAgent = navigator?.userAgent ?? '';\n const appVersion = navigator?.appVersion ?? '';\n\n return {\n document: contentDiv.ownerDocument,\n domToModelSettings: createDomToModelSettings(options),\n modelToDomSettings: createModelToDomSettings(options),\n isMac: appVersion.indexOf('Mac') != -1,\n isAndroid: /android/i.test(userAgent),\n isIOS: /iPad|iPhone/.test(userAgent),\n isSafari:\n userAgent.indexOf('AppleWebKit') >= 0 &&\n userAgent.indexOf('Chrome') < 0 &&\n userAgent.indexOf('Android') < 0,\n isMobileOrTablet: getIsMobileOrTablet(userAgent),\n };\n}\n\nfunction getIsMobileOrTablet(userAgent: string) {\n // Reference: http://detectmobilebrowsers.com/\n // The default regex on the website doesn't consider tablet.\n // To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n userAgent.substring(0, 4)\n )\n ) {\n return true;\n }\n return false;\n}\n\nfunction getPluginState(corePlugins: EditorCorePlugins): PluginState {\n return {\n domEvent: corePlugins.domEvent.getState(),\n copyPaste: corePlugins.copyPaste.getState(),\n cache: corePlugins.cache.getState(),\n format: corePlugins.format.getState(),\n lifecycle: corePlugins.lifecycle.getState(),\n entity: corePlugins.entity.getState(),\n selection: corePlugins.selection.getState(),\n contextMenu: corePlugins.contextMenu.getState(),\n undo: corePlugins.undo.getState(),\n };\n}\n\n/**\n * @internal Export for test only\n * A fallback function, always return original color\n */\nexport function getDarkColorFallback(color: string) {\n return color;\n}\n"]}
1
+ {"version":3,"file":"createEditorCore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/createEditorCore.ts"],"names":[],"mappings":"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","sourcesContent":["import { coreApiMap } from '../../coreApi/coreApiMap';\nimport { createDarkColorHandler } from './DarkColorHandlerImpl';\nimport { createDOMCreator, createTrustedHTMLHandler, isDOMCreator } from '../../utils/domCreator';\nimport { createDOMHelper } from './DOMHelperImpl';\nimport { createDomToModelSettings, createModelToDomSettings } from './createEditorDefaultSettings';\nimport { createEditorCorePlugins } from '../../corePlugin/createEditorCorePlugins';\nimport type {\n EditorEnvironment,\n PluginState,\n EditorCore,\n EditorCorePlugins,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal Create core object for editor\n * @param contentDiv Editor content DIV\n * @param options Editor options\n */\nexport function createEditorCore(contentDiv: HTMLDivElement, options: EditorOptions): EditorCore {\n const corePlugins = createEditorCorePlugins(options, contentDiv);\n const domCreator = createDOMCreator(options.trustedHTMLHandler);\n\n return {\n physicalRoot: contentDiv,\n logicalRoot: contentDiv,\n api: { ...coreApiMap, ...options.coreApiOverride },\n originalApi: { ...coreApiMap },\n plugins: [\n corePlugins.cache,\n corePlugins.format,\n corePlugins.copyPaste,\n corePlugins.domEvent,\n corePlugins.selection,\n corePlugins.entity,\n ...(options.plugins ?? []).filter(x => !!x),\n corePlugins.undo,\n corePlugins.contextMenu,\n corePlugins.lifecycle,\n ],\n environment: createEditorEnvironment(contentDiv, options),\n darkColorHandler: createDarkColorHandler(\n contentDiv,\n options.getDarkColor ?? getDarkColorFallback,\n options.knownColors,\n options.generateColorKey\n ),\n trustedHTMLHandler:\n options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)\n ? options.trustedHTMLHandler\n : createTrustedHTMLHandler(domCreator),\n domCreator: domCreator,\n domHelper: createDOMHelper(contentDiv, {\n useShadowDom:\n !!options.experimentalFeatures &&\n options.experimentalFeatures.indexOf('ShadowDom') >= 0,\n }),\n ...getPluginState(corePlugins),\n disposeErrorHandler: options.disposeErrorHandler,\n onFixUpModel: options.onFixUpModel,\n experimentalFeatures: options.experimentalFeatures ? [...options.experimentalFeatures] : [],\n };\n}\n\nfunction createEditorEnvironment(\n contentDiv: HTMLElement,\n options: EditorOptions\n): EditorEnvironment {\n const navigator = contentDiv.ownerDocument.defaultView?.navigator;\n const userAgent = navigator?.userAgent ?? '';\n const appVersion = navigator?.appVersion ?? '';\n\n return {\n document: contentDiv.ownerDocument,\n domToModelSettings: createDomToModelSettings(options),\n modelToDomSettings: createModelToDomSettings(options),\n isMac: appVersion.indexOf('Mac') != -1,\n isAndroid: /android/i.test(userAgent),\n isIOS: /iPad|iPhone/.test(userAgent),\n isSafari:\n userAgent.indexOf('AppleWebKit') >= 0 &&\n userAgent.indexOf('Chrome') < 0 &&\n userAgent.indexOf('Android') < 0,\n isMobileOrTablet: getIsMobileOrTablet(userAgent),\n };\n}\n\nfunction getIsMobileOrTablet(userAgent: string) {\n // Reference: http://detectmobilebrowsers.com/\n // The default regex on the website doesn't consider tablet.\n // To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n userAgent.substring(0, 4)\n )\n ) {\n return true;\n }\n return false;\n}\n\nfunction getPluginState(corePlugins: EditorCorePlugins): PluginState {\n return {\n domEvent: corePlugins.domEvent.getState(),\n copyPaste: corePlugins.copyPaste.getState(),\n cache: corePlugins.cache.getState(),\n format: corePlugins.format.getState(),\n lifecycle: corePlugins.lifecycle.getState(),\n entity: corePlugins.entity.getState(),\n selection: corePlugins.selection.getState(),\n contextMenu: corePlugins.contextMenu.getState(),\n undo: corePlugins.undo.getState(),\n };\n}\n\n/**\n * @internal Export for test only\n * A fallback function, always return original color\n */\nexport function getDarkColorFallback(color: string) {\n return color;\n}\n"]}
@@ -6,6 +6,8 @@ export var containerSizeFormatParser = function (format, element) {
6
6
  if (element.tagName == 'DIV' || element.tagName == 'P') {
7
7
  delete format.width;
8
8
  delete format.height;
9
+ delete format.maxHeight;
10
+ delete format.maxWidth;
9
11
  }
10
12
  };
11
13
  //# sourceMappingURL=containerSizeFormatParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"containerSizeFormatParser.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/override/containerSizeFormatParser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAA6B,UAAC,MAAM,EAAE,OAAO;IAC/E,mHAAmH;IACnH,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE;QACpD,OAAO,MAAM,CAAC,KAAK,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC;KACxB;AACL,CAAC,CAAC","sourcesContent":["import type { FormatParser, SizeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal Do not paste width for Format Containers since it may be generated by browser according to temp div width\n */\nexport const containerSizeFormatParser: FormatParser<SizeFormat> = (format, element) => {\n // For pasted content, there may be existing width generated by browser from the temp DIV. So we need to remove it.\n if (element.tagName == 'DIV' || element.tagName == 'P') {\n delete format.width;\n delete format.height;\n }\n};\n"]}
1
+ {"version":3,"file":"containerSizeFormatParser.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/override/containerSizeFormatParser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAA6B,UAAC,MAAM,EAAE,OAAO;IAC/E,mHAAmH;IACnH,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE;QACpD,OAAO,MAAM,CAAC,KAAK,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,MAAM,CAAC,SAAS,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC;KAC1B;AACL,CAAC,CAAC","sourcesContent":["import type { FormatParser, SizeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal Do not paste width for Format Containers since it may be generated by browser according to temp div width\n */\nexport const containerSizeFormatParser: FormatParser<SizeFormat> = (format, element) => {\n // For pasted content, there may be existing width generated by browser from the temp DIV. So we need to remove it.\n if (element.tagName == 'DIV' || element.tagName == 'P') {\n delete format.width;\n delete format.height;\n delete format.maxHeight;\n delete format.maxWidth;\n }\n};\n"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @internal
3
+ * Check if two ranges have the same start and end positions.
4
+ */
5
+ export declare function areSameRanges(r1: Range, r2: Range): boolean;
@@ -0,0 +1,9 @@
1
+ var RangeKeys = ['startContainer', 'endContainer', 'startOffset', 'endOffset'];
2
+ /**
3
+ * @internal
4
+ * Check if two ranges have the same start and end positions.
5
+ */
6
+ export function areSameRanges(r1, r2) {
7
+ return RangeKeys.every(function (k) { return r1[k] == r2[k]; });
8
+ }
9
+ //# sourceMappingURL=areSameRanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"areSameRanges.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/areSameRanges.ts"],"names":[],"mappings":"AAAA,IAAM,SAAS,GAAoB,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAS,EAAE,EAAS;IAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC,CAAC;AAChD,CAAC","sourcesContent":["const RangeKeys: (keyof Range)[] = ['startContainer', 'endContainer', 'startOffset', 'endOffset'];\n\n/**\n * @internal\n * Check if two ranges have the same start and end positions.\n */\nexport function areSameRanges(r1: Range, r2: Range): boolean {\n return RangeKeys.every(k => r1[k] == r2[k]);\n}\n"]}
@@ -11,7 +11,6 @@ export function createAriaLiveElement(document) {
11
11
  div.style.whiteSpace = 'nowrap';
12
12
  div.style.width = '1px';
13
13
  div.ariaLive = 'assertive';
14
- document.body.appendChild(div);
15
14
  return div;
16
15
  }
17
16
  //# sourceMappingURL=createAriaLiveElement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAriaLiveElement.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/createAriaLiveElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC5C,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;IAE3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["/**\n * @internal\n */\nexport function createAriaLiveElement(document: Document): HTMLDivElement {\n const div = document.createElement('div');\n\n div.style.clip = 'rect(0px, 0px, 0px, 0px)';\n div.style.clipPath = 'inset(100%)';\n div.style.height = '1px';\n div.style.overflow = 'hidden';\n div.style.position = 'absolute';\n div.style.whiteSpace = 'nowrap';\n div.style.width = '1px';\n div.ariaLive = 'assertive';\n\n document.body.appendChild(div);\n\n return div;\n}\n"]}
1
+ {"version":3,"file":"createAriaLiveElement.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/createAriaLiveElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC5C,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;IAE3B,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["/**\n * @internal\n */\nexport function createAriaLiveElement(document: Document): HTMLDivElement {\n const div = document.createElement('div');\n\n div.style.clip = 'rect(0px, 0px, 0px, 0px)';\n div.style.clipPath = 'inset(100%)';\n div.style.height = '1px';\n div.style.overflow = 'hidden';\n div.style.position = 'absolute';\n div.style.whiteSpace = 'nowrap';\n div.style.width = '1px';\n div.ariaLive = 'assertive';\n\n return div;\n}\n"]}
package/package.json CHANGED
@@ -3,10 +3,10 @@
3
3
  "description": "Core editor for roosterjs",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.1",
6
- "roosterjs-content-model-dom": "^9.51.0",
7
- "roosterjs-content-model-types": "^9.51.0"
6
+ "roosterjs-content-model-dom": "^9.53.0",
7
+ "roosterjs-content-model-types": "^9.53.0"
8
8
  },
9
- "version": "9.51.0",
9
+ "version": "9.53.0",
10
10
  "main": "./lib/index.js",
11
11
  "typings": "./lib/index.d.ts",
12
12
  "module": "./lib-mjs/index.js",
@@ -1,4 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export declare function addRangeToSelection(doc: Document, range: Range, isReverted?: boolean): void;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addRangeToSelection = void 0;
4
- var areSameSelections_1 = require("../../corePlugin/cache/areSameSelections");
5
- /**
6
- * @internal
7
- */
8
- function addRangeToSelection(doc, range, isReverted) {
9
- var _a;
10
- if (isReverted === void 0) { isReverted = false; }
11
- var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
12
- if (selection) {
13
- var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
14
- if (currentRange && (0, areSameSelections_1.areSameRanges)(currentRange, range)) {
15
- return;
16
- }
17
- selection.removeAllRanges();
18
- if (!isReverted) {
19
- selection.addRange(range);
20
- }
21
- else {
22
- selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
23
- }
24
- }
25
- }
26
- exports.addRangeToSelection = addRangeToSelection;
27
- //# sourceMappingURL=addRangeToSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":";;;AAAA,8EAAyE;AAEzE;;GAEG;AACH,SAAgB,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;IAA3B,2BAAA,EAAA,kBAA2B;IACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAElD,IAAI,SAAS,EAAE;QACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,YAAY,IAAI,IAAA,iCAAa,EAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACpD,OAAO;SACV;QACD,SAAS,CAAC,eAAe,EAAE,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;YACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;SACL;KACJ;AACL,CAAC;AArBD,kDAqBC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}
@@ -1,4 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export declare function addRangeToSelection(doc: Document, range: Range, isReverted?: boolean): void;
@@ -1,28 +0,0 @@
1
- define(["require", "exports", "../../corePlugin/cache/areSameSelections"], function (require, exports, areSameSelections_1) {
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.addRangeToSelection = void 0;
5
- /**
6
- * @internal
7
- */
8
- function addRangeToSelection(doc, range, isReverted) {
9
- var _a;
10
- if (isReverted === void 0) { isReverted = false; }
11
- var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
12
- if (selection) {
13
- var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
14
- if (currentRange && (0, areSameSelections_1.areSameRanges)(currentRange, range)) {
15
- return;
16
- }
17
- selection.removeAllRanges();
18
- if (!isReverted) {
19
- selection.addRange(range);
20
- }
21
- else {
22
- selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
23
- }
24
- }
25
- }
26
- exports.addRangeToSelection = addRangeToSelection;
27
- });
28
- //# sourceMappingURL=addRangeToSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":";;;;IAEA;;OAEG;IACH,SAAgB,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;QAA3B,2BAAA,EAAA,kBAA2B;QACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;QAElD,IAAI,SAAS,EAAE;YACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,YAAY,IAAI,IAAA,iCAAa,EAAC,YAAY,EAAE,KAAK,CAAC,EAAE;gBACpD,OAAO;aACV;YACD,SAAS,CAAC,eAAe,EAAE,CAAC;YAE5B,IAAI,CAAC,UAAU,EAAE;gBACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC7B;iBAAM;gBACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;aACL;SACJ;IACL,CAAC;IArBD,kDAqBC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}
@@ -1,4 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export declare function addRangeToSelection(doc: Document, range: Range, isReverted?: boolean): void;
@@ -1,23 +0,0 @@
1
- import { areSameRanges } from '../../corePlugin/cache/areSameSelections';
2
- /**
3
- * @internal
4
- */
5
- export function addRangeToSelection(doc, range, isReverted) {
6
- var _a;
7
- if (isReverted === void 0) { isReverted = false; }
8
- var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
9
- if (selection) {
10
- var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
11
- if (currentRange && areSameRanges(currentRange, range)) {
12
- return;
13
- }
14
- selection.removeAllRanges();
15
- if (!isReverted) {
16
- selection.addRange(range);
17
- }
18
- else {
19
- selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
20
- }
21
- }
22
- }
23
- //# sourceMappingURL=addRangeToSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;IAA3B,2BAAA,EAAA,kBAA2B;IACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAElD,IAAI,SAAS,EAAE;QACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,YAAY,IAAI,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACpD,OAAO;SACV;QACD,SAAS,CAAC,eAAe,EAAE,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;YACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;SACL;KACJ;AACL,CAAC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}