@lexical/selection 0.9.2 → 0.11.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.
- package/LexicalSelection.dev.js +15 -7
- package/LexicalSelection.prod.js +2 -1
- package/package.json +2 -2
package/LexicalSelection.dev.js
CHANGED
|
@@ -127,20 +127,28 @@ function createRectsFromDOMRange(editor, range) {
|
|
|
127
127
|
const computedStyle = getComputedStyle(rootElement);
|
|
128
128
|
const rootPadding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);
|
|
129
129
|
const selectionRects = Array.from(range.getClientRects());
|
|
130
|
-
let selectionRectsLength = selectionRects.length;
|
|
130
|
+
let selectionRectsLength = selectionRects.length; //sort rects from top left to bottom right.
|
|
131
|
+
|
|
132
|
+
selectionRects.sort((a, b) => {
|
|
133
|
+
const top = a.top - b.top; // Some rects match position closely, but not perfectly,
|
|
134
|
+
// so we give a 3px tolerance.
|
|
135
|
+
|
|
136
|
+
if (Math.abs(top) <= 3) {
|
|
137
|
+
return a.left - b.left;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return top;
|
|
141
|
+
});
|
|
131
142
|
let prevRect;
|
|
132
143
|
|
|
133
144
|
for (let i = 0; i < selectionRectsLength; i++) {
|
|
134
|
-
const selectionRect = selectionRects[i]; // Exclude
|
|
135
|
-
// the same rect twice for some elements. A more sophisticated thing to do here is to
|
|
136
|
-
// merge all the rects together into a set of rects that don't overlap, so we don't
|
|
137
|
-
// generate backgrounds that are too dark.
|
|
145
|
+
const selectionRect = selectionRects[i]; // Exclude rects that overlap preceding Rects in the sorted list.
|
|
138
146
|
|
|
139
|
-
const
|
|
147
|
+
const isOverlappingRect = prevRect && prevRect.top <= selectionRect.top && prevRect.top + prevRect.height > selectionRect.top && prevRect.left + prevRect.width > selectionRect.left; // Exclude selections that span the entire element
|
|
140
148
|
|
|
141
149
|
const selectionSpansElement = selectionRect.width + rootPadding === rootRect.width;
|
|
142
150
|
|
|
143
|
-
if (
|
|
151
|
+
if (isOverlappingRect || selectionSpansElement) {
|
|
144
152
|
selectionRects.splice(i--, 1);
|
|
145
153
|
selectionRectsLength--;
|
|
146
154
|
continue;
|
package/LexicalSelection.prod.js
CHANGED
|
@@ -22,7 +22,8 @@ exports.$sliceSelectedTextNodeContent=function(a,b){if(b.isSelected()&&!b.isSegm
|
|
|
22
22
|
exports.$wrapNodes=function(a,b,c=null){var e=a.getNodes();let d=e.length;var f=a.anchor;if(0===d||1===d&&"element"===f.type&&0===f.getNode().getChildrenSize()){a="text"===f.type?f.getNode().getParentOrThrow():f.getNode();e=a.getChildren();let g=b();g.setFormat(a.getFormatType());g.setIndent(a.getIndent());e.forEach(l=>g.append(l));c&&(g=c.append(g));a.replace(g)}else{f=null;var h=[];for(let g=0;g<d;g++){let l=e[g];k.$isRootOrShadowRoot(l)?(D(a,h,h.length,b,c),h=[],f=l):null===f||null!==f&&k.$hasAncestor(l,
|
|
23
23
|
f)?h.push(l):(D(a,h,h.length,b,c),h=[l])}D(a,h,h.length,b,c)}};
|
|
24
24
|
exports.createDOMRange=function(a,b,c,e,d){let f=b.getKey(),h=e.getKey(),g=document.createRange(),l=a.getElementByKey(f);a=a.getElementByKey(h);k.$isTextNode(b)&&(l=v(l));k.$isTextNode(e)&&(a=v(a));if(void 0===b||void 0===e||null===l||null===a)return null;"BR"===l.nodeName&&([l,c]=w(l));"BR"===a.nodeName&&([a,d]=w(a));b=l.firstChild;l===a&&null!=b&&"BR"===b.nodeName&&0===c&&0===d&&(d=1);try{g.setStart(l,c),g.setEnd(a,d)}catch(m){return null}!g.collapsed||c===d&&f===h||(g.setStart(a,d),g.setEnd(l,
|
|
25
|
-
c));return g};exports.createRectsFromDOMRange=function(a,b){var c=a.getRootElement();if(null===c)return[];a=c.getBoundingClientRect();c=getComputedStyle(c);c=parseFloat(c.paddingLeft)+parseFloat(c.paddingRight);b=Array.from(b.getClientRects());let e=b.length,d;for(let f=0;f<e;f++){let h=b[f],g=h.width+c===a.width;d&&d.top
|
|
25
|
+
c));return g};exports.createRectsFromDOMRange=function(a,b){var c=a.getRootElement();if(null===c)return[];a=c.getBoundingClientRect();c=getComputedStyle(c);c=parseFloat(c.paddingLeft)+parseFloat(c.paddingRight);b=Array.from(b.getClientRects());let e=b.length;b.sort((f,h)=>{let g=f.top-h.top;return 3>=Math.abs(g)?f.left-h.left:g});let d;for(let f=0;f<e;f++){let h=b[f],g=h.width+c===a.width;d&&d.top<=h.top&&d.top+d.height>h.top&&d.left+d.width>h.left||g?(b.splice(f--,1),e--):d=h}return b};
|
|
26
|
+
exports.getStyleObjectFromCSS=z;
|
|
26
27
|
exports.trimTextContentFromAnchor=function(a,b,c){let e=b.getNode();if(k.$isElementNode(e)){var d=e.getDescendantByIndex(b.offset);null!==d&&(e=d)}for(;0<c&&null!==e;){var f=e.getPreviousSibling(),h=0;if(null===f){d=e.getParentOrThrow();for(var g=d.getPreviousSibling();null===g;){d=d.getParent();if(null===d){f=null;break}g=d.getPreviousSibling()}null!==d&&(h=d.isInline()?0:2,f=k.$isElementNode(g)?g.getLastDescendant():g)}g=e.getTextContent();""===g&&k.$isElementNode(e)&&!e.isInline()&&(g="\n\n");
|
|
27
28
|
d=e.getTextContentSize();if(!k.$isTextNode(e)||c>=d)g=e.getParent(),e.remove(),null==g||0!==g.getChildrenSize()||k.$isRootNode(g)||g.remove(),c-=d+h,e=f;else{let l=e.getKey();h=a.getEditorState().read(()=>{const q=k.$getNodeByKey(l);return k.$isTextNode(q)&&q.isSimpleText()?q.getTextContent():null});f=d-c;let m=g.slice(0,f);null!==h&&h!==g?(c=k.$getPreviousSelection(),d=e,e.isSimpleText()?e.setTextContent(h):(d=k.$createTextNode(h),e.replace(d)),k.$isRangeSelection(c)&&c.isCollapsed()&&(c=c.anchor.offset,
|
|
28
29
|
d.select(c,c))):e.isSimpleText()?(h=b.key===l,g=b.offset,g<c&&(g=d),c=h?g-c:0,d=h?g:f,h&&0===c?([c]=e.splitText(c,d),c.remove()):([,c]=e.splitText(c,d),c.remove())):(c=k.$createTextNode(m),e.replace(c));c=0}}}
|
package/package.json
CHANGED