@webiny/lexical-editor 6.3.0 → 6.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/commands/image.js +2 -1
  2. package/commands/image.js.map +1 -1
  3. package/commands/index.js +0 -2
  4. package/commands/list.js +4 -3
  5. package/commands/list.js.map +1 -1
  6. package/commands/quote.js +2 -1
  7. package/commands/quote.js.map +1 -1
  8. package/commands/toolbar.js +2 -1
  9. package/commands/toolbar.js.map +1 -1
  10. package/commands/typography.js +2 -1
  11. package/commands/typography.js.map +1 -1
  12. package/components/Editor/EnsureHeadingTagPlugin.js +8 -15
  13. package/components/Editor/EnsureHeadingTagPlugin.js.map +1 -1
  14. package/components/Editor/RichTextEditor.js +82 -121
  15. package/components/Editor/RichTextEditor.js.map +1 -1
  16. package/components/Editor/normalizeInputValue.js +11 -13
  17. package/components/Editor/normalizeInputValue.js.map +1 -1
  18. package/components/LexicalEditorConfig/LexicalEditorConfig.js +24 -15
  19. package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -1
  20. package/components/LexicalEditorConfig/components/Node.js +21 -26
  21. package/components/LexicalEditorConfig/components/Node.js.map +1 -1
  22. package/components/LexicalEditorConfig/components/Plugin.js +21 -26
  23. package/components/LexicalEditorConfig/components/Plugin.js.map +1 -1
  24. package/components/LexicalEditorConfig/components/ToolbarElement.js +21 -26
  25. package/components/LexicalEditorConfig/components/ToolbarElement.js.map +1 -1
  26. package/components/LexicalHtmlRenderer.js +35 -40
  27. package/components/LexicalHtmlRenderer.js.map +1 -1
  28. package/components/Toolbar/StaticToolbar.js +11 -16
  29. package/components/Toolbar/StaticToolbar.js.map +1 -1
  30. package/components/ToolbarActions/BoldAction.js +16 -19
  31. package/components/ToolbarActions/BoldAction.js.map +1 -1
  32. package/components/ToolbarActions/BulletListAction.js +24 -32
  33. package/components/ToolbarActions/BulletListAction.js.map +1 -1
  34. package/components/ToolbarActions/CodeHighlightAction.js +16 -19
  35. package/components/ToolbarActions/CodeHighlightAction.js.map +1 -1
  36. package/components/ToolbarActions/FontColorAction.js +32 -38
  37. package/components/ToolbarActions/FontColorAction.js.map +1 -1
  38. package/components/ToolbarActions/ImageAction.js +28 -30
  39. package/components/ToolbarActions/ImageAction.js.map +1 -1
  40. package/components/ToolbarActions/ItalicAction.js +16 -19
  41. package/components/ToolbarActions/ItalicAction.js.map +1 -1
  42. package/components/ToolbarActions/LinkAction.js +25 -30
  43. package/components/ToolbarActions/LinkAction.js.map +1 -1
  44. package/components/ToolbarActions/NumberedListAction.js +28 -37
  45. package/components/ToolbarActions/NumberedListAction.js.map +1 -1
  46. package/components/ToolbarActions/QuoteAction.js +22 -27
  47. package/components/ToolbarActions/QuoteAction.js.map +1 -1
  48. package/components/ToolbarActions/TextAlignmentAction.js +38 -50
  49. package/components/ToolbarActions/TextAlignmentAction.js.map +1 -1
  50. package/components/ToolbarActions/TypographyAction.js +69 -99
  51. package/components/ToolbarActions/TypographyAction.js.map +1 -1
  52. package/components/ToolbarActions/UnderlineAction.js +16 -19
  53. package/components/ToolbarActions/UnderlineAction.js.map +1 -1
  54. package/context/FontColorActionContext.js +3 -2
  55. package/context/FontColorActionContext.js.map +1 -1
  56. package/context/RichTextEditorContext.js +26 -29
  57. package/context/RichTextEditorContext.js.map +1 -1
  58. package/context/SharedHistoryContext.js +11 -15
  59. package/context/SharedHistoryContext.js.map +1 -1
  60. package/context/TextAlignmentActionContextProps.js +3 -2
  61. package/context/TextAlignmentActionContextProps.js.map +1 -1
  62. package/context/TypographyActionContext.js +3 -2
  63. package/context/TypographyActionContext.js.map +1 -1
  64. package/exports/admin/lexical.js +2 -20
  65. package/hooks/index.js +0 -2
  66. package/hooks/useCurrentElement.js +18 -21
  67. package/hooks/useCurrentElement.js.map +1 -1
  68. package/hooks/useCurrentSelection.js +39 -48
  69. package/hooks/useCurrentSelection.js.map +1 -1
  70. package/hooks/useFontColorPicker.js +5 -6
  71. package/hooks/useFontColorPicker.js.map +1 -1
  72. package/hooks/useIsMounted.js +7 -8
  73. package/hooks/useIsMounted.js.map +1 -1
  74. package/hooks/useRichTextEditor.js +5 -6
  75. package/hooks/useRichTextEditor.js.map +1 -1
  76. package/hooks/useTextAlignmentAction.js +5 -6
  77. package/hooks/useTextAlignmentAction.js.map +1 -1
  78. package/hooks/useTypographyAction.js +5 -6
  79. package/hooks/useTypographyAction.js.map +1 -1
  80. package/images/icons/chat-square-quote.js +19 -0
  81. package/images/icons/chat-square-quote.js.map +1 -0
  82. package/images/icons/chevron-down.js +18 -0
  83. package/images/icons/chevron-down.js.map +1 -0
  84. package/images/icons/code.js +17 -0
  85. package/images/icons/code.js.map +1 -0
  86. package/images/icons/font-color.js +17 -0
  87. package/images/icons/font-color.js.map +1 -0
  88. package/images/icons/indent.js +18 -0
  89. package/images/icons/indent.js.map +1 -0
  90. package/images/icons/insert-image.js +20 -0
  91. package/images/icons/insert-image.js.map +1 -0
  92. package/images/icons/justify.js +19 -0
  93. package/images/icons/justify.js.map +1 -0
  94. package/images/icons/link.js +19 -0
  95. package/images/icons/link.js.map +1 -0
  96. package/images/icons/list-ol.js +20 -0
  97. package/images/icons/list-ol.js.map +1 -0
  98. package/images/icons/list-ul.js +18 -0
  99. package/images/icons/list-ul.js.map +1 -0
  100. package/images/icons/outdent.js +18 -0
  101. package/images/icons/outdent.js.map +1 -0
  102. package/images/icons/pencil-fill.js +17 -0
  103. package/images/icons/pencil-fill.js.map +1 -0
  104. package/images/icons/text-center.js +18 -0
  105. package/images/icons/text-center.js.map +1 -0
  106. package/images/icons/text-left.js +18 -0
  107. package/images/icons/text-left.js.map +1 -0
  108. package/images/icons/text-paragraph.js +18 -0
  109. package/images/icons/text-paragraph.js.map +1 -0
  110. package/images/icons/text-right.js +18 -0
  111. package/images/icons/text-right.js.map +1 -0
  112. package/images/icons/type-bold.js +17 -0
  113. package/images/icons/type-bold.js.map +1 -0
  114. package/images/icons/type-h1.js +17 -0
  115. package/images/icons/type-h1.js.map +1 -0
  116. package/images/icons/type-h2.js +17 -0
  117. package/images/icons/type-h2.js.map +1 -0
  118. package/images/icons/type-h3.js +17 -0
  119. package/images/icons/type-h3.js.map +1 -0
  120. package/images/icons/type-h4.js +17 -0
  121. package/images/icons/type-h4.js.map +1 -0
  122. package/images/icons/type-h5.js +17 -0
  123. package/images/icons/type-h5.js.map +1 -0
  124. package/images/icons/type-h6.js +17 -0
  125. package/images/icons/type-h6.js.map +1 -0
  126. package/images/icons/type-italic.js +17 -0
  127. package/images/icons/type-italic.js.map +1 -0
  128. package/images/icons/type-strikethrough.js +17 -0
  129. package/images/icons/type-strikethrough.js.map +1 -0
  130. package/images/icons/type-underline.js +17 -0
  131. package/images/icons/type-underline.js.map +1 -0
  132. package/images/icons/unlink_icon.js +27 -0
  133. package/images/icons/unlink_icon.js.map +1 -0
  134. package/index.js +5 -18
  135. package/package.json +7 -7
  136. package/plugins/BlurEventPlugin/BlurEventPlugin.js +11 -14
  137. package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -1
  138. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +7 -8
  139. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -1
  140. package/plugins/CodeHighlightPlugin/index.js +0 -2
  141. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +16 -24
  142. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js.map +1 -1
  143. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js +37 -51
  144. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js.map +1 -1
  145. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +6 -5
  146. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -1
  147. package/plugins/FloatingLinkEditorPlugin/index.js +0 -2
  148. package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js +6 -9
  149. package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js.map +1 -1
  150. package/plugins/FloatingLinkEditorPlugin/types.js +0 -3
  151. package/plugins/FloatingLinkEditorPlugin/useFloatingLinkEditor.js +101 -108
  152. package/plugins/FloatingLinkEditorPlugin/useFloatingLinkEditor.js.map +1 -1
  153. package/plugins/FontColorPlugin/FontColorPlugin.js +14 -19
  154. package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -1
  155. package/plugins/FontColorPlugin/applyColorToNode.js +5 -4
  156. package/plugins/FontColorPlugin/applyColorToNode.js.map +1 -1
  157. package/plugins/FontColorPlugin/applyColorToSelection.js +42 -60
  158. package/plugins/FontColorPlugin/applyColorToSelection.js.map +1 -1
  159. package/plugins/ImagesPlugin/ImagesPlugin.js +79 -121
  160. package/plugins/ImagesPlugin/ImagesPlugin.js.map +1 -1
  161. package/plugins/LinkPlugin/LinkPlugin.js +46 -52
  162. package/plugins/LinkPlugin/LinkPlugin.js.map +1 -1
  163. package/plugins/ListPLugin/ListPlugin.js +44 -52
  164. package/plugins/ListPLugin/ListPlugin.js.map +1 -1
  165. package/plugins/QuoteNodePlugin/QuoteNodePlugin.js +18 -19
  166. package/plugins/QuoteNodePlugin/QuoteNodePlugin.js.map +1 -1
  167. package/plugins/StateHandlingPlugin.js +55 -64
  168. package/plugins/StateHandlingPlugin.js.map +1 -1
  169. package/plugins/TypographyPlugin/TypographyPlugin.js +13 -20
  170. package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -1
  171. package/static/svg/chat-square-quote.123cfa24.svg +1 -0
  172. package/static/svg/chevron-down.d9636921.svg +1 -0
  173. package/static/svg/code.912b1f4d.svg +1 -0
  174. package/static/svg/font-color.4f0c0de5.svg +1 -0
  175. package/static/svg/indent.4d78e483.svg +3 -0
  176. package/static/svg/insert-image.354465f1.svg +4 -0
  177. package/static/svg/justify.dab42aec.svg +3 -0
  178. package/static/svg/link.b774de25.svg +1 -0
  179. package/static/svg/list-ol.d64946f3.svg +1 -0
  180. package/static/svg/list-ul.1d54da3f.svg +1 -0
  181. package/static/svg/outdent.5c13ff16.svg +3 -0
  182. package/static/svg/pencil-fill.94cb216b.svg +1 -0
  183. package/static/svg/text-center.a411e780.svg +1 -0
  184. package/static/svg/text-left.54f41f4e.svg +1 -0
  185. package/static/svg/text-paragraph.61674422.svg +1 -0
  186. package/static/svg/text-right.9288b7a2.svg +1 -0
  187. package/static/svg/type-bold.7e3e270b.svg +1 -0
  188. package/static/svg/type-h1.f292ffe1.svg +1 -0
  189. package/static/svg/type-h2.a9d1aa48.svg +1 -0
  190. package/static/svg/type-h3.4a29ff88.svg +1 -0
  191. package/static/svg/type-h4.7f48750c.svg +1 -0
  192. package/static/svg/type-h5.14b4ac56.svg +1 -0
  193. package/static/svg/type-h6.4e9dfe2d.svg +1 -0
  194. package/static/svg/type-italic.d8e45748.svg +1 -0
  195. package/static/svg/type-strikethrough.2694a816.svg +1 -0
  196. package/static/svg/type-underline.104a0ed5.svg +1 -0
  197. package/static/svg/unlink_icon.074ceed3.svg +1 -0
  198. package/types.js +0 -8
  199. package/ui/ContentEditable.js +6 -14
  200. package/ui/ContentEditable.js.map +1 -1
  201. package/ui/Divider.js +6 -5
  202. package/ui/Divider.js.map +1 -1
  203. package/ui/DropDown.js +146 -176
  204. package/ui/DropDown.js.map +1 -1
  205. package/ui/ImageResizer.js +173 -204
  206. package/ui/ImageResizer.js.map +1 -1
  207. package/ui/LinkPreview.js +61 -84
  208. package/ui/LinkPreview.js.map +1 -1
  209. package/ui/Placeholder.js +9 -20
  210. package/ui/Placeholder.js.map +1 -1
  211. package/ui/TextInput.js +17 -30
  212. package/ui/TextInput.js.map +1 -1
  213. package/ui/ToolbarActionDialog.js +64 -73
  214. package/ui/ToolbarActionDialog.js.map +1 -1
  215. package/utils/canUseDOM.js +2 -1
  216. package/utils/canUseDOM.js.map +1 -1
  217. package/utils/files.js +9 -8
  218. package/utils/files.js.map +1 -1
  219. package/utils/getDOMRangeRect.js +10 -20
  220. package/utils/getDOMRangeRect.js.map +1 -1
  221. package/utils/getSelectedNode.js +9 -20
  222. package/utils/getSelectedNode.js.map +1 -1
  223. package/utils/getTransparentImage.js +2 -3
  224. package/utils/getTransparentImage.js.map +1 -1
  225. package/utils/insertImage.js +9 -11
  226. package/utils/insertImage.js.map +1 -1
  227. package/utils/isAnchorLink.js +2 -3
  228. package/utils/isAnchorLink.js.map +1 -1
  229. package/utils/isChildOfFloatingToolbar.js +6 -9
  230. package/utils/isChildOfFloatingToolbar.js.map +1 -1
  231. package/utils/isHTMLElement.js +3 -9
  232. package/utils/isHTMLElement.js.map +1 -1
  233. package/utils/isValidJSON.js +9 -10
  234. package/utils/isValidJSON.js.map +1 -1
  235. package/utils/isValidLexicalData.js +17 -20
  236. package/utils/isValidLexicalData.js.map +1 -1
  237. package/utils/point.js +32 -45
  238. package/utils/point.js.map +1 -1
  239. package/utils/rect.js +92 -125
  240. package/utils/rect.js.map +1 -1
  241. package/utils/sanitizeUrl.js +8 -21
  242. package/utils/sanitizeUrl.js.map +1 -1
  243. package/utils/setFloatingElemPosition.js +23 -27
  244. package/utils/setFloatingElemPosition.js.map +1 -1
  245. package/commands/index.js.map +0 -1
  246. package/exports/admin/lexical.js.map +0 -1
  247. package/hooks/index.js.map +0 -1
  248. package/index.js.map +0 -1
  249. package/plugins/CodeHighlightPlugin/index.js.map +0 -1
  250. package/plugins/FloatingLinkEditorPlugin/index.js.map +0 -1
  251. package/plugins/FloatingLinkEditorPlugin/types.js.map +0 -1
  252. package/types.js.map +0 -1
package/ui/LinkPreview.js CHANGED
@@ -1,97 +1,74 @@
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
-
9
1
  import "./LinkPreview.css";
10
- import * as React from "react";
11
- import { Suspense } from "react";
12
- // Cached responses or running request promises
2
+ import * as __rspack_external_react from "react";
13
3
  const PREVIEW_CACHE = {};
14
4
  const URL_MATCHER = /((https?:\/\/(www\.)?)|(www\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;
15
5
  function useSuspenseRequest(url) {
16
- let cached = PREVIEW_CACHE[url];
17
- if (!url.match(URL_MATCHER)) {
18
- return {
19
- preview: null
20
- };
21
- }
22
- if (!cached) {
23
- cached = PREVIEW_CACHE[url] = fetch(`/api/link-preview?url=${encodeURI(url)}`).then(response => response.json()).then(preview => {
24
- PREVIEW_CACHE[url] = preview;
25
- return preview;
26
- }).catch(() => {
27
- PREVIEW_CACHE[url] = {
6
+ let cached = PREVIEW_CACHE[url];
7
+ if (!url.match(URL_MATCHER)) return {
28
8
  preview: null
29
- };
9
+ };
10
+ if (!cached) cached = PREVIEW_CACHE[url] = fetch(`/api/link-preview?url=${encodeURI(url)}`).then((response)=>response.json()).then((preview)=>{
11
+ PREVIEW_CACHE[url] = preview;
12
+ return preview;
13
+ }).catch(()=>{
14
+ PREVIEW_CACHE[url] = {
15
+ preview: null
16
+ };
30
17
  });
31
- }
32
- if (cached instanceof Promise) {
33
- throw cached;
34
- }
35
- return cached;
18
+ if (cached instanceof Promise) throw cached;
19
+ return cached;
36
20
  }
37
- function LinkPreviewContent({
38
- url
39
- }) {
40
- const {
41
- preview
42
- } = useSuspenseRequest(url);
43
- if (preview === null) {
44
- return null;
45
- }
46
- return /*#__PURE__*/React.createElement("div", {
47
- className: "CustomLinkPreview__container"
48
- }, preview.img && /*#__PURE__*/React.createElement("div", {
49
- className: "CustomLinkPreview__imageWrapper"
50
- }, /*#__PURE__*/React.createElement("img", {
51
- src: preview.img,
52
- alt: preview.title,
53
- className: "CustomLinkPreview__image"
54
- })), preview.domain && /*#__PURE__*/React.createElement("div", {
55
- className: "CustomLinkPreview__domain"
56
- }, preview.domain), preview.title && /*#__PURE__*/React.createElement("div", {
57
- className: "CustomLinkPreview__title"
58
- }, preview.title), preview.description && /*#__PURE__*/React.createElement("div", {
59
- className: "CustomLinkPreview__description"
60
- }, preview.description));
21
+ function LinkPreviewContent({ url }) {
22
+ const { preview } = useSuspenseRequest(url);
23
+ if (null === preview) return null;
24
+ return /*#__PURE__*/ __rspack_external_react.createElement("div", {
25
+ className: "CustomLinkPreview__container"
26
+ }, preview.img && /*#__PURE__*/ __rspack_external_react.createElement("div", {
27
+ className: "CustomLinkPreview__imageWrapper"
28
+ }, /*#__PURE__*/ __rspack_external_react.createElement("img", {
29
+ src: preview.img,
30
+ alt: preview.title,
31
+ className: "CustomLinkPreview__image"
32
+ })), preview.domain && /*#__PURE__*/ __rspack_external_react.createElement("div", {
33
+ className: "CustomLinkPreview__domain"
34
+ }, preview.domain), preview.title && /*#__PURE__*/ __rspack_external_react.createElement("div", {
35
+ className: "CustomLinkPreview__title"
36
+ }, preview.title), preview.description && /*#__PURE__*/ __rspack_external_react.createElement("div", {
37
+ className: "CustomLinkPreview__description"
38
+ }, preview.description));
61
39
  }
62
40
  function Glimmer(props) {
63
- return /*#__PURE__*/React.createElement("div", Object.assign({
64
- className: "CustomLinkPreview__glimmer"
65
- }, props, {
66
- style: {
67
- animationDelay: String((props.index || 0) * 300),
68
- ...(props.style || {})
69
- }
70
- }));
41
+ return /*#__PURE__*/ __rspack_external_react.createElement("div", {
42
+ className: "CustomLinkPreview__glimmer",
43
+ ...props,
44
+ style: {
45
+ animationDelay: String(300 * (props.index || 0)),
46
+ ...props.style || {}
47
+ }
48
+ });
71
49
  }
72
- export function LinkPreview({
73
- url
74
- }) {
75
- return /*#__PURE__*/React.createElement(Suspense, {
76
- fallback: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Glimmer, {
77
- style: {
78
- height: "80px"
79
- },
80
- index: 0
81
- }), /*#__PURE__*/React.createElement(Glimmer, {
82
- style: {
83
- width: "60%"
84
- },
85
- index: 1
86
- }), /*#__PURE__*/React.createElement(Glimmer, {
87
- style: {
88
- width: "80%"
89
- },
90
- index: 2
91
- }))
92
- }, /*#__PURE__*/React.createElement(LinkPreviewContent, {
93
- url: url
94
- }));
50
+ function LinkPreview({ url }) {
51
+ return /*#__PURE__*/ __rspack_external_react.createElement(__rspack_external_react.Suspense, {
52
+ fallback: /*#__PURE__*/ __rspack_external_react.createElement(__rspack_external_react.Fragment, null, /*#__PURE__*/ __rspack_external_react.createElement(Glimmer, {
53
+ style: {
54
+ height: "80px"
55
+ },
56
+ index: 0
57
+ }), /*#__PURE__*/ __rspack_external_react.createElement(Glimmer, {
58
+ style: {
59
+ width: "60%"
60
+ },
61
+ index: 1
62
+ }), /*#__PURE__*/ __rspack_external_react.createElement(Glimmer, {
63
+ style: {
64
+ width: "80%"
65
+ },
66
+ index: 2
67
+ }))
68
+ }, /*#__PURE__*/ __rspack_external_react.createElement(LinkPreviewContent, {
69
+ url: url
70
+ }));
95
71
  }
72
+ export { LinkPreview };
96
73
 
97
74
  //# sourceMappingURL=LinkPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Suspense","PREVIEW_CACHE","URL_MATCHER","useSuspenseRequest","url","cached","match","preview","fetch","encodeURI","then","response","json","catch","Promise","LinkPreviewContent","createElement","className","img","src","alt","title","domain","description","Glimmer","props","Object","assign","style","animationDelay","String","index","LinkPreview","fallback","Fragment","height","width"],"sources":["LinkPreview.tsx"],"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 */\n\nimport \"./LinkPreview.css\";\n\nimport * as React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { Suspense } from \"react\";\n\ntype Preview = {\n title: string;\n description: string;\n img: string;\n domain: string;\n} | null;\n\n// Cached responses or running request promises\nconst PREVIEW_CACHE: Record<string, Promise<Preview> | { preview: Preview }> = {};\n\nconst URL_MATCHER =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\n\nfunction useSuspenseRequest(url: string) {\n let cached = PREVIEW_CACHE[url];\n\n if (!url.match(URL_MATCHER)) {\n return { preview: null };\n }\n\n if (!cached) {\n cached = PREVIEW_CACHE[url] = fetch(`/api/link-preview?url=${encodeURI(url)}`)\n .then(response => response.json())\n .then(preview => {\n PREVIEW_CACHE[url] = preview;\n return preview;\n })\n .catch(() => {\n PREVIEW_CACHE[url] = { preview: null };\n });\n }\n\n if (cached instanceof Promise) {\n throw cached;\n }\n\n return cached;\n}\n\nfunction LinkPreviewContent({\n url\n}: Readonly<{\n url: string;\n}>): React.JSX.Element | null {\n const { preview } = useSuspenseRequest(url);\n if (preview === null) {\n return null;\n }\n return (\n <div className=\"CustomLinkPreview__container\">\n {preview.img && (\n <div className=\"CustomLinkPreview__imageWrapper\">\n <img\n src={preview.img}\n alt={preview.title}\n className=\"CustomLinkPreview__image\"\n />\n </div>\n )}\n {preview.domain && <div className=\"CustomLinkPreview__domain\">{preview.domain}</div>}\n {preview.title && <div className=\"CustomLinkPreview__title\">{preview.title}</div>}\n {preview.description && (\n <div className=\"CustomLinkPreview__description\">{preview.description}</div>\n )}\n </div>\n );\n}\n\nfunction Glimmer(props: { style: CSSProperties; index: number }): React.JSX.Element {\n return (\n <div\n className=\"CustomLinkPreview__glimmer\"\n {...props}\n style={{\n animationDelay: String((props.index || 0) * 300),\n ...(props.style || {})\n }}\n />\n );\n}\n\nexport function LinkPreview({\n url\n}: Readonly<{\n url: string;\n}>): React.JSX.Element {\n return (\n <Suspense\n fallback={\n <>\n <Glimmer style={{ height: \"80px\" }} index={0} />\n <Glimmer style={{ width: \"60%\" }} index={1} />\n <Glimmer style={{ width: \"80%\" }} index={2} />\n </>\n }\n >\n <LinkPreviewContent url={url} />\n </Suspense>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,QAAQ,QAAQ,OAAO;AAShC;AACA,MAAMC,aAAsE,GAAG,CAAC,CAAC;AAEjF,MAAMC,WAAW,GACb,iHAAiH;AAErH,SAASC,kBAAkBA,CAACC,GAAW,EAAE;EACrC,IAAIC,MAAM,GAAGJ,aAAa,CAACG,GAAG,CAAC;EAE/B,IAAI,CAACA,GAAG,CAACE,KAAK,CAACJ,WAAW,CAAC,EAAE;IACzB,OAAO;MAAEK,OAAO,EAAE;IAAK,CAAC;EAC5B;EAEA,IAAI,CAACF,MAAM,EAAE;IACTA,MAAM,GAAGJ,aAAa,CAACG,GAAG,CAAC,GAAGI,KAAK,CAAC,yBAAyBC,SAAS,CAACL,GAAG,CAAC,EAAE,CAAC,CACzEM,IAAI,CAACC,QAAQ,IAAIA,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CACjCF,IAAI,CAACH,OAAO,IAAI;MACbN,aAAa,CAACG,GAAG,CAAC,GAAGG,OAAO;MAC5B,OAAOA,OAAO;IAClB,CAAC,CAAC,CACDM,KAAK,CAAC,MAAM;MACTZ,aAAa,CAACG,GAAG,CAAC,GAAG;QAAEG,OAAO,EAAE;MAAK,CAAC;IAC1C,CAAC,CAAC;EACV;EAEA,IAAIF,MAAM,YAAYS,OAAO,EAAE;IAC3B,MAAMT,MAAM;EAChB;EAEA,OAAOA,MAAM;AACjB;AAEA,SAASU,kBAAkBA,CAAC;EACxBX;AAGH,CAAC,EAA4B;EAC1B,MAAM;IAAEG;EAAQ,CAAC,GAAGJ,kBAAkB,CAACC,GAAG,CAAC;EAC3C,IAAIG,OAAO,KAAK,IAAI,EAAE;IAClB,OAAO,IAAI;EACf;EACA,oBACIR,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAA8B,GACxCV,OAAO,CAACW,GAAG,iBACRnB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAAiC,gBAC5ClB,KAAA,CAAAiB,aAAA;IACIG,GAAG,EAAEZ,OAAO,CAACW,GAAI;IACjBE,GAAG,EAAEb,OAAO,CAACc,KAAM;IACnBJ,SAAS,EAAC;EAA0B,CACvC,CACA,CACR,EACAV,OAAO,CAACe,MAAM,iBAAIvB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAA2B,GAAEV,OAAO,CAACe,MAAY,CAAC,EACnFf,OAAO,CAACc,KAAK,iBAAItB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAA0B,GAAEV,OAAO,CAACc,KAAW,CAAC,EAChFd,OAAO,CAACgB,WAAW,iBAChBxB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAAgC,GAAEV,OAAO,CAACgB,WAAiB,CAE7E,CAAC;AAEd;AAEA,SAASC,OAAOA,CAACC,KAA8C,EAAqB;EAChF,oBACI1B,KAAA,CAAAiB,aAAA,QAAAU,MAAA,CAAAC,MAAA;IACIV,SAAS,EAAC;EAA4B,GAClCQ,KAAK;IACTG,KAAK,EAAE;MACHC,cAAc,EAAEC,MAAM,CAAC,CAACL,KAAK,CAACM,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;MAChD,IAAIN,KAAK,CAACG,KAAK,IAAI,CAAC,CAAC;IACzB;EAAE,EACL,CAAC;AAEV;AAEA,OAAO,SAASI,WAAWA,CAAC;EACxB5B;AAGH,CAAC,EAAqB;EACnB,oBACIL,KAAA,CAAAiB,aAAA,CAAChB,QAAQ;IACLiC,QAAQ,eACJlC,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAmC,QAAA,qBACInC,KAAA,CAAAiB,aAAA,CAACQ,OAAO;MAACI,KAAK,EAAE;QAAEO,MAAM,EAAE;MAAO,CAAE;MAACJ,KAAK,EAAE;IAAE,CAAE,CAAC,eAChDhC,KAAA,CAAAiB,aAAA,CAACQ,OAAO;MAACI,KAAK,EAAE;QAAEQ,KAAK,EAAE;MAAM,CAAE;MAACL,KAAK,EAAE;IAAE,CAAE,CAAC,eAC9ChC,KAAA,CAAAiB,aAAA,CAACQ,OAAO;MAACI,KAAK,EAAE;QAAEQ,KAAK,EAAE;MAAM,CAAE;MAACL,KAAK,EAAE;IAAE,CAAE,CAC/C;EACL,gBAEDhC,KAAA,CAAAiB,aAAA,CAACD,kBAAkB;IAACX,GAAG,EAAEA;EAAI,CAAE,CACzB,CAAC;AAEnB","ignoreList":[]}
1
+ {"version":3,"file":"ui/LinkPreview.js","sources":["../../src/ui/LinkPreview.tsx"],"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 */\n\nimport \"./LinkPreview.css\";\n\nimport * as React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { Suspense } from \"react\";\n\ntype Preview = {\n title: string;\n description: string;\n img: string;\n domain: string;\n} | null;\n\n// Cached responses or running request promises\nconst PREVIEW_CACHE: Record<string, Promise<Preview> | { preview: Preview }> = {};\n\nconst URL_MATCHER =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\n\nfunction useSuspenseRequest(url: string) {\n let cached = PREVIEW_CACHE[url];\n\n if (!url.match(URL_MATCHER)) {\n return { preview: null };\n }\n\n if (!cached) {\n cached = PREVIEW_CACHE[url] = fetch(`/api/link-preview?url=${encodeURI(url)}`)\n .then(response => response.json())\n .then(preview => {\n PREVIEW_CACHE[url] = preview;\n return preview;\n })\n .catch(() => {\n PREVIEW_CACHE[url] = { preview: null };\n });\n }\n\n if (cached instanceof Promise) {\n throw cached;\n }\n\n return cached;\n}\n\nfunction LinkPreviewContent({\n url\n}: Readonly<{\n url: string;\n}>): React.JSX.Element | null {\n const { preview } = useSuspenseRequest(url);\n if (preview === null) {\n return null;\n }\n return (\n <div className=\"CustomLinkPreview__container\">\n {preview.img && (\n <div className=\"CustomLinkPreview__imageWrapper\">\n <img\n src={preview.img}\n alt={preview.title}\n className=\"CustomLinkPreview__image\"\n />\n </div>\n )}\n {preview.domain && <div className=\"CustomLinkPreview__domain\">{preview.domain}</div>}\n {preview.title && <div className=\"CustomLinkPreview__title\">{preview.title}</div>}\n {preview.description && (\n <div className=\"CustomLinkPreview__description\">{preview.description}</div>\n )}\n </div>\n );\n}\n\nfunction Glimmer(props: { style: CSSProperties; index: number }): React.JSX.Element {\n return (\n <div\n className=\"CustomLinkPreview__glimmer\"\n {...props}\n style={{\n animationDelay: String((props.index || 0) * 300),\n ...(props.style || {})\n }}\n />\n );\n}\n\nexport function LinkPreview({\n url\n}: Readonly<{\n url: string;\n}>): React.JSX.Element {\n return (\n <Suspense\n fallback={\n <>\n <Glimmer style={{ height: \"80px\" }} index={0} />\n <Glimmer style={{ width: \"60%\" }} index={1} />\n <Glimmer style={{ width: \"80%\" }} index={2} />\n </>\n }\n >\n <LinkPreviewContent url={url} />\n </Suspense>\n );\n}\n"],"names":["PREVIEW_CACHE","URL_MATCHER","useSuspenseRequest","url","cached","fetch","encodeURI","response","preview","Promise","LinkPreviewContent","Glimmer","props","String","LinkPreview","Suspense"],"mappings":";;AAsBA,MAAMA,gBAAyE,CAAC;AAEhF,MAAMC,cACF;AAEJ,SAASC,mBAAmBC,GAAW;IACnC,IAAIC,SAASJ,aAAa,CAACG,IAAI;IAE/B,IAAI,CAACA,IAAI,KAAK,CAACF,cACX,OAAO;QAAE,SAAS;IAAK;IAG3B,IAAI,CAACG,QACDA,SAASJ,aAAa,CAACG,IAAI,GAAGE,MAAM,CAAC,sBAAsB,EAAEC,UAAUH,MAAM,EACxE,IAAI,CAACI,CAAAA,WAAYA,SAAS,IAAI,IAC9B,IAAI,CAACC,CAAAA;QACFR,aAAa,CAACG,IAAI,GAAGK;QACrB,OAAOA;IACX,GACC,KAAK,CAAC;QACHR,aAAa,CAACG,IAAI,GAAG;YAAE,SAAS;QAAK;IACzC;IAGR,IAAIC,kBAAkBK,SAClB,MAAML;IAGV,OAAOA;AACX;AAEA,SAASM,mBAAmB,EACxBP,GAAG,EAGL;IACE,MAAM,EAAEK,OAAO,EAAE,GAAGN,mBAAmBC;IACvC,IAAIK,AAAY,SAAZA,SACA,OAAO;IAEX,OAAO,WAAP,GACI,sCAAC;QAAI,WAAU;OACVA,QAAQ,GAAG,IAAI,WAAJ,GACR,sCAAC;QAAI,WAAU;qBACX,sCAAC;QACG,KAAKA,QAAQ,GAAG;QAChB,KAAKA,QAAQ,KAAK;QAClB,WAAU;SAIrBA,QAAQ,MAAM,IAAI,WAAJ,GAAI,sCAAC;QAAI,WAAU;OAA6BA,QAAQ,MAAM,GAC5EA,QAAQ,KAAK,IAAI,WAAJ,GAAI,sCAAC;QAAI,WAAU;OAA4BA,QAAQ,KAAK,GACzEA,QAAQ,WAAW,IAAI,WAAJ,GAChB,sCAAC;QAAI,WAAU;OAAkCA,QAAQ,WAAW;AAIpF;AAEA,SAASG,QAAQC,KAA8C;IAC3D,OAAO,WAAP,GACI,sCAAC;QACG,WAAU;QACT,GAAGA,KAAK;QACT,OAAO;YACH,gBAAgBC,OAAQD,AAAoB,MAApBA,CAAAA,MAAM,KAAK,IAAI;YACvC,GAAIA,MAAM,KAAK,IAAI,CAAC,CAAC;QACzB;;AAGZ;AAEO,SAASE,YAAY,EACxBX,GAAG,EAGL;IACE,OAAO,WAAP,GACI,sCAACY,wBAAAA,QAAQA,EAAAA;QACL,wBACI,4FACI,sCAACJ,SAAOA;YAAC,OAAO;gBAAE,QAAQ;YAAO;YAAG,OAAO;0BAC3C,sCAACA,SAAOA;YAAC,OAAO;gBAAE,OAAO;YAAM;YAAG,OAAO;0BACzC,sCAACA,SAAOA;YAAC,OAAO;gBAAE,OAAO;YAAM;YAAG,OAAO;;qBAIjD,sCAACD,oBAAkBA;QAAC,KAAKP;;AAGrC"}
package/ui/Placeholder.js CHANGED
@@ -1,24 +1,13 @@
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
-
9
1
  import "./Placeholder.css";
10
- import * as React from "react";
11
- export function Placeholder({
12
- children,
13
- className,
14
- styles
15
- }) {
16
- return /*#__PURE__*/React.createElement("div", {
17
- style: {
18
- ...styles
19
- },
20
- className: className || "Placeholder__root"
21
- }, children);
2
+ import * as __rspack_external_react from "react";
3
+ function Placeholder({ children, className, styles }) {
4
+ return /*#__PURE__*/ __rspack_external_react.createElement("div", {
5
+ style: {
6
+ ...styles
7
+ },
8
+ className: className || "Placeholder__root"
9
+ }, children);
22
10
  }
11
+ export { Placeholder };
23
12
 
24
13
  //# sourceMappingURL=Placeholder.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Placeholder","children","className","styles","createElement","style"],"sources":["Placeholder.tsx"],"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 */\n\nimport \"./Placeholder.css\";\n\nimport * as React from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport function Placeholder({\n children,\n className,\n styles\n}: {\n children: ReactNode;\n className?: string;\n styles?: React.CSSProperties;\n}): React.JSX.Element {\n return (\n <div style={{ ...styles }} className={className || \"Placeholder__root\"}>\n {children}\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,OAAO,SAASC,WAAWA,CAAC;EACxBC,QAAQ;EACRC,SAAS;EACTC;AAKJ,CAAC,EAAqB;EAClB,oBACIJ,KAAA,CAAAK,aAAA;IAAKC,KAAK,EAAE;MAAE,GAAGF;IAAO,CAAE;IAACD,SAAS,EAAEA,SAAS,IAAI;EAAoB,GAClED,QACA,CAAC;AAEd","ignoreList":[]}
1
+ {"version":3,"file":"ui/Placeholder.js","sources":["../../src/ui/Placeholder.tsx"],"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 */\n\nimport \"./Placeholder.css\";\n\nimport * as React from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport function Placeholder({\n children,\n className,\n styles\n}: {\n children: ReactNode;\n className?: string;\n styles?: React.CSSProperties;\n}): React.JSX.Element {\n return (\n <div style={{ ...styles }} className={className || \"Placeholder__root\"}>\n {children}\n </div>\n );\n}\n"],"names":["Placeholder","children","className","styles"],"mappings":";;AAaO,SAASA,YAAY,EACxBC,QAAQ,EACRC,SAAS,EACTC,MAAM,EAKT;IACG,OAAO,WAAP,GACI,sCAAC;QAAI,OAAO;YAAE,GAAGA,MAAM;QAAC;QAAG,WAAWD,aAAa;OAC9CD;AAGb"}
package/ui/TextInput.js CHANGED
@@ -1,34 +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
-
9
1
  import "./Input.css";
10
- import * as React from "react";
11
- export default function TextInput({
12
- label,
13
- value,
14
- onChange,
15
- placeholder = "",
16
- "data-test-id": dataTestId
17
- }) {
18
- return /*#__PURE__*/React.createElement("div", {
19
- className: "Input__wrapper"
20
- }, /*#__PURE__*/React.createElement("label", {
21
- className: "Input__label"
22
- }, label), /*#__PURE__*/React.createElement("input", {
23
- type: "text",
24
- className: "Input__input",
25
- placeholder: placeholder,
26
- value: value,
27
- onChange: e => {
28
- onChange(e.target.value);
29
- },
30
- "data-test-id": dataTestId
31
- }));
2
+ import * as __rspack_external_react from "react";
3
+ function TextInput({ label, value, onChange, placeholder = "", "data-test-id": dataTestId }) {
4
+ return /*#__PURE__*/ __rspack_external_react.createElement("div", {
5
+ className: "Input__wrapper"
6
+ }, /*#__PURE__*/ __rspack_external_react.createElement("label", {
7
+ className: "Input__label"
8
+ }, label), /*#__PURE__*/ __rspack_external_react.createElement("input", {
9
+ type: "text",
10
+ className: "Input__input",
11
+ placeholder: placeholder,
12
+ value: value,
13
+ onChange: (e)=>{
14
+ onChange(e.target.value);
15
+ },
16
+ "data-test-id": dataTestId
17
+ }));
32
18
  }
19
+ export default TextInput;
33
20
 
34
21
  //# sourceMappingURL=TextInput.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","TextInput","label","value","onChange","placeholder","dataTestId","createElement","className","type","e","target"],"sources":["TextInput.tsx"],"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 */\n\nimport \"./Input.css\";\n\nimport * as React from \"react\";\n\ntype Props = Readonly<{\n \"data-test-id\"?: string;\n label: string;\n onChange: (val: string) => void;\n placeholder?: string;\n value: string;\n}>;\n\nexport default function TextInput({\n label,\n value,\n onChange,\n placeholder = \"\",\n \"data-test-id\": dataTestId\n}: Props): React.JSX.Element {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type=\"text\"\n className=\"Input__input\"\n placeholder={placeholder}\n value={value}\n onChange={e => {\n onChange(e.target.value);\n }}\n data-test-id={dataTestId}\n />\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAU9B,eAAe,SAASC,SAASA,CAAC;EAC9BC,KAAK;EACLC,KAAK;EACLC,QAAQ;EACRC,WAAW,GAAG,EAAE;EAChB,cAAc,EAAEC;AACb,CAAC,EAAqB;EACzB,oBACIN,KAAA,CAAAO,aAAA;IAAKC,SAAS,EAAC;EAAgB,gBAC3BR,KAAA,CAAAO,aAAA;IAAOC,SAAS,EAAC;EAAc,GAAEN,KAAa,CAAC,eAC/CF,KAAA,CAAAO,aAAA;IACIE,IAAI,EAAC,MAAM;IACXD,SAAS,EAAC,cAAc;IACxBH,WAAW,EAAEA,WAAY;IACzBF,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEM,CAAC,IAAI;MACXN,QAAQ,CAACM,CAAC,CAACC,MAAM,CAACR,KAAK,CAAC;IAC5B,CAAE;IACF,gBAAcG;EAAW,CAC5B,CACA,CAAC;AAEd","ignoreList":[]}
1
+ {"version":3,"file":"ui/TextInput.js","sources":["../../src/ui/TextInput.tsx"],"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 */\n\nimport \"./Input.css\";\n\nimport * as React from \"react\";\n\ntype Props = Readonly<{\n \"data-test-id\"?: string;\n label: string;\n onChange: (val: string) => void;\n placeholder?: string;\n value: string;\n}>;\n\nexport default function TextInput({\n label,\n value,\n onChange,\n placeholder = \"\",\n \"data-test-id\": dataTestId\n}: Props): React.JSX.Element {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type=\"text\"\n className=\"Input__input\"\n placeholder={placeholder}\n value={value}\n onChange={e => {\n onChange(e.target.value);\n }}\n data-test-id={dataTestId}\n />\n </div>\n );\n}\n"],"names":["TextInput","label","value","onChange","placeholder","dataTestId","e"],"mappings":";;AAoBe,SAASA,UAAU,EAC9BC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRC,cAAc,EAAE,EAChB,gBAAgBC,UAAU,EACtB;IACJ,OAAO,WAAP,GACI,sCAAC;QAAI,WAAU;qBACX,sCAAC;QAAM,WAAU;OAAgBJ,QAAAA,WAAAA,GACjC,sCAAC;QACG,MAAK;QACL,WAAU;QACV,aAAaG;QACb,OAAOF;QACP,UAAUI,CAAAA;YACNH,SAASG,EAAE,MAAM,CAAC,KAAK;QAC3B;QACA,gBAAcD;;AAI9B"}
@@ -1,77 +1,68 @@
1
- import React, { useRef, useState } from "react";
2
- function MenuContainer({
3
- children,
4
- menuContainerRef,
5
- onClose
6
- }) {
7
- const handleKeyDown = event => {
8
- const key = event.key;
9
- if (["Escape", "ArrowUp", "ArrowDown", "Tab"].includes(key)) {
10
- event.preventDefault();
11
- }
12
- if (key === "Escape" || key === "Tab") {
13
- onClose();
14
- }
15
- };
16
- const handleContainerClick = e => {
17
- e.preventDefault();
18
- };
19
- return /*#__PURE__*/React.createElement("div", {
20
- style: {
21
- position: "relative"
22
- }
23
- }, /*#__PURE__*/React.createElement("div", {
24
- onClick: e => handleContainerClick(e),
25
- style: {
26
- position: "absolute",
27
- top: -10,
28
- left: 0,
29
- width: 240,
30
- backgroundColor: "#fff"
31
- },
32
- ref: menuContainerRef ?? null,
33
- onKeyDown: handleKeyDown
34
- }, children));
1
+ import react, { useRef, useState } from "react";
2
+ function MenuContainer({ children, menuContainerRef, onClose }) {
3
+ const handleKeyDown = (event)=>{
4
+ const key = event.key;
5
+ if ([
6
+ "Escape",
7
+ "ArrowUp",
8
+ "ArrowDown",
9
+ "Tab"
10
+ ].includes(key)) event.preventDefault();
11
+ if ("Escape" === key || "Tab" === key) onClose();
12
+ };
13
+ const handleContainerClick = (e)=>{
14
+ e.preventDefault();
15
+ };
16
+ return /*#__PURE__*/ react.createElement("div", {
17
+ style: {
18
+ position: "relative"
19
+ }
20
+ }, /*#__PURE__*/ react.createElement("div", {
21
+ onClick: (e)=>handleContainerClick(e),
22
+ style: {
23
+ position: "absolute",
24
+ top: -10,
25
+ left: 0,
26
+ width: 240,
27
+ backgroundColor: "#fff"
28
+ },
29
+ ref: menuContainerRef ?? null,
30
+ onKeyDown: handleKeyDown
31
+ }, children));
35
32
  }
36
- export const ToolbarActionDialog = ({
37
- disabled,
38
- buttonAriaLabel,
39
- buttonClassName,
40
- buttonIconClassName,
41
- buttonLabel,
42
- children
43
- }) => {
44
- const menuWindowRef = useRef(null);
45
- const [showDropDown, setShowDropDown] = useState(false);
46
- const handleClose = () => {
47
- if (menuWindowRef && menuWindowRef.current) {
48
- setShowDropDown(false);
49
- menuWindowRef.current.focus();
50
- }
51
- };
52
- return /*#__PURE__*/React.createElement("div", {
53
- style: {
54
- position: "relative"
55
- }
56
- }, /*#__PURE__*/React.createElement("button", {
57
- style: {
58
- position: "relative"
59
- },
60
- disabled: disabled,
61
- "aria-label": buttonAriaLabel || buttonLabel,
62
- className: buttonClassName,
63
- onClick: () => {
64
- setShowDropDown(!showDropDown);
65
- }
66
- }, buttonIconClassName && /*#__PURE__*/React.createElement("span", {
67
- className: buttonIconClassName
68
- }), buttonLabel && /*#__PURE__*/React.createElement("span", {
69
- className: "text dropdown-button-text"
70
- }, buttonLabel), /*#__PURE__*/React.createElement("i", {
71
- className: "chevron-down"
72
- })), showDropDown && /*#__PURE__*/React.createElement(MenuContainer, {
73
- onClose: handleClose
74
- }, children));
33
+ const ToolbarActionDialog = ({ disabled, buttonAriaLabel, buttonClassName, buttonIconClassName, buttonLabel, children })=>{
34
+ const menuWindowRef = useRef(null);
35
+ const [showDropDown, setShowDropDown] = useState(false);
36
+ const handleClose = ()=>{
37
+ if (menuWindowRef && menuWindowRef.current) {
38
+ setShowDropDown(false);
39
+ menuWindowRef.current.focus();
40
+ }
41
+ };
42
+ return /*#__PURE__*/ react.createElement("div", {
43
+ style: {
44
+ position: "relative"
45
+ }
46
+ }, /*#__PURE__*/ react.createElement("button", {
47
+ style: {
48
+ position: "relative"
49
+ },
50
+ disabled: disabled,
51
+ "aria-label": buttonAriaLabel || buttonLabel,
52
+ className: buttonClassName,
53
+ onClick: ()=>{
54
+ setShowDropDown(!showDropDown);
55
+ }
56
+ }, buttonIconClassName && /*#__PURE__*/ react.createElement("span", {
57
+ className: buttonIconClassName
58
+ }), buttonLabel && /*#__PURE__*/ react.createElement("span", {
59
+ className: "text dropdown-button-text"
60
+ }, buttonLabel), /*#__PURE__*/ react.createElement("i", {
61
+ className: "chevron-down"
62
+ })), showDropDown && /*#__PURE__*/ react.createElement(MenuContainer, {
63
+ onClose: handleClose
64
+ }, children));
75
65
  };
66
+ export { ToolbarActionDialog };
76
67
 
77
68
  //# sourceMappingURL=ToolbarActionDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useState","MenuContainer","children","menuContainerRef","onClose","handleKeyDown","event","key","includes","preventDefault","handleContainerClick","e","createElement","style","position","onClick","top","left","width","backgroundColor","ref","onKeyDown","ToolbarActionDialog","disabled","buttonAriaLabel","buttonClassName","buttonIconClassName","buttonLabel","menuWindowRef","showDropDown","setShowDropDown","handleClose","current","focus","className"],"sources":["ToolbarActionDialog.tsx"],"sourcesContent":["import React, { useRef, useState } 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 };\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}\n\nexport const ToolbarActionDialog = ({\n disabled,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n buttonLabel,\n children\n}: ToolbarActionDialogProps): React.JSX.Element => {\n const menuWindowRef = useRef<HTMLDivElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n if (menuWindowRef && menuWindowRef.current) {\n setShowDropDown(false);\n menuWindowRef.current.focus();\n }\n };\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":"AAAA,OAAOA,KAAK,IAAIC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE/C,SAASC,aAAaA,CAAC;EACnBC,QAAQ;EACRC,gBAAgB;EAChBC;AAKJ,CAAC,EAAE;EACC,MAAMC,aAAa,GAAIC,KAA0C,IAAK;IAClE,MAAMC,GAAG,GAAGD,KAAK,CAACC,GAAG;IAErB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACD,GAAG,CAAC,EAAE;MACzDD,KAAK,CAACG,cAAc,CAAC,CAAC;IAC1B;IAEA,IAAIF,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,KAAK,EAAE;MACnCH,OAAO,CAAC,CAAC;IACb;EACJ,CAAC;EAED,MAAMM,oBAAoB,GAAIC,CAA+C,IAAK;IAC9EA,CAAC,CAACF,cAAc,CAAC,CAAC;EACtB,CAAC;EAED,oBACIX,KAAA,CAAAc,aAAA;IAAKC,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAW;EAAE,gBACjChB,KAAA,CAAAc,aAAA;IACIG,OAAO,EAAEJ,CAAC,IAAID,oBAAoB,CAACC,CAAC,CAAE;IACtCE,KAAK,EAAE;MACHC,QAAQ,EAAE,UAAU;MACpBE,GAAG,EAAE,CAAC,EAAE;MACRC,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE,GAAG;MACVC,eAAe,EAAE;IACrB,CAAE;IACFC,GAAG,EAAEjB,gBAAgB,IAAI,IAAK;IAC9BkB,SAAS,EAAEhB;EAAc,GAExBH,QACA,CACJ,CAAC;AAEd;AAUA,OAAO,MAAMoB,mBAAmB,GAAGA,CAAC;EAChCC,QAAQ;EACRC,eAAe;EACfC,eAAe;EACfC,mBAAmB;EACnBC,WAAW;EACXzB;AACsB,CAAC,KAAwB;EAC/C,MAAM0B,aAAa,GAAG7B,MAAM,CAAiB,IAAI,CAAC;EAClD,MAAM,CAAC8B,YAAY,EAAEC,eAAe,CAAC,GAAG9B,QAAQ,CAAC,KAAK,CAAC;EAEvD,MAAM+B,WAAW,GAAGA,CAAA,KAAM;IACtB,IAAIH,aAAa,IAAIA,aAAa,CAACI,OAAO,EAAE;MACxCF,eAAe,CAAC,KAAK,CAAC;MACtBF,aAAa,CAACI,OAAO,CAACC,KAAK,CAAC,CAAC;IACjC;EACJ,CAAC;EAED,oBACInC,KAAA,CAAAc,aAAA;IAAKC,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAW;EAAE,gBACjChB,KAAA,CAAAc,aAAA;IACIC,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAW,CAAE;IAChCS,QAAQ,EAAEA,QAAS;IACnB,cAAYC,eAAe,IAAIG,WAAY;IAC3CO,SAAS,EAAET,eAAgB;IAC3BV,OAAO,EAAEA,CAAA,KAAM;MACXe,eAAe,CAAC,CAACD,YAAY,CAAC;IAClC;EAAE,GAEDH,mBAAmB,iBAAI5B,KAAA,CAAAc,aAAA;IAAMsB,SAAS,EAAER;EAAoB,CAAE,CAAC,EAC/DC,WAAW,iBAAI7B,KAAA,CAAAc,aAAA;IAAMsB,SAAS,EAAC;EAA2B,GAAEP,WAAkB,CAAC,eAChF7B,KAAA,CAAAc,aAAA;IAAGsB,SAAS,EAAC;EAAc,CAAE,CACzB,CAAC,EACRL,YAAY,iBAAI/B,KAAA,CAAAc,aAAA,CAACX,aAAa;IAACG,OAAO,EAAE2B;EAAY,GAAE7B,QAAwB,CAC9E,CAAC;AAEd,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/ToolbarActionDialog.js","sources":["../../src/ui/ToolbarActionDialog.tsx"],"sourcesContent":["import React, { useRef, useState } 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 };\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}\n\nexport const ToolbarActionDialog = ({\n disabled,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n buttonLabel,\n children\n}: ToolbarActionDialogProps): React.JSX.Element => {\n const menuWindowRef = useRef<HTMLDivElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n if (menuWindowRef && menuWindowRef.current) {\n setShowDropDown(false);\n menuWindowRef.current.focus();\n }\n };\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"],"names":["MenuContainer","children","menuContainerRef","onClose","handleKeyDown","event","key","handleContainerClick","e","ToolbarActionDialog","disabled","buttonAriaLabel","buttonClassName","buttonIconClassName","buttonLabel","menuWindowRef","useRef","showDropDown","setShowDropDown","useState","handleClose"],"mappings":";AAEA,SAASA,cAAc,EACnBC,QAAQ,EACRC,gBAAgB,EAChBC,OAAO,EAKV;IACG,MAAMC,gBAAgB,CAACC;QACnB,MAAMC,MAAMD,MAAM,GAAG;QAErB,IAAI;YAAC;YAAU;YAAW;YAAa;SAAM,CAAC,QAAQ,CAACC,MACnDD,MAAM,cAAc;QAGxB,IAAIC,AAAQ,aAARA,OAAoBA,AAAQ,UAARA,KACpBH;IAER;IAEA,MAAMI,uBAAuB,CAACC;QAC1BA,EAAE,cAAc;IACpB;IAEA,OAAO,WAAP,GACI,oBAAC;QAAI,OAAO;YAAE,UAAU;QAAW;qBAC/B,oBAAC;QACG,SAASA,CAAAA,IAAKD,qBAAqBC;QACnC,OAAO;YACH,UAAU;YACV,KAAK;YACL,MAAM;YACN,OAAO;YACP,iBAAiB;QACrB;QACA,KAAKN,oBAAoB;QACzB,WAAWE;OAEVH;AAIjB;AAUO,MAAMQ,sBAAsB,CAAC,EAChCC,QAAQ,EACRC,eAAe,EACfC,eAAe,EACfC,mBAAmB,EACnBC,WAAW,EACXb,QAAQ,EACe;IACvB,MAAMc,gBAAgBC,OAAuB;IAC7C,MAAM,CAACC,cAAcC,gBAAgB,GAAGC,SAAS;IAEjD,MAAMC,cAAc;QAChB,IAAIL,iBAAiBA,cAAc,OAAO,EAAE;YACxCG,gBAAgB;YAChBH,cAAc,OAAO,CAAC,KAAK;QAC/B;IACJ;IAEA,OAAO,WAAP,GACI,oBAAC;QAAI,OAAO;YAAE,UAAU;QAAW;qBAC/B,oBAAC;QACG,OAAO;YAAE,UAAU;QAAW;QAC9B,UAAUL;QACV,cAAYC,mBAAmBG;QAC/B,WAAWF;QACX,SAAS;YACLM,gBAAgB,CAACD;QACrB;OAECJ,uBAAuB,WAAvBA,GAAuB,oBAAC;QAAK,WAAWA;QACxCC,eAAe,WAAfA,GAAe,oBAAC;QAAK,WAAU;OAA6BA,cAAAA,WAAAA,GAC7D,oBAAC;QAAE,WAAU;SAEhBG,gBAAgB,WAAhBA,GAAgB,oBAACjB,eAAaA;QAAC,SAASoB;OAAcnB;AAGnE"}
@@ -1,3 +1,4 @@
1
- export const CAN_USE_DOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
1
+ const CAN_USE_DOM = "u" > typeof window && void 0 !== window.document && void 0 !== window.document.createElement;
2
+ export { CAN_USE_DOM };
2
3
 
3
4
  //# sourceMappingURL=canUseDOM.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CAN_USE_DOM","window","document","createElement"],"sources":["canUseDOM.ts"],"sourcesContent":["export const CAN_USE_DOM: boolean =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\n"],"mappings":"AAAA,OAAO,MAAMA,WAAoB,GAC7B,OAAOC,MAAM,KAAK,WAAW,IAC7B,OAAOA,MAAM,CAACC,QAAQ,KAAK,WAAW,IACtC,OAAOD,MAAM,CAACC,QAAQ,CAACC,aAAa,KAAK,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"utils/canUseDOM.js","sources":["../../src/utils/canUseDOM.ts"],"sourcesContent":["export const CAN_USE_DOM: boolean =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\n"],"names":["CAN_USE_DOM","window"],"mappings":"AAAO,MAAMA,cACT,AAAkB,MAAlB,OAAOC,UACP,AAA2B,WAApBA,OAAO,QAAQ,IACtB,AAAyC,WAAlCA,OAAO,QAAQ,CAAC,aAAa"}
package/utils/files.js CHANGED
@@ -1,11 +1,12 @@
1
- export const fileToImagePayload = file => {
2
- const imagePayload = {};
3
- imagePayload["id"] = file.id;
4
- imagePayload["src"] = file.src;
5
- imagePayload["altText"] = file.name;
6
- imagePayload["width"] = file.width;
7
- imagePayload["height"] = file.height;
8
- return imagePayload;
1
+ const fileToImagePayload = (file)=>{
2
+ const imagePayload = {};
3
+ imagePayload["id"] = file.id;
4
+ imagePayload["src"] = file.src;
5
+ imagePayload["altText"] = file.name;
6
+ imagePayload["width"] = file.width;
7
+ imagePayload["height"] = file.height;
8
+ return imagePayload;
9
9
  };
10
+ export { fileToImagePayload };
10
11
 
11
12
  //# sourceMappingURL=files.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fileToImagePayload","file","imagePayload","id","src","name","width","height"],"sources":["files.ts"],"sourcesContent":["import type { ImagePayload } from \"~/commands/index.js\";\n\nexport interface FileManagerFileItem {\n id: string;\n src: string;\n name: string;\n type: string; // MIME type\n size: number; // bytes\n // Required for images (apps depend on these for Next.js Image, etc.)\n width?: number;\n height?: number;\n}\n\nexport const fileToImagePayload = (file: FileManagerFileItem): ImagePayload | null => {\n const imagePayload = {} as ImagePayload;\n imagePayload[\"id\"] = file.id;\n imagePayload[\"src\"] = file.src;\n imagePayload[\"altText\"] = file.name;\n imagePayload[\"width\"] = file.width;\n imagePayload[\"height\"] = file.height;\n\n return imagePayload;\n};\n"],"mappings":"AAaA,OAAO,MAAMA,kBAAkB,GAAIC,IAAyB,IAA0B;EAClF,MAAMC,YAAY,GAAG,CAAC,CAAiB;EACvCA,YAAY,CAAC,IAAI,CAAC,GAAGD,IAAI,CAACE,EAAE;EAC5BD,YAAY,CAAC,KAAK,CAAC,GAAGD,IAAI,CAACG,GAAG;EAC9BF,YAAY,CAAC,SAAS,CAAC,GAAGD,IAAI,CAACI,IAAI;EACnCH,YAAY,CAAC,OAAO,CAAC,GAAGD,IAAI,CAACK,KAAK;EAClCJ,YAAY,CAAC,QAAQ,CAAC,GAAGD,IAAI,CAACM,MAAM;EAEpC,OAAOL,YAAY;AACvB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"utils/files.js","sources":["../../src/utils/files.ts"],"sourcesContent":["import type { ImagePayload } from \"~/commands/index.js\";\n\nexport interface FileManagerFileItem {\n id: string;\n src: string;\n name: string;\n type: string; // MIME type\n size: number; // bytes\n // Required for images (apps depend on these for Next.js Image, etc.)\n width?: number;\n height?: number;\n}\n\nexport const fileToImagePayload = (file: FileManagerFileItem): ImagePayload | null => {\n const imagePayload = {} as ImagePayload;\n imagePayload[\"id\"] = file.id;\n imagePayload[\"src\"] = file.src;\n imagePayload[\"altText\"] = file.name;\n imagePayload[\"width\"] = file.width;\n imagePayload[\"height\"] = file.height;\n\n return imagePayload;\n};\n"],"names":["fileToImagePayload","file","imagePayload"],"mappings":"AAaO,MAAMA,qBAAqB,CAACC;IAC/B,MAAMC,eAAe,CAAC;IACtBA,YAAY,CAAC,KAAK,GAAGD,KAAK,EAAE;IAC5BC,YAAY,CAAC,MAAM,GAAGD,KAAK,GAAG;IAC9BC,YAAY,CAAC,UAAU,GAAGD,KAAK,IAAI;IACnCC,YAAY,CAAC,QAAQ,GAAGD,KAAK,KAAK;IAClCC,YAAY,CAAC,SAAS,GAAGD,KAAK,MAAM;IAEpC,OAAOC;AACX"}
@@ -1,23 +1,13 @@
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 function getDOMRangeRect(nativeSelection, rootElement) {
9
- const domRange = nativeSelection.getRangeAt(0);
10
- let rect;
11
- if (nativeSelection.anchorNode === rootElement) {
12
- let inner = rootElement;
13
- while (inner.firstElementChild != null) {
14
- inner = inner.firstElementChild;
15
- }
16
- rect = inner.getBoundingClientRect();
17
- } else {
18
- rect = domRange.getBoundingClientRect();
19
- }
20
- return rect;
1
+ function getDOMRangeRect(nativeSelection, rootElement) {
2
+ const domRange = nativeSelection.getRangeAt(0);
3
+ let rect;
4
+ if (nativeSelection.anchorNode === rootElement) {
5
+ let inner = rootElement;
6
+ while(null != inner.firstElementChild)inner = inner.firstElementChild;
7
+ rect = inner.getBoundingClientRect();
8
+ } else rect = domRange.getBoundingClientRect();
9
+ return rect;
21
10
  }
11
+ export { getDOMRangeRect };
22
12
 
23
13
  //# sourceMappingURL=getDOMRangeRect.js.map
@@ -1 +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;AACA,OAAO,SAASA,eAAeA,CAACC,eAA0B,EAAEC,WAAwB,EAAW;EAC3F,MAAMC,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,CAAC,CAAC;EACxC,CAAC,MAAM;IACHJ,IAAI,GAAGF,QAAQ,CAACM,qBAAqB,CAAC,CAAC;EAC3C;EAEA,OAAOJ,IAAI;AACf","ignoreList":[]}
1
+ {"version":3,"file":"utils/getDOMRangeRect.js","sources":["../../src/utils/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"],"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","rect","inner"],"mappings":"AAOO,SAASA,gBAAgBC,eAA0B,EAAEC,WAAwB;IAChF,MAAMC,WAAWF,gBAAgB,UAAU,CAAC;IAE5C,IAAIG;IAEJ,IAAIH,gBAAgB,UAAU,KAAKC,aAAa;QAC5C,IAAIG,QAAQH;QACZ,MAAOG,AAA2B,QAA3BA,MAAM,iBAAiB,CAC1BA,QAAQA,MAAM,iBAAiB;QAEnCD,OAAOC,MAAM,qBAAqB;IACtC,OACID,OAAOD,SAAS,qBAAqB;IAGzC,OAAOC;AACX"}
@@ -1,25 +1,14 @@
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
1
  import { $isAtNodeEnd } from "@lexical/selection";
9
- export function getSelectedNode(selection) {
10
- const anchor = selection.anchor;
11
- const focus = selection.focus;
12
- const anchorNode = selection.anchor.getNode();
13
- const focusNode = selection.focus.getNode();
14
- if (anchorNode === focusNode) {
15
- return anchorNode;
16
- }
17
- const isBackward = selection.isBackward();
18
- if (isBackward) {
19
- return $isAtNodeEnd(focus) ? anchorNode : focusNode;
20
- } else {
2
+ function getSelectedNode(selection) {
3
+ const anchor = selection.anchor;
4
+ const focus = selection.focus;
5
+ const anchorNode = selection.anchor.getNode();
6
+ const focusNode = selection.focus.getNode();
7
+ if (anchorNode === focusNode) return anchorNode;
8
+ const isBackward = selection.isBackward();
9
+ if (isBackward) return $isAtNodeEnd(focus) ? anchorNode : focusNode;
21
10
  return $isAtNodeEnd(anchor) ? focusNode : anchorNode;
22
- }
23
11
  }
12
+ export { getSelectedNode };
24
13
 
25
14
  //# sourceMappingURL=getSelectedNode.js.map