@lexical/selection 0.7.9 → 0.8.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 +26 -0
- package/LexicalSelection.prod.js +20 -20
- package/lexical-node.d.ts +1 -1
- package/package.json +2 -2
package/LexicalSelection.dev.js
CHANGED
|
@@ -346,6 +346,15 @@ function $patchStyleText(selection, patch) {
|
|
|
346
346
|
let firstNode = selectedNodes[0];
|
|
347
347
|
let lastNode = selectedNodes[lastIndex];
|
|
348
348
|
if (selection.isCollapsed()) {
|
|
349
|
+
const styles = getStyleObjectFromCSS(selection.style);
|
|
350
|
+
Object.entries(patch).forEach(([key, value]) => {
|
|
351
|
+
if (value !== null) {
|
|
352
|
+
styles[key] = value;
|
|
353
|
+
}
|
|
354
|
+
return styles;
|
|
355
|
+
});
|
|
356
|
+
const style = getCSSFromStyleObject(styles);
|
|
357
|
+
selection.setStyle(style);
|
|
349
358
|
return;
|
|
350
359
|
}
|
|
351
360
|
const anchor = selection.anchor;
|
|
@@ -733,6 +742,23 @@ function $getSelectionStyleValueForProperty(selection, styleProperty, defaultVal
|
|
|
733
742
|
const isBackward = selection.isBackward();
|
|
734
743
|
const endOffset = isBackward ? focus.offset : anchor.offset;
|
|
735
744
|
const endNode = isBackward ? focus.getNode() : anchor.getNode();
|
|
745
|
+
if (selection.style !== '') {
|
|
746
|
+
const css = selection.style;
|
|
747
|
+
const styleObject = getStyleObjectFromCSS(css);
|
|
748
|
+
let nodeStyleValue;
|
|
749
|
+
if (styleObject !== null) {
|
|
750
|
+
nodeStyleValue = styleObject[styleProperty] || defaultValue;
|
|
751
|
+
} else {
|
|
752
|
+
nodeStyleValue = defaultValue;
|
|
753
|
+
}
|
|
754
|
+
if (styleValue === null) {
|
|
755
|
+
styleValue = nodeStyleValue;
|
|
756
|
+
} else if (styleValue !== nodeStyleValue) {
|
|
757
|
+
// multiple text nodes are in the selection and they don't all
|
|
758
|
+
// have the same font size.
|
|
759
|
+
styleValue = '';
|
|
760
|
+
}
|
|
761
|
+
}
|
|
736
762
|
for (let i = 0; i < nodes.length; i++) {
|
|
737
763
|
const node = nodes[i];
|
|
738
764
|
|
package/LexicalSelection.prod.js
CHANGED
|
@@ -4,25 +4,25 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
'use strict';var l=require("lexical");let
|
|
8
|
-
function
|
|
9
|
-
function
|
|
10
|
-
r&&l.$isLeafNode(
|
|
11
|
-
d)
|
|
12
|
-
null!==b?b.selectEnd():a.dirty=!0}}function
|
|
7
|
+
'use strict';var l=require("lexical");let v=new Map;function w(a){for(;null!=a;){if(a.nodeType===Node.TEXT_NODE)return a;a=a.firstChild}return null}function x(a){let b=a.parentNode;if(null==b)throw Error("Should never happen");return[b,Array.from(b.childNodes).indexOf(a)]}function y(a){let b={};a=a.split(";");for(let c of a)if(""!==c){let [e,d]=c.split(/:([^]+)/);b[e.trim()]=d.trim()}return b}function A(a){let b=v.get(a);void 0===b&&(b=y(a),v.set(a,b));return b}
|
|
8
|
+
function B(a){let b="";for(let c in a)c&&(b+=`${c}: ${a[c]};`);return b}function C(a,b){var c=A(a.getStyle());b=Object.entries(b).reduce((e,[d,f])=>{null===f?delete e[d]:e[d]=f;return e},{...c});c=B(b);a.setStyle(c);v.set(c,b)}function D(a){for(;null!==a&&!l.$isRootOrShadowRoot(a);){let b=a.getLatest(),c=a.getParent();0===b.getChildrenSize()&&a.remove(!0);a=c}}
|
|
9
|
+
function E(a,b,c,e,d=null){if(0!==b.length){var f=b[0],h=new Map,g=[];f=l.$isElementNode(f)?f:f.getParentOrThrow();f.isInline()&&(f=f.getParentOrThrow());for(var k=!1;null!==f;){var n=f.getPreviousSibling();if(null!==n){f=n;k=!0;break}f=f.getParentOrThrow();if(l.$isRootOrShadowRoot(f))break}n=new Set;for(var q=0;q<c;q++){var p=b[q];l.$isElementNode(p)&&0===p.getChildrenSize()&&n.add(p.getKey())}var m=new Set;for(q=0;q<c;q++){p=b[q];var r=p.getParent();null!==r&&r.isInline()&&(r=r.getParent());if(null!==
|
|
10
|
+
r&&l.$isLeafNode(p)&&!m.has(p.getKey())){if(p=r.getKey(),void 0===h.get(p)){let u=e();u.setFormat(r.getFormatType());u.setIndent(r.getIndent());g.push(u);h.set(p,u);r.getChildren().forEach(t=>{u.append(t);m.add(t.getKey());l.$isElementNode(t)&&t.getChildrenKeys().forEach(z=>m.add(z))});D(r)}}else n.has(p.getKey())&&(r=e(),r.setFormat(p.getFormatType()),r.setIndent(p.getIndent()),g.push(r),p.remove(!0))}if(null!==d)for(b=0;b<g.length;b++)d.append(g[b]);b=null;if(l.$isRootOrShadowRoot(f))if(k)if(null!==
|
|
11
|
+
d)f.insertAfter(d);else for(d=g.length-1;0<=d;d--)f.insertAfter(g[d]);else if(k=f.getFirstChild(),l.$isElementNode(k)&&(f=k),null===k)if(d)f.append(d);else for(d=0;d<g.length;d++)k=g[d],f.append(k),b=k;else if(null!==d)k.insertBefore(d);else for(f=0;f<g.length;f++)d=g[f],k.insertBefore(d),b=d;else if(d)f.insertAfter(d);else for(d=g.length-1;0<=d;d--)k=g[d],f.insertAfter(k),b=k;g=l.$getPreviousSelection();l.$isRangeSelection(g)&&g.anchor.getNode().isAttached()&&g.focus.getNode().isAttached()?l.$setSelection(g.clone()):
|
|
12
|
+
null!==b?b.selectEnd():a.dirty=!0}}function F(a,b,c,e){a.modify(b?"extend":"move",c,e)}function H(a){a=a.anchor.getNode();return"rtl"===(l.$isRootNode(a)?a:a.getParentOrThrow()).getDirection()}exports.$addNodeStyle=function(a){a=a.getStyle();let b=y(a);v.set(a,b)};
|
|
13
13
|
exports.$cloneWithProperties=function(a){a=a.getLatest();let b=a.constructor.clone(a);b.__parent=a.__parent;b.__next=a.__next;b.__prev=a.__prev;if(l.$isElementNode(a)&&l.$isElementNode(b))return b.__first=a.__first,b.__last=a.__last,b.__size=a.__size,b.__format=a.__format,b.__indent=a.__indent,b.__dir=a.__dir,b;l.$isTextNode(a)&&l.$isTextNode(b)&&(b.__format=a.__format,b.__style=a.__style,b.__mode=a.__mode,b.__detail=a.__detail);return b};
|
|
14
|
-
exports.$getSelectionStyleValueForProperty=function(a,b,c=""){let
|
|
15
|
-
exports.$isParentElementRTL=
|
|
16
|
-
exports.$patchStyleText=function(a,b){var c=a.getNodes();let
|
|
17
|
-
n?c[0]:c[1],
|
|
18
|
-
exports.$selectAll=function(a){let b=a.anchor;a=a.focus;var c=b.getNode().getTopLevelElementOrThrow().getParentOrThrow();let
|
|
19
|
-
exports.$setBlocksType_experimental=function(a,b){if("root"===a.anchor.key){b=b();var c=l.$getRoot();(a=c.getFirstChild())?a.replace(b,!0):c.append(b)}else for(c=a.getNodes(),"text"===a.anchor.type&&(a=a.anchor.getNode().getParent(),a=a.isInline()?a.getParent():a,-1===c.indexOf(a)&&c.push(a)),a=0;a<c.length;a++){let d=c[a];var
|
|
14
|
+
exports.$getSelectionStyleValueForProperty=function(a,b,c=""){let e=null,d=a.getNodes();var f=a.anchor,h=a.focus,g=a.isBackward();let k=g?h.offset:f.offset;f=g?h.getNode():f.getNode();""!==a.style&&(a=A(a.style),a=null!==a?a[b]||c:c,null===e?e=a:e!==a&&(e=""));for(a=0;a<d.length;a++){var n=d[a];if((0===a||0!==k||!n.is(f))&&l.$isTextNode(n))if(h=b,g=c,n=n.getStyle(),n=A(n),h=null!==n?n[h]||g:g,null===e)e=h;else if(e!==h){e="";break}}return null===e?c:e};
|
|
15
|
+
exports.$isAtNodeEnd=function(a){return"text"===a.type?a.offset===a.getNode().getTextContentSize():a.offset===a.getNode().getChildrenSize()};exports.$isParentElementRTL=H;exports.$moveCaretSelection=F;exports.$moveCharacter=function(a,b,c){let e=H(a);F(a,b,c?!e:e,"character")};
|
|
16
|
+
exports.$patchStyleText=function(a,b){var c=a.getNodes();let e=c.length-1,d=c[0],f=c[e];if(a.isCollapsed()){let t=A(a.style);Object.entries(b).forEach(([z,G])=>{null!==G&&(t[z]=G);return t});b=B(t);a.setStyle(b)}else{var h=a.anchor,g=a.focus,k=d.getTextContent().length,n=g.offset,q=h.offset,p=h.isBefore(g),m=p?q:n;a=p?n:q;var r=p?h.type:g.type,u=p?g.type:h.type;h=p?g.key:h.key;l.$isTextNode(d)&&m===k&&(g=d.getNextSibling(),l.$isTextNode(g)&&(m=q=0,d=g));if(d.is(f))l.$isTextNode(d)&&(m="element"===
|
|
17
|
+
r?0:q>n?n:q,a="element"===u?k:q>n?q:n,m!==a&&(0===m&&a===k?(C(d,b),d.select(m,a)):(c=d.splitText(m,a),c=0===m?c[0]:c[1],C(c,b),c.select(0,a-m))));else for(l.$isTextNode(d)&&m<d.getTextContentSize()&&(0!==m&&(d=d.splitText(m)[1],m=0),C(d,b)),l.$isTextNode(f)&&(m=f.getTextContent().length,f.__key!==h&&0!==a&&(a=m),a!==m&&([f]=f.splitText(a)),0!==a&&C(f,b)),a=1;a<e;a++)m=c[a],k=m.getKey(),l.$isTextNode(m)&&k!==d.getKey()&&k!==f.getKey()&&!m.isToken()&&C(m,b)}};
|
|
18
|
+
exports.$selectAll=function(a){let b=a.anchor;a=a.focus;var c=b.getNode().getTopLevelElementOrThrow().getParentOrThrow();let e=c.getFirstDescendant();c=c.getLastDescendant();let d="element",f="element",h=0;l.$isTextNode(e)?d="text":l.$isElementNode(e)||null===e||(e=e.getParentOrThrow());l.$isTextNode(c)?(f="text",h=c.getTextContentSize()):l.$isElementNode(c)||null===c||(c=c.getParentOrThrow());e&&c&&(b.set(e.getKey(),0,d),a.set(c.getKey(),h,f))};
|
|
19
|
+
exports.$setBlocksType_experimental=function(a,b){if("root"===a.anchor.key){b=b();var c=l.$getRoot();(a=c.getFirstChild())?a.replace(b,!0):c.append(b)}else for(c=a.getNodes(),"text"===a.anchor.type&&(a=a.anchor.getNode().getParent(),a=a.isInline()?a.getParent():a,-1===c.indexOf(a)&&c.push(a)),a=0;a<c.length;a++){let d=c[a];var e=d;!l.$isElementNode(e)||l.$isRootOrShadowRoot(e)||e.isInline()||(e=b(),e.setFormat(d.getFormatType()),e.setIndent(d.getIndent()),d.replace(e,!0))}};
|
|
20
20
|
exports.$shouldOverrideDefaultCharacterSelection=function(a,b){a=l.$getAdjacentNode(a.focus,b);return l.$isDecoratorNode(a)&&!a.isIsolated()||l.$isElementNode(a)&&!a.isInline()&&!a.canBeEmpty()};
|
|
21
|
-
exports.$sliceSelectedTextNodeContent=function(a,b){if(b.isSelected()&&!b.isSegmented()&&!b.isToken()&&(l.$isRangeSelection(a)||l.DEPRECATED_$isGridSelection(a))){var c=a.anchor.getNode(),
|
|
22
|
-
exports.$wrapNodes=function(a,b,c=null){var
|
|
23
|
-
|
|
24
|
-
exports.createDOMRange=function(a,b,c,
|
|
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
|
|
26
|
-
exports.trimTextContentFromAnchor=function(a,b,c){let
|
|
27
|
-
d=
|
|
28
|
-
(
|
|
21
|
+
exports.$sliceSelectedTextNodeContent=function(a,b){if(b.isSelected()&&!b.isSegmented()&&!b.isToken()&&(l.$isRangeSelection(a)||l.DEPRECATED_$isGridSelection(a))){var c=a.anchor.getNode(),e=a.focus.getNode(),d=b.is(c),f=b.is(e);if(d||f){d=a.isBackward();let [h,g]=a.getCharacterOffsets();a=c.is(e);f=b.is(d?e:c);e=b.is(d?c:e);c=0;let k=void 0;a?(c=h>g?g:h,k=h>g?h:g):f?(c=d?g:h,k=void 0):e&&(d=d?h:g,c=0,k=d);b.__text=b.__text.slice(c,k)}}return b};
|
|
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(k=>g.append(k));c&&(g=c.append(g));a.replace(g)}else{f=null;var h=[];for(let g=0;g<d;g++){let k=e[g];l.$isRootOrShadowRoot(k)?(E(a,h,h.length,b,c),h=[],f=k):null===f||null!==f&&l.$hasAncestor(k,
|
|
23
|
+
f)?h.push(k):(E(a,h,h.length,b,c),h=[k])}E(a,h,h.length,b,c)}};
|
|
24
|
+
exports.createDOMRange=function(a,b,c,e,d){let f=b.getKey(),h=e.getKey(),g=document.createRange(),k=a.getElementByKey(f);a=a.getElementByKey(h);l.$isTextNode(b)&&(k=w(k));l.$isTextNode(e)&&(a=w(a));if(void 0===b||void 0===e||null===k||null===a)return null;"BR"===k.nodeName&&([k,c]=x(k));"BR"===a.nodeName&&([a,d]=x(a));b=k.firstChild;k===a&&null!=b&&"BR"===b.nodeName&&0===c&&0===d&&(d=1);try{g.setStart(k,c),g.setEnd(a,d)}catch(n){return null}!g.collapsed||c===d&&f===h||(g.setStart(a,d),g.setEnd(k,
|
|
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===h.top&&d.left===h.left&&d.width===h.width&&d.height===h.height||g?(b.splice(f--,1),e--):d=h}return b};exports.getStyleObjectFromCSS=A;
|
|
26
|
+
exports.trimTextContentFromAnchor=function(a,b,c){let e=b.getNode();if(l.$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=l.$isElementNode(g)?g.getLastDescendant():g)}let k=e.getTextContent();""===k&&l.$isElementNode(e)&&!e.isInline()&&(k="\n\n");
|
|
27
|
+
d=k.length;g=d-c;let n=k.slice(0,g);if(!l.$isTextNode(e)||c>=d)g=e.getParent(),e.remove(),null!=g&&0===g.getChildrenSize()&&g.remove(),c-=d+h,e=f;else{let q=e.getKey();f=a.getEditorState().read(()=>{const p=l.$getNodeByKey(q);return l.$isTextNode(p)&&p.isSimpleText()?p.getTextContent():null});null!==f&&f!==k?(c=l.$getPreviousSelection(),d=e,e.isSimpleText()?e.setTextContent(f):(d=l.$createTextNode(f),e.replace(d)),l.$isRangeSelection(c)&&c.isCollapsed()&&(c=c.anchor.offset,d.select(c,c))):e.isSimpleText()?
|
|
28
|
+
(f=b.key===q,h=b.offset,h<c&&(h=d),c=f?h-c:0,d=f?h:g,f&&0===c?([c]=e.splitText(c,d),c.remove()):([,c]=e.splitText(c,d),c.remove())):(c=l.$createTextNode(n),e.replace(c));c=0}}}
|
package/lexical-node.d.ts
CHANGED
|
@@ -11,4 +11,4 @@ export declare function $sliceSelectedTextNodeContent(selection: RangeSelection
|
|
|
11
11
|
export declare function $isAtNodeEnd(point: Point): boolean;
|
|
12
12
|
export declare function trimTextContentFromAnchor(editor: LexicalEditor, anchor: Point, delCount: number): void;
|
|
13
13
|
export declare function $addNodeStyle(node: TextNode): void;
|
|
14
|
-
export declare function $patchStyleText(selection: RangeSelection
|
|
14
|
+
export declare function $patchStyleText(selection: RangeSelection, patch: Record<string, string | null>): void;
|
package/package.json
CHANGED