@webiny/lexical-editor 0.0.0-unstable.13771d80a8

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 (210) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/components/AddRichTextEditorNodeType.d.ts +6 -0
  4. package/components/AddRichTextEditorNodeType.js +28 -0
  5. package/components/AddRichTextEditorNodeType.js.map +1 -0
  6. package/components/AddRichTextEditorPlugin.d.ts +12 -0
  7. package/components/AddRichTextEditorPlugin.js +33 -0
  8. package/components/AddRichTextEditorPlugin.js.map +1 -0
  9. package/components/AddToolbarAction.d.ts +7 -0
  10. package/components/AddToolbarAction.js +33 -0
  11. package/components/AddToolbarAction.js.map +1 -0
  12. package/components/Editor/HeadingEditor.d.ts +7 -0
  13. package/components/Editor/HeadingEditor.js +28 -0
  14. package/components/Editor/HeadingEditor.js.map +1 -0
  15. package/components/Editor/ParagraphEditor.d.ts +7 -0
  16. package/components/Editor/ParagraphEditor.js +30 -0
  17. package/components/Editor/ParagraphEditor.js.map +1 -0
  18. package/components/Editor/RichTextEditor.d.ts +25 -0
  19. package/components/Editor/RichTextEditor.js +112 -0
  20. package/components/Editor/RichTextEditor.js.map +1 -0
  21. package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +7 -0
  22. package/components/LexicalEditorConfig/LexicalEditorConfig.js +15 -0
  23. package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -0
  24. package/components/LexicalHtmlRenderer.d.ts +11 -0
  25. package/components/LexicalHtmlRenderer.js +48 -0
  26. package/components/LexicalHtmlRenderer.js.map +1 -0
  27. package/components/Toolbar/HeadingToolbar.d.ts +12 -0
  28. package/components/Toolbar/HeadingToolbar.js +23 -0
  29. package/components/Toolbar/HeadingToolbar.js.map +1 -0
  30. package/components/Toolbar/ParagraphToolbar.d.ts +12 -0
  31. package/components/Toolbar/ParagraphToolbar.js +23 -0
  32. package/components/Toolbar/ParagraphToolbar.js.map +1 -0
  33. package/components/Toolbar/Toolbar.css +423 -0
  34. package/components/Toolbar/Toolbar.d.ts +13 -0
  35. package/components/Toolbar/Toolbar.js +161 -0
  36. package/components/Toolbar/Toolbar.js.map +1 -0
  37. package/components/ToolbarActions/BoldAction.d.ts +5 -0
  38. package/components/ToolbarActions/BoldAction.js +38 -0
  39. package/components/ToolbarActions/BoldAction.js.map +1 -0
  40. package/components/ToolbarActions/BulletListAction.d.ts +5 -0
  41. package/components/ToolbarActions/BulletListAction.js +89 -0
  42. package/components/ToolbarActions/BulletListAction.js.map +1 -0
  43. package/components/ToolbarActions/CodeHighlightAction.d.ts +6 -0
  44. package/components/ToolbarActions/CodeHighlightAction.js +39 -0
  45. package/components/ToolbarActions/CodeHighlightAction.js.map +1 -0
  46. package/components/ToolbarActions/FontColorAction.d.ts +11 -0
  47. package/components/ToolbarActions/FontColorAction.js +88 -0
  48. package/components/ToolbarActions/FontColorAction.js.map +1 -0
  49. package/components/ToolbarActions/FontSizeAction.d.ts +2 -0
  50. package/components/ToolbarActions/FontSizeAction.js +104 -0
  51. package/components/ToolbarActions/FontSizeAction.js.map +1 -0
  52. package/components/ToolbarActions/ItalicAction.d.ts +5 -0
  53. package/components/ToolbarActions/ItalicAction.js +38 -0
  54. package/components/ToolbarActions/ItalicAction.js.map +1 -0
  55. package/components/ToolbarActions/LinkAction.d.ts +7 -0
  56. package/components/ToolbarActions/LinkAction.js +69 -0
  57. package/components/ToolbarActions/LinkAction.js.map +1 -0
  58. package/components/ToolbarActions/NumberedListAction.d.ts +5 -0
  59. package/components/ToolbarActions/NumberedListAction.js +89 -0
  60. package/components/ToolbarActions/NumberedListAction.js.map +1 -0
  61. package/components/ToolbarActions/QuoteAction.d.ts +4 -0
  62. package/components/ToolbarActions/QuoteAction.js +66 -0
  63. package/components/ToolbarActions/QuoteAction.js.map +1 -0
  64. package/components/ToolbarActions/UnderlineAction.d.ts +5 -0
  65. package/components/ToolbarActions/UnderlineAction.js +38 -0
  66. package/components/ToolbarActions/UnderlineAction.js.map +1 -0
  67. package/components/ToolbarPresets/HeadingToolbarPreset.d.ts +2 -0
  68. package/components/ToolbarPresets/HeadingToolbarPreset.js +48 -0
  69. package/components/ToolbarPresets/HeadingToolbarPreset.js.map +1 -0
  70. package/components/ToolbarPresets/ParagraphToolbarPreset.d.ts +2 -0
  71. package/components/ToolbarPresets/ParagraphToolbarPreset.js +63 -0
  72. package/components/ToolbarPresets/ParagraphToolbarPreset.js.map +1 -0
  73. package/context/FontColorActionContext.d.ts +6 -0
  74. package/context/FontColorActionContext.js +10 -0
  75. package/context/FontColorActionContext.js.map +1 -0
  76. package/context/RichTextEditorContext.d.ts +11 -0
  77. package/context/RichTextEditorContext.js +29 -0
  78. package/context/RichTextEditorContext.js.map +1 -0
  79. package/hooks/useFontColorPicker.d.ts +2 -0
  80. package/hooks/useFontColorPicker.js +15 -0
  81. package/hooks/useFontColorPicker.js.map +1 -0
  82. package/hooks/useRichTextEditor.d.ts +2 -0
  83. package/hooks/useRichTextEditor.js +15 -0
  84. package/hooks/useRichTextEditor.js.map +1 -0
  85. package/images/icons/LICENSE.md +5 -0
  86. package/images/icons/chat-square-quote.svg +1 -0
  87. package/images/icons/chevron-down.svg +1 -0
  88. package/images/icons/code.svg +1 -0
  89. package/images/icons/font-color.svg +1 -0
  90. package/images/icons/link.svg +1 -0
  91. package/images/icons/list-ol.svg +1 -0
  92. package/images/icons/list-ul.svg +1 -0
  93. package/images/icons/pencil-fill.svg +1 -0
  94. package/images/icons/text-center.svg +1 -0
  95. package/images/icons/text-left.svg +1 -0
  96. package/images/icons/text-paragraph.svg +1 -0
  97. package/images/icons/text-right.svg +1 -0
  98. package/images/icons/type-bold.svg +1 -0
  99. package/images/icons/type-h1.svg +1 -0
  100. package/images/icons/type-h2.svg +1 -0
  101. package/images/icons/type-h3.svg +1 -0
  102. package/images/icons/type-h4.svg +1 -0
  103. package/images/icons/type-h5.svg +1 -0
  104. package/images/icons/type-h6.svg +1 -0
  105. package/images/icons/type-italic.svg +1 -0
  106. package/images/icons/type-strikethrough.svg +1 -0
  107. package/images/icons/type-underline.svg +1 -0
  108. package/images/icons/unlink_icon.svg +1 -0
  109. package/index.d.ts +37 -0
  110. package/index.js +260 -0
  111. package/index.js.map +1 -0
  112. package/nodes/FontColorNode.d.ts +43 -0
  113. package/nodes/FontColorNode.js +127 -0
  114. package/nodes/FontColorNode.js.map +1 -0
  115. package/nodes/webinyNodes.d.ts +2 -0
  116. package/nodes/webinyNodes.js +16 -0
  117. package/nodes/webinyNodes.js.map +1 -0
  118. package/package.json +38 -0
  119. package/plugins/AutoLinkPlugin/AutoLinkPlugin.d.ts +11 -0
  120. package/plugins/AutoLinkPlugin/AutoLinkPlugin.js +46 -0
  121. package/plugins/AutoLinkPlugin/AutoLinkPlugin.js.map +1 -0
  122. package/plugins/AutoLinkPlugin/index.d.ts +1 -0
  123. package/plugins/AutoLinkPlugin/index.js +16 -0
  124. package/plugins/AutoLinkPlugin/index.js.map +1 -0
  125. package/plugins/BlurEventPlugin/BlurEventPlugin.d.ts +7 -0
  126. package/plugins/BlurEventPlugin/BlurEventPlugin.js +28 -0
  127. package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -0
  128. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.d.ts +17 -0
  129. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js +88 -0
  130. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js.map +1 -0
  131. package/plugins/ClickableLinkPlugin/index.d.ts +1 -0
  132. package/plugins/ClickableLinkPlugin/index.js +16 -0
  133. package/plugins/ClickableLinkPlugin/index.js.map +1 -0
  134. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.d.ts +1 -0
  135. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +20 -0
  136. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -0
  137. package/plugins/CodeHighlightPlugin/index.d.ts +1 -0
  138. package/plugins/CodeHighlightPlugin/index.js +16 -0
  139. package/plugins/CodeHighlightPlugin/index.js.map +1 -0
  140. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.css +118 -0
  141. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.d.ts +7 -0
  142. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +222 -0
  143. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -0
  144. package/plugins/FloatingLinkEditorPlugin/index.d.ts +1 -0
  145. package/plugins/FloatingLinkEditorPlugin/index.js +16 -0
  146. package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -0
  147. package/plugins/FontColorPlugin/FontColorPlugin.d.ts +2 -0
  148. package/plugins/FontColorPlugin/FontColorPlugin.js +38 -0
  149. package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -0
  150. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.d.ts +8 -0
  151. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js +34 -0
  152. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js.map +1 -0
  153. package/plugins/LexicalUpdateStatePlugin/index.d.ts +1 -0
  154. package/plugins/LexicalUpdateStatePlugin/index.js +16 -0
  155. package/plugins/LexicalUpdateStatePlugin/index.js.map +1 -0
  156. package/themes/webinyLexicalTheme.css +422 -0
  157. package/themes/webinyLexicalTheme.d.ts +7 -0
  158. package/themes/webinyLexicalTheme.js +86 -0
  159. package/themes/webinyLexicalTheme.js.map +1 -0
  160. package/types.d.ts +3 -0
  161. package/types.js +12 -0
  162. package/types.js.map +1 -0
  163. package/ui/Divider.d.ts +2 -0
  164. package/ui/Divider.js +13 -0
  165. package/ui/Divider.js.map +1 -0
  166. package/ui/DropDown.d.ts +26 -0
  167. package/ui/DropDown.js +173 -0
  168. package/ui/DropDown.js.map +1 -0
  169. package/ui/Input.css +32 -0
  170. package/ui/LinkPreview.css +69 -0
  171. package/ui/LinkPreview.d.ts +12 -0
  172. package/ui/LinkPreview.js +101 -0
  173. package/ui/LinkPreview.js.map +1 -0
  174. package/ui/Placeholder.css +23 -0
  175. package/ui/Placeholder.d.ts +13 -0
  176. package/ui/Placeholder.js +24 -0
  177. package/ui/Placeholder.js.map +1 -0
  178. package/ui/TextInput.d.ts +18 -0
  179. package/ui/TextInput.js +39 -0
  180. package/ui/TextInput.js.map +1 -0
  181. package/ui/ToolbarActionDialog.d.ts +12 -0
  182. package/ui/ToolbarActionDialog.js +107 -0
  183. package/ui/ToolbarActionDialog.js.map +1 -0
  184. package/utils/generateInitialLexicalValue.d.ts +5 -0
  185. package/utils/generateInitialLexicalValue.js +29 -0
  186. package/utils/generateInitialLexicalValue.js.map +1 -0
  187. package/utils/getDOMRangeRect.d.ts +10 -0
  188. package/utils/getDOMRangeRect.js +27 -0
  189. package/utils/getDOMRangeRect.js.map +1 -0
  190. package/utils/getSelectedNode.d.ts +2 -0
  191. package/utils/getSelectedNode.js +30 -0
  192. package/utils/getSelectedNode.js.map +1 -0
  193. package/utils/isValidJSON.d.ts +1 -0
  194. package/utils/isValidJSON.js +18 -0
  195. package/utils/isValidJSON.js.map +1 -0
  196. package/utils/isValidLexicalData.d.ts +2 -0
  197. package/utils/isValidLexicalData.js +24 -0
  198. package/utils/isValidLexicalData.js.map +1 -0
  199. package/utils/point.d.ts +21 -0
  200. package/utils/point.js +77 -0
  201. package/utils/point.js.map +1 -0
  202. package/utils/rect.d.ts +47 -0
  203. package/utils/rect.js +169 -0
  204. package/utils/rect.js.map +1 -0
  205. package/utils/sanitizeUrl.d.ts +8 -0
  206. package/utils/sanitizeUrl.js +27 -0
  207. package/utils/sanitizeUrl.js.map +1 -0
  208. package/utils/setFloatingElemPosition.d.ts +3 -0
  209. package/utils/setFloatingElemPosition.js +40 -0
  210. package/utils/setFloatingElemPosition.js.map +1 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ToolbarActionDialog = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ function MenuContainer(_ref) {
12
+ var children = _ref.children,
13
+ menuContainerRef = _ref.menuContainerRef,
14
+ onClose = _ref.onClose;
15
+ var handleKeyDown = function handleKeyDown(event) {
16
+ var key = event.key;
17
+ if (["Escape", "ArrowUp", "ArrowDown", "Tab"].includes(key)) {
18
+ event.preventDefault();
19
+ }
20
+ if (key === "Escape" || key === "Tab") {
21
+ onClose();
22
+ }
23
+ };
24
+ var handleContainerClick = function handleContainerClick(e) {
25
+ e.preventDefault();
26
+ console.log("click", e);
27
+ };
28
+ return /*#__PURE__*/React.createElement("div", {
29
+ style: {
30
+ position: "relative"
31
+ }
32
+ }, /*#__PURE__*/React.createElement("div", {
33
+ onClick: function onClick(e) {
34
+ return handleContainerClick(e);
35
+ },
36
+ style: {
37
+ position: "absolute",
38
+ top: -10,
39
+ left: 0,
40
+ width: 240,
41
+ backgroundColor: "#fff"
42
+ },
43
+ ref: menuContainerRef !== null && menuContainerRef !== void 0 ? menuContainerRef : null,
44
+ onKeyDown: handleKeyDown
45
+ }, children));
46
+ }
47
+ var ToolbarActionDialog = function ToolbarActionDialog(_ref2) {
48
+ var disabled = _ref2.disabled,
49
+ buttonAriaLabel = _ref2.buttonAriaLabel,
50
+ buttonClassName = _ref2.buttonClassName,
51
+ buttonIconClassName = _ref2.buttonIconClassName,
52
+ buttonLabel = _ref2.buttonLabel,
53
+ children = _ref2.children,
54
+ stopCloseOnClickSelf = _ref2.stopCloseOnClickSelf;
55
+ var menuWindowRef = (0, React.useRef)(null);
56
+ var _useState = (0, React.useState)(false),
57
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
+ showDropDown = _useState2[0],
59
+ setShowDropDown = _useState2[1];
60
+ var handleClose = function handleClose() {
61
+ debugger;
62
+ if (menuWindowRef && menuWindowRef.current) {
63
+ setShowDropDown(false);
64
+ menuWindowRef.current.focus();
65
+ }
66
+ };
67
+ (0, React.useEffect)(function () {
68
+ if (!showDropDown) {
69
+ return;
70
+ }
71
+ var handle = function handle(event) {
72
+ /* const target = event.target;
73
+ if (!button.contains(target as Node)) {
74
+ setShowDropDown(false);
75
+ }*/
76
+ console.log("handle", event);
77
+ };
78
+ document.addEventListener("click", handle);
79
+ return function () {
80
+ document.removeEventListener("click", handle);
81
+ };
82
+ }, [showDropDown, stopCloseOnClickSelf]);
83
+ return /*#__PURE__*/React.createElement("div", {
84
+ style: {
85
+ position: "relative"
86
+ }
87
+ }, /*#__PURE__*/React.createElement("button", {
88
+ style: {
89
+ position: "relative"
90
+ },
91
+ disabled: disabled,
92
+ "aria-label": buttonAriaLabel || buttonLabel,
93
+ className: buttonClassName,
94
+ onClick: function onClick() {
95
+ setShowDropDown(!showDropDown);
96
+ }
97
+ }, buttonIconClassName && /*#__PURE__*/React.createElement("span", {
98
+ className: buttonIconClassName
99
+ }), buttonLabel && /*#__PURE__*/React.createElement("span", {
100
+ className: "text dropdown-button-text"
101
+ }, buttonLabel), /*#__PURE__*/React.createElement("i", {
102
+ className: "chevron-down"
103
+ })), showDropDown && /*#__PURE__*/React.createElement(MenuContainer, {
104
+ onClose: handleClose
105
+ }, children));
106
+ };
107
+ exports.ToolbarActionDialog = ToolbarActionDialog;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MenuContainer","children","menuContainerRef","onClose","handleKeyDown","event","key","includes","preventDefault","handleContainerClick","e","console","log","position","top","left","width","backgroundColor","ToolbarActionDialog","disabled","buttonAriaLabel","buttonClassName","buttonIconClassName","buttonLabel","stopCloseOnClickSelf","menuWindowRef","useRef","useState","showDropDown","setShowDropDown","handleClose","current","focus","useEffect","handle","document","addEventListener","removeEventListener"],"sources":["ToolbarActionDialog.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\nfunction MenuContainer({\n children,\n menuContainerRef,\n onClose\n}: {\n children: React.ReactNode | React.ReactNode[];\n menuContainerRef?: React.Ref<HTMLDivElement>;\n onClose: () => void;\n}) {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const key = event.key;\n\n if ([\"Escape\", \"ArrowUp\", \"ArrowDown\", \"Tab\"].includes(key)) {\n event.preventDefault();\n }\n\n if (key === \"Escape\" || key === \"Tab\") {\n onClose();\n }\n };\n\n const handleContainerClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n e.preventDefault();\n console.log(\"click\", e);\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n onClick={e => handleContainerClick(e)}\n style={{\n position: \"absolute\",\n top: -10,\n left: 0,\n width: 240,\n backgroundColor: \"#fff\"\n }}\n ref={menuContainerRef ?? null}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n </div>\n );\n}\ninterface ToolbarActionDialogProps {\n disabled: boolean;\n buttonLabel?: string;\n buttonAriaLabel: string;\n buttonClassName: string;\n buttonIconClassName: string;\n children: React.ReactNode | React.ReactNode[];\n stopCloseOnClickSelf?: boolean;\n}\n\nexport const ToolbarActionDialog: React.FC<ToolbarActionDialogProps> = ({\n disabled,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n buttonLabel,\n children,\n stopCloseOnClickSelf\n}): JSX.Element => {\n const menuWindowRef = useRef<HTMLDivElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n debugger;\n if (menuWindowRef && menuWindowRef.current) {\n setShowDropDown(false);\n menuWindowRef.current.focus();\n }\n };\n\n useEffect(() => {\n if (!showDropDown) {\n return;\n }\n\n const handle = (event: MouseEvent) => {\n /* const target = event.target;\n if (!button.contains(target as Node)) {\n setShowDropDown(false);\n }*/\n console.log(\"handle\", event);\n };\n document.addEventListener(\"click\", handle);\n\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }, [showDropDown, stopCloseOnClickSelf]);\n\n return (\n <div style={{ position: \"relative\" }}>\n <button\n style={{ position: \"relative\" }}\n disabled={disabled}\n aria-label={buttonAriaLabel || buttonLabel}\n className={buttonClassName}\n onClick={() => {\n setShowDropDown(!showDropDown);\n }}\n >\n {buttonIconClassName && <span className={buttonIconClassName} />}\n {buttonLabel && <span className=\"text dropdown-button-text\">{buttonLabel}</span>}\n <i className=\"chevron-down\" />\n </button>\n {showDropDown && <MenuContainer onClose={handleClose}>{children}</MenuContainer>}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { LexicalValue } from "../types";
2
+ /**
3
+ * @description Basic JSON data string that will initialize the editor.
4
+ */
5
+ export declare const generateInitialLexicalValue: () => LexicalValue;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateInitialLexicalValue = void 0;
7
+ /**
8
+ * @description Basic JSON data string that will initialize the editor.
9
+ */
10
+ var generateInitialLexicalValue = function generateInitialLexicalValue() {
11
+ return JSON.stringify({
12
+ root: {
13
+ children: [{
14
+ children: [],
15
+ direction: null,
16
+ format: "",
17
+ indent: 0,
18
+ type: "paragraph",
19
+ version: 1
20
+ }],
21
+ direction: null,
22
+ format: "",
23
+ indent: 0,
24
+ type: "root",
25
+ version: 1
26
+ }
27
+ });
28
+ };
29
+ exports.generateInitialLexicalValue = generateInitialLexicalValue;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["generateInitialLexicalValue","JSON","stringify","root","children","direction","format","indent","type","version"],"sources":["generateInitialLexicalValue.ts"],"sourcesContent":["import { LexicalValue } from \"~/types\";\n\n/**\n * @description Basic JSON data string that will initialize the editor.\n */\nexport const generateInitialLexicalValue = (): LexicalValue => {\n return JSON.stringify({\n root: {\n children: [\n {\n children: [],\n direction: null,\n format: \"\",\n indent: 0,\n type: \"paragraph\",\n version: 1\n }\n ],\n direction: null,\n format: \"\",\n indent: 0,\n type: \"root\",\n version: 1\n }\n });\n};\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACO,IAAMA,2BAA2B,GAAG,SAA9BA,2BAA2B,GAAuB;EAC3D,OAAOC,IAAI,CAACC,SAAS,CAAC;IAClBC,IAAI,EAAE;MACFC,QAAQ,EAAE,CACN;QACIA,QAAQ,EAAE,EAAE;QACZC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,EAAE;QACVC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,WAAW;QACjBC,OAAO,EAAE;MACb,CAAC,CACJ;MACDJ,SAAS,EAAE,IAAI;MACfC,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE,CAAC;MACTC,IAAI,EAAE,MAAM;MACZC,OAAO,EAAE;IACb;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="web" />
2
+ /// <reference types="react" />
3
+ /**
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ */
10
+ export declare function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDOMRangeRect = getDOMRangeRect;
7
+ /**
8
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
9
+ *
10
+ * This source code is licensed under the MIT license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ *
13
+ */
14
+ function getDOMRangeRect(nativeSelection, rootElement) {
15
+ var domRange = nativeSelection.getRangeAt(0);
16
+ var rect;
17
+ if (nativeSelection.anchorNode === rootElement) {
18
+ var inner = rootElement;
19
+ while (inner.firstElementChild != null) {
20
+ inner = inner.firstElementChild;
21
+ }
22
+ rect = inner.getBoundingClientRect();
23
+ } else {
24
+ rect = domRange.getBoundingClientRect();
25
+ }
26
+ return rect;
27
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","getRangeAt","rect","anchorNode","inner","firstElementChild","getBoundingClientRect"],"sources":["getDOMRangeRect.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 */\nexport function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect {\n const domRange = nativeSelection.getRangeAt(0);\n\n let rect;\n\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement;\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement;\n }\n rect = inner.getBoundingClientRect();\n } else {\n rect = domRange.getBoundingClientRect();\n }\n\n return rect;\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAe,CAACC,eAA0B,EAAEC,WAAwB,EAAW;EAC3F,IAAMC,QAAQ,GAAGF,eAAe,CAACG,UAAU,CAAC,CAAC,CAAC;EAE9C,IAAIC,IAAI;EAER,IAAIJ,eAAe,CAACK,UAAU,KAAKJ,WAAW,EAAE;IAC5C,IAAIK,KAAK,GAAGL,WAAW;IACvB,OAAOK,KAAK,CAACC,iBAAiB,IAAI,IAAI,EAAE;MACpCD,KAAK,GAAGA,KAAK,CAACC,iBAAgC;IAClD;IACAH,IAAI,GAAGE,KAAK,CAACE,qBAAqB,EAAE;EACxC,CAAC,MAAM;IACHJ,IAAI,GAAGF,QAAQ,CAACM,qBAAqB,EAAE;EAC3C;EAEA,OAAOJ,IAAI;AACf"}
@@ -0,0 +1,2 @@
1
+ import { ElementNode, RangeSelection, TextNode } from "lexical";
2
+ export declare function getSelectedNode(selection: RangeSelection): TextNode | ElementNode;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectedNode = getSelectedNode;
7
+ var _selection = require("@lexical/selection");
8
+ /**
9
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
10
+ *
11
+ * This source code is licensed under the MIT license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ *
14
+ */
15
+
16
+ function getSelectedNode(selection) {
17
+ var anchor = selection.anchor;
18
+ var focus = selection.focus;
19
+ var anchorNode = selection.anchor.getNode();
20
+ var focusNode = selection.focus.getNode();
21
+ if (anchorNode === focusNode) {
22
+ return anchorNode;
23
+ }
24
+ var isBackward = selection.isBackward();
25
+ if (isBackward) {
26
+ return (0, _selection.$isAtNodeEnd)(focus) ? anchorNode : focusNode;
27
+ } else {
28
+ return (0, _selection.$isAtNodeEnd)(anchor) ? focusNode : anchorNode;
29
+ }
30
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getSelectedNode","selection","anchor","focus","anchorNode","getNode","focusNode","isBackward","$isAtNodeEnd"],"sources":["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 { 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"],"mappings":";;;;;;AAOA;AAPA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,SAASA,eAAe,CAACC,SAAyB,EAA0B;EAC/E,IAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;EAC/B,IAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;EAC7B,IAAMC,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;EAC7C,IAAMC,SAAS,GAAGL,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE;EAC3C,IAAID,UAAU,KAAKE,SAAS,EAAE;IAC1B,OAAOF,UAAU;EACrB;EACA,IAAMG,UAAU,GAAGN,SAAS,CAACM,UAAU,EAAE;EACzC,IAAIA,UAAU,EAAE;IACZ,OAAO,IAAAC,uBAAY,EAACL,KAAK,CAAC,GAAGC,UAAU,GAAGE,SAAS;EACvD,CAAC,MAAM;IACH,OAAO,IAAAE,uBAAY,EAACN,MAAM,CAAC,GAAGI,SAAS,GAAGF,UAAU;EACxD;AACJ"}
@@ -0,0 +1 @@
1
+ export declare const isValidJSON: (value: string | undefined | null) => boolean;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isValidJSON = void 0;
7
+ var isValidJSON = function isValidJSON(value) {
8
+ if (!value) {
9
+ return false;
10
+ }
11
+ try {
12
+ var o = JSON.parse(value);
13
+ return !!o && typeof o === "object" && !Array.isArray(o);
14
+ } catch (_unused) {
15
+ return false;
16
+ }
17
+ };
18
+ exports.isValidJSON = isValidJSON;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidJSON","value","o","JSON","parse","Array","isArray"],"sources":["isValidJSON.ts"],"sourcesContent":["export const isValidJSON = (value: string | undefined | null): boolean => {\n if (!value) {\n return false;\n }\n try {\n const o = JSON.parse(value);\n return !!o && typeof o === \"object\" && !Array.isArray(o);\n } catch {\n return false;\n }\n};\n"],"mappings":";;;;;;AAAO,IAAMA,WAAW,GAAG,SAAdA,WAAW,CAAIC,KAAgC,EAAc;EACtE,IAAI,CAACA,KAAK,EAAE;IACR,OAAO,KAAK;EAChB;EACA,IAAI;IACA,IAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC;IAC3B,OAAO,CAAC,CAACC,CAAC,IAAI,OAAOA,CAAC,KAAK,QAAQ,IAAI,CAACG,KAAK,CAACC,OAAO,CAACJ,CAAC,CAAC;EAC5D,CAAC,CAAC,gBAAM;IACJ,OAAO,KAAK;EAChB;AACJ,CAAC;AAAC"}
@@ -0,0 +1,2 @@
1
+ import { LexicalValue } from "../types";
2
+ export declare const isValidLexicalData: (editorStateValue: LexicalValue | null) => boolean;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isValidLexicalData = void 0;
7
+ var _isValidJSON = require("./isValidJSON");
8
+ /*
9
+ * @description Checks for valid lexical data.
10
+ *
11
+ * Check for first level of properties that empty editor state data need to have.
12
+ * @see generateInitialLexicalValue
13
+ */
14
+ var isValidLexicalData = function isValidLexicalData(editorStateValue) {
15
+ if (!editorStateValue) {
16
+ return false;
17
+ }
18
+ if (!(0, _isValidJSON.isValidJSON)(editorStateValue)) {
19
+ return false;
20
+ }
21
+ var data = JSON.parse(editorStateValue);
22
+ return !!data["root"];
23
+ };
24
+ exports.isValidLexicalData = isValidLexicalData;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidLexicalData","editorStateValue","isValidJSON","data","JSON","parse"],"sources":["isValidLexicalData.ts"],"sourcesContent":["import { isValidJSON } from \"~/utils/isValidJSON\";\nimport { LexicalValue } from \"~/types\";\n/*\n * @description Checks for valid lexical data.\n *\n * Check for first level of properties that empty editor state data need to have.\n * @see generateInitialLexicalValue\n */\nexport const isValidLexicalData = (editorStateValue: LexicalValue | null): boolean => {\n if (!editorStateValue) {\n return false;\n }\n if (!isValidJSON(editorStateValue)) {\n return false;\n }\n const data = JSON.parse(editorStateValue);\n return !!data[\"root\"];\n};\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAkB,CAAIC,gBAAqC,EAAc;EAClF,IAAI,CAACA,gBAAgB,EAAE;IACnB,OAAO,KAAK;EAChB;EACA,IAAI,CAAC,IAAAC,wBAAW,EAACD,gBAAgB,CAAC,EAAE;IAChC,OAAO,KAAK;EAChB;EACA,IAAME,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACJ,gBAAgB,CAAC;EACzC,OAAO,CAAC,CAACE,IAAI,CAAC,MAAM,CAAC;AACzB,CAAC;AAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export declare class Point {
9
+ private readonly _x;
10
+ private readonly _y;
11
+ constructor(x: number, y: number);
12
+ get x(): number;
13
+ get y(): number;
14
+ equals({ x, y }: Point): boolean;
15
+ calcDeltaXTo({ x }: Point): number;
16
+ calcDeltaYTo({ y }: Point): number;
17
+ calcHorizontalDistanceTo(point: Point): number;
18
+ calcVerticalDistance(point: Point): number;
19
+ calcDistanceTo(point: Point): number;
20
+ }
21
+ export declare function isPoint(x: unknown): x is Point;
package/utils/point.js ADDED
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Point = void 0;
8
+ exports.isPoint = isPoint;
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ /**
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ *
18
+ */
19
+ var Point = /*#__PURE__*/function () {
20
+ function Point(x, y) {
21
+ (0, _classCallCheck2.default)(this, Point);
22
+ (0, _defineProperty2.default)(this, "_x", void 0);
23
+ (0, _defineProperty2.default)(this, "_y", void 0);
24
+ this._x = x;
25
+ this._y = y;
26
+ }
27
+ (0, _createClass2.default)(Point, [{
28
+ key: "x",
29
+ get: function get() {
30
+ return this._x;
31
+ }
32
+ }, {
33
+ key: "y",
34
+ get: function get() {
35
+ return this._y;
36
+ }
37
+ }, {
38
+ key: "equals",
39
+ value: function equals(_ref) {
40
+ var x = _ref.x,
41
+ y = _ref.y;
42
+ return this.x === x && this.y === y;
43
+ }
44
+ }, {
45
+ key: "calcDeltaXTo",
46
+ value: function calcDeltaXTo(_ref2) {
47
+ var x = _ref2.x;
48
+ return this.x - x;
49
+ }
50
+ }, {
51
+ key: "calcDeltaYTo",
52
+ value: function calcDeltaYTo(_ref3) {
53
+ var y = _ref3.y;
54
+ return this.y - y;
55
+ }
56
+ }, {
57
+ key: "calcHorizontalDistanceTo",
58
+ value: function calcHorizontalDistanceTo(point) {
59
+ return Math.abs(this.calcDeltaXTo(point));
60
+ }
61
+ }, {
62
+ key: "calcVerticalDistance",
63
+ value: function calcVerticalDistance(point) {
64
+ return Math.abs(this.calcDeltaYTo(point));
65
+ }
66
+ }, {
67
+ key: "calcDistanceTo",
68
+ value: function calcDistanceTo(point) {
69
+ return Math.sqrt(Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2));
70
+ }
71
+ }]);
72
+ return Point;
73
+ }();
74
+ exports.Point = Point;
75
+ function isPoint(x) {
76
+ return x instanceof Point;
77
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Point","x","y","_x","_y","point","Math","abs","calcDeltaXTo","calcDeltaYTo","sqrt","pow","isPoint"],"sources":["point.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 */\nexport class Point {\n private readonly _x: number;\n private readonly _y: number;\n\n constructor(x: number, y: number) {\n this._x = x;\n 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 public equals({ x, y }: Point): boolean {\n return this.x === x && 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 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 calcDistanceTo(point: Point): number {\n return Math.sqrt(\n Math.pow(this.calcDeltaXTo(point), 2) + Math.pow(this.calcDeltaYTo(point), 2)\n );\n }\n}\n\nexport function isPoint(x: unknown): x is Point {\n return x instanceof Point;\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAOaA,KAAK;EAId,eAAYC,CAAS,EAAEC,CAAS,EAAE;IAAA;IAAA;IAAA;IAC9B,IAAI,CAACC,EAAE,GAAGF,CAAC;IACX,IAAI,CAACG,EAAE,GAAGF,CAAC;EACf;EAAC;IAAA;IAAA,KAED,eAAgB;MACZ,OAAO,IAAI,CAACC,EAAE;IAClB;EAAC;IAAA;IAAA,KAED,eAAgB;MACZ,OAAO,IAAI,CAACC,EAAE;IAClB;EAAC;IAAA;IAAA,OAED,sBAAwC;MAAA,IAAxBH,CAAC,QAADA,CAAC;QAAEC,CAAC,QAADA,CAAC;MAChB,OAAO,IAAI,CAACD,CAAC,KAAKA,CAAC,IAAI,IAAI,CAACC,CAAC,KAAKA,CAAC;IACvC;EAAC;IAAA;IAAA,OAED,6BAA0C;MAAA,IAApBD,CAAC,SAADA,CAAC;MACnB,OAAO,IAAI,CAACA,CAAC,GAAGA,CAAC;IACrB;EAAC;IAAA;IAAA,OAED,6BAA0C;MAAA,IAApBC,CAAC,SAADA,CAAC;MACnB,OAAO,IAAI,CAACA,CAAC,GAAGA,CAAC;IACrB;EAAC;IAAA;IAAA,OAED,kCAAgCG,KAAY,EAAU;MAClD,OAAOC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACC,YAAY,CAACH,KAAK,CAAC,CAAC;IAC7C;EAAC;IAAA;IAAA,OAED,8BAA4BA,KAAY,EAAU;MAC9C,OAAOC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACE,YAAY,CAACJ,KAAK,CAAC,CAAC;IAC7C;EAAC;IAAA;IAAA,OAED,wBAAsBA,KAAY,EAAU;MACxC,OAAOC,IAAI,CAACI,IAAI,CACZJ,IAAI,CAACK,GAAG,CAAC,IAAI,CAACH,YAAY,CAACH,KAAK,CAAC,EAAE,CAAC,CAAC,GAAGC,IAAI,CAACK,GAAG,CAAC,IAAI,CAACF,YAAY,CAACJ,KAAK,CAAC,EAAE,CAAC,CAAC,CAChF;IACL;EAAC;EAAA;AAAA;AAAA;AAGE,SAASO,OAAO,CAACX,CAAU,EAAc;EAC5C,OAAOA,CAAC,YAAYD,KAAK;AAC7B"}
@@ -0,0 +1,47 @@
1
+ /// <reference types="react" />
2
+ /// <reference types="web" />
3
+ /**
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ */
10
+ import { Point } from "./point";
11
+ declare type ContainsPointReturn = {
12
+ result: boolean;
13
+ reason: {
14
+ isOnTopSide: boolean;
15
+ isOnBottomSide: boolean;
16
+ isOnLeftSide: boolean;
17
+ isOnRightSide: boolean;
18
+ };
19
+ };
20
+ export declare class Rect {
21
+ private readonly _left;
22
+ private readonly _top;
23
+ private readonly _right;
24
+ private readonly _bottom;
25
+ constructor(left: number, top: number, right: number, bottom: number);
26
+ get top(): number;
27
+ get right(): number;
28
+ get bottom(): number;
29
+ get left(): number;
30
+ get width(): number;
31
+ get height(): number;
32
+ equals({ top, left, bottom, right }: Rect): boolean;
33
+ contains({ x, y }: Point): ContainsPointReturn;
34
+ contains({ top, left, bottom, right }: Rect): boolean;
35
+ intersectsWith(rect: Rect): boolean;
36
+ generateNewRect({ left, top, right, bottom }: {
37
+ left?: number | undefined;
38
+ top?: number | undefined;
39
+ right?: number | undefined;
40
+ bottom?: number | undefined;
41
+ }): Rect;
42
+ static fromLTRB(left: number, top: number, right: number, bottom: number): Rect;
43
+ static fromLWTH(left: number, width: number, top: number, height: number): Rect;
44
+ static fromPoints(startPoint: Point, endPoint: Point): Rect;
45
+ static fromDOM(dom: HTMLElement): Rect;
46
+ }
47
+ export {};
package/utils/rect.js ADDED
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Rect = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _point = require("./point");
13
+ /**
14
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
15
+ *
16
+ * This source code is licensed under the MIT license found in the
17
+ * LICENSE file in the root directory of this source tree.
18
+ *
19
+ */
20
+ var Rect = /*#__PURE__*/function () {
21
+ function Rect(left, top, right, bottom) {
22
+ (0, _classCallCheck2.default)(this, Rect);
23
+ (0, _defineProperty2.default)(this, "_left", void 0);
24
+ (0, _defineProperty2.default)(this, "_top", void 0);
25
+ (0, _defineProperty2.default)(this, "_right", void 0);
26
+ (0, _defineProperty2.default)(this, "_bottom", void 0);
27
+ var _ref = top <= bottom ? [top, bottom] : [bottom, top],
28
+ _ref2 = (0, _slicedToArray2.default)(_ref, 2),
29
+ physicTop = _ref2[0],
30
+ physicBottom = _ref2[1];
31
+ var _ref3 = left <= right ? [left, right] : [right, left],
32
+ _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
33
+ physicLeft = _ref4[0],
34
+ physicRight = _ref4[1];
35
+ this._top = physicTop;
36
+ this._right = physicRight;
37
+ this._left = physicLeft;
38
+ this._bottom = physicBottom;
39
+ }
40
+ (0, _createClass2.default)(Rect, [{
41
+ key: "top",
42
+ get: function get() {
43
+ return this._top;
44
+ }
45
+ }, {
46
+ key: "right",
47
+ get: function get() {
48
+ return this._right;
49
+ }
50
+ }, {
51
+ key: "bottom",
52
+ get: function get() {
53
+ return this._bottom;
54
+ }
55
+ }, {
56
+ key: "left",
57
+ get: function get() {
58
+ return this._left;
59
+ }
60
+ }, {
61
+ key: "width",
62
+ get: function get() {
63
+ return Math.abs(this._left - this._right);
64
+ }
65
+ }, {
66
+ key: "height",
67
+ get: function get() {
68
+ return Math.abs(this._bottom - this._top);
69
+ }
70
+ }, {
71
+ key: "equals",
72
+ value: function equals(_ref5) {
73
+ var top = _ref5.top,
74
+ left = _ref5.left,
75
+ bottom = _ref5.bottom,
76
+ right = _ref5.right;
77
+ return top === this._top && bottom === this._bottom && left === this._left && right === this._right;
78
+ }
79
+ }, {
80
+ key: "contains",
81
+ value: function contains(target) {
82
+ if ((0, _point.isPoint)(target)) {
83
+ var x = target.x,
84
+ y = target.y;
85
+ var isOnTopSide = y < this._top;
86
+ var isOnBottomSide = y > this._bottom;
87
+ var isOnLeftSide = x < this._left;
88
+ var isOnRightSide = x > this._right;
89
+ var result = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide;
90
+ return {
91
+ reason: {
92
+ isOnBottomSide: isOnBottomSide,
93
+ isOnLeftSide: isOnLeftSide,
94
+ isOnRightSide: isOnRightSide,
95
+ isOnTopSide: isOnTopSide
96
+ },
97
+ result: result
98
+ };
99
+ } else {
100
+ var top = target.top,
101
+ left = target.left,
102
+ bottom = target.bottom,
103
+ right = target.right;
104
+ 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;
105
+ }
106
+ }
107
+ }, {
108
+ key: "intersectsWith",
109
+ value: function intersectsWith(rect) {
110
+ var x1 = rect.left,
111
+ y1 = rect.top,
112
+ w1 = rect.width,
113
+ h1 = rect.height;
114
+ var x2 = this.left,
115
+ y2 = this.top,
116
+ w2 = this.width,
117
+ h2 = this.height;
118
+ var maxX = x1 + w1 >= x2 + w2 ? x1 + w1 : x2 + w2;
119
+ var maxY = y1 + h1 >= y2 + h2 ? y1 + h1 : y2 + h2;
120
+ var minX = x1 <= x2 ? x1 : x2;
121
+ var minY = y1 <= y2 ? y1 : y2;
122
+ return maxX - minX <= w1 + w2 && maxY - minY <= h1 + h2;
123
+ }
124
+ }, {
125
+ key: "generateNewRect",
126
+ value: function generateNewRect(_ref6) {
127
+ var _ref6$left = _ref6.left,
128
+ left = _ref6$left === void 0 ? this.left : _ref6$left,
129
+ _ref6$top = _ref6.top,
130
+ top = _ref6$top === void 0 ? this.top : _ref6$top,
131
+ _ref6$right = _ref6.right,
132
+ right = _ref6$right === void 0 ? this.right : _ref6$right,
133
+ _ref6$bottom = _ref6.bottom,
134
+ bottom = _ref6$bottom === void 0 ? this.bottom : _ref6$bottom;
135
+ return new Rect(left, top, right, bottom);
136
+ }
137
+ }], [{
138
+ key: "fromLTRB",
139
+ value: function fromLTRB(left, top, right, bottom) {
140
+ return new Rect(left, top, right, bottom);
141
+ }
142
+ }, {
143
+ key: "fromLWTH",
144
+ value: function fromLWTH(left, width, top, height) {
145
+ return new Rect(left, top, left + width, top + height);
146
+ }
147
+ }, {
148
+ key: "fromPoints",
149
+ value: function fromPoints(startPoint, endPoint) {
150
+ var top = startPoint.y,
151
+ left = startPoint.x;
152
+ var bottom = endPoint.y,
153
+ right = endPoint.x;
154
+ return Rect.fromLTRB(left, top, right, bottom);
155
+ }
156
+ }, {
157
+ key: "fromDOM",
158
+ value: function fromDOM(dom) {
159
+ var _dom$getBoundingClien = dom.getBoundingClientRect(),
160
+ top = _dom$getBoundingClien.top,
161
+ width = _dom$getBoundingClien.width,
162
+ left = _dom$getBoundingClien.left,
163
+ height = _dom$getBoundingClien.height;
164
+ return Rect.fromLWTH(left, width, top, height);
165
+ }
166
+ }]);
167
+ return Rect;
168
+ }();
169
+ exports.Rect = Rect;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Rect","left","top","right","bottom","physicTop","physicBottom","physicLeft","physicRight","_top","_right","_left","_bottom","Math","abs","target","isPoint","x","y","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","result","reason","rect","x1","y1","w1","width","h1","height","x2","y2","w2","h2","maxX","maxY","minX","minY","startPoint","endPoint","fromLTRB","dom","getBoundingClientRect","fromLWTH"],"sources":["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 { isPoint, Point } from \"./point\";\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"],"mappings":"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"}