@payloadcms/richtext-lexical 3.0.0-beta.95 → 3.0.0-beta.96
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/dist/exports/client/{Field-SUWHJ4HF.js → Field-E27BVLS5.js} +2 -2
- package/dist/exports/client/Field-E27BVLS5.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-YSI2QILQ.js → chunk-ZH3MUMBJ.js} +1 -1
- package/dist/exports/client/chunk-ZH3MUMBJ.js.map +7 -0
- package/dist/exports/client/index.js +2 -2
- package/dist/exports/client/index.js.map +2 -2
- package/dist/features/blocks/server/index.d.ts.map +1 -1
- package/dist/features/blocks/server/index.js +2 -0
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/converters/html/field/index.d.ts.map +1 -1
- package/dist/features/converters/html/field/index.js +3 -1
- package/dist/features/converters/html/field/index.js.map +1 -1
- package/dist/features/experimental_table/server/index.d.ts.map +1 -1
- package/dist/features/experimental_table/server/index.js +3 -1
- package/dist/features/experimental_table/server/index.js.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js +3 -1
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +1 -1
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/link/server/index.d.ts.map +1 -1
- package/dist/features/link/server/index.js +2 -0
- package/dist/features/link/server/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +9 -3
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/typesServer.d.ts +1 -0
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/features/upload/server/feature.server.d.ts.map +1 -1
- package/dist/features/upload/server/feature.server.js +5 -1
- package/dist/features/upload/server/feature.server.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.d.ts.map +1 -1
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/config/server/loader.d.ts +2 -1
- package/dist/lexical/config/server/loader.d.ts.map +1 -1
- package/dist/lexical/config/server/loader.js +2 -0
- package/dist/lexical/config/server/loader.js.map +1 -1
- package/dist/lexical/config/server/sanitize.d.ts +1 -1
- package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
- package/dist/lexical/config/server/sanitize.js +2 -1
- package/dist/lexical/config/server/sanitize.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +3 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js +3 -1
- package/dist/lexical/plugins/handles/utils/doesLineHeightAffectElement.js.map +1 -1
- package/dist/lexical/utils/url.d.ts.map +1 -1
- package/dist/lexical/utils/url.js +18 -6
- package/dist/lexical/utils/url.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/createServerFeature.d.ts +1 -0
- package/dist/utilities/createServerFeature.d.ts.map +1 -1
- package/dist/utilities/createServerFeature.js +2 -0
- package/dist/utilities/createServerFeature.js.map +1 -1
- package/package.json +9 -7
- package/dist/exports/client/Field-SUWHJ4HF.js.map +0 -7
- package/dist/exports/client/chunk-YSI2QILQ.js.map +0 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function Mt({editorConfig:i}){return i.features.nodes.map(t=>"node"in t?t.node:t)}import{c as gt}from"react/compiler-runtime";import{jsx as pt}from"react/jsx-runtime";import{useLexicalComposerContext as _t}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as xt}from"@lexical/utils";import{$getSelection as P,$isRangeSelection as B,$isTextNode as Ot,COMMAND_PRIORITY_LOW as St,createCommand as wt}from"lexical";import{useEffect as K,useState as yt}from"react";import*as D from"react";import{c as G}from"react/compiler-runtime";import{useLexicalComposerContext as F}from"@lexical/react/LexicalComposerContext.js";import{mergeRegister as $}from"@lexical/utils";import{$getSelection as J,$isRangeSelection as Z,COMMAND_PRIORITY_LOW as M,KEY_ARROW_DOWN_COMMAND as tt,KEY_ARROW_UP_COMMAND as et,KEY_ENTER_COMMAND as nt,KEY_ESCAPE_COMMAND as ot,KEY_TAB_COMMAND as it,createCommand as st}from"lexical";import{useCallback as A,useEffect as E,useLayoutEffect as rt,useMemo as lt,useRef as ct,useState as at}from"react";var ut="slash-menu-popup",W=i=>{let t=document.getElementById("slash-menu");if(!t)return;let e=t.getBoundingClientRect();e.top+e.height>window.innerHeight&&t.scrollIntoView({block:"center"}),e.top<0&&t.scrollIntoView({block:"center"}),i.scrollIntoView({block:"nearest"})};function ft(i,t,e){let n=e;for(let o=n;o<=t.length;o++)i.substring(i.length-o)===t.substring(0,o)&&(n=o);return n}function ht(i){let t=J();if(!Z(t)||!t.isCollapsed())return null;let e=t.anchor;if(e.type!=="text")return null;let n=e.getNode();if(!n.isSimpleText())return null;let o=e.offset,r=n.getTextContent().slice(0,o),a=i.replaceableString.length,m=ft(r,i.matchingString,a),s=o-m;if(s<0)return null;let l;return s===0?[l]=n.splitText(o):[,l]=n.splitText(s,o),l}function mt(i,t){let e=getComputedStyle(i),n=e.position==="absolute",o=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(e.position==="fixed")return document.body;for(let r=i;r=r.parentElement;)if(e=getComputedStyle(r),!(n&&e.position==="static")&&o.test(e.overflow+e.overflowY+e.overflowX))return r;return document.body}function H(i,t){let e=i.getBoundingClientRect(),n=t.getBoundingClientRect();return e.top>n.top&&e.top<n.bottom}function dt(i,t,e,n){let o=G(7),[r]=F(),a,m;o[0]!==t||o[1]!==i||o[2]!==r||o[3]!==e||o[4]!==n?(a=()=>{if(t!=null&&i!=null){let s=r.getRootElement(),l=s!=null?mt(s,!1):document.body,g;g=!1;let c;c=H(t,l);let h=function(){g||(window.requestAnimationFrame(function(){e(),g=!1}),g=!0);let w=H(t,l);w!==c&&(c=w,n?.(w))},x=new ResizeObserver(e);return window.addEventListener("resize",e),document.addEventListener("scroll",h,{capture:!0,passive:!0}),x.observe(t),()=>{x.unobserve(t),window.removeEventListener("resize",e),document.removeEventListener("scroll",h,!0)}}},m=[t,r,n,e,i],o[0]=t,o[1]=i,o[2]=r,o[3]=e,o[4]=n,o[5]=a,o[6]=m):(a=o[5],m=o[6]),E(a,m)}var k=st("SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND");function U({anchorElementRef:i,close:t,editor:e,groups:n,menuRenderFn:o,onSelectItem:r,resolution:a,shouldSplitNodeWithQuery:m=!1}){let[s,l]=at(null),g=a.match&&a.match.matchingString||"",c=A(u=>{let f=e.getRootElement();f!==null&&(f.setAttribute("aria-activedescendant",`${ut}__item-${u.key}`),l(u.key))},[e]),h=A(()=>{if(n!==null&&g!=null){let u=n.flatMap(f=>f.items);if(u.length){let f=u[0];c(f)}}},[n,c,g]);E(()=>{h()},[g,h]);let x=A(u=>{e.update(()=>{let f=a.match!=null&&m?ht(a.match):null;r(u,f,t,a.match?a.match.matchingString:"")})},[e,m,a.match,r,t]);E(()=>()=>{let u=e.getRootElement();u!==null&&u.removeAttribute("aria-activedescendant")},[e]),rt(()=>{n===null?l(null):s===null&&h()},[n,s,c,h]),E(()=>$(e.registerCommand(k,({item:u})=>u.ref&&u.ref.current!=null?(W(u.ref.current),!0):!1,M)),[e,c]),E(()=>$(e.registerCommand(tt,u=>{let f=u;if(n!==null&&n.length&&s!==null){let p=n.flatMap(S=>S.items),d=p.findIndex(S=>S.key===s),O=d!==p.length-1?d+1:0,_=p[O];c(_),_.ref!=null&&_.ref.current&&e.dispatchCommand(k,{index:O,item:_}),f.preventDefault(),f.stopImmediatePropagation()}return!0},M),e.registerCommand(et,u=>{let f=u;if(n!==null&&n.length&&s!==null){let p=n.flatMap(S=>S.items),d=p.findIndex(S=>S.key===s),O=d!==0?d-1:p.length-1,_=p[O];c(_),_.ref!=null&&_.ref.current&&W(_.ref.current),f.preventDefault(),f.stopImmediatePropagation()}return!0},M),e.registerCommand(ot,u=>{let f=u;return f.preventDefault(),f.stopImmediatePropagation(),t(),!0},M),e.registerCommand(it,u=>{let f=u;if(n===null||s===null)return!1;let d=n.flatMap(O=>O.items).find(O=>O.key===s);return d?(f.preventDefault(),f.stopImmediatePropagation(),x(d),!0):!1},M),e.registerCommand(nt,u=>{if(n===null||s===null)return!1;let p=n.flatMap(d=>d.items).find(d=>d.key===s);return p?(u!==null&&(u.preventDefault(),u.stopImmediatePropagation()),x(p),!0):!1},M)),[x,t,e,n,s,c]);let w=lt(()=>({groups:n,selectItemAndCleanUp:x,selectedItemKey:s,setSelectedItemKey:l}),[x,s,n]);return o(i,w,a.match?a.match.matchingString:"")}function X(i,t,e,n){let[o]=F(),r=ct(document.createElement("div")),a=A(()=>{let s=o.getRootElement(),l=r.current,g=32,c=l.firstChild;if(s!==null&&t!==null){let{height:h,width:x}=t.getRect(),{left:w,top:u}=t.getRect(),f=u;if(u-=i.getBoundingClientRect().top+window.scrollY,w-=i.getBoundingClientRect().left+window.scrollX,l.style.left=`${w+window.scrollX}px`,l.style.height=`${h}px`,l.style.width=`${x}px`,c!==null){let p=c.getBoundingClientRect(),d=p.height,O=p.width,_=s.getBoundingClientRect();w+O>_.right&&(l.style.left=`${_.right-O+window.scrollX}px`);let S=f+d+g>window.innerHeight,y=f<0;S&&!y?l.style.top=`${u+g-d+window.scrollY-(h+24)}px`:l.style.top=`${u+window.scrollY+g}px`}l.isConnected||(n!=null&&(l.className=n),l.setAttribute("aria-label","Slash menu"),l.setAttribute("id","slash-menu"),l.setAttribute("role","listbox"),l.style.display="block",l.style.position="absolute",i.append(l)),r.current=l,s.setAttribute("aria-controls","slash-menu")}},[o,t,n,i]);E(()=>{let s=o.getRootElement();if(t!==null)return a(),()=>{s!==null&&s.removeAttribute("aria-controls");let l=r.current;l!==null&&l.isConnected&&l.remove()}},[o,a,t]);let m=A(s=>{t!==null&&(s||e(null))},[t,e]);return dt(t,r.current,a,m),r}var Ut=`\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'"~=<>_:;`;function Rt(i){let t=i.anchor;if(t.type!=="text")return null;let e=t.getNode();if(!e.isSimpleText())return null;let n=t.offset;return e.getTextContent().slice(0,n)}function V(i,t,e){let n=e.getSelection();if(n===null||!n.isCollapsed)return!1;let o=n.anchorNode,r=i,a=n.anchorOffset;if(o==null||a==null)return!1;try{t.setStart(o,r),t.setEnd(o,a>1?a:1)}catch{return!1}return!0}function Ct(i){let t=null;return i.getEditorState().read(()=>{let e=P();B(e)&&(t=Rt(e))}),t}function q(i,t){return t!==0?!1:i.getEditorState().read(()=>{let e=P();if(B(e)){let r=e.anchor.getNode().getPreviousSibling();return Ot(r)&&r.isTextEntity()}return!1})}function z(i){D.startTransition?D.startTransition(i):i()}var Tt=wt("ENABLE_SLASH_MENU_COMMAND");function Xt(i){let t=gt(31),{anchorClassName:e,anchorElem:n,groups:o,menuRenderFn:r,onClose:a,onOpen:m,onQueryChange:s,onSelectItem:l,triggerFn:g}=i,[c]=_t(),[h,x]=yt(null),w=X(n,h,x,e),u;t[0]!==a||t[1]!==h?(u=()=>{x(null),a!=null&&h!==null&&a()},t[0]=a,t[1]=h,t[2]=u):u=t[2];let f=u,p;t[3]!==m||t[4]!==h?(p=R=>{x(R),m!=null&&h===null&&m(R)},t[3]=m,t[4]=h,t[5]=p):p=t[5];let d=p,O,_;t[6]!==c||t[7]!==d?(O=()=>xt(c.registerCommand(Tt,R=>{let{node:L}=R;return c.getEditorState().read(()=>{let C={leadOffset:0,matchingString:"",replaceableString:""};if(!q(c,C.leadOffset)&&L!==null){let T=c._window??window,N=T.document.createRange();V(C.leadOffset,N,T)!==null&&z(()=>d({getRect:()=>N.getBoundingClientRect(),match:C}));return}}),!0},St)),_=[c,d],t[6]=c,t[7]=d,t[8]=O,t[9]=_):(O=t[8],_=t[9]),K(O,_);let S;t[10]!==c||t[11]!==f||t[12]!==g||t[13]!==s||t[14]!==d?(S=()=>{let R=()=>{c.getEditorState().read(()=>{let C=c._window??window,T=C.document.createRange(),N=P(),v=Ct(c);if(!B(N)||!N.isCollapsed()||v===null||T===null){f();return}let I=g({editor:c,query:v});if(s(I?I.matchingString:null),I!==null&&!q(c,I.leadOffset)&&V(I.leadOffset,T,C)!==null){z(()=>d({getRect:()=>T.getBoundingClientRect(),match:I}));return}f()})},L=c.registerUpdateListener(R);return()=>{L()}},t[10]=c,t[11]=f,t[12]=g,t[13]=s,t[14]=d,t[15]=S):S=t[15];let y;t[16]!==c||t[17]!==g||t[18]!==s||t[19]!==h||t[20]!==f||t[21]!==d?(y=[c,g,s,h,f,d],t[16]=c,t[17]=g,t[18]=s,t[19]=h,t[20]=f,t[21]=d,t[22]=y):y=t[22],K(S,y);let b;return t[23]!==h||t[24]!==c||t[25]!==w||t[26]!==f||t[27]!==o||t[28]!==r||t[29]!==l?(b=h===null||c===null?null:pt(U,{anchorElementRef:w,close:f,editor:c,groups:o,menuRenderFn:r,onSelectItem:l,resolution:h,shouldSplitNodeWithQuery:!0}),t[23]=h,t[24]=c,t[25]=w,t[26]=f,t[27]=o,t[28]=r,t[29]=l,t[30]=b):b=t[30],b}function Vt(i){return i instanceof HTMLElement}var Y=class{_x;_y;constructor(t,e){this._x=t,this._y=e}calcDeltaXTo({x:t}){return this.x-t}calcDeltaYTo({y:t}){return this.y-t}calcDistanceTo(t){return Math.sqrt(Math.pow(this.calcDeltaXTo(t),2)+Math.pow(this.calcDeltaYTo(t),2))}calcHorizontalDistanceTo(t){return Math.abs(this.calcDeltaXTo(t))}calcVerticalDistance(t){return Math.abs(this.calcDeltaYTo(t))}equals({x:t,y:e}){return this.x===t&&this.y===e}get x(){return this._x}get y(){return this._y}};function Q(i){return i instanceof Y}var j=class i{_bottom;_left;_right;_top;constructor(t,e,n,o){let[r,a]=e<=o?[e,o]:[o,e],[m,s]=t<=n?[t,n]:[n,t];this._top=r,this._right=s,this._left=m,this._bottom=a}static fromDOM(t){let{height:e,left:n,top:o,width:r}=t.getBoundingClientRect();return i.fromLWTH(n,r,o,e)}static fromDOMRect(t){let{height:e,left:n,top:o,width:r}=t;return i.fromLWTH(n,r,o,e)}static fromLTRB(t,e,n,o){return new i(t,e,n,o)}static fromLWTH(t,e,n,o){return new i(t,n,t+e,n+o)}static fromPoints(t,e){let{x:n,y:o}=t,{x:r,y:a}=e;return i.fromLTRB(n,o,r,a)}contains(t){if(Q(t)){let{x:a,y:m}=t,s=m<this._top,l=m>this._bottom,g=a<this._left,c=a>this._right;return{reason:{isOnBottomSide:l,isOnLeftSide:g,isOnRightSide:c,isOnTopSide:s},result:!s&&!l&&!g&&!c}}let{bottom:e,left:n,right:o,top:r}=t;return r>=this._top&&r<=this._bottom&&e>=this._top&&e<=this._bottom&&n>=this._left&&n<=this._right&&o>=this._left&&o<=this._right}distanceFromPoint(t){let e=this.contains(t);if(e.result)return{distance:0,isOnBottomSide:e.reason.isOnBottomSide,isOnLeftSide:e.reason.isOnLeftSide,isOnRightSide:e.reason.isOnRightSide,isOnTopSide:e.reason.isOnTopSide};let n=0,o=0;return t.x<this._left?n=this._left-t.x:t.x>this._right&&(n=t.x-this._right),t.y<this._top?o=this._top-t.y:t.y>this._bottom&&(o=t.y-this._bottom),{distance:Math.sqrt(n*n+o*o),isOnBottomSide:t.y>this._bottom,isOnLeftSide:t.x<this._left,isOnRightSide:t.x>this._right,isOnTopSide:t.y<this._top}}equals({bottom:t,left:e,right:n,top:o}){return o===this._top&&t===this._bottom&&e===this._left&&n===this._right}generateNewRect({bottom:t=this.bottom,left:e=this.left,right:n=this.right,top:o=this.top}){return new i(e,o,n,t)}intersectsWith(t){let{height:e,left:n,top:o,width:r}=t,{height:a,left:m,top:s,width:l}=this,g=n+r>=m+l?n+r:m+l,c=o+e>=s+a?o+e:s+a,h=n<=m?n:m,x=o<=s?o:s;return g-h<=r+l&&c-x<=e+a}get bottom(){return this._bottom}get height(){return Math.abs(this._bottom-this._top)}get left(){return this._left}get right(){return this._right}get top(){return this._top}get width(){return Math.abs(this._left-this._right)}};export{Mt as a,Ut as b,Tt as c,Xt as d,Vt as e,Y as f,Q as g,j as h};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-ZH3MUMBJ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lexical/nodes/index.ts", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx", "../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx", "../../../src/lexical/utils/guard.ts", "../../../src/lexical/utils/point.ts", "../../../src/lexical/utils/rect.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical'\n\nimport type { SanitizedClientEditorConfig, SanitizedServerEditorConfig } from '../config/types.js'\n\nexport function getEnabledNodes({\n editorConfig,\n}: {\n editorConfig: SanitizedClientEditorConfig | SanitizedServerEditorConfig\n}): Array<Klass<LexicalNode> | LexicalNodeReplacement> {\n return editorConfig.features.nodes.map((node) => {\n if ('node' in node) {\n return node.node\n }\n return node\n })\n}\n", "'use client'\nimport type {\n LexicalCommand,\n LexicalEditor,\n ParagraphNode,\n RangeSelection,\n TextNode,\n} from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n createCommand,\n} from 'lexical'\nimport { type JSX, useCallback, useEffect, useState } from 'react'\nimport * as React from 'react'\n\nimport type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js'\nimport type { MenuRenderFn, MenuResolution } from './LexicalMenu.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem } from './types.js'\n\nimport { LexicalMenu, useMenuAnchorRef } from './LexicalMenu.js'\n\nexport const PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;'\n\nfunction getTextUpToAnchor(selection: RangeSelection): null | string {\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const anchorOffset = anchor.offset\n return anchorNode.getTextContent().slice(0, anchorOffset)\n}\n\nfunction tryToPositionRange(leadOffset: number, range: Range, editorWindow: Window): boolean {\n const domSelection = editorWindow.getSelection()\n if (domSelection === null || !domSelection.isCollapsed) {\n return false\n }\n const anchorNode = domSelection.anchorNode\n const startOffset = leadOffset\n const endOffset = domSelection.anchorOffset\n\n if (anchorNode == null || endOffset == null) {\n return false\n }\n\n try {\n range.setStart(anchorNode, startOffset)\n // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial\n range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1)\n } catch (error) {\n return false\n }\n\n return true\n}\n\nfunction getQueryTextForSearch(editor: LexicalEditor): null | string {\n let text = null\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) {\n return\n }\n text = getTextUpToAnchor(selection)\n })\n return text\n}\n\nfunction isSelectionOnEntityBoundary(editor: LexicalEditor, offset: number): boolean {\n if (offset !== 0) {\n return false\n }\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const prevSibling = anchorNode.getPreviousSibling()\n return $isTextNode(prevSibling) && prevSibling.isTextEntity()\n }\n return false\n })\n}\n\nfunction startTransition(callback: () => void) {\n if (React.startTransition) {\n React.startTransition(callback)\n } else {\n callback()\n }\n}\n\nexport { useDynamicPositioning } from './LexicalMenu.js'\n\nexport type TypeaheadMenuPluginProps = {\n anchorClassName?: string\n anchorElem: HTMLElement\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onClose?: () => void\n onOpen?: (resolution: MenuResolution) => void\n onQueryChange: (matchingString: null | string) => void\n onSelectItem: (\n item: SlashMenuItem,\n textNodeContainingQuery: TextNode | null,\n closeMenu: () => void,\n matchingString: string,\n ) => void\n triggerFn: TriggerFn\n}\n\nexport const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{\n node: ParagraphNode\n}> = createCommand('ENABLE_SLASH_MENU_COMMAND')\n\nexport function LexicalTypeaheadMenuPlugin({\n anchorClassName,\n anchorElem,\n groups,\n menuRenderFn,\n onClose,\n onOpen,\n onQueryChange,\n onSelectItem,\n triggerFn,\n}: TypeaheadMenuPluginProps): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const [resolution, setResolution] = useState<MenuResolution | null>(null)\n const anchorElementRef = useMenuAnchorRef(anchorElem, resolution, setResolution, anchorClassName)\n\n const closeTypeahead = useCallback(() => {\n setResolution(null)\n if (onClose != null && resolution !== null) {\n onClose()\n }\n }, [onClose, resolution])\n\n const openTypeahead = useCallback(\n (res: MenuResolution) => {\n setResolution(res)\n if (onOpen != null && resolution === null) {\n onOpen(res)\n }\n },\n [onOpen, resolution],\n )\n\n // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n ENABLE_SLASH_MENU_COMMAND,\n ({ node }) => {\n editor.getEditorState().read(() => {\n const match: MenuTextMatch = {\n leadOffset: 0,\n matchingString: '',\n replaceableString: '',\n }\n if (!isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n if (node !== null) {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n }\n\n return\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, openTypeahead])\n\n useEffect(() => {\n const updateListener = () => {\n editor.getEditorState().read(() => {\n const editorWindow = editor._window ?? window\n const range = editorWindow.document.createRange()\n const selection = $getSelection()\n const text = getQueryTextForSearch(editor)\n\n if (\n !$isRangeSelection(selection) ||\n !selection.isCollapsed() ||\n text === null ||\n range === null\n ) {\n closeTypeahead()\n return\n }\n\n const match = triggerFn({ editor, query: text })\n onQueryChange(match ? match.matchingString : null)\n\n if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {\n const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow)\n if (isRangePositioned !== null) {\n startTransition(() =>\n openTypeahead({\n getRect: () => {\n return range.getBoundingClientRect()\n },\n match,\n }),\n )\n return\n }\n }\n closeTypeahead()\n })\n }\n\n const removeUpdateListener = editor.registerUpdateListener(updateListener)\n\n return () => {\n removeUpdateListener()\n }\n }, [editor, triggerFn, onQueryChange, resolution, closeTypeahead, openTypeahead])\n\n return resolution === null || editor === null ? null : (\n <LexicalMenu\n anchorElementRef={anchorElementRef}\n close={closeTypeahead}\n editor={editor}\n groups={groups}\n menuRenderFn={menuRenderFn}\n onSelectItem={onSelectItem}\n resolution={resolution}\n shouldSplitNodeWithQuery\n />\n )\n}\n\nexport type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn }\n", "'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n createCommand,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n selectedItemKey: null | string\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | ReactPortal | null\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): TextNode | null {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElement: HTMLElement | null,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.unobserve(targetElement)\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [targetElement, editor, onVisibilityChange, onReposition, resolution])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n onSelectItem,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onSelectItem: (\n item: SlashMenuItem,\n textNodeContainingQuery: TextNode | null,\n closeMenu: () => void,\n matchingString: string,\n ) => void\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n editor.update(() => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n onSelectItem(\n selectedItem,\n textNodeContainingQuery,\n close,\n resolution.match ? resolution.match.matchingString : '',\n )\n })\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectItemAndCleanUp,\n selectedItemKey,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement>(document.createElement('div'))\n const positionMenu = useCallback(() => {\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n", "'use client'\nexport function isHTMLElement(x: unknown): x is HTMLElement {\n return x instanceof HTMLElement\n}\n", "'use client'\nexport class Point {\n private readonly _x: number\n\n private readonly _y: number\n\n constructor(x: number, y: number) {\n this._x = x\n this._y = y\n }\n\n public calcDeltaXTo({ x }: Point): number {\n return this.x - x\n }\n\n public calcDeltaYTo({ y }: Point): number {\n return this.y - y\n }\n\n public calcDistanceTo(point: Point): number {\n return Math.sqrt(Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2))\n }\n\n public calcHorizontalDistanceTo(point: Point): number {\n return Math.abs(this.calcDeltaXTo(point))\n }\n\n public calcVerticalDistance(point: Point): number {\n return Math.abs(this.calcDeltaYTo(point))\n }\n\n public equals({ x, y }: Point): boolean {\n return this.x === x && this.y === y\n }\n\n get x(): number {\n return this._x\n }\n\n get y(): number {\n return this._y\n }\n}\n\nexport function isPoint(x: unknown): x is Point {\n return x instanceof Point\n}\n", "'use client'\nimport { type Point, isPoint } from './point.js'\n\ninterface ContainsPointReturn {\n reason: {\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n }\n result: boolean\n}\n\nexport class Rect {\n private readonly _bottom: number\n\n private readonly _left: number\n\n private readonly _right: number\n\n private readonly _top: number\n\n constructor(left: number, top: number, right: number, bottom: number) {\n const [physicTop, physicBottom] = top <= bottom ? [top, bottom] : [bottom, top]\n\n const [physicLeft, physicRight] = left <= right ? [left, right] : [right, left]\n\n this._top = physicTop\n this._right = physicRight\n this._left = physicLeft\n this._bottom = physicBottom\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { height, left, top, width } = dom.getBoundingClientRect()\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromDOMRect(domRect: DOMRect): Rect {\n const { height, left, top, width } = domRect\n return Rect.fromLWTH(left, width, top, height)\n }\n\n static fromLTRB(left: number, top: number, right: number, bottom: number): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n static fromLWTH(left: number, width: number, top: number, height: number): Rect {\n return new Rect(left, top, left + width, top + height)\n }\n\n static fromPoints(startPoint: Point, endPoint: Point): Rect {\n const { x: left, y: top } = startPoint\n const { x: right, y: bottom } = endPoint\n return Rect.fromLTRB(left, top, right, bottom)\n }\n\n public contains({ x, y }: Point): ContainsPointReturn\n\n public contains({ bottom, left, right, top }: Rect): boolean\n\n public contains(target: Point | Rect): ContainsPointReturn | boolean {\n if (isPoint(target)) {\n const { x, y } = target\n\n const isOnTopSide = y < this._top\n const isOnBottomSide = y > this._bottom\n const isOnLeftSide = x < this._left\n const isOnRightSide = x > this._right\n\n const result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide\n\n return {\n reason: {\n isOnBottomSide,\n isOnLeftSide,\n isOnRightSide,\n isOnTopSide,\n },\n result,\n }\n }\n const { bottom, left, right, top } = target\n\n return (\n top >= this._top &&\n top <= this._bottom &&\n bottom >= this._top &&\n bottom <= this._bottom &&\n left >= this._left &&\n left <= this._right &&\n right >= this._left &&\n right <= this._right\n )\n }\n\n public distanceFromPoint(point: Point): {\n distance: number\n isOnBottomSide: boolean\n isOnLeftSide: boolean\n isOnRightSide: boolean\n isOnTopSide: boolean\n } {\n const containsResult = this.contains(point)\n if (containsResult.result) {\n return {\n distance: 0,\n isOnBottomSide: containsResult.reason.isOnBottomSide,\n isOnLeftSide: containsResult.reason.isOnLeftSide,\n isOnRightSide: containsResult.reason.isOnRightSide,\n isOnTopSide: containsResult.reason.isOnTopSide,\n }\n }\n\n let dx = 0 // Horizontal distance to the closest edge\n let dy = 0 // Vertical distance to the closest edge\n\n // If the point is to the left of the rectangle\n if (point.x < this._left) {\n dx = this._left - point.x\n }\n // If the point is to the right of the rectangle\n else if (point.x > this._right) {\n dx = point.x - this._right\n }\n\n // If the point is above the rectangle\n if (point.y < this._top) {\n dy = this._top - point.y\n }\n // If the point is below the rectangle\n else if (point.y > this._bottom) {\n dy = point.y - this._bottom\n }\n\n // Use the Pythagorean theorem to calculate the distance\n return {\n distance: Math.sqrt(dx * dx + dy * dy),\n isOnBottomSide: point.y > this._bottom,\n isOnLeftSide: point.x < this._left,\n isOnRightSide: point.x > this._right,\n isOnTopSide: point.y < this._top,\n }\n }\n\n public equals({ bottom, left, right, top }: Rect): boolean {\n return (\n top === this._top && bottom === this._bottom && left === this._left && right === this._right\n )\n }\n\n public generateNewRect({\n bottom = this.bottom,\n left = this.left,\n right = this.right,\n top = this.top,\n }): Rect {\n return new Rect(left, top, right, bottom)\n }\n\n public intersectsWith(rect: Rect): boolean {\n const { height: h1, left: x1, top: y1, width: w1 } = rect\n const { height: h2, left: x2, top: y2, width: w2 } = this\n const maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2\n const maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2\n const minX = x1 <= x2 ? x1 : x2\n const minY = y1 <= y2 ? y1 : y2\n return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2\n }\n\n get bottom(): number {\n return this._bottom\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top)\n }\n\n get left(): number {\n return this._left\n }\n\n get right(): number {\n return this._right\n }\n\n get top(): number {\n return this._top\n }\n\n get width(): number {\n return Math.abs(this._left - this._right)\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["getEnabledNodes", "editorConfig", "features", "nodes", "map", "node", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "$isTextNode", "COMMAND_PRIORITY_LOW", "createCommand", "useEffect", "useState", "React", "c", "_c", "useLexicalComposerContext", "mergeRegister", "$getSelection", "$isRangeSelection", "COMMAND_PRIORITY_LOW", "KEY_ARROW_DOWN_COMMAND", "KEY_ARROW_UP_COMMAND", "KEY_ENTER_COMMAND", "KEY_ESCAPE_COMMAND", "KEY_TAB_COMMAND", "createCommand", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "useState", "baseClass", "scrollIntoViewIfNeeded", "target", "typeaheadContainerNode", "document", "getElementById", "typeaheadRect", "getBoundingClientRect", "top", "height", "window", "innerHeight", "scrollIntoView", "block", "getFullMatchOffset", "documentText", "entryText", "offset", "triggerOffset", "i", "length", "substring", "$splitNodeContainingQuery", "match", "selection", "isCollapsed", "anchor", "type", "anchorNode", "getNode", "isSimpleText", "selectionOffset", "textContent", "getTextContent", "slice", "characterOffset", "replaceableString", "queryOffset", "matchingString", "startOffset", "newNode", "splitText", "getScrollParent", "element", "includeHidden", "style", "getComputedStyle", "excludeStaticParent", "position", "overflowRegex", "body", "parent", "parentElement", "test", "overflow", "overflowY", "overflowX", "isTriggerVisibleInNearestScrollContainer", "targetElement", "containerElement", "tRect", "cRect", "bottom", "useDynamicPositioning", "resolution", "onReposition", "onVisibilityChange", "$", "editor", "t0", "t1", "rootElement", "getRootElement", "rootScrollParent", "ticking", "previousIsInView", "handleScroll", "requestAnimationFrame", "isInView", "resizeObserver", "ResizeObserver", "addEventListener", "capture", "passive", "observe", "unobserve", "removeEventListener", "SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND", "LexicalMenu", "anchorElementRef", "close", "groups", "menuRenderFn", "onSelectItem", "shouldSplitNodeWithQuery", "selectedItemKey", "setSelectedItemKey", "updateSelectedItem", "item", "rootElem", "setAttribute", "key", "setSelectedItemKeyToFirstMatchingItem", "allItems", "flatMap", "group", "items", "firstMatchingItem", "selectItemAndCleanUp", "selectedItem", "update", "textNodeContainingQuery", "removeAttribute", "registerCommand", "ref", "current", "payload", "event", "selectedIndex", "findIndex", "newSelectedIndex", "newSelectedItem", "dispatchCommand", "index", "preventDefault", "stopImmediatePropagation", "find", "listItemProps", "useMenuAnchorRef", "anchorElem", "setResolution", "className", "createElement", "positionMenu", "containerDiv", "VERTICAL_OFFSET", "menuEle", "firstChild", "width", "getRect", "left", "rawTop", "scrollY", "scrollX", "menuRect", "menuHeight", "menuWidth", "rootElementRect", "right", "wouldGoOffBottomOfScreen", "wouldGoOffTopOfScreen", "margin", "isConnected", "display", "append", "remove", "PUNCTUATION", "getTextUpToAnchor", "selection", "anchor", "type", "anchorNode", "getNode", "isSimpleText", "anchorOffset", "offset", "getTextContent", "slice", "tryToPositionRange", "leadOffset", "range", "editorWindow", "domSelection", "getSelection", "isCollapsed", "startOffset", "endOffset", "setStart", "setEnd", "getQueryTextForSearch", "editor", "text", "getEditorState", "read", "$getSelection", "$isRangeSelection", "isSelectionOnEntityBoundary", "prevSibling", "getPreviousSibling", "$isTextNode", "isTextEntity", "startTransition", "callback", "ENABLE_SLASH_MENU_COMMAND", "createCommand", "LexicalTypeaheadMenuPlugin", "t0", "$", "_c", "anchorClassName", "anchorElem", "groups", "menuRenderFn", "onClose", "onOpen", "onQueryChange", "onSelectItem", "triggerFn", "useLexicalComposerContext", "resolution", "setResolution", "useState", "anchorElementRef", "useMenuAnchorRef", "t1", "closeTypeahead", "t2", "res", "openTypeahead", "t3", "t4", "mergeRegister", "registerCommand", "t5", "node", "match", "matchingString", "replaceableString", "_window", "window", "document", "createRange", "getRect", "getBoundingClientRect", "COMMAND_PRIORITY_LOW", "useEffect", "updateListener", "editorWindow_0", "range_0", "match_0", "query", "removeUpdateListener", "registerUpdateListener", "t6", "t7", "_jsx", "LexicalMenu", "close", "shouldSplitNodeWithQuery", "isHTMLElement", "x", "HTMLElement", "Point", "_x", "_y", "constructor", "x", "y", "calcDeltaXTo", "calcDeltaYTo", "calcDistanceTo", "point", "Math", "sqrt", "pow", "calcHorizontalDistanceTo", "abs", "calcVerticalDistance", "equals", "isPoint", "Rect", "_bottom", "_left", "_right", "_top", "constructor", "left", "top", "right", "bottom", "physicTop", "physicBottom", "physicLeft", "physicRight", "fromDOM", "dom", "height", "width", "getBoundingClientRect", "fromLWTH", "fromDOMRect", "domRect", "fromLTRB", "fromPoints", "startPoint", "endPoint", "x", "y", "contains", "target", "isPoint", "isOnTopSide", "isOnBottomSide", "isOnLeftSide", "isOnRightSide", "reason", "result", "distanceFromPoint", "point", "containsResult", "distance", "dx", "dy", "Math", "sqrt", "equals", "generateNewRect", "intersectsWith", "rect", "h1", "x1", "y1", "w1", "h2", "x2", "y2", "w2", "maxX", "maxY", "minX", "minY", "abs"]
|
|
7
|
+
}
|