@webiny/lexical-editor 6.4.11 → 6.4.12-beta.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/lexical-editor",
3
- "version": "6.4.11",
3
+ "version": "6.4.12-beta.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -19,18 +19,18 @@
19
19
  "@lexical/selection": "0.46.0",
20
20
  "@lexical/text": "0.46.0",
21
21
  "@lexical/utils": "0.46.0",
22
- "@webiny/lexical-nodes": "6.4.11",
23
- "@webiny/lexical-theme": "6.4.11",
24
- "@webiny/react-composition": "6.4.11",
25
- "@webiny/react-properties": "6.4.11",
22
+ "@webiny/lexical-nodes": "6.4.12-beta.1",
23
+ "@webiny/lexical-theme": "6.4.12-beta.1",
24
+ "@webiny/react-composition": "6.4.12-beta.1",
25
+ "@webiny/react-properties": "6.4.12-beta.1",
26
26
  "lexical": "0.46.0",
27
27
  "lodash": "4.18.1",
28
- "radix-ui": "1.6.2",
28
+ "radix-ui": "1.6.7",
29
29
  "react": "18.3.1",
30
30
  "react-dom": "18.3.1"
31
31
  },
32
32
  "devDependencies": {
33
- "@webiny/build-tools": "6.4.11"
33
+ "@webiny/build-tools": "6.4.12-beta.1"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public"
@@ -13,15 +13,13 @@ function LinkPlugin({ validateUrl }) {
13
13
  if (null === payload) {
14
14
  toggleLink(payload);
15
15
  return true;
16
- }
17
- if ("string" == typeof payload) {
16
+ } else if ("string" == typeof payload) {
18
17
  if (void 0 === validateUrl || validateUrl(payload)) {
19
18
  toggleLink(payload);
20
19
  return true;
21
20
  }
22
21
  return false;
23
- }
24
- {
22
+ } else {
25
23
  const { url, ...attrs } = payload;
26
24
  toggleLink(url, attrs);
27
25
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/LinkPlugin/LinkPlugin.js","sources":["../../../src/plugins/LinkPlugin/LinkPlugin.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n mergeRegister,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND\n} from \"lexical\";\nimport { LinkNode, TOGGLE_LINK_COMMAND, toggleLink } from \"@webiny/lexical-nodes\";\nimport { useRichTextEditor } from \"~/hooks/index.js\";\n\ntype Props = {\n validateUrl?: (url: string) => boolean;\n};\n\nexport function LinkPlugin({ validateUrl }: Props): null {\n const { editor } = useRichTextEditor();\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error(\"LinkPlugin: LinkNode not registered in the editor!\");\n }\n\n const commands = [\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n payload => {\n if (payload === null) {\n toggleLink(payload);\n return true;\n } else if (typeof payload === \"string\") {\n if (validateUrl === undefined || validateUrl(payload)) {\n toggleLink(payload);\n return true;\n }\n return false;\n } else {\n const { url, ...attrs } = payload;\n toggleLink(url, attrs);\n return true;\n }\n },\n COMMAND_PRIORITY_LOW\n )\n ];\n\n if (validateUrl !== undefined) {\n commands.push(\n editor.registerCommand(\n PASTE_COMMAND,\n event => {\n const selection = $getSelection();\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false;\n }\n const clipboardText = event.clipboardData.getData(\"text\");\n if (!validateUrl(clipboardText)) {\n return false;\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some(node => $isElementNode(node))) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, clipboardText);\n event.preventDefault();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }\n\n return mergeRegister(...commands);\n }, [editor, validateUrl]);\n\n return null;\n}\n"],"names":["LinkPlugin","validateUrl","editor","useRichTextEditor","useEffect","LinkNode","Error","commands","TOGGLE_LINK_COMMAND","payload","toggleLink","undefined","url","attrs","COMMAND_PRIORITY_LOW","PASTE_COMMAND","event","selection","$getSelection","$isRangeSelection","ClipboardEvent","clipboardText","node","$isElementNode","mergeRegister"],"mappings":";;;;AAgBO,SAASA,WAAW,EAAEC,WAAW,EAAS;IAC7C,MAAM,EAAEC,MAAM,EAAE,GAAGC;IAEnBC,UAAU;QACN,IAAI,CAACF,OAAO,QAAQ,CAAC;YAACG;SAAS,GAC3B,MAAM,IAAIC,MAAM;QAGpB,MAAMC,WAAW;YACbL,OAAO,eAAe,CAClBM,qBACAC,CAAAA;gBACI,IAAIA,AAAY,SAAZA,SAAkB;oBAClBC,WAAWD;oBACX,OAAO;gBACX;gBAAO,IAAI,AAAmB,YAAnB,OAAOA,SAAsB;oBACpC,IAAIR,AAAgBU,WAAhBV,eAA6BA,YAAYQ,UAAU;wBACnDC,WAAWD;wBACX,OAAO;oBACX;oBACA,OAAO;gBACX;gBAAO;oBACH,MAAM,EAAEG,GAAG,EAAE,GAAGC,OAAO,GAAGJ;oBAC1BC,WAAWE,KAAKC;oBAChB,OAAO;gBACX;YACJ,GACAC;SAEP;QAED,IAAIb,AAAgBU,WAAhBV,aACAM,SAAS,IAAI,CACTL,OAAO,eAAe,CAClBa,eACAC,CAAAA;YACI,MAAMC,YAAYC;YAClB,IACI,CAACC,kBAAkBF,cACnBA,UAAU,WAAW,MACrB,CAAED,CAAAA,iBAAiBI,cAAa,KAChCJ,AAAuB,QAAvBA,MAAM,aAAa,EAEnB,OAAO;YAEX,MAAMK,gBAAgBL,MAAM,aAAa,CAAC,OAAO,CAAC;YAClD,IAAI,CAACf,YAAYoB,gBACb,OAAO;YAGX,IAAI,CAACJ,UAAU,QAAQ,GAAG,IAAI,CAACK,CAAAA,OAAQC,eAAeD,QAAQ;gBAC1DpB,OAAO,eAAe,CAACM,qBAAqBa;gBAC5CL,MAAM,cAAc;gBACpB,OAAO;YACX;YACA,OAAO;QACX,GACAF;QAKZ,OAAOU,iBAAiBjB;IAC5B,GAAG;QAACL;QAAQD;KAAY;IAExB,OAAO;AACX"}
1
+ {"version":3,"file":"plugins/LinkPlugin/LinkPlugin.js","sources":["../../../src/plugins/LinkPlugin/LinkPlugin.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n mergeRegister,\n COMMAND_PRIORITY_LOW,\n PASTE_COMMAND\n} from \"lexical\";\nimport { LinkNode, TOGGLE_LINK_COMMAND, toggleLink } from \"@webiny/lexical-nodes\";\nimport { useRichTextEditor } from \"~/hooks/index.js\";\n\ntype Props = {\n validateUrl?: (url: string) => boolean;\n};\n\nexport function LinkPlugin({ validateUrl }: Props): null {\n const { editor } = useRichTextEditor();\n\n useEffect(() => {\n if (!editor.hasNodes([LinkNode])) {\n throw new Error(\"LinkPlugin: LinkNode not registered in the editor!\");\n }\n\n const commands = [\n editor.registerCommand(\n TOGGLE_LINK_COMMAND,\n payload => {\n if (payload === null) {\n toggleLink(payload);\n return true;\n } else if (typeof payload === \"string\") {\n if (validateUrl === undefined || validateUrl(payload)) {\n toggleLink(payload);\n return true;\n }\n return false;\n } else {\n const { url, ...attrs } = payload;\n toggleLink(url, attrs);\n return true;\n }\n },\n COMMAND_PRIORITY_LOW\n )\n ];\n\n if (validateUrl !== undefined) {\n commands.push(\n editor.registerCommand(\n PASTE_COMMAND,\n event => {\n const selection = $getSelection();\n if (\n !$isRangeSelection(selection) ||\n selection.isCollapsed() ||\n !(event instanceof ClipboardEvent) ||\n event.clipboardData == null\n ) {\n return false;\n }\n const clipboardText = event.clipboardData.getData(\"text\");\n if (!validateUrl(clipboardText)) {\n return false;\n }\n // If we select nodes that are elements then avoid applying the link.\n if (!selection.getNodes().some(node => $isElementNode(node))) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, clipboardText);\n event.preventDefault();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }\n\n return mergeRegister(...commands);\n }, [editor, validateUrl]);\n\n return null;\n}\n"],"names":["LinkPlugin","validateUrl","editor","useRichTextEditor","useEffect","LinkNode","Error","commands","TOGGLE_LINK_COMMAND","payload","toggleLink","undefined","url","attrs","COMMAND_PRIORITY_LOW","PASTE_COMMAND","event","selection","$getSelection","$isRangeSelection","ClipboardEvent","clipboardText","node","$isElementNode","mergeRegister"],"mappings":";;;;AAgBO,SAASA,WAAW,EAAEC,WAAW,EAAS;IAC7C,MAAM,EAAEC,MAAM,EAAE,GAAGC;IAEnBC,UAAU;QACN,IAAI,CAACF,OAAO,QAAQ,CAAC;YAACG;SAAS,GAC3B,MAAM,IAAIC,MAAM;QAGpB,MAAMC,WAAW;YACbL,OAAO,eAAe,CAClBM,qBACAC,CAAAA;gBACI,IAAIA,AAAY,SAAZA,SAAkB;oBAClBC,WAAWD;oBACX,OAAO;gBACX,OAAO,IAAI,AAAmB,YAAnB,OAAOA,SAAsB;oBACpC,IAAIR,AAAgBU,WAAhBV,eAA6BA,YAAYQ,UAAU;wBACnDC,WAAWD;wBACX,OAAO;oBACX;oBACA,OAAO;gBACX,OAAO;oBACH,MAAM,EAAEG,GAAG,EAAE,GAAGC,OAAO,GAAGJ;oBAC1BC,WAAWE,KAAKC;oBAChB,OAAO;gBACX;YACJ,GACAC;SAEP;QAED,IAAIb,AAAgBU,WAAhBV,aACAM,SAAS,IAAI,CACTL,OAAO,eAAe,CAClBa,eACAC,CAAAA;YACI,MAAMC,YAAYC;YAClB,IACI,CAACC,kBAAkBF,cACnBA,UAAU,WAAW,MACrB,CAAED,CAAAA,iBAAiBI,cAAa,KAChCJ,AAAuB,QAAvBA,MAAM,aAAa,EAEnB,OAAO;YAEX,MAAMK,gBAAgBL,MAAM,aAAa,CAAC,OAAO,CAAC;YAClD,IAAI,CAACf,YAAYoB,gBACb,OAAO;YAGX,IAAI,CAACJ,UAAU,QAAQ,GAAG,IAAI,CAACK,CAAAA,OAAQC,eAAeD,QAAQ;gBAC1DpB,OAAO,eAAe,CAACM,qBAAqBa;gBAC5CL,MAAM,cAAc;gBACpB,OAAO;YACX;YACA,OAAO;QACX,GACAF;QAKZ,OAAOU,iBAAiBjB;IAC5B,GAAG;QAACL;QAAQD;KAAY;IAExB,OAAO;AACX"}
@@ -7,7 +7,7 @@ function getSelectedNode(selection) {
7
7
  if (anchorNode === focusNode) return anchorNode;
8
8
  const isBackward = selection.isBackward();
9
9
  if (isBackward) return $isAtNodeEnd(focus) ? anchorNode : focusNode;
10
- return $isAtNodeEnd(anchor) ? focusNode : anchorNode;
10
+ else return $isAtNodeEnd(anchor) ? focusNode : anchorNode;
11
11
  }
12
12
  export { getSelectedNode };
13
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils/getSelectedNode.js","sources":["../../src/utils/getSelectedNode.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n } else {\n return $isAtNodeEnd(anchor) ? focusNode : anchorNode;\n }\n}\n"],"names":["getSelectedNode","selection","anchor","focus","anchorNode","focusNode","isBackward","$isAtNodeEnd"],"mappings":";AAUO,SAASA,gBAAgBC,SAAyB;IACrD,MAAMC,SAASD,UAAU,MAAM;IAC/B,MAAME,QAAQF,UAAU,KAAK;IAC7B,MAAMG,aAAaH,UAAU,MAAM,CAAC,OAAO;IAC3C,MAAMI,YAAYJ,UAAU,KAAK,CAAC,OAAO;IACzC,IAAIG,eAAeC,WACf,OAAOD;IAEX,MAAME,aAAaL,UAAU,UAAU;IACvC,IAAIK,YACA,OAAOC,aAAaJ,SAASC,aAAaC;IAE1C,OAAOE,aAAaL,UAAUG,YAAYD;AAElD"}
1
+ {"version":3,"file":"utils/getSelectedNode.js","sources":["../../src/utils/getSelectedNode.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n } else {\n return $isAtNodeEnd(anchor) ? focusNode : anchorNode;\n }\n}\n"],"names":["getSelectedNode","selection","anchor","focus","anchorNode","focusNode","isBackward","$isAtNodeEnd"],"mappings":";AAUO,SAASA,gBAAgBC,SAAyB;IACrD,MAAMC,SAASD,UAAU,MAAM;IAC/B,MAAME,QAAQF,UAAU,KAAK;IAC7B,MAAMG,aAAaH,UAAU,MAAM,CAAC,OAAO;IAC3C,MAAMI,YAAYJ,UAAU,KAAK,CAAC,OAAO;IACzC,IAAIG,eAAeC,WACf,OAAOD;IAEX,MAAME,aAAaL,UAAU,UAAU;IACvC,IAAIK,YACA,OAAOC,aAAaJ,SAASC,aAAaC;SAE1C,OAAOE,aAAaL,UAAUG,YAAYD;AAElD"}
package/utils/rect.js CHANGED
@@ -58,8 +58,7 @@ class Rect {
58
58
  },
59
59
  result
60
60
  };
61
- }
62
- {
61
+ } else {
63
62
  const { top, left, bottom, right } = target;
64
63
  return top >= this._top && top <= this._bottom && bottom >= this._top && bottom <= this._bottom && left >= this._left && left <= this._right && right >= this._left && right <= this._right;
65
64
  }
package/utils/rect.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils/rect.js","sources":["../../src/utils/rect.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type { Point } from \"./point.js\";\nimport { isPoint } from \"./point.js\";\n\ntype ContainsPointReturn = {\n result: boolean;\n reason: {\n isOnTopSide: boolean;\n isOnBottomSide: boolean;\n isOnLeftSide: boolean;\n isOnRightSide: boolean;\n };\n};\n\nexport class Rect {\n private readonly _left: number;\n private readonly _top: number;\n private readonly _right: number;\n private readonly _bottom: 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 get top(): number {\n return this._top;\n }\n\n get right(): number {\n return this._right;\n }\n\n get bottom(): number {\n return this._bottom;\n }\n\n get left(): number {\n return this._left;\n }\n\n get width(): number {\n return Math.abs(this._left - this._right);\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top);\n }\n\n public equals({ top, left, bottom, right }: Rect): boolean {\n return (\n top === this._top &&\n bottom === this._bottom &&\n left === this._left &&\n right === this._right\n );\n }\n\n public contains({ x, y }: Point): ContainsPointReturn;\n public contains({ top, left, bottom, right }: Rect): boolean;\n public contains(target: Point | Rect): boolean | ContainsPointReturn {\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 } else {\n const { top, left, bottom, right } = 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\n public intersectsWith(rect: Rect): boolean {\n const { left: x1, top: y1, width: w1, height: h1 } = rect;\n const { left: x2, top: y2, width: w2, height: h2 } = 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 public generateNewRect({\n left = this.left,\n top = this.top,\n right = this.right,\n bottom = this.bottom\n }): Rect {\n return new Rect(left, top, right, bottom);\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 { y: top, x: left } = startPoint;\n const { y: bottom, x: right } = endPoint;\n return Rect.fromLTRB(left, top, right, bottom);\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { top, width, left, height } = dom.getBoundingClientRect();\n return Rect.fromLWTH(left, width, top, height);\n }\n}\n"],"names":["Rect","left","top","right","bottom","physicTop","physicBottom","physicLeft","physicRight","Math","target","isPoint","x","y","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","result","rect","x1","y1","w1","h1","x2","y2","w2","h2","maxX","maxY","minX","minY","width","height","startPoint","endPoint","dom"],"mappings":"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"}
1
+ {"version":3,"file":"utils/rect.js","sources":["../../src/utils/rect.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type { Point } from \"./point.js\";\nimport { isPoint } from \"./point.js\";\n\ntype ContainsPointReturn = {\n result: boolean;\n reason: {\n isOnTopSide: boolean;\n isOnBottomSide: boolean;\n isOnLeftSide: boolean;\n isOnRightSide: boolean;\n };\n};\n\nexport class Rect {\n private readonly _left: number;\n private readonly _top: number;\n private readonly _right: number;\n private readonly _bottom: 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 get top(): number {\n return this._top;\n }\n\n get right(): number {\n return this._right;\n }\n\n get bottom(): number {\n return this._bottom;\n }\n\n get left(): number {\n return this._left;\n }\n\n get width(): number {\n return Math.abs(this._left - this._right);\n }\n\n get height(): number {\n return Math.abs(this._bottom - this._top);\n }\n\n public equals({ top, left, bottom, right }: Rect): boolean {\n return (\n top === this._top &&\n bottom === this._bottom &&\n left === this._left &&\n right === this._right\n );\n }\n\n public contains({ x, y }: Point): ContainsPointReturn;\n public contains({ top, left, bottom, right }: Rect): boolean;\n public contains(target: Point | Rect): boolean | ContainsPointReturn {\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 } else {\n const { top, left, bottom, right } = 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\n public intersectsWith(rect: Rect): boolean {\n const { left: x1, top: y1, width: w1, height: h1 } = rect;\n const { left: x2, top: y2, width: w2, height: h2 } = 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 public generateNewRect({\n left = this.left,\n top = this.top,\n right = this.right,\n bottom = this.bottom\n }): Rect {\n return new Rect(left, top, right, bottom);\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 { y: top, x: left } = startPoint;\n const { y: bottom, x: right } = endPoint;\n return Rect.fromLTRB(left, top, right, bottom);\n }\n\n static fromDOM(dom: HTMLElement): Rect {\n const { top, width, left, height } = dom.getBoundingClientRect();\n return Rect.fromLWTH(left, width, top, height);\n }\n}\n"],"names":["Rect","left","top","right","bottom","physicTop","physicBottom","physicLeft","physicRight","Math","target","isPoint","x","y","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","result","rect","x1","y1","w1","h1","x2","y2","w2","h2","maxX","maxY","minX","minY","width","height","startPoint","endPoint","dom"],"mappings":"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"}